[日期:2012-01-22] | 来源:Linux社区 作者:prettybxp http://www.linuxidc.com/Linux/2012-01/52087.htm | [字体:大 中 小] |
只是劫持了lcd的背光控制而已,有关一线触摸具体是怎么回事,请继续往下看
最近下载了个linux2.6.38的源码 ,对照的友善的内核从头做移植,想一步步剖析友善的移植过程
但到LCD这块卡了3天,一直不清楚怎么回事。lcd驱动明明移植好了,引导信息正常,可是lcd却没有显示,让人匪夷所思
LCD及触摸移植过程见 http://www.linuxidc.com/Linux/2012-01/52086.htm
一开始理所当然认为是背光的原因,事实上就是背光的原因,
不过一开始没有详细看友善驱动代码时,被友善误导了,
以为drivers/video/mini6410_backlight.c就是背光控制的驱动,实际上它是给使用普通触摸方案时使用的背光控制,使用一线触摸后,它根本不管用
呵呵,先来说说一线触摸到底是个什么东东吧
![](https://i-blog.csdnimg.cn/blog_migrate/9aa712ef2d45f334f0b69421250faf3a.jpeg)
这是友善触摸屏的接口,图中的GPE0 is used as OneWire也是误导人的
![](https://i-blog.csdnimg.cn/blog_migrate/09cda0cfd65dcb06819ea374fa44ee99.gif)
看这图
![](https://i-blog.csdnimg.cn/blog_migrate/1e3fc77547e96f811506cffe6b2b8f69.jpeg)
很明显GPE0是用来进行背光控制控制的,驱动drivers/video/mini6410_backlight.c中代码
unsigned long tmp;
tmp = readl(S3C64XX_GPEDAT);
tmp = (tmp & ~0x1) | (!!state);
writel(tmp, S3C64XX_GPEDAT);
也说明了这一点,只不过,使用一线触摸后,GPE0不在能够控制背光了,所有的触摸消息和128级背光都通过PWM1来控制了。
![](https://i-blog.csdnimg.cn/blog_migrate/aa7b0f75a5b33f3d4849a74a3bad355a.jpeg)
从LCD后面的电阻跳线可以看到连接R34-R37这几个电阻,说明使用了TouchOne的方式,也就是说从CPU引出的TSXM,TSYM,TSXP,TSYP都是悬空的
原来一线触摸的原理就是不使用S3C6410自带的触摸屏接口,不使用arm内部的AD转化,将触摸屏引出的4根线连到了自己的一个AD转化芯片上,
至于怎么处理我们不得而知了,然后再通过PWM1线把数据直接转给CPU,友善顺便通过PWM1线把背光也控制了,这就是他们宣传的128级背光控制的原理。
![](https://i-blog.csdnimg.cn/blog_migrate/3723e1e7db21470bb885925cc4cf260e.jpeg)
这就是那个单片机,背光和触摸屏都被它控制了,想更深了解一线触摸的朋友应该没有办法了,友善不会给出这颗单片机里的程序,实际上我也不太想看
![](https://i-blog.csdnimg.cn/blog_migrate/1430a1e4c713ff8a337970cd980072a3.gif)
友善的一线触摸驱动在drivers/input/touchscreen/mini6410_1wire_host.c中,它会生成两个设备节点
一个是背光控制/dev/backlight-1wire,另一个是触摸屏/dev/touchscreen-1wire,
友善的触摸屏驱动不是标准的输入设备驱动,应为它没有向输入子系统使用input_register_device,也不是使用input_report_abs来报告触摸屏事件,
所以设备节点不会出现/dev/input中,它按照混杂设备的方式自己处理的触摸屏事件
![](https://i-blog.csdnimg.cn/blog_migrate/ed173ee8d0dd8b7a6fb49a8b2fdbbd0d.gif)
![linux](https://i-blog.csdnimg.cn/blog_migrate/23f987522c5046c33c7069971df59c81.gif)