Re: [PATCH] usb: ehci-platform: add reset controller number in struct ehci_platform_priv

From: Alan Stern
Date: Mon Apr 25 2016 - 10:43:54 EST


On Sat, 23 Apr 2016, Jiancheng Xue wrote:

> Some generic-ehci compatible controllers have more than one reset signal
> lines, e.g., Synopsys DWC USB2.0 Host-AHB Controller has two resets bus_reset
> and roothub_reset. Two more resets are added in this patch in order for this
> kind of controller to use this driver directly.
>
> Signed-off-by: Jiancheng Xue <xuejiancheng@xxxxxxxxxxxxx>


> + for (rst = 0; rst < EHCI_MAX_RSTS; rst++) {
> + priv->rsts[rst] = of_reset_control_get_by_index(
> + dev->dev.of_node, rst);
> + if (IS_ERR(priv->rsts[rst])) {
> + err = PTR_ERR(priv->rsts[rst]);
> + if (err == -EPROBE_DEFER)
> + goto err_reset;
> + priv->rsts[rst] = NULL;
> + break;
> + }
> +
> + err = reset_control_deassert(priv->rsts[rst]);
> if (err)
> - goto err_put_clks;
> + goto err_reset;

If an error occurs here...

> }
>
> if (pdata->big_endian_desc)
> @@ -300,8 +305,10 @@ err_power:
> if (pdata->power_off)
> pdata->power_off(dev);
> err_reset:
> - if (priv->rst)
> - reset_control_assert(priv->rst);
> + while (--rst >= 0) {
> + reset_control_assert(priv->rsts[rst]);
> + reset_control_put(priv->rsts[rst]);
> + }

You won't call reset_control_put() for the offending reset line.

Alan Stern