TouchScreen驱动
背景
kernel version:4.14.98
drivers/input/touchscreen/atmel_mxt_ts.c
SoC与屏幕的touch ic通过I2C进行通信
代码分析
static struct i2c_driver mxt_driver = {.driver = {.name = "atmel_mxt_ts",.owner = THIS_MODULE,.of_match_table = of_match_ptr(mxt_of_match),.acpi_match_table = ACPI_PTR(mxt_acpi_id),.pm = &mxt_pm_ops,},.probe = mxt_probe,.remove = mxt_remove,.id_table = mxt_id,
};
//注册i2c driver
module_i2c_driver(mxt_driver);
因为是直接注册为i2c driver,没有init入口函数,所以直接看probe函数。
static int mxt_probe(struct i2c_client *client, const struct i2c_device_id *id)
{struct mxt_data *data;data = kzalloc(sizeof(struct mxt_data), GFP_KERNEL);snprintf(data->phys, sizeof(data->phys), "i2c-%u-%04x/input0",client->adapter->nr, client->addr);data->client = client;data->pdata = pdata;i2c_set_clientdata(client, data);、、、、、、error = mxt_acquire_irq(data);//申请中断
}static int mxt_acquire_irq(struct mxt_data *data)
{int error;if (!data->irq) {//申请中断error = request_threaded_irq(data->client->irq, NULL,mxt_interrupt,data->pdata->irqflags | IRQF_ONESHOT,data->client->name, data);return 0;
}static irqreturn_t mxt_interrupt(int irq, void *dev_id)
{//中断服务函数中读取并处理touch数据struct mxt_data *data = dev_id;if (data->T44_address) {return mxt_process_messages_t44(data); //-->} else {return mxt_process_messages(data);}
}static irqreturn_t mxt_process_messages_t44(struct mxt_data *data)
{/* Read T44 and T5 together *///通过I2C读取touch数据到data->msg_buf中ret = __mxt_read_reg(data->client, data->T44_address,data->T5_msg_size + 1, data->msg_buf);//从data->msg_buf中读取数据并处理ret = mxt_proc_message(data, data->msg_buf + 1);
}static int mxt_proc_message(struct mxt_data *data, u8 *message)
{mxt_proc_t100_message(data, message);
}
static void mxt_proc_t100_message(struct mxt_data *data, u8 *message)
{//从touch数据中解析出xy坐标值等信息,并上报至input core层x = get_unaligned_le16(&message[2]);y = get_unaligned_le16(&message[4]);if (data->t100_aux_area)major = message[data->t100_aux_area];if (data->t100_aux_ampl)pressure = message[data->t100_aux_ampl];if (data->t100_aux_vect)orientation = message[data->t100_aux_vect];if (active) {dev_dbg(dev, "[%u] type:%u x:%u y:%u a:%02X p:%02X v:%02X\n",id, type, x, y, major, pressure, orientation);//上报坐标值input_report_abs(input_dev, ABS_MT_POSITION_X, x);input_report_abs(input_dev, ABS_MT_POSITION_Y, y);input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, major);input_report_abs(input_dev, ABS_MT_PRESSURE, pressure);input_report_abs(input_dev, ABS_MT_DISTANCE, distance);input_report_abs(input_dev, ABS_MT_ORIENTATION, orientation);}
}
TouchScreen驱动相关推荐
- 2.6.36.2 s3c6410 触摸屏驱动移植。
CSDN_Acanoe 的博客:http://blog.csdn.net/ACanoe 硬件环境:OK6410 A板,4.3 寸TFT 屏. 移植内核:Linux2.6.36.2 . 参考内核: 飞 ...
- ESP32驱动3.2寸ILI9341显示屏+XPT2046触摸,GUIslice用户图形库
ESP32的主板ESPDUINO-32如下: 屏用如下的: 显示驱动用TFT_eSPI,这个显示的速度比adafruit ILI9341快10倍. 一.配置TFT_eSPI: arduino IDE ...
- linux驱动篇-touchscreen-完整版
Touchscreen 本篇文章为触摸屏驱动完整版本,为的是给时间充裕的同学详细讲解.如要时间有限可以看精简版,传送门在下面. https://blog.csdn.net/chichi123137/a ...
- Linux内核中关于定时器Timer的应用
2019独角兽企业重金招聘Python工程师标准>>> 在Touchscreen驱动中 1 声明 Ad7877.c (\linux-2.6.30.4\drivers\input\t ...
- printf 宏 调试技巧
1 前言 printf调试是嵌入式调试的基本手段,而且是非常重要的手段,我认为相比单步调试更加有用有效,特别是单片机之后跑系统,单步调试效率更加低下了,我们在工作遇到bug的时候,我们第一时间就想知道 ...
- 索骥馆-编程语言之《Android内核剖析》扫描版[PDF]
内容介绍: <android内核剖析>详细分析了android内核的内部机制,包括窗口管理系统.activity管理系统.输入法框架.编译系统等,为android内核定制及高级应用程序开发 ...
- IMX6 GT9XX 10.1寸触摸屏移植
硬件平台:IMX6Q+GT928(10.1寸) 操作系统:Android 4.2.2 GT928接口原理图 触摸屏接口用到的硬件外设 I2C => I2C3 RST => GPIO2_27 ...
- linux内核关闭触摸屏校准,触摸屏校正原理
1,触摸屏校准通用方法 主要采用以下公式,实现触摸屏校正,其中XL, YL是显示屏坐标,XT, YT是触摸屏坐标, XL = XT*A+YT*B+C; YL = XT*D+YT*E+F; 公式( ...
- linux timer 回调函数,Linux内核中关于定时器Timer的应用
在Touchscreen驱动中 1 声明 Ad7877.c (\linux-2.6.30.4\drivers\input\touchscreen):struct timer_listtimer;/* ...
最新文章
- Python安装库较慢问题,Python报错pip._vendor.urllib3.exceptions.ReadTimeoutError: HTTPSConnectionPool解决方法
- python绘制3维图-python——绘制二元高斯分布的三维图像,
- mongodb 群集图_群集和重叠条形图
- python面向对象中的私有属性和私有化方法
- GUI学习之〇——PyQt5安装
- Keil 安装 配置
- log4cxx vs2017编译
- 计算机配置ppt制作,做ppt.ps要用什么样的配置的手提电脑做
- 2018 年 5 月
- 假作真时真亦假,无为有处有还无
- 用EDA处理蛋白质数据小记
- PeckShield宣布与IOST达成全球战略合作
- 多伦多计算机科学排名,Times公布的计算机和工程专业排名,多伦多大学占两大榜首,最抢眼!...
- Ubuntu Linux 系统安装、分区规划
- 启动kafka无反应_kafka consumer无法正常启动原因调查
- python 实现热门音乐分析 附代码+数据 +论文
- LBR_iiwa_14_R820代码解析
- ESXI 7.02 Intel 核心显卡直通开启3D加速
- 使用 “恢复模式” 或 “DFU 模式” 来更新和恢复 iOS 固件
- 软件项目管理 6.2.功能点估算法