aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx88
diff options
context:
space:
mode:
authorIgor M. Liplianin <liplianin@me.by>2008-09-23 14:43:57 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-10-12 07:37:07 -0400
commite4aab64cb78a42e45e1d387f272712e06cf89a66 (patch)
tree71085956cf8364b5a49723c9812cd18a54bbb792 /drivers/media/video/cx88
parent8316568930074723bdc47d6777f822be0422a5b7 (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/Kconfig3
-rw-r--r--drivers/media/video/cx88/cx88-cards.c19
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c48
-rw-r--r--drivers/media/video/cx88/cx88.h1
4 files changed, 70 insertions, 1 deletions
diff --git a/drivers/media/video/cx88/Kconfig b/drivers/media/video/cx88/Kconfig
index 4f65ce3088b..0b9e5fac623 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 0203c7579a3..16bb9c35fc7 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 a6c4f66bb16..cd368b512d1 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
53MODULE_DESCRIPTION("driver for cx2388x based DVB cards"); 57MODULE_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
586static 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
599static 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
582static int dvb_register(struct cx8802_dev *dev) 605static 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 fa3a72525d6..e17bd513b58 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
230enum cx88_itype { 231enum cx88_itype {
231 CX88_VMUX_COMPOSITE1 = 1, 232 CX88_VMUX_COMPOSITE1 = 1,