diff mbox

[v2,1/3] drivers: bus: ocp2scp: add pdata support

Message ID 1349675983-23803-2-git-send-email-kishon@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

Kishon Vijay Abraham I Oct. 8, 2012, 5:59 a.m. UTC
ocp2scp was not having pdata support which makes *musb* fail for non-dt
boot in OMAP platform. The pdata will have information about the devices
that is connected to ocp2scp. ocp2scp driver will now make use of this
information to create the devices that is attached to ocp2scp.

Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
---
 drivers/bus/omap-ocp2scp.c                 |   67 ++++++++++++++++++++++++++--
 include/linux/platform_data/omap_ocp2scp.h |   31 +++++++++++++
 2 files changed, 95 insertions(+), 3 deletions(-)
 create mode 100644 include/linux/platform_data/omap_ocp2scp.h

Comments

Tony Lindgren Oct. 16, 2012, 4:50 p.m. UTC | #1
* Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> ocp2scp was not having pdata support which makes *musb* fail for non-dt
> boot in OMAP platform. The pdata will have information about the devices
> that is connected to ocp2scp. ocp2scp driver will now make use of this
> information to create the devices that is attached to ocp2scp.
> 
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>

This fixes the regression on my panda es for musb port:

Acked-by: Tony Lindgren <tony@atomide.com>
Tony Lindgren Oct. 25, 2012, 12:48 a.m. UTC | #2
* Tony Lindgren <tony@atomide.com> [121016 09:53]:
> * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> > ocp2scp was not having pdata support which makes *musb* fail for non-dt
> > boot in OMAP platform. The pdata will have information about the devices
> > that is connected to ocp2scp. ocp2scp driver will now make use of this
> > information to create the devices that is attached to ocp2scp.
> > 
> > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> 
> This fixes the regression on my panda es for musb port:
> 
> Acked-by: Tony Lindgren <tony@atomide.com>

Looks like nobody has picked this one up and we need it to
fix the musb regression on omap, so I'll queue these up.

Regards,

Tony
Felipe Balbi Oct. 25, 2012, 6:17 a.m. UTC | #3
Hi,

On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
> * Tony Lindgren <tony@atomide.com> [121016 09:53]:
> > * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> > > ocp2scp was not having pdata support which makes *musb* fail for non-dt
> > > boot in OMAP platform. The pdata will have information about the devices
> > > that is connected to ocp2scp. ocp2scp driver will now make use of this
> > > information to create the devices that is attached to ocp2scp.
> > > 
> > > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> > 
> > This fixes the regression on my panda es for musb port:
> > 
> > Acked-by: Tony Lindgren <tony@atomide.com>
> 
> Looks like nobody has picked this one up and we need it to
> fix the musb regression on omap, so I'll queue these up.

I don't seem to have the patches around in any mailbox :-(
Tony Lindgren Oct. 25, 2012, 5:44 p.m. UTC | #4
* Felipe Balbi <balbi@ti.com> [121024 23:24]:
> Hi,
> 
> On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
> > * Tony Lindgren <tony@atomide.com> [121016 09:53]:
> > > * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> > > > ocp2scp was not having pdata support which makes *musb* fail for non-dt
> > > > boot in OMAP platform. The pdata will have information about the devices
> > > > that is connected to ocp2scp. ocp2scp driver will now make use of this
> > > > information to create the devices that is attached to ocp2scp.
> > > > 
> > > > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> > > 
> > > This fixes the regression on my panda es for musb port:
> > > 
> > > Acked-by: Tony Lindgren <tony@atomide.com>
> > 
> > Looks like nobody has picked this one up and we need it to
> > fix the musb regression on omap, so I'll queue these up.
> 
> I don't seem to have the patches around in any mailbox :-(

Bounced them to you. Do you have any better ideas for the
-rc cycle to fix the MUSB regression on omap4?

Regards,

Tony
Felipe Balbi Oct. 26, 2012, 6:47 a.m. UTC | #5
On Thu, Oct 25, 2012 at 10:44:47AM -0700, Tony Lindgren wrote:
> * Felipe Balbi <balbi@ti.com> [121024 23:24]:
> > Hi,
> > 
> > On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
> > > * Tony Lindgren <tony@atomide.com> [121016 09:53]:
> > > > * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> > > > > ocp2scp was not having pdata support which makes *musb* fail for non-dt
> > > > > boot in OMAP platform. The pdata will have information about the devices
> > > > > that is connected to ocp2scp. ocp2scp driver will now make use of this
> > > > > information to create the devices that is attached to ocp2scp.
> > > > > 
> > > > > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> > > > 
> > > > This fixes the regression on my panda es for musb port:
> > > > 
> > > > Acked-by: Tony Lindgren <tony@atomide.com>
> > > 
> > > Looks like nobody has picked this one up and we need it to
> > > fix the musb regression on omap, so I'll queue these up.
> > 
> > I don't seem to have the patches around in any mailbox :-(
> 
> Bounced them to you. Do you have any better ideas for the
> -rc cycle to fix the MUSB regression on omap4?

Well, there are two regressions that I know of. One is caused by the
mode1 DMA changes, which I'll just revert, and the other is the
missing platform_data support on the new PHY driver which these patches
are supposed to solve, right ?
Felipe Balbi Oct. 26, 2012, 6:48 a.m. UTC | #6
On Mon, Oct 08, 2012 at 11:29:41AM +0530, Kishon Vijay Abraham I wrote:
> ocp2scp was not having pdata support which makes *musb* fail for non-dt
> boot in OMAP platform. The pdata will have information about the devices
> that is connected to ocp2scp. ocp2scp driver will now make use of this
> information to create the devices that is attached to ocp2scp.
> 
> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>

Acked-by: Felipe Balbi <balbi@ti.com>

> ---
>  drivers/bus/omap-ocp2scp.c                 |   67 ++++++++++++++++++++++++++--
>  include/linux/platform_data/omap_ocp2scp.h |   31 +++++++++++++
>  2 files changed, 95 insertions(+), 3 deletions(-)
>  create mode 100644 include/linux/platform_data/omap_ocp2scp.h
> 
> diff --git a/drivers/bus/omap-ocp2scp.c b/drivers/bus/omap-ocp2scp.c
> index ff63560..5db8297 100644
> --- a/drivers/bus/omap-ocp2scp.c
> +++ b/drivers/bus/omap-ocp2scp.c
> @@ -22,6 +22,26 @@
>  #include <linux/pm_runtime.h>
>  #include <linux/of.h>
>  #include <linux/of_platform.h>
> +#include <linux/platform_data/omap_ocp2scp.h>
> +
> +/**
> + * _count_resources - count for the number of resources
> + * @res: struct resource *
> + *
> + * Count and return the number of resources populated for the device that is
> + * connected to ocp2scp.
> + */
> +static unsigned _count_resources(struct resource *res)
> +{
> +	int cnt	= 0;
> +
> +	while (res->start != res->end) {
> +		cnt++;
> +		res++;
> +	}
> +
> +	return cnt;
> +}
>  
>  static int ocp2scp_remove_devices(struct device *dev, void *c)
>  {
> @@ -34,20 +54,61 @@ static int ocp2scp_remove_devices(struct device *dev, void *c)
>  
>  static int __devinit omap_ocp2scp_probe(struct platform_device *pdev)
>  {
> -	int			ret;
> -	struct device_node	*np = pdev->dev.of_node;
> +	int ret;
> +	unsigned res_cnt, i;
> +	struct device_node *np = pdev->dev.of_node;
> +	struct platform_device *pdev_child;
> +	struct omap_ocp2scp_platform_data *pdata = pdev->dev.platform_data;
> +	struct omap_ocp2scp_dev *dev;
>  
>  	if (np) {
>  		ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
>  		if (ret) {
> -			dev_err(&pdev->dev, "failed to add resources for ocp2scp child\n");
> +			dev_err(&pdev->dev,
> +			    "failed to add resources for ocp2scp child\n");
>  			goto err0;
>  		}
> +	} else if (pdata) {
> +		for (i = 0, dev = *pdata->devices; i < pdata->dev_cnt; i++,
> +		    dev++) {
> +			res_cnt = _count_resources(dev->res);
> +
> +			pdev_child = platform_device_alloc(dev->drv_name, -1);
> +			if (!pdev_child) {
> +				dev_err(&pdev->dev,
> +				  "failed to allocate mem for ocp2scp child\n");
> +				goto err0;
> +			}
> +
> +			ret = platform_device_add_resources(pdev_child,
> +			    dev->res, res_cnt);
> +			if (ret) {
> +				dev_err(&pdev->dev,
> +				 "failed to add resources for ocp2scp child\n");
> +				goto err1;
> +			}
> +
> +			pdev_child->dev.parent	= &pdev->dev;
> +
> +			ret = platform_device_add(pdev_child);
> +			if (ret) {
> +				dev_err(&pdev->dev,
> +				   "failed to register ocp2scp child device\n");
> +				goto err1;
> +			}
> +		}
> +	} else {
> +		dev_err(&pdev->dev, "OCP2SCP initialized without plat data\n");
> +		return -EINVAL;
>  	}
> +
>  	pm_runtime_enable(&pdev->dev);
>  
>  	return 0;
>  
> +err1:
> +	platform_device_put(pdev_child);
> +
>  err0:
>  	device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);
>  
> diff --git a/include/linux/platform_data/omap_ocp2scp.h b/include/linux/platform_data/omap_ocp2scp.h
> new file mode 100644
> index 0000000..5c6c393
> --- /dev/null
> +++ b/include/linux/platform_data/omap_ocp2scp.h
> @@ -0,0 +1,31 @@
> +/*
> + * omap_ocp2scp.h -- ocp2scp header file
> + *
> + * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; either version 2 of the License, or
> + * (at your option) any later version.
> + *
> + * Author: Kishon Vijay Abraham I <kishon@ti.com>
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + */
> +
> +#ifndef __DRIVERS_OMAP_OCP2SCP_H
> +#define __DRIVERS_OMAP_OCP2SCP_H
> +
> +struct omap_ocp2scp_dev {
> +	const char			*drv_name;
> +	struct resource			*res;
> +};
> +
> +struct omap_ocp2scp_platform_data {
> +	int				dev_cnt;
> +	struct omap_ocp2scp_dev		**devices;
> +};
> +#endif /* __DRIVERS_OMAP_OCP2SCP_H */
> -- 
> 1.7.9.5
>
Tony Lindgren Oct. 26, 2012, 5:16 p.m. UTC | #7
* Felipe Balbi <balbi@ti.com> [121025 23:55]:
> On Thu, Oct 25, 2012 at 10:44:47AM -0700, Tony Lindgren wrote:
> > * Felipe Balbi <balbi@ti.com> [121024 23:24]:
> > > Hi,
> > > 
> > > On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
> > > > * Tony Lindgren <tony@atomide.com> [121016 09:53]:
> > > > > * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> > > > > > ocp2scp was not having pdata support which makes *musb* fail for non-dt
> > > > > > boot in OMAP platform. The pdata will have information about the devices
> > > > > > that is connected to ocp2scp. ocp2scp driver will now make use of this
> > > > > > information to create the devices that is attached to ocp2scp.
> > > > > > 
> > > > > > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> > > > > 
> > > > > This fixes the regression on my panda es for musb port:
> > > > > 
> > > > > Acked-by: Tony Lindgren <tony@atomide.com>
> > > > 
> > > > Looks like nobody has picked this one up and we need it to
> > > > fix the musb regression on omap, so I'll queue these up.
> > > 
> > > I don't seem to have the patches around in any mailbox :-(
> > 
> > Bounced them to you. Do you have any better ideas for the
> > -rc cycle to fix the MUSB regression on omap4?
> 
> Well, there are two regressions that I know of. One is caused by the
> mode1 DMA changes, which I'll just revert, and the other is the
> missing platform_data support on the new PHY driver which these patches
> are supposed to solve, right ?

Yes that's it AFAIK.

Regards,

Tony
Felipe Balbi Oct. 26, 2012, 7:59 p.m. UTC | #8
Hi,

On Fri, Oct 26, 2012 at 10:16:55AM -0700, Tony Lindgren wrote:
> * Felipe Balbi <balbi@ti.com> [121025 23:55]:
> > On Thu, Oct 25, 2012 at 10:44:47AM -0700, Tony Lindgren wrote:
> > > * Felipe Balbi <balbi@ti.com> [121024 23:24]:
> > > > Hi,
> > > > 
> > > > On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
> > > > > * Tony Lindgren <tony@atomide.com> [121016 09:53]:
> > > > > > * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> > > > > > > ocp2scp was not having pdata support which makes *musb* fail for non-dt
> > > > > > > boot in OMAP platform. The pdata will have information about the devices
> > > > > > > that is connected to ocp2scp. ocp2scp driver will now make use of this
> > > > > > > information to create the devices that is attached to ocp2scp.
> > > > > > > 
> > > > > > > Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> > > > > > 
> > > > > > This fixes the regression on my panda es for musb port:
> > > > > > 
> > > > > > Acked-by: Tony Lindgren <tony@atomide.com>
> > > > > 
> > > > > Looks like nobody has picked this one up and we need it to
> > > > > fix the musb regression on omap, so I'll queue these up.
> > > > 
> > > > I don't seem to have the patches around in any mailbox :-(
> > > 
> > > Bounced them to you. Do you have any better ideas for the
> > > -rc cycle to fix the MUSB regression on omap4?
> > 
> > Well, there are two regressions that I know of. One is caused by the
> > mode1 DMA changes, which I'll just revert, and the other is the
> > missing platform_data support on the new PHY driver which these patches
> > are supposed to solve, right ?
> 
> Yes that's it AFAIK.

Kishon, any other patches I need to take to get MUSB working on v3.7 ?
Kishon Vijay Abraham I Oct. 27, 2012, 12:27 p.m. UTC | #9
Hi,

On Saturday 27 October 2012 01:29 AM, Felipe Balbi wrote:
> Hi,
>
> On Fri, Oct 26, 2012 at 10:16:55AM -0700, Tony Lindgren wrote:
>> * Felipe Balbi <balbi@ti.com> [121025 23:55]:
>>> On Thu, Oct 25, 2012 at 10:44:47AM -0700, Tony Lindgren wrote:
>>>> * Felipe Balbi <balbi@ti.com> [121024 23:24]:
>>>>> Hi,
>>>>>
>>>>> On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
>>>>>> * Tony Lindgren <tony@atomide.com> [121016 09:53]:
>>>>>>> * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
>>>>>>>> ocp2scp was not having pdata support which makes *musb* fail for non-dt
>>>>>>>> boot in OMAP platform. The pdata will have information about the devices
>>>>>>>> that is connected to ocp2scp. ocp2scp driver will now make use of this
>>>>>>>> information to create the devices that is attached to ocp2scp.
>>>>>>>>
>>>>>>>> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
>>>>>>>
>>>>>>> This fixes the regression on my panda es for musb port:
>>>>>>>
>>>>>>> Acked-by: Tony Lindgren <tony@atomide.com>
>>>>>>
>>>>>> Looks like nobody has picked this one up and we need it to
>>>>>> fix the musb regression on omap, so I'll queue these up.
>>>>>
>>>>> I don't seem to have the patches around in any mailbox :-(
>>>>
>>>> Bounced them to you. Do you have any better ideas for the
>>>> -rc cycle to fix the MUSB regression on omap4?
>>>
>>> Well, there are two regressions that I know of. One is caused by the
>>> mode1 DMA changes, which I'll just revert, and the other is the
>>> missing platform_data support on the new PHY driver which these patches
>>> are supposed to solve, right ?
>>
>> Yes that's it AFAIK.
>
> Kishon, any other patches I need to take to get MUSB working on v3.7 ?

These should be good enough to get MUSB working..

Thanks
Kishon
Felipe Balbi Oct. 29, 2012, 6:10 a.m. UTC | #10
Hi,

On Sat, Oct 27, 2012 at 05:57:48PM +0530, kishon wrote:
> Hi,
> 
> On Saturday 27 October 2012 01:29 AM, Felipe Balbi wrote:
> >Hi,
> >
> >On Fri, Oct 26, 2012 at 10:16:55AM -0700, Tony Lindgren wrote:
> >>* Felipe Balbi <balbi@ti.com> [121025 23:55]:
> >>>On Thu, Oct 25, 2012 at 10:44:47AM -0700, Tony Lindgren wrote:
> >>>>* Felipe Balbi <balbi@ti.com> [121024 23:24]:
> >>>>>Hi,
> >>>>>
> >>>>>On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
> >>>>>>* Tony Lindgren <tony@atomide.com> [121016 09:53]:
> >>>>>>>* Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
> >>>>>>>>ocp2scp was not having pdata support which makes *musb* fail for non-dt
> >>>>>>>>boot in OMAP platform. The pdata will have information about the devices
> >>>>>>>>that is connected to ocp2scp. ocp2scp driver will now make use of this
> >>>>>>>>information to create the devices that is attached to ocp2scp.
> >>>>>>>>
> >>>>>>>>Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
> >>>>>>>
> >>>>>>>This fixes the regression on my panda es for musb port:
> >>>>>>>
> >>>>>>>Acked-by: Tony Lindgren <tony@atomide.com>
> >>>>>>
> >>>>>>Looks like nobody has picked this one up and we need it to
> >>>>>>fix the musb regression on omap, so I'll queue these up.
> >>>>>
> >>>>>I don't seem to have the patches around in any mailbox :-(
> >>>>
> >>>>Bounced them to you. Do you have any better ideas for the
> >>>>-rc cycle to fix the MUSB regression on omap4?
> >>>
> >>>Well, there are two regressions that I know of. One is caused by the
> >>>mode1 DMA changes, which I'll just revert, and the other is the
> >>>missing platform_data support on the new PHY driver which these patches
> >>>are supposed to solve, right ?
> >>
> >>Yes that's it AFAIK.
> >
> >Kishon, any other patches I need to take to get MUSB working on v3.7 ?
> 
> These should be good enough to get MUSB working..

nothing needed for omap-usb2.c ? That's great, cheers
Kishon Vijay Abraham I Oct. 29, 2012, 6:23 a.m. UTC | #11
Hi,

On Monday 29 October 2012 11:40 AM, Felipe Balbi wrote:
> Hi,
>
> On Sat, Oct 27, 2012 at 05:57:48PM +0530, kishon wrote:
>> Hi,
>>
>> On Saturday 27 October 2012 01:29 AM, Felipe Balbi wrote:
>>> Hi,
>>>
>>> On Fri, Oct 26, 2012 at 10:16:55AM -0700, Tony Lindgren wrote:
>>>> * Felipe Balbi <balbi@ti.com> [121025 23:55]:
>>>>> On Thu, Oct 25, 2012 at 10:44:47AM -0700, Tony Lindgren wrote:
>>>>>> * Felipe Balbi <balbi@ti.com> [121024 23:24]:
>>>>>>> Hi,
>>>>>>>
>>>>>>> On Wed, Oct 24, 2012 at 05:48:07PM -0700, Tony Lindgren wrote:
>>>>>>>> * Tony Lindgren <tony@atomide.com> [121016 09:53]:
>>>>>>>>> * Kishon Vijay Abraham I <kishon@ti.com> [121007 23:01]:
>>>>>>>>>> ocp2scp was not having pdata support which makes *musb* fail for non-dt
>>>>>>>>>> boot in OMAP platform. The pdata will have information about the devices
>>>>>>>>>> that is connected to ocp2scp. ocp2scp driver will now make use of this
>>>>>>>>>> information to create the devices that is attached to ocp2scp.
>>>>>>>>>>
>>>>>>>>>> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
>>>>>>>>>
>>>>>>>>> This fixes the regression on my panda es for musb port:
>>>>>>>>>
>>>>>>>>> Acked-by: Tony Lindgren <tony@atomide.com>
>>>>>>>>
>>>>>>>> Looks like nobody has picked this one up and we need it to
>>>>>>>> fix the musb regression on omap, so I'll queue these up.
>>>>>>>
>>>>>>> I don't seem to have the patches around in any mailbox :-(
>>>>>>
>>>>>> Bounced them to you. Do you have any better ideas for the
>>>>>> -rc cycle to fix the MUSB regression on omap4?
>>>>>
>>>>> Well, there are two regressions that I know of. One is caused by the
>>>>> mode1 DMA changes, which I'll just revert, and the other is the
>>>>> missing platform_data support on the new PHY driver which these patches
>>>>> are supposed to solve, right ?
>>>>
>>>> Yes that's it AFAIK.
>>>
>>> Kishon, any other patches I need to take to get MUSB working on v3.7 ?
>>
>> These should be good enough to get MUSB working..
>
> nothing needed for omap-usb2.c ? That's great, cheers

No. Nothing of pdata sort is used in omap-usb2.c

Thanks
Kishon
diff mbox

Patch

diff --git a/drivers/bus/omap-ocp2scp.c b/drivers/bus/omap-ocp2scp.c
index ff63560..5db8297 100644
--- a/drivers/bus/omap-ocp2scp.c
+++ b/drivers/bus/omap-ocp2scp.c
@@ -22,6 +22,26 @@ 
 #include <linux/pm_runtime.h>
 #include <linux/of.h>
 #include <linux/of_platform.h>
+#include <linux/platform_data/omap_ocp2scp.h>
+
+/**
+ * _count_resources - count for the number of resources
+ * @res: struct resource *
+ *
+ * Count and return the number of resources populated for the device that is
+ * connected to ocp2scp.
+ */
+static unsigned _count_resources(struct resource *res)
+{
+	int cnt	= 0;
+
+	while (res->start != res->end) {
+		cnt++;
+		res++;
+	}
+
+	return cnt;
+}
 
 static int ocp2scp_remove_devices(struct device *dev, void *c)
 {
@@ -34,20 +54,61 @@  static int ocp2scp_remove_devices(struct device *dev, void *c)
 
 static int __devinit omap_ocp2scp_probe(struct platform_device *pdev)
 {
-	int			ret;
-	struct device_node	*np = pdev->dev.of_node;
+	int ret;
+	unsigned res_cnt, i;
+	struct device_node *np = pdev->dev.of_node;
+	struct platform_device *pdev_child;
+	struct omap_ocp2scp_platform_data *pdata = pdev->dev.platform_data;
+	struct omap_ocp2scp_dev *dev;
 
 	if (np) {
 		ret = of_platform_populate(np, NULL, NULL, &pdev->dev);
 		if (ret) {
-			dev_err(&pdev->dev, "failed to add resources for ocp2scp child\n");
+			dev_err(&pdev->dev,
+			    "failed to add resources for ocp2scp child\n");
 			goto err0;
 		}
+	} else if (pdata) {
+		for (i = 0, dev = *pdata->devices; i < pdata->dev_cnt; i++,
+		    dev++) {
+			res_cnt = _count_resources(dev->res);
+
+			pdev_child = platform_device_alloc(dev->drv_name, -1);
+			if (!pdev_child) {
+				dev_err(&pdev->dev,
+				  "failed to allocate mem for ocp2scp child\n");
+				goto err0;
+			}
+
+			ret = platform_device_add_resources(pdev_child,
+			    dev->res, res_cnt);
+			if (ret) {
+				dev_err(&pdev->dev,
+				 "failed to add resources for ocp2scp child\n");
+				goto err1;
+			}
+
+			pdev_child->dev.parent	= &pdev->dev;
+
+			ret = platform_device_add(pdev_child);
+			if (ret) {
+				dev_err(&pdev->dev,
+				   "failed to register ocp2scp child device\n");
+				goto err1;
+			}
+		}
+	} else {
+		dev_err(&pdev->dev, "OCP2SCP initialized without plat data\n");
+		return -EINVAL;
 	}
+
 	pm_runtime_enable(&pdev->dev);
 
 	return 0;
 
+err1:
+	platform_device_put(pdev_child);
+
 err0:
 	device_for_each_child(&pdev->dev, NULL, ocp2scp_remove_devices);
 
diff --git a/include/linux/platform_data/omap_ocp2scp.h b/include/linux/platform_data/omap_ocp2scp.h
new file mode 100644
index 0000000..5c6c393
--- /dev/null
+++ b/include/linux/platform_data/omap_ocp2scp.h
@@ -0,0 +1,31 @@ 
+/*
+ * omap_ocp2scp.h -- ocp2scp header file
+ *
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Author: Kishon Vijay Abraham I <kishon@ti.com>
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ */
+
+#ifndef __DRIVERS_OMAP_OCP2SCP_H
+#define __DRIVERS_OMAP_OCP2SCP_H
+
+struct omap_ocp2scp_dev {
+	const char			*drv_name;
+	struct resource			*res;
+};
+
+struct omap_ocp2scp_platform_data {
+	int				dev_cnt;
+	struct omap_ocp2scp_dev		**devices;
+};
+#endif /* __DRIVERS_OMAP_OCP2SCP_H */