Android s3c2440 触摸屏驱动解析

需积分: 9 32 下载量 75 浏览量 更新于2024-10-13 收藏 46KB DOC 举报
"Android s3c2440 触摸屏驱动" 在Android系统中,针对基于s3c2440处理器的硬件平台,触摸屏驱动是关键组件,它负责将硬件产生的触摸事件转化为软件可理解的数据,进而传递给应用层。s3c2440触摸屏驱动设计主要涉及Linux内核的设备驱动模型,包括字符设备驱动和平台设备驱动。本文将深入探讨该驱动的工作机制、结构和主要函数。 驱动结构由以下几个关键部分组成: 1. **probe**:这是设备被探测到时调用的函数,用于初始化触摸屏驱动。在`__inits3c2410ts_probe`函数中,首先进行设备基地址的映射,接着获取并启动ADC(模拟数字转换器)时钟,然后配置相关寄存器(如ADCCON、ADCDLY、ADCTSC),初始化input设备结构,并申请中断。 2. **remove**:当设备被移除或系统关闭时,此函数被调用,用于释放资源,如注销input设备和关闭ADC时钟。 3. **resume**:系统从挂起状态恢复时,执行该函数,确保设备能够正常工作。 4. **suspend**:系统进入挂起状态前,调用此函数,通常用于保存设备状态和停止不必要的操作。 驱动的工作流程如下: - 当用户触摸屏幕时,触摸屏控制器会产生中断(ts中断)。 - ADC中断随后被触发,用于读取触摸位置的模拟信号,并将其转换为数字值。 - 这些坐标数据通过中断处理函数处理,并通过`report`函数发送到输入子系统。 - 输入子系统将这些事件包装成输入事件结构,并通过中断服务例程将它们传递给应用层。 在驱动程序中,没有定义传统的read或write函数,因为触摸屏的交互是基于中断的。中断处理函数是驱动的核心,负责解析硬件中断并报告触摸事件。 `probe`函数中的几个重要步骤包括: - 使用`ioremap`函数对S3C2440的触摸屏控制器的I/O空间进行映射,以便软件可以访问硬件寄存器。 - 获取ADC时钟源,使用`clk_get`和`clk_enable`,确保时钟开启以支持ADC转换。 - 初始化input设备,包括设置设备属性和事件类型,以及注册input设备。 - 设置中断处理函数,并通过`request_irq`请求中断资源。 Android s3c2440触摸屏驱动通过平台设备驱动模型与内核交互,利用中断机制来实时响应用户触摸,将硬件事件转化为软件可处理的输入事件,从而实现触摸屏的正常功能。