RE: [PATCH V2] USB: dwc2: add support for the reset_controller api

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



> From: linux-usb-owner@xxxxxxxxxxxxxxx [mailto:linux-usb-owner@xxxxxxxxxxxxxxx] 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 <blogic@xxxxxxxxxxx>
> ---
> 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 (balbi@xxxxxx) 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 majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux