Commit 73b39bb0 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

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

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

Felipe writes:

usb: fixes for-v4.4-rc5

Hopefully final set of fixes for v4.4 release cycle.

There's a fix for a regression on dwc3 caused by recent changes to how
transfers are started. We're not pre-starting interrupt endpoints
anymore.

A NULL pointer dereference fix for the MSM phy driver.

The UVC gadget got a minor fix for permissions to its configfs
attributes and, finally, two fixes for MUSB. A fix for PM runtime when
MUSB returns EPROBE_DEFER and a fix to actually return an error in case
we can't initialize a DMA engine.
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parents 4a0c4c36 7d32cdef
...@@ -1078,6 +1078,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) ...@@ -1078,6 +1078,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
* little bit faster. * little bit faster.
*/ */
if (!usb_endpoint_xfer_isoc(dep->endpoint.desc) && if (!usb_endpoint_xfer_isoc(dep->endpoint.desc) &&
!usb_endpoint_xfer_int(dep->endpoint.desc) &&
!(dep->flags & DWC3_EP_BUSY)) { !(dep->flags & DWC3_EP_BUSY)) {
ret = __dwc3_gadget_kick_transfer(dep, 0, true); ret = __dwc3_gadget_kick_transfer(dep, 0, true);
goto out; goto out;
......
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#define UVC_ATTR(prefix, cname, aname) \ #define UVC_ATTR(prefix, cname, aname) \
static struct configfs_attribute prefix##attr_##cname = { \ static struct configfs_attribute prefix##attr_##cname = { \
.ca_name = __stringify(aname), \ .ca_name = __stringify(aname), \
.ca_mode = S_IRUGO, \ .ca_mode = S_IRUGO | S_IWUGO, \
.ca_owner = THIS_MODULE, \ .ca_owner = THIS_MODULE, \
.show = prefix##cname##_show, \ .show = prefix##cname##_show, \
.store = prefix##cname##_store, \ .store = prefix##cname##_store, \
......
...@@ -2017,7 +2017,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) ...@@ -2017,7 +2017,6 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
/* We need musb_read/write functions initialized for PM */ /* We need musb_read/write functions initialized for PM */
pm_runtime_use_autosuspend(musb->controller); pm_runtime_use_autosuspend(musb->controller);
pm_runtime_set_autosuspend_delay(musb->controller, 200); pm_runtime_set_autosuspend_delay(musb->controller, 200);
pm_runtime_irq_safe(musb->controller);
pm_runtime_enable(musb->controller); pm_runtime_enable(musb->controller);
/* The musb_platform_init() call: /* The musb_platform_init() call:
...@@ -2095,6 +2094,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) ...@@ -2095,6 +2094,7 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
#ifndef CONFIG_MUSB_PIO_ONLY #ifndef CONFIG_MUSB_PIO_ONLY
if (!musb->ops->dma_init || !musb->ops->dma_exit) { if (!musb->ops->dma_init || !musb->ops->dma_exit) {
dev_err(dev, "DMA controller not set\n"); dev_err(dev, "DMA controller not set\n");
status = -ENODEV;
goto fail2; goto fail2;
} }
musb_dma_controller_create = musb->ops->dma_init; musb_dma_controller_create = musb->ops->dma_init;
...@@ -2218,6 +2218,12 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl) ...@@ -2218,6 +2218,12 @@ musb_init_controller(struct device *dev, int nIrq, void __iomem *ctrl)
pm_runtime_put(musb->controller); pm_runtime_put(musb->controller);
/*
* For why this is currently needed, see commit 3e43a0725637
* ("usb: musb: core: add pm_runtime_irq_safe()")
*/
pm_runtime_irq_safe(musb->controller);
return 0; return 0;
fail5: fail5:
......
...@@ -1506,7 +1506,6 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg) ...@@ -1506,7 +1506,6 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg)
{ {
struct msm_otg_platform_data *pdata; struct msm_otg_platform_data *pdata;
struct extcon_dev *ext_id, *ext_vbus; struct extcon_dev *ext_id, *ext_vbus;
const struct of_device_id *id;
struct device_node *node = pdev->dev.of_node; struct device_node *node = pdev->dev.of_node;
struct property *prop; struct property *prop;
int len, ret, words; int len, ret, words;
...@@ -1518,8 +1517,9 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg) ...@@ -1518,8 +1517,9 @@ static int msm_otg_read_dt(struct platform_device *pdev, struct msm_otg *motg)
motg->pdata = pdata; motg->pdata = pdata;
id = of_match_device(msm_otg_dt_match, &pdev->dev); pdata->phy_type = (enum msm_usb_phy_type)of_device_get_match_data(&pdev->dev);
pdata->phy_type = (enum msm_usb_phy_type) id->data; if (!pdata->phy_type)
return 1;
motg->link_rst = devm_reset_control_get(&pdev->dev, "link"); motg->link_rst = devm_reset_control_get(&pdev->dev, "link");
if (IS_ERR(motg->link_rst)) if (IS_ERR(motg->link_rst))
......
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