linux-omap.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Benoit Cousson <b-cousson@ti.com>
To: "Varadarajan, Charulatha" <charu@ti.com>
Cc: "david-b@pacbell.net" <david-b@pacbell.net>,
	"broonie@opensource.wolfsonmicro.com"
	<broonie@opensource.wolfsonmicro.com>,
	"akpm@linux-foundation.org" <akpm@linux-foundation.org>,
	"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
	"paul@pwsan.com" <paul@pwsan.com>,
	"Nayak, Rajendra" <rnayak@ti.com>,
	"khilman@deeprootsystems.com" <khilman@deeprootsystems.com>,
	"tony@atomide.com" <tony@atomide.com>
Subject: Re: [PATCH 11/13 v3] OMAP: GPIO: Introduce support for OMAP2PLUS chip GPIO init
Date: Tue, 15 Jun 2010 19:22:53 +0200	[thread overview]
Message-ID: <4C17B6ED.203@ti.com> (raw)
In-Reply-To: <1276614348-5201-12-git-send-email-charu@ti.com>

On 6/15/2010 5:05 PM, Varadarajan, Charulatha wrote:
> From: Charulatha V<charu@ti.com>
>
> This patch adds support for handling GPIO as a HWMOD FW adapted
> platform device for OMAP2PLUS chips.
>
> gpio_init needs to be done before machine_init functions access gpio APIs.
> Hence gpio_init is made as a postcore_initcall.
>
> Signed-off-by: Charulatha V<charu@ti.com>
> ---
>   arch/arm/mach-omap2/gpio.c |  104 ++++++++++++++++++++++++++++++++++++++++++++
>   1 files changed, 104 insertions(+), 0 deletions(-)
>   create mode 100644 arch/arm/mach-omap2/gpio.c
>
> diff --git a/arch/arm/mach-omap2/gpio.c b/arch/arm/mach-omap2/gpio.c
> new file mode 100644
> index 0000000..993995a
> --- /dev/null
> +++ b/arch/arm/mach-omap2/gpio.c
> @@ -0,0 +1,104 @@
> +/*
> + * gpio.c - OMAP2PLUS-specific gpio code
> + *
> + * Copyright (C) 2010 Texas Instruments, Inc.
> + *
> + * Author:
> + *	Charulatha V<charu@ti.com>
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +
> +#include<linux/gpio.h>
> +#include<linux/err.h>
> +#include<linux/slab.h>
> +
> +#include<plat/omap_hwmod.h>
> +#include<plat/omap_device.h>
> +
> +static struct omap_device_pm_latency omap_gpio_latency[] = {
> +	[0] = {
> +		.deactivate_func = omap_device_idle_hwmods,
> +		.activate_func   = omap_device_enable_hwmods,
> +		.flags		 = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
> +	},
> +};
> +
> +static int omap2_init_gpio(struct omap_hwmod *oh, void *user)
> +{
> +	struct omap_device *od;
> +	struct omap_gpio_platform_data *pdata;
> +	char *name = "omap-gpio";
> +	static int id;
> +	struct omap_gpio_dev_attr *gpio_dev_data;
> +
> +	if (!oh)
> +		pr_err("Could not look up omap gpio %d\n", id + 1);
> +
> +	pdata = kzalloc(sizeof(struct omap_gpio_platform_data),
> +					GFP_KERNEL);
> +	if (!pdata) {
> +		pr_err("Memory allocation failed gpio%d\n", id + 1);
> +		return -ENOMEM;
> +	}
> +
> +	gpio_dev_data = (struct omap_gpio_dev_attr *)oh->dev_attr;
> +	pdata->gpio_attr = gpio_dev_data;
> +	pdata->method = (int)user;

That method seems to be an IP version specific information and not a Soc 
specific one. You should store that in the hwmod dev_attr.

What does 'method' mean in that context? Maybe the name should be revisited?


> +	pdata->virtual_irq_start = IH_GPIO_BASE + 32 * id;
> +
> +	od = omap_device_build(name, id, oh, pdata,
> +				sizeof(*pdata),	omap_gpio_latency,
> +				ARRAY_SIZE(omap_gpio_latency),
> +				false);
> +	WARN(IS_ERR(od), "Cant build omap_device for %s:%s.\n",
> +				name, oh->name);
> +
> +	id++;
> +	return 0;
> +}
> +
> +static int __init gpio_init(int method)
> +{
> +	return omap_hwmod_for_each_by_class("gpio", omap2_init_gpio,
> +						(void *)method);
> +}
> +
> +/*
> + * gpio_init needs to be done before
> + * machine_init functions access gpio APIs.
> + * Hence gpio_init is a postcore_initcall.
> + */
> +#ifdef CONFIG_ARCH_OMAP2
> +static int __init omap24xx_gpio_init(void)
> +{	if (!cpu_is_omap24xx())
> +		return -EINVAL;
> +
> +	return gpio_init(METHOD_GPIO_24XX);
> +}
> +postcore_initcall(omap24xx_gpio_init);
> +#endif
> +
> +#ifdef CONFIG_ARCH_OMAP3
> +static int __init omap3xxx_gpio_init(void)
> +{
> +	if (!cpu_is_omap34xx())
> +		return -EINVAL;
> +
> +	return gpio_init(METHOD_GPIO_24XX);
> +}
> +postcore_initcall(omap3xxx_gpio_init);
> +#endif
> +
> +#ifdef CONFIG_ARCH_OMAP4
> +static int __init omap44xx_gpio_init(void)
> +{
> +	if (!cpu_is_omap44xx())
> +		return -EINVAL;
> +
> +	return gpio_init(METHOD_GPIO_44XX);
> +}

You can avoid all this duplication of code by using the dev_attr instead 
of using a parameter.

Benoit

  parent reply	other threads:[~2010-06-15 17:23 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-06-15 15:05 [PATCH 00/13 v3] OMAP: GPIO: Implement GPIO in HWMOD way Varadarajan, Charulatha
2010-06-15 15:05 ` [PATCH 01/13 v3] OMAP: GPIO: Modify init() in preparation for platform device implementation Varadarajan, Charulatha
2010-06-15 15:05   ` [PATCH 02/13 v3] OMAP: GPIO: Populate GPIO base address in omapxxxx.h Varadarajan, Charulatha
2010-06-15 15:05     ` [PATCH 03/13 v3] OMAP: GPIO: Include platform_data structure for GPIO Varadarajan, Charulatha
2010-06-15 15:05       ` [PATCH 04/13 v3] OMAP: GPIO: Introduce support for OMAP15xx chip GPIO init Varadarajan, Charulatha
2010-06-15 15:05         ` [PATCH 05/13 v3] OMAP: GPIO: Introduce support for OMAP16xx " Varadarajan, Charulatha
2010-06-15 15:05           ` [PATCH 06/13 v3] OMAP: GPIO: Introduce support for OMAP7xx " Varadarajan, Charulatha
2010-06-15 15:05             ` [PATCH 07/13 v3] OMAP: GPIO: add GPIO hwmods structures for OMAP3 Varadarajan, Charulatha
2010-06-15 15:05               ` [PATCH 08/13 v3] OMAP: GPIO: add GPIO hwmods structures for OMAP242X Varadarajan, Charulatha
2010-06-15 15:05                 ` [PATCH 09/13 v3] OMAP: GPIO: add GPIO hwmods structures for OMAP243X Varadarajan, Charulatha
2010-06-15 15:05                   ` [PATCH 10/13 v3] OMAP: GPIO: Add gpio dev_attr and correct clks in OMAP4 hwmod struct Varadarajan, Charulatha
2010-06-15 15:05                     ` [PATCH 11/13 v3] OMAP: GPIO: Introduce support for OMAP2PLUS chip GPIO init Varadarajan, Charulatha
2010-06-15 15:05                       ` [PATCH 12/13 v3] OMAP: GPIO: Implement GPIO as a platform device Varadarajan, Charulatha
2010-06-15 15:05                         ` [PATCH 13/13 v3] OMAP: GPIO: Remove omap_gpio_init() Varadarajan, Charulatha
2010-06-16 20:34                         ` [PATCH 12/13 v3] OMAP: GPIO: Implement GPIO as a platform device Benoit Cousson
2010-06-21 16:02                           ` Varadarajan, Charulatha
2010-06-15 17:22                       ` Benoit Cousson [this message]
2010-06-16  6:55                         ` [PATCH 11/13 v3] OMAP: GPIO: Introduce support for OMAP2PLUS chip GPIO init Varadarajan, Charulatha
2010-06-16  7:21                           ` Shilimkar, Santosh
2010-06-16  8:46                             ` Varadarajan, Charulatha
2010-06-16  9:35                               ` Cousson, Benoit
2010-06-16  9:06                             ` Cousson, Benoit
2010-06-16 15:43                               ` Varadarajan, Charulatha
2010-06-17 16:34                                 ` Kevin Hilman
2010-06-21 15:53                                   ` Varadarajan, Charulatha
2010-06-15 16:40                     ` [PATCH 10/13 v3] OMAP: GPIO: Add gpio dev_attr and correct clks in OMAP4 hwmod struct Benoit Cousson
2010-06-16  6:54                       ` Varadarajan, Charulatha
2010-06-16  8:57                         ` Cousson, Benoit
2010-06-16 15:41                           ` Varadarajan, Charulatha
2010-06-16 20:25                             ` Benoit Cousson
2010-06-17 16:42                             ` Kevin Hilman
2010-06-22 13:30                               ` Varadarajan, Charulatha
2010-06-22 14:35                                 ` Kevin Hilman
2010-06-24  8:44               ` [PATCH 07/13 v3] OMAP: GPIO: add GPIO hwmods structures for OMAP3 DebBarma, Tarun Kanti
2010-06-17 20:23         ` [PATCH 04/13 v3] OMAP: GPIO: Introduce support for OMAP15xx chip GPIO init Kevin Hilman
2010-06-21 10:52           ` Varadarajan, Charulatha

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4C17B6ED.203@ti.com \
    --to=b-cousson@ti.com \
    --cc=akpm@linux-foundation.org \
    --cc=broonie@opensource.wolfsonmicro.com \
    --cc=charu@ti.com \
    --cc=david-b@pacbell.net \
    --cc=khilman@deeprootsystems.com \
    --cc=linux-omap@vger.kernel.org \
    --cc=paul@pwsan.com \
    --cc=rnayak@ti.com \
    --cc=tony@atomide.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).