Example #1
0
/***** 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;
}
Example #5
0
/********** 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;
}