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
1
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實現