Re: usb: dwc2: gadget: Do not fail probe if there isn't a clock node

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

 



On Mon, Nov 24, 2014 at 10:49:57AM -0600, Dinh Nguyen wrote:
> +CC: Felipe Balbi
> 
> On 11/24/2014 04:48 AM, Dan Carpenter wrote:
> > On Mon, Nov 24, 2014 at 01:46:56PM +0300, Dan Carpenter wrote:
> >> Hello Dinh Nguyen,
> >>
> >> The patch 8d736d8a9c44: "usb: dwc2: gadget: Do not fail probe if
> >> there isn't a clock node" from Nov 11, 2014, leads to the following
> >> static checker warning:
> >>
> >> 	drivers/usb/dwc2/gadget.c:3436 dwc2_gadget_init()
> >> 	warn: passing zero to 'PTR_ERR'
> >>
> >> drivers/usb/dwc2/gadget.c
> >>   3432          hsotg->clk = devm_clk_get(dev, "otg");
> >>   3433          if (IS_ERR(hsotg->clk)) {
> >>   3434                  hsotg->clk = NULL;
> >>
> >> You need to preserve the error code.  NULL means zero means success.
> >>
> > 
> > Oh, wait.  You are returning success deliberately?  Just "return 0;"
> > in that case instead of obfuscating it this way.  But shouldn't we
> > continue with the rest of the function anyway?  This patch is confusing
> > to me.
> 
> Yes, I believe that we can remove the return, and that was Felipe's comment.

my comment was to se clk to NULL because clk API is safe against those.
Then we avoid adding tons of IS_ERR(clk) all over the driver. Returning
is definitely wrong.

> >>   3435                  dev_err(dev, "cannot get otg clock\n");
> > 
> > Do we need to print this error if it's a success path?
> > 
> 
> A perhaps a follow up patch to something like this?
> 
> 
> --- a/drivers/usb/dwc2/gadget.c
> +++ b/drivers/usb/dwc2/gadget.c
> @@ -3451,8 +3451,7 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg, int
> irq)
>         hsotg->clk = devm_clk_get(dev, "otg");
>         if (IS_ERR(hsotg->clk)) {
>                 hsotg->clk = NULL;
> -               dev_err(dev, "cannot get otg clock\n");
> -               return PTR_ERR(hsotg->clk);
> +               dev_dbg(dev, "cannot get otg clock\n");
>         }
> 
>         hsotg->gadget.max_speed = USB_SPEED_HIGH;
> @@ -3461,7 +3460,12 @@ int dwc2_gadget_init(struct dwc2_hsotg *hsotg,
> int irq)
> 
>         /* reset the system */
> 
> -       clk_prepare_enable(hsotg->clk);
> +       ret = clk_prepare_enable(hsotg->clk);
> +       if (ret) {
> +               dev_err(dev, "failed to enable otg clk\n");
> +               goto err_clk;
> +       }

makes sense to me.

-- 
balbi

Attachment: signature.asc
Description: Digital signature


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

  Powered by Linux