[PATCH v3 14/16] phy: Add an USB PHY driver for the Lantiq SoCs using the RCU module

Hauke Mehrtens hauke at hauke-m.de
Tue May 30 13:21:19 PDT 2017


On 05/30/2017 08:31 PM, Andy Shevchenko wrote:
> On Sun, May 28, 2017 at 9:40 PM, Hauke Mehrtens <hauke at hauke-m.de> wrote:
>> This driver starts the DWC2 core(s) built into the XWAY SoCs and provides
>> the PHY interfaces for each core. The phy instances can be passed to the
>> dwc2 driver, which already supports the generic phy interface.
> 
>> +static void ltq_rcu_usb2_start_cores(struct platform_device *pdev)
> 
> It should return int. See below.
> 
>> +{
> 
>> +       /* Power on the USB core. */
>> +       if (clk_prepare_enable(priv->ctrl_gate_clk)) {
> 
> You basically shadow the error, why?

Thanks for the hint I changed it.

>> +               dev_err(dev, "failed to enable CTRL gate\n");
>> +               return;
>> +       }
> 
>> +       if (clk_prepare_enable(priv->phy_gate_clk)) {
>> +               dev_err(dev, "failed to enable PHY gate\n");
>> +               return;
>> +       }
> 
> Ditto.

same here.

>> +static int ltq_rcu_usb2_of_probe(struct device_node *phynode,
>> +                                   struct ltq_rcu_usb2_priv *priv)
>> +{
>> +       struct device *dev = priv->dev;
>> +       const struct of_device_id *match =
>> +               of_match_node(ltq_rcu_usb2_phy_of_match, phynode);
>> +       int ret;
>> +
> 
>> +       if (!match) {
>> +               dev_err(dev, "Not a compatible Lantiq RCU USB PHY\n");
>> +               return -EINVAL;
>> +       }
> 
> Can it ever happen?

As long as this device gets probed by device tree this can not happen,
so I will remove it.

>> +
>> +       priv->reg_bits = match->data;
> 
> I think there is a helper to get driver data directly from node.

Thanks for the hint, there is of_device_get_match_data() which does this.

>> +       if (priv->reg_bits->have_ana_cfg) {
>> +               ret = device_property_read_u32(dev, "offset-ana",
>> +                                              &priv->ana_cfg1_reg_offset);
>> +               if (ret) {
>> +                       dev_dbg(dev, "Failed to get RCU ANA CFG1 reg offset\n");
>> +                       return ret;
>> +               }
>> +       }
> 
> ret = device_property_...(...);
> if (ret && priv->reg_bits->have_ana_cfg) {
>  ...
>  return ret;
> }
> 
> ?

Yes, that should look better, I will change it.

> 
> 
>> +       priv->dev = &pdev->dev;
> 
>> +       dev_set_drvdata(priv->dev, priv);
> 
> Move this to the end of function. Ideally it should be run if and only
> if the function returns 0.

Done

>> +       provider = devm_of_phy_provider_register(&pdev->dev,
>> +                                                of_phy_simple_xlate);
>> +
>> +       return PTR_ERR_OR_ZERO(provider);
> 
> I would do explicitly, though it's up to you and maintainer.
> 
> if (IS_ERR(provider))
>  return PTR_ERR();
> 
> return 0;

I do not care, but this was I can call dev_set_drvdata() when this is
really returning 0.

Hauke



More information about the linux-mtd mailing list