On Mon, Feb 10, 2025 at 10:34:18AM +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); TABs/spaces mix. > ... > } > Signed-off-by: Rodolfo Giometti <giometti@xxxxxxxxxxxx> Hmm... Is Rodolfo indeed a correct to be mentioned here? I think you wanted Suggested-by with somebody else. ... > -struct pps_gen_device *pps_gen_register_source(struct pps_gen_source_info *info) > +struct pps_gen_device *pps_gen_register_source( > + const struct pps_gen_source_info *info) Still leave it a single line. ... Otherwise looks good to me, thanks for taking this approach! -- With Best Regards, Andy Shevchenko