On Fri, Feb 14, 2025 at 02:37:52PM +0530, subramanian.mohan@xxxxxxxxx wrote: > From: Subramanian Mohan <subramanian.mohan@xxxxxxxxx> > > Some PPS generator drivers may need to retrieve a pointer to their > internal data while executing the PPS generator enable() method. > > During the driver registration the pps_gen_device pointer is returned > from the framework, and for that reason, there is difficulty in > getting generator driver data back in the enable function. We won't be > able to use container_of macro as it results in static assert, and we > might end up in using static pointer. > > To solve the issue and to get back the generator driver data back, we > should not copy the struct pps_gen_source_info within the struct > pps_gen_device during the registration stage, but simply save the > pointer of the driver one. In this manner, driver may get a pointer > to their internal data as shown below: > > struct pps_gen_foo_data_s { > ... > struct pps_gen_source_info gen_info; > struct pps_gen_device *pps_gen; > ... > }; > > static int __init pps_gen_foo_init(void) > { > struct pps_gen_foo_data_s *foo; > ... > foo->pps_gen = pps_gen_register_source(&foo->gen_info); > ... > } > > Then, in the enable() method, we can retrieve the pointer to the main > struct by using the code below: > > static int pps_gen_foo_enable(struct pps_gen_device *pps_gen, bool enable) > { > struct pps_gen_foo_data_s *foo = container_of(pps_gen->info, > struct pps_gen_foo_data_s, gen_info); > ... > } Shouldn't Subject start with "pps: generators: ..."? With that fixed, Reviewed-by: Andy Shevchenko <andriy.shevchenko@xxxxxxxxxxxxxxx> -- With Best Regards, Andy Shevchenko