GPIO驱动是通过GPIOLIB通用架构实现。GPIOLIB是linux下统一管理gpio设备的架构接口,在linux的menuconfig下选择:
----GPIO Support
/SYS/CLASS/GPIO/...(SYSFS INTERFACE)
就可以进行GPIOLIB的统一管理。驱动代码源文件drivers\gpio\xilinx_gpiops.c。
gpiops.c首先注册初始化一个设备xgpiops:
static int__init xgpiops_init(void)
{
returnplatform_driver_register(&xgpiops_driver);
}
subsys_initcall(xgpiops_init);
然后在xgpiops_probe()函数里增加对gpio_chip结构添加,这个结构实际上也是一个抽象的GPIO控制器:
chip =&gpio->chip;
//标签
chip->label= "xgpiops";
//模块指针
chip->owner= THIS_MODULE;
//可选的设备结构
chip->dev= &pdev->dev;
//获取相应偏移脚的值
chip->get= xgpiops_get_value;
//设置相应偏移脚的输出值