> > +           }
> > +
> > +           if (data->hsic_pad_regulator) {
> > +                   ret = regulator_enable(data->hsic_pad_regulator);
> > +                   if (ret) {
> > +                           dev_err(dev,
> > +                                   "Fail to enable HSIC pad regulator\n");
> 
> s/Fail/Failed
> 

Ok.

 
   
> >   struct imx_usbmisc {
> > @@ -353,6 +369,18 @@ static int usbmisc_imx6q_init(struct imx_usbmisc_data
> *data)
> >     writel(reg | MX6_BM_NON_BURST_SETTING,
> >                     usbmisc->base + data->index * 4);
> >
> > +   /* For HSIC controller */
> > +   if (data->hsic) {
> > +           reg = readl(usbmisc->base + data->index * 4);
> > +           writel(reg | MX6_BM_UTMI_ON_CLOCK,
> > +                   usbmisc->base + data->index * 4);
> > +           reg = readl(usbmisc->base + MX6_USB_HSIC_CTRL_OFFSET
> > +                   + (data->index - 2) * 4);
> > +           reg |= MX6_BM_HSIC_EN | MX6_BM_HSIC_CLK_ON;
> > +           writel(reg, usbmisc->base + MX6_USB_HSIC_CTRL_OFFSET
> > +                   + (data->index - 2) * 4);
> > +   }
> > +
> >     spin_unlock_irqrestore(&usbmisc->lock, flags);
> >
> >     usbmisc_imx6q_set_wakeup(data, false); @@ -360,6 +388,69 @@ static
> > int usbmisc_imx6q_init(struct imx_usbmisc_data *data)
> >     return 0;
> >   }
> >
> > +static int usbmisc_imx6_hsic_set_connect(struct imx_usbmisc_data
> > +*data) {
> > +   unsigned long flags;
> > +   u32 val, offset;
> > +   struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
> > +   int ret = 0;
> > +
> > +   spin_lock_irqsave(&usbmisc->lock, flags);
> > +   if (data->index == 2 || data->index == 3) {
> > +           offset = (data->index - 2) * 4;
> > +   } else if (data->index == 0) {
> > +           /*
> > +            * For SoCs like i.MX7D and later, each USB controller has
> > +            * its own non-core register region. For SoCs before i.MX7D,
> > +            * the first USB controller is non-HSIC controller.
> > +            */
> > +           offset = 0;
> > +   } else {
> > +           dev_err(data->dev, "index is error for usbmisc\n");
> > +           offset = 0;
> > +           ret = -EINVAL;
> > +   }
> 
> Maybe you could move the code above to a function
> usbmisc_imx6_hsic_get_reg_offset(struct imx_usbmisc_data *data), that returns
> the offset value...
> 

Ok, and I will change the comment for SoCs before imx7D, since for these SoCs, 
the first two
USB controllers are non-HSIC.

> > +
> > +   val = readl(usbmisc->base + MX6_USB_HSIC_CTRL_OFFSET + offset);
> > +   if (!(val & MX6_BM_HSIC_DEV_CONN))
> > +           writel(val | MX6_BM_HSIC_DEV_CONN,
> > +                   usbmisc->base + MX6_USB_HSIC_CTRL_OFFSET + offset);
> > +   spin_unlock_irqrestore(&usbmisc->lock, flags);
> > +
> > +   return ret;
> > +}
> > +
> > +static int usbmisc_imx6_hsic_set_clk(struct imx_usbmisc_data *data,
> > +bool on) {
> > +   unsigned long flags;
> > +   u32 val, offset;
> > +   struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev);
> > +   int ret = 0;
> > +
> > +   spin_lock_irqsave(&usbmisc->lock, flags);
> > +   if (data->index == 2 || data->index == 3) {
> > +           offset = (data->index - 2) * 4;
> > +   } else if (data->index == 0) {
> > +           offset = 0;
> > +   } else {
> > +           dev_err(data->dev, "index is error for usbmisc\n");
> > +           offset = 0;
> > +           ret = -EINVAL;
> > +   }
> 
> ...and use the proposed function usbmisc_imx6_hsic_get_reg_offset()
> here, too.
> 

Ok.

Thanks for all your comments.

Peter

Reply via email to