On Mon, Jun 21, 2010 at 1:29 AM, Michael Krufky <mkrufky@xxxxxxxxxxxxxx> wrote: > Could somebody please test this patch and confirm that it doesn't > break the af9005 support? > > This patch removes the af9005_usb_generic_rw function and uses the > dvb_usb_generic_rw function instead, using > generic_bulk_ctrl_endpoint_response to differentiate between the read > pipe and the write pipe. > > Also found in the mercurial repository: > > http://kernellabs.com/hg/~mkrufky/af9005 > > Cheers, > > Mike Krufky (patch inline this time) # HG changeset patch # User Michael Krufky <mkrufky@xxxxxxxxxxxxxx> # Date 1277095782 14400 # Node ID 8d43c09cfe26655166e7ab039f765223bc87f3c5 # Parent 723e03a57ef335a4e005ac57e49fa50d2c66a010 af9005: use generic_bulk_ctrl_endpoint_response From: Michael Krufky <mkrufky@xxxxxxxxxxxxxx> Priority: normal Signed-off-by: Michael Krufky <mkrufky@xxxxxxxxxxxxxx> --- a/linux/drivers/media/dvb/dvb-usb/af9005.c Sun Jan 31 19:06:10 2010 -0500 +++ b/linux/drivers/media/dvb/dvb-usb/af9005.c Mon Jun 21 00:49:42 2010 -0400 @@ -54,50 +54,6 @@ int led_state; }; -static int af9005_usb_generic_rw(struct dvb_usb_device *d, u8 *wbuf, u16 wlen, - u8 *rbuf, u16 rlen, int delay_ms) -{ - int actlen, ret = -ENOMEM; - - if (wbuf == NULL || wlen == 0) - return -EINVAL; - - if ((ret = mutex_lock_interruptible(&d->usb_mutex))) - return ret; - - deb_xfer(">>> "); - debug_dump(wbuf, wlen, deb_xfer); - - ret = usb_bulk_msg(d->udev, usb_sndbulkpipe(d->udev, - 2), wbuf, wlen, - &actlen, 2000); - - if (ret) - err("bulk message failed: %d (%d/%d)", ret, wlen, actlen); - else - ret = actlen != wlen ? -1 : 0; - - /* an answer is expected, and no error before */ - if (!ret && rbuf && rlen) { - if (delay_ms) - msleep(delay_ms); - - ret = usb_bulk_msg(d->udev, usb_rcvbulkpipe(d->udev, - 0x01), rbuf, - rlen, &actlen, 2000); - - if (ret) - err("recv bulk message failed: %d", ret); - else { - deb_xfer("<<< "); - debug_dump(rbuf, actlen, deb_xfer); - } - } - - mutex_unlock(&d->usb_mutex); - return ret; -} - static int af9005_generic_read_write(struct dvb_usb_device *d, u16 reg, int readwrite, int type, u8 * values, int len) { @@ -146,7 +102,7 @@ obuf[8] = values[0]; obuf[7] = command; - ret = af9005_usb_generic_rw(d, obuf, 16, ibuf, 17, 0); + ret = dvb_usb_generic_rw(d, obuf, 16, ibuf, 17, 0); if (ret) return ret; @@ -537,7 +493,7 @@ buf[6] = wlen; for (i = 0; i < wlen; i++) buf[7 + i] = wbuf[i]; - ret = af9005_usb_generic_rw(d, buf, wlen + 7, ibuf, rlen + 7, 0); + ret = dvb_usb_generic_rw(d, buf, wlen + 7, ibuf, rlen + 7, 0); if (ret) return ret; if (ibuf[2] != 0x27) { @@ -584,7 +540,7 @@ obuf[6] = len; obuf[7] = address; - ret = af9005_usb_generic_rw(d, obuf, 16, ibuf, 14, 0); + ret = dvb_usb_generic_rw(d, obuf, 16, ibuf, 14, 0); if (ret) return ret; if (ibuf[2] != 0x2b) { @@ -885,7 +841,7 @@ obuf[2] = 0x40; /* read remote */ obuf[3] = 1; /* rest of packet length */ obuf[4] = st->sequence++; /* sequence number */ - ret = af9005_usb_generic_rw(d, obuf, 5, ibuf, 256, 0); + ret = dvb_usb_generic_rw(d, obuf, 5, ibuf, 256, 0); if (ret) { err("rc query failed"); return ret; @@ -1077,6 +1033,9 @@ .rc_key_map_size = 0, .rc_query = af9005_rc_query, + .generic_bulk_ctrl_endpoint = 2, + .generic_bulk_ctrl_endpoint_response = 1, + .num_device_descs = 3, .devices = { {.name = "Afatech DVB-T USB1.1 stick", -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html