gpio驱动分析 1

(本文所有内容全部在linux-2.6.36内核基础上进行)

学习SoC留下的习惯,从基本IO入手。如果自己动手写字符驱动就违背了linuxplatform device and driver 的精神,如果自己写我又没那水平,就从内核自带的gpio_keys驱动入手,了解输入子系统的应用。

 

Gpio输入子系统的初始化和注销是从platform_driver_register(&gpio_keys_device_driver)platform_driver_unregister(&gpio_keys_device_driver)实现的:

 

/drivers/input/keyboard/gpio_key.cline632-line643

 

static int __init gpio_keys_init(void)

{

       return platform_driver_register(&gpio_keys_device_driver);

}

 

static void __exit gpio_keys_exit(void)

{

       platform_driver_unregister(&gpio_keys_device_driver);

}

 

module_init(gpio_keys_init);

module_exit(gpio_keys_exit);

 

在看到正文之前再看看struct platform_driver的设定:

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

       }

};

 

从上面struct platform_driver可以看出来:

probe是从static int __devinit gpio_keys_probe(struct platform_device *pdev)函数开始的;

remove函数是从static int __devexit gpio_keys_remove(struct platform_device *pdev)函数开始的;

__devexit_p 的定义:#define __devexit_p(x) x  

 

下面进入正题, gpio_keys_probe函数

static int __devinit gpio_keys_probe(struct platform_device *pdev)

{

       struct gpio_keys_platform_data *pdata = pdev->dev.platform_data;

       struct gpio_keys_drvdata *ddata;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值