Merge tag 'fixes-for-v3.16-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/balbi/usb into usb-linus
Felipe writes: usb: fixes for v3.16-rc4 A few more fixes for this RC cycle. There's a revert of a previous patch which ended up being the wrong version, so we reverted that commit and applied a better fix. CPPI41 got a race condition fix which was found by Thomas Gleixner. The MSM PHY driver got a runtime pm usage fix so that it wouldn't kill the PHY while it was still being used. We also have a fix for a panic caused when removing musb_am335x driver. Other than that, a few other minor fixes. Signed-of-by: Felipe Balbi <balbi@ti.com>
Este commit está contenido en:
@@ -1532,8 +1532,9 @@ static int gr_ep_enable(struct usb_ep *_ep,
|
||||
"%s mode: multiple trans./microframe not valid\n",
|
||||
(mode == 2 ? "Bulk" : "Control"));
|
||||
return -EINVAL;
|
||||
} else if (nt == 0x11) {
|
||||
dev_err(dev->dev, "Invalid value for trans./microframe\n");
|
||||
} else if (nt == 0x3) {
|
||||
dev_err(dev->dev,
|
||||
"Invalid value 0x3 for additional trans./microframe\n");
|
||||
return -EINVAL;
|
||||
} else if ((nt + 1) * max > buffer_size) {
|
||||
dev_err(dev->dev, "Hw buffer size %d < max payload %d * %d\n",
|
||||
|
@@ -19,21 +19,6 @@ err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int of_remove_populated_child(struct device *dev, void *d)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev);
|
||||
|
||||
of_device_unregister(pdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int am335x_child_remove(struct platform_device *pdev)
|
||||
{
|
||||
device_for_each_child(&pdev->dev, NULL, of_remove_populated_child);
|
||||
pm_runtime_disable(&pdev->dev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct of_device_id am335x_child_of_match[] = {
|
||||
{ .compatible = "ti,am33xx-usb" },
|
||||
{ },
|
||||
@@ -42,13 +27,17 @@ MODULE_DEVICE_TABLE(of, am335x_child_of_match);
|
||||
|
||||
static struct platform_driver am335x_child_driver = {
|
||||
.probe = am335x_child_probe,
|
||||
.remove = am335x_child_remove,
|
||||
.driver = {
|
||||
.name = "am335x-usb-childs",
|
||||
.of_match_table = am335x_child_of_match,
|
||||
},
|
||||
};
|
||||
|
||||
module_platform_driver(am335x_child_driver);
|
||||
static int __init am335x_child_init(void)
|
||||
{
|
||||
return platform_driver_register(&am335x_child_driver);
|
||||
}
|
||||
module_init(am335x_child_init);
|
||||
|
||||
MODULE_DESCRIPTION("AM33xx child devices");
|
||||
MODULE_LICENSE("GPL v2");
|
||||
|
@@ -318,7 +318,7 @@ static void cppi41_dma_callback(void *private_data)
|
||||
}
|
||||
list_add_tail(&cppi41_channel->tx_check,
|
||||
&controller->early_tx_list);
|
||||
if (!hrtimer_active(&controller->early_tx)) {
|
||||
if (!hrtimer_is_queued(&controller->early_tx)) {
|
||||
hrtimer_start_range_ns(&controller->early_tx,
|
||||
ktime_set(0, 140 * NSEC_PER_USEC),
|
||||
40 * NSEC_PER_USEC,
|
||||
|
@@ -494,10 +494,9 @@ static int dsps_musb_set_mode(struct musb *musb, u8 mode)
|
||||
struct dsps_glue *glue = dev_get_drvdata(dev->parent);
|
||||
const struct dsps_musb_wrapper *wrp = glue->wrp;
|
||||
void __iomem *ctrl_base = musb->ctrl_base;
|
||||
void __iomem *base = musb->mregs;
|
||||
u32 reg;
|
||||
|
||||
reg = dsps_readl(base, wrp->mode);
|
||||
reg = dsps_readl(ctrl_base, wrp->mode);
|
||||
|
||||
switch (mode) {
|
||||
case MUSB_HOST:
|
||||
@@ -510,7 +509,7 @@ static int dsps_musb_set_mode(struct musb *musb, u8 mode)
|
||||
*/
|
||||
reg |= (1 << wrp->iddig_mux);
|
||||
|
||||
dsps_writel(base, wrp->mode, reg);
|
||||
dsps_writel(ctrl_base, wrp->mode, reg);
|
||||
dsps_writel(ctrl_base, wrp->phy_utmi, 0x02);
|
||||
break;
|
||||
case MUSB_PERIPHERAL:
|
||||
@@ -523,10 +522,10 @@ static int dsps_musb_set_mode(struct musb *musb, u8 mode)
|
||||
*/
|
||||
reg |= (1 << wrp->iddig_mux);
|
||||
|
||||
dsps_writel(base, wrp->mode, reg);
|
||||
dsps_writel(ctrl_base, wrp->mode, reg);
|
||||
break;
|
||||
case MUSB_OTG:
|
||||
dsps_writel(base, wrp->phy_utmi, 0x02);
|
||||
dsps_writel(ctrl_base, wrp->phy_utmi, 0x02);
|
||||
break;
|
||||
default:
|
||||
dev_err(glue->dev, "unsupported mode %d\n", mode);
|
||||
|
@@ -1229,7 +1229,9 @@ static void msm_otg_sm_work(struct work_struct *w)
|
||||
motg->chg_state = USB_CHG_STATE_UNDEFINED;
|
||||
motg->chg_type = USB_INVALID_CHARGER;
|
||||
}
|
||||
pm_runtime_put_sync(otg->phy->dev);
|
||||
|
||||
if (otg->phy->state == OTG_STATE_B_IDLE)
|
||||
pm_runtime_put_sync(otg->phy->dev);
|
||||
break;
|
||||
case OTG_STATE_B_PERIPHERAL:
|
||||
dev_dbg(otg->phy->dev, "OTG_STATE_B_PERIPHERAL state\n");
|
||||
|
Referencia en una nueva incidencia
Block a user