On Mon, Jul 25, 2011 at 07:29:28PM +0100, Mark Brown wrote:
On Mon, Jul 25, 2011 at 11:19:16AM -0700, Dmitry Torokhov wrote:
quoted
Right, like i2c bus we could just have platform core clean up platform
drvdata pointer after calling ->remove() and also if ->probe() errors
out.
I2C doesn't do this (at least not any more).
Sure does. See drivers/i2c/i2c-core.c::i2c_device_probe() and
i2c_device_remove().
quoted
Then individual drivers do not have to care about cleaning up this
pointer.
They don't have to worry about it anyway, the only thing that is allowed
to use the pointer is a currently bound driver and it's only allowed to
rely on is that while it's bound it'll get back the same driver_data
that it put in.
Right, except that some people trying to use this pointers to pass
platform data to the driver... Resetting the pointer to NULL on unbind
will hopefully show them their mistake.
--
Dmitry