platform怎么实现数据数据和驱动分离
一些重要的结构体:
struct platform_device { const char * name; int id; struct device dev; u32 num_resources; struct resource * resource; const struct platform_device_id *id_entry; /* arch specific additions */ struct pdev_archdata archdata; };
struct device { ………….. void *platform_data; 这是一个void*类型的指针,可以指向任何数据类型,用户可以随意设置自己的资源 ……………….. }
例如: struct s3c24xx_led_platdata { unsigned int gpio; unsigned int flags; char *name; char *def_trigger; }; 24xx把自己的资源弄成这个样子,驱动怎么获取这些资源呢?
驱动和设备mach上之后,通过platform找到device结构体,然后通过platform_date指针获
platform设备和驱动怎么相认呢? static int platform_match(struct device *dev, struct device_driver *drv) { struct platform_device *pdev = to_platform_device(dev); struct platform_driver *pdrv = to_platform_driver(drv); /* match against the id table first */ if (pdrv->id_table) return platform_match_id(pdrv->id_table, pdev) != NULL; 通过驱动的id_tables 和 设备的name比较来完成相认。 /* fall-back to driver name match */ return (strcmp(pdev->name, drv->name) == 0); }