Commit 3847b22a authored by Aapo Tahkola's avatar Aapo Tahkola Committed by Mauro Carvalho Chehab

V4L/DVB (5694): M920x: fix for Dposh devices

Make sure devices manufactured by Dposh are not affected by previous hw 
pid filtering changes

Doing so might crash it.
Signed-off-by: default avatarAapo Tahkola <aet@rasterburn.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent 55bbe5ea
...@@ -59,7 +59,7 @@ static inline int m920x_write(struct usb_device *udev, u8 request, ...@@ -59,7 +59,7 @@ static inline int m920x_write(struct usb_device *udev, u8 request,
static int m920x_init(struct dvb_usb_device *d, struct m920x_inits *rc_seq) static int m920x_init(struct dvb_usb_device *d, struct m920x_inits *rc_seq)
{ {
int ret = 0, i, epi; int ret = 0, i, epi, flags = 0;
int adap_enabled[M9206_MAX_ADAPTERS] = { 0 }; int adap_enabled[M9206_MAX_ADAPTERS] = { 0 };
/* Remote controller init. */ /* Remote controller init. */
...@@ -79,26 +79,32 @@ static int m920x_init(struct dvb_usb_device *d, struct m920x_inits *rc_seq) ...@@ -79,26 +79,32 @@ static int m920x_init(struct dvb_usb_device *d, struct m920x_inits *rc_seq)
deb("Initialising remote control success\n"); deb("Initialising remote control success\n");
} }
for (i = 0; i < d->props.num_adapters; i++) { for (i = 0; i < d->props.num_adapters; i++)
epi = d->adapter[i].props.stream.endpoint - 0x81; flags |= d->adapter[i].props.caps;
if (epi < 0 || epi >= M9206_MAX_ADAPTERS) { /* Some devices(Dposh) might crash if we attempt touch at all. */
printk(KERN_INFO "m920x: Unexpected adapter endpoint!\n"); if (flags & DVB_USB_ADAP_HAS_PID_FILTER) {
return -EINVAL; for (i = 0; i < d->props.num_adapters; i++) {
} epi = d->adapter[i].props.stream.endpoint - 0x81;
adap_enabled[epi] = 1; if (epi < 0 || epi >= M9206_MAX_ADAPTERS) {
} printk(KERN_INFO "m920x: Unexpected adapter endpoint!\n");
return -EINVAL;
}
for (i = 0; i < M9206_MAX_ADAPTERS; i++) { adap_enabled[epi] = 1;
if (adap_enabled[i]) }
continue;
if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x0)) != 0) for (i = 0; i < M9206_MAX_ADAPTERS; i++) {
return ret; if (adap_enabled[i])
continue;
if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x02f5)) != 0) if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x0)) != 0)
return ret; return ret;
if ((ret = m920x_set_filter(d, 0x81 + i, 0, 0x02f5)) != 0)
return ret;
}
} }
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment