Commit 84b6b023 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

Merge tag 'fixes-for-v4.2-rc5' of...

Merge tag 'fixes-for-v4.2-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus

Felipe writes:

usb: fixes for v4.2-rc5

BCD driver now reads correct register to fetch HW
dequeue pointer address.

f_uac2 got a fix for bInterval calculation.

Both f_hid and f_printer can now correctly limit number
of instances when used through configfs.
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parents a14aad05 4248bd7d
...@@ -699,6 +699,10 @@ static inline int hidg_get_minor(void) ...@@ -699,6 +699,10 @@ static inline int hidg_get_minor(void)
int ret; int ret;
ret = ida_simple_get(&hidg_ida, 0, 0, GFP_KERNEL); ret = ida_simple_get(&hidg_ida, 0, 0, GFP_KERNEL);
if (ret >= HIDG_MINORS) {
ida_simple_remove(&hidg_ida, ret);
ret = -ENODEV;
}
return ret; return ret;
} }
......
...@@ -1248,7 +1248,15 @@ static struct config_item_type printer_func_type = { ...@@ -1248,7 +1248,15 @@ static struct config_item_type printer_func_type = {
static inline int gprinter_get_minor(void) static inline int gprinter_get_minor(void)
{ {
return ida_simple_get(&printer_ida, 0, 0, GFP_KERNEL); int ret;
ret = ida_simple_get(&printer_ida, 0, 0, GFP_KERNEL);
if (ret >= PRINTER_MINORS) {
ida_simple_remove(&printer_ida, ret);
ret = -ENODEV;
}
return ret;
} }
static inline void gprinter_put_minor(int minor) static inline void gprinter_put_minor(int minor)
......
...@@ -1162,14 +1162,14 @@ afunc_set_alt(struct usb_function *fn, unsigned intf, unsigned alt) ...@@ -1162,14 +1162,14 @@ afunc_set_alt(struct usb_function *fn, unsigned intf, unsigned alt)
factor = 1000; factor = 1000;
} else { } else {
ep_desc = &hs_epin_desc; ep_desc = &hs_epin_desc;
factor = 125; factor = 8000;
} }
/* pre-compute some values for iso_complete() */ /* pre-compute some values for iso_complete() */
uac2->p_framesize = opts->p_ssize * uac2->p_framesize = opts->p_ssize *
num_channels(opts->p_chmask); num_channels(opts->p_chmask);
rate = opts->p_srate * uac2->p_framesize; rate = opts->p_srate * uac2->p_framesize;
uac2->p_interval = (1 << (ep_desc->bInterval - 1)) * factor; uac2->p_interval = factor / (1 << (ep_desc->bInterval - 1));
uac2->p_pktsize = min_t(unsigned int, rate / uac2->p_interval, uac2->p_pktsize = min_t(unsigned int, rate / uac2->p_interval,
prm->max_psize); prm->max_psize);
......
...@@ -779,7 +779,7 @@ static int ep_dequeue(struct bdc_ep *ep, struct bdc_req *req) ...@@ -779,7 +779,7 @@ static int ep_dequeue(struct bdc_ep *ep, struct bdc_req *req)
/* The current hw dequeue pointer */ /* The current hw dequeue pointer */
tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(0)); tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(0));
deq_ptr_64 = tmp_32; deq_ptr_64 = tmp_32;
tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS0(1)); tmp_32 = bdc_readl(bdc->regs, BDC_EPSTS1(0));
deq_ptr_64 |= ((u64)tmp_32 << 32); deq_ptr_64 |= ((u64)tmp_32 << 32);
/* we have the dma addr of next bd that will be fetched by hardware */ /* we have the dma addr of next bd that will be fetched by hardware */
......
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