s3c2440触摸屏驱动
来源:互联网 发布:java入门课程 编辑:程序博客网 时间:2024/05/22 03:32
以下程序来自韦东山视频里讲解的驱动,我只是在其中添加了些注释
#include <linux/errno.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/slab.h>#include <linux/input.h>#include <linux/init.h>#include <linux/serio.h>#include <linux/delay.h>#include <linux/platform_device.h>#include <linux/clk.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/plat-s3c24xx/ts.h>#include <asm/arch/regs-adc.h>#include <asm/arch/regs-gpio.h>struct s3c_ts_regs {unsigned long adccon;unsigned long adctsc;unsigned long adcdly;unsigned long adcdat0;unsigned long adcdat1;unsigned long adcupdn;};static struct input_dev *s3c_ts_dev;static volatile struct s3c_ts_regs *s3c_ts_regs;static void enter_wait_pen_down_mode(void){s3c_ts_regs->adctsc = 0xd3;}static void enter_wait_pen_up_mode(void){s3c_ts_regs->adctsc = 0x1d3;}static irqreturn_t pen_down_up_irq(int irq, void *dev_id){if (s3c_ts_regs->adcdat0 & (1<<15)){printk("pen up\n");enter_wait_pen_down_mode();}else{printk("pen down\n");enter_wait_pen_up_mode();}return IRQ_HANDLED;}static int s3c_ts_init(void){struct clk* clk;/* 1. 分配一个input_dev结构体 */s3c_ts_dev = input_allocate_device();/* 2. 设置 *//* 2.1 能产生哪类事件 */set_bit(EV_KEY, s3c_ts_dev->evbit); //可产生按键类事件set_bit(EV_ABS, s3c_ts_dev->evbit); //可产生绝对位移类事件/* 2.2 能产生这类事件里的哪些事件 */ //可产生触摸事件set_bit(BTN_TOUCH, s3c_ts_dev->keybit); input_set_abs_params(s3c_ts_dev, ABS_X, 0, 0x3FF, 0, 0); input_set_abs_params(s3c_ts_dev, ABS_Y, 0, 0x3FF, 0, 0);input_set_abs_params(s3c_ts_dev, ABS_PRESSURE, 0, 1, 0, 0);/* 3. 注册 */input_register_device(s3c_ts_dev);/* 4. 硬件相关的操作 *//* 4.1 使能时钟(CLKCON[15]) */clk = clk_get(NULL, "adc");clk_enable(clk);/* 4.2 设置S3C2440的ADC/TS寄存器 */s3c_ts_regs = ioremap(0x58000000, sizeof(struct s3c_ts_regs));//这种写法很巧妙,先定义一个结构体s3c_ts_regs,然后定义一个结构体变量s3c_ts_regs,再地址映射,这样//当操作结构体变量s3c_ts_regs里的元素时就相当于操作以地址0x58000000开始,后面的寄存器。/* bit[14] : 1-A/D converter prescaler enable * bit[13:6]: A/D converter prescaler value, * 49, ADCCLK=PCLK/(49+1)=50MHz/(49+1)=1MHz * bit[0]: A/D conversion starts by enable. 先设为0 */s3c_ts_regs->adccon = (1<<14)|(49<<6);request_irq(IRQ_TC, pen_down_up_irq, IRQF_SAMPLE_RANDOM, "ts_pen", NULL);enter_wait_pen_down_mode();return 0;}static void s3c_ts_exit(void){free_irq(IRQ_TC, NULL);iounmap(s3c_ts_regs);input_unregister_device(s3c_ts_dev);input_free_device(s3c_ts_dev);}module_init(s3c_ts_init);module_exit(s3c_ts_exit);MODULE_LICENSE("GPL");
0 0
- s3c2440 linux 触摸屏驱动
- S3C2440触摸屏驱动
- S3C2440触摸屏驱动详解
- s3c2440触摸屏驱动
- S3C2440上touchscreen触摸屏驱动
- S3C2440上touchscreen触摸屏驱动 .
- S3C2440上touchscreen触摸屏驱动
- S3C2440电阻触摸屏驱动设计
- S3C2440驱动篇—触摸屏驱动分析
- S3C2440驱动篇—触摸屏驱动分析
- S3C2440驱动篇—触摸屏驱动分析
- S3C2440上触摸屏驱动实例开发讲解
- S3C2440上触摸屏驱动实例开发讲解
- S3C2440上触摸屏驱动实例开发
- S3C2440上触摸屏驱动实例开发讲解
- S3C2440上触摸屏驱动实例开发讲解
- arm9+linux s3c2440 触摸屏驱动移植
- 八 s3c2440 linux 触摸屏 驱动代分析
- 小白马手机卫士之进程管理
- 黑马程序员——面向对象的一些小概念知识总结
- 地图投影系列介绍(一)----地球空间模型
- ios中使用block回调或代理方式请求网络接口数据(包括网络缓存)
- 【DFS】 CSU 1513 Kick the ball!
- s3c2440触摸屏驱动
- Redis与Memcached的区别
- 上拉电阻和下拉电阻区别
- Mac OS X 中安装JDK 7
- git简易教程
- SDUT 周赛
- windows2003复习重点
- 地图投影系列介绍(二)----地理坐标系
- 多线程死锁实例