platform_set_drvdata和platform_get_drvdata

来源:互联网 发布:恶搞锁屏软件 编辑:程序博客网 时间:2024/06/07 00:38

1、platform_set_drvdatakernel\linux-3.10.y\include\linux\platform_device.h:static inline void platform_set_drvdata(struct platform_device *pdev, void *data){dev_set_drvdata(&pdev->dev, data);}kernel\linux-3.10.y\drivers\base\dd.c:int dev_set_drvdata(struct device *dev, void *data){int error;if (!dev->p) {error = device_private_init(dev);if (error)return error;}dev->p->driver_data = data;return 0;}2、platform_get_drvdatastatic inline void *platform_get_drvdata(const struct platform_device *pdev){return dev_get_drvdata(&pdev->dev);}void *dev_get_drvdata(const struct device *dev){if (dev && dev->p)return dev->p->driver_data;return NULL;}kernel\linux-3.10.y\include\linux\device.h:struct device {struct device  *parent;struct device_private *p;struct kobject kobj;const char  *init_name; /* initial name of the device */const struct device_type *type;struct mutex  mutex; /* mutex to synchronize calls to  * its driver.  */struct bus_type *bus;  /* type of bus device is on */struct device_driver *driver; /* which driver has allocated this  device */void  *platform_data; /* Platform specific data, device core doesn't touch it */struct dev_pm_info power;struct dev_pm_domain *pm_domain;#ifdef CONFIG_PINCTRLstruct dev_pin_info *pins;#endif#ifdef CONFIG_NUMAint  numa_node; /* NUMA node this device is close to */#endifu64  *dma_mask; /* dma mask (if dma'able device) */u64  coherent_dma_mask;/* Like dma_mask, but for  alloc_coherent mappings as  not all hardware supports  64 bit addresses for consistent  allocations such descriptors. */struct device_dma_parameters *dma_parms;struct list_head dma_pools; /* dma pools (if dma'ble) */struct dma_coherent_mem *dma_mem; /* internal for coherent mem  override */#ifdef CONFIG_DMA_CMAstruct cma *cma_area;  /* contiguous memory area for dmaallocations */#endif/* arch specific additions */struct dev_archdata archdata;struct device_node *of_node; /* associated device tree node */struct acpi_dev_node acpi_node; /* associated ACPI device node */dev_t   devt; /* dev_t, creates the sysfs "dev" */u32   id; /* device instance */spinlock_t  devres_lock;struct list_head devres_head;struct klist_node knode_class;struct class  *class;const struct attribute_group **groups; /* optional groups */void (*release)(struct device *dev);struct iommu_group *iommu_group;};kernel\linux-3.10.y\drivers\base\base.h:struct device_private {struct klist klist_children;struct klist_node knode_parent;struct klist_node knode_driver;struct klist_node knode_bus;struct list_head deferred_probe;void *driver_data;struct device *device;};

0 0