V4L/DVB (9533): cx88: Add support for TurboSight TBS8910 DVB-S PCI card
Igor M. Liplianin [Sun, 9 Nov 2008 18:25:31 +0000 (15:25 -0300)]
The card based on stv0299 or stv0288 demodulators.

Signed-off-by: Igor M. Liplianin <liplianin@me.by>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>

Documentation/video4linux/CARDLIST.cx88
drivers/media/video/Makefile
drivers/media/video/cx88/cx88-cards.c
drivers/media/video/cx88/cx88-dvb.c
drivers/media/video/cx88/cx88.h
firmware/Makefile
sound/i2c/other/tea575x-tuner.c

index 12e600d..dc8da94 100644 (file)
@@ -74,3 +74,5 @@
  73 -> TeVii S420 DVB-S                                    [d420:9022]
  74 -> Prolink Pixelview Global Extreme                    [1554:4976]
  75 -> PROF 7300 DVB-S/S2                                  [B033:3033]
+ 76 -> SATTRADE ST4200 DVB-S/S2                            [b200:4200]
+ 77 -> TBS 8910 DVB-S                                      [8910:8888]
index e5b8013..53d43f9 100644 (file)
@@ -25,6 +25,7 @@ obj-$(CONFIG_VIDEO_IR_I2C)  += ir-kbd-i2c.o
 obj-$(CONFIG_VIDEO_TVAUDIO) += tvaudio.o
 obj-$(CONFIG_VIDEO_TDA7432) += tda7432.o
 obj-$(CONFIG_VIDEO_TDA9875) += tda9875.o
+obj-$(CONFIG_SOUND_TVMIXER) += tvmixer.o
 
 obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o
 obj-$(CONFIG_VIDEO_SAA5246A) += saa5246a.o
index 3ead949..bbe5b33 100644 (file)
@@ -1847,6 +1847,18 @@ static const struct cx88_board cx88_boards[] = {
                } },
                .mpeg           = CX88_MPEG_DVB,
        },
+       [CX88_BOARD_TBS_8910] = {
+               .name           = "TBS 8910 DVB-S",
+               .tuner_type     = UNSET,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .input          = {{
+                       .type   = CX88_VMUX_DVB,
+                       .vmux   = 0,
+               } },
+               .mpeg           = CX88_MPEG_DVB,
+       },
        [CX88_BOARD_TBS_8920] = {
                .name           = "TBS 8920 DVB-S/S2",
                .tuner_type     = TUNER_ABSENT,
@@ -1871,6 +1883,18 @@ static const struct cx88_board cx88_boards[] = {
                } },
                .mpeg           = CX88_MPEG_DVB,
        },
+       [CX88_BOARD_SATTRADE_ST4200] = {
+               .name           = "SATTRADE ST4200 DVB-S/S2",
+               .tuner_type     = UNSET,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .input          = {{
+                       .type   = CX88_VMUX_DVB,
+                       .vmux   = 0,
+               } },
+               .mpeg           = CX88_MPEG_DVB,
+       },
 };
 
 /* ------------------------------------------------------------------ */
@@ -2261,6 +2285,10 @@ static const struct cx88_subid cx88_subids[] = {
                .subdevice = 0x2011,
                .card      = CX88_BOARD_OMICOM_SS4_PCI,
        }, {
+               .subvendor = 0x8910,
+               .subdevice = 0x8888,
+               .card      = CX88_BOARD_TBS_8910,
+       }, {
                .subvendor = 0x8920,
                .subdevice = 0x8888,
                .card      = CX88_BOARD_TBS_8920,
@@ -2268,6 +2296,10 @@ static const struct cx88_subid cx88_subids[] = {
                .subvendor = 0xB033,
                .subdevice = 0x3033,
                .card      = CX88_BOARD_PROF_7300,
+       }, {
+               .subvendor = 0xb200,
+               .subdevice = 0x4200,
+               .card      = CX88_BOARD_SATTRADE_ST4200,
        },
 };
 
@@ -2878,8 +2910,10 @@ static void cx88_card_setup(struct cx88_core *core)
        case  CX88_BOARD_TEVII_S420:
        case  CX88_BOARD_TEVII_S460:
        case  CX88_BOARD_OMICOM_SS4_PCI:
+       case  CX88_BOARD_TBS_8910:
        case  CX88_BOARD_TBS_8920:
        case  CX88_BOARD_PROF_7300:
+       case  CX88_BOARD_SATTRADE_ST4200:
                cx_write(MO_SRST_IO, 0);
                msleep(100);
                cx_write(MO_SRST_IO, 1);
index 8378d46..bab2811 100644 (file)
@@ -1042,6 +1042,7 @@ static int dvb_register(struct cx8802_dev *dev)
                                0x08, ISL6421_DCL, 0x00);
                }
                break;
+       case CX88_BOARD_TBS_8910:
        case CX88_BOARD_TEVII_S420:
                fe0->dvb.frontend = dvb_attach(stv0299_attach,
                                                &tevii_tuner_sharp_config,
@@ -1078,6 +1079,7 @@ static int dvb_register(struct cx8802_dev *dev)
        case CX88_BOARD_OMICOM_SS4_PCI:
        case CX88_BOARD_TBS_8920:
        case CX88_BOARD_PROF_7300:
+       case CX88_BOARD_SATTRADE_ST4200:
                fe0->dvb.frontend = dvb_attach(cx24116_attach,
                                               &hauppauge_hvr4000_config,
                                               &core->i2c_adap);
index a11599f..ae1b89a 100644 (file)
@@ -228,6 +228,8 @@ extern struct sram_channel cx88_sram_channels[];
 #define CX88_BOARD_TEVII_S420              73
 #define CX88_BOARD_PROLINK_PV_GLOBAL_XTREME 74
 #define CX88_BOARD_PROF_7300               75
+#define CX88_BOARD_SATTRADE_ST4200         76
+#define CX88_BOARD_TBS_8910                77
 
 enum cx88_itype {
        CX88_VMUX_COMPOSITE1 = 1,
index 4993a4b..6968388 100644 (file)
@@ -150,27 +150,15 @@ $(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/%
 $(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %)
        $(call cmd,ihex)
 
-# Don't depend on ihex2fw if we're installing and it already exists.
-# Putting it after | in the dependencies doesn't seem sufficient when
-# we're installing after a cross-compile, because ihex2fw has dependencies
-# on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and 
-# thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree
-# is exported read-only for someone to run 'make install'.
-ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw)
-ihex2fw_dep :=
-else
-ihex2fw_dep := $(obj)/ihex2fw
-endif
-
 # .HEX is also Intel HEX, but where the offset and length in each record
 # is actually meaningful, because the firmware has to be loaded in a certain
 # order rather than as a single binary blob. Thus, we convert them into our
 # more compact binary representation of ihex records (<linux/ihex.h>)
-$(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %)
+$(obj)/%.fw: $(obj)/%.HEX $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %)
        $(call cmd,ihex2fw)
 
 # .H16 is our own modified form of Intel HEX, with 16-bit length for records.
-$(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %)
+$(obj)/%.fw: $(obj)/%.H16 $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %)
        $(call cmd,h16tofw)
 
 $(firmware-dirs):
index c13a178..549b4eb 100644 (file)
@@ -18,7 +18,7 @@
  *   along with this program; if not, write to the Free Software
  *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  *
- */      
+ */
 
 #include <asm/io.h>
 #include <linux/delay.h>
@@ -89,7 +89,7 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
 {
        struct snd_tea575x *tea = video_drvdata(file);
        void __user *arg = (void __user *)data;
-       
+
        switch(cmd) {
                case VIDIOCGCAP:
                {
@@ -110,9 +110,9 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
                case VIDIOCGTUNER:
                {
                        struct video_tuner v;
-                       if (copy_from_user(&v, arg,sizeof(v))!=0) 
+                       if (copy_from_user(&v, arg,sizeof(v))!=0)
                                return -EFAULT;
-                       if (v.tuner)    /* Only 1 tuner */ 
+                       if (v.tuner)    /* Only 1 tuner */
                                return -EINVAL;
                        v.rangelow = (87*16000);
                        v.rangehigh = (108*16000);
@@ -144,24 +144,24 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
                        snd_tea575x_set_freq(tea);
                        return 0;
                case VIDIOCGAUDIO:
-               {       
+               {
                        struct video_audio v;
                        memset(&v, 0, sizeof(v));
                        strcpy(v.name, "Radio");
                        if(copy_to_user(arg,&v, sizeof(v)))
                                return -EFAULT;
-                       return 0;                       
+                       return 0;
                }
                case VIDIOCSAUDIO:
                {
                        struct video_audio v;
-                       if(copy_from_user(&v, arg, sizeof(v))) 
-                               return -EFAULT; 
+                       if(copy_from_user(&v, arg, sizeof(v)))
+                               return -EFAULT;
                        if (tea->ops->mute)
                                tea->ops->mute(tea,
                                               (v.flags &
                                                VIDEO_AUDIO_MUTE) ? 1 : 0);
-                       if(v.audio) 
+                       if(v.audio)
                                return -EINVAL;
                        return 0;
                }
@@ -240,11 +240,11 @@ static int __init alsa_tea575x_module_init(void)
 {
        return 0;
 }
-        
+
 static void __exit alsa_tea575x_module_exit(void)
 {
 }
-        
+
 module_init(alsa_tea575x_module_init)
 module_exit(alsa_tea575x_module_exit)