diff options
author | Igor M. Liplianin <liplianin@me.by> | 2008-11-09 13:25:31 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2008-12-29 14:53:28 -0500 |
commit | 4b29631db33292d416dc395c56122ea865e7635c (patch) | |
tree | 1e0e6b034148e2d78c73f4d3e85a242884707dbe | |
parent | 1f6340bd431921f9b6dc995973eb065d6c14f024 (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.cx88 | 2 | ||||
-rw-r--r-- | drivers/media/video/Makefile | 1 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-cards.c | 34 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88-dvb.c | 2 | ||||
-rw-r--r-- | drivers/media/video/cx88/cx88.h | 2 | ||||
-rw-r--r-- | firmware/Makefile | 16 | ||||
-rw-r--r-- | sound/i2c/other/tea575x-tuner.c | 22 |
7 files changed, 54 insertions, 25 deletions
diff --git a/Documentation/video4linux/CARDLIST.cx88 b/Documentation/video4linux/CARDLIST.cx88 index 12e600d7424..dc8da94061a 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 e5b80137900..53d43f9e017 100644 --- a/drivers/media/video/Makefile +++ b/drivers/media/video/Makefile | |||
@@ -25,6 +25,7 @@ obj-$(CONFIG_VIDEO_IR_I2C) += ir-kbd-i2c.o | |||
25 | obj-$(CONFIG_VIDEO_TVAUDIO) += tvaudio.o | 25 | obj-$(CONFIG_VIDEO_TVAUDIO) += tvaudio.o |
26 | obj-$(CONFIG_VIDEO_TDA7432) += tda7432.o | 26 | obj-$(CONFIG_VIDEO_TDA7432) += tda7432.o |
27 | obj-$(CONFIG_VIDEO_TDA9875) += tda9875.o | 27 | obj-$(CONFIG_VIDEO_TDA9875) += tda9875.o |
28 | obj-$(CONFIG_SOUND_TVMIXER) += tvmixer.o | ||
28 | 29 | ||
29 | obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o | 30 | obj-$(CONFIG_VIDEO_SAA6588) += saa6588.o |
30 | obj-$(CONFIG_VIDEO_SAA5246A) += saa5246a.o | 31 | obj-$(CONFIG_VIDEO_SAA5246A) += saa5246a.o |
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c index 3ead9498c4d..bbe5b3343ac 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 8378d46dc80..bab28112e40 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 a11599fa1d8..ae1b89a88bc 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 | ||
232 | enum cx88_itype { | 234 | enum cx88_itype { |
233 | CX88_VMUX_COMPOSITE1 = 1, | 235 | CX88_VMUX_COMPOSITE1 = 1, |
diff --git a/firmware/Makefile b/firmware/Makefile index 4993a4b3d8a..6968388818b 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'. | ||
159 | ifeq ($(INSTALL):$(wildcard $(obj)/ihex2fw),install:$(obj)/ihex2fw) | ||
160 | ihex2fw_dep := | ||
161 | else | ||
162 | ihex2fw_dep := $(obj)/ihex2fw | ||
163 | endif | ||
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 c13a178383b..549b4eba149 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 | ||
244 | static void __exit alsa_tea575x_module_exit(void) | 244 | static void __exit alsa_tea575x_module_exit(void) |
245 | { | 245 | { |
246 | } | 246 | } |
247 | 247 | ||
248 | module_init(alsa_tea575x_module_init) | 248 | module_init(alsa_tea575x_module_init) |
249 | module_exit(alsa_tea575x_module_exit) | 249 | module_exit(alsa_tea575x_module_exit) |
250 | 250 | ||