diff options
author | Igor M. Liplianin <liplianin@me.by> | 2008-09-23 14:43:57 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-10-12 07:37:07 -0400 |
commit | e4aab64cb78a42e45e1d387f272712e06cf89a66 (patch) | |
tree | 71085956cf8364b5a49723c9812cd18a54bbb792 /drivers/media/video/cx88 | |
parent | 8316568930074723bdc47d6777f822be0422a5b7 (diff) |
V4L/DVB (9026): Add support for ST STV0288 demodulator and cards with it.
Add support for ST STV0288 demodulator and cards with it,
such as TeVii S420.
Patch is co-authored with Georg Acher <acher@baycom.de>
Signed-off-by: Georg Acher <acher@baycom.de>
Signed-off-by: Igor M. Liplianin <liplianin@me.by>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx88')
-rw-r--r-- | drivers/media/video/cx88/Kconfig | 3 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 19 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 48 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 1 |
4 files changed, 70 insertions, 1 deletions
diff --git a/drivers/media/video/cx88/Kconfig b/drivers/media/video/cx88/Kconfig index 4f65ce3088bf..0b9e5fac6239 100644 --- a/drivers/media/video/cx88/Kconfig +++ b/drivers/media/video/cx88/Kconfig | |||
@@ -59,6 +59,9 @@ config VIDEO_CX88_DVB | |||
59 | select MEDIA_TUNER_SIMPLE if !DVB_FE_CUSTOMISE | 59 | select MEDIA_TUNER_SIMPLE if !DVB_FE_CUSTOMISE |
60 | select DVB_S5H1411 if !DVB_FE_CUSTOMISE | 60 | select DVB_S5H1411 if !DVB_FE_CUSTOMISE |
61 | select DVB_CX24116 if !DVB_FE_CUSTOMISE | 61 | select DVB_CX24116 if !DVB_FE_CUSTOMISE |
62 | select DVB_STV0299 if !DVB_FE_CUSTOMISE | ||
63 | select DVB_STV0288 if !DVB_FE_CUSTOMISE | ||
64 | select DVB_STB6000 if !DVB_FE_CUSTOMISE | ||
62 | ---help--- | 65 | ---help--- |
63 | This adds support for DVB/ATSC cards based on the | 66 | This adds support for DVB/ATSC cards based on the |
64 | Conexant 2388x chip. | 67 | Conexant 2388x chip. |
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 0203c7579a32..16bb9c35fc76 100644 --- a/drivers/media/video/cx88/cx88-cards.c +++ b/drivers/media/video/cx88/cx88-cards.c | |||
@@ -1732,6 +1732,18 @@ static const struct cx88_board cx88_boards[] = { | |||
1732 | } }, | 1732 | } }, |
1733 | .mpeg = CX88_MPEG_DVB, | 1733 | .mpeg = CX88_MPEG_DVB, |
1734 | }, | 1734 | }, |
1735 | [CX88_BOARD_TEVII_S420] = { | ||
1736 | .name = "TeVii S420 DVB-S", | ||
1737 | .tuner_type = UNSET, | ||
1738 | .radio_type = UNSET, | ||
1739 | .tuner_addr = ADDR_UNSET, | ||
1740 | .radio_addr = ADDR_UNSET, | ||
1741 | .input = {{ | ||
1742 | .type = CX88_VMUX_DVB, | ||
1743 | .vmux = 0, | ||
1744 | } }, | ||
1745 | .mpeg = CX88_MPEG_DVB, | ||
1746 | }, | ||
1735 | [CX88_BOARD_TEVII_S460] = { | 1747 | [CX88_BOARD_TEVII_S460] = { |
1736 | .name = "TeVii S460 DVB-S/S2", | 1748 | .name = "TeVii S460 DVB-S/S2", |
1737 | .tuner_type = UNSET, | 1749 | .tuner_type = UNSET, |
@@ -2138,7 +2150,11 @@ static const struct cx88_subid cx88_subids[] = { | |||
2138 | .subdevice = 0x6906, | 2150 | .subdevice = 0x6906, |
2139 | .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, | 2151 | .card = CX88_BOARD_HAUPPAUGE_HVR4000LITE, |
2140 | }, { | 2152 | }, { |
2141 | .subvendor = 0xD460, | 2153 | .subvendor = 0xd420, |
2154 | .subdevice = 0x9022, | ||
2155 | .card = CX88_BOARD_TEVII_S420, | ||
2156 | }, { | ||
2157 | .subvendor = 0xd460, | ||
2142 | .subdevice = 0x9022, | 2158 | .subdevice = 0x9022, |
2143 | .card = CX88_BOARD_TEVII_S460, | 2159 | .card = CX88_BOARD_TEVII_S460, |
2144 | }, { | 2160 | }, { |
@@ -2730,6 +2746,7 @@ static void cx88_card_setup(struct cx88_core *core) | |||
2730 | cx88_call_i2c_clients(core, TUNER_SET_CONFIG, &tea5767_cfg); | 2746 | cx88_call_i2c_clients(core, TUNER_SET_CONFIG, &tea5767_cfg); |
2731 | break; | 2747 | break; |
2732 | } | 2748 | } |
2749 | case CX88_BOARD_TEVII_S420: | ||
2733 | case CX88_BOARD_TEVII_S460: | 2750 | case CX88_BOARD_TEVII_S460: |
2734 | cx_write(MO_SRST_IO, 0); | 2751 | cx_write(MO_SRST_IO, 0); |
2735 | msleep(100); | 2752 | msleep(100); |
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c index a6c4f66bb161..cd368b512d1f 100644 --- a/drivers/media/video/cx88/cx88-dvb.c +++ b/drivers/media/video/cx88/cx88-dvb.c | |||
@@ -48,6 +48,10 @@ | |||
48 | #include "tuner-simple.h" | 48 | #include "tuner-simple.h" |
49 | #include "tda9887.h" | 49 | #include "tda9887.h" |
50 | #include "s5h1411.h" | 50 | #include "s5h1411.h" |
51 | #include "stv0299.h" | ||
52 | #include "z0194a.h" | ||
53 | #include "stv0288.h" | ||
54 | #include "stb6000.h" | ||
51 | #include "cx24116.h" | 55 | #include "cx24116.h" |
52 | 56 | ||
53 | MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); | 57 | MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); |
@@ -579,6 +583,25 @@ static struct cx24116_config tevii_s460_config = { | |||
579 | .reset_device = cx24116_reset_device, | 583 | .reset_device = cx24116_reset_device, |
580 | }; | 584 | }; |
581 | 585 | ||
586 | static struct stv0299_config tevii_tuner_sharp_config = { | ||
587 | .demod_address = 0x68, | ||
588 | .inittab = sharp_z0194a__inittab, | ||
589 | .mclk = 88000000UL, | ||
590 | .invert = 1, | ||
591 | .skip_reinit = 0, | ||
592 | .lock_output = 1, | ||
593 | .volt13_op0_op1 = STV0299_VOLT13_OP1, | ||
594 | .min_delay_ms = 100, | ||
595 | .set_symbol_rate = sharp_z0194a__set_symbol_rate, | ||
596 | .set_ts_params = cx24116_set_ts_param, | ||
597 | }; | ||
598 | |||
599 | static struct stv0288_config tevii_tuner_earda_config = { | ||
600 | .demod_address = 0x68, | ||
601 | .min_delay_ms = 100, | ||
602 | .set_ts_params = cx24116_set_ts_param, | ||
603 | }; | ||
604 | |||
582 | static int dvb_register(struct cx8802_dev *dev) | 605 | static int dvb_register(struct cx8802_dev *dev) |
583 | { | 606 | { |
584 | struct cx88_core *core = dev->core; | 607 | struct cx88_core *core = dev->core; |
@@ -949,6 +972,31 @@ static int dvb_register(struct cx8802_dev *dev) | |||
949 | 0x08, ISL6421_DCL, 0x00); | 972 | 0x08, ISL6421_DCL, 0x00); |
950 | } | 973 | } |
951 | break; | 974 | break; |
975 | case CX88_BOARD_TEVII_S420: | ||
976 | dev->dvb.frontend = dvb_attach(stv0299_attach, | ||
977 | &tevii_tuner_sharp_config, | ||
978 | &core->i2c_adap); | ||
979 | if (dev->dvb.frontend != NULL) { | ||
980 | if (!dvb_attach(dvb_pll_attach, dev->dvb.frontend, 0x60, | ||
981 | &core->i2c_adap, DVB_PLL_OPERA1)) | ||
982 | goto frontend_detach; | ||
983 | core->prev_set_voltage = dev->dvb.frontend->ops.set_voltage; | ||
984 | dev->dvb.frontend->ops.set_voltage = tevii_dvbs_set_voltage; | ||
985 | |||
986 | } else { | ||
987 | dev->dvb.frontend = dvb_attach(stv0288_attach, | ||
988 | &tevii_tuner_earda_config, | ||
989 | &core->i2c_adap); | ||
990 | if (dev->dvb.frontend != NULL) { | ||
991 | if (!dvb_attach(stb6000_attach, dev->dvb.frontend, 0x61, | ||
992 | &core->i2c_adap)) | ||
993 | goto frontend_detach; | ||
994 | core->prev_set_voltage = dev->dvb.frontend->ops.set_voltage; | ||
995 | dev->dvb.frontend->ops.set_voltage = tevii_dvbs_set_voltage; | ||
996 | |||
997 | } | ||
998 | } | ||
999 | break; | ||
952 | case CX88_BOARD_TEVII_S460: | 1000 | case CX88_BOARD_TEVII_S460: |
953 | dev->dvb.frontend = dvb_attach(cx24116_attach, | 1001 | dev->dvb.frontend = dvb_attach(cx24116_attach, |
954 | &tevii_s460_config, | 1002 | &tevii_s460_config, |
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h index fa3a72525d61..e17bd513b584 100644 --- a/drivers/media/video/cx88/cx88.h +++ b/drivers/media/video/cx88/cx88.h | |||
@@ -226,6 +226,7 @@ extern struct sram_channel cx88_sram_channels[]; | |||
226 | #define CX88_BOARD_TEVII_S460 70 | 226 | #define CX88_BOARD_TEVII_S460 70 |
227 | #define CX88_BOARD_OMICOM_SS4_PCI 71 | 227 | #define CX88_BOARD_OMICOM_SS4_PCI 71 |
228 | #define CX88_BOARD_TBS_8920 72 | 228 | #define CX88_BOARD_TBS_8920 72 |
229 | #define CX88_BOARD_TEVII_S420 73 | ||
229 | 230 | ||
230 | enum cx88_itype { | 231 | enum cx88_itype { |
231 | CX88_VMUX_COMPOSITE1 = 1, | 232 | CX88_VMUX_COMPOSITE1 = 1, |