+
+ if (!control_usb->linestate_wakeup)
+ return 0;
+
+ /* Set otg0&1_linestate_filter time to 100us */
+ writel(UOC_HIWORD_UPDATE(0x0, 0xf, 6), RK_GRF_VIRT + 0x1a0);
+
+ /* Register otg0_linestate irq */
+ irq = platform_get_irq_byname(pdev, "otg0_linestate");
+ if (irq > 0) {
+ ret = request_irq(irq, otg0_linestate_irq_handler,
+ 0, "otg0_linestate", NULL);
+ if (ret < 0) {
+ dev_err(&pdev->dev, "request_irq %d failed!\n", irq);
+ } else {
+ /* Clear otg0_linestate irq */
+ writel(UOC_HIWORD_UPDATE(0x2, 0x3, 12),
+ RK_GRF_VIRT + RK3036_GRF_UOC0_CON5);
+ }
+ }
+
+ /* Register otg1_linestate irq */
+ irq = platform_get_irq_byname(pdev, "otg1_linestate");
+ if (irq > 0) {
+ ret = request_irq(irq, otg1_linestate_irq_handler,
+ 0, "otg1_linestate", NULL);
+ if (ret < 0) {
+ dev_err(&pdev->dev, "request_irq %d failed!\n", irq);
+ } else {
+ /* Clear otg1_linestate irq */
+ writel(UOC_HIWORD_UPDATE(0x2, 0x3, 14),
+ RK_GRF_VIRT + RK3036_GRF_UOC1_CON5);
+ }
+ }