aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/usb/cx231xx
diff options
context:
space:
mode:
authorMatthias Schwarzott <zzam@gentoo.org>2014-07-22 16:12:16 -0400
committerMauro Carvalho Chehab <m.chehab@samsung.com>2014-07-27 16:03:07 -0400
commit9e49f7c3d67c4db4911d3a62c39fb44b82feaaf7 (patch)
tree43e2ee79df1f6193b199405be1534a35d9e7582e /drivers/media/usb/cx231xx
parentdd2e7dd20cf482bc2fd989bfbd0354476ae904c2 (diff)
[media] cx231xx: Add digital support for HVR930C-HD model 1114xx
Add support for: [2040:b131] Hauppauge WinTV 930C-HD (model 1114xx) Signed-off-by: Matthias Schwarzott <zzam@gentoo.org> Tested-by: Mauro Carvalho Chehab <m.chehab@samsung.com> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media/usb/cx231xx')
-rw-r--r--drivers/media/usb/cx231xx/Kconfig1
-rw-r--r--drivers/media/usb/cx231xx/cx231xx-cards.c42
-rw-r--r--drivers/media/usb/cx231xx/cx231xx-dvb.c63
-rw-r--r--drivers/media/usb/cx231xx/cx231xx.h1
4 files changed, 107 insertions, 0 deletions
diff --git a/drivers/media/usb/cx231xx/Kconfig b/drivers/media/usb/cx231xx/Kconfig
index 036454ede5c0..569aa298c03f 100644
--- a/drivers/media/usb/cx231xx/Kconfig
+++ b/drivers/media/usb/cx231xx/Kconfig
@@ -48,6 +48,7 @@ config VIDEO_CX231XX_DVB
48 select DVB_LGDT3305 if MEDIA_SUBDRV_AUTOSELECT 48 select DVB_LGDT3305 if MEDIA_SUBDRV_AUTOSELECT
49 select DVB_TDA18271C2DD if MEDIA_SUBDRV_AUTOSELECT 49 select DVB_TDA18271C2DD if MEDIA_SUBDRV_AUTOSELECT
50 select DVB_SI2165 if MEDIA_SUBDRV_AUTOSELECT 50 select DVB_SI2165 if MEDIA_SUBDRV_AUTOSELECT
51 select MEDIA_TUNER_SI2157 if MEDIA_SUBDRV_AUTOSELECT
51 52
52 ---help--- 53 ---help---
53 This adds support for DVB cards based on the 54 This adds support for DVB cards based on the
diff --git a/drivers/media/usb/cx231xx/cx231xx-cards.c b/drivers/media/usb/cx231xx/cx231xx-cards.c
index 5dd185e629cd..3953a1920442 100644
--- a/drivers/media/usb/cx231xx/cx231xx-cards.c
+++ b/drivers/media/usb/cx231xx/cx231xx-cards.c
@@ -743,6 +743,45 @@ struct cx231xx_board cx231xx_boards[] = {
743 .gpio = NULL, 743 .gpio = NULL,
744 } }, 744 } },
745 }, 745 },
746 [CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx] = {
747 .name = "Hauppauge WinTV 930C-HD (1114xx)",
748 .tuner_type = TUNER_ABSENT,
749 .tuner_addr = 0x60,
750 .tuner_gpio = RDE250_XCV_TUNER,
751 .tuner_sif_gpio = 0x05,
752 .tuner_scl_gpio = 0x1a,
753 .tuner_sda_gpio = 0x1b,
754 .decoder = CX231XX_AVDECODER,
755 .output_mode = OUT_MODE_VIP11,
756 .demod_xfer_mode = 0,
757 .ctl_pin_status_mask = 0xFFFFFFC4,
758 .agc_analog_digital_select_gpio = 0x0c,
759 .gpio_pin_status_mask = 0x4001000,
760 .tuner_i2c_master = 1,
761 .demod_i2c_master = 2,
762 .has_dvb = 1,
763 .demod_addr = 0x0e,
764 .norm = V4L2_STD_PAL,
765
766 .input = {{
767 .type = CX231XX_VMUX_TELEVISION,
768 .vmux = CX231XX_VIN_3_1,
769 .amux = CX231XX_AMUX_VIDEO,
770 .gpio = NULL,
771 }, {
772 .type = CX231XX_VMUX_COMPOSITE1,
773 .vmux = CX231XX_VIN_2_1,
774 .amux = CX231XX_AMUX_LINE_IN,
775 .gpio = NULL,
776 }, {
777 .type = CX231XX_VMUX_SVIDEO,
778 .vmux = CX231XX_VIN_1_1 |
779 (CX231XX_VIN_1_2 << 8) |
780 CX25840_SVIDEO_ON,
781 .amux = CX231XX_AMUX_LINE_IN,
782 .gpio = NULL,
783 } },
784 },
746}; 785};
747const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards); 786const unsigned int cx231xx_bcount = ARRAY_SIZE(cx231xx_boards);
748 787
@@ -774,6 +813,8 @@ struct usb_device_id cx231xx_id_table[] = {
774 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER}, 813 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER},
775 {USB_DEVICE(0x2040, 0xb130), 814 {USB_DEVICE(0x2040, 0xb130),
776 .driver_info = CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx}, 815 .driver_info = CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx},
816 {USB_DEVICE(0x2040, 0xb131),
817 .driver_info = CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx},
777 {USB_DEVICE(0x2040, 0xb140), 818 {USB_DEVICE(0x2040, 0xb140),
778 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER}, 819 .driver_info = CX231XX_BOARD_HAUPPAUGE_EXETER},
779 {USB_DEVICE(0x2040, 0xc200), 820 {USB_DEVICE(0x2040, 0xc200),
@@ -998,6 +1039,7 @@ void cx231xx_card_setup(struct cx231xx *dev)
998 1039
999 switch (dev->model) { 1040 switch (dev->model) {
1000 case CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx: 1041 case CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx:
1042 case CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx:
1001 { 1043 {
1002 struct tveeprom tvee; 1044 struct tveeprom tvee;
1003 static u8 eeprom[256]; 1045 static u8 eeprom[256];
diff --git a/drivers/media/usb/cx231xx/cx231xx-dvb.c b/drivers/media/usb/cx231xx/cx231xx-dvb.c
index 4ff6f7f7aa5c..1fa79741d199 100644
--- a/drivers/media/usb/cx231xx/cx231xx-dvb.c
+++ b/drivers/media/usb/cx231xx/cx231xx-dvb.c
@@ -34,6 +34,7 @@
34#include "lgdt3305.h" 34#include "lgdt3305.h"
35#include "si2165.h" 35#include "si2165.h"
36#include "mb86a20s.h" 36#include "mb86a20s.h"
37#include "si2157.h"
37 38
38MODULE_DESCRIPTION("driver for cx231xx based DVB cards"); 39MODULE_DESCRIPTION("driver for cx231xx based DVB cards");
39MODULE_AUTHOR("Srinivasa Deevi <srinivasa.deevi@conexant.com>"); 40MODULE_AUTHOR("Srinivasa Deevi <srinivasa.deevi@conexant.com>");
@@ -159,6 +160,12 @@ static const struct si2165_config hauppauge_930C_HD_1113xx_si2165_config = {
159 .ref_freq_Hz = 16000000, 160 .ref_freq_Hz = 16000000,
160}; 161};
161 162
163static const struct si2165_config pctv_quatro_stick_1114xx_si2165_config = {
164 .i2c_addr = 0x64,
165 .chip_mode = SI2165_MODE_PLL_EXT,
166 .ref_freq_Hz = 24000000,
167};
168
162static inline void print_err_status(struct cx231xx *dev, int packet, int status) 169static inline void print_err_status(struct cx231xx *dev, int packet, int status)
163{ 170{
164 char *errmsg = "Unknown"; 171 char *errmsg = "Unknown";
@@ -746,6 +753,62 @@ static int dvb_init(struct cx231xx *dev)
746 dev->cx231xx_reset_analog_tuner = NULL; 753 dev->cx231xx_reset_analog_tuner = NULL;
747 break; 754 break;
748 755
756 case CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx:
757 {
758 struct i2c_client *client;
759 struct i2c_board_info info;
760 struct si2157_config si2157_config;
761
762 memset(&info, 0, sizeof(struct i2c_board_info));
763
764 dev->dvb->frontend = dvb_attach(si2165_attach,
765 &pctv_quatro_stick_1114xx_si2165_config,
766 &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap
767 );
768
769 if (dev->dvb->frontend == NULL) {
770 printk(DRIVER_NAME
771 ": Failed to attach SI2165 front end\n");
772 result = -EINVAL;
773 goto out_free;
774 }
775
776 dev->dvb->frontend->ops.i2c_gate_ctrl = 0;
777
778 /* define general-purpose callback pointer */
779 dvb->frontend->callback = cx231xx_tuner_callback;
780
781 /* attach tuner */
782 memset(&si2157_config, 0, sizeof(si2157_config));
783 si2157_config.fe = dev->dvb->frontend;
784 si2157_config.inversion = true;
785 strlcpy(info.type, "si2157", I2C_NAME_SIZE);
786 info.addr = 0x60;
787 info.platform_data = &si2157_config;
788 request_module("si2157");
789
790 client = i2c_new_device(
791 &dev->i2c_bus[dev->board.tuner_i2c_master].i2c_adap,
792 &info);
793 if (client == NULL || client->dev.driver == NULL) {
794 dvb_frontend_detach(dev->dvb->frontend);
795 result = -ENODEV;
796 goto out_free;
797 }
798
799 if (!try_module_get(client->dev.driver->owner)) {
800 i2c_unregister_device(client);
801 dvb_frontend_detach(dev->dvb->frontend);
802 result = -ENODEV;
803 goto out_free;
804 }
805
806 dev->cx231xx_reset_analog_tuner = NULL;
807
808 dev->dvb->i2c_client_tuner = client;
809 break;
810 }
811
749 case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID: 812 case CX231XX_BOARD_PV_PLAYTV_USB_HYBRID:
750 case CX231XX_BOARD_KWORLD_UB430_USB_HYBRID: 813 case CX231XX_BOARD_KWORLD_UB430_USB_HYBRID:
751 814
diff --git a/drivers/media/usb/cx231xx/cx231xx.h b/drivers/media/usb/cx231xx/cx231xx.h
index a6373ba781ab..aeb1bf42b88d 100644
--- a/drivers/media/usb/cx231xx/cx231xx.h
+++ b/drivers/media/usb/cx231xx/cx231xx.h
@@ -74,6 +74,7 @@
74#define CX231XX_BOARD_OTG102 17 74#define CX231XX_BOARD_OTG102 17
75#define CX231XX_BOARD_KWORLD_UB445_USB_HYBRID 18 75#define CX231XX_BOARD_KWORLD_UB445_USB_HYBRID 18
76#define CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx 19 76#define CX231XX_BOARD_HAUPPAUGE_930C_HD_1113xx 19
77#define CX231XX_BOARD_HAUPPAUGE_930C_HD_1114xx 20
77 78
78/* Limits minimum and default number of buffers */ 79/* Limits minimum and default number of buffers */
79#define CX231XX_MIN_BUF 4 80#define CX231XX_MIN_BUF 4