Thanks Andy for these pointers :) On Thu, Apr 26, 2018 at 10:55:49AM +0300, Andy Shevchenko wrote: > On Thu, 2018-04-26 at 03:34 +0100, Javier Arteaga wrote: > > My understanding was that in this context, __init allows this probe() > > to > > be dropped from memory after module load. > > > > What am I doing wrong there? > > Just give another thought about it. The keyword(s) here is(are): time to > live of the objects in question. It's good to get knowing what unbind- > bind means (for built-in drivers). So this is the bit that I _believed_ applied to the platform drivers for these MFD-registered devices (from driver-model/platform.txt): Or, in common situations where the device is known not to be hot-pluggable, the probe() routine can live in an init section to reduce the driver's runtime memory footprint: int platform_driver_probe(struct platform_driver *drv, int (*probe)(struct platform_device *)) I'm thinking my misunderstanding probably stems from assuming that these leds/pinctrl drivers will always find all devices registered at init time. Can't say I've validated that assumption - I just didn't see anything obviously blowing up in my tests so far :) I'll keep reading and test out a few more things so I fully understand. Until then, I've taken out __init annotations from next version. > > > Don't use direct dereference to platform_data. > > > > Sorry, I don't understand this one. What's the alternative? > > See other drivers how they do that stuff. Hint: check inline functions > in include/linux/device.h. I wasn't looking at the right other drivers :) I'll use the dev_get_platdata() wrapper going forwards. -- To unsubscribe from this list: send the line "unsubscribe linux-gpio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html