Lines Matching refs:omap

155 static u32 dwc3_omap_read_utmi_ctrl(struct dwc3_omap *omap)  in dwc3_omap_read_utmi_ctrl()  argument
157 return dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_CTRL + in dwc3_omap_read_utmi_ctrl()
158 omap->utmi_otg_offset); in dwc3_omap_read_utmi_ctrl()
161 static void dwc3_omap_write_utmi_ctrl(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_utmi_ctrl() argument
163 dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_CTRL + in dwc3_omap_write_utmi_ctrl()
164 omap->utmi_otg_offset, value); in dwc3_omap_write_utmi_ctrl()
168 static u32 dwc3_omap_read_irq0_status(struct dwc3_omap *omap) in dwc3_omap_read_irq0_status() argument
170 return dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_0 - in dwc3_omap_read_irq0_status()
171 omap->irq0_offset); in dwc3_omap_read_irq0_status()
174 static void dwc3_omap_write_irq0_status(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irq0_status() argument
176 dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_0 - in dwc3_omap_write_irq0_status()
177 omap->irq0_offset, value); in dwc3_omap_write_irq0_status()
181 static u32 dwc3_omap_read_irqmisc_status(struct dwc3_omap *omap) in dwc3_omap_read_irqmisc_status() argument
183 return dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_MISC + in dwc3_omap_read_irqmisc_status()
184 omap->irqmisc_offset); in dwc3_omap_read_irqmisc_status()
187 static void dwc3_omap_write_irqmisc_status(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irqmisc_status() argument
189 dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_MISC + in dwc3_omap_write_irqmisc_status()
190 omap->irqmisc_offset, value); in dwc3_omap_write_irqmisc_status()
194 static void dwc3_omap_write_irqmisc_set(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irqmisc_set() argument
196 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_MISC + in dwc3_omap_write_irqmisc_set()
197 omap->irqmisc_offset, value); in dwc3_omap_write_irqmisc_set()
201 static void dwc3_omap_write_irq0_set(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irq0_set() argument
203 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_0 - in dwc3_omap_write_irq0_set()
204 omap->irq0_offset, value); in dwc3_omap_write_irq0_set()
207 static void dwc3_omap_write_irqmisc_clr(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irqmisc_clr() argument
209 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_CLR_MISC + in dwc3_omap_write_irqmisc_clr()
210 omap->irqmisc_offset, value); in dwc3_omap_write_irqmisc_clr()
213 static void dwc3_omap_write_irq0_clr(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irq0_clr() argument
215 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_CLR_0 - in dwc3_omap_write_irq0_clr()
216 omap->irq0_offset, value); in dwc3_omap_write_irq0_clr()
219 static void dwc3_omap_set_mailbox(struct dwc3_omap *omap, in dwc3_omap_set_mailbox() argument
227 if (omap->vbus_reg) { in dwc3_omap_set_mailbox()
228 ret = regulator_enable(omap->vbus_reg); in dwc3_omap_set_mailbox()
230 dev_err(omap->dev, "regulator enable failed\n"); in dwc3_omap_set_mailbox()
235 val = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_mailbox()
241 dwc3_omap_write_utmi_ctrl(omap, val); in dwc3_omap_set_mailbox()
245 val = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_mailbox()
251 dwc3_omap_write_utmi_ctrl(omap, val); in dwc3_omap_set_mailbox()
255 if (omap->vbus_reg) in dwc3_omap_set_mailbox()
256 regulator_disable(omap->vbus_reg); in dwc3_omap_set_mailbox()
259 val = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_mailbox()
265 dwc3_omap_write_utmi_ctrl(omap, val); in dwc3_omap_set_mailbox()
269 dev_WARN(omap->dev, "invalid state\n"); in dwc3_omap_set_mailbox()
275 struct dwc3_omap *omap = _omap; in dwc3_omap_interrupt() local
278 reg = dwc3_omap_read_irqmisc_status(omap); in dwc3_omap_interrupt()
281 omap->dma_status = false; in dwc3_omap_interrupt()
283 dwc3_omap_write_irqmisc_status(omap, reg); in dwc3_omap_interrupt()
285 reg = dwc3_omap_read_irq0_status(omap); in dwc3_omap_interrupt()
287 dwc3_omap_write_irq0_status(omap, reg); in dwc3_omap_interrupt()
292 static void dwc3_omap_enable_irqs(struct dwc3_omap *omap) in dwc3_omap_enable_irqs() argument
298 dwc3_omap_write_irq0_set(omap, reg); in dwc3_omap_enable_irqs()
310 dwc3_omap_write_irqmisc_set(omap, reg); in dwc3_omap_enable_irqs()
313 static void dwc3_omap_disable_irqs(struct dwc3_omap *omap) in dwc3_omap_disable_irqs() argument
319 dwc3_omap_write_irq0_clr(omap, reg); in dwc3_omap_disable_irqs()
331 dwc3_omap_write_irqmisc_clr(omap, reg); in dwc3_omap_disable_irqs()
339 struct dwc3_omap *omap = container_of(nb, struct dwc3_omap, id_nb); in dwc3_omap_id_notifier() local
342 dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND); in dwc3_omap_id_notifier()
344 dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_FLOAT); in dwc3_omap_id_notifier()
352 struct dwc3_omap *omap = container_of(nb, struct dwc3_omap, vbus_nb); in dwc3_omap_vbus_notifier() local
355 dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID); in dwc3_omap_vbus_notifier()
357 dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_OFF); in dwc3_omap_vbus_notifier()
362 static void dwc3_omap_map_offset(struct dwc3_omap *omap) in dwc3_omap_map_offset() argument
364 struct device_node *node = omap->dev->of_node; in dwc3_omap_map_offset()
375 omap->irq_eoi_offset = USBOTGSS_EOI_OFFSET; in dwc3_omap_map_offset()
376 omap->irq0_offset = USBOTGSS_IRQ0_OFFSET; in dwc3_omap_map_offset()
377 omap->irqmisc_offset = USBOTGSS_IRQMISC_OFFSET; in dwc3_omap_map_offset()
378 omap->utmi_otg_offset = USBOTGSS_UTMI_OTG_OFFSET; in dwc3_omap_map_offset()
379 omap->debug_offset = USBOTGSS_DEBUG_OFFSET; in dwc3_omap_map_offset()
383 static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap) in dwc3_omap_set_utmi_mode() argument
386 struct device_node *node = omap->dev->of_node; in dwc3_omap_set_utmi_mode()
389 reg = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_utmi_mode()
401 dev_WARN(omap->dev, "UNKNOWN utmi mode %d\n", utmi_mode); in dwc3_omap_set_utmi_mode()
404 dwc3_omap_write_utmi_ctrl(omap, reg); in dwc3_omap_set_utmi_mode()
407 static int dwc3_omap_extcon_register(struct dwc3_omap *omap) in dwc3_omap_extcon_register() argument
410 struct device_node *node = omap->dev->of_node; in dwc3_omap_extcon_register()
414 edev = extcon_get_edev_by_phandle(omap->dev, 0); in dwc3_omap_extcon_register()
416 dev_vdbg(omap->dev, "couldn't get extcon device\n"); in dwc3_omap_extcon_register()
420 omap->vbus_nb.notifier_call = dwc3_omap_vbus_notifier; in dwc3_omap_extcon_register()
422 &omap->vbus_nb); in dwc3_omap_extcon_register()
424 dev_vdbg(omap->dev, "failed to register notifier for USB\n"); in dwc3_omap_extcon_register()
426 omap->id_nb.notifier_call = dwc3_omap_id_notifier; in dwc3_omap_extcon_register()
428 &omap->id_nb); in dwc3_omap_extcon_register()
430 dev_vdbg(omap->dev, "failed to register notifier for USB-HOST\n"); in dwc3_omap_extcon_register()
433 dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID); in dwc3_omap_extcon_register()
435 dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND); in dwc3_omap_extcon_register()
437 omap->edev = edev; in dwc3_omap_extcon_register()
447 struct dwc3_omap *omap; in dwc3_omap_probe() local
464 omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL); in dwc3_omap_probe()
465 if (!omap) in dwc3_omap_probe()
468 platform_set_drvdata(pdev, omap); in dwc3_omap_probe()
489 omap->dev = dev; in dwc3_omap_probe()
490 omap->irq = irq; in dwc3_omap_probe()
491 omap->base = base; in dwc3_omap_probe()
492 omap->vbus_reg = vbus_reg; in dwc3_omap_probe()
502 dwc3_omap_map_offset(omap); in dwc3_omap_probe()
503 dwc3_omap_set_utmi_mode(omap); in dwc3_omap_probe()
506 reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG); in dwc3_omap_probe()
507 omap->dma_status = !!(reg & USBOTGSS_SYSCONFIG_DMADISABLE); in dwc3_omap_probe()
509 ret = devm_request_irq(dev, omap->irq, dwc3_omap_interrupt, 0, in dwc3_omap_probe()
510 "dwc3-omap", omap); in dwc3_omap_probe()
513 omap->irq, ret); in dwc3_omap_probe()
517 ret = dwc3_omap_extcon_register(omap); in dwc3_omap_probe()
527 dwc3_omap_enable_irqs(omap); in dwc3_omap_probe()
532 extcon_unregister_notifier(omap->edev, EXTCON_USB, &omap->vbus_nb); in dwc3_omap_probe()
533 extcon_unregister_notifier(omap->edev, EXTCON_USB_HOST, &omap->id_nb); in dwc3_omap_probe()
535 dwc3_omap_disable_irqs(omap); in dwc3_omap_probe()
548 struct dwc3_omap *omap = platform_get_drvdata(pdev); in dwc3_omap_remove() local
550 extcon_unregister_notifier(omap->edev, EXTCON_USB, &omap->vbus_nb); in dwc3_omap_remove()
551 extcon_unregister_notifier(omap->edev, EXTCON_USB_HOST, &omap->id_nb); in dwc3_omap_remove()
552 dwc3_omap_disable_irqs(omap); in dwc3_omap_remove()
553 of_platform_depopulate(omap->dev); in dwc3_omap_remove()
574 struct dwc3_omap *omap = dev_get_drvdata(dev); in dwc3_omap_suspend() local
576 omap->utmi_otg_ctrl = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_suspend()
577 dwc3_omap_disable_irqs(omap); in dwc3_omap_suspend()
584 struct dwc3_omap *omap = dev_get_drvdata(dev); in dwc3_omap_resume() local
586 dwc3_omap_write_utmi_ctrl(omap, omap->utmi_otg_ctrl); in dwc3_omap_resume()
587 dwc3_omap_enable_irqs(omap); in dwc3_omap_resume()