[PATCH v2 1/3] OMAP: PM: initial runtime PM core support
Grant Likely
grant.likely at secretlab.ca
Mon Jun 28 19:47:49 EDT 2010
On Mon, Jun 28, 2010 at 4:27 PM, Kevin Hilman
<khilman at deeprootsystems.com> wrote:
> Grant Likely <grant.likely at secretlab.ca> writes:
>
> [...]
>
>>
>>> This affects many aspects of all drivers, from register and probe (for
>>> early devices/drivers too!) to all the plaform_get_resource() usage, all
>>> of which assumes a platform_driver and platform_device. I didn't look
>>> closely, but I didn't see if (or how) OF was handling early devices.
>>
>> You don't have to reimplement the entire platform bus. You could
>> simply create a new bus type, but reuse all the existing platform bus
>> code. All that changes is the bus type that the device and the driver
>> gets registered on. Then you could easily replace only the functions
>> that matter. (do a git grep platform_bus_type to see how few
>> references there actually are. It looks like there are only 5
>> references to it in drivers/base/platform.c that you'd need to work
>> around; in platform_device_add(), platform_driver_register(), 2 in
>> platform_driver_probe(), and the register in platform_bus_init(). You
>> may not even need to reimplement platform_driver_probe().
>>
>> It might even be as simple as doing this:
>> - pdev->dev.bus = &platform_bus_type;
>> + if (!pdev->dev.bus)
>> + pdev->dev.bus = &platform_bus_type;
>>
>> So that a different bus type can be selected at device registration
>> time
>
> just FYI...
>
> as a quick proof of concept, I've done a quick hack just to prove to
> myself that I could use platform_devices on a custom bus, and it indeed
> works. The small patch below[1] shows the changes required to the
> platform code.
>
> Next step was to hack up minimal custom bus code. The quickest (and
> dirtiest) way was to simply memcpy platform_bus_type into my new
> omap_bus_type and then override the few dev_pm_ops functions I needed[2].
>
> So, with these in place, and using the dev_pm_ops functions from
> $SUBJECT patch, I was able register a platform_device and
> platform_driver onto my custom bus and see my custom dev_pm_ops
> functions being used as expected.
Nice!
> While admittedly a bit hacky, at least this paves the way in my head
> that this is indeed do-able, and I can take my vacation in peace without
> this particular problem haunting me (too much.)
indeed. It could be less hacky also by adding a
platform_bus_type_init() function to the common platform code.
Cheers,
g.
More information about the linux-arm-kernel
mailing list