1、/arch/arm/mach-omap2/board-am335xevm.c/lcdc_init(){得到LCD硬件参数struct da8xx_lcdc_platform_data} -> am33xx_register_lcdc() -> omap_device_build() -> omap_device_build_ss() -> platform_device_add_data(){pdev->dev.platform_data = d}
2、platform_device端注册过程:
omap_device_build_ss(){pdev = platform_device_alloc(pdev_name, pdev_id);} -> omap_device_register() -> platform_device_add()
3、platform_device设备名确定过程:
am33xx_register_lcdc(){char *dev_name = "da8xx_lcdc";} -> omap_device_build() -> omap_device_build_ss(){pdev = platform_device_alloc(pdev_name, pdev_id);}
4、通过设备名搜索找到设备驱动文件: drivers/video/da8xx-fb.c
5、board-am335xevm.c记录的屏的类型有:
.type = "TFC_S9700RTWV35TR_01B",
.type = "NHD-4.3-ATXI#-T-1",
da8xx-fb.c记录的屏的类型有:
.name = "Sharp_LCD035Q3DG01",
.name = "Sharp_LK043T1DG01",
.name = "TFC_S9700RTWV35TR_01B",
.name = "NHD-4.3-ATXI#-T-1",
6、配置驱动程序进入fb_probe()获取LCD硬件参数用于配置struct da8xx_lcdc_platform_data:
struct da8xx_lcdc_platform_data *fb_pdata = device->dev.platform_data;
7、匹配合适的屏,并输出屏的类型(通过dmesg查看匹配信息是否正确),否则退出驱动:
{
if (i == ARRAY_SIZE(known_lcd_panels)) {
dev_err(&device->dev, "GLCD: No valid panel found\n");
ret = -ENODEV;
goto err_pm_runtime_disable;
} else
dev_info(&device->dev, "GLCD: Found %s panel\n",
fb_pdata->type);
}
8、fb_probe()接下来复位LCD并配置硬件参数,最后申请fb_info注册framebuffer设备
9、硬件资源设置:
am33xx_register_lcdc(){oh = omap_hwmod_lookup(oh_name);} -> omap_device_build(...struct omap_hwmod *oh,...){struct omap_hwmod *ohs[] = { oh };} -> omap_device_build_ss(...struct omap_hwmod **ohs,...) -> omap_device_alloc(...struct omap_hwmod **ohs,...){od->hwmods = hwmods(来至于参数ohs);} -> omap_device_fill_resources(od, res){omap_hwmod_fill_resources(od->hwmods[i], res){填充 struct resource}} -> platform_device_add_resources(){pdev->resource = r;}
10、资源来源omap_hwmod:
omap_hwmod_lookup(oh_name) -> _lookup(name) -> 遍历链表omap_hwmod_list并返回struct omap_hwmod
11、被返回的返回struct omap_hwmod来至于:
MACHINE_START -> am33xx_init_early() -> am33xx_hwmod_init() -> omap_hwmod_register(){将am33xx_lcdc_hwmod添加到omap_hwmod_list链表当中}
static struct omap_hwmod am33xx_lcdc_hwmod = {
......
.slaves = am33xx_lcdc_slaves,//记录了物理起始地址
......
};
12、总结:两个数据结构共同决定LCD控制寄存器的配置参数:
static struct lcd_ctrl_config lcd_cfg = {
&disp_panel,
.ac_bias = 255,
.ac_bias_intrpt = 0,
.dma_burst_sz = 16,
.bpp = 32,
.fdd = 0x80,
.tft_alt_mode = 0,
.stn_565_mode = 0,
.mono_8bit_mode = 0,
.invert_line_clock = 1,
.invert_frm_clock = 1,
.sync_edge = 0,
.sync_ctrl = 1,
.raster_order = 0,
};
static struct da8xx_panel known_lcd_panels[] = {
[2] = {
.name = "TFC_S9700RTWV35TR_01B",
.width = 800,
.height = 480,
.hfp = 39,
.hbp = 39,
.hsw = 47,
.vfp = 13,
.vbp = 29,
.vsw = 2,
.pxl_clk = 30000000,
.invert_pxl_clk = 0,
},
}
TI am335x系列(am3352)LCD驱动修改移植相关推荐
- TI AM335x系列处理器的工业级主板-BCM335x开发板
BCM335x是英码科技(EMA)基于 TI AM335x系列处理器的工业级产品应用主板,主板采用核心板+底板架构,核心板HSOM335x采用沉金无铅六层板设计,底板采用沉金无铅四层板设计,均按工业级 ...
- TQ2440平台上LCD驱动的移植
参考: http://liu1227787871.blog.163.com/blog/static/205363197201242393031250/ http://blog.csdn.net/cum ...
- uboot中LCD驱动修改
1 综合篇 点我 2 uboot移植 点我 3 uboot lcd驱动 点我 4 kernel移植 点我 5 kernel lcd驱动 点我 6 摄像头驱动 点我 7 ubuntu base移植 点我 ...
- USB实现(1)-Ti AM335x系列CPU
本文参照了Ti AM335x的技术手册. AM335x处理器提供了两个USB2.0 模块.每个USB控制器都是围绕Mentor USB OTG控制器(musbmhdrc)和TI PHY构建的.每个US ...
- 含关键代码!基于TI Sitara系列AM3352/AM3354/AM3359的Linux常用开发案例分享
目 录 4. tl_can_echo案例 4.1 案例功能 4.2 操作说明 4.3 关键代码
- FreeBSD设备驱动管理介绍(BSP: Ti AM335x)
这段时间一直在忙FreeBSD驱动移植的项目,因此对FreeBSD做了一定的了解,鉴于网上对于FreeBSD的设备驱动资料较少,在这里给出本人对于FreeBSD驱动管理的理解心得(主要是USB驱动管理 ...
- Barebox for Tiny6410(LCD驱动移植)
一.目的 熟悉Barebox的Frame buffer框架.LCD驱动的移植和测试命令的编写. 二.主要内容 1.1 为Barebox移植基于Tiny6410的LCD驱动. 1.2 编写lcd命令测试 ...
- linux-2.6.32在mini2440开发板上移植 ---W35型LCD驱动移植
转载:http://blog.csdn.net/viewsky11/article/details/11846359 编者注:本移植主要步骤还是按照手册来,里面讲解了一些有用的基础知识.但书册上提供了 ...
- linux在开发板LCD上显,W35型LCD驱动移植 - linux-2.6.32在mini2440开发板上移植_Linux编程_Linux公社-Linux系统门户网站...
编者注:本移植主要步骤还是按照手册来,里面讲解了一些有用的基础知识.但书册上提供了集中屏幕的方案,我们这里主要就用一种,也就是开发板自带的W35型号.液晶驱动的源程序在src/drivers/vide ...
- 基于正点原子F103精英板和CubeIDE的Hal库LCD驱动移植(从零开始)
最近在学习王维波老师的<STM32Cube高效开发教程>,王老师移植的是普中科技的驱动,而我手动移植了一下正点原子的lcd驱动,看了网上的诸多教程,有的博客存在一些bug,于是乎手动整理了 ...
最新文章
- linux下IO口模拟I2C的一些总结
- Django中HttpResponse和JsonResponse的区别和用法
- python 冒泡排序_Python中的冒泡排序
- zShowBox (图片放大展示jquery版 兼容性好)
- 【转载】java读取.properties配置文件的几种方法
- 让程序结果在屏幕上暂停一段时间
- mysql 闪回_MySQL数据误删除的快速解决方法(MySQL闪回工具)
- 学习笔记2---基本设置
- 新手入门概览(一):机器学习
- 小程序php没执行完,解决微信小程序 app onLaunch异步请求,在没有请求执行完就加载首页了的问题...
- telnet直接登录POP3
- java学生选课系统_java实现学生选课系统
- 基于OpenCV 人工神经网络的喷码字符识别(C++)
- 内存映射技术(共享内存)
- 【图像去噪】基于自适应布谷鸟算法优化维纳滤波器实现多光谱图像去噪附matlab代码
- node封装一个图片拼接插件
- 解决ERROR: text file '***' contains disallowed UTF-8 whitespace character(s)
- 现如今社群乱象,社群玩法正解
- ubuntu16.04 运行SVO
- 互斥量、临界区、信号量、事件标志组和消息邮箱(转)
热门文章
- MCJE魔改材质包教程
- 14届数独-真题标准数独-Day 5-20220120
- 计算机一级ps怎么保存,2017年计算机等考一级PS辅导:PS图像格式详细解说
- 深圳绘制SVG地图数据
- PS学习笔记一:跟着李涛学PS第一讲——光和色的关系
- 史上最全最强SpringMVC详细示例 实战
- arduino GPS 经纬度解析(C语言)
- 内存颗粒位宽和容量_内存颗粒编号与内存品牌知识介绍
- 如何将STVP的option bytes的配置移植到另外的电脑
- mbedtls 探索