lcd probe函数 赏析

static int __init s3c24xxfb_probe(struct platform_device *pdev,enum s3c_drv_type drv_type)
{
    /**
        s3c2410fb_info这个结构体主要将一些零散的全局变量,打包成一个结构体
        他的成员有:
                struct clk      *clk;         //时钟结构体
                struct resource *mem;         //保存设备资源
                void __iomem        *io;      //保存虚拟地址
                void __iomem        *irq_base;//保存中断号
                ......
    */
    struct s3c2410fb_info * info;
    struct s3c2410fb_display *display;
    /**
        很重要的结构体,每一个framebuffer驱动对应一个fb_info
        是lcd驱动的核心。后面会详细说
    */
    struct fb_info *fbinfo;
    struct s3c2410fb_mach_info *mach_info;
    struct resource *res;
    int ret;
    int irq;
    int i;
    int size;
    u32 lcdcon1;
    /**
        看,如果mach_info 为空了,那么程序就会出错退出了,
        那么,s3c2410fb_mach_info 是再什么时候 放到pdev->dev.platform_data中的呢?
        在/arch/arm/mach_s3c2440/mach_smdk2440.c文件中有一个函数smdk2440_machine_init()
        static void __init smdk2440_machine_init(void)
        {
            在这个函数中,将s3c2410fb_mach_info 放入到了s3c_device_lcd.dev.platform_data中。
            看看它的源码是怎么样实现的,下面还有附有一张图

            s3c24xx_fb_set_platdata(&smdk2440_fb_info)
            {
                struct s3c2410fb_mach_info *npd;
                npd = kmalloc(sizeof(*npd), GFP_KERNEL);为s3c2410fb_mach_info分配内存空间
                if (npd) {
                    memcpy(npd, pd, sizeof(*npd));
                        将传入的s3c2410fb_mach_info结构放入到 s3c_device_lcd.dev.platform_data中,
                        后面的probe函数会取出这个s3c2410fb_mach_info
                    s3c_device_lcd.dev.platform_data = npd;
                } else {
                    printk(KERN_ERR "no memory for LCD platform data\n");
                }
            }
            s3c_i2c0_set_platdata(NULL);
            platform_add_devices(smdk2440_devices, ARRAY_SIZE(smdk2440_devices));
            smdk_machine_init();
        }
    */
    mach_info = pdev->dev.platform_data;
    if (mach_info == NULL) {
        dev_err(&pdev->dev,"no platform data for lcd, cannot attach\n");
        return -EINVAL;
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值