[PATCH v2] [media] dw2102: don't do DMA on stack

2017-02-15 Thread Jonathan McDowell
(Apologies, the original version of this patch had a stray, unused,
"buf_mutex" definition left over from an earlier version before I
switched to the existing data_mutex.)

I upgraded my media box today from 4.4.48 to 4.9.10 and hit WARNINGs in
the dw2102 driver for my TechnoTrend TT-connect S2-4600, one in
su3000_power_ctrl() and the other in tt_s2_4600_frontend_attach(). Both
were due to the use of buffers on the stack as parameters to
dvb_usb_generic_rw() and the resulting attempt to do DMA with them. The
device was non-functional as a result.

Patch below switches this driver over to using a buffer within the
device state structure, as has been done with other DVB-USB drivers.
Tested against 4.9.10 but applies to Linus' master cleanly.

Signed-off-by: Jonathan McDowell <nood...@earth.li>
Cc: <sta...@vger.kernel.org>

-
diff --git a/drivers/media/usb/dvb-usb/dw2102.c 
b/drivers/media/usb/dvb-usb/dw2102.c
index 2c720cb..861c15a 100644
--- a/drivers/media/usb/dvb-usb/dw2102.c
+++ b/drivers/media/usb/dvb-usb/dw2102.c
@@ -68,6 +68,7 @@
 struct dw2102_state {
u8 initialized;
u8 last_lock;
+   u8 data[MAX_XFER_SIZE + 4];
struct i2c_client *i2c_client_demod;
struct i2c_client *i2c_client_tuner;
 
@@ -662,62 +663,69 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, 
struct i2c_msg msg[],
int num)
 {
struct dvb_usb_device *d = i2c_get_adapdata(adap);
-   u8 obuf[0x40], ibuf[0x40];
+   struct dw2102_state *state = (struct dw2102_state *)d->priv;
 
if (!d)
return -ENODEV;
if (mutex_lock_interruptible(>i2c_mutex) < 0)
return -EAGAIN;
+   if (mutex_lock_interruptible(>data_mutex) < 0) {
+   mutex_unlock(>i2c_mutex);
+   return -EAGAIN;
+   }
 
switch (num) {
case 1:
switch (msg[0].addr) {
case SU3000_STREAM_CTRL:
-   obuf[0] = msg[0].buf[0] + 0x36;
-   obuf[1] = 3;
-   obuf[2] = 0;
-   if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 0, 0) < 0)
+   state->data[0] = msg[0].buf[0] + 0x36;
+   state->data[1] = 3;
+   state->data[2] = 0;
+   if (dvb_usb_generic_rw(d, state->data, 3,
+   state->data, 0, 0) < 0)
err("i2c transfer failed.");
break;
case DW2102_RC_QUERY:
-   obuf[0] = 0x10;
-   if (dvb_usb_generic_rw(d, obuf, 1, ibuf, 2, 0) < 0)
+   state->data[0] = 0x10;
+   if (dvb_usb_generic_rw(d, state->data, 1,
+   state->data, 2, 0) < 0)
err("i2c transfer failed.");
-   msg[0].buf[1] = ibuf[0];
-   msg[0].buf[0] = ibuf[1];
+   msg[0].buf[1] = state->data[0];
+   msg[0].buf[0] = state->data[1];
break;
default:
/* always i2c write*/
-   obuf[0] = 0x08;
-   obuf[1] = msg[0].addr;
-   obuf[2] = msg[0].len;
+   state->data[0] = 0x08;
+   state->data[1] = msg[0].addr;
+   state->data[2] = msg[0].len;
 
-   memcpy([3], msg[0].buf, msg[0].len);
+   memcpy(>data[3], msg[0].buf, msg[0].len);
 
-   if (dvb_usb_generic_rw(d, obuf, msg[0].len + 3,
-   ibuf, 1, 0) < 0)
+   if (dvb_usb_generic_rw(d, state->data, msg[0].len + 3,
+   state->data, 1, 0) < 0)
err("i2c transfer failed.");
 
}
break;
case 2:
/* always i2c read */
-   obuf[0] = 0x09;
-   obuf[1] = msg[0].len;
-   obuf[2] = msg[1].len;
-   obuf[3] = msg[0].addr;
-   memcpy([4], msg[0].buf, msg[0].len);
-
-   if (dvb_usb_generic_rw(d, obuf, msg[0].len + 4,
-   ibuf, msg[1].len + 1, 0) < 0)
+   state->data[0] = 0x09;
+   state->data[1] = msg[0].len;
+   state->data[2] = msg[1].len;
+   state->data[3] = msg[0].addr;
+   memcpy(>data[4], msg[0].buf, msg[0].len);
+
+   if (dvb_usb_generic_rw(d, state->data, msg[0].len + 4,
+   state->data, msg[1

[PATCH] [media] dw2102: don't do DMA on stack

2017-02-15 Thread Jonathan McDowell
I upgraded my media box today from 4.4.48 to 4.9.10 and hit WARNINGs in
the dw2102 driver for my TechnoTrend TT-connect S2-4600, one in
su3000_power_ctrl() and the other in tt_s2_4600_frontend_attach(). Both
were due to the use of buffers on the stack as parameters to
dvb_usb_generic_rw() and the resulting attempt to do DMA with them.

Patch below switches this driver over to using a buffer within the
device state structure, as has been done with other DVB-USB drivers.
Tested against 4.9.10 but applies to Linus' master cleanly.

Signed-off-by: Jonathan McDowell <nood...@earth.li>
Cc: <sta...@vger.kernel.org>

-
diff --git a/drivers/media/usb/dvb-usb/dw2102.c 
b/drivers/media/usb/dvb-usb/dw2102.c
index 2c720cb..1dde34f 100644
--- a/drivers/media/usb/dvb-usb/dw2102.c
+++ b/drivers/media/usb/dvb-usb/dw2102.c
@@ -68,6 +68,8 @@
 struct dw2102_state {
u8 initialized;
u8 last_lock;
+   u8 data[MAX_XFER_SIZE + 4];
+   struct mutex buf_mutex;
struct i2c_client *i2c_client_demod;
struct i2c_client *i2c_client_tuner;
 
@@ -662,62 +664,69 @@ static int su3000_i2c_transfer(struct i2c_adapter *adap, 
struct i2c_msg msg[],
int num)
 {
struct dvb_usb_device *d = i2c_get_adapdata(adap);
-   u8 obuf[0x40], ibuf[0x40];
+   struct dw2102_state *state = (struct dw2102_state *)d->priv;
 
if (!d)
return -ENODEV;
if (mutex_lock_interruptible(>i2c_mutex) < 0)
return -EAGAIN;
+   if (mutex_lock_interruptible(>data_mutex) < 0) {
+   mutex_unlock(>i2c_mutex);
+   return -EAGAIN;
+   }
 
switch (num) {
case 1:
switch (msg[0].addr) {
case SU3000_STREAM_CTRL:
-   obuf[0] = msg[0].buf[0] + 0x36;
-   obuf[1] = 3;
-   obuf[2] = 0;
-   if (dvb_usb_generic_rw(d, obuf, 3, ibuf, 0, 0) < 0)
+   state->data[0] = msg[0].buf[0] + 0x36;
+   state->data[1] = 3;
+   state->data[2] = 0;
+   if (dvb_usb_generic_rw(d, state->data, 3,
+   state->data, 0, 0) < 0)
err("i2c transfer failed.");
break;
case DW2102_RC_QUERY:
-   obuf[0] = 0x10;
-   if (dvb_usb_generic_rw(d, obuf, 1, ibuf, 2, 0) < 0)
+   state->data[0] = 0x10;
+   if (dvb_usb_generic_rw(d, state->data, 1,
+   state->data, 2, 0) < 0)
err("i2c transfer failed.");
-   msg[0].buf[1] = ibuf[0];
-   msg[0].buf[0] = ibuf[1];
+   msg[0].buf[1] = state->data[0];
+   msg[0].buf[0] = state->data[1];
break;
default:
/* always i2c write*/
-   obuf[0] = 0x08;
-   obuf[1] = msg[0].addr;
-   obuf[2] = msg[0].len;
+   state->data[0] = 0x08;
+   state->data[1] = msg[0].addr;
+   state->data[2] = msg[0].len;
 
-   memcpy([3], msg[0].buf, msg[0].len);
+   memcpy(>data[3], msg[0].buf, msg[0].len);
 
-   if (dvb_usb_generic_rw(d, obuf, msg[0].len + 3,
-   ibuf, 1, 0) < 0)
+   if (dvb_usb_generic_rw(d, state->data, msg[0].len + 3,
+   state->data, 1, 0) < 0)
err("i2c transfer failed.");
 
}
break;
case 2:
/* always i2c read */
-   obuf[0] = 0x09;
-   obuf[1] = msg[0].len;
-   obuf[2] = msg[1].len;
-   obuf[3] = msg[0].addr;
-   memcpy([4], msg[0].buf, msg[0].len);
-
-   if (dvb_usb_generic_rw(d, obuf, msg[0].len + 4,
-   ibuf, msg[1].len + 1, 0) < 0)
+   state->data[0] = 0x09;
+   state->data[1] = msg[0].len;
+   state->data[2] = msg[1].len;
+   state->data[3] = msg[0].addr;
+   memcpy(>data[4], msg[0].buf, msg[0].len);
+
+   if (dvb_usb_generic_rw(d, state->data, msg[0].len + 4,
+   state->data, msg[1].len + 1, 0) < 0)
err("i2c transfer failed.");
 
-   memcpy(msg[1].buf, [1], msg[1].len);
+   memcpy(msg[1].buf, &

[PATCH] Remove spurious blank lines in dw2101 kernel messages

2016-06-06 Thread Jonathan McDowell
The DW2102 DVB-S/S2 driver uses the info() logging function from
dvb-usb.h. This function already appends a newline to the provided log
message, causing the dmesg output from DW2102 to include blank lines.
Fix this by removing the newline in the calls to info().

Signed-off-by: Jonathan McDowell <nood...@earth.li>

-
diff --git a/drivers/media/usb/dvb-usb/dw2102.c 
b/drivers/media/usb/dvb-usb/dw2102.c
index 14ef25d..687f740 100644
--- a/drivers/media/usb/dvb-usb/dw2102.c
+++ b/drivers/media/usb/dvb-usb/dw2102.c
@@ -896,7 +896,7 @@ static int su3000_power_ctrl(struct dvb_usb_device *d, int 
i)
struct dw2102_state *state = (struct dw2102_state *)d->priv;
u8 obuf[] = {0xde, 0};
 
-   info("%s: %d, initialized %d\n", __func__, i, state->initialized);
+   info("%s: %d, initialized %d", __func__, i, state->initialized);
 
if (i && !state->initialized) {
state->initialized = 1;
@@ -943,7 +943,7 @@ static int su3000_identify_state(struct usb_device *udev,
 struct dvb_usb_device_description **desc,
 int *cold)
 {
-   info("%s\n", __func__);
+   info("%s", __func__);
 
*cold = 0;
return 0;
@@ -1197,7 +1197,7 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter 
*d)
tuner_ops->set_bandwidth = stb6100_set_bandw;
tuner_ops->get_bandwidth = stb6100_get_bandw;
d->fe_adap[0].fe->ops.set_voltage = 
dw210x_set_voltage;
-   info("Attached STV0900+STB6100!\n");
+   info("Attached STV0900+STB6100!");
return 0;
}
}
@@ -1211,7 +1211,7 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter 
*d)
_stv6110_config,
>dev->i2c_adap)) {
d->fe_adap[0].fe->ops.set_voltage = 
dw210x_set_voltage;
-   info("Attached STV0900+STV6110A!\n");
+   info("Attached STV0900+STV6110A!");
return 0;
}
}
@@ -1222,7 +1222,7 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter 
*d)
>dev->i2c_adap);
if (d->fe_adap[0].fe != NULL) {
d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
-   info("Attached cx24116!\n");
+   info("Attached cx24116!");
return 0;
}
}
@@ -1233,7 +1233,7 @@ static int dw2104_frontend_attach(struct dvb_usb_adapter 
*d)
dvb_attach(ts2020_attach, d->fe_adap[0].fe,
_ts2020_config, >dev->i2c_adap);
d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
-   info("Attached DS3000!\n");
+   info("Attached DS3000!");
return 0;
}
 
@@ -1252,7 +1252,7 @@ static int dw2102_frontend_attach(struct dvb_usb_adapter 
*d)
>dev->i2c_adap);
if (d->fe_adap[0].fe != NULL) {
d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
-   info("Attached si21xx!\n");
+   info("Attached si21xx!");
return 0;
}
}
@@ -1264,7 +1264,7 @@ static int dw2102_frontend_attach(struct dvb_usb_adapter 
*d)
if (dvb_attach(stb6000_attach, d->fe_adap[0].fe, 0x61,
>dev->i2c_adap)) {
d->fe_adap[0].fe->ops.set_voltage = 
dw210x_set_voltage;
-   info("Attached stv0288!\n");
+   info("Attached stv0288!");
return 0;
}
}
@@ -1276,7 +1276,7 @@ static int dw2102_frontend_attach(struct dvb_usb_adapter 
*d)
>dev->i2c_adap);
if (d->fe_adap[0].fe != NULL) {
d->fe_adap[0].fe->ops.set_voltage = dw210x_set_voltage;
-   info("Attached stv0299!\n");
+   info("Attached stv0299!");
return 0;
}
}
@@ -1288,7 +1288,7 @@ static int dw3101_frontend_attach(struct dvb_usb_adapter 
*d)
d->fe_adap[0].fe = dvb_attach(tda10023_attach, _tda10023_config,
   

[PATCH] Convert Wideview WT220 DVB USB driver to rc-core

2016-05-20 Thread Jonathan McDowell
(I don't know if this sort of patch is welcome, but if it is I have a
couple of other USB DVB sticks I will convert over as well. My main
motivation was to be able to easily use a better remote than the mini
one that comes with these devices.)

This patch converts the dtt200u DVB USB driver over to the rc-core
infrastructure for its handling of IR remotes. This device can receive
generic NEC / NEC Extended signals and the switch to the newer core
enables the easy use of tools such as ir-keytable to modify the active
key map.

Signed-off-by: Jonathan McDowell <nood...@earth.li>

-
diff --git a/drivers/media/rc/keymaps/Makefile 
b/drivers/media/rc/keymaps/Makefile
index fbbd3bb..3bc5714 100644
--- a/drivers/media/rc/keymaps/Makefile
+++ b/drivers/media/rc/keymaps/Makefile
@@ -28,6 +28,7 @@ obj-$(CONFIG_RC_MAP) += rc-adstech-dvb-t-pci.o \
rc-dm1105-nec.o \
rc-dntv-live-dvb-t.o \
rc-dntv-live-dvbt-pro.o \
+   rc-dtt200u.o \
rc-dvbsky.o \
rc-em-terratec.o \
rc-encore-enltv2.o \
diff --git a/drivers/media/rc/keymaps/rc-dtt200u.c 
b/drivers/media/rc/keymaps/rc-dtt200u.c
new file mode 100644
index 000..25650e9
--- /dev/null
+++ b/drivers/media/rc/keymaps/rc-dtt200u.c
@@ -0,0 +1,59 @@
+/* Keytable for Wideview WT-220U.
+ *
+ * Copyright (c) 2016 Jonathan McDowell <nood...@earth.li>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include 
+#include 
+
+/* key list for the tiny remote control (Yakumo, don't know about the others) 
*/
+static struct rc_map_table dtt200u_table[] = {
+   { 0x8001, KEY_MUTE },
+   { 0x8002, KEY_CHANNELDOWN },
+   { 0x8003, KEY_VOLUMEDOWN },
+   { 0x8004, KEY_1 },
+   { 0x8005, KEY_2 },
+   { 0x8006, KEY_3 },
+   { 0x8007, KEY_4 },
+   { 0x8008, KEY_5 },
+   { 0x8009, KEY_6 },
+   { 0x800a, KEY_7 },
+   { 0x800c, KEY_ZOOM },
+   { 0x800d, KEY_0 },
+   { 0x800e, KEY_SELECT },
+   { 0x8012, KEY_POWER },
+   { 0x801a, KEY_CHANNELUP },
+   { 0x801b, KEY_8 },
+   { 0x801e, KEY_VOLUMEUP },
+   { 0x801f, KEY_9 },
+};
+
+static struct rc_map_list dtt200u_map = {
+   .map = {
+   .scan= dtt200u_table,
+   .size= ARRAY_SIZE(dtt200u_table),
+   .rc_type = RC_TYPE_NEC,
+   .name= RC_MAP_DTT200U,
+   }
+};
+
+static int __init init_rc_map_dtt200u(void)
+{
+   return rc_map_register(_map);
+}
+
+static void __exit exit_rc_map_dtt200u(void)
+{
+   rc_map_unregister(_map);
+}
+
+module_init(init_rc_map_dtt200u)
+module_exit(exit_rc_map_dtt200u)
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Jonathan McDowell <nood...@earth.li>");
diff --git a/drivers/media/usb/dvb-usb/dtt200u.c 
b/drivers/media/usb/dvb-usb/dtt200u.c
index ca3b69a..be633ec 100644
--- a/drivers/media/usb/dvb-usb/dtt200u.c
+++ b/drivers/media/usb/dvb-usb/dtt200u.c
@@ -55,36 +55,36 @@ static int dtt200u_pid_filter(struct dvb_usb_adapter *adap, 
int index, u16 pid,
return dvb_usb_generic_write(adap->dev, b_pid, 4);
 }
 
-/* remote control */
-/* key list for the tiny remote control (Yakumo, don't know about the others) 
*/
-static struct rc_map_table rc_map_dtt200u_table[] = {
-   { 0x8001, KEY_MUTE },
-   { 0x8002, KEY_CHANNELDOWN },
-   { 0x8003, KEY_VOLUMEDOWN },
-   { 0x8004, KEY_1 },
-   { 0x8005, KEY_2 },
-   { 0x8006, KEY_3 },
-   { 0x8007, KEY_4 },
-   { 0x8008, KEY_5 },
-   { 0x8009, KEY_6 },
-   { 0x800a, KEY_7 },
-   { 0x800c, KEY_ZOOM },
-   { 0x800d, KEY_0 },
-   { 0x800e, KEY_SELECT },
-   { 0x8012, KEY_POWER },
-   { 0x801a, KEY_CHANNELUP },
-   { 0x801b, KEY_8 },
-   { 0x801e, KEY_VOLUMEUP },
-   { 0x801f, KEY_9 },
-};
-
-static int dtt200u_rc_query(struct dvb_usb_device *d, u32 *event, int *state)
+static int dtt200u_rc_query(struct dvb_usb_device *d)
 {
u8 key[5],cmd = GET_RC_CODE;
+   u32 scancode;
+
dvb_usb_generic_rw(d,,1,key,5,0);
-   dvb_usb_nec_rc_key_to_event(d,key,event,state);
+   if (key[0] == 1) {
+   scancode = key[1];
+   if ((u8) ~key[1] != key[2]) {
+   /* Extended NEC */
+   scancode = scancode << 8;
+   scancode |= key[2];
+   }
+   scancode = scancode << 8;
+   scancode |= key[3];
+
+   /* Check command checksum is ok */
+   if ((u8) ~key[3] == key[4])
+   rc_keydown(d->rc_dev, RC_TYPE_NEC, scancode, 0);
+   else
+  

[PATCH] Fix RC5 decoding with Fintek CIR chipset

2016-05-14 Thread Jonathan McDowell
Fix RC5 decoding with Fintek CIR chipset

Commit e87b540be2dd02552fb9244d50ae8b4e4619a34b tightened up the RC5
decoding by adding a check for trailing silence to ensure a valid RC5
command had been received. Unfortunately the trailer length checked was
10 units and the Fintek CIR device does not want to provide details of a
space longer than 6350us. This meant that RC5 remotes working on a
Fintek setup on 3.16 failed on 3.17 and later. Fix this by shortening
the trailer check to 6 units (allowing for a previous space in the
received remote command).

Signed-off-by: Jonathan McDowell <nood...@earth.li>
Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=117221
Cc: sta...@vger.kernel.org

-
diff --git a/drivers/media/rc/ir-rc5-decoder.c 
b/drivers/media/rc/ir-rc5-decoder.c
index 6ffe776..a0fd4e6 100644
--- a/drivers/media/rc/ir-rc5-decoder.c
+++ b/drivers/media/rc/ir-rc5-decoder.c
@@ -29,7 +29,7 @@
 #define RC5_BIT_START  (1 * RC5_UNIT)
 #define RC5_BIT_END(1 * RC5_UNIT)
 #define RC5X_SPACE (4 * RC5_UNIT)
-#define RC5_TRAILER(10 * RC5_UNIT) /* In reality, approx 100 */
+#define RC5_TRAILER(6 * RC5_UNIT) /* In reality, approx 100 */
 
 enum rc5_state {
STATE_INACTIVE,
-

J.

-- 
What did the first punk rock girl wear to your school?
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] Fix Mygica T230 support

2015-01-02 Thread Jonathan McDowell
Commit 2adb177e57417cf8409e86bda2c516e5f99a2099 removed 2 devices
from the cxusb device table but failed to fix up the T230 properties
that follow, meaning that this device no longer gets detected properly.
Adjust the cxusb_table index appropriate so detection works.

Signed-Off-By: Jonathan McDowell nood...@earth.li

-
diff --git a/drivers/media/usb/dvb-usb/cxusb.c 
b/drivers/media/usb/dvb-usb/cxusb.c
index 0f345b1..f327c49 100644
--- a/drivers/media/usb/dvb-usb/cxusb.c
+++ b/drivers/media/usb/dvb-usb/cxusb.c
@@ -2232,7 +2232,7 @@ static struct dvb_usb_device_properties 
cxusb_mygica_t230_properties = {
{
Mygica T230 DVB-T/T2/C,
{ NULL },
-   { cxusb_table[22], NULL },
+   { cxusb_table[20], NULL },
},
}
 };
-

J.

-- 
Save usenet: rmgroup ox.colleges.keble -- Simon Cozens, ox.test
This .sig brought to you by the letter J and the number 47
Product of the Republic of HuggieTag
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] Autoselect more relevant frontends for EM28XX DVB stick

2012-11-15 Thread Jonathan McDowell
Compiling up 3.6.6 for my media box recently I noticed that the EM28XX
DVB driver doesn't auto select all of the appropriate DVB tuner modules
required. In particular I needed DVB_LGDT3305 for my a340, but it looks
like DVB_MT352 + DVB_S5H1409 were missing as well. Patch below adds the
appropriate select lines to the Kconfig and is against Linus' current
mainline.

Signed-Off-By: Jonathan McDowell nood...@earth.li

-
diff --git a/drivers/media/usb/em28xx/Kconfig b/drivers/media/usb/em28xx/Kconfig
index 7a5bd61..617c6e4 100644
--- a/drivers/media/usb/em28xx/Kconfig
+++ b/drivers/media/usb/em28xx/Kconfig
@@ -34,6 +34,7 @@ config VIDEO_EM28XX_DVB
tristate DVB/ATSC Support for em28xx based TV cards
depends on VIDEO_EM28XX  DVB_CORE
select DVB_LGDT330X if MEDIA_SUBDRV_AUTOSELECT
+   select DVB_LGDT3305 if MEDIA_SUBDRV_AUTOSELECT
select DVB_ZL10353 if MEDIA_SUBDRV_AUTOSELECT
select DVB_TDA10023 if MEDIA_SUBDRV_AUTOSELECT
select DVB_S921 if MEDIA_SUBDRV_AUTOSELECT
@@ -43,6 +44,8 @@ config VIDEO_EM28XX_DVB
select DVB_TDA18271C2DD if MEDIA_SUBDRV_AUTOSELECT
select DVB_TDA10071 if MEDIA_SUBDRV_AUTOSELECT
select DVB_A8293 if MEDIA_SUBDRV_AUTOSELECT
+   select DVB_MT352 if MEDIA_SUBDRV_AUTOSELECT
+   select DVB_S5H1409 if MEDIA_SUBDRV_AUTOSELECT
select VIDEOBUF_DVB
---help---
  This adds support for DVB cards based on the
-

J.

-- 
Revd Jonathan McDowell, ULC | This screen intentionally left blank.
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html