• LCD驱动分析(二)帧缓冲设备作为平台设备


    参考:S3C2440 LCD驱动(FrameBuffer)实例开发<一>

         S3C2440 LCD驱动(FrameBuffer)实例开发<二>

    1.平台设备注册

    1.1在linux/arch/arm/plat-samsung/dev-fb.c中定义平台设备。

     1 static struct resource s3c_fb_resource[] = {
     2     [0] = {
     3         .start = S3C_PA_FB,
     4         .end   = S3C_PA_FB + SZ_16K - 1,
     5         .flags = IORESOURCE_MEM,
     6     },
     7     [1] = {
     8         .start = IRQ_LCD_VSYNC,
     9         .end   = IRQ_LCD_VSYNC,
    10         .flags = IORESOURCE_IRQ,
    11     },
    12     [2] = {
    13         .start = IRQ_LCD_FIFO,
    14         .end   = IRQ_LCD_FIFO,
    15         .flags = IORESOURCE_IRQ,
    16     },
    17     [3] = {
    18         .start = IRQ_LCD_SYSTEM,
    19         .end   = IRQ_LCD_SYSTEM,
    20         .flags = IORESOURCE_IRQ,
    21     },
    22 };
    23 
    24 struct platform_device s3c_device_fb = {
    25     .name          = "s3c-fb",
    26     .id          = -1,
    27     .num_resources      = ARRAY_SIZE(s3c_fb_resource),
    28     .resource      = s3c_fb_resource,
    29     .dev.dma_mask      = &s3c_device_fb.dev.coherent_dma_mask,
    30     .dev.coherent_dma_mask = 0xffffffffUL,
    31 };

    1.2 linux/arch/arm/mach-s3c64xx/mach-smdk6410.c中定义的指针数组指向dev-fb.c中的平台设备并注册

    static struct platform_device *smdk6410_devices[] __initdata = {
    
      ......
    
      &s3c_device_fb,
    
      ......
    
    }

    static void __init smdk6410_machine_init(void)

      -->s3c_fb_set_platdata(&smdk6410_lcd_pdata);

      -->platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices));

        -->platform_device_register(&s3c_device_fb);

    2. 在drivers/video/samsung/s3cfb.c中注册平台驱动。

     1 static struct platform_driver s3cfb_driver = {
     2     .probe        = s3cfb_probe,
     3     .remove        = s3cfb_remove,
     4     .suspend    = s3cfb_suspend,
     5     .resume        = s3cfb_resume,
     6         .driver        = {
     7         .name    = "s3c-fb",
     8         .owner    = THIS_MODULE,
     9     },
    10 };
    11 
    12 int __devinit s3cfb_init(void)
    13 {
    14     return platform_driver_register(&s3cfb_driver);
    15 }

    3. 当平台设备与驱动匹配后,调用s3cfb_probe()函数,调用register_framebuffer()函数。

    static int __init s3cfb_probe(struct platform_device *pdev)

      -->register_framebuffer()//在/dev/目录下创建fb*设备节点

  • 相关阅读:
    14.3.3.2 Configuring the Rate of InnoDB Buffer Pool Flushing 配置 InnoDB Buffer Pool 刷新频率
    14.3.3 InnoDB Buffer Pool Configuration InnoDB Buffer Pool 配置:
    Perl 中的对象
    MyCat不支持的SQL语句
    第6章 模块
    Linux_RAID
    mysql limit
    svn 备份和恢复
    农商行信息化建设过程中存在哪些问题?
    14.2.6.4 Physical Structure of an InnoDB Index InnoDB Index 物理结构
  • 原文地址:https://www.cnblogs.com/yangjiguang/p/6080272.html
Copyright © 2020-2023  润新知