RE: [PATCH v2 2/4] usb: chipidea: imx: add HSIC support

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

 



 
> > +		}
> > +
> > +		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




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

  Powered by Linux