From 9e44a11a8cadff8c2929f89ccd1d4301516a7094 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=82=B1=E5=BB=BA=E6=96=8C?= Date: Sat, 22 Oct 2011 11:20:15 +0800 Subject: [PATCH] rk_headset: Add if headset have not hook key judge --- drivers/headset_observe/rk_headset.c | 82 +++++++++++++++------------- 1 file changed, 44 insertions(+), 38 deletions(-) diff --git a/drivers/headset_observe/rk_headset.c b/drivers/headset_observe/rk_headset.c index 64a3c495508b..ad99920e5e90 100755 --- a/drivers/headset_observe/rk_headset.c +++ b/drivers/headset_observe/rk_headset.c @@ -190,9 +190,11 @@ static void headsetobserve_work(struct work_struct *work) // enable_irq(headset_info->irq[HOOK]); headset_info->cur_headset_status = BIT_HEADSET; headset_change_irqtype(HEADSET,IRQF_TRIGGER_FALLING);// - del_timer(&headset_info->headset_timer);//Start the timer, wait for switch to the headphone channel - headset_info->headset_timer.expires = jiffies + 500; - add_timer(&headset_info->headset_timer); + if (pdata->Headset_gpio != NULL) { + del_timer(&headset_info->headset_timer);//Start the timer, wait for switch to the headphone channel + headset_info->headset_timer.expires = jiffies + 500; + add_timer(&headset_info->headset_timer); + } } else if(level == 0) {//out--Low level @@ -213,10 +215,11 @@ static void headsetobserve_work(struct work_struct *work) // DBG("---HEADSET_IN_LOW headset in LOW ---\n"); headset_info->cur_headset_status = BIT_HEADSET; headset_change_irqtype(HEADSET,IRQF_TRIGGER_RISING);// - enable_irq(headset_info->irq[HOOK]); - del_timer(&headset_info->headset_timer);//Start the timer, wait for switch to the headphone channel - headset_info->headset_timer.expires = jiffies + 500; - add_timer(&headset_info->headset_timer); + if (pdata->Headset_gpio != NULL) { + del_timer(&headset_info->headset_timer);//Start the timer, wait for switch to the headphone channel + headset_info->headset_timer.expires = jiffies + 500; + add_timer(&headset_info->headset_timer); + } } else if(level > 0) {//out--High level @@ -430,34 +433,38 @@ static int rockchip_headsetobserve_probe(struct platform_device *pdev) // headset->headset_timer.expires = jiffies + 1000; // add_timer(&headset->headset_timer); //------------------------------------------------------------------ - ret = gpio_request(pdata->Headset_gpio, NULL); - if (ret) - goto failed_free; - gpio_pull_updown(pdata->Headset_gpio, PullDisable); - gpio_direction_input(pdata->Headset_gpio); - headset->irq[HEADSET] = gpio_to_irq(pdata->Headset_gpio); - - if(pdata->headset_in_type == HEADSET_IN_HIGH) - headset->irq_type[HEADSET] = IRQF_TRIGGER_RISING; - else - headset->irq_type[HEADSET] = IRQF_TRIGGER_FALLING; - ret = request_irq(headset->irq[HEADSET], headset_interrupt, headset->irq_type[HEADSET], "headset_input", NULL); - if (ret) - goto failed_free; - enable_irq_wake(headset->irq[HEADSET]); + if (pdata->Headset_gpio != NULL) { + ret = gpio_request(pdata->Headset_gpio, NULL); + if (ret) + goto failed_free; + gpio_pull_updown(pdata->Headset_gpio, PullDisable); + gpio_direction_input(pdata->Headset_gpio); + headset->irq[HEADSET] = gpio_to_irq(pdata->Headset_gpio); + + if(pdata->headset_in_type == HEADSET_IN_HIGH) + headset->irq_type[HEADSET] = IRQF_TRIGGER_RISING; + else + headset->irq_type[HEADSET] = IRQF_TRIGGER_FALLING; + ret = request_irq(headset->irq[HEADSET], headset_interrupt, headset->irq_type[HEADSET], "headset_input", NULL); + if (ret) + goto failed_free; + enable_irq_wake(headset->irq[HEADSET]); + } //------------------------------------------------------------------ - ret = gpio_request(pdata->Hook_gpio , NULL); - if (ret) - goto failed_free; - gpio_pull_updown(pdata->Hook_gpio, PullDisable); - gpio_direction_input(pdata->Hook_gpio); - headset->irq[HOOK] = gpio_to_irq(pdata->Hook_gpio); - headset->irq_type[HOOK] = IRQF_TRIGGER_FALLING; + if (pdata->Hook_gpio != NULL) { + ret = gpio_request(pdata->Hook_gpio , NULL); + if (ret) + goto failed_free; + gpio_pull_updown(pdata->Hook_gpio, PullDisable); + gpio_direction_input(pdata->Hook_gpio); + headset->irq[HOOK] = gpio_to_irq(pdata->Hook_gpio); + headset->irq_type[HOOK] = IRQF_TRIGGER_FALLING; - ret = request_irq(headset->irq[HOOK], Hook_interrupt, headset->irq_type[HOOK] , "headset_hook", NULL); - if (ret) - goto failed_free; - disable_irq(headset->irq[HOOK]); + ret = request_irq(headset->irq[HOOK], Hook_interrupt, headset->irq_type[HOOK] , "headset_hook", NULL); + if (ret) + goto failed_free; + disable_irq(headset->irq[HOOK]); + } //------------------------------------------------------------------ // Create and register the input driver. headset->input_dev = input_allocate_device(); @@ -497,12 +504,11 @@ static int rockchip_headsetobserve_probe(struct platform_device *pdev) headset_info = headset; schedule_delayed_work(&headset->h_delayed_work[HEADSET], msecs_to_jiffies(500)); - #ifdef CONFIG_HAS_EARLYSUSPEND - hs_early_suspend.suspend = NULL; - hs_early_suspend.resume = headset_early_resume; - hs_early_suspend.level = ~0x0; - register_early_suspend(&hs_early_suspend); + hs_early_suspend.suspend = NULL; + hs_early_suspend.resume = headset_early_resume; + hs_early_suspend.level = ~0x0; + register_early_suspend(&hs_early_suspend); #endif return 0; -- 2.34.1