dev_get_platdata和dev_get_drvdata

dev_get_platdata和dev_get_drvdata

2017年06月12日 19:03:45

阅读数:1486

 
  1. dev_get_platdata和dev_get_drvdata获取的对象是不同的。

  2. dev_get_platdata获取的是device结构体成员变量的void * platform_data。

  3. dev_get_drvdata获取的是device结构体struct device_private *成员变量P的成员变量void * driver_data。

  4. 另外有与dev_get_drvdata相对应的set函数dev_set_drvdata,但是没有与dev_get_platdata相对应的set函数,

  5. 只能直接给该platform_data赋值。

  6. 两个函数的定义如下:

  7. static inline void *dev_get_platdata(const struct device *dev)

  8. {

  9. return dev->platform_data;

  10. }

  11.  
  12. int dev_set_drvdata(struct device *dev, void *data)

  13. {

  14. int error;

  15.  
  16. if (!dev->p) {

  17. error = device_private_init(dev);

  18. if (error)

  19. return error;

  20. }

  21. dev->p->driver_data = data;

  22. return 0;

  23. }

  24.  
  25. void *dev_get_drvdata(const struct device *dev)

  26. {

  27. if (dev && dev->p)

  28. return dev->p->driver_data;

  29. return NULL;

  30. }

  31.  
  32. static inline void *platform_get_drvdata(const struct platform_device *pdev)

  33. {

  34. return dev_get_drvdata(&pdev->dev);

  35. }

  36.  
  37. static inline void platform_set_drvdata(struct platform_device *pdev,

  38. void *data)

  39. {

  40. dev_set_drvdata(&pdev->dev, data);

  41. }

  42.  

猜你喜欢

转载自blog.csdn.net/u010388659/article/details/81272497
Dev