diff mbox

[RFC/PATCH,v2,07/13] dt: omap: create platform bus for omap devices

Message ID 1314074021-25186-8-git-send-email-manjugk@ti.com (mailing list archive)
State New, archived
Headers show

Commit Message

manjugk manjugk Aug. 23, 2011, 5:03 a.m. UTC
The omap devices will use HWMOD for fetching device information
hence it needs to be handled seperately during platform bus
creation during dt build.

Signed-off-by: G, Manjunath Kondaiah <manjugk@ti.com>
---
 drivers/of/platform.c |   41 ++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 40 insertions(+), 1 deletions(-)

Comments

Jamie Iles Aug. 23, 2011, 9:07 a.m. UTC | #1
Hi,

This creates a build failure for non-omap platforms as they don't know 
about struct omap_device_pm_latency, struct omap_hwmod etc.

An empty of_omap_device_create() as inline should do the trick.

Jamie

On Tue, Aug 23, 2011 at 10:03:35AM +0500, G, Manjunath Kondaiah wrote:
> 
> The omap devices will use HWMOD for fetching device information
> hence it needs to be handled seperately during platform bus
> creation during dt build.
> 
> Signed-off-by: G, Manjunath Kondaiah <manjugk@ti.com>
> ---
>  drivers/of/platform.c |   41 ++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 40 insertions(+), 1 deletions(-)
> 
> diff --git a/drivers/of/platform.c b/drivers/of/platform.c
> index e50ffcb..bd2c089 100644
> --- a/drivers/of/platform.c
> +++ b/drivers/of/platform.c
> @@ -24,6 +24,10 @@
>  #include <linux/of_platform.h>
>  #include <linux/platform_device.h>
>  
> +#ifdef CONFIG_ARCH_OMAP2PLUS
> +#include <plat/omap_device.h>
> +#endif
> +
>  const struct of_device_id of_default_bus_match_table[] = {
>  	{ .compatible = "simple-bus", },
>  #ifdef CONFIG_ARM_AMBA
> @@ -544,6 +548,36 @@ static const struct of_dev_auxdata *of_dev_lookup(const struct of_dev_auxdata *l
>  	return NULL;
>  }

#ifdef ARCH_OMAP

> +static struct omap_device_pm_latency omap_device_latency[] = {
> +	[0] = {
> +		.deactivate_func	= omap_device_idle_hwmods,
> +		.activate_func		= omap_device_enable_hwmods,
> +		.flags			= OMAP_DEVICE_LATENCY_AUTO_ADJUST,
> +	},
> +};
> +
> +int of_omap_device_create(struct device_node *np, const char *name, int id,
> +							void *platform_data,
> +							int pd_size)
> +{
> +	struct omap_hwmod *oh;
> +	struct platform_device *pdev;
> +
> +	oh = omap_hwmod_lookup(name);
> +	if (!oh) {
> +		pr_err("Could not look up %s\n", name);
> +		return -EEXIST;
> +	}
> +
> +	pdev = omap_device_build_dt(np, name, id, oh, platform_data,
> +				sizeof(platform_data), omap_device_latency,
> +				ARRAY_SIZE(omap_device_latency), 0);
> +	WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name);
> +
> +	pr_info("DT: omap_device build for %s is successful\n", name);
> +	return PTR_ERR(pdev);
> +}

#else /* ARCH_OMAP */
static inline int of_omap_device_create(struct device_node *np,
					const char *name, int id,
					void *platform_data, int pd_size)
{
	return -ENODEV;
}
#endif /* ARCH_OMAP */

> +
>  /**
>   * of_platform_bus_create() - Create a device for a node and its children.
>   * @bus: device node of the bus to instantiate
> @@ -565,7 +599,7 @@ static int of_platform_bus_create(struct device_node *bus,
>  	struct platform_device *dev;
>  	const char *bus_id = NULL;
>  	void *platform_data = NULL;
> -	int pd_size;
> +	int pd_size = 0;
>  	int id = -1;
>  	int rc = 0;
>  
> @@ -597,6 +631,11 @@ static int of_platform_bus_create(struct device_node *bus,
>  		return 0;
>  	}
>  
> +	if (of_device_is_compatible(bus, "ti,omap-device")) {
> +		of_omap_device_create(bus, bus_id, id, platform_data, pd_size);
> +		return 0;
> +	}
> +
>  	dev = of_platform_device_create_pdata(bus, bus_id, platform_data, parent);
>  
>  	/* override the id if auxdata gives an id */
> -- 
> 1.7.4.1
> 
> _______________________________________________
> devicetree-discuss mailing list
> devicetree-discuss@lists.ozlabs.org
> https://lists.ozlabs.org/listinfo/devicetree-discuss
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
manjugk manjugk Aug. 23, 2011, 3:19 p.m. UTC | #2
On Tue, Aug 23, 2011 at 10:07:05AM +0100, Jamie Iles wrote:
> Hi,
> 
> This creates a build failure for non-omap platforms as they don't know 
> about struct omap_device_pm_latency, struct omap_hwmod etc.
> 
> An empty of_omap_device_create() as inline should do the trick.
Thanks. I will introduce this.

-M
> 
> Jamie
> 
> On Tue, Aug 23, 2011 at 10:03:35AM +0500, G, Manjunath Kondaiah wrote:
> > 
> > The omap devices will use HWMOD for fetching device information
> > hence it needs to be handled seperately during platform bus
> > creation during dt build.
> > 
> > Signed-off-by: G, Manjunath Kondaiah <manjugk@ti.com>
> > ---
> >  drivers/of/platform.c |   41 ++++++++++++++++++++++++++++++++++++++++-
> >  1 files changed, 40 insertions(+), 1 deletions(-)
> > 
> > diff --git a/drivers/of/platform.c b/drivers/of/platform.c
> > index e50ffcb..bd2c089 100644
> > --- a/drivers/of/platform.c
> > +++ b/drivers/of/platform.c
> > @@ -24,6 +24,10 @@
> >  #include <linux/of_platform.h>
> >  #include <linux/platform_device.h>
> >  
> > +#ifdef CONFIG_ARCH_OMAP2PLUS
> > +#include <plat/omap_device.h>
> > +#endif
> > +
> >  const struct of_device_id of_default_bus_match_table[] = {
> >  	{ .compatible = "simple-bus", },
> >  #ifdef CONFIG_ARM_AMBA
> > @@ -544,6 +548,36 @@ static const struct of_dev_auxdata *of_dev_lookup(const struct of_dev_auxdata *l
> >  	return NULL;
> >  }
> 
> #ifdef ARCH_OMAP
> 
> > +static struct omap_device_pm_latency omap_device_latency[] = {
> > +	[0] = {
> > +		.deactivate_func	= omap_device_idle_hwmods,
> > +		.activate_func		= omap_device_enable_hwmods,
> > +		.flags			= OMAP_DEVICE_LATENCY_AUTO_ADJUST,
> > +	},
> > +};
> > +
> > +int of_omap_device_create(struct device_node *np, const char *name, int id,
> > +							void *platform_data,
> > +							int pd_size)
> > +{
> > +	struct omap_hwmod *oh;
> > +	struct platform_device *pdev;
> > +
> > +	oh = omap_hwmod_lookup(name);
> > +	if (!oh) {
> > +		pr_err("Could not look up %s\n", name);
> > +		return -EEXIST;
> > +	}
> > +
> > +	pdev = omap_device_build_dt(np, name, id, oh, platform_data,
> > +				sizeof(platform_data), omap_device_latency,
> > +				ARRAY_SIZE(omap_device_latency), 0);
> > +	WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name);
> > +
> > +	pr_info("DT: omap_device build for %s is successful\n", name);
> > +	return PTR_ERR(pdev);
> > +}
> 
> #else /* ARCH_OMAP */
> static inline int of_omap_device_create(struct device_node *np,
> 					const char *name, int id,
> 					void *platform_data, int pd_size)
> {
> 	return -ENODEV;
> }
> #endif /* ARCH_OMAP */
> 
> > +
> >  /**
> >   * of_platform_bus_create() - Create a device for a node and its children.
> >   * @bus: device node of the bus to instantiate
> > @@ -565,7 +599,7 @@ static int of_platform_bus_create(struct device_node *bus,
> >  	struct platform_device *dev;
> >  	const char *bus_id = NULL;
> >  	void *platform_data = NULL;
> > -	int pd_size;
> > +	int pd_size = 0;
> >  	int id = -1;
> >  	int rc = 0;
> >  
> > @@ -597,6 +631,11 @@ static int of_platform_bus_create(struct device_node *bus,
> >  		return 0;
> >  	}
> >  
> > +	if (of_device_is_compatible(bus, "ti,omap-device")) {
> > +		of_omap_device_create(bus, bus_id, id, platform_data, pd_size);
> > +		return 0;
> > +	}
> > +
> >  	dev = of_platform_device_create_pdata(bus, bus_id, platform_data, parent);
> >  
> >  	/* override the id if auxdata gives an id */
> > -- 
> > 1.7.4.1
> > 
> > _______________________________________________
> > devicetree-discuss mailing list
> > devicetree-discuss@lists.ozlabs.org
> > https://lists.ozlabs.org/listinfo/devicetree-discuss
--
To unsubscribe from this list: send the line "unsubscribe linux-omap" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/of/platform.c b/drivers/of/platform.c
index e50ffcb..bd2c089 100644
--- a/drivers/of/platform.c
+++ b/drivers/of/platform.c
@@ -24,6 +24,10 @@ 
 #include <linux/of_platform.h>
 #include <linux/platform_device.h>
 
+#ifdef CONFIG_ARCH_OMAP2PLUS
+#include <plat/omap_device.h>
+#endif
+
 const struct of_device_id of_default_bus_match_table[] = {
 	{ .compatible = "simple-bus", },
 #ifdef CONFIG_ARM_AMBA
@@ -544,6 +548,36 @@  static const struct of_dev_auxdata *of_dev_lookup(const struct of_dev_auxdata *l
 	return NULL;
 }
 
+static struct omap_device_pm_latency omap_device_latency[] = {
+	[0] = {
+		.deactivate_func	= omap_device_idle_hwmods,
+		.activate_func		= omap_device_enable_hwmods,
+		.flags			= OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+	},
+};
+
+int of_omap_device_create(struct device_node *np, const char *name, int id,
+							void *platform_data,
+							int pd_size)
+{
+	struct omap_hwmod *oh;
+	struct platform_device *pdev;
+
+	oh = omap_hwmod_lookup(name);
+	if (!oh) {
+		pr_err("Could not look up %s\n", name);
+		return -EEXIST;
+	}
+
+	pdev = omap_device_build_dt(np, name, id, oh, platform_data,
+				sizeof(platform_data), omap_device_latency,
+				ARRAY_SIZE(omap_device_latency), 0);
+	WARN(IS_ERR(pdev), "Could not build omap_device for %s\n", name);
+
+	pr_info("DT: omap_device build for %s is successful\n", name);
+	return PTR_ERR(pdev);
+}
+
 /**
  * of_platform_bus_create() - Create a device for a node and its children.
  * @bus: device node of the bus to instantiate
@@ -565,7 +599,7 @@  static int of_platform_bus_create(struct device_node *bus,
 	struct platform_device *dev;
 	const char *bus_id = NULL;
 	void *platform_data = NULL;
-	int pd_size;
+	int pd_size = 0;
 	int id = -1;
 	int rc = 0;
 
@@ -597,6 +631,11 @@  static int of_platform_bus_create(struct device_node *bus,
 		return 0;
 	}
 
+	if (of_device_is_compatible(bus, "ti,omap-device")) {
+		of_omap_device_create(bus, bus_id, id, platform_data, pd_size);
+		return 0;
+	}
+
 	dev = of_platform_device_create_pdata(bus, bus_id, platform_data, parent);
 
 	/* override the id if auxdata gives an id */