On Wed, Feb 02, 2011 at 10:39:59PM -0800, Andres Salomon wrote:
On Wed, 2 Feb 2011 22:05:21 -0800 Dmitry Torokhov dmitry.torokhov@gmail.com wrote:
On Wed, Feb 02, 2011 at 08:15:22PM -0800, Andres Salomon wrote:
static int __devinit twl4030_vibra_probe(struct platform_device *pdev) {
- struct twl4030_codec_vibra_data *pdata =
pdev->dev.platform_data;
- struct twl4030_codec_vibra_data *pdata =
platform_get_drvdata(pdev);
No, device's drvdata belongs to _this_ driver, and it is supposed to manage it and use as it sees fit.
Right, so it's used to pass data to the probe function; once the probe function has obtained the pdata pointer, it's free to do with it what it will.
Note platform_set_drvdata(pdev, info) later in this function along with platform_set_drvdata(pdev, NULL) in twl4030_vibra_remove(), which means that with your change you will be able to bind the device only once.
Hm, good point; if the driver is reloaded, the pdev that was created by mfd-core will have lost the pointer to pdata.
I wonder if I should be using mfd's driver_data instead. I used platform_data because a bunch of drivers had already made use of it to pass cell information..
Then they are doing it incorrectly. One possible way is to have parent device carry relevant data in its drvdata and have children get it from there.