mirror of https://gitee.com/openkylin/linux.git
[media] tm6000: improve loading speed on hauppauge 900H
- enable fast usb quirk - use usleep_range instead on msleep for short sleep - merge i2c out and usb delay - do like the windows driver that upload the tuner firmware with 80 bytes packets Signed-off-by: Matthieu CASTET <castet.matthieu@free.fr> CC: Thierry Reding <thierry.reding@avionic-design.de> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
This commit is contained in:
parent
7581e61d8d
commit
3874cd7796
|
@ -943,6 +943,7 @@ static void tm6000_config_tuner(struct tm6000_core *dev)
|
|||
case TM6010_BOARD_HAUPPAUGE_900H:
|
||||
case TM6010_BOARD_TERRATEC_CINERGY_HYBRID_XE:
|
||||
case TM6010_BOARD_TWINHAN_TU501:
|
||||
ctl.max_len = 80;
|
||||
ctl.fname = "xc3028L-v36.fw";
|
||||
break;
|
||||
default:
|
||||
|
@ -1004,6 +1005,7 @@ static int fill_board_specific_data(struct tm6000_core *dev)
|
|||
/* setup per-model quirks */
|
||||
switch (dev->model) {
|
||||
case TM6010_BOARD_TERRATEC_CINERGY_HYBRID_XE:
|
||||
case TM6010_BOARD_HAUPPAUGE_900H:
|
||||
dev->quirks |= TM6000_QUIRK_NO_USB_DELAY;
|
||||
break;
|
||||
|
||||
|
|
|
@ -38,6 +38,7 @@ int tm6000_read_write_usb(struct tm6000_core *dev, u8 req_type, u8 req,
|
|||
int ret, i;
|
||||
unsigned int pipe;
|
||||
u8 *data = NULL;
|
||||
int delay = 5000;
|
||||
|
||||
mutex_lock(&dev->usb_lock);
|
||||
|
||||
|
@ -89,8 +90,19 @@ int tm6000_read_write_usb(struct tm6000_core *dev, u8 req_type, u8 req,
|
|||
|
||||
kfree(data);
|
||||
|
||||
if ((dev->quirks & TM6000_QUIRK_NO_USB_DELAY) == 0)
|
||||
msleep(5);
|
||||
if (dev->quirks & TM6000_QUIRK_NO_USB_DELAY)
|
||||
delay = 0;
|
||||
|
||||
if (req == REQ_16_SET_GET_I2C_WR1_RDN && !(req_type & USB_DIR_IN)) {
|
||||
unsigned int tsleep;
|
||||
/* Calculate delay time, 14000us for 64 bytes */
|
||||
tsleep = (len * 200) + 200;
|
||||
if (tsleep < delay)
|
||||
tsleep = delay;
|
||||
usleep_range(tsleep, tsleep + 1000);
|
||||
}
|
||||
else if (delay)
|
||||
usleep_range(delay, delay + 1000);
|
||||
|
||||
mutex_unlock(&dev->usb_lock);
|
||||
return ret;
|
||||
|
|
|
@ -46,11 +46,10 @@ static int tm6000_i2c_send_regs(struct tm6000_core *dev, unsigned char addr,
|
|||
__u8 reg, char *buf, int len)
|
||||
{
|
||||
int rc;
|
||||
unsigned int tsleep;
|
||||
unsigned int i2c_packet_limit = 16;
|
||||
|
||||
if (dev->dev_type == TM6010)
|
||||
i2c_packet_limit = 64;
|
||||
i2c_packet_limit = 80;
|
||||
|
||||
if (!buf)
|
||||
return -1;
|
||||
|
@ -71,10 +70,6 @@ static int tm6000_i2c_send_regs(struct tm6000_core *dev, unsigned char addr,
|
|||
return rc;
|
||||
}
|
||||
|
||||
/* Calculate delay time, 14000us for 64 bytes */
|
||||
tsleep = ((len * 200) + 200 + 1000) / 1000;
|
||||
msleep(tsleep);
|
||||
|
||||
/* release mutex */
|
||||
return rc;
|
||||
}
|
||||
|
@ -145,7 +140,6 @@ static int tm6000_i2c_recv_regs16(struct tm6000_core *dev, unsigned char addr,
|
|||
return rc;
|
||||
}
|
||||
|
||||
msleep(1400 / 1000);
|
||||
rc = tm6000_read_write_usb(dev, USB_DIR_IN | USB_TYPE_VENDOR |
|
||||
USB_RECIP_DEVICE, REQ_35_AFTEK_TUNER_READ,
|
||||
reg, 0, buf, len);
|
||||
|
|
Loading…
Reference in New Issue