/***** handler for otg id rise and fall edge *****/ static irqreturn_t id_irq_handler(int irq, void *dev_id) { unsigned int uoc_con; /* clear irq */ uoc_con = control_usb->grf_uoc0_base->CON4; if(uoc_con & (1<<5))//id rise { control_usb->grf_uoc0_base->CON4 = ((1<<5)|(1<<21)); //clear id rise irq pandding } if(uoc_con & (1<<7))//id fall { #ifdef CONFIG_RK_USB_UART /* usb otg dp/dm switch to usb phy */ dwc_otg_uart_mode(NULL, PHY_USB_MODE); #endif control_usb->grf_uoc0_base->CON4 = ((1<<7)|(1<<23));//clear id fall irq pandding } if(control_usb->usb_irq_wakeup){ wake_lock_timeout(&control_usb->usb_wakelock, WAKE_LOCK_TIMEOUT); schedule_delayed_work(&control_usb->usb_det_wakeup_work, HZ/10); } return IRQ_HANDLED; }
static irqreturn_t id_irq_handler(int irq, void *dev_id) { unsigned int uoc_con; /* clear irq */ uoc_con = readl_relaxed(RK319X_GRF_BASE + GRF_UOC0_CON3); if(uoc_con & (1<<11))//id rise { writel_relaxed(0x08000800, RK319X_GRF_BASE + GRF_UOC0_CON3);//clear id rise irq pandding } if(uoc_con & (1<<13))//id fall { #ifdef CONFIG_RK_USB_UART /* usb otg dp/dm switch to usb phy */ dwc_otg_uart_mode(NULL, PHY_USB_MODE); #endif writel_relaxed(0x20002000, RK319X_GRF_BASE + GRF_UOC0_CON3);//clear id fall irq pandding } schedule_delayed_work(&usb_det_wakeup_work, 0); return IRQ_HANDLED; }
static irqreturn_t bvalid_irq_handler(int irq, void *dev_id) { /* clear irq */ writel_relaxed((1 << 31) | (1 << 15), RK2928_GRF_BASE + GRF_UOC0_CON0); #ifdef CONFIG_RK_USB_UART /* usb otg dp/dm switch to usb phy */ dwc_otg_uart_mode(NULL, PHY_USB_MODE); #endif schedule_delayed_work(&usb_det_wakeup_work, HZ/10); return IRQ_HANDLED; }
static irqreturn_t bvalid_irq_handler(int irq, void *dev_id) { #ifdef CONFIG_RK_USB_UART /* usb otg dp/dm switch to usb phy */ dwc_otg_uart_mode(NULL, PHY_USB_MODE); #endif schedule_delayed_work(&usb_det_wakeup_work, 0); /* clear irq pending */ writel_relaxed(0x02000200, RK319X_GRF_BASE + GRF_UOC0_CON3); return IRQ_HANDLED; }
/********** handler for bvalid irq **********/ static irqreturn_t bvalid_irq_handler(int irq, void *dev_id) { /* clear irq */ control_usb->grf_uoc0_base->CON4 = (0x0008 | (0x0008 << 16)); #ifdef CONFIG_RK_USB_UART /* usb otg dp/dm switch to usb phy */ dwc_otg_uart_mode(NULL, PHY_USB_MODE); #endif if(control_usb->usb_irq_wakeup){ wake_lock_timeout(&control_usb->usb_wakelock, WAKE_LOCK_TIMEOUT); schedule_delayed_work(&control_usb->usb_det_wakeup_work, HZ/10); } rk_usb_charger_status = USB_BC_TYPE_SDP; schedule_delayed_work(&control_usb->usb_charger_det_work, HZ/10); return IRQ_HANDLED; }
/********** handler for bvalid irq **********/ static irqreturn_t bvalid_irq_handler(int irq, void *dev_id) { /* clear irq */ uoc_write(UOC_HIWORD_UPDATE(0x1, 0x1, 3), 0x6a0); #ifdef CONFIG_RK_USB_UART /* usb otg dp/dm switch to usb phy */ dwc_otg_uart_mode(NULL, PHY_USB_MODE); #endif if (control_usb->usb_irq_wakeup) { wake_lock_timeout(&control_usb->usb_wakelock, WAKE_LOCK_TIMEOUT); schedule_delayed_work(&control_usb->usb_det_wakeup_work, HZ / 10); } schedule_delayed_work(&control_usb->usb_charger_det_work, HZ / 10); return IRQ_HANDLED; }