On 7/25/23 17:43, Eugen Hristev wrote:

[...]

+static int ohci_atmel_probe(struct udevice *dev)
+{
+       struct ohci_at91_priv *ohci_at91 = dev_get_priv(dev);
+       struct at91_usbh_data *pdata = dev_get_plat(dev);
+       struct ohci_regs *regs;
+       int ret;
+       u32 i;
+
+       regs = (struct ohci_regs *)dev_read_addr(dev);
+       if (IS_ERR(regs)) {
+               ret = PTR_ERR(regs);
+               goto fail;
+       }
+
+       pdata->ports = dev_read_u32_default(dev, "num-ports", 3);
+
+       at91_for_each_port(i, pdata->ports)
+               gpio_request_by_name(dev, "atmel,vbus-gpio", i,
+                                    &pdata->vbus_pin[i], GPIOD_IS_OUT |
+                                    GPIOD_IS_OUT_ACTIVE);
+
+       ret = clk_get_bulk(dev, &ohci_at91->clks);

If this fails, and ohci_at91->clks is not populated ...

+       if (ret)
+               goto fail;
+
+       ret = clk_enable_bulk(&ohci_at91->clks);
+       if (ret)
+               goto fail;
+
+       ret = at91_start_hc(dev);
+       if (ret)
+               goto fail;
+
+       return ohci_register(dev, regs);
+
+fail:
+       at91_for_each_port(i, pdata->ports)
+               if (dm_gpio_is_valid(&pdata->vbus_pin[i]))
+                       gpio_free(pdata->vbus_pin[i].offset);
+
+       clk_disable_bulk(&ohci_at91->clks);

... then this clk_disable_bulk() would likely misbehave, right ?

Reply via email to