本文主要是介绍读一款TP驱动,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
最近工作中遇到的,这里只做技术分析,不分享相关代码了。
Core.c
----lib
----chips
代码大概是三个部分。
先看看Core吧
还是标准的内核module流程。
late_initcall(xxx_ts_init);
// module_init(xxx_ts_init);
module_exit(xxx_ts_exit);MODULE_AUTHOR("XXX Driver Team");
MODULE_DESCRIPTION("XXX Touchscreen Driver");
MODULE_LICENSE("GPL v2");
这个TP是根据I2C来进行处理的。
#ifdef I2C_PORTstatic const struct i2c_device_id hyn_id_table[] = {{.name = HYN_DRIVER_NAME, .driver_data = 0,},{},};static struct i2c_driver xxx_ts_driver = {.probe = xxx_ts_probe,.remove = xxx_ts_remove,.driver = {.name = xxx_DRIVER_NAME,.owner = THIS_MODULE,.of_match_table = xxx_of_match_table,},.id_table = xxx_id_table,};
match是用来匹配设备树的,这里很重要的就是probe和remove两个函数。
probe比较复杂。
里面就是调用linux内核的I2C函数,比如i2c_check_functionality,然后开始poweron,这里主要是用pinctrl设置端口,然后regulator_set_voltage设置端口电压。
之后是根据设备树判断设备是否加载,之后开始处理中断。创建中断线程。
remove则相对比较简单。
待续。。。
这篇关于读一款TP驱动的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!