aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIgor M. Liplianin <liplianin@me.by>2008-11-09 13:25:31 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2008-12-29 14:53:28 -0500
commit4b29631db33292d416dc395c56122ea865e7635c (patch)
tree1e0e6b034148e2d78c73f4d3e85a242884707dbe
parent1f6340bd431921f9b6dc995973eb065d6c14f024 (diff)
V4L/DVB (9533): cx88: Add support for TurboSight TBS8910 DVB-S PCI card
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>
-rw-r--r--Documentation/video4linux/CARDLIST.cx882
-rw-r--r--drivers/media/video/Makefile1
-rw-r--r--drivers/media/video/cx88/cx88-cards.c34
-rw-r--r--drivers/media/video/cx88/cx88-dvb.c2
-rw-r--r--drivers/media/video/cx88/cx88.h2
-rw-r--r--firmware/Makefile16
-rw-r--r--sound/i2c/other/tea575x-tuner.c22
7 files changed, 54 insertions, 25 deletions
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88
index 12e600d74247..dc8da94061ac 100644
--- a/Documentation/video4linux/CARDLIST.cx88
+++ b/Documentation/video4linux/CARDLIST.cx88
@@ -74,3 +74,5 @@
74 73 -> TeVii S420 DVB-S [d420:9022] 74 73 -> TeVii S420 DVB-S [d420:9022]
75 74 -> Prolink Pixelview Global Extreme [1554:4976] 75 74 -> Prolink Pixelview Global Extreme [1554:4976]
76 75 -> PROF 7300 DVB-S/S2 [B033:3033] 76 75 -> PROF 7300 DVB-S/S2 [B033:3033]
77 76 -> SATTRADE ST4200 DVB-S/S2 [b200:4200]
78 77 -> TBS 8910 DVB-S [8910:8888]
diff --git a/drivers/media/video/Makefile b/drivers/media/video/Makefile
index e5b801379003..53d43f9e017d 100644
--- a/drivers/media/video/Makefile
+++ b/drivers/media/video/Makefile
@@ -25,6 +25,7 @@ obj-$(CONFIG_VIDEO_IR_I2C) += ir-kbd-i2c.o
25obj-$(CONFIG_VIDEO_TVAUDIO) += tvaudio.o 25obj-$(CONFIG_VIDEO_TVAUDIO) += tvaudio.o
26obj-$(CONFIG_VIDEO_TDA7432) += tda7432.o 26obj-$(CONFIG_VIDEO_TDA7432) += tda7432.o
27obj-$(CONFIG_VIDEO_TDA9875) += tda9875.o 27obj-$(CONFIG_VIDEO_TDA9875) += tda9875.o
28obj-$(CONFIG_SOUND_TVMIXER) += tvmixer.o
28 29
29obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o 30obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o
30obj-$(CONFIG_VIDEO_SAA5246A) += saa5246a.o 31obj-$(CONFIG_VIDEO_SAA5246A) += saa5246a.o
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index 3ead9498c4d9..bbe5b3343ac3 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -1847,6 +1847,18 @@ static const struct cx88_board cx88_boards[] = {
1847 } }, 1847 } },
1848 .mpeg = CX88_MPEG_DVB, 1848 .mpeg = CX88_MPEG_DVB,
1849 }, 1849 },
1850 [CX88_BOARD_TBS_8910] = {
1851 .name = "TBS 8910 DVB-S",
1852 .tuner_type = UNSET,
1853 .radio_type = UNSET,
1854 .tuner_addr = ADDR_UNSET,
1855 .radio_addr = ADDR_UNSET,
1856 .input = {{
1857 .type = CX88_VMUX_DVB,
1858 .vmux = 0,
1859 } },
1860 .mpeg = CX88_MPEG_DVB,
1861 },
1850 [CX88_BOARD_TBS_8920] = { 1862 [CX88_BOARD_TBS_8920] = {
1851 .name = "TBS 8920 DVB-S/S2", 1863 .name = "TBS 8920 DVB-S/S2",
1852 .tuner_type = TUNER_ABSENT, 1864 .tuner_type = TUNER_ABSENT,
@@ -1871,6 +1883,18 @@ static const struct cx88_board cx88_boards[] = {
1871 } }, 1883 } },
1872 .mpeg = CX88_MPEG_DVB, 1884 .mpeg = CX88_MPEG_DVB,
1873 }, 1885 },
1886 [CX88_BOARD_SATTRADE_ST4200] = {
1887 .name = "SATTRADE ST4200 DVB-S/S2",
1888 .tuner_type = UNSET,
1889 .radio_type = UNSET,
1890 .tuner_addr = ADDR_UNSET,
1891 .radio_addr = ADDR_UNSET,
1892 .input = {{
1893 .type = CX88_VMUX_DVB,
1894 .vmux = 0,
1895 } },
1896 .mpeg = CX88_MPEG_DVB,
1897 },
1874}; 1898};
1875 1899
1876/* ------------------------------------------------------------------ */ 1900/* ------------------------------------------------------------------ */
@@ -2261,6 +2285,10 @@ static const struct cx88_subid cx88_subids[] = {
2261 .subdevice = 0x2011, 2285 .subdevice = 0x2011,
2262 .card = CX88_BOARD_OMICOM_SS4_PCI, 2286 .card = CX88_BOARD_OMICOM_SS4_PCI,
2263 }, { 2287 }, {
2288 .subvendor = 0x8910,
2289 .subdevice = 0x8888,
2290 .card = CX88_BOARD_TBS_8910,
2291 }, {
2264 .subvendor = 0x8920, 2292 .subvendor = 0x8920,
2265 .subdevice = 0x8888, 2293 .subdevice = 0x8888,
2266 .card = CX88_BOARD_TBS_8920, 2294 .card = CX88_BOARD_TBS_8920,
@@ -2268,6 +2296,10 @@ static const struct cx88_subid cx88_subids[] = {
2268 .subvendor = 0xB033, 2296 .subvendor = 0xB033,
2269 .subdevice = 0x3033, 2297 .subdevice = 0x3033,
2270 .card = CX88_BOARD_PROF_7300, 2298 .card = CX88_BOARD_PROF_7300,
2299 }, {
2300 .subvendor = 0xb200,
2301 .subdevice = 0x4200,
2302 .card = CX88_BOARD_SATTRADE_ST4200,
2271 }, 2303 },
2272}; 2304};
2273 2305
@@ -2878,8 +2910,10 @@ static void cx88_card_setup(struct cx88_core *core)
2878 case CX88_BOARD_TEVII_S420: 2910 case CX88_BOARD_TEVII_S420:
2879 case CX88_BOARD_TEVII_S460: 2911 case CX88_BOARD_TEVII_S460:
2880 case CX88_BOARD_OMICOM_SS4_PCI: 2912 case CX88_BOARD_OMICOM_SS4_PCI:
2913 case CX88_BOARD_TBS_8910:
2881 case CX88_BOARD_TBS_8920: 2914 case CX88_BOARD_TBS_8920:
2882 case CX88_BOARD_PROF_7300: 2915 case CX88_BOARD_PROF_7300:
2916 case CX88_BOARD_SATTRADE_ST4200:
2883 cx_write(MO_SRST_IO, 0); 2917 cx_write(MO_SRST_IO, 0);
2884 msleep(100); 2918 msleep(100);
2885 cx_write(MO_SRST_IO, 1); 2919 cx_write(MO_SRST_IO, 1);
diff --git a/drivers/media/video/cx88/cx88-dvb.c b/drivers/media/video/cx88/cx88-dvb.c
index 8378d46dc80d..bab28112e40e 100644
--- a/drivers/media/video/cx88/cx88-dvb.c
+++ b/drivers/media/video/cx88/cx88-dvb.c
@@ -1042,6 +1042,7 @@ static int dvb_register(struct cx8802_dev *dev)
1042 0x08, ISL6421_DCL, 0x00); 1042 0x08, ISL6421_DCL, 0x00);
1043 } 1043 }
1044 break; 1044 break;
1045 case CX88_BOARD_TBS_8910:
1045 case CX88_BOARD_TEVII_S420: 1046 case CX88_BOARD_TEVII_S420:
1046 fe0->dvb.frontend = dvb_attach(stv0299_attach, 1047 fe0->dvb.frontend = dvb_attach(stv0299_attach,
1047 &tevii_tuner_sharp_config, 1048 &tevii_tuner_sharp_config,
@@ -1078,6 +1079,7 @@ static int dvb_register(struct cx8802_dev *dev)
1078 case CX88_BOARD_OMICOM_SS4_PCI: 1079 case CX88_BOARD_OMICOM_SS4_PCI:
1079 case CX88_BOARD_TBS_8920: 1080 case CX88_BOARD_TBS_8920:
1080 case CX88_BOARD_PROF_7300: 1081 case CX88_BOARD_PROF_7300:
1082 case CX88_BOARD_SATTRADE_ST4200:
1081 fe0->dvb.frontend = dvb_attach(cx24116_attach, 1083 fe0->dvb.frontend = dvb_attach(cx24116_attach,
1082 &hauppauge_hvr4000_config, 1084 &hauppauge_hvr4000_config,
1083 &core->i2c_adap); 1085 &core->i2c_adap);
diff --git a/drivers/media/video/cx88/cx88.h b/drivers/media/video/cx88/cx88.h
index a11599fa1d86..ae1b89a88bcd 100644
--- a/drivers/media/video/cx88/cx88.h
+++ b/drivers/media/video/cx88/cx88.h
@@ -228,6 +228,8 @@ extern struct sram_channel cx88_sram_channels[];
228#define CX88_BOARD_TEVII_S420 73 228#define CX88_BOARD_TEVII_S420 73
229#define CX88_BOARD_PROLINK_PV_GLOBAL_XTREME 74 229#define CX88_BOARD_PROLINK_PV_GLOBAL_XTREME 74
230#define CX88_BOARD_PROF_7300 75 230#define CX88_BOARD_PROF_7300 75
231#define CX88_BOARD_SATTRADE_ST4200 76
232#define CX88_BOARD_TBS_8910 77
231 233
232enum cx88_itype { 234enum cx88_itype {
233 CX88_VMUX_COMPOSITE1 = 1, 235 CX88_VMUX_COMPOSITE1 = 1,
diff --git a/firmware/Makefile b/firmware/Makefile
index 4993a4b3d8ab..6968388818be 100644
--- a/firmware/Makefile
+++ b/firmware/Makefile
@@ -150,27 +150,15 @@ $(patsubst %,$(obj)/%.gen.o, $(fw-external-y)): $(obj)/%.gen.o: $(fwdir)/%
150$(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %) 150$(obj)/%: $(obj)/%.ihex | $(objtree)/$(obj)/$$(dir %)
151 $(call cmd,ihex) 151 $(call cmd,ihex)
152 152
153# Don't depend on ihex2fw if we're installing and it already exists.
154# Putting it after | in the dependencies doesn't seem sufficient when
155# we're installing after a cross-compile, because ihex2fw has dependencies
156# on stuff like /usr/lib/gcc/ppc64-redhat-linux/4.3.0/include/stddef.h and
157# thus wants to be rebuilt. Which it can't be, if the prebuilt kernel tree
158# is exported read-only for someone to run 'make install'.
159ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw)
160ihex2fw_dep :=
161else
162ihex2fw_dep := $(obj)/ihex2fw
163endif
164
165# .HEX is also Intel HEX, but where the offset and length in each record 153# .HEX is also Intel HEX, but where the offset and length in each record
166# is actually meaningful, because the firmware has to be loaded in a certain 154# is actually meaningful, because the firmware has to be loaded in a certain
167# order rather than as a single binary blob. Thus, we convert them into our 155# order rather than as a single binary blob. Thus, we convert them into our
168# more compact binary representation of ihex records (<linux/ihex.h>) 156# more compact binary representation of ihex records (<linux/ihex.h>)
169$(obj)/%.fw: $(obj)/%.HEX $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) 157$(obj)/%.fw: $(obj)/%.HEX $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %)
170 $(call cmd,ihex2fw) 158 $(call cmd,ihex2fw)
171 159
172# .H16 is our own modified form of Intel HEX, with 16-bit length for records. 160# .H16 is our own modified form of Intel HEX, with 16-bit length for records.
173$(obj)/%.fw: $(obj)/%.H16 $(ihex2fw_dep) | $(objtree)/$(obj)/$$(dir %) 161$(obj)/%.fw: $(obj)/%.H16 $(obj)/ihex2fw | $(objtree)/$(obj)/$$(dir %)
174 $(call cmd,h16tofw) 162 $(call cmd,h16tofw)
175 163
176$(firmware-dirs): 164$(firmware-dirs):
diff --git a/sound/i2c/other/tea575x-tuner.c b/sound/i2c/other/tea575x-tuner.c
index c13a178383ba..549b4eba1496 100644
--- a/sound/i2c/other/tea575x-tuner.c
+++ b/sound/i2c/other/tea575x-tuner.c
@@ -18,7 +18,7 @@
18 * along with this program; if not, write to the Free Software 18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 19 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * 20 *
21 */ 21 */
22 22
23#include <asm/io.h> 23#include <asm/io.h>
24#include <linux/delay.h> 24#include <linux/delay.h>
@@ -89,7 +89,7 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
89{ 89{
90 struct snd_tea575x *tea = video_drvdata(file); 90 struct snd_tea575x *tea = video_drvdata(file);
91 void __user *arg = (void __user *)data; 91 void __user *arg = (void __user *)data;
92 92
93 switch(cmd) { 93 switch(cmd) {
94 case VIDIOCGCAP: 94 case VIDIOCGCAP:
95 { 95 {
@@ -110,9 +110,9 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
110 case VIDIOCGTUNER: 110 case VIDIOCGTUNER:
111 { 111 {
112 struct video_tuner v; 112 struct video_tuner v;
113 if (copy_from_user(&v, arg,sizeof(v))!=0) 113 if (copy_from_user(&v, arg,sizeof(v))!=0)
114 return -EFAULT; 114 return -EFAULT;
115 if (v.tuner) /* Only 1 tuner */ 115 if (v.tuner) /* Only 1 tuner */
116 return -EINVAL; 116 return -EINVAL;
117 v.rangelow = (87*16000); 117 v.rangelow = (87*16000);
118 v.rangehigh = (108*16000); 118 v.rangehigh = (108*16000);
@@ -144,24 +144,24 @@ static int snd_tea575x_ioctl(struct inode *inode, struct file *file,
144 snd_tea575x_set_freq(tea); 144 snd_tea575x_set_freq(tea);
145 return 0; 145 return 0;
146 case VIDIOCGAUDIO: 146 case VIDIOCGAUDIO:
147 { 147 {
148 struct video_audio v; 148 struct video_audio v;
149 memset(&v, 0, sizeof(v)); 149 memset(&v, 0, sizeof(v));
150 strcpy(v.name, "Radio"); 150 strcpy(v.name, "Radio");
151 if(copy_to_user(arg,&v, sizeof(v))) 151 if(copy_to_user(arg,&v, sizeof(v)))
152 return -EFAULT; 152 return -EFAULT;
153 return 0; 153 return 0;
154 } 154 }
155 case VIDIOCSAUDIO: 155 case VIDIOCSAUDIO:
156 { 156 {
157 struct video_audio v; 157 struct video_audio v;
158 if(copy_from_user(&v, arg, sizeof(v))) 158 if(copy_from_user(&v, arg, sizeof(v)))
159 return -EFAULT; 159 return -EFAULT;
160 if (tea->ops->mute) 160 if (tea->ops->mute)
161 tea->ops->mute(tea, 161 tea->ops->mute(tea,
162 (v.flags & 162 (v.flags &
163 VIDEO_AUDIO_MUTE) ? 1 : 0); 163 VIDEO_AUDIO_MUTE) ? 1 : 0);
164 if(v.audio) 164 if(v.audio)
165 return -EINVAL; 165 return -EINVAL;
166 return 0; 166 return 0;
167 } 167 }
@@ -240,11 +240,11 @@ static int __init alsa_tea575x_module_init(void)
240{ 240{
241 return 0; 241 return 0;
242} 242}
243 243
244static void __exit alsa_tea575x_module_exit(void) 244static void __exit alsa_tea575x_module_exit(void)
245{ 245{
246} 246}
247 247
248module_init(alsa_tea575x_module_init) 248module_init(alsa_tea575x_module_init)
249module_exit(alsa_tea575x_module_exit) 249module_exit(alsa_tea575x_module_exit)
250 250