Lines Matching refs:omap

156 static u32 dwc3_omap_read_utmi_ctrl(struct dwc3_omap *omap)  in dwc3_omap_read_utmi_ctrl()  argument
158 return dwc3_omap_readl(omap->base, USBOTGSS_UTMI_OTG_CTRL + in dwc3_omap_read_utmi_ctrl()
159 omap->utmi_otg_offset); in dwc3_omap_read_utmi_ctrl()
162 static void dwc3_omap_write_utmi_ctrl(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_utmi_ctrl() argument
164 dwc3_omap_writel(omap->base, USBOTGSS_UTMI_OTG_CTRL + in dwc3_omap_write_utmi_ctrl()
165 omap->utmi_otg_offset, value); in dwc3_omap_write_utmi_ctrl()
169 static u32 dwc3_omap_read_irq0_status(struct dwc3_omap *omap) in dwc3_omap_read_irq0_status() argument
171 return dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_0 - in dwc3_omap_read_irq0_status()
172 omap->irq0_offset); in dwc3_omap_read_irq0_status()
175 static void dwc3_omap_write_irq0_status(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irq0_status() argument
177 dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_0 - in dwc3_omap_write_irq0_status()
178 omap->irq0_offset, value); in dwc3_omap_write_irq0_status()
182 static u32 dwc3_omap_read_irqmisc_status(struct dwc3_omap *omap) in dwc3_omap_read_irqmisc_status() argument
184 return dwc3_omap_readl(omap->base, USBOTGSS_IRQSTATUS_MISC + in dwc3_omap_read_irqmisc_status()
185 omap->irqmisc_offset); in dwc3_omap_read_irqmisc_status()
188 static void dwc3_omap_write_irqmisc_status(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irqmisc_status() argument
190 dwc3_omap_writel(omap->base, USBOTGSS_IRQSTATUS_MISC + in dwc3_omap_write_irqmisc_status()
191 omap->irqmisc_offset, value); in dwc3_omap_write_irqmisc_status()
195 static void dwc3_omap_write_irqmisc_set(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irqmisc_set() argument
197 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_MISC + in dwc3_omap_write_irqmisc_set()
198 omap->irqmisc_offset, value); in dwc3_omap_write_irqmisc_set()
202 static void dwc3_omap_write_irq0_set(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irq0_set() argument
204 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_0 - in dwc3_omap_write_irq0_set()
205 omap->irq0_offset, value); in dwc3_omap_write_irq0_set()
208 static void dwc3_omap_write_irqmisc_clr(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irqmisc_clr() argument
210 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_CLR_MISC + in dwc3_omap_write_irqmisc_clr()
211 omap->irqmisc_offset, value); in dwc3_omap_write_irqmisc_clr()
214 static void dwc3_omap_write_irq0_clr(struct dwc3_omap *omap, u32 value) in dwc3_omap_write_irq0_clr() argument
216 dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_CLR_0 - in dwc3_omap_write_irq0_clr()
217 omap->irq0_offset, value); in dwc3_omap_write_irq0_clr()
220 static void dwc3_omap_set_mailbox(struct dwc3_omap *omap, in dwc3_omap_set_mailbox() argument
228 dev_dbg(omap->dev, "ID GND\n"); in dwc3_omap_set_mailbox()
230 if (omap->vbus_reg) { in dwc3_omap_set_mailbox()
231 ret = regulator_enable(omap->vbus_reg); in dwc3_omap_set_mailbox()
233 dev_dbg(omap->dev, "regulator enable failed\n"); in dwc3_omap_set_mailbox()
238 val = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_mailbox()
244 dwc3_omap_write_utmi_ctrl(omap, val); in dwc3_omap_set_mailbox()
248 dev_dbg(omap->dev, "VBUS Connect\n"); in dwc3_omap_set_mailbox()
250 val = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_mailbox()
256 dwc3_omap_write_utmi_ctrl(omap, val); in dwc3_omap_set_mailbox()
260 if (omap->vbus_reg) in dwc3_omap_set_mailbox()
261 regulator_disable(omap->vbus_reg); in dwc3_omap_set_mailbox()
264 dev_dbg(omap->dev, "VBUS Disconnect\n"); in dwc3_omap_set_mailbox()
266 val = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_mailbox()
272 dwc3_omap_write_utmi_ctrl(omap, val); in dwc3_omap_set_mailbox()
276 dev_dbg(omap->dev, "invalid state\n"); in dwc3_omap_set_mailbox()
282 struct dwc3_omap *omap = _omap; in dwc3_omap_interrupt() local
285 reg = dwc3_omap_read_irqmisc_status(omap); in dwc3_omap_interrupt()
288 dev_dbg(omap->dev, "DMA Disable was Cleared\n"); in dwc3_omap_interrupt()
289 omap->dma_status = false; in dwc3_omap_interrupt()
293 dev_dbg(omap->dev, "OTG Event\n"); in dwc3_omap_interrupt()
296 dev_dbg(omap->dev, "DRVVBUS Rise\n"); in dwc3_omap_interrupt()
299 dev_dbg(omap->dev, "CHRGVBUS Rise\n"); in dwc3_omap_interrupt()
302 dev_dbg(omap->dev, "DISCHRGVBUS Rise\n"); in dwc3_omap_interrupt()
305 dev_dbg(omap->dev, "IDPULLUP Rise\n"); in dwc3_omap_interrupt()
308 dev_dbg(omap->dev, "DRVVBUS Fall\n"); in dwc3_omap_interrupt()
311 dev_dbg(omap->dev, "CHRGVBUS Fall\n"); in dwc3_omap_interrupt()
314 dev_dbg(omap->dev, "DISCHRGVBUS Fall\n"); in dwc3_omap_interrupt()
317 dev_dbg(omap->dev, "IDPULLUP Fall\n"); in dwc3_omap_interrupt()
319 dwc3_omap_write_irqmisc_status(omap, reg); in dwc3_omap_interrupt()
321 reg = dwc3_omap_read_irq0_status(omap); in dwc3_omap_interrupt()
323 dwc3_omap_write_irq0_status(omap, reg); in dwc3_omap_interrupt()
328 static void dwc3_omap_enable_irqs(struct dwc3_omap *omap) in dwc3_omap_enable_irqs() argument
334 dwc3_omap_write_irq0_set(omap, reg); in dwc3_omap_enable_irqs()
346 dwc3_omap_write_irqmisc_set(omap, reg); in dwc3_omap_enable_irqs()
349 static void dwc3_omap_disable_irqs(struct dwc3_omap *omap) in dwc3_omap_disable_irqs() argument
355 dwc3_omap_write_irq0_clr(omap, reg); in dwc3_omap_disable_irqs()
367 dwc3_omap_write_irqmisc_clr(omap, reg); in dwc3_omap_disable_irqs()
375 struct dwc3_omap *omap = container_of(nb, struct dwc3_omap, id_nb); in dwc3_omap_id_notifier() local
378 dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND); in dwc3_omap_id_notifier()
380 dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_FLOAT); in dwc3_omap_id_notifier()
388 struct dwc3_omap *omap = container_of(nb, struct dwc3_omap, vbus_nb); in dwc3_omap_vbus_notifier() local
391 dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID); in dwc3_omap_vbus_notifier()
393 dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_OFF); in dwc3_omap_vbus_notifier()
398 static void dwc3_omap_map_offset(struct dwc3_omap *omap) in dwc3_omap_map_offset() argument
400 struct device_node *node = omap->dev->of_node; in dwc3_omap_map_offset()
411 omap->irq_eoi_offset = USBOTGSS_EOI_OFFSET; in dwc3_omap_map_offset()
412 omap->irq0_offset = USBOTGSS_IRQ0_OFFSET; in dwc3_omap_map_offset()
413 omap->irqmisc_offset = USBOTGSS_IRQMISC_OFFSET; in dwc3_omap_map_offset()
414 omap->utmi_otg_offset = USBOTGSS_UTMI_OTG_OFFSET; in dwc3_omap_map_offset()
415 omap->debug_offset = USBOTGSS_DEBUG_OFFSET; in dwc3_omap_map_offset()
419 static void dwc3_omap_set_utmi_mode(struct dwc3_omap *omap) in dwc3_omap_set_utmi_mode() argument
422 struct device_node *node = omap->dev->of_node; in dwc3_omap_set_utmi_mode()
425 reg = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_set_utmi_mode()
437 dev_dbg(omap->dev, "UNKNOWN utmi mode %d\n", utmi_mode); in dwc3_omap_set_utmi_mode()
440 dwc3_omap_write_utmi_ctrl(omap, reg); in dwc3_omap_set_utmi_mode()
443 static int dwc3_omap_extcon_register(struct dwc3_omap *omap) in dwc3_omap_extcon_register() argument
446 struct device_node *node = omap->dev->of_node; in dwc3_omap_extcon_register()
450 edev = extcon_get_edev_by_phandle(omap->dev, 0); in dwc3_omap_extcon_register()
452 dev_vdbg(omap->dev, "couldn't get extcon device\n"); in dwc3_omap_extcon_register()
456 omap->vbus_nb.notifier_call = dwc3_omap_vbus_notifier; in dwc3_omap_extcon_register()
457 ret = extcon_register_interest(&omap->extcon_vbus_dev, in dwc3_omap_extcon_register()
459 &omap->vbus_nb); in dwc3_omap_extcon_register()
461 dev_vdbg(omap->dev, "failed to register notifier for USB\n"); in dwc3_omap_extcon_register()
463 omap->id_nb.notifier_call = dwc3_omap_id_notifier; in dwc3_omap_extcon_register()
464 ret = extcon_register_interest(&omap->extcon_id_dev, in dwc3_omap_extcon_register()
466 &omap->id_nb); in dwc3_omap_extcon_register()
468 dev_vdbg(omap->dev, "failed to register notifier for USB-HOST\n"); in dwc3_omap_extcon_register()
471 dwc3_omap_set_mailbox(omap, OMAP_DWC3_VBUS_VALID); in dwc3_omap_extcon_register()
473 dwc3_omap_set_mailbox(omap, OMAP_DWC3_ID_GROUND); in dwc3_omap_extcon_register()
483 struct dwc3_omap *omap; in dwc3_omap_probe() local
500 omap = devm_kzalloc(dev, sizeof(*omap), GFP_KERNEL); in dwc3_omap_probe()
501 if (!omap) in dwc3_omap_probe()
504 platform_set_drvdata(pdev, omap); in dwc3_omap_probe()
525 omap->dev = dev; in dwc3_omap_probe()
526 omap->irq = irq; in dwc3_omap_probe()
527 omap->base = base; in dwc3_omap_probe()
528 omap->vbus_reg = vbus_reg; in dwc3_omap_probe()
538 dwc3_omap_map_offset(omap); in dwc3_omap_probe()
539 dwc3_omap_set_utmi_mode(omap); in dwc3_omap_probe()
542 reg = dwc3_omap_readl(omap->base, USBOTGSS_SYSCONFIG); in dwc3_omap_probe()
543 omap->dma_status = !!(reg & USBOTGSS_SYSCONFIG_DMADISABLE); in dwc3_omap_probe()
545 ret = devm_request_irq(dev, omap->irq, dwc3_omap_interrupt, 0, in dwc3_omap_probe()
546 "dwc3-omap", omap); in dwc3_omap_probe()
549 omap->irq, ret); in dwc3_omap_probe()
553 dwc3_omap_enable_irqs(omap); in dwc3_omap_probe()
555 ret = dwc3_omap_extcon_register(omap); in dwc3_omap_probe()
568 if (omap->extcon_vbus_dev.edev) in dwc3_omap_probe()
569 extcon_unregister_interest(&omap->extcon_vbus_dev); in dwc3_omap_probe()
570 if (omap->extcon_id_dev.edev) in dwc3_omap_probe()
571 extcon_unregister_interest(&omap->extcon_id_dev); in dwc3_omap_probe()
574 dwc3_omap_disable_irqs(omap); in dwc3_omap_probe()
587 struct dwc3_omap *omap = platform_get_drvdata(pdev); in dwc3_omap_remove() local
589 if (omap->extcon_vbus_dev.edev) in dwc3_omap_remove()
590 extcon_unregister_interest(&omap->extcon_vbus_dev); in dwc3_omap_remove()
591 if (omap->extcon_id_dev.edev) in dwc3_omap_remove()
592 extcon_unregister_interest(&omap->extcon_id_dev); in dwc3_omap_remove()
593 dwc3_omap_disable_irqs(omap); in dwc3_omap_remove()
594 of_platform_depopulate(omap->dev); in dwc3_omap_remove()
615 struct dwc3_omap *omap = dev_get_drvdata(dev); in dwc3_omap_suspend() local
617 omap->utmi_otg_ctrl = dwc3_omap_read_utmi_ctrl(omap); in dwc3_omap_suspend()
618 dwc3_omap_disable_irqs(omap); in dwc3_omap_suspend()
625 struct dwc3_omap *omap = dev_get_drvdata(dev); in dwc3_omap_resume() local
627 dwc3_omap_write_utmi_ctrl(omap, omap->utmi_otg_ctrl); in dwc3_omap_resume()
628 dwc3_omap_enable_irqs(omap); in dwc3_omap_resume()