亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? aesop2440_buttons.c

?? QQ2440板子
?? C
字號(hào):
/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * Copyright (c) 2005 Arnaud Patard <arnaud.patard@rtp-net.org> * Samsung S3C2410 keyboard support * * Based on various pxa ipaq drivers. *  * ChangeLog * * 2005-07-24: Arnaud Patard <arnaud.patard@rtp-net.org> * 	- Added key repeat * * 2005-07-23: Arnaud Patard <arnaud.patard@rtp-net.org> * 	- Renamed all kbd occurences to something like buttons * 	- Added debounce (specially usefull for iPAQ power button) * * 2005-06-21: Arnaud Patard <arnaud.patard@rtp-net.org> *      - Initial version  2005.10.25: godori(www.aesop-embedded.org)  * */#include <linux/config.h>#include <linux/errno.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/slab.h>#include <linux/input.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/interrupt.h>#include <linux/device.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/arch/regs-gpio.h>/* For id.version */#define S3C2410BUTVERSION	0x0001#define DRV_NAME		"s3c2440-buttons"#define REPEAT_DELAY		HZ/10#ifdef DEBUG#    define dprintk(msg...) printk(KERN_DEBUG "s3c2410_buttons: " msg);#else#    define dprintk(msg...)#endifMODULE_AUTHOR("Arnaud Patard <arnaud.patard@rtp-net.org>");MODULE_DESCRIPTION("s3c2410 buttons driver");MODULE_LICENSE("GPL");struct s3c2410_button{    int             irq;    int             pin;    int             pin_setting;    int             keycode;    char           *name;    int             last_state;    struct timer_list timer;};#if 0 // This is for aESOP2440 button, from 2.4.20    #define IRQ_AESOP_BT0               IRQ_EINT0    #define IRQ_AESOP_BT1               IRQ_EINT1    #define IRQ_AESOP_BT2               IRQ_EINT2    #define IRQ_AESOP_BT3               IRQ_EINT3    #define IRQ_AESOP_BT4               IRQ_EINT4    #define IRQ_AESOP_BT5               IRQ_EINT5    #define IRQ_AESOP_BT6               IRQ_EINT6    #define IRQ_AESOP_BT7               IRQ_EINT7    #define IRQ_AESOP_BT8               IRQ_EINT12    #define IRQ_AESOP_BT9               IRQ_EINT13    #define IRQ_AESOP_BT10              IRQ_EINT14    #define IRQ_AESOP_BT11              IRQ_EINT15    /* button interrupt check structure: now used */BUTTON_TYPE     gpio_buttons[] = {    {IRQ_AESOP_BT0, GPIO_AESOP_BT0,   SCANCODE_ENTER  , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "Enter", keypad_handler},    {IRQ_AESOP_BT1, GPIO_AESOP_BT1,   SCANCODE_UP     , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "Up"   , keypad_handler},    {IRQ_AESOP_BT2, GPIO_AESOP_BT2,   SCANCODE_3      , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "3"    , keypad_handler},    {IRQ_AESOP_BT3, GPIO_AESOP_BT3,   SCANCODE_RIGHT  , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "Right", keypad_handler},    {IRQ_AESOP_BT4, GPIO_AESOP_BT4,   SCANCODE_2      , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "2"    , keypad_handler},    {IRQ_AESOP_BT5, GPIO_AESOP_BT5,   SCANCODE_SPACE  , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "Space", keypad_handler},    {IRQ_AESOP_BT6, GPIO_AESOP_BT6,   SCANCODE_1      , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "1"    , keypad_handler},    {IRQ_AESOP_BT7, GPIO_AESOP_BT7,   SCANCODE_DOWN   , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "Down" , keypad_handler},    {IRQ_AESOP_BT8, GPIO_AESOP_BT8,   SCANCODE_4      , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "4"    , keypad_handler},    {IRQ_AESOP_BT9, GPIO_AESOP_BT9,   SCANCODE_LEFT   , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "Left" , keypad_handler},    {IRQ_AESOP_BT10, GPIO_AESOP_BT10, SCANCODE_0      , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "0"    , keypad_handler},    {IRQ_AESOP_BT11, GPIO_AESOP_BT11, SCANCODE_5      , KEY_RELEASED, GPIO_FALLING_EDGE, GPIO_PULLUP_EN, "5"    , keypad_handler},        {END_OF_LIST, END_OF_LIST, 0, 0, 0, 0, NULL, NULL}};// This is for aESOP2440 button, from 2.4.20    #define GPIO_AESOP_BT0		GPIO_F0    #define GPIO_AESOP_BT1		GPIO_F1    #define GPIO_AESOP_BT2		GPIO_F2    #define GPIO_AESOP_BT3		GPIO_F3    #define GPIO_AESOP_BT4		GPIO_F4    #define GPIO_AESOP_BT5		GPIO_F5    #define GPIO_AESOP_BT6		GPIO_F6    #define GPIO_AESOP_BT7		GPIO_F7    #define GPIO_AESOP_BT8		GPIO_G4    #define GPIO_AESOP_BT9		GPIO_G5    #define GPIO_AESOP_BT10		GPIO_G6    #define GPIO_AESOP_BT11		GPIO_G7#endif/* To be moved later to a better place *//* ghcstop: key definition */static struct s3c2410_button s3c2410_buttons[] = {    {IRQ_EINT0 , S3C2410_GPF0, S3C2410_GPF0_EINT0 , KEY_ENTER, "Enter", 0},    {IRQ_EINT1 , S3C2410_GPF1, S3C2410_GPF1_EINT1 , KEY_UP   , "Up", 0},    {IRQ_EINT2 , S3C2410_GPF2, S3C2410_GPF2_EINT2 , KEY_3    , "3", 0},    {IRQ_EINT3 , S3C2410_GPF3, S3C2410_GPF3_EINT3 , KEY_RIGHT, "Right", 0},    {IRQ_EINT4 , S3C2410_GPF4, S3C2410_GPF4_EINT4 , KEY_2    , "2", 0}, /* TODO: find a better key :P */    {IRQ_EINT5 , S3C2410_GPF5, S3C2410_GPF5_EINT5 , KEY_SPACE, "Space", 0},    {IRQ_EINT6 , S3C2410_GPF6, S3C2410_GPF6_EINT6 , KEY_1    , "1", 0},    {IRQ_EINT7 , S3C2410_GPF7, S3C2410_GPF7_EINT7 , KEY_DOWN , "Down", 0},    {IRQ_EINT12, S3C2410_GPG4, S3C2410_GPG4_EINT12, KEY_4    , "4", 0},    {IRQ_EINT13, S3C2410_GPG5, S3C2410_GPG5_EINT13, KEY_LEFT , "Left", 0},    {IRQ_EINT14, S3C2410_GPG6, S3C2410_GPG6_EINT14, KEY_0    , "0", 0},    {IRQ_EINT15, S3C2410_GPG7, S3C2410_GPG7_EINT15, KEY_5    , "5", 0},};struct s3c2410_buttons_private{    struct input_dev dev;    spinlock_t      lock;    int             count;    int             shift;    char            phys[32];};static struct s3c2410_buttons_private priv;static irqreturn_taesop2440but_keyevent(int irq, void *dev_id, struct pt_regs *regs){    struct s3c2410_button *button = (struct s3c2410_button *) dev_id;    int             down;    if (!button)        return IRQ_HANDLED;    down = !(s3c2410_gpio_getpin(button->pin));    /*     * the power button of the ipaq are tricky. They send 'released' events even when the button are already released. The work-around is to proceed only if the state changed.      */    if (button->last_state == down)        return IRQ_HANDLED;    button->last_state = down;    dprintk("%s button %s\n", button->name, down ? "pressed" : "released");    input_report_key(&priv.dev, button->keycode, down);    input_sync(&priv.dev);    if (down)        mod_timer(&button->timer, jiffies + REPEAT_DELAY);    return IRQ_HANDLED;}static voidaesop2440but_timer_callback(unsigned long data){    struct s3c2410_button *button = (struct s3c2410_button *) data;    int             down;    /*     * button撈 喘府?dāng)R low active撈骨肺 gpio俊 措茄 read藹籃 0撈促.     * 撈赤籍闌 !肺 秦具 down撈 1撈 等促.     *     * 溜, low老錠 down撈骨肺 ! 甫 秦拎具 竊.     */    down = !(s3c2410_gpio_getpin(button->pin));    if (down)    {        dprintk("Timer: %s button %s\n", button->name, down ? "pressed" : "released");        input_report_key(&priv.dev, button->keycode, down);        input_sync(&priv.dev);        mod_timer(&button->timer, jiffies + REPEAT_DELAY);    }}static int __initaesop2440but_probe(struct device *dev){    int             i;    /*     * Initialise input stuff      */    memset(&priv, 0, sizeof(struct s3c2410_buttons_private));    init_input_dev(&priv.dev);    priv.dev.evbit[0] = BIT(EV_KEY);    sprintf(priv.phys, "input/s3c2440_buttons0");    priv.dev.private = &priv;    priv.dev.name = DRV_NAME;    priv.dev.phys = priv.phys;    priv.dev.id.bustype = BUS_HOST;    priv.dev.id.vendor = 0xDEAD;    priv.dev.id.product = 0xBEEF;    priv.dev.id.version = S3C2410BUTVERSION;    for (i = 0; i < ARRAY_SIZE(s3c2410_buttons); i++)    {        set_bit(s3c2410_buttons[i].keycode, priv.dev.keybit);        s3c2410_gpio_cfgpin(s3c2410_buttons[i].pin, s3c2410_buttons[i].pin_setting);        request_irq(s3c2410_buttons[i].irq, aesop2440but_keyevent, SA_SAMPLE_RANDOM, s3c2410_buttons[i].name, &s3c2410_buttons[i]);        set_irq_type(s3c2410_buttons[i].irq, IRQT_BOTHEDGE);        init_timer(&s3c2410_buttons[i].timer);        s3c2410_buttons[i].timer.function = aesop2440but_timer_callback;        s3c2410_buttons[i].timer.data = (unsigned long) &s3c2410_buttons[i];    }    printk(KERN_INFO "%s successfully loaded\n", DRV_NAME);    /*     * All went ok, so register to the input system      */    input_register_device(&priv.dev);    return 0;}static intaesop2440but_remove(struct device *dev){    int             i;    for (i = 0; i < ARRAY_SIZE(s3c2410_buttons); i++)    {        disable_irq(s3c2410_buttons[i].irq);        free_irq(s3c2410_buttons[i].irq, &priv.dev);    }    input_unregister_device(&priv.dev);    return 0;}static struct device_driver aesop2440but_driver = {    .name = DRV_NAME,    .bus = &platform_bus_type,    .probe = aesop2440but_probe,    .remove = aesop2440but_remove,};int __initaesop2440but_init(void){    return driver_register(&aesop2440but_driver);}void __exitaesop2440but_exit(void){    driver_unregister(&aesop2440but_driver);}module_init(aesop2440but_init);module_exit(aesop2440but_exit);

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人aaa| 国产亚洲一区字幕| 久久久美女毛片| 一区二区高清免费观看影视大全| 喷白浆一区二区| 99久久综合国产精品| 精品嫩草影院久久| 奇米一区二区三区av| 欧美亚洲综合色| **网站欧美大片在线观看| 久久er精品视频| 欧美一级片在线观看| 亚洲福利视频一区| 欧美性videosxxxxx| 亚洲精品大片www| 91丝袜国产在线播放| 中文无字幕一区二区三区 | 国产91在线观看| 欧美大尺度电影在线| 日韩精品一二三区| 欧美欧美午夜aⅴ在线观看| 亚洲自拍与偷拍| 欧美在线小视频| 日韩美女啊v在线免费观看| aaa欧美色吧激情视频| 中文字幕成人av| 懂色av一区二区三区蜜臀| 国产欧美中文在线| 成人爽a毛片一区二区免费| 国产午夜精品一区二区三区视频| 国产制服丝袜一区| 国产亚洲婷婷免费| 成人av在线网站| 国产精品福利一区二区| 一本久久精品一区二区| 尤物视频一区二区| 欧美年轻男男videosbes| 丝袜美腿亚洲色图| 日韩欧美的一区二区| 国精产品一区一区三区mba桃花| 欧美成人官网二区| 国产成人一级电影| av福利精品导航| 亚洲综合在线视频| 欧美色大人视频| 免费日本视频一区| 久久午夜电影网| 国产91综合网| 一区二区三区国产豹纹内裤在线| 欧美午夜一区二区三区免费大片| 婷婷开心久久网| 亚洲精品一区二区三区四区高清| 国产高清不卡二三区| 亚洲日韩欧美一区二区在线| 欧美私人免费视频| 精品一区二区在线看| 国产精品家庭影院| 欧美日韩的一区二区| 国产一区二区三区四| 综合精品久久久| 欧美一区二区视频在线观看2022| 国产激情91久久精品导航| 亚洲免费色视频| 日韩欧美成人激情| 99九九99九九九视频精品| 美日韩一级片在线观看| 最新国产成人在线观看| 日韩精品一区二| 在线观看欧美日本| 国产成人精品一区二区三区四区| 一二三区精品福利视频| 国产视频一区二区在线观看| 欧美日韩综合在线免费观看| 国产另类ts人妖一区二区| 亚洲一区二区精品3399| 国产丝袜欧美中文另类| 91精品国产欧美一区二区成人| 成人网页在线观看| 激情小说欧美图片| 亚洲一区二区成人在线观看| 国产欧美日韩三区| 日韩欧美国产精品一区| 欧美性感一区二区三区| 成人激情免费视频| 久久99最新地址| 亚洲成人免费观看| 亚洲品质自拍视频| 欧美激情一区二区三区不卡 | 亚洲成人福利片| 欧美高清在线精品一区| 日韩视频中午一区| 欧美亚洲综合在线| 91蜜桃在线观看| 国产成人免费视频网站| 久久99精品一区二区三区| 亚洲成人av福利| 一区二区三区在线高清| 国产精品视频免费| 久久久一区二区三区| 日韩精品一区二区三区老鸭窝| 欧美日韩日日骚| 在线视频你懂得一区二区三区| 成人激情免费视频| 成人中文字幕合集| 成人小视频免费观看| 高清beeg欧美| 高清日韩电视剧大全免费| 国产精品99久久久久| 国产麻豆精品久久一二三| 国产综合久久久久影院| 九色综合国产一区二区三区| 裸体健美xxxx欧美裸体表演| 亚洲 欧美综合在线网络| 亚洲国产精品天堂| 五月天亚洲精品| 日韩中文字幕区一区有砖一区 | 国产成人综合网站| 国产一区二区三区久久久| 韩国一区二区三区| 国产成人av电影在线观看| 成人精品免费网站| 91蜜桃免费观看视频| 91久久线看在观草草青青| 欧美在线短视频| 欧美一区二区三区在线| 精品剧情v国产在线观看在线| 欧美哺乳videos| 国产日本欧美一区二区| 亚洲视频在线一区二区| 亚洲国产日产av| 日产精品久久久久久久性色| 国产在线日韩欧美| 成人综合婷婷国产精品久久蜜臀| 成a人片国产精品| 色婷婷精品久久二区二区蜜臂av | 日韩成人一级大片| 极品美女销魂一区二区三区| 国产麻豆成人精品| 99久久精品国产麻豆演员表| 色综合久久久网| 欧美一区二区三区在线视频| 国产日韩欧美精品在线| 亚洲一区在线视频观看| 久久国产剧场电影| 99国产欧美另类久久久精品| 欧美精选一区二区| 久久嫩草精品久久久久| 亚洲精品免费一二三区| 精品一区二区在线视频| 色综合欧美在线视频区| 日韩欧美高清在线| 最新热久久免费视频| 日韩在线观看一区二区| 懂色av一区二区三区免费观看| 欧美日韩国产综合一区二区三区 | 日韩一级高清毛片| 国产女主播视频一区二区| 亚洲成人7777| 成人精品亚洲人成在线| 日韩欧美中文字幕一区| 自拍偷在线精品自拍偷无码专区| 日本大胆欧美人术艺术动态 | 一区二区三区四区中文字幕| 精品亚洲porn| 欧美日韩一区三区四区| 日本一区二区三区高清不卡| 五月综合激情网| 91在线观看视频| 国产午夜精品在线观看| 精品一区二区三区视频在线观看| 欧美性极品少妇| 一区二区三区日韩欧美| av一区二区三区| 久久久国际精品| 日本不卡一区二区| 91福利区一区二区三区| 国产欧美日韩精品a在线观看| 秋霞电影一区二区| 欧美系列亚洲系列| 一区二区免费在线播放| 成人黄色电影在线| 久久美女艺术照精彩视频福利播放| 亚洲国产一区视频| 91网站最新地址| 中文字幕一区二区三区四区不卡| 国产在线精品国自产拍免费| 欧美电影免费观看高清完整版| 亚洲国产精品视频| 欧美日本一区二区三区四区 | 色噜噜狠狠色综合中国| 亚洲欧洲日产国码二区| www.在线成人| 国产精品久久久久影院色老大| 国产激情视频一区二区三区欧美| 久久欧美中文字幕| 国产一区二区三区免费播放| 久久久久久综合| 国产精品99久久久久久久vr| 国产女人18水真多18精品一级做| 国产一区二三区好的|