您的位置:首页 > 运维架构 > Linux

lcd驱动移植的分析linux3.2内核,chipsee为例,液晶屏AT070TN92

2013-12-18 14:04 519 查看
Board-am335x.c的分析

1.添加了一行代码:

LCD控制器初始化,支持这个LCD屏,可以修改bpp,这里是16色



这就限定了bpp的取值只能是16,上面的第二行的16表示, //@@max_bpp

第三行的16表示, //@@min_bpp

还有下面的内容,对其中的参数进行一系列的设置:



2.接下来,涉及到上面的这个新的结构体的一条信息如下:




现在对于INNOLUX_TN92_pdata、还有LSA40AT9001_pdata为什么这样命名不清楚,大致猜测的是和类型相关,并且和另外一个da8xx-fb.c有关联。

3.接下来的是lcdc_init里面的对应添加的一些信息,如下:




4.接下来就分析这个lcdc_init函数是在哪里进行了调用,但是,查看代码就会发现,并没有直接的调用这个函数,首先做了如下的工作:




在一个static struct evm_dev_cfg 类型的结构体 evm_chipsee_som_dev_cfg[]里将lcdc_init 作为一个成员加载进去了,所以接下来的分析就是这个结构体在哪里被使用了,分析如下:




这个结构体 evm_chipsee_som_dev_cfg在一个名为 setup_chipsee_som的函数里被调用了,用的是一个_configure_device(CHIPSEE_SOM, evm_chipsee_som_dev_cfg , PROFILE_NONE)

所以还是要分析一下,这个名为 setup_chipsee_som的函数又是在哪里被调用了,分析如下:




*****************************************************************************************************************************************************************************************

这里也只是列出了这个函数的很小一部分,上面的那个名为 setup_chipsee_som的函数是在am335x_evm_setup这个函数中被调用的,从而又会有一个疑问,那这个am335x_evm_setup函数又是在什么地方被使用了,分析如下:




也是间接的使用方式,这个am335x_evm_setup函数被作为一个函数指针传递给一个结构体成员,这个结构体类型是 static struct at24_platform_data,该结构体名为 am335x_baseboard_eeprom_info,所以接下来就要知道,这个结构体在哪里使用了,怎么使用的,分析如下:




上面的那个名为am335x_baseboard_eeprom_info的结构体又是作为另外一个名为am335x_i2c0_boardinfo[]的结构体数组的元素,也是属于间接调用的情况,这个结构体数组的类型是 static struct i2c_board_info ,所以说接下来还是要对am335x_i2c0_boardinfo[]这个结构体数组的调用情况进行分析,如下:




am335x_i2c0_boardinfo[]这个结构体数组是在一个名为 am335x_evm_i2c_init的函数中进行的调用,用到的函数为 omap_register_i2c_bus(1, 100 , am335x_i2c0_boardinfo, ARRAY_SIZE(am335x_i2c0_boardinfo)),这个函数具体怎么实现先不去理会,下面还是分析一下,am335x_evm_i2c_init函数是在哪里被使用了,分析如下:




可以看出,是在am335x_evm_init函数里调用了am335x_evm_i2c_init这个函数,而同时,am335x_evm_init这个函数又恰好是这个board-am335x.c文件的核心函数,如下:




5.在这篇文档的下面的标志出现之前:

****************************************************************************************************************************************************************************************

的那一部分的分析,是可以修改并且进行添加的,至于后面的那些信息(当然是指在这之前并且在上面的标志之后的那一部分分析),我比较了一下chipsee的内核包还有官方包,里面的对应部分是一样的。只是做一下提示。

****************************************************************************************************************************************************************************************

6.下面的这一部分就是我根据上面的理解做出的一些修改:

首先找到am335x_evm_setup这个函数,里面的一小部分信息如下:




现在找到setup_beagleboneblack这个函数如下:




需要将beagleboneblack_dev_cfg这个结构体进行完善,主要是添加上只和LCD相关的那部分信息,这个还需要对比进行了解:




主要就是上面的那一部分用蓝色框标志出的一部分,对于lcdc_init的信息上面已经大致说明了一下, 因为要修改其中的一些东西,所以我就列一下:




而下面这个是chipsee的内核包里的那个:



我改成了BEAGLE_BONE_BLACK是因为在setup_beagleboneblack这个函数里,有一个函数_configure_device()的首项是这个,这个和chipsee的那个类似,而对于INNOLUX_TN92_pdata在之前已经改过,这个也没有多大的依赖关系,可以不用改了。

是关于另外一个涉及到LCD的函数,chipsee_backlight_init这个函数,分析如下:



大致就是将gpio3_17输出高电平,这样的话相当于是将LCD的背光电源使能,之所以是gpio3_17,主要还是因为原理图上的原因,如下:







所以,如果说用到LCD背光,则LED+需要有电压,因此,就要求输出控制信号,就要相应的对gpio口进行操作。

里面涉及到了一个chipsee_backlight_mux,下面就来看一下这个是什么含义:



是一个结构体数组,可以将这个结构体数组还有上面的那个函数,移植到开发包里,这一部分就算没了,因为没有太多的依赖关系,下面还是接着分析,剩下的那些和LCD相关的信息:




这个tsc_init是和触摸屏相关的东西,touch screen,里面涉及的那些信息,一一列举如下:






这一部分信息可以直接添加进去,然后修改一下对应的部分就可以了。

注意:这一部分虽然现在看起来没啥大事,但是,到后来编译内核的时候就出现了问题,提示说找不到am33xx_register_tsc这个函数,后来在网上搜索也是没有得到一个满意的答案,最后,对于这一部分的修改,稍微的做了一些变化,至于是不是这样去改,还要进一步测试才可以:




这个并没有动,还是上面的那个,接下来的就不大一样了:



接下来就分析类型为static struct mfd_tscadc_board 名为tscadc这个结构体在哪里被调用就可以了,如下:



所以,实际上调用的就是am33xx_register_mfd_tscadc()这个函数,而不是之前的那个am33xx_register_tsc那个函数,当然,这也仅仅是我自己的理解,现在就要看看mfd_tscadc_init在哪里被使用了,具体如下:



其实就是用这个mfd_tscadc_init替代了之前的那个tsc_init,至于这样做可不可以,目前还不清楚,这是对触摸屏的支持,相比之下,要多了一个adc的东西,反正,我理解的就是上面这些,然后这样改好之后,再重新进行编译就通过了,虽然也报了几个警告,但是,都是一些函数没有被使用的警告。

7.关于这个文件的操作大致就是上面这些了,这个文件是kernel/arch/arm/mach-omap2/board-am335x.c文件,主要就是这些介绍了,之后就可以保存一下,进行操作。

8.经过进一步的查证,发现,在这个文件里,都是platform_device_register()而不是platform_driver_register()函数,而在drivers/video/da8xx-fb.c里就有了对应的platform_driver_register()这个函数,这样,就大致清楚了这两个文件的关系了。

9.下面的内容是12.17日做的,是关于drivers/video/da8xx-fb.c和kernel/arch/arm/mach-omap2/board-am335x.c的关系,其实,整体来说就是这样,如果说lcd根本不显示,那么是后面的那个文件中初始化的时候没有加上液晶屏的初始化,如果初始化之后显示了,但是显示的不正确,就是对应的lcd控制器设置的有问题了,这时候就要考虑前面的那个文件,整体来讲就是这样了,后者不只是提供了lcd的背光支持,也有一部分的lcd控制器初始化的操作,这几点是参考了一些介绍,当然,具体是不是还需要实际的测试

10.下面就列出来参考的网站:

http://tuzhaoliang.blog.163.com/blog/static/210081126201210553252246/

http://blog.chinaunix.net/uid-28458801-id-3447011.html

/article/3506745.html

http://bbs.eeworld.com.cn/thread-354811-1-1.html

11.下面就是一些联系:






12.上面的仅仅是一些猜想,我也不大确定,现在我将这些添加进去的时候,编译没有出错,我可以尝试删掉da8xx-fb.c的那个结构体,看看是否有错,如果有,说明二者之间确实存在着这种依赖关系,(但是,这样做之后并不影响编译的结果,究竟是何原因,那二者之间的联系在哪里?)





13.上面的分析中少了关于触摸屏的信息,触摸屏也是涉及到另外一个文件,是drivers/input/touchscreen/ti_tsc.c或者是drivers/input/touchscreen/ti_tscadc.c,其中chipsee的是后面的那个,而官方包里的是前面的那个,里面少了一些设置的信息。

14.关于这一部分还有da8xx-fb.c的那一部分的分析,还是要进一步了解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: