通常,会在驱动的probe函数中获取device的相关信息,然后使用 platform_set_drvdata进行保存。在其他函数中要用到时(比如remove),通过platform_get_drvdata来获取。 内核中的定义为: #define platform_get_drvdata(_dev)dev_get_drvdata(&(_dev)->dev) #define platform_set_drvdata(_dev,data)dev_set_drvdata...
#defineplatform_set_drvdata(_dev,data)dev_set_drvdata(&(_dev)->dev,(data)) /* /drivers/base/dd.c */intdev_set_drvdata(struct device*dev,void*data){int error;if(!dev->p){error=device_private_init(dev);if(error)returnerror;}dev->p->driver_data=data;return0;} ...
platform_set_drvdata // 保存dwc3_rockchip指针 clk = of_clk_get(np, i) // 获取时钟 clk_prepare_enable // 使能时钟 rockchip->clks[i] = clk // 保存时钟结构体指针 pm_runtime_set_active // 电源管理相关 pm_runtime_enable pm_runtime_get_sync devm_reset_control_get(dev, "usb3-otg...
platform_set_drvdata(pdev, globalfifo_devp); // 设置驱动数据 printk(KERN_INFO "%s driver found device!!\n", __func__); ret = misc_register(&globalfifo_devp->miscdev); // 注册混杂设备 if (ret < 0) goto err; return 0; err: return ret; } static int globalfifo_remove(struct pla...
一般情况下,只对设备树中根的一级子节点进行转换,也就是多级子节点(子节点的子节点)并不处理。但是存在一种特殊情况,就是当某个根子节点的compatible属性为"simple-bus"、"simple-mfd"、"isa"、"arm,amba-bus"时,当前节点中的一级子节点将会被转换成platform_device节点。
platform_set_drvdata(pdev, beeper); return 0; err_input_free: input_free_device(beeper->input); err_pwm_free: pwm_free(beeper->pwm); return } //移除pwm设备 static int __devexit pwm_beeper_remove(struct platform_device *pdev)
platform_set_drvdata(pdev, i2c); if (i2c->soc_data->calc_timings == rk3x_i2c_v0_calc_timings) { /* Only one clock to use for bus clock and peripheral clock */ i2c->clk = devm_clk_get(&pdev->dev, NULL); i2c->pclk = i2c->clk; ...
platform_driver_register()和platform_driver_unregister()函数在/drivers/base/platform.c中实现的。 可以看出,platform_driver_register()函数的作用就是为platform_driver中的driver中的probe、remove等提供接口函数 [cpp] view plain copy int platform_driver_register(struct platform_driver *drv) ...
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); /* When driver_override is set, only bind to the matching driver */ if (pdev->driver_override) re...
21 ddata->n_buttons = pdata->nbuttons; 22 ddata->enable = pdata->enable; 23 ddata->disable = pdata->disable; 24 mutex_init(&ddata->disable_lock); 25 26 platform_set_drvdata(pdev, ddata); 27 input_set_drvdata(input, ddata); ...