1. 程式人生 > >android 耳機插拔檢測(kernel)

android 耳機插拔檢測(kernel)

Android的耳機檢測其實程式碼改動很少的,也是因為少吧,所以一直沒寫文件。就這麼拖了將近兩個月。

 驅動程式有三個實現版本:

其一是

:drivers/char/micco_hsdetect.c

它通過

kobject_uevent

上報狀態給使用者空間。

其二是:

drivers/input/keyboard/micco_keys.c

它通過

input_report_switch

上報事件給使用者空間。

其三是:

drivers/switch/switch_micco.c

註冊了一個

switch_dev

,這個好像是

android

平臺專用的。

參考自:

http://blog.csdn.net/absurd/archive/2009/11/01/4754912.aspx 

我是用第三種方法做的。

一、在littleton.c中註冊platform_device

如下: 

#ifdef CONFIG_SWITCH_GPIO  

static structgpio_switch_platform_data headset_switch_data = 

.name = "h2w", 

.gpio = 127, 

 }; 

static structplatform_device headset_switch_device = 

 { 

.name = "switch-gpio", 

.dev = 

 { 

 .platform_data = &headset_switch_data, 

}; 

#endif 

littleton_init()中註冊platform_device ,包括增加的headset_switch_device。

其中gpio_switch_platform_data 的name可以隨意,但必須與上層的路徑相符,gpio

號為耳機檢測的中斷GPIO,這裡的127是指PXA310的GPIO127。platform_device 

的name為\drivers\switch\switch_gpio.c 中的 platform_driver的name

static struct platform_driver gpio_switch_driver =  

.probe= gpio_switch_probe, 

.remove = __devexit_p(gpio_switch_remove), 

.driver =

         { 

                   . name = "switch-gpio", 

                   .owner = THIS_MODULE,

         }, 

}; 

註冊成功後可以使用shell檢視開發板中/sys/class/switch目錄下多了一個資料夾h2w

H2w 的監控和訊息傳送有android中的headsetobserver.java實現