Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9a4b5dab authored by Felipe Balbi's avatar Felipe Balbi
Browse files

usb: dwc3: omap: introduce enable/disable IRQ methods



they will be re-used on suspend/resume implementation.

Tested-by: default avatarVivek Gautam <gautam.vivek@samsung.com>
Signed-off-by: default avatarFelipe Balbi <balbi@ti.com>
parent 7415f17c
Loading
Loading
Loading
Loading
+32 −15
Original line number Original line Diff line number Diff line
@@ -250,6 +250,34 @@ static int dwc3_omap_remove_core(struct device *dev, void *c)
	return 0;
	return 0;
}
}


static void dwc3_omap_enable_irqs(struct dwc3_omap *omap)
{
	u32			reg;

	/* enable all IRQs */
	reg = USBOTGSS_IRQO_COREIRQ_ST;
	dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_0, reg);

	reg = (USBOTGSS_IRQ1_OEVT |
			USBOTGSS_IRQ1_DRVVBUS_RISE |
			USBOTGSS_IRQ1_CHRGVBUS_RISE |
			USBOTGSS_IRQ1_DISCHRGVBUS_RISE |
			USBOTGSS_IRQ1_IDPULLUP_RISE |
			USBOTGSS_IRQ1_DRVVBUS_FALL |
			USBOTGSS_IRQ1_CHRGVBUS_FALL |
			USBOTGSS_IRQ1_DISCHRGVBUS_FALL |
			USBOTGSS_IRQ1_IDPULLUP_FALL);

	dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_1, reg);
}

static void dwc3_omap_disable_irqs(struct dwc3_omap *omap)
{
	/* disable all IRQs */
	dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_1, 0x00);
	dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_0, 0x00);
}

static int dwc3_omap_probe(struct platform_device *pdev)
static int dwc3_omap_probe(struct platform_device *pdev)
{
{
	struct device_node	*node = pdev->dev.of_node;
	struct device_node	*node = pdev->dev.of_node;
@@ -355,21 +383,7 @@ static int dwc3_omap_probe(struct platform_device *pdev)
		return ret;
		return ret;
	}
	}


	/* enable all IRQs */
	dwc3_omap_enable_irqs(omap);
	reg = USBOTGSS_IRQO_COREIRQ_ST;
	dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_0, reg);

	reg = (USBOTGSS_IRQ1_OEVT |
			USBOTGSS_IRQ1_DRVVBUS_RISE |
			USBOTGSS_IRQ1_CHRGVBUS_RISE |
			USBOTGSS_IRQ1_DISCHRGVBUS_RISE |
			USBOTGSS_IRQ1_IDPULLUP_RISE |
			USBOTGSS_IRQ1_DRVVBUS_FALL |
			USBOTGSS_IRQ1_CHRGVBUS_FALL |
			USBOTGSS_IRQ1_DISCHRGVBUS_FALL |
			USBOTGSS_IRQ1_IDPULLUP_FALL);

	dwc3_omap_writel(omap->base, USBOTGSS_IRQENABLE_SET_1, reg);


	ret = of_platform_populate(node, NULL, NULL, dev);
	ret = of_platform_populate(node, NULL, NULL, dev);
	if (ret) {
	if (ret) {
@@ -382,6 +396,9 @@ static int dwc3_omap_probe(struct platform_device *pdev)


static int dwc3_omap_remove(struct platform_device *pdev)
static int dwc3_omap_remove(struct platform_device *pdev)
{
{
	struct dwc3_omap	*omap = platform_get_drvdata(pdev);

	dwc3_omap_disable_irqs(omap);
	pm_runtime_put_sync(&pdev->dev);
	pm_runtime_put_sync(&pdev->dev);
	pm_runtime_disable(&pdev->dev);
	pm_runtime_disable(&pdev->dev);
	device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);
	device_for_each_child(&pdev->dev, NULL, dwc3_omap_remove_core);