字符设备驱动之笔记-Platform设备驱动机制(1)

 

平台设备注册的分析:/*做下面的资源需要看芯片手册,看原理图*/
---------------------------------------------------------
arch/arm/plat-s3c24xx/devs.c   /*大部分的设备控制器资源在这里定义的*/
/* LCD Controller */
static struct resource s3c_lcd_resource[] = {
 [0] = {
  .start = S3C24XX_PA_LCD,
  .end   = S3C24XX_PA_LCD + S3C24XX_SZ_LCD - 1,
  .flags = IORESOURCE_MEM,
 },
 [1] = {
  .start = IRQ_LCD,
  .end   = IRQ_LCD,
  .flags = IORESOURCE_IRQ,
 }
};

static u64 s3c_device_lcd_dmamask = 0xffffffffUL;

struct platform_device s3c_device_lcd = {
 .name    = "s3c2410-lcd",
 .id    = -1,
 .num_resources   = ARRAY_SIZE(s3c_lcd_resource),
 .resource   = s3c_lcd_resource,
 .dev              = {
  .dma_mask  = &s3c_device_lcd_dmamask,
  .coherent_dma_mask = 0xffffffffUL
 }
};
/*上面只是定义一些资源,我们需要注册到平台设备链表上去*/
arch/arm/mach-s3c2410/mach-smdk2410.c
static struct platform_device *smdk2410_devices[] __initdata = {
 &s3c_device_usb,
 &s3c_device_lcd,
 &s3c_device_wdt,
 &s3c_device_i2c,
 &s3c_device_iis,
 &s3c_device_sdi 
};
static void __init smdk2410_init(void)
{
 s3c24xx_fb_set_platdata(&smdk2410_lcdcfg);
 platform_add_devices(smdk2410_devices, ARRAY_SIZE(smdk2410_devices));
 ......................
}
platform_add_devices/*这个函数里面干了什么*/
-----------------------------------------------------------------------------------
for (i = 0; i < num; i++) {
 ret = platform_device_register(devs[i]);

platform_device_register/*这个函数目的是讲我们的设备资源加载到设备链表中,怎么加载*/
int platform_device_register(struct platform_device * pdev)
{
 //设备属性的初始化
 device_initialize(&pdev->dev);
 //将设备添加到Platfrom中
 return platform_device_add(pdev);
}
platform_device_add
 pdev->dev.bus = &platform_bus_type;
 ...........
 ret = device_add(&pdev->dev);    /*开始加载*/
  ...................../*将设备资源加入到设备链表*/
  bus_attach_device(dev);    /*找驱动去匹配*/
   ret = device_attach(dev);
    /*搜寻总线上驱动链表中的每个驱动,并调用__device_attach*/
    ret = bus_for_each_drv(dev->bus, NULL, dev, __device_attach);

__device_attach:/*跟驱动那边调用的是同一个函数,它里面会调用总线结构体里面的match函数,根据名字来匹配*/
------------------------------------------------------------------------------
    


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值