From 990528ebe7b7f07f67e29e66700297b10557a706 Mon Sep 17 00:00:00 2001 From: Jarod Wilson Date: Thu, 24 Mar 2011 16:43:45 -0300 Subject: [media] lirc_sasem: key debug spew off debug modparam Signed-off-by: Jarod Wilson Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/lirc/lirc_sasem.c | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/lirc/lirc_sasem.c b/drivers/staging/lirc/lirc_sasem.c index 63a438d..7080cde 100644 --- a/drivers/staging/lirc/lirc_sasem.c +++ b/drivers/staging/lirc/lirc_sasem.c @@ -570,6 +570,7 @@ static void incoming_packet(struct sasem_context *context, unsigned char *buf = urb->transfer_buffer; long ms; struct timeval tv; + int i; if (len != 8) { printk(KERN_WARNING "%s: invalid incoming packet size (%d)\n", @@ -577,12 +578,12 @@ static void incoming_packet(struct sasem_context *context, return; } -#ifdef DEBUG - int i; - for (i = 0; i < 8; ++i) - printk(KERN_INFO "%02x ", buf[i]); - printk(KERN_INFO "\n"); -#endif + if (debug) { + printk(KERN_INFO "Incoming data: "); + for (i = 0; i < 8; ++i) + printk(KERN_CONT "%02x ", buf[i]); + printk(KERN_CONT "\n"); + } /* * Lirc could deal with the repeat code, but we really need to block it -- cgit v1.1 From cc73b4b57c59141bb8a99f86a1af95f296262558 Mon Sep 17 00:00:00 2001 From: Jarod Wilson Date: Mon, 11 Apr 2011 18:49:24 -0300 Subject: [media] tm6000: fix vbuf may be used uninitialized In commit 8aff8ba95155df, most of the manipulations to vbuf inside copy_streams were gated on if !dev->radio, but one place that touches vbuf lays outside those gates -- a memcpy of vbuf isn't NULL. If we initialize vbuf to NULL, that memcpy will never happen in the case where we do have dev->radio, and otherwise, in the !dev->radio case, the code behaves exactly like it did prior to 8aff8ba95155df. While we're at it, also fix an incorrectly indented closing brace for one of the sections touching vbuf that is conditional on !dev->radio. Signed-off-by: Jarod Wilson Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-video.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 17db668..f82edfa 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -228,7 +228,7 @@ static int copy_streams(u8 *data, unsigned long len, unsigned long header = 0; int rc = 0; unsigned int cmd, cpysize, pktsize, size, field, block, line, pos = 0; - struct tm6000_buffer *vbuf; + struct tm6000_buffer *vbuf = NULL; char *voutp = NULL; unsigned int linewidth; @@ -318,7 +318,7 @@ static int copy_streams(u8 *data, unsigned long len, if (pos + size > vbuf->vb.size) cmd = TM6000_URB_MSG_ERR; dev->isoc_ctl.vfield = field; - } + } break; case TM6000_URB_MSG_VBI: break; -- cgit v1.1 From 5ed9bd02444a00bb1e8ecc1baa8ecdb633afc126 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 4 Apr 2011 17:18:44 -0300 Subject: [media] tm6000: add CARDLIST add CARDLIST Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/CARDLIST | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 drivers/staging/tm6000/CARDLIST (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/CARDLIST b/drivers/staging/tm6000/CARDLIST new file mode 100644 index 0000000..b5edce4 --- /dev/null +++ b/drivers/staging/tm6000/CARDLIST @@ -0,0 +1,16 @@ + 1 -> Generic tm5600 board (tm5600) [6000:0001] + 2 -> Generic tm6000 board (tm6000) [6000:0001] + 3 -> Generic tm6010 board (tm6010) [6000:0002] + 4 -> 10Moons UT821 (tm5600) [6000:0001] + 5 -> 10Moons UT330 (tm5600) + 6 -> ADSTech Dual TV (tm6000) [06e1:f332] + 7 -> FreeCom and similar (tm6000) [14aa:0620] + 8 -> ADSTech Mini Dual TV (tm6000) [06e1:b339] + 9 -> Hauppauge WinTV HVR-900H/USB2 Stick (tm6010) [2040:6600,2040:6601,2040:6610,2040:6611] + 10 -> Beholder Wander (tm6010) [6000:dec0] + 11 -> Beholder Voyager (tm6010) [6000:dec1] + 12 -> TerraTec Cinergy Hybrid XE/Cinergy Hybrid Stick (tm6010) [0ccd:0086,0ccd:00a5] + 13 -> TwinHan TU501 (tm6010) [13d3:3240,13d3:3241,13d3:3243,13d3:3264] + 14 -> Beholder Wander Lite (tm6010) [6000:dec2] + 15 -> Beholder Voyager Lite (tm6010) [6000:dec3] + -- cgit v1.1 From 792bc09a9896dfbdac575ab4cdcd0f4db96d8ca1 Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Wed, 20 Apr 2011 18:43:24 -0300 Subject: [media] tm6000: add detection based on eeprom name On some situations, it is desired to use eeprom data to detect the board type. This patch adds a logic for it and fixes 2 detection issues: 1) 10Moons UT-821 uses a generic Trident ID. Other boards also share the same ID. So, better to use an alternative way for it; 2) Sometimes, HVR-900H is loaded with the default Trident ID. This seems to be some hardware bug or race condition. The new logic will only be enabled if the device is detected as having a generic ID. Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 102 +++++++++++++++++++++++++++++----- drivers/staging/tm6000/tm6000-i2c.c | 33 ++++++----- drivers/staging/tm6000/tm6000.h | 2 + 3 files changed, 105 insertions(+), 32 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 146c7e8..6e51486 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -54,6 +54,11 @@ #define TM6010_BOARD_BEHOLD_VOYAGER_LITE 15 #define TM5600_BOARD_TERRATEC_GRABSTER 16 +#define is_generic(model) ((model == TM6000_BOARD_UNKNOWN) || \ + (model == TM5600_BOARD_GENERIC) || \ + (model == TM6000_BOARD_GENERIC) || \ + (model == TM6010_BOARD_GENERIC)) + #define TM6000_MAXBOARDS 16 static unsigned int card[] = {[0 ... (TM6000_MAXBOARDS - 1)] = UNSET }; @@ -64,6 +69,9 @@ static unsigned long tm6000_devused; struct tm6000_board { char *name; + char eename[16]; /* EEPROM name */ + unsigned eename_size; /* size of EEPROM name */ + unsigned eename_pos; /* Position where it appears at ROM */ struct tm6000_capabilities caps; enum tm6000_inaudio aradio; @@ -139,6 +147,9 @@ struct tm6000_board tm6000_boards[] = { [TM5600_BOARD_10MOONS_UT821] = { .name = "10Moons UT 821", .tuner_type = TUNER_XC2028, + .eename = { '1', '0', 'M', 'O', 'O', 'N', 'S', '5', '6', '0', '0', 0xff, 0x45, 0x5b}, + .eename_size = 14, + .eename_pos = 0x14, .type = TM5600, .tuner_addr = 0xc2 >> 1, .caps = { @@ -205,6 +216,9 @@ struct tm6000_board tm6000_boards[] = { }, [TM6010_BOARD_HAUPPAUGE_900H] = { .name = "Hauppauge WinTV HVR-900H / WinTV USB2-Stick", + .eename = { 'H', 0, 'V', 0, 'R', 0, '9', 0, '0', 0, '0', 0, 'H', 0 }, + .eename_size = 14, + .eename_pos = 0x42, .tuner_type = TUNER_XC2028, /* has a XC3028 */ .tuner_addr = 0xc2 >> 1, .demod_addr = 0x1e >> 1, @@ -370,7 +384,7 @@ struct tm6000_board tm6000_boards[] = { /* table of devices that work with this driver */ struct usb_device_id tm6000_id_table[] = { - { USB_DEVICE(0x6000, 0x0001), .driver_info = TM5600_BOARD_10MOONS_UT821 }, + { USB_DEVICE(0x6000, 0x0001), .driver_info = TM5600_BOARD_GENERIC }, { USB_DEVICE(0x6000, 0x0002), .driver_info = TM6010_BOARD_GENERIC }, { USB_DEVICE(0x06e1, 0xf332), .driver_info = TM6000_BOARD_ADSTECH_DUAL_TV }, { USB_DEVICE(0x14aa, 0x0620), .driver_info = TM6000_BOARD_FREECOM_AND_SIMILAR }, @@ -729,16 +743,10 @@ static void tm6000_config_tuner(struct tm6000_core *dev) } } -static int tm6000_init_dev(struct tm6000_core *dev) +static int fill_board_specific_data(struct tm6000_core *dev) { - struct v4l2_frequency f; - int rc = 0; - - mutex_init(&dev->lock); + int rc; - mutex_lock(&dev->lock); - - /* Initializa board-specific data */ dev->dev_type = tm6000_boards[dev->model].type; dev->tuner_type = tm6000_boards[dev->model].tuner_type; dev->tuner_addr = tm6000_boards[dev->model].tuner_addr; @@ -756,16 +764,80 @@ static int tm6000_init_dev(struct tm6000_core *dev) /* initialize hardware */ rc = tm6000_init(dev); if (rc < 0) - goto err; + return rc; rc = v4l2_device_register(&dev->udev->dev, &dev->v4l2_dev); if (rc < 0) - goto err; + return rc; - /* register i2c bus */ - rc = tm6000_i2c_register(dev); - if (rc < 0) - goto err; + /* initialize hardware */ + rc = tm6000_init(dev); + + return rc; +} + + +static void use_alternative_detection_method(struct tm6000_core *dev) +{ + int i, model = -1; + + if (!dev->eedata_size) + return; + + for (i = 0; i < ARRAY_SIZE(tm6000_boards); i++) { + if (!tm6000_boards[i].eename_size) + continue; + if (dev->eedata_size < tm6000_boards[i].eename_pos + + tm6000_boards[i].eename_size) + continue; + + if (!memcmp(&dev->eedata[tm6000_boards[i].eename_pos], + tm6000_boards[i].eename, + tm6000_boards[i].eename_size)) { + model = i; + break; + } + } + if (model < 0) { + printk(KERN_INFO "Device has eeprom but is currently unknown\n"); + return; + } + + dev->model = model; + + printk(KERN_INFO "Device identified via eeprom as %s (type = %d)\n", + tm6000_boards[model].name, model); +} + +static int tm6000_init_dev(struct tm6000_core *dev) +{ + struct v4l2_frequency f; + int rc = 0; + + mutex_init(&dev->lock); + mutex_lock(&dev->lock); + + if (!is_generic(dev->model)) { + rc = fill_board_specific_data(dev); + if (rc < 0) + goto err; + + /* register i2c bus */ + rc = tm6000_i2c_register(dev); + if (rc < 0) + goto err; + } else { + /* register i2c bus */ + rc = tm6000_i2c_register(dev); + if (rc < 0) + goto err; + + use_alternative_detection_method(dev); + + rc = fill_board_specific_data(dev); + if (rc < 0) + goto err; + } /* Default values for STD and resolutions */ dev->width = 720; diff --git a/drivers/staging/tm6000/tm6000-i2c.c b/drivers/staging/tm6000/tm6000-i2c.c index 18de474..8828c12 100644 --- a/drivers/staging/tm6000/tm6000-i2c.c +++ b/drivers/staging/tm6000/tm6000-i2c.c @@ -237,35 +237,36 @@ err: return rc; } -static int tm6000_i2c_eeprom(struct tm6000_core *dev, - unsigned char *eedata, int len) +static int tm6000_i2c_eeprom(struct tm6000_core *dev) { int i, rc; - unsigned char *p = eedata; + unsigned char *p = dev->eedata; unsigned char bytes[17]; dev->i2c_client.addr = 0xa0 >> 1; + dev->eedata_size = 0; bytes[16] = '\0'; - for (i = 0; i < len; ) { - *p = i; - rc = tm6000_i2c_recv_regs(dev, 0xa0, i, p, 1); + for (i = 0; i < sizeof(dev->eedata); ) { + *p = i; + rc = tm6000_i2c_recv_regs(dev, 0xa0, i, p, 1); if (rc < 1) { - if (p == eedata) + if (p == dev->eedata) goto noeeprom; else { printk(KERN_WARNING "%s: i2c eeprom read error (err=%d)\n", dev->name, rc); } - return -1; + return -EINVAL; } + dev->eedata_size++; p++; if (0 == (i % 16)) printk(KERN_INFO "%s: i2c eeprom %02x:", dev->name, i); - printk(" %02x", eedata[i]); - if ((eedata[i] >= ' ') && (eedata[i] <= 'z')) - bytes[i%16] = eedata[i]; + printk(" %02x", dev->eedata[i]); + if ((dev->eedata[i] >= ' ') && (dev->eedata[i] <= 'z')) + bytes[i%16] = dev->eedata[i]; else bytes[i%16] = '.'; @@ -280,15 +281,15 @@ static int tm6000_i2c_eeprom(struct tm6000_core *dev, bytes[i%16] = '\0'; for (i %= 16; i < 16; i++) printk(" "); + printk(" %s\n", bytes); } - printk(" %s\n", bytes); return 0; noeeprom: printk(KERN_INFO "%s: Huh, no eeprom present (err=%d)?\n", - dev->name, rc); - return rc; + dev->name, rc); + return -EINVAL; } /* ----------------------------------------------------------- */ @@ -314,7 +315,6 @@ static const struct i2c_algorithm tm6000_algo = { */ int tm6000_i2c_register(struct tm6000_core *dev) { - unsigned char eedata[256]; int rc; dev->i2c_adap.owner = THIS_MODULE; @@ -329,8 +329,7 @@ int tm6000_i2c_register(struct tm6000_core *dev) dev->i2c_client.adapter = &dev->i2c_adap; strlcpy(dev->i2c_client.name, "tm6000 internal", I2C_NAME_SIZE); - - tm6000_i2c_eeprom(dev, eedata, sizeof(eedata)); + tm6000_i2c_eeprom(dev); return 0; } diff --git a/drivers/staging/tm6000/tm6000.h b/drivers/staging/tm6000/tm6000.h index 99ae50e..fdd6d30 100644 --- a/drivers/staging/tm6000/tm6000.h +++ b/drivers/staging/tm6000/tm6000.h @@ -167,6 +167,8 @@ struct tm6000_core { int model; /* index in the device_data struct */ int devno; /* marks the number of this device */ enum tm6000_devtype dev_type; /* type of device */ + unsigned char eedata[256]; /* Eeprom data */ + unsigned eedata_size; /* Size of the eeprom info */ v4l2_std_id norm; /* Current norm */ int width, height; /* Selected resolution */ -- cgit v1.1 From 1416910743e63e751a95de14c0477e41d54076b7 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:49 -0300 Subject: [media] tm6000: add radio capabilities add radio capabilities Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 4 ++++ drivers/staging/tm6000/tm6000-video.c | 34 ++++++++++++++++++---------------- drivers/staging/tm6000/tm6000.h | 1 + 3 files changed, 23 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 6e51486..31ccd2f 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -254,6 +254,7 @@ struct tm6000_board tm6000_boards[] = { .has_zl10353 = 1, .has_eeprom = 1, .has_remote = 1, + .has_radio = 1. .has_input_comp = 1, .has_input_svid = 1, }, @@ -276,6 +277,7 @@ struct tm6000_board tm6000_boards[] = { .has_zl10353 = 0, .has_eeprom = 1, .has_remote = 1, + .has_radio = 1, .has_input_comp = 1, .has_input_svid = 1, }, @@ -350,6 +352,7 @@ struct tm6000_board tm6000_boards[] = { .has_zl10353 = 1, .has_eeprom = 1, .has_remote = 0, + .has_radio = 1, .has_input_comp = 0, .has_input_svid = 0, }, @@ -372,6 +375,7 @@ struct tm6000_board tm6000_boards[] = { .has_zl10353 = 0, .has_eeprom = 1, .has_remote = 0, + .has_radio = 1, .has_input_comp = 0, .has_input_svid = 0, }, diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index f82edfa..a434a32 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -1730,24 +1730,26 @@ int tm6000_v4l2_register(struct tm6000_core *dev) printk(KERN_INFO "%s: registered device %s\n", dev->name, video_device_node_name(dev->vfd)); - dev->radio_dev = vdev_init(dev, &tm6000_radio_template, - "radio"); - if (!dev->radio_dev) { - printk(KERN_INFO "%s: can't register radio device\n", - dev->name); - return ret; /* FIXME release resource */ - } + if (dev->caps.has_radio) { + dev->radio_dev = vdev_init(dev, &tm6000_radio_template, + "radio"); + if (!dev->radio_dev) { + printk(KERN_INFO "%s: can't register radio device\n", + dev->name); + return ret; /* FIXME release resource */ + } - ret = video_register_device(dev->radio_dev, VFL_TYPE_RADIO, - radio_nr); - if (ret < 0) { - printk(KERN_INFO "%s: can't register radio device\n", - dev->name); - return ret; /* FIXME release resource */ - } + ret = video_register_device(dev->radio_dev, VFL_TYPE_RADIO, + radio_nr); + if (ret < 0) { + printk(KERN_INFO "%s: can't register radio device\n", + dev->name); + return ret; /* FIXME release resource */ + } - printk(KERN_INFO "%s: registered device %s\n", - dev->name, video_device_node_name(dev->radio_dev)); + printk(KERN_INFO "%s: registered device %s\n", + dev->name, video_device_node_name(dev->radio_dev)); + } printk(KERN_INFO "Trident TVMaster TM5600/TM6000/TM6010 USB2 board (Load status: %d)\n", ret); return ret; diff --git a/drivers/staging/tm6000/tm6000.h b/drivers/staging/tm6000/tm6000.h index fdd6d30..8cdc992 100644 --- a/drivers/staging/tm6000/tm6000.h +++ b/drivers/staging/tm6000/tm6000.h @@ -129,6 +129,7 @@ struct tm6000_capabilities { unsigned int has_zl10353:1; unsigned int has_eeprom:1; unsigned int has_remote:1; + unsigned int has_radio:1; unsigned int has_input_comp:1; unsigned int has_input_svid:1; }; -- cgit v1.1 From 886a3c0b58f4c3d11a8cf723b8f5ee167708ebf5 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:50 -0300 Subject: [media] tm6000: add tm6010 audio mode setup add tm6010 audio mode setup Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-stds.c | 149 +++++++++++++++++++--------------- drivers/staging/tm6000/tm6000-video.c | 35 +++++--- drivers/staging/tm6000/tm6000.h | 1 + 3 files changed, 107 insertions(+), 78 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-stds.c b/drivers/staging/tm6000/tm6000-stds.c index da3e51b..588b1fc 100644 --- a/drivers/staging/tm6000/tm6000-stds.c +++ b/drivers/staging/tm6000/tm6000-stds.c @@ -22,6 +22,9 @@ #include "tm6000.h" #include "tm6000-regs.h" +static unsigned int tm6010_a_mode = 0; +module_param(tm6010_a_mode, int, 0644); +MODULE_PARM_DESC(tm6010_a_mode, "set tm6010 sif audio mode"); struct tm6000_reg_settings { unsigned char req; unsigned char reg; @@ -947,9 +950,8 @@ static int tm6000_set_audio_std(struct tm6000_core *dev, enum tm6000_audio_std std) { uint8_t areg_02 = 0x04; /* GC1 Fixed gain 0dB */ - uint8_t areg_05 = 0x09; /* Auto 4.5 = M Japan, Auto 6.5 = DK */ + uint8_t areg_05 = 0x01; /* Auto 4.5 = M Japan, Auto 6.5 = DK */ uint8_t areg_06 = 0x02; /* Auto de-emphasis, mannual channel mode */ - uint8_t mono_flag = 0; /* No mono */ uint8_t nicam_flag = 0; /* No NICAM */ if (dev->radio) { @@ -958,81 +960,99 @@ static int tm6000_set_audio_std(struct tm6000_core *dev, tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00); tm6000_set_reg(dev, TM6010_REQ08_R04_A_SIF_AMP_CTRL, 0x80); tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x0c); - tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x00); + /* set mono or stereo */ + if (dev->amode == V4L2_TUNER_MODE_MONO) + tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x00); + else if (dev->amode == V4L2_TUNER_MODE_STEREO) + tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x02); tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x18); tm6000_set_reg(dev, TM6010_REQ08_R0C_A_ASD_THRES2, 0x0a); tm6000_set_reg(dev, TM6010_REQ08_R0D_A_AMD_THRES, 0x40); - tm6000_set_reg(dev, TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc); + tm6000_set_reg(dev, TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe); tm6000_set_reg(dev, TM6010_REQ08_R1E_A_GAIN_DEEMPH_OUT, 0x13); tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80); return 0; } - switch (std) { -#if 0 - case DK_MONO: - mono_flag = 1; - break; - case DK_A2_1: - break; - case DK_A2_3: - areg_05 = 0x0b; - break; - case BG_MONO: - mono_flag = 1; - areg_05 = 0x05; - break; -#endif - case BG_NICAM: - areg_05 = 0x07; - nicam_flag = 1; - break; - case BTSC: - areg_05 = 0x02; - break; - case BG_A2: - areg_05 = 0x05; - break; - case DK_NICAM: - areg_05 = 0x06; - nicam_flag = 1; - break; - case EIAJ: - areg_05 = 0x02; - break; - case I_NICAM: - areg_05 = 0x08; - nicam_flag = 1; + switch (tm6010_a_mode) { + /* auto */ + case 0: + switch (dev->norm) { + case V4L2_STD_NTSC_M_KR: + areg_05 |= 0x00; + break; + case V4L2_STD_NTSC_M_JP: + areg_05 |= 0x40; + break; + case V4L2_STD_NTSC_M: + case V4L2_STD_PAL_M: + case V4L2_STD_PAL_N: + areg_05 |= 0x20; + break; + case V4L2_STD_PAL_Nc: + areg_05 |= 0x60; + break; + case V4L2_STD_SECAM_L: + areg_05 |= 0x00; + break; + case V4L2_STD_DK: + areg_05 |= 0x10; + break; + } break; - case KOREA_A2: - areg_05 = 0x04; + /* A2 */ + case 1: + switch (dev->norm) { + case V4L2_STD_B: + case V4L2_STD_GH: + areg_05 = 0x05; + break; + case V4L2_STD_DK: + areg_05 = 0x09; + break; + } break; - case L_NICAM: - areg_02 = 0x02; /* GC1 Fixed gain +12dB */ - areg_05 = 0x0a; + /* NICAM */ + case 2: + switch (dev->norm) { + case V4L2_STD_B: + case V4L2_STD_GH: + areg_05 = 0x07; + break; + case V4L2_STD_DK: + areg_05 = 0x06; + break; + case V4L2_STD_PAL_I: + areg_05 = 0x08; + break; + case V4L2_STD_SECAM_L: + areg_05 = 0x0a; + areg_02 = 0x02; + break; + } nicam_flag = 1; break; - default: - /* do nothink */ - break; - } - -#if 0 - switch (tv_audio_mode) { - case TV_MONO: - areg_06 = (nicam_flag) ? 0x03 : 0x00; - break; - case TV_LANG_A: - areg_06 = 0x00; - break; - case TV_LANG_B: - areg_06 = 0x01; + /* other */ + case 3: + switch (dev->norm) { + /* DK3_A2 */ + case V4L2_STD_DK: + areg_05 = 0x0b; + break; + /* Korea */ + case V4L2_STD_NTSC_M_KR: + areg_05 = 0x04; + break; + /* EIAJ */ + case V4L2_STD_NTSC_M_JP: + areg_05 = 0x03; + break; + default: + areg_05 = 0x02; + break; + } break; } -#endif - - if (mono_flag) - areg_06 = 0x00; tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00); tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, areg_02); @@ -1066,9 +1086,6 @@ static int tm6000_set_audio_std(struct tm6000_core *dev, tm6000_set_reg(dev, TM6010_REQ08_R1E_A_GAIN_DEEMPH_OUT, 0x13); tm6000_set_reg(dev, TM6010_REQ08_R1F_A_TEST_INTF_SEL, 0x00); tm6000_set_reg(dev, TM6010_REQ08_R20_A_TEST_PIN_SEL, 0x00); - tm6000_set_reg(dev, TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3); - tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x00); - tm6000_set_reg(dev, TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc); tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80); return 0; diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index a434a32..e1a7eb2 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -34,6 +34,7 @@ #include #include #include +#include #include #include #include @@ -883,14 +884,19 @@ static void res_free(struct tm6000_core *dev, struct tm6000_fh *fh) static int vidioc_querycap(struct file *file, void *priv, struct v4l2_capability *cap) { + struct tm6000_core *dev = ((struct tm6000_fh *)priv)->dev; strlcpy(cap->driver, "tm6000", sizeof(cap->driver)); strlcpy(cap->card, "Trident TVMaster TM5600/6000/6010", sizeof(cap->card)); cap->version = TM6000_VERSION; cap->capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_STREAMING | - V4L2_CAP_TUNER | + V4L2_CAP_AUDIO | V4L2_CAP_READWRITE; + + if (dev->tuner_type != TUNER_ABSENT) + cap->capabilities |= V4L2_CAP_TUNER; + return 0; } @@ -1150,7 +1156,7 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int i) return rc; } - /* --- controls ---------------------------------------------- */ +/* --- controls ---------------------------------------------- */ static int vidioc_queryctrl(struct file *file, void *priv, struct v4l2_queryctrl *qc) { @@ -1251,7 +1257,11 @@ static int vidioc_g_tuner(struct file *file, void *priv, t->type = V4L2_TUNER_ANALOG_TV; t->capability = V4L2_TUNER_CAP_NORM; t->rangehigh = 0xffffffffUL; - t->rxsubchans = V4L2_TUNER_SUB_MONO; + t->rxsubchans = V4L2_TUNER_SUB_STEREO; + + v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t); + + t->audmode = dev->amode; return 0; } @@ -1267,6 +1277,10 @@ static int vidioc_s_tuner(struct file *file, void *priv, if (0 != t->index) return -EINVAL; + dev->amode = t->audmode; + dprintk(dev, 3, "audio mode: %x\n", t->audmode); + + v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t); return 0; } @@ -1320,7 +1334,11 @@ static int radio_querycap(struct file *file, void *priv, le16_to_cpu(dev->udev->descriptor.idVendor), le16_to_cpu(dev->udev->descriptor.idProduct)); cap->version = dev->dev_type; - cap->capabilities = V4L2_CAP_TUNER; + cap->capabilities = V4L2_CAP_TUNER | + V4L2_CAP_AUDIO | + V4L2_CAP_RADIO | + V4L2_CAP_READWRITE | + V4L2_CAP_STREAMING; return 0; } @@ -1337,17 +1355,10 @@ static int radio_g_tuner(struct file *file, void *priv, memset(t, 0, sizeof(*t)); strcpy(t->name, "Radio"); t->type = V4L2_TUNER_RADIO; + t->rxsubchans = V4L2_TUNER_SUB_STEREO; v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, g_tuner, t); - if ((dev->aradio == TM6000_AIP_LINE1) || - (dev->aradio == TM6000_AIP_LINE2)) { - t->rxsubchans = V4L2_TUNER_SUB_MONO; - } - else { - t->rxsubchans = V4L2_TUNER_SUB_STEREO; - } - return 0; } diff --git a/drivers/staging/tm6000/tm6000.h b/drivers/staging/tm6000/tm6000.h index 8cdc992..43b0d62 100644 --- a/drivers/staging/tm6000/tm6000.h +++ b/drivers/staging/tm6000/tm6000.h @@ -221,6 +221,7 @@ struct tm6000_core { int ctl_mute; /* audio */ int ctl_volume; + int amode; /* DVB-T support */ struct tm6000_dvb *dvb; -- cgit v1.1 From fb7ef9831a432a6ae82587d1477103c18f99be73 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:51 -0300 Subject: [media] tm6000: change to virtual inputs change to virtual inputs Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 257 ++++++++++++++++++++++++++++++++-- drivers/staging/tm6000/tm6000-core.c | 60 ++++---- drivers/staging/tm6000/tm6000.h | 36 +++-- 3 files changed, 303 insertions(+), 50 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 31ccd2f..9f4daac 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -74,8 +74,6 @@ struct tm6000_board { unsigned eename_pos; /* Position where it appears at ROM */ struct tm6000_capabilities caps; - enum tm6000_inaudio aradio; - enum tm6000_inaudio avideo; enum tm6000_devtype type; /* variant of the chipset */ int tuner_type; /* type of the tuner */ @@ -84,6 +82,8 @@ struct tm6000_board { struct tm6000_gpio gpio; + struct tm6000_input vinput[3]; + struct tm6000_input rinput; char *ir_codes; }; @@ -96,6 +96,20 @@ struct tm6000_board tm6000_boards[] = { .gpio = { .tuner_reset = TM6000_GPIO_1, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM5600_BOARD_GENERIC] = { .name = "Generic tm5600 board", @@ -108,6 +122,20 @@ struct tm6000_board tm6000_boards[] = { .gpio = { .tuner_reset = TM6000_GPIO_1, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6000_BOARD_GENERIC] = { .name = "Generic tm6000 board", @@ -120,6 +148,20 @@ struct tm6000_board tm6000_boards[] = { .gpio = { .tuner_reset = TM6000_GPIO_1, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6010_BOARD_GENERIC] = { .name = "Generic tm6010 board", @@ -143,6 +185,20 @@ struct tm6000_board tm6000_boards[] = { .dvb_led = TM6010_GPIO_5, .ir = TM6010_GPIO_0, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM5600_BOARD_10MOONS_UT821] = { .name = "10Moons UT 821", @@ -159,6 +215,20 @@ struct tm6000_board tm6000_boards[] = { .gpio = { .tuner_reset = TM6000_GPIO_1, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM5600_BOARD_10MOONS_UT330] = { .name = "10Moons UT 330", @@ -170,6 +240,20 @@ struct tm6000_board tm6000_boards[] = { .has_zl10353 = 0, .has_eeprom = 1, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6000_BOARD_ADSTECH_DUAL_TV] = { .name = "ADSTECH Dual TV USB", @@ -182,6 +266,20 @@ struct tm6000_board tm6000_boards[] = { .has_zl10353 = 1, .has_eeprom = 1, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6000_BOARD_FREECOM_AND_SIMILAR] = { .name = "Freecom Hybrid Stick / Moka DVB-T Receiver Dual", @@ -198,6 +296,20 @@ struct tm6000_board tm6000_boards[] = { .gpio = { .tuner_reset = TM6000_GPIO_4, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6000_BOARD_ADSTECH_MINI_DUAL_TV] = { .name = "ADSTECH Mini Dual TV USB", @@ -213,6 +325,20 @@ struct tm6000_board tm6000_boards[] = { .gpio = { .tuner_reset = TM6000_GPIO_4, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6010_BOARD_HAUPPAUGE_900H] = { .name = "Hauppauge WinTV HVR-900H / WinTV USB2-Stick", @@ -239,6 +365,20 @@ struct tm6000_board tm6000_boards[] = { .dvb_led = TM6010_GPIO_5, .ir = TM6010_GPIO_0, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6010_BOARD_BEHOLD_WANDER] = { .name = "Beholder Wander DVB-T/TV/FM USB2.0", @@ -246,8 +386,6 @@ struct tm6000_board tm6000_boards[] = { .tuner_addr = 0xc2 >> 1, .demod_addr = 0x1e >> 1, .type = TM6010, - .avideo = TM6000_AIP_SIF1, - .aradio = TM6000_AIP_LINE1, .caps = { .has_tuner = 1, .has_dvb = 1, @@ -263,14 +401,30 @@ struct tm6000_board tm6000_boards[] = { .demod_reset = TM6010_GPIO_1, .power_led = TM6010_GPIO_6, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, + .rinput = { + .type = TM6000_INPUT_RADIO, + .amux = TM6000_AMUX_ADC1, + }, }, [TM6010_BOARD_BEHOLD_VOYAGER] = { .name = "Beholder Voyager TV/FM USB2.0", .tuner_type = TUNER_XC5000, .tuner_addr = 0xc2 >> 1, .type = TM6010, - .avideo = TM6000_AIP_SIF1, - .aradio = TM6000_AIP_LINE1, .caps = { .has_tuner = 1, .has_dvb = 0, @@ -285,6 +439,24 @@ struct tm6000_board tm6000_boards[] = { .tuner_reset = TM6010_GPIO_0, .power_led = TM6010_GPIO_6, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, + .rinput = { + .type = TM6000_INPUT_RADIO, + .amux = TM6000_AMUX_ADC1, + }, }, [TM6010_BOARD_TERRATEC_CINERGY_HYBRID_XE] = { .name = "Terratec Cinergy Hybrid XE / Cinergy Hybrid-Stick", @@ -309,11 +481,39 @@ struct tm6000_board tm6000_boards[] = { .ir = TM6010_GPIO_0, }, .ir_codes = RC_MAP_NEC_TERRATEC_CINERGY_XS, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM5600_BOARD_TERRATEC_GRABSTER] = { .name = "Terratec Grabster AV 150/250 MX", .type = TM5600, .tuner_type = TUNER_ABSENT, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_ADC1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6010_BOARD_TWINHAN_TU501] = { .name = "Twinhan TU501(704D1)", @@ -337,6 +537,20 @@ struct tm6000_board tm6000_boards[] = { .dvb_led = TM6010_GPIO_5, .ir = TM6010_GPIO_0, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, { + .type = TM6000_INPUT_COMPOSITE1, + .vmux = TM6000_VMUX_VIDEO_A, + .amux = TM6000_AMUX_ADC2, + }, { + .type = TM6000_INPUT_SVIDEO, + .vmux = TM6000_VMUX_VIDEO_AB, + .amux = TM6000_AMUX_ADC2, + }, + }, }, [TM6010_BOARD_BEHOLD_WANDER_LITE] = { .name = "Beholder Wander Lite DVB-T/TV/FM USB2.0", @@ -344,8 +558,6 @@ struct tm6000_board tm6000_boards[] = { .tuner_addr = 0xc2 >> 1, .demod_addr = 0x1e >> 1, .type = TM6010, - .avideo = TM6000_AIP_SIF1, - .aradio = TM6000_AIP_LINE1, .caps = { .has_tuner = 1, .has_dvb = 1, @@ -361,14 +573,22 @@ struct tm6000_board tm6000_boards[] = { .demod_reset = TM6010_GPIO_1, .power_led = TM6010_GPIO_6, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, + }, + .rinput = { + .type = TM6000_INPUT_RADIO, + .amux = TM6000_AMUX_ADC1, + }, }, [TM6010_BOARD_BEHOLD_VOYAGER_LITE] = { .name = "Beholder Voyager Lite TV/FM USB2.0", .tuner_type = TUNER_XC5000, .tuner_addr = 0xc2 >> 1, .type = TM6010, - .avideo = TM6000_AIP_SIF1, - .aradio = TM6000_AIP_LINE1, .caps = { .has_tuner = 1, .has_dvb = 0, @@ -383,6 +603,16 @@ struct tm6000_board tm6000_boards[] = { .tuner_reset = TM6010_GPIO_0, .power_led = TM6010_GPIO_6, }, + .vinput = { { + .type = TM6000_INPUT_TV, + .vmux = TM6000_VMUX_VIDEO_B, + .amux = TM6000_AMUX_SIF1, + }, + }, + .rinput = { + .type = TM6000_INPUT_RADIO, + .amux = TM6000_AMUX_ADC1, + }, }, }; @@ -763,8 +993,11 @@ static int fill_board_specific_data(struct tm6000_core *dev) dev->caps = tm6000_boards[dev->model].caps; - dev->avideo = tm6000_boards[dev->model].avideo; - dev->aradio = tm6000_boards[dev->model].aradio; + dev->vinput[0] = tm6000_boards[dev->model].vinput[0]; + dev->vinput[1] = tm6000_boards[dev->model].vinput[1]; + dev->vinput[2] = tm6000_boards[dev->model].vinput[2]; + dev->rinput = tm6000_boards[dev->model].rinput; + /* initialize hardware */ rc = tm6000_init(dev); if (rc < 0) diff --git a/drivers/staging/tm6000/tm6000-core.c b/drivers/staging/tm6000/tm6000-core.c index 778e534..f4b9fcd 100644 --- a/drivers/staging/tm6000/tm6000-core.c +++ b/drivers/staging/tm6000/tm6000-core.c @@ -661,20 +661,25 @@ int tm6000_set_audio_input(struct tm6000_core *dev, enum tm6000_inaudio ainp) { if (dev->dev_type == TM6010) { /* Audio crossbar setting, default SIF1 */ - u8 areg_f0 = 0x03; + u8 areg_f0; - switch (ainp) { - case TM6000_AIP_SIF1: - case TM6000_AIP_SIF2: + switch (dev->rinput.amux) { + case TM6000_AMUX_SIF1: + case TM6000_AMUX_SIF2: areg_f0 = 0x03; break; - case TM6000_AIP_LINE1: + case TM6000_AMUX_ADC1: areg_f0 = 0x00; break; - case TM6000_AIP_LINE2: + case TM6000_AMUX_ADC2: areg_f0 = 0x08; break; + case TM6000_AMUX_I2S: + areg_f0 = 0x04; + break; default: + printk(KERN_INFO "%s: audio input dosn't support\n", + dev->name); return 0; break; } @@ -682,17 +687,18 @@ int tm6000_set_audio_input(struct tm6000_core *dev, enum tm6000_inaudio ainp) tm6000_set_reg_mask(dev, TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, areg_f0, 0x0f); } else { + u8 areg_eb; /* Audio setting, default LINE1 */ - u8 areg_eb = 0x00; - - switch (ainp) { - case TM6000_AIP_LINE1: + switch (dev->rinput.amux) { + case TM6000_AMUX_ADC1: areg_eb = 0x00; break; - case TM6000_AIP_LINE2: + case TM6000_AMUX_ADC2: areg_eb = 0x04; break; default: + printk(KERN_INFO "%s: audio input dosn't support\n", + dev->name); return 0; break; } @@ -736,16 +742,16 @@ void tm6010_set_mute_adc(struct tm6000_core *dev, u8 mute) int tm6000_tvaudio_set_mute(struct tm6000_core *dev, u8 mute) { - enum tm6000_inaudio ainp; + enum tm6000_mux mux; if (dev->radio) - ainp = dev->aradio; + mux = dev->rinput.amux; else - ainp = dev->avideo; + mux = dev->vinput[dev->input].amux; - switch (ainp) { - case TM6000_AIP_SIF1: - case TM6000_AIP_SIF2: + switch (mux) { + case TM6000_AMUX_SIF1: + case TM6000_AMUX_SIF2: if (dev->dev_type == TM6010) tm6010_set_mute_sif(dev, mute); else { @@ -755,8 +761,8 @@ int tm6000_tvaudio_set_mute(struct tm6000_core *dev, u8 mute) return -EINVAL; } break; - case TM6000_AIP_LINE1: - case TM6000_AIP_LINE2: + case TM6000_AMUX_ADC1: + case TM6000_AMUX_ADC2: tm6010_set_mute_adc(dev, mute); break; default: @@ -797,17 +803,17 @@ void tm6010_set_volume_adc(struct tm6000_core *dev, int vol) void tm6000_set_volume(struct tm6000_core *dev, int vol) { - enum tm6000_inaudio ainp; + enum tm6000_mux mux; if (dev->radio) { - ainp = dev->aradio; + mux = dev->rinput.amux; vol += 8; /* Offset to 0 dB */ } else - ainp = dev->avideo; + mux = dev->vinput[dev->input].amux; - switch (ainp) { - case TM6000_AIP_SIF1: - case TM6000_AIP_SIF2: + switch (mux) { + case TM6000_AMUX_SIF1: + case TM6000_AMUX_SIF2: if (dev->dev_type == TM6010) tm6010_set_volume_sif(dev, vol); else @@ -815,8 +821,8 @@ void tm6000_set_volume(struct tm6000_core *dev, int vol) " SIF audio inputs. Please check the %s" " configuration.\n", dev->name); break; - case TM6000_AIP_LINE1: - case TM6000_AIP_LINE2: + case TM6000_AMUX_ADC1: + case TM6000_AMUX_ADC2: tm6010_set_volume_adc(dev, vol); break; default: diff --git a/drivers/staging/tm6000/tm6000.h b/drivers/staging/tm6000/tm6000.h index 43b0d62..650decd 100644 --- a/drivers/staging/tm6000/tm6000.h +++ b/drivers/staging/tm6000/tm6000.h @@ -40,11 +40,24 @@ #define TM6000_VERSION KERNEL_VERSION(0, 0, 2) /* Inputs */ - enum tm6000_itype { - TM6000_INPUT_TV = 0, - TM6000_INPUT_COMPOSITE, + TM6000_INPUT_TV = 1, + TM6000_INPUT_COMPOSITE1, + TM6000_INPUT_COMPOSITE2, TM6000_INPUT_SVIDEO, + TM6000_INPUT_DVB, + TM6000_INPUT_RADIO, +}; + +enum tm6000_mux { + TM6000_VMUX_VIDEO_A = 1, + TM6000_VMUX_VIDEO_B, + TM6000_VMUX_VIDEO_AB, + TM6000_AMUX_ADC1, + TM6000_AMUX_ADC2, + TM6000_AMUX_SIF1, + TM6000_AMUX_SIF2, + TM6000_AMUX_I2S, }; enum tm6000_devtype { @@ -53,12 +66,12 @@ enum tm6000_devtype { TM6010, }; -enum tm6000_inaudio { - TM6000_AIP_UNK = 0, - TM6000_AIP_SIF1, - TM6000_AIP_SIF2, - TM6000_AIP_LINE1, - TM6000_AIP_LINE2, +struct tm6000_input { + enum tm6000_itype type; + enum tm6000_mux vmux; + enum tm6000_mux amux; + unsigned int v_gpio; + unsigned int a_gpio; }; /* ------------------------------------------------------------------ @@ -214,6 +227,9 @@ struct tm6000_core { struct v4l2_device v4l2_dev; int input; + struct tm6000_input vinput[3]; /* video input */ + struct tm6000_input rinput; /* radio input */ + int freq; unsigned int fourcc; @@ -230,8 +246,6 @@ struct tm6000_core { struct snd_tm6000_card *adev; struct work_struct wq_trigger; /* Trigger to start/stop audio for alsa module */ atomic_t stream_started; /* stream should be running if true */ - enum tm6000_inaudio avideo; - enum tm6000_inaudio aradio; struct tm6000_IR *ir; -- cgit v1.1 From b8f7bd8769f61705fd9acc1bc64539d74dfd0265 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:52 -0300 Subject: [media] tm6000: vitual input enums vitual input enums Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-video.c | 100 +++++++++++++++++++--------------- 1 file changed, 57 insertions(+), 43 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index e1a7eb2..8b3bf7e 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -1083,35 +1083,37 @@ static int vidioc_s_std (struct file *file, void *priv, v4l2_std_id *norm) return 0; } +static const char *iname [] = { + [TM6000_INPUT_TV] = "Television", + [TM6000_INPUT_COMPOSITE1] = "Composite 1", + [TM6000_INPUT_COMPOSITE2] = "Composite 2", + [TM6000_INPUT_SVIDEO] = "S-Video", +}; + static int vidioc_enum_input(struct file *file, void *priv, - struct v4l2_input *inp) + struct v4l2_input *i) { struct tm6000_fh *fh = priv; struct tm6000_core *dev = fh->dev; + unsigned int n; - switch (inp->index) { - case TM6000_INPUT_TV: - inp->type = V4L2_INPUT_TYPE_TUNER; - strcpy(inp->name, "Television"); - break; - case TM6000_INPUT_COMPOSITE: - if (dev->caps.has_input_comp) { - inp->type = V4L2_INPUT_TYPE_CAMERA; - strcpy(inp->name, "Composite"); - } else - return -EINVAL; - break; - case TM6000_INPUT_SVIDEO: - if (dev->caps.has_input_svid) { - inp->type = V4L2_INPUT_TYPE_CAMERA; - strcpy(inp->name, "S-Video"); - } else - return -EINVAL; - break; - default: + n = i->index; + if (n >= 3) return -EINVAL; - } - inp->std = TM6000_STD; + + if (!dev->vinput[n].type) + return -EINVAL; + + i->index = n; + + if (dev->vinput[n].type == TM6000_INPUT_TV) + i->type = V4L2_INPUT_TYPE_TUNER; + else + i->type = V4L2_INPUT_TYPE_CAMERA; + + strcpy(i->name, iname[dev->vinput[n].type]); + + i->std = TM6000_STD; return 0; } @@ -1125,33 +1127,21 @@ static int vidioc_g_input(struct file *file, void *priv, unsigned int *i) return 0; } + static int vidioc_s_input(struct file *file, void *priv, unsigned int i) { struct tm6000_fh *fh = priv; struct tm6000_core *dev = fh->dev; int rc = 0; - char buf[1]; - switch (i) { - case TM6000_INPUT_TV: - dev->input = i; - *buf = 0; - break; - case TM6000_INPUT_COMPOSITE: - case TM6000_INPUT_SVIDEO: - dev->input = i; - *buf = 1; - break; - default: + if (i >= 3) + return -EINVAL; + if (!dev->vinput[i].type) return -EINVAL; - } - rc = tm6000_read_write_usb(dev, USB_DIR_OUT | USB_TYPE_VENDOR, - REQ_03_SET_GET_MCU_PIN, 0x03, 1, buf, 1); - if (!rc) { - dev->input = i; - rc = vidioc_s_std(file, priv, &dev->vfd->current_norm); - } + dev->input = i; + + rc = vidioc_s_std(file, priv, &dev->vfd->current_norm); return rc; } @@ -1379,9 +1369,15 @@ static int radio_s_tuner(struct file *file, void *priv, static int radio_enum_input(struct file *file, void *priv, struct v4l2_input *i) { + struct tm6000_fh *fh = priv; + struct tm6000_core *dev = fh->dev; + if (i->index != 0) return -EINVAL; + if (!dev->rinput.type) + return -EINVAL; + strcpy(i->name, "Radio"); i->type = V4L2_INPUT_TYPE_TUNER; @@ -1390,7 +1386,14 @@ static int radio_enum_input(struct file *file, void *priv, static int radio_g_input(struct file *filp, void *priv, unsigned int *i) { - *i = 0; + struct tm6000_fh *fh = priv; + struct tm6000_core *dev = fh->dev; + + if (dev->input !=5) + return -EINVAL; + + *i = dev->input -5; + return 0; } @@ -1410,6 +1413,17 @@ static int radio_s_audio(struct file *file, void *priv, static int radio_s_input(struct file *filp, void *priv, unsigned int i) { + struct tm6000_fh *fh = priv; + struct tm6000_core *dev = fh->dev; + + if (i) + return -EINVAL; + + if (!dev->rinput.type) + return -EINVAL; + + dev->input = i + 5; + return 0; } -- cgit v1.1 From 0f6040e8929731d4294f1cffdbcb9be1523d60f0 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:53 -0300 Subject: [media] tm6000: change input control change input control Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-core.c | 12 +- drivers/staging/tm6000/tm6000-stds.c | 774 ++++++---------------------------- drivers/staging/tm6000/tm6000-video.c | 9 +- drivers/staging/tm6000/tm6000.h | 4 +- 4 files changed, 130 insertions(+), 669 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-core.c b/drivers/staging/tm6000/tm6000-core.c index f4b9fcd..259cf80 100644 --- a/drivers/staging/tm6000/tm6000-core.c +++ b/drivers/staging/tm6000/tm6000-core.c @@ -327,7 +327,7 @@ int tm6000_init_analog_mode(struct tm6000_core *dev) v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_frequency, &f); msleep(100); - tm6000_set_standard(dev, &dev->norm); + tm6000_set_standard(dev); tm6000_set_vbi(dev); tm6000_set_audio_bitrate(dev, 48000); @@ -489,14 +489,6 @@ struct reg_init tm6010_init_tab[] = { { TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0 }, { TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2 }, { TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60 }, - { TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00}, - { TM6010_REQ08_R04_A_SIF_AMP_CTRL, 0x80}, - { TM6010_REQ08_R0C_A_ASD_THRES2, 0x0a}, - { TM6010_REQ08_R0D_A_AMD_THRES, 0x40}, - { TM6010_REQ08_R1A_A_NICAM_SER_MAX, 0x64}, - { TM6010_REQ08_R1B_A_NICAM_SER_MIN, 0x20}, - { TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe}, - { TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01}, { TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc }, { TM6010_REQ07_R3F_RESET, 0x01 }, @@ -657,7 +649,7 @@ int tm6000_set_audio_bitrate(struct tm6000_core *dev, int bitrate) } EXPORT_SYMBOL_GPL(tm6000_set_audio_bitrate); -int tm6000_set_audio_input(struct tm6000_core *dev, enum tm6000_inaudio ainp) +int tm6000_set_audio_rinput(struct tm6000_core *dev) { if (dev->dev_type == TM6010) { /* Audio crossbar setting, default SIF1 */ diff --git a/drivers/staging/tm6000/tm6000-stds.c b/drivers/staging/tm6000/tm6000-stds.c index 588b1fc..8b29d73 100644 --- a/drivers/staging/tm6000/tm6000-stds.c +++ b/drivers/staging/tm6000/tm6000-stds.c @@ -25,422 +25,23 @@ static unsigned int tm6010_a_mode = 0; module_param(tm6010_a_mode, int, 0644); MODULE_PARM_DESC(tm6010_a_mode, "set tm6010 sif audio mode"); + struct tm6000_reg_settings { unsigned char req; unsigned char reg; unsigned char value; }; -enum tm6000_audio_std { - BG_NICAM, - BTSC, - BG_A2, - DK_NICAM, - EIAJ, - FM_RADIO, - I_NICAM, - KOREA_A2, - L_NICAM, -}; - -struct tm6000_std_tv_settings { - v4l2_std_id id; - enum tm6000_audio_std audio_default_std; - - struct tm6000_reg_settings sif[12]; - struct tm6000_reg_settings nosif[12]; - struct tm6000_reg_settings common[26]; -}; struct tm6000_std_settings { v4l2_std_id id; - enum tm6000_audio_std audio_default_std; - struct tm6000_reg_settings common[37]; -}; - -static struct tm6000_std_tv_settings tv_stds[] = { - { - .id = V4L2_STD_PAL_M, - .audio_default_std = BTSC, - .sif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe}, - {TM6010_REQ07_RFE_POWER_DOWN, 0xcb}, - {0, 0, 0}, - }, - .nosif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {0, 0, 0}, - }, - .common = { - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x04}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x00}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x83}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x0a}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe0}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x20}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F}, - - {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc}, - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - - {TM6010_REQ07_R3F_RESET, 0x00}, - - {0, 0, 0}, - }, - }, { - .id = V4L2_STD_PAL_Nc, - .audio_default_std = BTSC, - .sif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe}, - {TM6010_REQ07_RFE_POWER_DOWN, 0xcb}, - {0, 0, 0}, - }, - .nosif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {0, 0, 0}, - }, - .common = { - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x36}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x91}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x1f}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x0c}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F}, - - {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc}, - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - - {TM6010_REQ07_R3F_RESET, 0x00}, - - {0, 0, 0}, - }, - }, { - .id = V4L2_STD_PAL, - .audio_default_std = BG_A2, - .sif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe}, - {TM6010_REQ07_RFE_POWER_DOWN, 0xcb}, - {0, 0, 0} - }, - .nosif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {0, 0, 0}, - }, - .common = { - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x32}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x25}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0xd5}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0x63}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0x50}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x0c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x52}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F}, - - {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc}, - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - - {TM6010_REQ07_R3F_RESET, 0x00}, - - {0, 0, 0}, - }, - }, { - .id = V4L2_STD_SECAM_B | V4L2_STD_SECAM_G, - .audio_default_std = BG_NICAM, - .sif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe}, - {TM6010_REQ07_RFE_POWER_DOWN, 0xcb}, - {0, 0, 0}, - }, - .nosif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {0, 0, 0}, - }, - .common = { - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x38}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x24}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x92}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xe8}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xed}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x2c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x18}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0xFF}, - - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - - {TM6010_REQ07_R3F_RESET, 0x00}, - {0, 0, 0}, - }, - }, { - .id = V4L2_STD_SECAM_DK, - .audio_default_std = DK_NICAM, - .sif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe}, - {TM6010_REQ07_RFE_POWER_DOWN, 0xcb}, - {0, 0, 0}, - }, - .nosif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {0, 0, 0}, - }, - .common = { - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x38}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x24}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x92}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xe8}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xed}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x2c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x18}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0xFF}, - - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - - {TM6010_REQ07_R3F_RESET, 0x00}, - {0, 0, 0}, - }, - }, { - .id = V4L2_STD_NTSC, - .audio_default_std = BTSC, - .sif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x08}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x62}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe}, - {TM6010_REQ07_RFE_POWER_DOWN, 0xcb}, - {0, 0, 0}, - }, - .nosif = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x60}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {0, 0, 0}, - }, - .common = { - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x00}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0f}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x00}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x1e}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x8b}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xa2}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xe9}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x88}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x22}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0x61}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x1c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x1c}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0x6F}, - - {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdd}, - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - - {TM6010_REQ07_R3F_RESET, 0x00}, - - {0, 0, 0}, - }, - }, + struct tm6000_reg_settings common[27]; }; static struct tm6000_std_settings composite_stds[] = { { .id = V4L2_STD_PAL_M, - .audio_default_std = BTSC, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x04}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -470,20 +71,7 @@ static struct tm6000_std_settings composite_stds[] = { }, }, { .id = V4L2_STD_PAL_Nc, - .audio_default_std = BTSC, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x36}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -513,20 +101,7 @@ static struct tm6000_std_settings composite_stds[] = { }, }, { .id = V4L2_STD_PAL, - .audio_default_std = BG_A2, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x32}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -556,62 +131,7 @@ static struct tm6000_std_settings composite_stds[] = { }, }, { .id = V4L2_STD_SECAM, - .audio_default_std = BG_NICAM, - .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x38}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x02}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x24}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x92}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xe8}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xed}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2c}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x2c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x18}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0xFF}, - - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - {TM6010_REQ07_R3F_RESET, 0x00}, - {0, 0, 0}, - }, - }, { - .id = V4L2_STD_SECAM_DK, - .audio_default_std = DK_NICAM, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x38}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -640,20 +160,7 @@ static struct tm6000_std_settings composite_stds[] = { }, }, { .id = V4L2_STD_NTSC, - .audio_default_std = BTSC, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x0f}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe8}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8b}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x00}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0f}, @@ -687,20 +194,7 @@ static struct tm6000_std_settings composite_stds[] = { static struct tm6000_std_settings svideo_stds[] = { { .id = V4L2_STD_PAL_M, - .audio_default_std = BTSC, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe0}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8a}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x05}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -730,20 +224,7 @@ static struct tm6000_std_settings svideo_stds[] = { }, }, { .id = V4L2_STD_PAL_Nc, - .audio_default_std = BTSC, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe0}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8a}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x37}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -773,20 +254,7 @@ static struct tm6000_std_settings svideo_stds[] = { }, }, { .id = V4L2_STD_PAL, - .audio_default_std = BG_A2, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe0}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8a}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x33}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -816,62 +284,7 @@ static struct tm6000_std_settings svideo_stds[] = { }, }, { .id = V4L2_STD_SECAM, - .audio_default_std = BG_NICAM, - .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe0}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8a}, - - {TM6010_REQ07_R3F_RESET, 0x01}, - {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x39}, - {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, - {TM6010_REQ07_R02_VIDEO_CONTROL2, 0x5f}, - {TM6010_REQ07_R03_YC_SEP_CONTROL, 0x03}, - {TM6010_REQ07_R07_OUTPUT_CONTROL, 0x31}, - {TM6010_REQ07_R18_CHROMA_DTO_INCREMENT3, 0x24}, - {TM6010_REQ07_R19_CHROMA_DTO_INCREMENT2, 0x92}, - {TM6010_REQ07_R1A_CHROMA_DTO_INCREMENT1, 0xe8}, - {TM6010_REQ07_R1B_CHROMA_DTO_INCREMENT0, 0xed}, - {TM6010_REQ07_R1C_HSYNC_DTO_INCREMENT3, 0x1c}, - {TM6010_REQ07_R1D_HSYNC_DTO_INCREMENT2, 0xcc}, - {TM6010_REQ07_R1E_HSYNC_DTO_INCREMENT1, 0xcc}, - {TM6010_REQ07_R1F_HSYNC_DTO_INCREMENT0, 0xcd}, - {TM6010_REQ07_R2E_ACTIVE_VIDEO_HSTART, 0x8c}, - {TM6010_REQ07_R30_ACTIVE_VIDEO_VSTART, 0x2a}, - {TM6010_REQ07_R31_ACTIVE_VIDEO_VHIGHT, 0xc1}, - {TM6010_REQ07_R33_VSYNC_HLOCK_MAX, 0x2c}, - {TM6010_REQ07_R35_VSYNC_AGC_MAX, 0x18}, - {TM6010_REQ07_R82_COMB_FILTER_CONFIG, 0x42}, - {TM6010_REQ07_R83_CHROMA_LOCK_CONFIG, 0xFF}, - - {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, - {TM6010_REQ07_R3F_RESET, 0x00}, - {0, 0, 0}, - }, - }, { - .id = V4L2_STD_SECAM_DK, - .audio_default_std = DK_NICAM, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe0}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8a}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x39}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0e}, @@ -900,20 +313,7 @@ static struct tm6000_std_settings svideo_stds[] = { }, }, { .id = V4L2_STD_NTSC, - .audio_default_std = BTSC, .common = { - {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, - {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, - {TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8}, - {TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0x00}, - {TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2}, - {TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0}, - {TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2}, - {TM6010_REQ08_RED_GAIN_SEL, 0xe0}, - {TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, 0x68}, - {TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc}, - {TM6010_REQ07_RFE_POWER_DOWN, 0x8a}, - {TM6010_REQ07_R3F_RESET, 0x01}, {TM6010_REQ07_R00_VIDEO_CONTROL0, 0x01}, {TM6010_REQ07_R01_VIDEO_CONTROL1, 0x0f}, @@ -946,8 +346,7 @@ static struct tm6000_std_settings svideo_stds[] = { }; -static int tm6000_set_audio_std(struct tm6000_core *dev, - enum tm6000_audio_std std) +static int tm6000_set_audio_std(struct tm6000_core *dev) { uint8_t areg_02 = 0x04; /* GC1 Fixed gain 0dB */ uint8_t areg_05 = 0x01; /* Auto 4.5 = M Japan, Auto 6.5 = DK */ @@ -1112,10 +511,6 @@ static int tm6000_load_std(struct tm6000_core *dev, if (!set[i].req) return 0; - if ((dev->dev_type != TM6010) && - (set[i].req == REQ_08_SET_GET_AVREG_BIT)) - continue; - rc = tm6000_set_reg(dev, set[i].req, set[i].reg, set[i].value); if (rc < 0) { printk(KERN_ERR "Error %i while setting " @@ -1128,53 +523,126 @@ static int tm6000_load_std(struct tm6000_core *dev, return 0; } -static int tm6000_set_tv(struct tm6000_core *dev, int pos) -{ - int rc; - - /* FIXME: This code is for tm6010 - not tested yet - doesn't work with - tm5600 - */ - - /* FIXME: This is tuner-dependent */ - int nosif = 0; - - if (nosif) { - rc = tm6000_load_std(dev, tv_stds[pos].nosif, - sizeof(tv_stds[pos].nosif)); - } else { - rc = tm6000_load_std(dev, tv_stds[pos].sif, - sizeof(tv_stds[pos].sif)); - } - if (rc < 0) - return rc; - rc = tm6000_load_std(dev, tv_stds[pos].common, - sizeof(tv_stds[pos].common)); - - tm6000_set_audio_std(dev, tv_stds[pos].audio_default_std); - - return rc; -} - -int tm6000_set_standard(struct tm6000_core *dev, v4l2_std_id * norm) +int tm6000_set_standard(struct tm6000_core *dev) { int i, rc = 0; + u8 reg_07_fe = 0x8a; + u8 reg_08_f1 = 0xfc; + u8 reg_08_e2 = 0xf0; + u8 reg_08_e6 = 0x0f; - dev->norm = *norm; tm6000_get_std_res(dev); - switch (dev->input) { - case TM6000_INPUT_TV: - for (i = 0; i < ARRAY_SIZE(tv_stds); i++) { - if (*norm & tv_stds[i].id) { - rc = tm6000_set_tv(dev, i); - goto ret; - } + if (dev->radio) { + /* todo */ + } + + if (dev->dev_type == TM6010) { + switch (dev->vinput[dev->input].vmux) { + case TM6000_VMUX_VIDEO_A: + tm6000_set_reg(dev, TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4); + tm6000_set_reg(dev, TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1); + tm6000_set_reg(dev, TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0); + tm6000_set_reg(dev, TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2); + tm6000_set_reg(dev, TM6010_REQ08_RED_GAIN_SEL, 0xe8); + reg_07_fe |= 0x01; + break; + case TM6000_VMUX_VIDEO_B: + tm6000_set_reg(dev, TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8); + tm6000_set_reg(dev, TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf1); + tm6000_set_reg(dev, TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xe0); + tm6000_set_reg(dev, TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2); + tm6000_set_reg(dev, TM6010_REQ08_RED_GAIN_SEL, 0xe8); + reg_07_fe |= 0x01; + break; + case TM6000_VMUX_VIDEO_AB: + tm6000_set_reg(dev, TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc); + tm6000_set_reg(dev, TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf8); + reg_08_e6 = 0x00; + tm6000_set_reg(dev, TM6010_REQ08_REA_BUFF_DRV_CTRL, 0xf2); + tm6000_set_reg(dev, TM6010_REQ08_REB_SIF_GAIN_CTRL, 0xf0); + tm6000_set_reg(dev, TM6010_REQ08_REC_REVERSE_YC_CTRL, 0xc2); + tm6000_set_reg(dev, TM6010_REQ08_RED_GAIN_SEL, 0xe0); + break; + default: + break; } - return -EINVAL; - case TM6000_INPUT_SVIDEO: + switch (dev->vinput[dev->input].amux) { + case TM6000_AMUX_ADC1: + tm6000_set_reg_mask(dev, TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, + 0x00, 0x0f); + break; + case TM6000_AMUX_ADC2: + tm6000_set_reg_mask(dev, TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, + 0x08, 0x0f); + break; + case TM6000_AMUX_SIF1: + reg_08_e2 |= 0x02; + reg_08_e6 = 0x08; + reg_07_fe |= 0x40; + reg_08_f1 |= 0x02; + tm6000_set_reg(dev, TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3); + tm6000_set_reg_mask(dev, TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, + 0x02, 0x0f); + break; + case TM6000_AMUX_SIF2: + reg_08_e2 |= 0x02; + reg_08_e6 = 0x08; + reg_07_fe |= 0x40; + reg_08_f1 |= 0x02; + tm6000_set_reg(dev, TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf7); + tm6000_set_reg_mask(dev, TM6010_REQ08_RF0_DAUDIO_INPUT_CONFIG, + 0x02, 0x0f); + break; + default: + break; + } + tm6000_set_reg(dev, TM6010_REQ08_RE2_POWER_DOWN_CTRL1, reg_08_e2); + tm6000_set_reg(dev, TM6010_REQ08_RE6_POWER_DOWN_CTRL2, reg_08_e6); + tm6000_set_reg(dev, TM6010_REQ08_RF1_AADC_POWER_DOWN, reg_08_f1); + tm6000_set_reg(dev, TM6010_REQ07_RFE_POWER_DOWN, reg_07_fe); + } else { + switch (dev->vinput[dev->input].vmux) { + case TM6000_VMUX_VIDEO_A: + tm6000_set_reg(dev, TM6000_REQ07_RE3_VADC_INP_LPF_SEL1, 0x10); + tm6000_set_reg(dev, TM6000_REQ07_RE5_VADC_INP_LPF_SEL2, 0x00); + tm6000_set_reg(dev, TM6000_REQ07_RE8_VADC_PWDOWN_CTL, 0x0f); + tm6000_set_reg(dev, + REQ_03_SET_GET_MCU_PIN, dev->vinput[dev->input].v_gpio, 0); + break; + case TM6000_VMUX_VIDEO_B: + tm6000_set_reg(dev, TM6000_REQ07_RE3_VADC_INP_LPF_SEL1, 0x00); + tm6000_set_reg(dev, TM6000_REQ07_RE5_VADC_INP_LPF_SEL2, 0x00); + tm6000_set_reg(dev, TM6000_REQ07_RE8_VADC_PWDOWN_CTL, 0x0f); + tm6000_set_reg(dev, + REQ_03_SET_GET_MCU_PIN, dev->vinput[dev->input].v_gpio, 0); + break; + case TM6000_VMUX_VIDEO_AB: + tm6000_set_reg(dev, TM6000_REQ07_RE3_VADC_INP_LPF_SEL1, 0x10); + tm6000_set_reg(dev, TM6000_REQ07_RE5_VADC_INP_LPF_SEL2, 0x10); + tm6000_set_reg(dev, TM6000_REQ07_RE8_VADC_PWDOWN_CTL, 0x00); + tm6000_set_reg(dev, + REQ_03_SET_GET_MCU_PIN, dev->vinput[dev->input].v_gpio, 1); + break; + default: + break; + } + switch (dev->vinput[dev->input].amux) { + case TM6000_AMUX_ADC1: + tm6000_set_reg_mask(dev, + TM6000_REQ07_REB_VADC_AADC_MODE, 0x00, 0x0f); + break; + case TM6000_AMUX_ADC2: + tm6000_set_reg_mask(dev, + TM6000_REQ07_REB_VADC_AADC_MODE, 0x04, 0x0f); + break; + default: + break; + } + } + if (dev->vinput[dev->input].type == TM6000_INPUT_SVIDEO) { for (i = 0; i < ARRAY_SIZE(svideo_stds); i++) { - if (*norm & svideo_stds[i].id) { + if (dev->norm & svideo_stds[i].id) { rc = tm6000_load_std(dev, svideo_stds[i].common, sizeof(svideo_stds[i]. common)); @@ -1182,14 +650,13 @@ int tm6000_set_standard(struct tm6000_core *dev, v4l2_std_id * norm) } } return -EINVAL; - case TM6000_INPUT_COMPOSITE: + } else { for (i = 0; i < ARRAY_SIZE(composite_stds); i++) { - if (*norm & composite_stds[i].id) { + if (dev->norm & composite_stds[i].id) { rc = tm6000_load_std(dev, composite_stds[i].common, sizeof(composite_stds[i]. common)); - tm6000_set_audio_std(dev, composite_stds[i].audio_default_std); goto ret; } } @@ -1200,6 +667,11 @@ ret: if (rc < 0) return rc; + if ((dev->dev_type == TM6010) && + ((dev->vinput[dev->input].amux == TM6000_AMUX_SIF1) || + (dev->vinput[dev->input].amux == TM6000_AMUX_SIF2))) + tm6000_set_audio_std(dev); + msleep(40); diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 8b3bf7e..a9a5919 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -1271,6 +1271,7 @@ static int vidioc_s_tuner(struct file *file, void *priv, dprintk(dev, 3, "audio mode: %x\n", t->audmode); v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_tuner, t); + return 0; } @@ -1537,16 +1538,12 @@ static int tm6000_open(struct file *file) if (fh->radio) { dprintk(dev, V4L2_DEBUG_OPEN, "video_open: setting radio device\n"); - tm6000_set_audio_input(dev, dev->aradio); - tm6000_set_volume(dev, dev->ctl_volume); + dev->input = 5; + tm6000_set_audio_rinput(dev); v4l2_device_call_all(&dev->v4l2_dev, 0, tuner, s_radio); tm6000_prepare_isoc(dev); tm6000_start_thread(dev); } - else { - tm6000_set_audio_input(dev, dev->avideo); - tm6000_set_volume(dev, dev->ctl_volume); - } return 0; } diff --git a/drivers/staging/tm6000/tm6000.h b/drivers/staging/tm6000/tm6000.h index 650decd..e4ca896 100644 --- a/drivers/staging/tm6000/tm6000.h +++ b/drivers/staging/tm6000/tm6000.h @@ -320,7 +320,7 @@ int tm6000_init(struct tm6000_core *dev); int tm6000_init_analog_mode(struct tm6000_core *dev); int tm6000_init_digital_mode(struct tm6000_core *dev); int tm6000_set_audio_bitrate(struct tm6000_core *dev, int bitrate); -int tm6000_set_audio_input(struct tm6000_core *dev, enum tm6000_inaudio ainp); +int tm6000_set_audio_rinput(struct tm6000_core *dev); int tm6000_tvaudio_set_mute(struct tm6000_core *dev, u8 mute); void tm6000_set_volume(struct tm6000_core *dev, int vol); @@ -341,7 +341,7 @@ int tm6000_call_fillbuf(struct tm6000_core *dev, enum tm6000_ops_type type, /* In tm6000-stds.c */ void tm6000_get_std_res(struct tm6000_core *dev); -int tm6000_set_standard(struct tm6000_core *dev, v4l2_std_id *norm); +int tm6000_set_standard(struct tm6000_core *dev); /* In tm6000-i2c.c */ int tm6000_i2c_register(struct tm6000_core *dev); -- cgit v1.1 From 2fbc947ce157dbed5e036a2115cf5360c24aea0e Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:54 -0300 Subject: [media] tm6000: add eeprom Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 9f4daac..199cc86 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -84,6 +84,7 @@ struct tm6000_board { struct tm6000_input vinput[3]; struct tm6000_input rinput; + char *ir_codes; }; @@ -91,7 +92,8 @@ struct tm6000_board tm6000_boards[] = { [TM6000_BOARD_UNKNOWN] = { .name = "Unknown tm6000 video grabber", .caps = { - .has_tuner = 1, + .has_tuner = 1, + .has_eeprom = 1, }, .gpio = { .tuner_reset = TM6000_GPIO_1, @@ -118,6 +120,7 @@ struct tm6000_board tm6000_boards[] = { .tuner_addr = 0xc2 >> 1, .caps = { .has_tuner = 1, + .has_eeprom = 1, }, .gpio = { .tuner_reset = TM6000_GPIO_1, @@ -143,7 +146,7 @@ struct tm6000_board tm6000_boards[] = { .tuner_addr = 0xc2 >> 1, .caps = { .has_tuner = 1, - .has_dvb = 1, + .has_eeprom = 1, }, .gpio = { .tuner_reset = TM6000_GPIO_1, -- cgit v1.1 From 7231f49a67d28c93505627c7ee6485a75bd517b5 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:55 -0300 Subject: [media] tm6000: remove unused capabilities Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 8 -------- drivers/staging/tm6000/tm6000.h | 2 -- 2 files changed, 10 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 199cc86..19120ed 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -396,8 +396,6 @@ struct tm6000_board tm6000_boards[] = { .has_eeprom = 1, .has_remote = 1, .has_radio = 1. - .has_input_comp = 1, - .has_input_svid = 1, }, .gpio = { .tuner_reset = TM6010_GPIO_0, @@ -435,8 +433,6 @@ struct tm6000_board tm6000_boards[] = { .has_eeprom = 1, .has_remote = 1, .has_radio = 1, - .has_input_comp = 1, - .has_input_svid = 1, }, .gpio = { .tuner_reset = TM6010_GPIO_0, @@ -568,8 +564,6 @@ struct tm6000_board tm6000_boards[] = { .has_eeprom = 1, .has_remote = 0, .has_radio = 1, - .has_input_comp = 0, - .has_input_svid = 0, }, .gpio = { .tuner_reset = TM6010_GPIO_0, @@ -599,8 +593,6 @@ struct tm6000_board tm6000_boards[] = { .has_eeprom = 1, .has_remote = 0, .has_radio = 1, - .has_input_comp = 0, - .has_input_svid = 0, }, .gpio = { .tuner_reset = TM6010_GPIO_0, diff --git a/drivers/staging/tm6000/tm6000.h b/drivers/staging/tm6000/tm6000.h index e4ca896..ae6369b 100644 --- a/drivers/staging/tm6000/tm6000.h +++ b/drivers/staging/tm6000/tm6000.h @@ -143,8 +143,6 @@ struct tm6000_capabilities { unsigned int has_eeprom:1; unsigned int has_remote:1; unsigned int has_radio:1; - unsigned int has_input_comp:1; - unsigned int has_input_svid:1; }; struct tm6000_dvb { -- cgit v1.1 From 3d6baf5ffa7ed97f878492adc204453927e12690 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:56 -0300 Subject: [media] tm6000: remove old tuner params Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 19120ed..8ca8727 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -922,12 +922,8 @@ static void tm6000_config_tuner(struct tm6000_core *dev) memset(&xc2028_cfg, 0, sizeof(xc2028_cfg)); memset(&ctl, 0, sizeof(ctl)); - ctl.input1 = 1; - ctl.read_not_reliable = 0; - ctl.msleep = 10; ctl.demod = XC3028_FE_ZARLINK456; - ctl.vhfbw7 = 1; - ctl.uhfbw8 = 1; + xc2028_cfg.tuner = TUNER_XC2028; xc2028_cfg.priv = &ctl; -- cgit v1.1 From e872bb9a7ddfc025ed727cc922b0aa32a7582004 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:57 -0300 Subject: [media] tm6000: remove duplicated init Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-cards.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-cards.c b/drivers/staging/tm6000/tm6000-cards.c index 8ca8727..a69c82e 100644 --- a/drivers/staging/tm6000/tm6000-cards.c +++ b/drivers/staging/tm6000/tm6000-cards.c @@ -998,9 +998,6 @@ static int fill_board_specific_data(struct tm6000_core *dev) if (rc < 0) return rc; - /* initialize hardware */ - rc = tm6000_init(dev); - return rc; } -- cgit v1.1 From f010dca2e52d8dcc0445d695192df19241afacdb Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:58 -0300 Subject: [media] tm6000: move from tm6000_set_reg to tm6000_set_reg_mask move from tm6000_set_reg to tm6000_set_reg_mask Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-core.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-core.c b/drivers/staging/tm6000/tm6000-core.c index 259cf80..1ac8409 100644 --- a/drivers/staging/tm6000/tm6000-core.c +++ b/drivers/staging/tm6000/tm6000-core.c @@ -268,19 +268,18 @@ int tm6000_init_analog_mode(struct tm6000_core *dev) struct v4l2_frequency f; if (dev->dev_type == TM6010) { - /* Enable video */ - + /* Enable video and audio */ tm6000_set_reg_mask(dev, TM6010_REQ07_RCC_ACTIVE_VIDEO_IF, 0x60, 0x60); + /* Disable TS input */ tm6000_set_reg_mask(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, 0x00, 0x40); - tm6000_set_reg(dev, TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc); - } else { /* Enables soft reset */ tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01); if (dev->scaler) + /* Disable Hfilter and Enable TS Drop err */ tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, 0x20); else /* Enable Hfilter and disable TS Drop err */ tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, 0x80); @@ -343,21 +342,16 @@ int tm6000_init_analog_mode(struct tm6000_core *dev) int tm6000_init_digital_mode(struct tm6000_core *dev) { if (dev->dev_type == TM6010) { - int val; - u8 buf[2]; - - /* digital init */ - val = tm6000_get_reg(dev, TM6010_REQ07_RCC_ACTIVE_VIDEO_IF, 0); - val &= ~0x60; - tm6000_set_reg(dev, TM6010_REQ07_RCC_ACTIVE_VIDEO_IF, val); - val = tm6000_get_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, 0); - val |= 0x40; - tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, val); + /* Disable video and audio */ + tm6000_set_reg_mask(dev, TM6010_REQ07_RCC_ACTIVE_VIDEO_IF, + 0x00, 0x60); + /* Enable TS input */ + tm6000_set_reg_mask(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, + 0x40, 0x40); + /* all power down, but not the digital data port */ tm6000_set_reg(dev, TM6010_REQ07_RFE_POWER_DOWN, 0x28); tm6000_set_reg(dev, TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xfc); tm6000_set_reg(dev, TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0xff); - tm6000_read_write_usb(dev, 0xc0, 0x0e, 0x00c2, 0x0008, buf, 2); - printk(KERN_INFO"buf %#x %#x\n", buf[0], buf[1]); } else { tm6000_set_reg(dev, TM6010_REQ07_RFF_SOFT_RESET, 0x08); tm6000_set_reg(dev, TM6010_REQ07_RFF_SOFT_RESET, 0x00); -- cgit v1.1 From f2e18dc179ce031eb60712d375c5baf785ccbcf9 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:53:59 -0300 Subject: [media] tm6000: remove input select Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-core.c | 8 -------- 1 file changed, 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-core.c b/drivers/staging/tm6000/tm6000-core.c index 1ac8409..57fd874 100644 --- a/drivers/staging/tm6000/tm6000-core.c +++ b/drivers/staging/tm6000/tm6000-core.c @@ -299,14 +299,6 @@ int tm6000_init_analog_mode(struct tm6000_core *dev) /* Disables soft reset */ tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x00); - - /* E3: Select input 0 - TV tuner */ - tm6000_set_reg(dev, TM6000_REQ07_RE3_VADC_INP_LPF_SEL1, 0x00); - tm6000_set_reg(dev, TM6000_REQ07_REB_VADC_AADC_MODE, 0x60); - - /* This controls input */ - tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_2, 0x0); - tm6000_set_reg(dev, REQ_03_SET_GET_MCU_PIN, TM6000_GPIO_3, 0x01); } msleep(20); -- cgit v1.1 From 7ecff8c93e14226e0c39d930b633d5ade78526cc Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:54:00 -0300 Subject: [media] tm6000: all audio packets must swab Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-video.c | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index a9a5919..ea5ad6c 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -344,17 +344,14 @@ static int copy_streams(u8 *data, unsigned long len, if (vbuf) memcpy(&voutp[pos], ptr, cpysize); break; - case TM6000_URB_MSG_AUDIO: - /* Need some code to copy audio buffer */ - if (dev->fourcc == V4L2_PIX_FMT_YUYV) { - /* Swap word bytes */ - int i; + case TM6000_URB_MSG_AUDIO: { + int i; + for (i = 0; i < cpysize; i += 2) + swab16s((u16 *)(ptr + i)); - for (i = 0; i < cpysize; i += 2) - swab16s((u16 *)(ptr + i)); - } tm6000_call_fillbuf(dev, TM6000_AUDIO, ptr, cpysize); break; + } case TM6000_URB_MSG_VBI: /* Need some code to copy vbi buffer */ break; -- cgit v1.1 From 1f385717c923bf5ca0a60de22c892e466d4edf0f Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:54:01 -0300 Subject: [media] tm6000: change from ioctl to unlocked_ioctl Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-video.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index ea5ad6c..2d83204 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -1666,10 +1666,10 @@ static struct video_device tm6000_template = { }; static const struct v4l2_file_operations radio_fops = { - .owner = THIS_MODULE, - .open = tm6000_open, - .release = tm6000_release, - .ioctl = video_ioctl2, + .owner = THIS_MODULE, + .open = tm6000_open, + .release = tm6000_release, + .unlocked_ioctl = video_ioctl2, }; static const struct v4l2_ioctl_ops radio_ioctl_ops = { -- cgit v1.1 From 2f349daa0187abf5fd5af4827de023dc609e5909 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:54:02 -0300 Subject: [media] tm6000: add pts logging Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-video.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 2d83204..4802396 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -355,10 +355,14 @@ static int copy_streams(u8 *data, unsigned long len, case TM6000_URB_MSG_VBI: /* Need some code to copy vbi buffer */ break; - case TM6000_URB_MSG_PTS: + case TM6000_URB_MSG_PTS: { /* Need some code to copy pts */ + u32 pts; + pts = *(u32 *)ptr; + printk(KERN_INFO "%s: field %d, PTS %x", dev->name, field, pts); break; } + } } if (ptr + pktsize > endp) { /* End of URB packet, but cmd processing is not -- cgit v1.1 From aeeebe9b67a63edd7bca36a0b7cb0d14215839f5 Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:54:03 -0300 Subject: [media] tm6000: remove unused exports Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-core.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-core.c b/drivers/staging/tm6000/tm6000-core.c index 57fd874..d7eb2e2 100644 --- a/drivers/staging/tm6000/tm6000-core.c +++ b/drivers/staging/tm6000/tm6000-core.c @@ -686,7 +686,6 @@ int tm6000_set_audio_rinput(struct tm6000_core *dev) } return 0; } -EXPORT_SYMBOL_GPL(tm6000_set_audio_input); void tm6010_set_mute_sif(struct tm6000_core *dev, u8 mute) { @@ -749,7 +748,6 @@ int tm6000_tvaudio_set_mute(struct tm6000_core *dev, u8 mute) } return 0; } -EXPORT_SYMBOL_GPL(tm6000_tvaudio_set_mute); void tm6010_set_volume_sif(struct tm6000_core *dev, int vol) { @@ -807,7 +805,6 @@ void tm6000_set_volume(struct tm6000_core *dev, int vol) break; } } -EXPORT_SYMBOL_GPL(tm6000_set_volume); static LIST_HEAD(tm6000_devlist); static DEFINE_MUTEX(tm6000_devlist_mutex); -- cgit v1.1 From d9c417b5a462d9d0392d91bb73d9a1a16bb2959a Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Mon, 9 May 2011 16:54:04 -0300 Subject: [media] tm6000: remove tm6010 sif audio start and stop remove tm6010 sif audio start and stop Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-alsa.c | 3 --- 1 file changed, 3 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-alsa.c b/drivers/staging/tm6000/tm6000-alsa.c index acb0317..2b96047 100644 --- a/drivers/staging/tm6000/tm6000-alsa.c +++ b/drivers/staging/tm6000/tm6000-alsa.c @@ -84,7 +84,6 @@ static int _tm6000_start_audio_dma(struct snd_tm6000_card *chip) tm6000_set_audio_bitrate(core, 48000); - tm6000_set_reg(core, TM6010_REQ08_R01_A_INIT, 0x80); return 0; } @@ -101,8 +100,6 @@ static int _tm6000_stop_audio_dma(struct snd_tm6000_card *chip) /* Disables audio */ tm6000_set_reg_mask(core, TM6010_REQ07_RCC_ACTIVE_VIDEO_IF, 0x00, 0x40); - tm6000_set_reg(core, TM6010_REQ08_R01_A_INIT, 0); - return 0; } -- cgit v1.1 From 423c79e3fed751c244aceb39031920669e1d039a Mon Sep 17 00:00:00 2001 From: Stefan Ringel Date: Sat, 21 May 2011 03:05:38 -0300 Subject: [media] tm6000: fix uninitialized field, change prink to dprintk fix uninitialized field, change prink to dprintk Signed-off-by: Stefan Ringel Signed-off-by: Mauro Carvalho Chehab --- drivers/staging/tm6000/tm6000-usb-isoc.h | 2 +- drivers/staging/tm6000/tm6000-video.c | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'drivers/staging') diff --git a/drivers/staging/tm6000/tm6000-usb-isoc.h b/drivers/staging/tm6000/tm6000-usb-isoc.h index a9e61d9..084c2a8 100644 --- a/drivers/staging/tm6000/tm6000-usb-isoc.h +++ b/drivers/staging/tm6000/tm6000-usb-isoc.h @@ -39,7 +39,7 @@ struct usb_isoc_ctl { int pos, size, pktsize; /* Last field: ODD or EVEN? */ - int vfield; + int vfield, field; /* Stores incomplete commands */ u32 tmp_buf; diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c index 4802396..4264064 100644 --- a/drivers/staging/tm6000/tm6000-video.c +++ b/drivers/staging/tm6000/tm6000-video.c @@ -334,6 +334,7 @@ static int copy_streams(u8 *data, unsigned long len, size = dev->isoc_ctl.size; pos = dev->isoc_ctl.pos; pktsize = dev->isoc_ctl.pktsize; + field = dev->isoc_ctl.field; } cpysize = (endp - ptr > size) ? size : endp - ptr; if (cpysize) { @@ -359,7 +360,8 @@ static int copy_streams(u8 *data, unsigned long len, /* Need some code to copy pts */ u32 pts; pts = *(u32 *)ptr; - printk(KERN_INFO "%s: field %d, PTS %x", dev->name, field, pts); + dprintk(dev, V4L2_DEBUG_ISOC, "field %d, PTS %x", + field, pts); break; } } @@ -371,6 +373,7 @@ static int copy_streams(u8 *data, unsigned long len, dev->isoc_ctl.pos = pos + cpysize; dev->isoc_ctl.size = size - cpysize; dev->isoc_ctl.cmd = cmd; + dev->isoc_ctl.field = field; dev->isoc_ctl.pktsize = pktsize - (endp - ptr); ptr += endp - ptr; } else { -- cgit v1.1