> On Monday, November 11, 2013 12:45 PM, Alexander Shiyan wrote: > >> Hi Alexander, > >> > >> On Sunday, November 10, 2013 03:18 PM, Alexander Shiyan wrote: > >>> This adds i.MX27 and i.MX31 as the next user of the usbmisc driver. > >>> > >>> Signed-off-by: Alexander Shiyan<shc_work@xxxxxxx> > >>> --- > >>> drivers/usb/chipidea/usbmisc_imx.c | 42 ++++++++++++++++++++++++++++++++++++++ > >>> 1 file changed, 42 insertions(+) > >>> > >>> diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c > > ... > >>> +static int usbmisc_imx27_init(struct imx_usbmisc_data *data) > >>> +{ > >>> + unsigned long flags; > >>> + u32 val; > >>> + > >>> + switch (data->index) { > >>> + case 0: > >>> + val = MX27_OTG_PM_BIT; > >>> + break; > >>> + case 1: > >>> + val = MX27_H1_PM_BIT; > >>> + break; > >>> + case 2: > >>> + val = MX27_H2_PM_BIT; > >>> + break; > >>> + default: > >>> + return -EINVAL; > >>> + }; > >>> + > >> > >> From my understanding this can not work, the usbmisc->base not point into the > >> usb control register (USB_CTRL). Reference manual 30.5.1.1 says > >> BASE + 0x600 > >> you must add the offset to the readl instruction. > > > > Why not work? > > usbotg: usb@10024000 > > usbh1: usb@10024200 > > usbh2: usb@10024400 > > usbmisc: usbmisc@10024600 > > So, offset to USB_CTRL should already be defined by DTS. > > in the usbmisc_imx_probe() the base pointer is loaded from > > res = platform_get_resource(pdev, IORESOURCE_MEM, 0); > data->base = devm_ioremap_resource(&pdev->dev, res); > > (and I did not see any of_ operations) Yes, and this is an address of usbmisc node, not otg. > usbmisc = data; > > base is set to 0x10024000 > > when I look around all other functions init functions did a offset calculation. Can you point me on this? For example, for i.MX5 CPUs we calculate only offset to PHY_CTRL_X register relative to basic offset 0x800, which is already defined in DTS. ... --- ��.n��������+%������w��{.n�����{���)��jg��������ݢj����G�������j:+v���w�m������w�������h�����٥