在Linux內核源代碼中,有好多dev_set_drvdata(&spi->dev, ts);這樣的函數,看她的源代碼:


static inline void dev_set_drvdata(struct device *dev, void *data)
{
dev->driver_data = data;
}


   從源碼中可以得知其實就是把ts這個數據結構賦值為spi->dev的driver_data;


    而platform_set_drvdata(pdev, omap_kp);其實是和這個是一個意思! 其實也是調用的它;


    #define platform_set_drvdata(_dev,data) dev_set_drvdata(&(_dev)->dev, (data))


   相對的是#define platform_get_drvdata(_dev) dev_get_drvdata(&(_dev)->dev)和


   static inline void *dev_get_drvdata(struct device *dev)
{
return dev->driver_data;
}


這兩個就是返回dev的驅動的數據!



在linux 的驅動裡用到dev_set_drvdata 和dev_get_drvdata 的地方非常多,如:

platform_set_drvdata();
platform_get_drvdata();

input_set_drvdata();
input_get_drvdata();

mmc_get_drvdata();
mmc_set_drvdata();

i2c_set_clientdata();
i2c_get_clientdata();

……用到的其實都是它們。

好處是很明顯的,把設備的相關信息放到設備結構裡,需要使用的時候可以方便的拿出來。


arrow
arrow
    全站熱搜

    立你斯 發表在 痞客邦 留言(0) 人氣()