From: Kevin Hilman <khilman@deeprootsystems.com>
To: Charulatha V <charu@ti.com>
Cc: linux-omap@vger.kernel.org, rnayak@ti.com, paul@pwsan.com,
tony@atomide.com
Subject: Re: [PATCH 10/11] OMAP: GPIO: Implement GPIO as a platform device
Date: Thu, 03 Jun 2010 11:58:25 -0700 [thread overview]
Message-ID: <87aarcq6y6.fsf@deeprootsystems.com> (raw)
In-Reply-To: <1274194260-16401-11-git-send-email-charu@ti.com> (Charulatha V.'s message of "Tue\, 18 May 2010 20\:20\:59 +0530")
Charulatha V <charu@ti.com> writes:
> This patch implements GPIO as a platform device. Also it
> implements OMAP2PLUS specific GPIO as HWMOD FW adapted device.
>
> GPIO APIs are used in machine_init functions. Hence it is
> required to complete GPIO probe before machine_init. Therefore
> GPIO device register and driver register are implemented as
> postcore_initcalls.
>
> Inorder to convert GPIO as platform device, modifications are
> required in clockxxxx_data.c files so that device names can be
> used to obtain clock instead of getting clocks by name/NULL ptr.
>
> GPIO driver uses runtime APIs.Clock FW APIs are used to enable
> iclk and fclk when CONFIG_PM_RUNTIME is not defined.
Something to discuss, and is not specific to your patch...
I handled the #ifndef CONFIG_PM_RUNTIME case as well when I did MMC,
but I'm starting to second guess that.
Rather, I think what we should do is leave the handling of that out of
the driver and instead just enable all hwmods at boot time if runtime
PM is enabled.
> omap_gpio_init() does nothing now and this function would be
> removed in the next patch as it's usage is spread across most of
> the board files.
>
> Signed-off-by: Charulatha V <charu@ti.com>
> Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Also, one other general comment. In the driver, you should use
dev_dbg() and dev_err() instead of pr_dbg() and pr_err(). Using these
will include the device name and be more useful.
> ---
> arch/arm/mach-omap1/Makefile | 6 +
> arch/arm/mach-omap1/clock_data.c | 2 +-
> arch/arm/mach-omap2/Makefile | 2 +-
> arch/arm/mach-omap2/clock2420_data.c | 10 +-
> arch/arm/mach-omap2/clock2430_data.c | 14 +-
> arch/arm/mach-omap2/clock3xxx_data.c | 24 +-
> arch/arm/mach-omap2/clock44xx_data.c | 24 +-
> arch/arm/plat-omap/gpio.c | 389 +++++++++++-----------------------
> 8 files changed, 178 insertions(+), 293 deletions(-)
small(er) is beautiful. I like the look of that diffstat. :)
>
> diff --git a/arch/arm/mach-omap1/Makefile b/arch/arm/mach-omap1/Makefile
> index b6a537c..dabd2be 100644
> --- a/arch/arm/mach-omap1/Makefile
> +++ b/arch/arm/mach-omap1/Makefile
> @@ -45,6 +45,12 @@ ifeq ($(CONFIG_ARCH_OMAP15XX),y)
> obj-$(CONFIG_MACH_OMAP_INNOVATOR) += fpga.o
> endif
>
> +# GPIO
> +obj-$(CONFIG_ARCH_OMAP730) += gpio7xx.o
> +obj-$(CONFIG_ARCH_OMAP850) += gpio7xx.o
> +obj-$(CONFIG_ARCH_OMAP15XX) += gpio15xx.o
> +obj-$(CONFIG_ARCH_OMAP16XX) += gpio16xx.o
> +
> # LEDs support
> led-$(CONFIG_MACH_OMAP_H2) += leds-h2p2-debug.o
> led-$(CONFIG_MACH_OMAP_H3) += leds-h2p2-debug.o
> diff --git a/arch/arm/mach-omap1/clock_data.c b/arch/arm/mach-omap1/clock_data.c
> index aa8558a..9bc2aa1 100644
> --- a/arch/arm/mach-omap1/clock_data.c
> +++ b/arch/arm/mach-omap1/clock_data.c
> @@ -589,7 +589,7 @@ static struct omap_clk omap_clks[] = {
> CLK(NULL, "ck_sossi", &sossi_ck, CK_16XX),
> CLK(NULL, "arm_ck", &arm_ck, CK_16XX | CK_1510 | CK_310),
> CLK(NULL, "armper_ck", &armper_ck.clk, CK_16XX | CK_1510 | CK_310),
> - CLK(NULL, "arm_gpio_ck", &arm_gpio_ck, CK_1510 | CK_310),
> + CLK("omap-gpio.0", "arm_gpio_ck", &arm_gpio_ck, CK_1510 | CK_310),
This doesn't look right for OMAP1. With a device name, you should
just drop the "arm_cpio_ck" part, so you can do a clk_get(dev, NULL).
> CLK(NULL, "armxor_ck", &armxor_ck.clk, CK_16XX | CK_1510 | CK_310 | CK_7XX),
> CLK(NULL, "armtim_ck", &armtim_ck.clk, CK_16XX | CK_1510 | CK_310),
> CLK("omap_wdt", "fck", &armwdt_ck.clk, CK_16XX | CK_1510 | CK_310),
> diff --git a/arch/arm/mach-omap2/Makefile b/arch/arm/mach-omap2/Makefile
> index 58a0474..d2d63ca 100644
> --- a/arch/arm/mach-omap2/Makefile
> +++ b/arch/arm/mach-omap2/Makefile
> @@ -3,7 +3,7 @@
> #
>
> # Common support
> -obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o
> +obj-y := id.o io.o control.o mux.o devices.o serial.o gpmc.o timer-gp.o gpio.o
>
> omap-2-3-common = irq.o sdrc.o
> hwmod-common = omap_hwmod.o \
> diff --git a/arch/arm/mach-omap2/clock2420_data.c b/arch/arm/mach-omap2/clock2420_data.c
> index d932b14..a693403 100644
> --- a/arch/arm/mach-omap2/clock2420_data.c
> +++ b/arch/arm/mach-omap2/clock2420_data.c
> @@ -1802,8 +1802,14 @@ static struct omap_clk omap2420_clks[] = {
> CLK(NULL, "uart2_fck", &uart2_fck, CK_242X),
> CLK(NULL, "uart3_ick", &uart3_ick, CK_242X),
> CLK(NULL, "uart3_fck", &uart3_fck, CK_242X),
> - CLK(NULL, "gpios_ick", &gpios_ick, CK_242X),
> - CLK(NULL, "gpios_fck", &gpios_fck, CK_242X),
> + CLK("omap-gpio.0", "ick", &gpios_ick, CK_242X),
> + CLK("omap-gpio.1", "ick", &gpios_ick, CK_242X),
> + CLK("omap-gpio.2", "ick", &gpios_ick, CK_242X),
> + CLK("omap-gpio.3", "ick", &gpios_ick, CK_242X),
> + CLK("omap-gpio.0", "fck", &gpios_fck, CK_242X),
> + CLK("omap-gpio.1", "fck", &gpios_fck, CK_242X),
> + CLK("omap-gpio.2", "fck", &gpios_fck, CK_242X),
> + CLK("omap-gpio.3", "fck", &gpios_fck, CK_242X),
> CLK("omap_wdt", "ick", &mpu_wdt_ick, CK_242X),
> CLK("omap_wdt", "fck", &mpu_wdt_fck, CK_242X),
> CLK(NULL, "sync_32k_ick", &sync_32k_ick, CK_242X),
> diff --git a/arch/arm/mach-omap2/clock2430_data.c b/arch/arm/mach-omap2/clock2430_data.c
> index 0438b6e..56bbcbc 100644
> --- a/arch/arm/mach-omap2/clock2430_data.c
> +++ b/arch/arm/mach-omap2/clock2430_data.c
> @@ -1896,8 +1896,14 @@ static struct omap_clk omap2430_clks[] = {
> CLK(NULL, "uart2_fck", &uart2_fck, CK_243X),
> CLK(NULL, "uart3_ick", &uart3_ick, CK_243X),
> CLK(NULL, "uart3_fck", &uart3_fck, CK_243X),
> - CLK(NULL, "gpios_ick", &gpios_ick, CK_243X),
> - CLK(NULL, "gpios_fck", &gpios_fck, CK_243X),
> + CLK("omap-gpio.0", "ick", &gpios_ick, CK_243X),
> + CLK("omap-gpio.1", "ick", &gpios_ick, CK_243X),
> + CLK("omap-gpio.2", "ick", &gpios_ick, CK_243X),
> + CLK("omap-gpio.3", "ick", &gpios_ick, CK_243X),
> + CLK("omap-gpio.0", "fck", &gpios_fck, CK_243X),
> + CLK("omap-gpio.1", "fck", &gpios_fck, CK_243X),
> + CLK("omap-gpio.2", "fck", &gpios_fck, CK_243X),
> + CLK("omap-gpio.3", "fck", &gpios_fck, CK_243X),
> CLK("omap_wdt", "ick", &mpu_wdt_ick, CK_243X),
> CLK("omap_wdt", "fck", &mpu_wdt_fck, CK_243X),
> CLK(NULL, "sync_32k_ick", &sync_32k_ick, CK_243X),
> @@ -1934,8 +1940,8 @@ static struct omap_clk omap2430_clks[] = {
> CLK("mmci-omap-hs.0", "fck", &mmchs1_fck, CK_243X),
> CLK("mmci-omap-hs.1", "ick", &mmchs2_ick, CK_243X),
> CLK("mmci-omap-hs.1", "fck", &mmchs2_fck, CK_243X),
> - CLK(NULL, "gpio5_ick", &gpio5_ick, CK_243X),
> - CLK(NULL, "gpio5_fck", &gpio5_fck, CK_243X),
> + CLK("omap-gpio.4", "ick", &gpio5_ick, CK_243X),
> + CLK("omap-gpio.4", "fck", &gpio5_fck, CK_243X),
> CLK(NULL, "mdm_intc_ick", &mdm_intc_ick, CK_243X),
> CLK("mmci-omap-hs.0", "mmchsdb_fck", &mmchsdb1_fck, CK_243X),
> CLK("mmci-omap-hs.1", "mmchsdb_fck", &mmchsdb2_fck, CK_243X),
> diff --git a/arch/arm/mach-omap2/clock3xxx_data.c b/arch/arm/mach-omap2/clock3xxx_data.c
> index 9cba556..3962234 100644
> --- a/arch/arm/mach-omap2/clock3xxx_data.c
> +++ b/arch/arm/mach-omap2/clock3xxx_data.c
> @@ -3407,13 +3407,13 @@ static struct omap_clk omap3xxx_clks[] = {
> CLK(NULL, "usim_fck", &usim_fck, CK_3430ES2),
> CLK(NULL, "gpt1_fck", &gpt1_fck, CK_3XXX),
> CLK(NULL, "wkup_32k_fck", &wkup_32k_fck, CK_3XXX),
> - CLK(NULL, "gpio1_dbck", &gpio1_dbck, CK_3XXX),
> + CLK("omap-gpio.0", "dbck", &gpio1_dbck, CK_3XXX),
> CLK("omap_wdt", "fck", &wdt2_fck, CK_3XXX),
> CLK(NULL, "wkup_l4_ick", &wkup_l4_ick, CK_343X),
> CLK(NULL, "usim_ick", &usim_ick, CK_3430ES2),
> CLK("omap_wdt", "ick", &wdt2_ick, CK_3XXX),
> CLK(NULL, "wdt1_ick", &wdt1_ick, CK_3XXX),
> - CLK(NULL, "gpio1_ick", &gpio1_ick, CK_3XXX),
> + CLK("omap-gpio.0", "ick", &gpio1_ick, CK_3XXX),
> CLK(NULL, "omap_32ksync_ick", &omap_32ksync_ick, CK_3XXX),
> CLK(NULL, "gpt12_ick", &gpt12_ick, CK_3XXX),
> CLK(NULL, "gpt1_ick", &gpt1_ick, CK_3XXX),
> @@ -3429,18 +3429,18 @@ static struct omap_clk omap3xxx_clks[] = {
> CLK(NULL, "gpt8_fck", &gpt8_fck, CK_3XXX),
> CLK(NULL, "gpt9_fck", &gpt9_fck, CK_3XXX),
> CLK(NULL, "per_32k_alwon_fck", &per_32k_alwon_fck, CK_3XXX),
> - CLK(NULL, "gpio6_dbck", &gpio6_dbck, CK_3XXX),
> - CLK(NULL, "gpio5_dbck", &gpio5_dbck, CK_3XXX),
> - CLK(NULL, "gpio4_dbck", &gpio4_dbck, CK_3XXX),
> - CLK(NULL, "gpio3_dbck", &gpio3_dbck, CK_3XXX),
> - CLK(NULL, "gpio2_dbck", &gpio2_dbck, CK_3XXX),
> + CLK("omap-gpio.5", "dbck", &gpio6_dbck, CK_3XXX),
> + CLK("omap-gpio.4", "dbck", &gpio5_dbck, CK_3XXX),
> + CLK("omap-gpio.3", "dbck", &gpio4_dbck, CK_3XXX),
> + CLK("omap-gpio.2", "dbck", &gpio3_dbck, CK_3XXX),
> + CLK("omap-gpio.1", "dbck", &gpio2_dbck, CK_3XXX),
> CLK(NULL, "wdt3_fck", &wdt3_fck, CK_3XXX),
> CLK(NULL, "per_l4_ick", &per_l4_ick, CK_3XXX),
> - CLK(NULL, "gpio6_ick", &gpio6_ick, CK_3XXX),
> - CLK(NULL, "gpio5_ick", &gpio5_ick, CK_3XXX),
> - CLK(NULL, "gpio4_ick", &gpio4_ick, CK_3XXX),
> - CLK(NULL, "gpio3_ick", &gpio3_ick, CK_3XXX),
> - CLK(NULL, "gpio2_ick", &gpio2_ick, CK_3XXX),
> + CLK("omap-gpio.5", "ick", &gpio6_ick, CK_3XXX),
> + CLK("omap-gpio.4", "ick", &gpio5_ick, CK_3XXX),
> + CLK("omap-gpio.3", "ick", &gpio4_ick, CK_3XXX),
> + CLK("omap-gpio.2", "ick", &gpio3_ick, CK_3XXX),
> + CLK("omap-gpio.1", "ick", &gpio2_ick, CK_3XXX),
> CLK(NULL, "wdt3_ick", &wdt3_ick, CK_3XXX),
> CLK(NULL, "uart3_ick", &uart3_ick, CK_3XXX),
> CLK(NULL, "gpt9_ick", &gpt9_ick, CK_3XXX),
> diff --git a/arch/arm/mach-omap2/clock44xx_data.c b/arch/arm/mach-omap2/clock44xx_data.c
> index a5c0c9c..4d76598 100644
> --- a/arch/arm/mach-omap2/clock44xx_data.c
> +++ b/arch/arm/mach-omap2/clock44xx_data.c
> @@ -2566,12 +2566,12 @@ static struct omap_clk omap44xx_clks[] = {
> CLK(NULL, "fdif_fck", &fdif_fck, CK_443X),
> CLK(NULL, "per_sgx_fclk", &per_sgx_fclk, CK_443X),
> CLK(NULL, "gfx_fck", &gfx_fck, CK_443X),
> - CLK(NULL, "gpio1_ick", &gpio1_ick, CK_443X),
> - CLK(NULL, "gpio2_ick", &gpio2_ick, CK_443X),
> - CLK(NULL, "gpio3_ick", &gpio3_ick, CK_443X),
> - CLK(NULL, "gpio4_ick", &gpio4_ick, CK_443X),
> - CLK(NULL, "gpio5_ick", &gpio5_ick, CK_443X),
> - CLK(NULL, "gpio6_ick", &gpio6_ick, CK_443X),
> + CLK("omap-gpio.0", "ick", &gpio1_ick, CK_443X),
> + CLK("omap-gpio.1", "ick", &gpio2_ick, CK_443X),
> + CLK("omap-gpio.2", "ick", &gpio3_ick, CK_443X),
> + CLK("omap-gpio.3", "ick", &gpio4_ick, CK_443X),
> + CLK("omap-gpio.4", "ick", &gpio5_ick, CK_443X),
> + CLK("omap-gpio.5", "ick", &gpio6_ick, CK_443X),
> CLK(NULL, "gpmc_ick", &gpmc_ick, CK_443X),
> CLK(NULL, "gpt1_fck", &gpt1_fck, CK_443X),
> CLK(NULL, "gpt10_fck", &gpt10_fck, CK_443X),
> @@ -2645,12 +2645,12 @@ static struct omap_clk omap44xx_clks[] = {
> CLK(NULL, "usim_fclk", &usim_fclk, CK_443X),
> CLK(NULL, "utmi_p1_gfclk_ck", &utmi_p1_gfclk_ck, CK_443X),
> CLK(NULL, "utmi_p2_gfclk_ck", &utmi_p2_gfclk_ck, CK_443X),
> - CLK(NULL, "gpio1_dbck", &dummy_ck, CK_443X),
> - CLK(NULL, "gpio2_dbck", &dummy_ck, CK_443X),
> - CLK(NULL, "gpio3_dbck", &dummy_ck, CK_443X),
> - CLK(NULL, "gpio4_dbck", &dummy_ck, CK_443X),
> - CLK(NULL, "gpio5_dbck", &dummy_ck, CK_443X),
> - CLK(NULL, "gpio6_dbck", &dummy_ck, CK_443X),
> + CLK("omap-gpio.0", "dbck", &dummy_ck, CK_443X),
> + CLK("omap-gpio.1", "dbck", &dummy_ck, CK_443X),
> + CLK("omap-gpio.2", "dbck", &dummy_ck, CK_443X),
> + CLK("omap-gpio.3", "dbck", &dummy_ck, CK_443X),
> + CLK("omap-gpio.4", "dbck", &dummy_ck, CK_443X),
> + CLK("omap-gpio.5", "dbck", &dummy_ck, CK_443X),
> CLK(NULL, "gpmc_ck", &dummy_ck, CK_443X),
> CLK(NULL, "gpt1_ick", &dummy_ck, CK_443X),
> CLK(NULL, "gpt2_ick", &dummy_ck, CK_443X),
> diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c
> index 70deebc..55a5796 100644
> --- a/arch/arm/plat-omap/gpio.c
> +++ b/arch/arm/plat-omap/gpio.c
> @@ -21,6 +21,8 @@
> #include <linux/err.h>
> #include <linux/clk.h>
> #include <linux/io.h>
> +#include <linux/slab.h>
> +#include <linux/pm_runtime.h>
>
> #include <mach/hardware.h>
> #include <asm/irq.h>
> @@ -147,102 +149,11 @@ struct gpio_bank {
> struct gpio_chip chip;
> struct clk *dbck;
> u32 mod_usage;
> + struct device *dev;
> + bool dbck_flag;
I don't really see a need for this flag. A failing clk_get() for a
debounce clock should indicate that the bank does not have/support a
debounce clock. After that, a non-null bank->dbclk will be an
indicator.
Kevin
next prev parent reply other threads:[~2010-06-03 18:58 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-18 14:50 [PATCH 00/11] OMAP: GPIO: Implement GPIO in HWMOD way Charulatha V
2010-05-18 14:50 ` [PATCH 01/11] OMAP: GPIO: Modify init() in preparation for platform device implementation Charulatha V
2010-05-18 14:50 ` [PATCH 02/11] OMAP: GPIO: Include platform_data structure for GPIO Charulatha V
2010-05-18 14:50 ` [PATCH 03/11] OMAP: GPIO: Introduce support for OMAP15xx chip GPIO init Charulatha V
2010-05-18 14:50 ` [PATCH 04/11] OMAP: GPIO: Introduce support for OMAP16xx " Charulatha V
2010-05-18 14:50 ` [PATCH 05/11] OMAP: GPIO: Introduce support for OMAP7xx " Charulatha V
2010-05-18 14:50 ` [PATCH 06/11] OMAP: GPIO: add GPIO hwmods structures for OMAP3 Charulatha V
2010-05-18 14:50 ` [PATCH 07/11] OMAP: GPIO: add GPIO hwmods structures for OMAP242X Charulatha V
2010-05-18 14:50 ` [PATCH 08/11] OMAP: GPIO: add GPIO hwmods structures for OMAP243X Charulatha V
2010-05-18 14:50 ` [PATCH 09/11] OMAP: GPIO: Introduce support for OMAP2PLUS chip GPIO init Charulatha V
2010-05-18 14:50 ` [PATCH 10/11] OMAP: GPIO: Implement GPIO as a platform device Charulatha V
2010-05-18 14:51 ` [PATCH 11/11] OMAP: GPIO: Remove omap_gpio_init() Charulatha V
[not found] ` <4BF2CD67.3090208@ti.com>
[not found] ` <EAF47CD23C76F840A9E7FCE10091EFAB02C5666252@dbde02.ent.ti.com>
2010-05-19 7:50 ` [PATCH 10/11] OMAP: GPIO: Implement GPIO as a platform device Cousson, Benoit
2010-05-20 16:36 ` Kevin Hilman
2010-06-03 18:58 ` Kevin Hilman [this message]
2010-06-04 6:05 ` Felipe Balbi
2010-05-18 23:46 ` [PATCH 09/11] OMAP: GPIO: Introduce support for OMAP2PLUS chip GPIO init Tony Lindgren
2010-05-19 7:26 ` Varadarajan, Charulatha
2010-06-03 18:36 ` Kevin Hilman
2010-06-03 18:31 ` [PATCH 07/11] OMAP: GPIO: add GPIO hwmods structures for OMAP242X Kevin Hilman
2010-06-03 18:30 ` [PATCH 06/11] OMAP: GPIO: add GPIO hwmods structures for OMAP3 Kevin Hilman
2010-05-18 23:41 ` [PATCH 01/11] OMAP: GPIO: Modify init() in preparation for platform device implementation Tony Lindgren
2010-05-19 7:23 ` Varadarajan, Charulatha
2010-05-19 8:01 ` Benoit Cousson
2010-05-19 13:57 ` Varadarajan, Charulatha
2010-05-19 15:32 ` Benoit Cousson
2010-05-18 23:42 ` [PATCH 00/11] OMAP: GPIO: Implement GPIO in HWMOD way Tony Lindgren
2010-05-19 7:30 ` Varadarajan, Charulatha
2010-06-03 18:21 ` Kevin Hilman
2010-05-19 8:54 ` Benoit Cousson
2010-05-19 13:55 ` Varadarajan, Charulatha
2010-05-19 15:24 ` Benoit Cousson
2010-06-03 18:46 ` Kevin Hilman
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=87aarcq6y6.fsf@deeprootsystems.com \
--to=khilman@deeprootsystems.com \
--cc=charu@ti.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.