static irqreturn_t modem_reset_indication_irq(int irq, void *data) { if(GPIO_OEM_VALID(cbp_rst_ind_gpio )){ printk("%s %d oem_gpio_get_value(GPIO_VIATEL_MDM_RST_IND)=%d \n",__func__,__LINE__,oem_gpio_get_value(cbp_rst_ind_gpio)); if(oem_gpio_get_value(cbp_rst_ind_gpio)){ if(first_irq_flag == 1){ printk("%s %d first irq read rest_gpio is high,return. \n",__func__,__LINE__); return IRQ_HANDLED; } wake_lock_timeout(&vmdata->wlock, MDM_RST_LOCK_TIME * HZ); modem_notify_event(MDM_EVT_NOTIFY_RESET_ON); via_modem_state = MODEM_STATE_POWER; via_monitor_uevent_notify(MODEM_STATE_POWER); }else{ if(first_irq_flag == 1){ printk("%s %d set first_irq_flag=0. \n",__func__,__LINE__); first_irq_flag = 0; } modem_notify_event(MDM_EVT_NOTIFY_RESET_OFF); } } irq_set_irq_type(irq, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING); gpio_irq_cbp_rst_ind(); oem_gpio_irq_unmask(cbp_rst_ind_gpio); return IRQ_HANDLED; }
static irqreturn_t modem_reset_indication_irq(int irq, void *data) { printk("%s %d \n",__FUNCTION__,__LINE__); if(GPIO_OEM_VALID(GPIO_VIATEL_MDM_RST_IND)){ oem_gpio_set_irq_type(GPIO_VIATEL_MDM_RST_IND, IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING); if(oem_gpio_get_value(GPIO_VIATEL_MDM_RST_IND)){ printk("%s %d ON\n",__FUNCTION__,__LINE__); wake_lock_timeout(&vmdata->wlock, MDM_RST_LOCK_TIME * HZ); modem_notify_event(MDM_EVT_NOTIFY_RESET_ON); }else{ printk("%s %d OFF\n",__FUNCTION__,__LINE__); modem_notify_event(MDM_EVT_NOTIFY_RESET_OFF); } } gpio_irq_cbp_rst_ind(); oem_gpio_irq_unmask(GPIO_VIATEL_MDM_RST_IND); return IRQ_HANDLED; }