recursive call to platform_device_register deadlocks

Jamey Hicks
2005-06-18T14:38:34Z

We wrote soc_device to handle ASICs that were structured as a number of
subcomponents, some of which are reused from ASIC to ASIC. This enables
the drivers for the subcomponents to be in separate files, loaded as
modules, and enhances code reuse. We submitted soc_device, but it was
pointed out that platform_device probably does what we want.

We've started working on replacing uses of soc_device in handhelds
drivers by platform_device. One of the things we ran into is that the
platform_device driver for an ASIC was calling soc_device_register
inside its probe function. If this is converted to
platform_device_register, then the process deadlocks because
bus_add_device locks platform_bus_type.

We could restructure the toplevel driver so that it does not call
platform_device inside its probe function. An alternative would be to
add a pointer to a vector of subdevices to platform_device and have it
register the subdevices after it has probed the toplevel device. Do you
have any recommendations?

Thanks,
Jamey Hicks