Subject: [RFC PATCH 03/11] arm: omap: device: create a device for system control module

From: [email-masked] (Konstantin Baydarov)
Date: Thu, 14 Jun 2012 17:50:19 +0400

Hi.

On 05/29/2012 01:44 PM, Eduardo Valentin wrote:
> On Fri, May 25, 2012 at 02:30:44PM +0200, Cousson Benoit wrote:
>> On 5/25/2012 10:25 AM, Eduardo Valentin wrote:
>>> From: Kishon Vijay Abraham I<[email-masked]>
>>>
>>> Extracts the device data from hwmod database and create a platform device
>>> using omap device build.
>>>
>>> The device build is done during postcore_initcall.
>> Do you still need that since you are supporting only DT?
>> The device will be built automatically in the DT case.
> In fact this is not needed for DT only probing. Dropping this one.
Yes, platform device(struct platform_device) will be built automatically, but omap device(struct omap_device) will not be built.
Also when omap device is allocated(omap_device_alloc) hwmod_clocks are registered, but in case of ctrl_module_core device - no new clock are registered.
So, is it fine to drop omap device and skip omap_device_build() call?

  BR,
    Konstantin Baydarov.

>
>> Regards,
>> Benoit
>>
>>> Signed-off-by: Kishon Vijay Abraham I<[email-masked]>
>>> Signed-off-by: Eduardo Valentin<[email-masked]>
>>> ---
>>>  arch/arm/mach-omap2/devices.c |   26 ++++++++++++++++++++++++++
>>>  1 files changed, 26 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c
>>> index 152c266..9332673 100644
>>> --- a/arch/arm/mach-omap2/devices.c
>>> +++ b/arch/arm/mach-omap2/devices.c
>>> @@ -40,6 +40,32 @@
>>>  #define L3_MODULES_MAX_LEN 12
>>>  #define L3_MODULES 3
>>>
>>> +static int omap_init_control(void)
>>> +{
>>> +	struct omap_hwmod		*oh;
>>> +	struct platform_device		*pdev;
>>> +	const char			*oh_name, *name;
>>> +
>>> +	oh_name = "ctrl_module_core";
>>> +	name = "omap-control-core";
>>> +
>>> +	oh = omap_hwmod_lookup(oh_name);
>>> +	if (!oh) {
>>> +		pr_err("Could not lookup hwmod for %s\n", oh_name);
>>> +		return PTR_ERR(oh);
>>> +	}
>>> +
>>> +	pdev = omap_device_build(name, -1, oh, NULL, 0, NULL, 0, true);
>>> +	if (IS_ERR(pdev)) {
>>> +		pr_err("Could not build omap_device for %s %s\n",
>>> +		       name, oh_name);
>>> +		return PTR_ERR(pdev);
>>> +	}
>>> +
>>> +	return 0;
>>> +}
>>> +postcore_initcall(omap_init_control);
>>> +
>>>  static int __init omap3_l3_init(void)
>>>  {
>>>  	struct omap_hwmod *oh;