From: Alexandre Belloni <alexandre.belloni@free-electrons.com> To: Nicolas Ferre <nicolas.ferre@atmel.com>, Boris Brezillon <boris.brezillon@free-electrons.com>, Stephen Boyd <sboyd@codeaurora.org> Cc: Jean-Christophe Plagniol-Villard <plagnioj@jcrosoft.com>, Michael Turquette <mturquette@baylibre.com>, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, Alexandre Belloni <alexandre.belloni@free-electrons.com> Subject: [PATCH v4 01/13] clk: at91: make use of syscon to share PMC registers in several drivers Date: Wed, 27 Jan 2016 17:11:00 +0100 [thread overview] Message-ID: <1453911072-23608-2-git-send-email-alexandre.belloni@free-electrons.com> (raw) In-Reply-To: <1453911072-23608-1-git-send-email-alexandre.belloni@free-electrons.com> From: Boris Brezillon <boris.brezillon@free-electrons.com> The PMC block is providing several functionnalities: - system clk management - cpuidle - platform suspend Replace the void __iomem *regs field by a regmap (retrieved using syscon) so that we can later share the regmap across several drivers without exporting a new specific API or a global void __iomem * variable. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> Acked-by: Stephen Boyd <sboyd@codeaurora.org> --- arch/arm/mach-at91/Kconfig | 1 + drivers/clk/at91/pmc.c | 12 ++++++++---- drivers/clk/at91/pmc.h | 11 ++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 23be2e433097..08047afdf38e 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -104,6 +104,7 @@ config HAVE_AT91_USB_CLK config COMMON_CLK_AT91 bool select COMMON_CLK + select MFD_SYSCON config HAVE_AT91_SMD bool diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 8476b570779b..481146029b2e 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -19,6 +19,7 @@ #include <linux/irqchip/chained_irq.h> #include <linux/irqdomain.h> #include <linux/of_irq.h> +#include <linux/mfd/syscon.h> #include <asm/proc-fns.h> @@ -223,6 +224,7 @@ static const struct at91_pmc_caps sama5d3_caps = { }; static struct at91_pmc *__init at91_pmc_init(struct device_node *np, + struct regmap *regmap, void __iomem *regbase, int virq, const struct at91_pmc_caps *caps) { @@ -238,7 +240,7 @@ static struct at91_pmc *__init at91_pmc_init(struct device_node *np, return NULL; spin_lock_init(&pmc->lock); - pmc->regbase = regbase; + pmc->regmap = regmap; pmc->virq = virq; pmc->caps = caps; @@ -394,16 +396,18 @@ static void __init of_at91_pmc_setup(struct device_node *np, void (*clk_setup)(struct device_node *, struct at91_pmc *); const struct of_device_id *clk_id; void __iomem *regbase = of_iomap(np, 0); + struct regmap *regmap; int virq; - if (!regbase) - return; + regmap = syscon_node_to_regmap(np); + if (IS_ERR(regmap)) + panic("Could not retrieve syscon regmap"); virq = irq_of_parse_and_map(np, 0); if (!virq) return; - pmc = at91_pmc_init(np, regbase, virq, caps); + pmc = at91_pmc_init(np, regmap, regbase, virq, caps); if (!pmc) return; for_each_child_of_node(np, childnp) { diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h index f65739272779..e1fc0b0e1d8c 100644 --- a/drivers/clk/at91/pmc.h +++ b/drivers/clk/at91/pmc.h @@ -14,6 +14,7 @@ #include <linux/io.h> #include <linux/irqdomain.h> +#include <linux/regmap.h> #include <linux/spinlock.h> struct clk_range { @@ -28,7 +29,7 @@ struct at91_pmc_caps { }; struct at91_pmc { - void __iomem *regbase; + struct regmap *regmap; int virq; spinlock_t lock; const struct at91_pmc_caps *caps; @@ -48,12 +49,16 @@ static inline void pmc_unlock(struct at91_pmc *pmc) static inline u32 pmc_read(struct at91_pmc *pmc, int offset) { - return readl(pmc->regbase + offset); + unsigned int ret = 0; + + regmap_read(pmc->regmap, offset, &ret); + + return ret; } static inline void pmc_write(struct at91_pmc *pmc, int offset, u32 value) { - writel(value, pmc->regbase + offset); + regmap_write(pmc->regmap, offset, value); } int of_at91_get_clk_range(struct device_node *np, const char *propname, -- 2.5.0
WARNING: multiple messages have this Message-ID (diff)
From: alexandre.belloni@free-electrons.com (Alexandre Belloni) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH v4 01/13] clk: at91: make use of syscon to share PMC registers in several drivers Date: Wed, 27 Jan 2016 17:11:00 +0100 [thread overview] Message-ID: <1453911072-23608-2-git-send-email-alexandre.belloni@free-electrons.com> (raw) In-Reply-To: <1453911072-23608-1-git-send-email-alexandre.belloni@free-electrons.com> From: Boris Brezillon <boris.brezillon@free-electrons.com> The PMC block is providing several functionnalities: - system clk management - cpuidle - platform suspend Replace the void __iomem *regs field by a regmap (retrieved using syscon) so that we can later share the regmap across several drivers without exporting a new specific API or a global void __iomem * variable. Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> Acked-by: Stephen Boyd <sboyd@codeaurora.org> --- arch/arm/mach-at91/Kconfig | 1 + drivers/clk/at91/pmc.c | 12 ++++++++---- drivers/clk/at91/pmc.h | 11 ++++++++--- 3 files changed, 17 insertions(+), 7 deletions(-) diff --git a/arch/arm/mach-at91/Kconfig b/arch/arm/mach-at91/Kconfig index 23be2e433097..08047afdf38e 100644 --- a/arch/arm/mach-at91/Kconfig +++ b/arch/arm/mach-at91/Kconfig @@ -104,6 +104,7 @@ config HAVE_AT91_USB_CLK config COMMON_CLK_AT91 bool select COMMON_CLK + select MFD_SYSCON config HAVE_AT91_SMD bool diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c index 8476b570779b..481146029b2e 100644 --- a/drivers/clk/at91/pmc.c +++ b/drivers/clk/at91/pmc.c @@ -19,6 +19,7 @@ #include <linux/irqchip/chained_irq.h> #include <linux/irqdomain.h> #include <linux/of_irq.h> +#include <linux/mfd/syscon.h> #include <asm/proc-fns.h> @@ -223,6 +224,7 @@ static const struct at91_pmc_caps sama5d3_caps = { }; static struct at91_pmc *__init at91_pmc_init(struct device_node *np, + struct regmap *regmap, void __iomem *regbase, int virq, const struct at91_pmc_caps *caps) { @@ -238,7 +240,7 @@ static struct at91_pmc *__init at91_pmc_init(struct device_node *np, return NULL; spin_lock_init(&pmc->lock); - pmc->regbase = regbase; + pmc->regmap = regmap; pmc->virq = virq; pmc->caps = caps; @@ -394,16 +396,18 @@ static void __init of_at91_pmc_setup(struct device_node *np, void (*clk_setup)(struct device_node *, struct at91_pmc *); const struct of_device_id *clk_id; void __iomem *regbase = of_iomap(np, 0); + struct regmap *regmap; int virq; - if (!regbase) - return; + regmap = syscon_node_to_regmap(np); + if (IS_ERR(regmap)) + panic("Could not retrieve syscon regmap"); virq = irq_of_parse_and_map(np, 0); if (!virq) return; - pmc = at91_pmc_init(np, regbase, virq, caps); + pmc = at91_pmc_init(np, regmap, regbase, virq, caps); if (!pmc) return; for_each_child_of_node(np, childnp) { diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h index f65739272779..e1fc0b0e1d8c 100644 --- a/drivers/clk/at91/pmc.h +++ b/drivers/clk/at91/pmc.h @@ -14,6 +14,7 @@ #include <linux/io.h> #include <linux/irqdomain.h> +#include <linux/regmap.h> #include <linux/spinlock.h> struct clk_range { @@ -28,7 +29,7 @@ struct at91_pmc_caps { }; struct at91_pmc { - void __iomem *regbase; + struct regmap *regmap; int virq; spinlock_t lock; const struct at91_pmc_caps *caps; @@ -48,12 +49,16 @@ static inline void pmc_unlock(struct at91_pmc *pmc) static inline u32 pmc_read(struct at91_pmc *pmc, int offset) { - return readl(pmc->regbase + offset); + unsigned int ret = 0; + + regmap_read(pmc->regmap, offset, &ret); + + return ret; } static inline void pmc_write(struct at91_pmc *pmc, int offset, u32 value) { - writel(value, pmc->regbase + offset); + regmap_write(pmc->regmap, offset, value); } int of_at91_get_clk_range(struct device_node *np, const char *propname, -- 2.5.0
next prev parent reply other threads:[~2016-01-27 16:13 UTC|newest] Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top 2016-01-27 16:10 [PATCH v4 00/13] ARM: at91: PMC driver rework Alexandre Belloni 2016-01-27 16:10 ` Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni [this message] 2016-01-27 16:11 ` [PATCH v4 01/13] clk: at91: make use of syscon to share PMC registers in several drivers Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 02/13] clk: at91: make use of syscon/regmap internally Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-28 8:31 ` Stephen Boyd 2016-01-28 8:31 ` Stephen Boyd 2016-01-27 16:11 ` [PATCH v4 03/13] clk: at91: remove IRQ handling and use polling Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-28 8:31 ` Stephen Boyd 2016-01-28 8:31 ` Stephen Boyd 2016-01-27 16:11 ` [PATCH v4 04/13] clk: at91: pmc: merge at91_pmc_init in atmel_pmc_probe Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 05/13] clk: at91: pmc: move pmc structures to C file Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 06/13] ARM: at91: pm: simply call at91_pm_init Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 07/13] ARM: at91: pm: find and remap the pmc Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:17 ` [PATCH v5 " Alexandre Belloni 2016-01-27 16:17 ` Alexandre Belloni 2016-01-27 17:55 ` [PATCH v4 " kbuild test robot 2016-01-27 17:55 ` kbuild test robot 2016-01-28 8:33 ` Stephen Boyd 2016-01-28 8:33 ` Stephen Boyd 2016-01-28 8:38 ` Alexandre Belloni 2016-01-28 8:38 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 08/13] ARM: at91: pm: move idle functions to pm.c Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 09/13] ARM: at91: remove useless includes and function prototypes Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 10/13] usb: gadget: atmel: access the PMC using regmap Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 11/13] clk: at91: pmc: drop at91_pmc_base Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-27 16:11 ` [PATCH v4 12/13] clk: at91: pmc: remove useless capacities handling Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-28 8:30 ` Stephen Boyd 2016-01-28 8:30 ` Stephen Boyd 2016-01-27 16:11 ` [PATCH v4 13/13] clk: at91: remove useless includes Alexandre Belloni 2016-01-27 16:11 ` Alexandre Belloni 2016-01-28 8:30 ` Stephen Boyd 2016-01-28 8:30 ` Stephen Boyd
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=1453911072-23608-2-git-send-email-alexandre.belloni@free-electrons.com \ --to=alexandre.belloni@free-electrons.com \ --cc=boris.brezillon@free-electrons.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-clk@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mturquette@baylibre.com \ --cc=nicolas.ferre@atmel.com \ --cc=plagnioj@jcrosoft.com \ --cc=sboyd@codeaurora.org \ /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: linkBe 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.