日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux gpio按键驱动程序,Linux GPIO Key 驱动的加载

發(fā)布時(shí)間:2024/8/23 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux gpio按键驱动程序,Linux GPIO Key 驱动的加载 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

gpio-keys是基于input子系統(tǒng)實(shí)現(xiàn)的一個(gè)通用的GPIO按鍵驅(qū)動,基于platform來實(shí)現(xiàn),位于drivers/input/keyboard/gpio_keys.c,這個(gè)文件是硬件無關(guān)的,而硬件有關(guān)的需要我們自己來注冊.進(jìn)入這個(gè)gpio_keys.c這個(gè)函數(shù),第一步就是初始化.

static int __init gpio_keys_init(void)

{

return platform_driver_register(&gpio_keys_device_driver);

}

然后加載這個(gè)結(jié)構(gòu)體:

static struct platform_driver gpio_keys_device_driver = {

.probe = gpio_keys_probe,

.remove = __devexit_p(gpio_keys_remove),

.driver = {

.name = "gpio-keys",

.owner = THIS_MODULE,

#ifdef CONFIG_PM

.pm = &gpio_keys_pm_ops,

#endif

}

};

進(jìn)入后會執(zhí)行probe函數(shù),進(jìn)行設(shè)備的probe.當(dāng)然只是注冊設(shè)備,沒什么必要看.還比如gpio_keys_isr就是去抖動檢測,這是上半部分函數(shù).

static irqreturn_t gpio_keys_isr(int irq, void *dev_id)

{

struct gpio_button_data *bdata = dev_id;

struct gpio_keys_button *button = bdata->button;

BUG_ON(irq != gpio_to_irq(button->gpio));

if (button->debounce_interval)

mod_timer(&bdata->timer,

jiffies + msecs_to_jiffies(button->debounce_interval));

else

schedule_work(&bdata->work);

return IRQ_HANDLED;

}

然后由定時(shí)器在超時(shí)時(shí)候,觸發(fā)的下半部分.

static void gpio_keys_work_func(struct work_struct *work)

{

struct gpio_button_data *bdata =

container_of(work, struct gpio_button_data, work);

gpio_keys_report_event(bdata);

}

既然gpio_keys這么簡單,那么看看我們?nèi)绾谓壎?在此之前,先打開相應(yīng)的頭文件.

#ifndef _GPIO_KEYS_H

#define _GPIO_KEYS_H

struct gpio_keys_button {

/* Configuration parameters */

int code; /* input event code (KEY_*, SW_*) */

int gpio;

int active_low;

char *desc;

int type; /* input event type (EV_KEY, EV_SW) */

int wakeup; /* configure the button as a wake-up source */

int debounce_interval; /* debounce ticks interval in msecs */

bool can_disable;

};

struct gpio_keys_platform_data {

struct gpio_keys_button *buttons;

int nbuttons;

unsigned int rep:1; /* enable input subsystem auto repeat */

};

#endif

其中g(shù)pio_keys_button就是我們要引用到板級相關(guān)文件的一個(gè)重要的結(jié)構(gòu)體,他的每個(gè)字段的意義,挑重點(diǎn)的說一說.

code字段,意思就是對應(yīng)Linux的按鍵事件,gpio要對應(yīng)gpio號,active_low是低電平有效,desc是功能描述,debounce_interval是消抖間隔.當(dāng)然這個(gè)gpio_keys_button最終要關(guān)聯(lián)到gpio_keys_platform_data里,其中nbuttons就是有的按鍵總數(shù).在板級文件中要聲明.比如做2個(gè)引腳,一個(gè)是F1,一個(gè)是F2的功能.

static struct gpio_keys_button mx28evk_buttons[] =

{

{

.gpio = MXS_PIN_TO_GPIO(MXS_PIN_ENCODE(2, 4)), /*K1 */

.code = KEY_F1,

.desc = "Button 1",

.active_low = 1,

},

{

.gpio = MXS_PIN_TO_GPIO(MXS_PIN_ENCODE(2, 6)), /*K2 */

.code = KEY_F2,

.desc = "Button 2",

.active_low = 1,

},

};

然后聲明一個(gè)組合起來的platform結(jié)構(gòu).

static struct gpio_keys_platform_data mx28evk_button_data =

{

.buttons = mx28evk_buttons,

.nbuttons = ARRAY_SIZE(mx28evk_button_data),

};

最后構(gòu)建device,因?yàn)樗谐跏蓟贾蛔R別device.

static struct platform_device mx28evk_button_device =

{

.name = "gpio-keys",

.id = -1,

.dev = {

.platform_data = &mx28evk_button_data,

}

};

最后只需要注冊設(shè)備,就可以順利使用了.

static struct platform_device *mx28evk_button_device_p[] __initdata = {

&mx28evk_button_device,

};

platform_add_devices(mx28evk_button_device_p,ARRAY_SIZE(mx28evk_button_device_p));

但是,GPIO的驅(qū)動有些BUG,下次再說.可能會導(dǎo)致加載失敗,只針對MX28平臺才錯(cuò)誤吧.關(guān)鍵加載如圖:

總結(jié)

以上是生活随笔為你收集整理的linux gpio按键驱动程序,Linux GPIO Key 驱动的加载的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 96精品在线 | 777中文字幕| 国产欧美在线 | 欧美高清videos高潮hd | 蜜臀99久久精品久久久久久软件 | 日韩视频精品一区 | 亚洲av片一区二区三区 | 91呦呦| 亚洲国产成人精品91久久久 | 蜜臀av性久久久久蜜臀aⅴ流畅 | 久久久久久欧美 | 国产成人精品aa毛片 | 自拍视频在线播放 | a天堂资源在线观看 | 国产51自产区| 激情文学88 | av色欲无码人妻中文字幕 | 最新色网站 | 成人av一区二区三区在线观看 | 欧美日韩午夜精品 | 粉嫩视频在线观看 | 欧美日韩亚洲精品一区二区 | 怡红院一区二区三区 | 欧美亚洲不卡 | 国产精品成人av久久 | 日韩xx视频 | 亚洲人成亚洲人成在线观看 | 黄色三级三级三级三级 | 欧美老熟妇一区二区 | 麻豆视频播放 | 午夜影院在线观看 | 91精品国产综合久久久密臀九色 | 丁香花免费高清完整在线播放 | 青青草精品在线 | 免费观看成人av | 熊猫av | 亚洲1级片| 欧美性插视频 | 久久亚洲精品国产精品黑人v | 欧美在线三区 | 欧美色炮 | 日本黄图 | 97爱爱爱 | 激情福利社 | 日韩美女激情视频 | 91精品免费在线 | 久久com | 美日韩免费 | 色视频免费看 | 伊人9999| 美女扒开腿让人桶爽 | 亚洲一区二区自偷自拍 | 亚洲 激情 小说 另类 欧美 | 毛片视频免费 | 激情小说激情视频 | 36d大奶 | 免费看av网| 2018自拍偷拍| 国产福利免费 | 欧美精品二区 | 欧美国产日韩在线 | 1级性生活片 | 美日韩av在线 | 激情狠狠 | 国产一区二区三区视频免费在线观看 | 日韩黄视频 | 欧美区一区二区 | 玩偶游戏在线观看免费 | 国产乱码精品一区二区三 | 四虎伊人 | 免费av在线网站 | 国产在线三区 | 福利网址在线观看 | 久久午夜精品视频 | 日韩在线播放中文字幕 | 永久av免费在线观看 | 国产区亚洲区 | 欧美三日本三级少妇三级99观看视频 | 热久久av| 国产精品自拍区 | 欧美做受xxxxxⅹ性视频 | 99爱国产 | 草莓巧克力香氛动漫的观看方法 | 香蕉av在线播放 | 日韩欧美在线免费 | 黄色片子视频 | 日韩欧美在线一区二区 | 最新最近中文字幕 | 亚洲国产中文字幕 | 外国一级片 | 黑森林福利视频导航 | jzzijzzij亚洲成熟少妇 | 日本无遮挡边做边爱边摸 | cao久久| 精品人妻无码一区二区三区蜜桃一 | 国产在线精品自拍 | 探花国产在线 | 亚洲色图自拍 | av福利网站 |