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);
}

 

posted @ 2018-04-10 23:10  陈帅军  阅读(215)  评论(0编辑  收藏  举报