(若转载,请注明出处,若有错误请指正,谢谢)
(以下分析皆基于:itop4412精英板设备和代码资源)
(内核为:iTop4412_Kernel_3.0提供)

(看客需要一定的linux平台驱动基础,和lcd操作基础)
(针对lcd基本操作,我准备写一个lcd裸机编程来完善)

lcd的工作,在kernel 中有device 和driver两个描述,这也是必然。

一.先看device

在 palt-s5p/dev-fimd-s5p.c
定义了一个 struct platform_device s3c_device_fb 平台设备

#ifdef CONFIG_FB_S5P   // 选择开关
static struct resource s3cfb_resource[] = {[0] = {.start  = S5P_PA_FIMD0,  //资源地址.end    = S5P_PA_FIMD0 + SZ_32K - 1,.flags  = IORESOURCE_MEM,},[1] = {.start  = IRQ_FIMD0_VSYNC, //同步中断.end    = IRQ_FIMD0_VSYNC,.flags  = IORESOURCE_IRQ,},[2] = {.start  = IRQ_FIMD0_FIFO, //fifo中断.end    = IRQ_FIMD0_FIFO,.flags  = IORESOURCE_IRQ,},
};static u64 fb_dma_mask = 0xffffffffUL;  //dma 掩码struct platform_device s3c_device_fb = {  //fb设备定义和描述.name       = "s3cfb",  //设备名字
#if defined(CONFIG_ARCH_EXYNOS4).id     = 0,
#else.id     = -1,
#endif.num_resources  = ARRAY_SIZE(s3cfb_resource),//指定上面的资源.resource   = s3cfb_resource,.dev        = {.dma_mask       = &fb_dma_mask,.coherent_dma_mask  = 0xffffffffUL}
};这上面是device 和exynos 相关的lcd寄存器资源和中断,   除了这些还有一些其他的相关信息如下(所以该文件中还有如下:)
static struct s3c_platform_fb default_fb_data __initdata = {
#if defined(CONFIG_ARCH_EXYNOS4).hw_ver = 0x70,
#else.hw_ver = 0x62,
#endif.nr_wins    = 5,  //支持的窗口数
#if defined(CONFIG_FB_S5P_DEFAULT_WINDOW) .default_win    = CONFIG_FB_S5P_DEFAULT_WINDOW, //指定默认显示窗口
#else.default_win    = 0,
#endif.swap       = FB_SWAP_WORD | FB_SWAP_HWORD, //数据字交换
};

struct s3c_platform_fb default_fb_data 该结构体是是设备的 缺省初始化,当然你还可以指定
,靠的就是下面的这个函数

    void __init s3cfb_set_platdata(struct s3c_platform_fb *pd)
{struct s3c_platform_fb *npd;int i;if (!pd) //是判断使用缺省配置。 确定因素在boardtiao调用该函数时,是否添加此参数pd = &default_fb_data;npd = kmemdup(pd, sizeof(struct s3c_platform_fb), GFP_KERNEL);if (!npd)printk(KERN_ERR "%s: no memory for platform data\n", __func__);else {for (i = 0; i < npd->nr_wins; i++) //初始化每个窗口的idnpd->nr_buffers[i] = 1;#if defined(CONFIG_FB_S5P_NR_BUFFERS)npd->nr_buffers[npd->default_win] = CONFIG_FB_S5P_NR_BUFFERS;
#elsenpd->nr_buffers[npd->default_win] = 1;
#endif//下面这些函数都是在 driver 匹配后,在里面调用s3cfb_get_clk_name(npd->clk_name); //获取时钟npd->cfg_gpio = s3cfb_cfg_gpio; //获取引脚操作函数npd->backlight_on = s3cfb_backlight_on; //开背光npd->backlight_off = s3cfb_backlight_off; //关背光npd->lcd_on = s3cfb_lcd_on;  //使能lcd设备npd->lcd_off = s3cfb_lcd_off;//关闭lcd 设备npd->clk_on = s3cfb_clk_on; // 时钟开npd->clk_off = s3cfb_clk_off; 时钟关s3c_device_fb.dev.platform_data = npd;//把初始化的驱动相关信息放到dev的私有数据里面// 供驱动使用,在驱动中我们将看到如何调用的}
}
#endif
   针对上面的s3cfb_set_platdata:board文件中看到:是否确定参数,如下
是否需要添加取决于你的开关,我用的是普通屏,所以选择的是s3cfb_set_platdata(NULL)
#ifdef CONFIG_FB_S5P
#ifdef CONFIG_FB_S5P_LMS501KF03spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));s3cfb_set_platdata(&lms501kf03_data); //set_data
#elses3cfb_set_platdata(NULL);//set_data
#endif

来看看时钟:  s3cfb_get_clk_name(npd->clk_name); 是获得设备时钟name,该函数在
setuo-fb-s5pc.c 中函数原型如下:


void s3cfb_get_clk_name(char *clk_name)
{strcpy(clk_name, "sclk_fimd"); //可以看出所用的clk
}

而下面是对设备操作的初始化(都在setuo-fb-s5pc.c ,指定相关硬件 的操作):
  npd->cfg_gpio = s3cfb_cfg_gpio;
npd->backlight_on = s3cfb_backlight_on;
npd->backlight_off = s3cfb_backlight_off;
npd->lcd_on = s3cfb_lcd_on;
npd->lcd_off = s3cfb_lcd_off;
npd->clk_on = s3cfb_clk_on;
npd->clk_off = s3cfb_clk_off;
  在这里不做介绍,在驱动调用时,分析

-----总上,有了设备如何添加到内核中,board 文件中有这样一句:
static struct platform_device *smdk4x12_devices[] __initdata = {
。。。。。。。。
#ifdef CONFIG_FB_S5P
&s3c_device_fb
。。。。。。。。,
    有此可以看出。此项可以根据内核配置
         Device Drivers  --->  Graphics support  ---><*> Support for frame buffer devices  ---> <*>   S5P Framebuffer support

“`

好了设备device我们就分析完了。
总结了一下:
先定义了一个struct platform_device s3c_device_fb 结构体
然后指定了一下io和中断资源在static struct resource s3cfb_resource[] 中
之后定义了一个缺省配置 struct s3c_platform_fb default_fb_data ,而是否使用取决于
s3cfb_set_platdata(struct s3c_platform_fb *pd) 函数,该函数做了一下时钟 ,io,背光等操作集后,把这些操作都放在了s3c_device_fb.dev.platform_data = npd; 中供驱动匹配时调用

<接下来我们将要分析driver ,未完待续>

itop exynos4412 lcd驱动 详细分析 (一)相关推荐

  1. 七 linux LCD驱动代分析

    LCD驱动分析 原文地址: http://blog.csdn.net/woshidahuaidan2011/article/details/52054795 1.对LCD驱动添加设备信息 对lcd驱动 ...

  2. LCD驱动源码分析(s3cfb.c)

    1.驱动源码分析大致思路 (1)分析LCD驱动首先需要分析内核的帧缓冲子系统,因为LCD驱动就是按照帧缓冲子系统提供的注册接口来注册的: (2)内核帧缓冲子系统参考博客:<Linux 帧缓冲子系 ...

  3. Tiny4412 LCD驱动(DRM+设备树)

    0 前言 <Tiny4412 LCD驱动(DRM+无设备树)>所用linux-3.5.0没有使用设备树,和当前主流嵌入式Linux开发有一定的差距,实用性不大,因此我将内核升级到了最新稳定 ...

  4. 慢慢欣赏linux之串口驱动代码分析 - 基于powerpc 2.6.x版本

    串口驱动分两阶段初始化 第一阶段  串口驱动没有初始化前的准备工作,包括设备树的解析,platform设备注册 asmlinkage void __init start_kernel(void)    ...

  5. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析

    关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸机开发 -- IIC总线 ,下面回顾下 IIC 基础概念 一.IIC 基础概念 IIC(Inter-Integrated Ci ...

  6. Exynos4412 IIC总线驱动开发(一)—— IIC 基础概念及驱动架构分析 (iic驱动框架,i2c驱动框架)...

    转载于 : http://blog.csdn.net/zqixiao_09/article/details/50917655 关于Exynos4412 IIC 裸机开发请看 :Exynos4412 裸 ...

  7. Linux-2.6.38的LCD驱动分析(二)

    二.s3cfb_probe函数分析 2.1 驱动的入口点     摆在面前的第一个问题相信应该是,这个函数是从那里开始运行的.这里就应该从long long ago 开始了,打开linux-2.6.3 ...

  8. Linux-2.6.20的LCD驱动分析(二)

    .1 驱动的入口点 摆在面前的第一个问题相信应该是,这个函数是从那里开始运行的.这里就应该从long long ago 开始了,打开drivers/video/s3c2410fb.c文件,然后找到s3 ...

  9. linux2.6的LCD驱动分析

    原文出自http://www.cnblogs.com/armlinux/archive/2010/07/28/2396954.html 一.让LCD显示可爱的小企鹅 还是先说说环境吧,处理器为S3C2 ...

  10. Linux-2.6.20的LCD驱动分析

    一.让LCD显示可爱的小企鹅 还是先说说环境吧,处理器为S3C2410,linux的版本当然是2.6.20的.下面先说说怎样让LCD上显示出可爱的小企鹅.最直接的步骤如下(记住不要问为什么哈-_-,一 ...

最新文章

  1. python数据结构树和二叉树,python数据结构树和二叉树简介
  2. 72. Leetcode 99. 恢复二叉搜索树 (二叉搜索树-中序遍历类)
  3. body里写注释 postman_快速掌握Postman实现接口测试
  4. Oracle 中使用 fetch bulk collect into 批量效率的读取游标数据
  5. nodejs实践录:使用curl测试post请求
  6. C# 如何设置 richTextBoxr的边距
  7. ActionBarSherlock SlidingMenu整合,解决SlidingMenu example的getSupportActionBar()方法不能用问题...
  8. 【大数据搜索引擎】网络爬虫南华实验报告(2021年版)
  9. matlab平差实习报告,《测量平差》课程设计实习报告 五星文库
  10. Python Pandas库教程
  11. 计算机 大管家 说课稿,精选信息技术说课稿模板集锦九篇
  12. 苹果手机没声音了显示耳机模式_别再认为音质不好是耳机的问题,也有可能是你手机没打开这个模式...
  13. Mysql(多级分销)无限极数据库表设计方法
  14. “似乎不能再叫闵大荒了。”
  15. 男生哪个瞬间让你心疼?
  16. 坎坎坷坷的深度学习之路(二)-Hello world(1)
  17. 基于Zookeeper的ResourceManager-HA配置
  18. Tcp accept 10038错误
  19. PS室内植物素材合成教程分享骞
  20. 求csdn积分啊呜呜呜

热门文章

  1. CRichEdit编辑框限定输入字数DDV_MaxChars和LimitText的区别,VS2012的bug
  2. 阿里巴巴为什么能抗住双十一?看完这篇你就明白了!
  3. vue+element实现中英文切换
  4. 服务器维护取费标准,服务器代维取费方式
  5. IDataParameter[]的用法
  6. 维护斐波那契数列通项公式
  7. BZOJ 3894 文理分科 最小割
  8. linux 开放1701端口,linux – IPSEC / LT2P的哪些端口?
  9. pact java 测试_GitHub - cshruby/pact-parent: java中使用pact做契约测试的事例
  10. 图像I、B、P帧介绍