> From: [email protected] 
> [mailto:[email protected]] On Behalf Of John Crispin
> Sent: Thursday, October 16, 2014 1:34 PM
> 
> We need this for dwc2 to work on older ralink SoC like the rt3052. Without, we
> see the following when loading the driver:
> 
> [    0.760000] dwc2 101c0000.usb: Bad value for GSNPSID: 0x00000000
> 
> Signed-off-by: John Crispin <[email protected]>
> ---
> Changes since V1
> * move the OF lookup call into the platform code
> * add code to the cleanup path that puts the core back into reset
> 
>  drivers/usb/dwc2/core.h     |    3 +++
>  drivers/usb/dwc2/hcd.c      |   11 +++++++++++
>  drivers/usb/dwc2/platform.c |    5 +++++
>  3 files changed, 19 insertions(+)
> 
> diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h
> index 1efd10c..8dfd16a 100644
> --- a/drivers/usb/dwc2/core.h
> +++ b/drivers/usb/dwc2/core.h
> @@ -42,6 +42,7 @@
>  #include <linux/usb/gadget.h>
>  #include <linux/usb/otg.h>
>  #include <linux/usb/phy.h>
> +#include <linux/reset.h>
>  #include "hw.h"
> 
>  #ifdef DWC2_LOG_WRITES
> @@ -596,6 +597,8 @@ struct dwc2_hsotg {
>       unsigned int queuing_high_bandwidth:1;
>       unsigned int srp_success:1;
> 
> +     struct reset_control *reset_control;
> +

Please also add a kerneldoc header for this to the comment block.

>       struct workqueue_struct *wq_otg;
>       struct work_struct wf_otg;
>       struct timer_list wkp_timer;
> diff --git a/drivers/usb/dwc2/hcd.c b/drivers/usb/dwc2/hcd.c
> index 4d918ed..ff2ca4b 100644
> --- a/drivers/usb/dwc2/hcd.c
> +++ b/drivers/usb/dwc2/hcd.c
> @@ -2764,6 +2764,14 @@ int dwc2_hcd_init(struct dwc2_hsotg *hsotg, int irq,
> 
>       dev_dbg(hsotg->dev, "DWC OTG HCD INIT\n");
> 
> +     /* bring the device out of reset */
> +     if (hsotg->reset_control) {
> +             int retval = reset_control_deassert(hsotg->reset_control);
> +
> +             if (retval)
> +                     return retval;
> +     }
> +
>       /* Detect config values from hardware */
>       retval = dwc2_get_hwparams(hsotg);
> 
> @@ -2973,6 +2981,9 @@ void dwc2_hcd_remove(struct dwc2_hsotg *hsotg)
>       dwc2_hcd_release(hsotg);
>       usb_put_hcd(hcd);
> 
> +     if (hsotg->reset_control)
> +             reset_control_assert(hsotg->reset_control);
> +
>  #ifdef CONFIG_USB_DWC2_TRACK_MISSED_SOFS
>       kfree(hsotg->last_frame_num_array);
>       kfree(hsotg->frame_num_array);
> diff --git a/drivers/usb/dwc2/platform.c b/drivers/usb/dwc2/platform.c
> index a10e7a3..6d74583 100644
> --- a/drivers/usb/dwc2/platform.c
> +++ b/drivers/usb/dwc2/platform.c
> @@ -120,6 +120,7 @@ static int dwc2_driver_probe(struct platform_device *dev)
>       const struct dwc2_core_params *params;
>       struct dwc2_core_params defparams;
>       struct dwc2_hsotg *hsotg;
> +     struct reset_control *reset_control;
>       struct resource *res;
>       int retval;
>       int irq;
> @@ -171,6 +172,10 @@ static int dwc2_driver_probe(struct platform_device *dev)
>       dev_dbg(&dev->dev, "mapped PA %08lx to VA %p\n",
>               (unsigned long)res->start, hsotg->regs);
> 
> +     reset_control = devm_reset_control_get(&dev->dev, NULL);
> +     if (!IS_ERR(reset_control))
> +             hsotg->reset_control = reset_control;
> +

I guess you also need a patch to the platform code / dt bindings, to
enable this? Or is it already there?

Also, please CC Felipe ([email protected]) on all dwc2 patches, since they
are now going through his tree.

-- 
Paul

--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to