费了两天时间将Switch模块熟悉了下并编写了LINUX部分的驱动程序,现在记录下。。。
Switch模块就是LINUX的GPIO口输入监测框架,位于/drivers/switch目录下,默认有switch_class.c与switch_gpio.c两个文件。
switch_class.c作为一个class看看就明白了,switch_gpio.c中在我看来是一个例子,可以仿照该例子自己新建相应的IO口驱动,
我的板子上有四个IO口需要监测,开始我是建立四个相应IO口驱动,然后发现这样做有些重复繁琐的感觉,就决定做一个switch_gpios.c文件,
将几个IO口检测驱动集成到一个文件中,然后就开动吧,主要修改的部分其实就是probe函数部分
过程参考了按键驱动部分,将所有引脚gpio_switch_platform_data结构打包为一个数组传到platform_device的dev.platform_data中,
然后在probe函数中解析出来,申请内存,申请IO中断,默认的IO触发条件为低电平,我按照这样做的结果是当该引脚电平拉低后系统直接卡住了。。。
所以我改成了上升沿与下降沿触发,并添加了工作队列结构,而非直接触发,因为要滤波的么。。。
其他再就没什么要注意的了。。。

本文分享了作者使用两天时间熟悉Switch模块并编写LINUX驱动的经历。Switch模块是LINUX的GPIO口输入监测框架,作者通过创建switch_gpios.c文件,将多个IO口驱动集成在一个文件中。文中详细介绍了实现过程中遇到的问题及解决方案。
2734





