framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)

以下内容源于朱有鹏《物联网大讲堂》课程的学习,如有侵权,请告知删除。

主要在填充fbdev这个结构体。

二、framebuffer驱动分析2

1、probe函数分析

framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)

(1)struct s3c_platform_fb

  • 这个结构体是fb的platform_data结构体;
  • 这个结构体变量就是platform设备的私有数据,这个数据在(结构体platform_device中的)(成员元素结构体device中)platform_data中存储。
  • 在mach-x210文件填充着这些数据;
  • 在probe函数中,通过传参的platform_device指针取出来。

(2)struct s3cfb_global

  • 这个结构体主要作用是在驱动部分的2个文件(s3cfb.c和s3cfb_fimd6x.c)的函数中做数据传递用的。

(3)struct resource

(4)regulator:整流器,负责供电管理。


2、platform_data的传递过程

(1)to_fb_plat

framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)

(2)platform_data定义在s3cfb_set_platdata函数中

  • 之前我们一般提前就已经定义好了(因为简单固定),不用再使用函数来设置。
  • 而这里因为lcd情况复杂,因此使用函数来设置。

framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)

(3)mdkc110_machine_init


framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)
framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)

三、framebuffer驱动分析3

1、struct s3cfb_lcd(fbdev->lcd = (struct s3cfb_lcd *)pdata->lcd;

  • pdata->lcd是lcd的一些硬件参数信息。
  • 换屏幕时,修改的就是这些参数。

2、pdata->cfg_gpio:初始化lcd用到的一些GPIO;

3、pdata->clk_on:打开lcd有关的时钟;

4、resource的处理

(1)platform_device中提供resource结构体数组

(2)probe中platform_get_resource取出resource并且按FLAG分头处理

framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)


四、framebuffer驱动分析4

1、硬件操作函数集合文件:s3cfb_fimd6x.c文件

(1)s3cfb_set_vsync_interrupt0

(2)s3cfb_set_global_interrupt

2、s3cfb_init_global

以上内容主要是填充fbdev这个结构体。

3、向框架注册该fb设备

(1)s3cfb_alloc_framebuffer

(2)s3cfb_register_framebuffer





五、framebuffer驱动分析5

1、一些硬件操作

(1)s3cfb_set_clock:设置像素时钟

(2)s3cfb_set_window

(3)s3cfb_display_on

2、驱动中处理中断

(1)platform_get_irq

(2)request_irq

3、logo显示

framebuffer驱动详解4——framebuffer驱动分析2(probe函数讲解)

  • s3cfb_probe
  •        fb_prepare_logo
  •              fb_find_logo真正查找logo文件
  •        fb_show_logo
  •              fb_show_logo_line真正显示logo
  •                     fb_do_show_logoinfo->fbops->fb_imageblit实际操作硬件fb进行显示工作的函数