Lines Matching +full:otg +full:- +full:bvalid
1 // SPDX-License-Identifier: GPL-2.0+
72 /* For imx6dql, it is host-only controller, for later imx6, it is otg's */
109 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx25_init()
113 if (data->index > 1) in usbmisc_imx25_init()
114 return -EINVAL; in usbmisc_imx25_init()
116 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx25_init()
117 switch (data->index) { in usbmisc_imx25_init()
119 val = readl(usbmisc->base); in usbmisc_imx25_init()
123 writel(val, usbmisc->base); in usbmisc_imx25_init()
126 val = readl(usbmisc->base); in usbmisc_imx25_init()
132 writel(val, usbmisc->base); in usbmisc_imx25_init()
136 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx25_init()
143 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx25_post()
148 if (data->index > 2) in usbmisc_imx25_post()
149 return -EINVAL; in usbmisc_imx25_post()
151 if (data->index) in usbmisc_imx25_post()
154 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx25_post()
155 reg = usbmisc->base + MX25_USB_PHY_CTRL_OFFSET; in usbmisc_imx25_post()
158 if (data->evdo) in usbmisc_imx25_post()
164 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx25_post()
172 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx27_init()
176 switch (data->index) { in usbmisc_imx27_init()
187 return -EINVAL; in usbmisc_imx27_init()
190 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx27_init()
191 if (data->disable_oc) in usbmisc_imx27_init()
192 val = readl(usbmisc->base) | val; in usbmisc_imx27_init()
194 val = readl(usbmisc->base) & ~val; in usbmisc_imx27_init()
195 writel(val, usbmisc->base); in usbmisc_imx27_init()
196 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx27_init()
203 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx53_init()
208 if (data->index > 3) in usbmisc_imx53_init()
209 return -EINVAL; in usbmisc_imx53_init()
212 val = readl(usbmisc->base + MX53_USB_OTG_PHY_CTRL_1_OFFSET); in usbmisc_imx53_init()
215 writel(val, usbmisc->base + MX53_USB_OTG_PHY_CTRL_1_OFFSET); in usbmisc_imx53_init()
217 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx53_init()
219 switch (data->index) { in usbmisc_imx53_init()
221 if (data->disable_oc) { in usbmisc_imx53_init()
222 reg = usbmisc->base + MX53_USB_OTG_PHY_CTRL_0_OFFSET; in usbmisc_imx53_init()
228 if (data->disable_oc) { in usbmisc_imx53_init()
229 reg = usbmisc->base + MX53_USB_OTG_PHY_CTRL_0_OFFSET; in usbmisc_imx53_init()
235 if (data->ulpi) { in usbmisc_imx53_init()
236 /* set USBH2 into ULPI-mode. */ in usbmisc_imx53_init()
237 reg = usbmisc->base + MX53_USB_CTRL_1_OFFSET; in usbmisc_imx53_init()
244 reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET; in usbmisc_imx53_init()
250 reg = usbmisc->base + in usbmisc_imx53_init()
258 if (data->disable_oc) { in usbmisc_imx53_init()
259 reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET; in usbmisc_imx53_init()
265 if (data->ulpi) { in usbmisc_imx53_init()
266 /* set USBH3 into ULPI-mode. */ in usbmisc_imx53_init()
267 reg = usbmisc->base + MX53_USB_CTRL_1_OFFSET; in usbmisc_imx53_init()
274 reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET; in usbmisc_imx53_init()
281 reg = usbmisc->base + in usbmisc_imx53_init()
288 if (data->disable_oc) { in usbmisc_imx53_init()
289 reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET; in usbmisc_imx53_init()
296 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx53_init()
304 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx6q_set_wakeup()
311 if (data->index > 3) in usbmisc_imx6q_set_wakeup()
312 return -EINVAL; in usbmisc_imx6q_set_wakeup()
314 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx6q_set_wakeup()
315 val = readl(usbmisc->base + data->index * 4); in usbmisc_imx6q_set_wakeup()
320 pr_debug("wakeup int at ci_hdrc.%d\n", data->index); in usbmisc_imx6q_set_wakeup()
323 writel(val, usbmisc->base + data->index * 4); in usbmisc_imx6q_set_wakeup()
324 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx6q_set_wakeup()
331 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx6q_init()
335 if (data->index > 3) in usbmisc_imx6q_init()
336 return -EINVAL; in usbmisc_imx6q_init()
338 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx6q_init()
340 reg = readl(usbmisc->base + data->index * 4); in usbmisc_imx6q_init()
341 if (data->disable_oc) { in usbmisc_imx6q_init()
343 } else if (data->oc_polarity == 1) { in usbmisc_imx6q_init()
349 writel(reg, usbmisc->base + data->index * 4); in usbmisc_imx6q_init()
351 /* SoC non-burst setting */ in usbmisc_imx6q_init()
352 reg = readl(usbmisc->base + data->index * 4); in usbmisc_imx6q_init()
354 usbmisc->base + data->index * 4); in usbmisc_imx6q_init()
356 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx6q_init()
367 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx6sx_init()
372 if (data->index == 0 || data->index == 1) { in usbmisc_imx6sx_init()
373 reg = usbmisc->base + MX6_USB_OTG1_PHY_CTRL + data->index * 4; in usbmisc_imx6sx_init()
374 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx6sx_init()
375 /* Set vbus wakeup source as bvalid */ in usbmisc_imx6sx_init()
382 val = readl(usbmisc->base + data->index * 4); in usbmisc_imx6sx_init()
384 usbmisc->base + data->index * 4); in usbmisc_imx6sx_init()
385 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx6sx_init()
393 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_vf610_init()
400 if (data->index >= 1) in usbmisc_vf610_init()
401 return -EINVAL; in usbmisc_vf610_init()
403 if (data->disable_oc) { in usbmisc_vf610_init()
404 reg = readl(usbmisc->base); in usbmisc_vf610_init()
405 writel(reg | VF610_OVER_CUR_DIS, usbmisc->base); in usbmisc_vf610_init()
414 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx7d_set_wakeup()
420 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx7d_set_wakeup()
421 val = readl(usbmisc->base); in usbmisc_imx7d_set_wakeup()
423 writel(val | wakeup_setting, usbmisc->base); in usbmisc_imx7d_set_wakeup()
426 dev_dbg(data->dev, "wakeup int\n"); in usbmisc_imx7d_set_wakeup()
427 writel(val & ~wakeup_setting, usbmisc->base); in usbmisc_imx7d_set_wakeup()
429 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx7d_set_wakeup()
436 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in usbmisc_imx7d_init()
440 if (data->index >= 1) in usbmisc_imx7d_init()
441 return -EINVAL; in usbmisc_imx7d_init()
443 spin_lock_irqsave(&usbmisc->lock, flags); in usbmisc_imx7d_init()
444 reg = readl(usbmisc->base); in usbmisc_imx7d_init()
445 if (data->disable_oc) { in usbmisc_imx7d_init()
447 } else if (data->oc_polarity == 1) { in usbmisc_imx7d_init()
451 writel(reg, usbmisc->base); in usbmisc_imx7d_init()
453 reg = readl(usbmisc->base + MX7D_USBNC_USB_CTRL2); in usbmisc_imx7d_init()
456 usbmisc->base + MX7D_USBNC_USB_CTRL2); in usbmisc_imx7d_init()
457 spin_unlock_irqrestore(&usbmisc->lock, flags); in usbmisc_imx7d_init()
502 struct imx_usbmisc *usbmisc = dev_get_drvdata(data->dev); in is_imx53_usbmisc()
504 return usbmisc->ops == &imx53_usbmisc_ops; in is_imx53_usbmisc()
514 usbmisc = dev_get_drvdata(data->dev); in imx_usbmisc_init()
515 if (!usbmisc->ops->init) in imx_usbmisc_init()
517 return usbmisc->ops->init(data); in imx_usbmisc_init()
528 usbmisc = dev_get_drvdata(data->dev); in imx_usbmisc_init_post()
529 if (!usbmisc->ops->post) in imx_usbmisc_init_post()
531 return usbmisc->ops->post(data); in imx_usbmisc_init_post()
542 usbmisc = dev_get_drvdata(data->dev); in imx_usbmisc_set_wakeup()
543 if (!usbmisc->ops->set_wakeup) in imx_usbmisc_set_wakeup()
545 return usbmisc->ops->set_wakeup(data, enabled); in imx_usbmisc_set_wakeup()
551 .compatible = "fsl,imx25-usbmisc",
555 .compatible = "fsl,imx35-usbmisc",
559 .compatible = "fsl,imx27-usbmisc",
563 .compatible = "fsl,imx51-usbmisc",
567 .compatible = "fsl,imx53-usbmisc",
571 .compatible = "fsl,imx6q-usbmisc",
575 .compatible = "fsl,vf610-usbmisc",
579 .compatible = "fsl,imx6sx-usbmisc",
583 .compatible = "fsl,imx6ul-usbmisc",
587 .compatible = "fsl,imx7d-usbmisc",
600 of_id = of_match_device(usbmisc_imx_dt_ids, &pdev->dev); in usbmisc_imx_probe()
602 return -ENODEV; in usbmisc_imx_probe()
604 data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); in usbmisc_imx_probe()
606 return -ENOMEM; in usbmisc_imx_probe()
608 spin_lock_init(&data->lock); in usbmisc_imx_probe()
611 data->base = devm_ioremap_resource(&pdev->dev, res); in usbmisc_imx_probe()
612 if (IS_ERR(data->base)) in usbmisc_imx_probe()
613 return PTR_ERR(data->base); in usbmisc_imx_probe()
615 data->ops = (const struct usbmisc_ops *)of_id->data; in usbmisc_imx_probe()
637 MODULE_ALIAS("platform:usbmisc-imx");
639 MODULE_DESCRIPTION("driver for imx usb non-core registers");