162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci Functions to query card hardware 462306a36Sopenharmony_ci Copyright (C) 2003-2004 Kevin Thayer <nufan_wfk at yahoo.com> 562306a36Sopenharmony_ci Copyright (C) 2005-2007 Hans Verkuil <hverkuil@xs4all.nl> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "ivtv-driver.h" 1062306a36Sopenharmony_ci#include "ivtv-cards.h" 1162306a36Sopenharmony_ci#include "ivtv-i2c.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#include <media/drv-intf/msp3400.h> 1462306a36Sopenharmony_ci#include <media/i2c/m52790.h> 1562306a36Sopenharmony_ci#include <media/i2c/wm8775.h> 1662306a36Sopenharmony_ci#include <media/i2c/cs53l32a.h> 1762306a36Sopenharmony_ci#include <media/drv-intf/cx25840.h> 1862306a36Sopenharmony_ci#include <media/i2c/upd64031a.h> 1962306a36Sopenharmony_ci 2062306a36Sopenharmony_ci#define MSP_TUNER MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \ 2162306a36Sopenharmony_ci MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER) 2262306a36Sopenharmony_ci#define MSP_SCART1 MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER1, \ 2362306a36Sopenharmony_ci MSP_DSP_IN_SCART, MSP_DSP_IN_SCART) 2462306a36Sopenharmony_ci#define MSP_SCART2 MSP_INPUT(MSP_IN_SCART2, MSP_IN_TUNER1, \ 2562306a36Sopenharmony_ci MSP_DSP_IN_SCART, MSP_DSP_IN_SCART) 2662306a36Sopenharmony_ci#define MSP_SCART3 MSP_INPUT(MSP_IN_SCART3, MSP_IN_TUNER1, \ 2762306a36Sopenharmony_ci MSP_DSP_IN_SCART, MSP_DSP_IN_SCART) 2862306a36Sopenharmony_ci#define MSP_MONO MSP_INPUT(MSP_IN_MONO, MSP_IN_TUNER1, \ 2962306a36Sopenharmony_ci MSP_DSP_IN_SCART, MSP_DSP_IN_SCART) 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define V4L2_STD_PAL_SECAM (V4L2_STD_PAL|V4L2_STD_SECAM) 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci/* usual i2c tuner addresses to probe */ 3462306a36Sopenharmony_cistatic struct ivtv_card_tuner_i2c ivtv_i2c_std = { 3562306a36Sopenharmony_ci .radio = { I2C_CLIENT_END }, 3662306a36Sopenharmony_ci .demod = { 0x43, I2C_CLIENT_END }, 3762306a36Sopenharmony_ci .tv = { 0x61, 0x60, I2C_CLIENT_END }, 3862306a36Sopenharmony_ci}; 3962306a36Sopenharmony_ci 4062306a36Sopenharmony_ci/* as above, but with possible radio tuner */ 4162306a36Sopenharmony_cistatic struct ivtv_card_tuner_i2c ivtv_i2c_radio = { 4262306a36Sopenharmony_ci .radio = { 0x60, I2C_CLIENT_END }, 4362306a36Sopenharmony_ci .demod = { 0x43, I2C_CLIENT_END }, 4462306a36Sopenharmony_ci .tv = { 0x61, I2C_CLIENT_END }, 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci/* using the tda8290+75a combo */ 4862306a36Sopenharmony_cistatic struct ivtv_card_tuner_i2c ivtv_i2c_tda8290 = { 4962306a36Sopenharmony_ci .radio = { I2C_CLIENT_END }, 5062306a36Sopenharmony_ci .demod = { I2C_CLIENT_END }, 5162306a36Sopenharmony_ci .tv = { 0x4b, I2C_CLIENT_END }, 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci/********************** card configuration *******************************/ 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci/* Please add new PCI IDs to: https://pci-ids.ucw.cz/ 5762306a36Sopenharmony_ci This keeps the PCI ID database up to date. Note that the entries 5862306a36Sopenharmony_ci must be added under vendor 0x4444 (Conexant) as subsystem IDs. 5962306a36Sopenharmony_ci New vendor IDs should still be added to the vendor ID list. */ 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci/* Hauppauge PVR-250 cards */ 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci/* Note: for Hauppauge cards the tveeprom information is used instead of PCI IDs */ 6462306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_pvr250 = { 6562306a36Sopenharmony_ci .type = IVTV_CARD_PVR_250, 6662306a36Sopenharmony_ci .name = "Hauppauge WinTV PVR-250", 6762306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 6862306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115, 6962306a36Sopenharmony_ci .hw_audio = IVTV_HW_MSP34XX, 7062306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_MSP34XX, 7162306a36Sopenharmony_ci .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 | 7262306a36Sopenharmony_ci IVTV_HW_TVEEPROM | IVTV_HW_TUNER, 7362306a36Sopenharmony_ci .video_inputs = { 7462306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 7562306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 7662306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 }, 7762306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 }, 7862306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 }, 7962306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 }, 8062306a36Sopenharmony_ci }, 8162306a36Sopenharmony_ci .audio_inputs = { 8262306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER }, 8362306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 }, 8462306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 }, 8562306a36Sopenharmony_ci }, 8662306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 }, 8762306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 8862306a36Sopenharmony_ci}; 8962306a36Sopenharmony_ci 9062306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ci/* Hauppauge PVR-350 cards */ 9362306a36Sopenharmony_ci 9462306a36Sopenharmony_ci/* Outputs for Hauppauge PVR350 cards */ 9562306a36Sopenharmony_cistatic struct ivtv_card_output ivtv_pvr350_outputs[] = { 9662306a36Sopenharmony_ci { 9762306a36Sopenharmony_ci .name = "S-Video + Composite", 9862306a36Sopenharmony_ci .video_output = 0, 9962306a36Sopenharmony_ci }, { 10062306a36Sopenharmony_ci .name = "Composite", 10162306a36Sopenharmony_ci .video_output = 1, 10262306a36Sopenharmony_ci }, { 10362306a36Sopenharmony_ci .name = "S-Video", 10462306a36Sopenharmony_ci .video_output = 2, 10562306a36Sopenharmony_ci }, { 10662306a36Sopenharmony_ci .name = "RGB", 10762306a36Sopenharmony_ci .video_output = 3, 10862306a36Sopenharmony_ci }, { 10962306a36Sopenharmony_ci .name = "YUV C", 11062306a36Sopenharmony_ci .video_output = 4, 11162306a36Sopenharmony_ci }, { 11262306a36Sopenharmony_ci .name = "YUV V", 11362306a36Sopenharmony_ci .video_output = 5, 11462306a36Sopenharmony_ci } 11562306a36Sopenharmony_ci}; 11662306a36Sopenharmony_ci 11762306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_pvr350 = { 11862306a36Sopenharmony_ci .type = IVTV_CARD_PVR_350, 11962306a36Sopenharmony_ci .name = "Hauppauge WinTV PVR-350", 12062306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER | IVTV_CAP_DECODER, 12162306a36Sopenharmony_ci .video_outputs = ivtv_pvr350_outputs, 12262306a36Sopenharmony_ci .nof_outputs = ARRAY_SIZE(ivtv_pvr350_outputs), 12362306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115, 12462306a36Sopenharmony_ci .hw_audio = IVTV_HW_MSP34XX, 12562306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_MSP34XX, 12662306a36Sopenharmony_ci .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 | 12762306a36Sopenharmony_ci IVTV_HW_SAA7127 | IVTV_HW_TVEEPROM | IVTV_HW_TUNER | 12862306a36Sopenharmony_ci IVTV_HW_I2C_IR_RX_HAUP_EXT | IVTV_HW_I2C_IR_RX_HAUP_INT, 12962306a36Sopenharmony_ci .video_inputs = { 13062306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 13162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 13262306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 }, 13362306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 }, 13462306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 }, 13562306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 }, 13662306a36Sopenharmony_ci }, 13762306a36Sopenharmony_ci .audio_inputs = { 13862306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER }, 13962306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 }, 14062306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 }, 14162306a36Sopenharmony_ci }, 14262306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 }, 14362306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 14462306a36Sopenharmony_ci}; 14562306a36Sopenharmony_ci 14662306a36Sopenharmony_ci/* PVR-350 V1 boards have a different audio tuner input and use a 14762306a36Sopenharmony_ci saa7114 instead of a saa7115. 14862306a36Sopenharmony_ci Note that the info below comes from a pre-production model so it may 14962306a36Sopenharmony_ci not be correct. Especially the audio behaves strangely (mono only it seems) */ 15062306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_pvr350_v1 = { 15162306a36Sopenharmony_ci .type = IVTV_CARD_PVR_350_V1, 15262306a36Sopenharmony_ci .name = "Hauppauge WinTV PVR-350 (V1)", 15362306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER | IVTV_CAP_DECODER, 15462306a36Sopenharmony_ci .video_outputs = ivtv_pvr350_outputs, 15562306a36Sopenharmony_ci .nof_outputs = ARRAY_SIZE(ivtv_pvr350_outputs), 15662306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7114, 15762306a36Sopenharmony_ci .hw_audio = IVTV_HW_MSP34XX, 15862306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_MSP34XX, 15962306a36Sopenharmony_ci .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7114 | 16062306a36Sopenharmony_ci IVTV_HW_SAA7127 | IVTV_HW_TVEEPROM | IVTV_HW_TUNER, 16162306a36Sopenharmony_ci .video_inputs = { 16262306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 16362306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 16462306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 }, 16562306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO2, 2, IVTV_SAA71XX_SVIDEO1 }, 16662306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE2, 2, IVTV_SAA71XX_COMPOSITE1 }, 16762306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE3, 1, IVTV_SAA71XX_COMPOSITE5 }, 16862306a36Sopenharmony_ci }, 16962306a36Sopenharmony_ci .audio_inputs = { 17062306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, MSP_MONO }, 17162306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, MSP_SCART1 }, 17262306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN2, MSP_SCART3 }, 17362306a36Sopenharmony_ci }, 17462306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, MSP_SCART2 }, 17562306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 17662306a36Sopenharmony_ci}; 17762306a36Sopenharmony_ci 17862306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 17962306a36Sopenharmony_ci 18062306a36Sopenharmony_ci/* Hauppauge PVR-150/PVR-500 cards */ 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_pvr150 = { 18362306a36Sopenharmony_ci .type = IVTV_CARD_PVR_150, 18462306a36Sopenharmony_ci .name = "Hauppauge WinTV PVR-150", 18562306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 18662306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 18762306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 18862306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 18962306a36Sopenharmony_ci .hw_muxer = IVTV_HW_WM8775, 19062306a36Sopenharmony_ci .hw_all = IVTV_HW_WM8775 | IVTV_HW_CX25840 | 19162306a36Sopenharmony_ci IVTV_HW_TVEEPROM | IVTV_HW_TUNER | 19262306a36Sopenharmony_ci IVTV_HW_I2C_IR_RX_HAUP_EXT | IVTV_HW_I2C_IR_RX_HAUP_INT | 19362306a36Sopenharmony_ci IVTV_HW_Z8F0811_IR_HAUP, 19462306a36Sopenharmony_ci .video_inputs = { 19562306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE7 }, 19662306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO1 }, 19762306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE3 }, 19862306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO2, 2, CX25840_SVIDEO2 }, 19962306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE2, 2, CX25840_COMPOSITE4 }, 20062306a36Sopenharmony_ci }, 20162306a36Sopenharmony_ci .audio_inputs = { 20262306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, 20362306a36Sopenharmony_ci CX25840_AUDIO8, WM8775_AIN2 }, 20462306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, 20562306a36Sopenharmony_ci CX25840_AUDIO_SERIAL, WM8775_AIN2 }, 20662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN2, 20762306a36Sopenharmony_ci CX25840_AUDIO_SERIAL, WM8775_AIN3 }, 20862306a36Sopenharmony_ci }, 20962306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, 21062306a36Sopenharmony_ci CX25840_AUDIO_SERIAL, WM8775_AIN4 }, 21162306a36Sopenharmony_ci /* apparently needed for the IR blaster */ 21262306a36Sopenharmony_ci .gpio_init = { .direction = 0x1f01, .initial_value = 0x26f3 }, 21362306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 21462306a36Sopenharmony_ci}; 21562306a36Sopenharmony_ci 21662306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 21762306a36Sopenharmony_ci 21862306a36Sopenharmony_ci/* AVerMedia M179 cards */ 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_m179[] = { 22162306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_AVERMEDIA, 0xa3cf }, 22262306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_AVERMEDIA, 0xa3ce }, 22362306a36Sopenharmony_ci { 0, 0, 0 } 22462306a36Sopenharmony_ci}; 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_m179 = { 22762306a36Sopenharmony_ci .type = IVTV_CARD_M179, 22862306a36Sopenharmony_ci .name = "AVerMedia M179", 22962306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 23062306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7114, 23162306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 23262306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_GPIO, 23362306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER, 23462306a36Sopenharmony_ci .video_inputs = { 23562306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 23662306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 23762306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 }, 23862306a36Sopenharmony_ci }, 23962306a36Sopenharmony_ci .audio_inputs = { 24062306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 24162306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 24262306a36Sopenharmony_ci }, 24362306a36Sopenharmony_ci .gpio_init = { .direction = 0xe380, .initial_value = 0x8290 }, 24462306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0x8040, .tuner = 0x8000, .linein = 0x0000 }, 24562306a36Sopenharmony_ci .gpio_audio_mute = { .mask = 0x2000, .mute = 0x2000 }, 24662306a36Sopenharmony_ci .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200, 24762306a36Sopenharmony_ci .lang1 = 0x0200, .lang2 = 0x0100, .both = 0x0000 }, 24862306a36Sopenharmony_ci .gpio_audio_freq = { .mask = 0x0018, .f32000 = 0x0000, 24962306a36Sopenharmony_ci .f44100 = 0x0008, .f48000 = 0x0010 }, 25062306a36Sopenharmony_ci .gpio_audio_detect = { .mask = 0x4000, .stereo = 0x0000 }, 25162306a36Sopenharmony_ci .tuners = { 25262306a36Sopenharmony_ci /* As far as we know all M179 cards use this tuner */ 25362306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_NTSC }, 25462306a36Sopenharmony_ci }, 25562306a36Sopenharmony_ci .pci_list = ivtv_pci_m179, 25662306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 25762306a36Sopenharmony_ci}; 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 26062306a36Sopenharmony_ci 26162306a36Sopenharmony_ci/* Yuan MPG600/Kuroutoshikou ITVC16-STVLP cards */ 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_mpg600[] = { 26462306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0xfff3 }, 26562306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0xffff }, 26662306a36Sopenharmony_ci { 0, 0, 0 } 26762306a36Sopenharmony_ci}; 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_mpg600 = { 27062306a36Sopenharmony_ci .type = IVTV_CARD_MPG600, 27162306a36Sopenharmony_ci .name = "Yuan MPG600, Kuroutoshikou ITVC16-STVLP", 27262306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 27362306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115, 27462306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 27562306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_GPIO, 27662306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER, 27762306a36Sopenharmony_ci .video_inputs = { 27862306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 27962306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 28062306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 }, 28162306a36Sopenharmony_ci }, 28262306a36Sopenharmony_ci .audio_inputs = { 28362306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 28462306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 28562306a36Sopenharmony_ci }, 28662306a36Sopenharmony_ci .gpio_init = { .direction = 0x3080, .initial_value = 0x0004 }, 28762306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 }, 28862306a36Sopenharmony_ci .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 }, 28962306a36Sopenharmony_ci .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004, 29062306a36Sopenharmony_ci .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 }, 29162306a36Sopenharmony_ci .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 }, 29262306a36Sopenharmony_ci .tuners = { 29362306a36Sopenharmony_ci /* The PAL tuner is confirmed */ 29462306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME }, 29562306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 }, 29662306a36Sopenharmony_ci }, 29762306a36Sopenharmony_ci .pci_list = ivtv_pci_mpg600, 29862306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 29962306a36Sopenharmony_ci}; 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 30262306a36Sopenharmony_ci 30362306a36Sopenharmony_ci/* Yuan MPG160/Kuroutoshikou ITVC15-STVLP cards */ 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_mpg160[] = { 30662306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_YUAN1, 0 }, 30762306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV15, IVTV_PCI_ID_IODATA, 0x40a0 }, 30862306a36Sopenharmony_ci { 0, 0, 0 } 30962306a36Sopenharmony_ci}; 31062306a36Sopenharmony_ci 31162306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_mpg160 = { 31262306a36Sopenharmony_ci .type = IVTV_CARD_MPG160, 31362306a36Sopenharmony_ci .name = "YUAN MPG160, Kuroutoshikou ITVC15-STVLP, I/O Data GV-M2TV/PCI", 31462306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 31562306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7114, 31662306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 31762306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_GPIO, 31862306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER, 31962306a36Sopenharmony_ci .video_inputs = { 32062306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 32162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 32262306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 }, 32362306a36Sopenharmony_ci }, 32462306a36Sopenharmony_ci .audio_inputs = { 32562306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 32662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 32762306a36Sopenharmony_ci }, 32862306a36Sopenharmony_ci .gpio_init = { .direction = 0x7080, .initial_value = 0x400c }, 32962306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0x3000, .tuner = 0x0000, .linein = 0x2000 }, 33062306a36Sopenharmony_ci .gpio_audio_mute = { .mask = 0x0001, .mute = 0x0001 }, 33162306a36Sopenharmony_ci .gpio_audio_mode = { .mask = 0x000e, .mono = 0x0006, .stereo = 0x0004, 33262306a36Sopenharmony_ci .lang1 = 0x0004, .lang2 = 0x0000, .both = 0x0008 }, 33362306a36Sopenharmony_ci .gpio_audio_detect = { .mask = 0x0900, .stereo = 0x0100 }, 33462306a36Sopenharmony_ci .tuners = { 33562306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME }, 33662306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 }, 33762306a36Sopenharmony_ci }, 33862306a36Sopenharmony_ci .pci_list = ivtv_pci_mpg160, 33962306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 34062306a36Sopenharmony_ci}; 34162306a36Sopenharmony_ci 34262306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 34362306a36Sopenharmony_ci 34462306a36Sopenharmony_ci/* Yuan PG600/Diamond PVR-550 cards */ 34562306a36Sopenharmony_ci 34662306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_pg600[] = { 34762306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_DIAMONDMM, 0x0070 }, 34862306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 }, 34962306a36Sopenharmony_ci { 0, 0, 0 } 35062306a36Sopenharmony_ci}; 35162306a36Sopenharmony_ci 35262306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_pg600 = { 35362306a36Sopenharmony_ci .type = IVTV_CARD_PG600, 35462306a36Sopenharmony_ci .name = "Yuan PG600, Diamond PVR-550", 35562306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 35662306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 35762306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 35862306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 35962306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER, 36062306a36Sopenharmony_ci .video_inputs = { 36162306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 36262306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, 36362306a36Sopenharmony_ci CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 }, 36462306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 36562306a36Sopenharmony_ci }, 36662306a36Sopenharmony_ci .audio_inputs = { 36762306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 36862306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL }, 36962306a36Sopenharmony_ci }, 37062306a36Sopenharmony_ci .tuners = { 37162306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FQ1216ME }, 37262306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FQ1286 }, 37362306a36Sopenharmony_ci }, 37462306a36Sopenharmony_ci .pci_list = ivtv_pci_pg600, 37562306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 37662306a36Sopenharmony_ci}; 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 37962306a36Sopenharmony_ci 38062306a36Sopenharmony_ci/* Adaptec VideOh! AVC-2410 card */ 38162306a36Sopenharmony_ci 38262306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_avc2410[] = { 38362306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0093 }, 38462306a36Sopenharmony_ci { 0, 0, 0 } 38562306a36Sopenharmony_ci}; 38662306a36Sopenharmony_ci 38762306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_avc2410 = { 38862306a36Sopenharmony_ci .type = IVTV_CARD_AVC2410, 38962306a36Sopenharmony_ci .name = "Adaptec VideOh! AVC-2410", 39062306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 39162306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115, 39262306a36Sopenharmony_ci .hw_audio = IVTV_HW_MSP34XX, 39362306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_MSP34XX, 39462306a36Sopenharmony_ci .hw_muxer = IVTV_HW_CS53L32A, 39562306a36Sopenharmony_ci .hw_all = IVTV_HW_MSP34XX | IVTV_HW_CS53L32A | 39662306a36Sopenharmony_ci IVTV_HW_SAA7115 | IVTV_HW_TUNER | 39762306a36Sopenharmony_ci IVTV_HW_I2C_IR_RX_ADAPTEC, 39862306a36Sopenharmony_ci .video_inputs = { 39962306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 40062306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 40162306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 }, 40262306a36Sopenharmony_ci }, 40362306a36Sopenharmony_ci .audio_inputs = { 40462306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, 40562306a36Sopenharmony_ci MSP_TUNER, CS53L32A_IN0 }, 40662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, 40762306a36Sopenharmony_ci MSP_SCART1, CS53L32A_IN2 }, 40862306a36Sopenharmony_ci }, 40962306a36Sopenharmony_ci /* This card has no eeprom and in fact the Windows driver relies 41062306a36Sopenharmony_ci on the country/region setting of the user to decide which tuner 41162306a36Sopenharmony_ci is available. */ 41262306a36Sopenharmony_ci .tuners = { 41362306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 }, 41462306a36Sopenharmony_ci { .std = V4L2_STD_ALL - V4L2_STD_NTSC_M_JP, 41562306a36Sopenharmony_ci .tuner = TUNER_PHILIPS_FM1236_MK3 }, 41662306a36Sopenharmony_ci { .std = V4L2_STD_NTSC_M_JP, .tuner = TUNER_PHILIPS_FQ1286 }, 41762306a36Sopenharmony_ci }, 41862306a36Sopenharmony_ci .pci_list = ivtv_pci_avc2410, 41962306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 42062306a36Sopenharmony_ci}; 42162306a36Sopenharmony_ci 42262306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci/* Adaptec VideOh! AVC-2010 card */ 42562306a36Sopenharmony_ci 42662306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_avc2010[] = { 42762306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ADAPTEC, 0x0092 }, 42862306a36Sopenharmony_ci { 0, 0, 0 } 42962306a36Sopenharmony_ci}; 43062306a36Sopenharmony_ci 43162306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_avc2010 = { 43262306a36Sopenharmony_ci .type = IVTV_CARD_AVC2010, 43362306a36Sopenharmony_ci .name = "Adaptec VideOh! AVC-2010", 43462306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 43562306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115, 43662306a36Sopenharmony_ci .hw_audio = IVTV_HW_CS53L32A, 43762306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CS53L32A, 43862306a36Sopenharmony_ci .hw_all = IVTV_HW_CS53L32A | IVTV_HW_SAA7115, 43962306a36Sopenharmony_ci .video_inputs = { 44062306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 0, IVTV_SAA71XX_SVIDEO0 }, 44162306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 0, IVTV_SAA71XX_COMPOSITE3 }, 44262306a36Sopenharmony_ci }, 44362306a36Sopenharmony_ci .audio_inputs = { 44462306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CS53L32A_IN2 }, 44562306a36Sopenharmony_ci }, 44662306a36Sopenharmony_ci /* Does not have a tuner */ 44762306a36Sopenharmony_ci .pci_list = ivtv_pci_avc2010, 44862306a36Sopenharmony_ci}; 44962306a36Sopenharmony_ci 45062306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_ci/* Nagase Transgear 5000TV card */ 45362306a36Sopenharmony_ci 45462306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_tg5000tv[] = { 45562306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xbfff }, 45662306a36Sopenharmony_ci { 0, 0, 0 } 45762306a36Sopenharmony_ci}; 45862306a36Sopenharmony_ci 45962306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_tg5000tv = { 46062306a36Sopenharmony_ci .type = IVTV_CARD_TG5000TV, 46162306a36Sopenharmony_ci .name = "Nagase Transgear 5000TV", 46262306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 46362306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7114 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X | 46462306a36Sopenharmony_ci IVTV_HW_GPIO, 46562306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 46662306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_GPIO, 46762306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7114 | IVTV_HW_TUNER | 46862306a36Sopenharmony_ci IVTV_HW_UPD64031A | IVTV_HW_UPD6408X, 46962306a36Sopenharmony_ci .video_inputs = { 47062306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 }, 47162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO2 }, 47262306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 }, 47362306a36Sopenharmony_ci }, 47462306a36Sopenharmony_ci .audio_inputs = { 47562306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 47662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 47762306a36Sopenharmony_ci }, 47862306a36Sopenharmony_ci .gr_config = UPD64031A_VERTICAL_EXTERNAL, 47962306a36Sopenharmony_ci .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 }, 48062306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 }, 48162306a36Sopenharmony_ci .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 }, 48262306a36Sopenharmony_ci .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200, 48362306a36Sopenharmony_ci .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 }, 48462306a36Sopenharmony_ci .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000, 48562306a36Sopenharmony_ci .composite = 0x0010, .svideo = 0x0020 }, 48662306a36Sopenharmony_ci .tuners = { 48762306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 }, 48862306a36Sopenharmony_ci }, 48962306a36Sopenharmony_ci .pci_list = ivtv_pci_tg5000tv, 49062306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 49162306a36Sopenharmony_ci}; 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 49462306a36Sopenharmony_ci 49562306a36Sopenharmony_ci/* AOpen VA2000MAX-SNT6 card */ 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_va2000[] = { 49862306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, 0, 0xff5f }, 49962306a36Sopenharmony_ci { 0, 0, 0 } 50062306a36Sopenharmony_ci}; 50162306a36Sopenharmony_ci 50262306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_va2000 = { 50362306a36Sopenharmony_ci .type = IVTV_CARD_VA2000MAX_SNT6, 50462306a36Sopenharmony_ci .name = "AOpen VA2000MAX-SNT6", 50562306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 50662306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD6408X, 50762306a36Sopenharmony_ci .hw_audio = IVTV_HW_MSP34XX, 50862306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_MSP34XX, 50962306a36Sopenharmony_ci .hw_all = IVTV_HW_MSP34XX | IVTV_HW_SAA7115 | 51062306a36Sopenharmony_ci IVTV_HW_UPD6408X | IVTV_HW_TUNER, 51162306a36Sopenharmony_ci .video_inputs = { 51262306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 }, 51362306a36Sopenharmony_ci }, 51462306a36Sopenharmony_ci .audio_inputs = { 51562306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, MSP_TUNER }, 51662306a36Sopenharmony_ci }, 51762306a36Sopenharmony_ci .tuners = { 51862306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 }, 51962306a36Sopenharmony_ci }, 52062306a36Sopenharmony_ci .pci_list = ivtv_pci_va2000, 52162306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 52262306a36Sopenharmony_ci}; 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 52562306a36Sopenharmony_ci 52662306a36Sopenharmony_ci/* Yuan MPG600GR/Kuroutoshikou CX23416GYC-STVLP cards */ 52762306a36Sopenharmony_ci 52862306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_cx23416gyc[] = { 52962306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0x0600 }, 53062306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN4, 0x0600 }, 53162306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_MELCO, 0x0523 }, 53262306a36Sopenharmony_ci { 0, 0, 0 } 53362306a36Sopenharmony_ci}; 53462306a36Sopenharmony_ci 53562306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_cx23416gyc = { 53662306a36Sopenharmony_ci .type = IVTV_CARD_CX23416GYC, 53762306a36Sopenharmony_ci .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP", 53862306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 53962306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO | 54062306a36Sopenharmony_ci IVTV_HW_UPD64031A | IVTV_HW_UPD6408X, 54162306a36Sopenharmony_ci .hw_audio = IVTV_HW_SAA717X, 54262306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_SAA717X, 54362306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER | 54462306a36Sopenharmony_ci IVTV_HW_UPD64031A | IVTV_HW_UPD6408X, 54562306a36Sopenharmony_ci .video_inputs = { 54662306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO3 | 54762306a36Sopenharmony_ci IVTV_SAA717X_TUNER_FLAG }, 54862306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 54962306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO3 }, 55062306a36Sopenharmony_ci }, 55162306a36Sopenharmony_ci .audio_inputs = { 55262306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 }, 55362306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 }, 55462306a36Sopenharmony_ci }, 55562306a36Sopenharmony_ci .gr_config = UPD64031A_VERTICAL_EXTERNAL, 55662306a36Sopenharmony_ci .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 }, 55762306a36Sopenharmony_ci .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000, 55862306a36Sopenharmony_ci .composite = 0x0020, .svideo = 0x0020 }, 55962306a36Sopenharmony_ci .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000, 56062306a36Sopenharmony_ci .f44100 = 0x4000, .f48000 = 0x8000 }, 56162306a36Sopenharmony_ci .tuners = { 56262306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 }, 56362306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 }, 56462306a36Sopenharmony_ci }, 56562306a36Sopenharmony_ci .pci_list = ivtv_pci_cx23416gyc, 56662306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 56762306a36Sopenharmony_ci}; 56862306a36Sopenharmony_ci 56962306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_cx23416gyc_nogr = { 57062306a36Sopenharmony_ci .type = IVTV_CARD_CX23416GYC_NOGR, 57162306a36Sopenharmony_ci .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR)", 57262306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 57362306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO | IVTV_HW_UPD6408X, 57462306a36Sopenharmony_ci .hw_audio = IVTV_HW_SAA717X, 57562306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_SAA717X, 57662306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER | 57762306a36Sopenharmony_ci IVTV_HW_UPD6408X, 57862306a36Sopenharmony_ci .video_inputs = { 57962306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 | 58062306a36Sopenharmony_ci IVTV_SAA717X_TUNER_FLAG }, 58162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 58262306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 }, 58362306a36Sopenharmony_ci }, 58462306a36Sopenharmony_ci .audio_inputs = { 58562306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 }, 58662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 }, 58762306a36Sopenharmony_ci }, 58862306a36Sopenharmony_ci .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 }, 58962306a36Sopenharmony_ci .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000, 59062306a36Sopenharmony_ci .composite = 0x0020, .svideo = 0x0020 }, 59162306a36Sopenharmony_ci .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000, 59262306a36Sopenharmony_ci .f44100 = 0x4000, .f48000 = 0x8000 }, 59362306a36Sopenharmony_ci .tuners = { 59462306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 }, 59562306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 }, 59662306a36Sopenharmony_ci }, 59762306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 59862306a36Sopenharmony_ci}; 59962306a36Sopenharmony_ci 60062306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_cx23416gyc_nogrycs = { 60162306a36Sopenharmony_ci .type = IVTV_CARD_CX23416GYC_NOGRYCS, 60262306a36Sopenharmony_ci .name = "Yuan MPG600GR, Kuroutoshikou CX23416GYC-STVLP (no GR/YCS)", 60362306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 60462306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA717X | IVTV_HW_GPIO, 60562306a36Sopenharmony_ci .hw_audio = IVTV_HW_SAA717X, 60662306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_SAA717X, 60762306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA717X | IVTV_HW_TUNER, 60862306a36Sopenharmony_ci .video_inputs = { 60962306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 | 61062306a36Sopenharmony_ci IVTV_SAA717X_TUNER_FLAG }, 61162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 61262306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE0 }, 61362306a36Sopenharmony_ci }, 61462306a36Sopenharmony_ci .audio_inputs = { 61562306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN2 }, 61662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN0 }, 61762306a36Sopenharmony_ci }, 61862306a36Sopenharmony_ci .gpio_init = { .direction = 0xf880, .initial_value = 0x8800 }, 61962306a36Sopenharmony_ci .gpio_video_input = { .mask = 0x0020, .tuner = 0x0000, 62062306a36Sopenharmony_ci .composite = 0x0020, .svideo = 0x0020 }, 62162306a36Sopenharmony_ci .gpio_audio_freq = { .mask = 0xc000, .f32000 = 0x0000, 62262306a36Sopenharmony_ci .f44100 = 0x4000, .f48000 = 0x8000 }, 62362306a36Sopenharmony_ci .tuners = { 62462306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 }, 62562306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_FM1236_MK3 }, 62662306a36Sopenharmony_ci }, 62762306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 62862306a36Sopenharmony_ci}; 62962306a36Sopenharmony_ci 63062306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 63162306a36Sopenharmony_ci 63262306a36Sopenharmony_ci/* I/O Data GV-MVP/RX & GV-MVP/RX2W (dual tuner) cards */ 63362306a36Sopenharmony_ci 63462306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_gv_mvprx[] = { 63562306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd01e }, 63662306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd038 }, /* 2W unit #1 */ 63762306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd039 }, /* 2W unit #2 */ 63862306a36Sopenharmony_ci { 0, 0, 0 } 63962306a36Sopenharmony_ci}; 64062306a36Sopenharmony_ci 64162306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_gv_mvprx = { 64262306a36Sopenharmony_ci .type = IVTV_CARD_GV_MVPRX, 64362306a36Sopenharmony_ci .name = "I/O Data GV-MVP/RX, GV-MVP/RX2W (dual tuner)", 64462306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 64562306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X, 64662306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 64762306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_WM8739, 64862306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_VP27SMPX | 64962306a36Sopenharmony_ci IVTV_HW_TUNER | IVTV_HW_WM8739 | 65062306a36Sopenharmony_ci IVTV_HW_UPD64031A | IVTV_HW_UPD6408X, 65162306a36Sopenharmony_ci .video_inputs = { 65262306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 }, 65362306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO1 }, 65462306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 }, 65562306a36Sopenharmony_ci }, 65662306a36Sopenharmony_ci .audio_inputs = { 65762306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 65862306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 65962306a36Sopenharmony_ci }, 66062306a36Sopenharmony_ci .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 }, 66162306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 }, 66262306a36Sopenharmony_ci .tuners = { 66362306a36Sopenharmony_ci /* This card has the Panasonic VP27 tuner */ 66462306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 }, 66562306a36Sopenharmony_ci }, 66662306a36Sopenharmony_ci .pci_list = ivtv_pci_gv_mvprx, 66762306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 66862306a36Sopenharmony_ci}; 66962306a36Sopenharmony_ci 67062306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 67162306a36Sopenharmony_ci 67262306a36Sopenharmony_ci/* I/O Data GV-MVP/RX2E card */ 67362306a36Sopenharmony_ci 67462306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_gv_mvprx2e[] = { 67562306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_IODATA, 0xd025 }, 67662306a36Sopenharmony_ci {0, 0, 0} 67762306a36Sopenharmony_ci}; 67862306a36Sopenharmony_ci 67962306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_gv_mvprx2e = { 68062306a36Sopenharmony_ci .type = IVTV_CARD_GV_MVPRX2E, 68162306a36Sopenharmony_ci .name = "I/O Data GV-MVP/RX2E", 68262306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 68362306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115, 68462306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 68562306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_WM8739, 68662306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER | 68762306a36Sopenharmony_ci IVTV_HW_VP27SMPX | IVTV_HW_WM8739, 68862306a36Sopenharmony_ci .video_inputs = { 68962306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE4 }, 69062306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, 69162306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 }, 69262306a36Sopenharmony_ci }, 69362306a36Sopenharmony_ci .audio_inputs = { 69462306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 69562306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 69662306a36Sopenharmony_ci }, 69762306a36Sopenharmony_ci .gpio_init = { .direction = 0xc301, .initial_value = 0x0200 }, 69862306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0xffff, .tuner = 0x0200, .linein = 0x0300 }, 69962306a36Sopenharmony_ci .tuners = { 70062306a36Sopenharmony_ci /* This card has the Panasonic VP27 tuner */ 70162306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PANASONIC_VP27 }, 70262306a36Sopenharmony_ci }, 70362306a36Sopenharmony_ci .pci_list = ivtv_pci_gv_mvprx2e, 70462306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 70562306a36Sopenharmony_ci}; 70662306a36Sopenharmony_ci 70762306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 70862306a36Sopenharmony_ci 70962306a36Sopenharmony_ci/* GotVIEW PCI DVD card */ 71062306a36Sopenharmony_ci 71162306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_gotview_pci_dvd[] = { 71262306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN1, 0x0600 }, 71362306a36Sopenharmony_ci { 0, 0, 0 } 71462306a36Sopenharmony_ci}; 71562306a36Sopenharmony_ci 71662306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_gotview_pci_dvd = { 71762306a36Sopenharmony_ci .type = IVTV_CARD_GOTVIEW_PCI_DVD, 71862306a36Sopenharmony_ci .name = "GotView PCI DVD", 71962306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 72062306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA717X, 72162306a36Sopenharmony_ci .hw_audio = IVTV_HW_SAA717X, 72262306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_SAA717X, 72362306a36Sopenharmony_ci .hw_all = IVTV_HW_SAA717X | IVTV_HW_TUNER, 72462306a36Sopenharmony_ci .video_inputs = { 72562306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE1 }, /* pin 116 */ 72662306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO0 }, /* pin 114/109 */ 72762306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE3 }, /* pin 118 */ 72862306a36Sopenharmony_ci }, 72962306a36Sopenharmony_ci .audio_inputs = { 73062306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_SAA717X_IN0 }, 73162306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_SAA717X_IN2 }, 73262306a36Sopenharmony_ci }, 73362306a36Sopenharmony_ci .gpio_init = { .direction = 0xf000, .initial_value = 0xA000 }, 73462306a36Sopenharmony_ci .tuners = { 73562306a36Sopenharmony_ci /* This card has a Philips FQ1216ME MK3 tuner */ 73662306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 }, 73762306a36Sopenharmony_ci }, 73862306a36Sopenharmony_ci .pci_list = ivtv_pci_gotview_pci_dvd, 73962306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 74062306a36Sopenharmony_ci}; 74162306a36Sopenharmony_ci 74262306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 74362306a36Sopenharmony_ci 74462306a36Sopenharmony_ci/* GotVIEW PCI DVD2 Deluxe card */ 74562306a36Sopenharmony_ci 74662306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_gotview_pci_dvd2[] = { 74762306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_GOTVIEW1, 0x0600 }, 74862306a36Sopenharmony_ci { 0, 0, 0 } 74962306a36Sopenharmony_ci}; 75062306a36Sopenharmony_ci 75162306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_gotview_pci_dvd2 = { 75262306a36Sopenharmony_ci .type = IVTV_CARD_GOTVIEW_PCI_DVD2, 75362306a36Sopenharmony_ci .name = "GotView PCI DVD2 Deluxe", 75462306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 75562306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 75662306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 75762306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 75862306a36Sopenharmony_ci .hw_muxer = IVTV_HW_GPIO, 75962306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER, 76062306a36Sopenharmony_ci .video_inputs = { 76162306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 76262306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, 76362306a36Sopenharmony_ci CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 }, 76462306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 76562306a36Sopenharmony_ci }, 76662306a36Sopenharmony_ci .audio_inputs = { 76762306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 }, 76862306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 }, 76962306a36Sopenharmony_ci }, 77062306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 }, 77162306a36Sopenharmony_ci .gpio_init = { .direction = 0x0800, .initial_value = 0 }, 77262306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0x0800, .tuner = 0, .linein = 0, .radio = 0x0800 }, 77362306a36Sopenharmony_ci .tuners = { 77462306a36Sopenharmony_ci /* This card has a Philips FQ1216ME MK5 tuner */ 77562306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216ME_MK3 }, 77662306a36Sopenharmony_ci }, 77762306a36Sopenharmony_ci .pci_list = ivtv_pci_gotview_pci_dvd2, 77862306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 77962306a36Sopenharmony_ci}; 78062306a36Sopenharmony_ci 78162306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 78262306a36Sopenharmony_ci 78362306a36Sopenharmony_ci/* Yuan MPC622 miniPCI card */ 78462306a36Sopenharmony_ci 78562306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_yuan_mpc622[] = { 78662306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN2, 0xd998 }, 78762306a36Sopenharmony_ci { 0, 0, 0 } 78862306a36Sopenharmony_ci}; 78962306a36Sopenharmony_ci 79062306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_yuan_mpc622 = { 79162306a36Sopenharmony_ci .type = IVTV_CARD_YUAN_MPC622, 79262306a36Sopenharmony_ci .name = "Yuan MPC622", 79362306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 79462306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 79562306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 79662306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 79762306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER, 79862306a36Sopenharmony_ci .video_inputs = { 79962306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 80062306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, 80162306a36Sopenharmony_ci CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 }, 80262306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 80362306a36Sopenharmony_ci }, 80462306a36Sopenharmony_ci .audio_inputs = { 80562306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 80662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL }, 80762306a36Sopenharmony_ci }, 80862306a36Sopenharmony_ci .gpio_init = { .direction = 0x00ff, .initial_value = 0x0002 }, 80962306a36Sopenharmony_ci .tuners = { 81062306a36Sopenharmony_ci /* This card has the TDA8290/TDA8275 tuner chips */ 81162306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_PHILIPS_TDA8290 }, 81262306a36Sopenharmony_ci }, 81362306a36Sopenharmony_ci .pci_list = ivtv_pci_yuan_mpc622, 81462306a36Sopenharmony_ci .i2c = &ivtv_i2c_tda8290, 81562306a36Sopenharmony_ci}; 81662306a36Sopenharmony_ci 81762306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 81862306a36Sopenharmony_ci 81962306a36Sopenharmony_ci/* DIGITAL COWBOY DCT-MTVP1 card */ 82062306a36Sopenharmony_ci 82162306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_dctmvtvp1[] = { 82262306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xbfff }, 82362306a36Sopenharmony_ci { 0, 0, 0 } 82462306a36Sopenharmony_ci}; 82562306a36Sopenharmony_ci 82662306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_dctmvtvp1 = { 82762306a36Sopenharmony_ci .type = IVTV_CARD_DCTMTVP1, 82862306a36Sopenharmony_ci .name = "Digital Cowboy DCT-MTVP1", 82962306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 83062306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115 | IVTV_HW_UPD64031A | IVTV_HW_UPD6408X | 83162306a36Sopenharmony_ci IVTV_HW_GPIO, 83262306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 83362306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_GPIO, 83462306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER | 83562306a36Sopenharmony_ci IVTV_HW_UPD64031A | IVTV_HW_UPD6408X, 83662306a36Sopenharmony_ci .video_inputs = { 83762306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_SVIDEO0 }, 83862306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO2 }, 83962306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_SVIDEO2 }, 84062306a36Sopenharmony_ci }, 84162306a36Sopenharmony_ci .audio_inputs = { 84262306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 84362306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 84462306a36Sopenharmony_ci }, 84562306a36Sopenharmony_ci .gpio_init = { .direction = 0xe080, .initial_value = 0x8000 }, 84662306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0x8080, .tuner = 0x8000, .linein = 0x0080 }, 84762306a36Sopenharmony_ci .gpio_audio_mute = { .mask = 0x6000, .mute = 0x6000 }, 84862306a36Sopenharmony_ci .gpio_audio_mode = { .mask = 0x4300, .mono = 0x4000, .stereo = 0x0200, 84962306a36Sopenharmony_ci .lang1 = 0x0300, .lang2 = 0x0000, .both = 0x0200 }, 85062306a36Sopenharmony_ci .gpio_video_input = { .mask = 0x0030, .tuner = 0x0000, 85162306a36Sopenharmony_ci .composite = 0x0010, .svideo = 0x0020}, 85262306a36Sopenharmony_ci .tuners = { 85362306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FQ1286 }, 85462306a36Sopenharmony_ci }, 85562306a36Sopenharmony_ci .pci_list = ivtv_pci_dctmvtvp1, 85662306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 85762306a36Sopenharmony_ci}; 85862306a36Sopenharmony_ci 85962306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 86062306a36Sopenharmony_ci 86162306a36Sopenharmony_ci/* Yuan PG600-2/GotView PCI DVD Lite cards */ 86262306a36Sopenharmony_ci 86362306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_pg600v2[] = { 86462306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 }, 86562306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_GOTVIEW2, 0x0600 }, 86662306a36Sopenharmony_ci { 0, 0, 0 } 86762306a36Sopenharmony_ci}; 86862306a36Sopenharmony_ci 86962306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_pg600v2 = { 87062306a36Sopenharmony_ci .type = IVTV_CARD_PG600V2, 87162306a36Sopenharmony_ci .name = "Yuan PG600-2, GotView PCI DVD Lite", 87262306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 87362306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 87462306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 87562306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 87662306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER, 87762306a36Sopenharmony_ci /* XC2028 support apparently works for the Yuan, it's still 87862306a36Sopenharmony_ci uncertain whether it also works with the GotView. */ 87962306a36Sopenharmony_ci .video_inputs = { 88062306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 88162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, 88262306a36Sopenharmony_ci CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 }, 88362306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 88462306a36Sopenharmony_ci }, 88562306a36Sopenharmony_ci .audio_inputs = { 88662306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 88762306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL }, 88862306a36Sopenharmony_ci }, 88962306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 89062306a36Sopenharmony_ci .xceive_pin = 12, 89162306a36Sopenharmony_ci .tuners = { 89262306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 }, 89362306a36Sopenharmony_ci }, 89462306a36Sopenharmony_ci .pci_list = ivtv_pci_pg600v2, 89562306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 89662306a36Sopenharmony_ci}; 89762306a36Sopenharmony_ci 89862306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 89962306a36Sopenharmony_ci 90062306a36Sopenharmony_ci/* Club3D ZAP-TV1x01 cards */ 90162306a36Sopenharmony_ci 90262306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_club3d[] = { 90362306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_YUAN3, 0x0600 }, 90462306a36Sopenharmony_ci { 0, 0, 0 } 90562306a36Sopenharmony_ci}; 90662306a36Sopenharmony_ci 90762306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_club3d = { 90862306a36Sopenharmony_ci .type = IVTV_CARD_CLUB3D, 90962306a36Sopenharmony_ci .name = "Club3D ZAP-TV1x01", 91062306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 91162306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 91262306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 91362306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 91462306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER, 91562306a36Sopenharmony_ci .video_inputs = { 91662306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 91762306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, 91862306a36Sopenharmony_ci CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 }, 91962306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE3 }, 92062306a36Sopenharmony_ci }, 92162306a36Sopenharmony_ci .audio_inputs = { 92262306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 92362306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL }, 92462306a36Sopenharmony_ci }, 92562306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 92662306a36Sopenharmony_ci .xceive_pin = 12, 92762306a36Sopenharmony_ci .tuners = { 92862306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 }, 92962306a36Sopenharmony_ci }, 93062306a36Sopenharmony_ci .pci_list = ivtv_pci_club3d, 93162306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 93262306a36Sopenharmony_ci}; 93362306a36Sopenharmony_ci 93462306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 93562306a36Sopenharmony_ci 93662306a36Sopenharmony_ci/* AVerTV MCE 116 Plus (M116) card */ 93762306a36Sopenharmony_ci 93862306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_avertv_mce116[] = { 93962306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc439 }, 94062306a36Sopenharmony_ci { 0, 0, 0 } 94162306a36Sopenharmony_ci}; 94262306a36Sopenharmony_ci 94362306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_avertv_mce116 = { 94462306a36Sopenharmony_ci .type = IVTV_CARD_AVERTV_MCE116, 94562306a36Sopenharmony_ci .name = "AVerTV MCE 116 Plus", 94662306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 94762306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 94862306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 94962306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 95062306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | IVTV_HW_WM8739 | 95162306a36Sopenharmony_ci IVTV_HW_I2C_IR_RX_AVER, 95262306a36Sopenharmony_ci .video_inputs = { 95362306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 95462306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 }, 95562306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 95662306a36Sopenharmony_ci }, 95762306a36Sopenharmony_ci .audio_inputs = { 95862306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 95962306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 }, 96062306a36Sopenharmony_ci }, 96162306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 96262306a36Sopenharmony_ci /* enable line-in */ 96362306a36Sopenharmony_ci .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 }, 96462306a36Sopenharmony_ci .xceive_pin = 10, 96562306a36Sopenharmony_ci .tuners = { 96662306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 }, 96762306a36Sopenharmony_ci }, 96862306a36Sopenharmony_ci .pci_list = ivtv_pci_avertv_mce116, 96962306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 97062306a36Sopenharmony_ci}; 97162306a36Sopenharmony_ci 97262306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 97362306a36Sopenharmony_ci 97462306a36Sopenharmony_ci/* AVerMedia PVR-150 Plus / AVerTV M113 cards with a Daewoo/Partsnic Tuner */ 97562306a36Sopenharmony_ci 97662306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_aver_pvr150[] = { 97762306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc034 }, /* NTSC */ 97862306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc035 }, /* NTSC FM */ 97962306a36Sopenharmony_ci { 0, 0, 0 } 98062306a36Sopenharmony_ci}; 98162306a36Sopenharmony_ci 98262306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_aver_pvr150 = { 98362306a36Sopenharmony_ci .type = IVTV_CARD_AVER_PVR150PLUS, 98462306a36Sopenharmony_ci .name = "AVerMedia PVR-150 Plus / AVerTV M113 Partsnic (Daewoo) Tuner", 98562306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 98662306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 98762306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 98862306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 98962306a36Sopenharmony_ci .hw_muxer = IVTV_HW_GPIO, 99062306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | 99162306a36Sopenharmony_ci IVTV_HW_WM8739 | IVTV_HW_GPIO, 99262306a36Sopenharmony_ci .video_inputs = { 99362306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 99462306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 }, 99562306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 99662306a36Sopenharmony_ci }, 99762306a36Sopenharmony_ci .audio_inputs = { 99862306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 }, 99962306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 }, 100062306a36Sopenharmony_ci }, 100162306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 }, 100262306a36Sopenharmony_ci /* The 74HC4052 Dual 4:1 multiplexer is controlled by 2 GPIO lines */ 100362306a36Sopenharmony_ci .gpio_init = { .direction = 0xc000, .initial_value = 0 }, 100462306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0xc000, 100562306a36Sopenharmony_ci .tuner = 0x0000, 100662306a36Sopenharmony_ci .linein = 0x4000, 100762306a36Sopenharmony_ci .radio = 0x8000 }, 100862306a36Sopenharmony_ci .tuners = { 100962306a36Sopenharmony_ci /* Subsystem ID's 0xc03[45] have a Partsnic PTI-5NF05 tuner */ 101062306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PARTSNIC_PTI_5NF05 }, 101162306a36Sopenharmony_ci }, 101262306a36Sopenharmony_ci .pci_list = ivtv_pci_aver_pvr150, 101362306a36Sopenharmony_ci /* Subsystem ID 0xc035 has a TEA5767(?) FM tuner, 0xc034 does not */ 101462306a36Sopenharmony_ci .i2c = &ivtv_i2c_radio, 101562306a36Sopenharmony_ci}; 101662306a36Sopenharmony_ci 101762306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 101862306a36Sopenharmony_ci 101962306a36Sopenharmony_ci/* AVerMedia UltraTV 1500 MCE (newer non-cx88 version, M113 variant) card */ 102062306a36Sopenharmony_ci 102162306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_aver_ultra1500mce[] = { 102262306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc019 }, /* NTSC */ 102362306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc01b }, /* PAL/SECAM */ 102462306a36Sopenharmony_ci { 0, 0, 0 } 102562306a36Sopenharmony_ci}; 102662306a36Sopenharmony_ci 102762306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_aver_ultra1500mce = { 102862306a36Sopenharmony_ci .type = IVTV_CARD_AVER_ULTRA1500MCE, 102962306a36Sopenharmony_ci .name = "AVerMedia UltraTV 1500 MCE / AVerTV M113 Philips Tuner", 103062306a36Sopenharmony_ci .comment = "For non-NTSC tuners, use the pal= or secam= module options", 103162306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 103262306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 103362306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 103462306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 103562306a36Sopenharmony_ci .hw_muxer = IVTV_HW_GPIO, 103662306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | 103762306a36Sopenharmony_ci IVTV_HW_WM8739 | IVTV_HW_GPIO, 103862306a36Sopenharmony_ci .video_inputs = { 103962306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 104062306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 }, 104162306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 104262306a36Sopenharmony_ci }, 104362306a36Sopenharmony_ci .audio_inputs = { 104462306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, 0 }, 104562306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 }, 104662306a36Sopenharmony_ci }, 104762306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 }, 104862306a36Sopenharmony_ci /* The 74HC4052 Dual 4:1 multiplexer is controlled by 2 GPIO lines */ 104962306a36Sopenharmony_ci .gpio_init = { .direction = 0xc000, .initial_value = 0 }, 105062306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0xc000, 105162306a36Sopenharmony_ci .tuner = 0x0000, 105262306a36Sopenharmony_ci .linein = 0x4000, 105362306a36Sopenharmony_ci .radio = 0x8000 }, 105462306a36Sopenharmony_ci .tuners = { 105562306a36Sopenharmony_ci /* The UltraTV 1500 MCE has a Philips FM1236 MK5 TV/FM tuner */ 105662306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 }, 105762306a36Sopenharmony_ci { .std = V4L2_STD_PAL_SECAM, .tuner = TUNER_PHILIPS_FM1216MK5 }, 105862306a36Sopenharmony_ci }, 105962306a36Sopenharmony_ci .pci_list = ivtv_pci_aver_ultra1500mce, 106062306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 106162306a36Sopenharmony_ci}; 106262306a36Sopenharmony_ci 106362306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 106462306a36Sopenharmony_ci 106562306a36Sopenharmony_ci/* AVerMedia EZMaker PCI Deluxe card */ 106662306a36Sopenharmony_ci 106762306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_aver_ezmaker[] = { 106862306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc03f }, 106962306a36Sopenharmony_ci { 0, 0, 0 } 107062306a36Sopenharmony_ci}; 107162306a36Sopenharmony_ci 107262306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_aver_ezmaker = { 107362306a36Sopenharmony_ci .type = IVTV_CARD_AVER_EZMAKER, 107462306a36Sopenharmony_ci .name = "AVerMedia EZMaker PCI Deluxe", 107562306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 107662306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 107762306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 107862306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 107962306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_WM8739, 108062306a36Sopenharmony_ci .video_inputs = { 108162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 0, CX25840_SVIDEO3 }, 108262306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 0, CX25840_COMPOSITE1 }, 108362306a36Sopenharmony_ci }, 108462306a36Sopenharmony_ci .audio_inputs = { 108562306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 0 }, 108662306a36Sopenharmony_ci }, 108762306a36Sopenharmony_ci .gpio_init = { .direction = 0x4000, .initial_value = 0x4000 }, 108862306a36Sopenharmony_ci /* Does not have a tuner */ 108962306a36Sopenharmony_ci .pci_list = ivtv_pci_aver_ezmaker, 109062306a36Sopenharmony_ci}; 109162306a36Sopenharmony_ci 109262306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 109362306a36Sopenharmony_ci 109462306a36Sopenharmony_ci/* ASUS Falcon2 */ 109562306a36Sopenharmony_ci 109662306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_asus_falcon2[] = { 109762306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x4b66 }, 109862306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x462e }, 109962306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_ASUSTEK, 0x4b2e }, 110062306a36Sopenharmony_ci { 0, 0, 0 } 110162306a36Sopenharmony_ci}; 110262306a36Sopenharmony_ci 110362306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_asus_falcon2 = { 110462306a36Sopenharmony_ci .type = IVTV_CARD_ASUS_FALCON2, 110562306a36Sopenharmony_ci .name = "ASUS Falcon2", 110662306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 110762306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 110862306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 110962306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 111062306a36Sopenharmony_ci .hw_muxer = IVTV_HW_M52790, 111162306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_M52790 | IVTV_HW_TUNER, 111262306a36Sopenharmony_ci .video_inputs = { 111362306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 111462306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, CX25840_SVIDEO3 }, 111562306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 2, CX25840_COMPOSITE2 }, 111662306a36Sopenharmony_ci }, 111762306a36Sopenharmony_ci .audio_inputs = { 111862306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5, M52790_IN_TUNER }, 111962306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 112062306a36Sopenharmony_ci M52790_IN_V2 | M52790_SW1_YCMIX | M52790_SW2_YCMIX }, 112162306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, M52790_IN_V2 }, 112262306a36Sopenharmony_ci }, 112362306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, M52790_IN_TUNER }, 112462306a36Sopenharmony_ci .tuners = { 112562306a36Sopenharmony_ci { .std = V4L2_STD_MN, .tuner = TUNER_PHILIPS_FM1236_MK3 }, 112662306a36Sopenharmony_ci }, 112762306a36Sopenharmony_ci .pci_list = ivtv_pci_asus_falcon2, 112862306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 112962306a36Sopenharmony_ci}; 113062306a36Sopenharmony_ci 113162306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 113262306a36Sopenharmony_ci 113362306a36Sopenharmony_ci/* AVerMedia M104 miniPCI card */ 113462306a36Sopenharmony_ci 113562306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_aver_m104[] = { 113662306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_AVERMEDIA, 0xc136 }, 113762306a36Sopenharmony_ci { 0, 0, 0 } 113862306a36Sopenharmony_ci}; 113962306a36Sopenharmony_ci 114062306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_aver_m104 = { 114162306a36Sopenharmony_ci .type = IVTV_CARD_AVER_M104, 114262306a36Sopenharmony_ci .name = "AVerMedia M104", 114362306a36Sopenharmony_ci .comment = "Not yet supported!\n", 114462306a36Sopenharmony_ci .v4l2_capabilities = 0, /*IVTV_CAP_ENCODER,*/ 114562306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 114662306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 114762306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 114862306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER | IVTV_HW_WM8739, 114962306a36Sopenharmony_ci .video_inputs = { 115062306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 0, CX25840_SVIDEO3 }, 115162306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 0, CX25840_COMPOSITE1 }, 115262306a36Sopenharmony_ci }, 115362306a36Sopenharmony_ci .audio_inputs = { 115462306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL, 1 }, 115562306a36Sopenharmony_ci }, 115662306a36Sopenharmony_ci .radio_input = { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO_SERIAL, 2 }, 115762306a36Sopenharmony_ci /* enable line-in + reset tuner */ 115862306a36Sopenharmony_ci .gpio_init = { .direction = 0xe000, .initial_value = 0x4000 }, 115962306a36Sopenharmony_ci .xceive_pin = 10, 116062306a36Sopenharmony_ci .tuners = { 116162306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 }, 116262306a36Sopenharmony_ci }, 116362306a36Sopenharmony_ci .pci_list = ivtv_pci_aver_m104, 116462306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 116562306a36Sopenharmony_ci}; 116662306a36Sopenharmony_ci 116762306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 116862306a36Sopenharmony_ci 116962306a36Sopenharmony_ci/* Buffalo PC-MV5L/PCI cards */ 117062306a36Sopenharmony_ci 117162306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_buffalo[] = { 117262306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_MELCO, 0x052b }, 117362306a36Sopenharmony_ci { 0, 0, 0 } 117462306a36Sopenharmony_ci}; 117562306a36Sopenharmony_ci 117662306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_buffalo = { 117762306a36Sopenharmony_ci .type = IVTV_CARD_BUFFALO_MV5L, 117862306a36Sopenharmony_ci .name = "Buffalo PC-MV5L/PCI", 117962306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 118062306a36Sopenharmony_ci .hw_video = IVTV_HW_CX25840, 118162306a36Sopenharmony_ci .hw_audio = IVTV_HW_CX25840, 118262306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_CX25840, 118362306a36Sopenharmony_ci .hw_all = IVTV_HW_CX25840 | IVTV_HW_TUNER, 118462306a36Sopenharmony_ci .video_inputs = { 118562306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, CX25840_COMPOSITE2 }, 118662306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, 118762306a36Sopenharmony_ci CX25840_SVIDEO_LUMA3 | CX25840_SVIDEO_CHROMA4 }, 118862306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, CX25840_COMPOSITE1 }, 118962306a36Sopenharmony_ci }, 119062306a36Sopenharmony_ci .audio_inputs = { 119162306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, CX25840_AUDIO5 }, 119262306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, CX25840_AUDIO_SERIAL }, 119362306a36Sopenharmony_ci }, 119462306a36Sopenharmony_ci .xceive_pin = 12, 119562306a36Sopenharmony_ci .tuners = { 119662306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_XC2028 }, 119762306a36Sopenharmony_ci }, 119862306a36Sopenharmony_ci .pci_list = ivtv_pci_buffalo, 119962306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 120062306a36Sopenharmony_ci}; 120162306a36Sopenharmony_ci 120262306a36Sopenharmony_ci/* ------------------------------------------------------------------------- */ 120362306a36Sopenharmony_ci/* Sony Kikyou */ 120462306a36Sopenharmony_ci 120562306a36Sopenharmony_cistatic const struct ivtv_card_pci_info ivtv_pci_kikyou[] = { 120662306a36Sopenharmony_ci { PCI_DEVICE_ID_IVTV16, IVTV_PCI_ID_SONY, 0x813d }, 120762306a36Sopenharmony_ci { 0, 0, 0 } 120862306a36Sopenharmony_ci}; 120962306a36Sopenharmony_ci 121062306a36Sopenharmony_cistatic const struct ivtv_card ivtv_card_kikyou = { 121162306a36Sopenharmony_ci .type = IVTV_CARD_KIKYOU, 121262306a36Sopenharmony_ci .name = "Sony VAIO Giga Pocket (ENX Kikyou)", 121362306a36Sopenharmony_ci .v4l2_capabilities = IVTV_CAP_ENCODER, 121462306a36Sopenharmony_ci .hw_video = IVTV_HW_SAA7115, 121562306a36Sopenharmony_ci .hw_audio = IVTV_HW_GPIO, 121662306a36Sopenharmony_ci .hw_audio_ctrl = IVTV_HW_GPIO, 121762306a36Sopenharmony_ci .hw_all = IVTV_HW_GPIO | IVTV_HW_SAA7115 | IVTV_HW_TUNER, 121862306a36Sopenharmony_ci .video_inputs = { 121962306a36Sopenharmony_ci { IVTV_CARD_INPUT_VID_TUNER, 0, IVTV_SAA71XX_COMPOSITE1 }, 122062306a36Sopenharmony_ci { IVTV_CARD_INPUT_COMPOSITE1, 1, IVTV_SAA71XX_COMPOSITE1 }, 122162306a36Sopenharmony_ci { IVTV_CARD_INPUT_SVIDEO1, 1, IVTV_SAA71XX_SVIDEO1 }, 122262306a36Sopenharmony_ci }, 122362306a36Sopenharmony_ci .audio_inputs = { 122462306a36Sopenharmony_ci { IVTV_CARD_INPUT_AUD_TUNER, IVTV_GPIO_TUNER }, 122562306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN1, IVTV_GPIO_LINE_IN }, 122662306a36Sopenharmony_ci { IVTV_CARD_INPUT_LINE_IN2, IVTV_GPIO_LINE_IN }, 122762306a36Sopenharmony_ci }, 122862306a36Sopenharmony_ci .gpio_init = { .direction = 0x03e1, .initial_value = 0x0320 }, 122962306a36Sopenharmony_ci .gpio_audio_input = { .mask = 0x0060, 123062306a36Sopenharmony_ci .tuner = 0x0020, 123162306a36Sopenharmony_ci .linein = 0x0000, 123262306a36Sopenharmony_ci .radio = 0x0060 }, 123362306a36Sopenharmony_ci .gpio_audio_mute = { .mask = 0x0000, 123462306a36Sopenharmony_ci .mute = 0x0000 }, /* 0x200? Disable for now. */ 123562306a36Sopenharmony_ci .gpio_audio_mode = { .mask = 0x0080, 123662306a36Sopenharmony_ci .mono = 0x0000, 123762306a36Sopenharmony_ci .stereo = 0x0000, /* SAP */ 123862306a36Sopenharmony_ci .lang1 = 0x0080, 123962306a36Sopenharmony_ci .lang2 = 0x0000, 124062306a36Sopenharmony_ci .both = 0x0080 }, 124162306a36Sopenharmony_ci .tuners = { 124262306a36Sopenharmony_ci { .std = V4L2_STD_ALL, .tuner = TUNER_SONY_BTF_PXN01Z }, 124362306a36Sopenharmony_ci }, 124462306a36Sopenharmony_ci .pci_list = ivtv_pci_kikyou, 124562306a36Sopenharmony_ci .i2c = &ivtv_i2c_std, 124662306a36Sopenharmony_ci}; 124762306a36Sopenharmony_ci 124862306a36Sopenharmony_ci 124962306a36Sopenharmony_cistatic const struct ivtv_card *ivtv_card_list[] = { 125062306a36Sopenharmony_ci &ivtv_card_pvr250, 125162306a36Sopenharmony_ci &ivtv_card_pvr350, 125262306a36Sopenharmony_ci &ivtv_card_pvr150, 125362306a36Sopenharmony_ci &ivtv_card_m179, 125462306a36Sopenharmony_ci &ivtv_card_mpg600, 125562306a36Sopenharmony_ci &ivtv_card_mpg160, 125662306a36Sopenharmony_ci &ivtv_card_pg600, 125762306a36Sopenharmony_ci &ivtv_card_avc2410, 125862306a36Sopenharmony_ci &ivtv_card_avc2010, 125962306a36Sopenharmony_ci &ivtv_card_tg5000tv, 126062306a36Sopenharmony_ci &ivtv_card_va2000, 126162306a36Sopenharmony_ci &ivtv_card_cx23416gyc, 126262306a36Sopenharmony_ci &ivtv_card_gv_mvprx, 126362306a36Sopenharmony_ci &ivtv_card_gv_mvprx2e, 126462306a36Sopenharmony_ci &ivtv_card_gotview_pci_dvd, 126562306a36Sopenharmony_ci &ivtv_card_gotview_pci_dvd2, 126662306a36Sopenharmony_ci &ivtv_card_yuan_mpc622, 126762306a36Sopenharmony_ci &ivtv_card_dctmvtvp1, 126862306a36Sopenharmony_ci &ivtv_card_pg600v2, 126962306a36Sopenharmony_ci &ivtv_card_club3d, 127062306a36Sopenharmony_ci &ivtv_card_avertv_mce116, 127162306a36Sopenharmony_ci &ivtv_card_asus_falcon2, 127262306a36Sopenharmony_ci &ivtv_card_aver_pvr150, 127362306a36Sopenharmony_ci &ivtv_card_aver_ezmaker, 127462306a36Sopenharmony_ci &ivtv_card_aver_m104, 127562306a36Sopenharmony_ci &ivtv_card_buffalo, 127662306a36Sopenharmony_ci &ivtv_card_aver_ultra1500mce, 127762306a36Sopenharmony_ci &ivtv_card_kikyou, 127862306a36Sopenharmony_ci 127962306a36Sopenharmony_ci /* Variations of standard cards but with the same PCI IDs. 128062306a36Sopenharmony_ci These cards must come last in this list. */ 128162306a36Sopenharmony_ci &ivtv_card_pvr350_v1, 128262306a36Sopenharmony_ci &ivtv_card_cx23416gyc_nogr, 128362306a36Sopenharmony_ci &ivtv_card_cx23416gyc_nogrycs, 128462306a36Sopenharmony_ci}; 128562306a36Sopenharmony_ci 128662306a36Sopenharmony_ciconst struct ivtv_card *ivtv_get_card(u16 index) 128762306a36Sopenharmony_ci{ 128862306a36Sopenharmony_ci if (index >= ARRAY_SIZE(ivtv_card_list)) 128962306a36Sopenharmony_ci return NULL; 129062306a36Sopenharmony_ci return ivtv_card_list[index]; 129162306a36Sopenharmony_ci} 129262306a36Sopenharmony_ci 129362306a36Sopenharmony_ciint ivtv_get_input(struct ivtv *itv, u16 index, struct v4l2_input *input) 129462306a36Sopenharmony_ci{ 129562306a36Sopenharmony_ci const struct ivtv_card_video_input *card_input = itv->card->video_inputs + index; 129662306a36Sopenharmony_ci static const char * const input_strs[] = { 129762306a36Sopenharmony_ci "Tuner 1", 129862306a36Sopenharmony_ci "S-Video 1", 129962306a36Sopenharmony_ci "S-Video 2", 130062306a36Sopenharmony_ci "Composite 1", 130162306a36Sopenharmony_ci "Composite 2", 130262306a36Sopenharmony_ci "Composite 3" 130362306a36Sopenharmony_ci }; 130462306a36Sopenharmony_ci 130562306a36Sopenharmony_ci if (index >= itv->nof_inputs) 130662306a36Sopenharmony_ci return -EINVAL; 130762306a36Sopenharmony_ci input->index = index; 130862306a36Sopenharmony_ci strscpy(input->name, input_strs[card_input->video_type - 1], 130962306a36Sopenharmony_ci sizeof(input->name)); 131062306a36Sopenharmony_ci input->type = (card_input->video_type == IVTV_CARD_INPUT_VID_TUNER ? 131162306a36Sopenharmony_ci V4L2_INPUT_TYPE_TUNER : V4L2_INPUT_TYPE_CAMERA); 131262306a36Sopenharmony_ci input->audioset = (1 << itv->nof_audio_inputs) - 1; 131362306a36Sopenharmony_ci input->std = (input->type == V4L2_INPUT_TYPE_TUNER) ? 131462306a36Sopenharmony_ci itv->tuner_std : V4L2_STD_ALL; 131562306a36Sopenharmony_ci return 0; 131662306a36Sopenharmony_ci} 131762306a36Sopenharmony_ci 131862306a36Sopenharmony_ciint ivtv_get_output(struct ivtv *itv, u16 index, struct v4l2_output *output) 131962306a36Sopenharmony_ci{ 132062306a36Sopenharmony_ci const struct ivtv_card_output *card_output = itv->card->video_outputs + index; 132162306a36Sopenharmony_ci 132262306a36Sopenharmony_ci if (index >= itv->card->nof_outputs) 132362306a36Sopenharmony_ci return -EINVAL; 132462306a36Sopenharmony_ci output->index = index; 132562306a36Sopenharmony_ci strscpy(output->name, card_output->name, sizeof(output->name)); 132662306a36Sopenharmony_ci output->type = V4L2_OUTPUT_TYPE_ANALOG; 132762306a36Sopenharmony_ci output->audioset = 1; 132862306a36Sopenharmony_ci output->std = V4L2_STD_ALL; 132962306a36Sopenharmony_ci return 0; 133062306a36Sopenharmony_ci} 133162306a36Sopenharmony_ci 133262306a36Sopenharmony_ciint ivtv_get_audio_input(struct ivtv *itv, u16 index, struct v4l2_audio *audio) 133362306a36Sopenharmony_ci{ 133462306a36Sopenharmony_ci const struct ivtv_card_audio_input *aud_input = itv->card->audio_inputs + index; 133562306a36Sopenharmony_ci static const char * const input_strs[] = { 133662306a36Sopenharmony_ci "Tuner 1", 133762306a36Sopenharmony_ci "Line In 1", 133862306a36Sopenharmony_ci "Line In 2" 133962306a36Sopenharmony_ci }; 134062306a36Sopenharmony_ci 134162306a36Sopenharmony_ci memset(audio, 0, sizeof(*audio)); 134262306a36Sopenharmony_ci if (index >= itv->nof_audio_inputs) 134362306a36Sopenharmony_ci return -EINVAL; 134462306a36Sopenharmony_ci strscpy(audio->name, input_strs[aud_input->audio_type - 1], 134562306a36Sopenharmony_ci sizeof(audio->name)); 134662306a36Sopenharmony_ci audio->index = index; 134762306a36Sopenharmony_ci audio->capability = V4L2_AUDCAP_STEREO; 134862306a36Sopenharmony_ci return 0; 134962306a36Sopenharmony_ci} 135062306a36Sopenharmony_ci 135162306a36Sopenharmony_ciint ivtv_get_audio_output(struct ivtv *itv, u16 index, struct v4l2_audioout *aud_output) 135262306a36Sopenharmony_ci{ 135362306a36Sopenharmony_ci memset(aud_output, 0, sizeof(*aud_output)); 135462306a36Sopenharmony_ci if (itv->card->video_outputs == NULL || index != 0) 135562306a36Sopenharmony_ci return -EINVAL; 135662306a36Sopenharmony_ci strscpy(aud_output->name, "A/V Audio Out", sizeof(aud_output->name)); 135762306a36Sopenharmony_ci return 0; 135862306a36Sopenharmony_ci} 1359