zoukankan      html  css  js  c++  java
  • 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*设备节点

  • 相关阅读:
    简明Python3教程 12.问题解决
    简明Python3教程 11.数据结构
    【SPOJ 694】Distinct Substrings
    【codeforces Manthan, Codefest 17 C】Helga Hufflepuff's Cup
    【CF Manthan, Codefest 17 B】Marvolo Gaunt's Ring
    【CF Manthan, Codefest 17 A】Tom Riddle's Diary
    【SPOJ 220】 PHRASES
    【POJ 3261】Milk Patterns
    【POJ 3294】Life Forms
    【POJ 1226】Substrings
  • 原文地址:https://www.cnblogs.com/yangjiguang/p/6080272.html
Copyright © 2011-2022 走看看