From: Simon Horman <horms@verge.net.au> To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 4/7] sh: clkfwk: add sh_clk_fsidiv_register() Date: Thu, 08 Nov 2012 01:27:33 +0000 [thread overview] Message-ID: <1352338056-21107-5-git-send-email-horms@verge.net.au> (raw) In-Reply-To: <1352338056-21107-1-git-send-email-horms@verge.net.au> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> This patch adds sh_clk_fsidiv_register() to share FSI-DIV clock code Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Simon Horman <horms@verge.net.au> --- drivers/sh/clk/cpg.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/sh_clk.h | 9 +++++ 2 files changed, 95 insertions(+) diff --git a/drivers/sh/clk/cpg.c b/drivers/sh/clk/cpg.c index 07e9fb4..b3dc441 100644 --- a/drivers/sh/clk/cpg.c +++ b/drivers/sh/clk/cpg.c @@ -361,3 +361,89 @@ int __init sh_clk_div4_reparent_register(struct clk *clks, int nr, return sh_clk_div_register_ops(clks, nr, table, &sh_clk_div4_reparent_clk_ops); } + +/* FSI-DIV */ +static unsigned long fsidiv_recalc(struct clk *clk) +{ + u32 value; + + value = __raw_readl(clk->mapping->base); + + value >>= 16; + if (value < 2) + return clk->parent->rate; + + return clk->parent->rate / value; +} + +static long fsidiv_round_rate(struct clk *clk, unsigned long rate) +{ + return clk_rate_div_range_round(clk, 1, 0xffff, rate); +} + +static void fsidiv_disable(struct clk *clk) +{ + __raw_writel(0, clk->mapping->base); +} + +static int fsidiv_enable(struct clk *clk) +{ + u32 value; + + value = __raw_readl(clk->mapping->base) >> 16; + if (value < 2) + return 0; + + __raw_writel((value << 16) | 0x3, clk->mapping->base); + + return 0; +} + +static int fsidiv_set_rate(struct clk *clk, unsigned long rate) +{ + u32 val; + int idx; + + idx = (clk->parent->rate / rate) & 0xffff; + if (idx < 2) + __raw_writel(0, clk->mapping->base); + else + __raw_writel(idx << 16, clk->mapping->base); + + return 0; +} + +static struct sh_clk_ops fsidiv_clk_ops = { + .recalc = fsidiv_recalc, + .round_rate = fsidiv_round_rate, + .set_rate = fsidiv_set_rate, + .enable = fsidiv_enable, + .disable = fsidiv_disable, +}; + +int __init sh_clk_fsidiv_register(struct clk *clks, int nr) +{ + struct clk_mapping *map; + int i; + + for (i = 0; i < nr; i++) { + + map = kzalloc(sizeof(struct clk_mapping), GFP_KERNEL); + if (!map) { + pr_err("%s: unable to alloc memory\n", __func__); + return -ENOMEM; + } + + /* clks[i].enable_reg came from SH_CLK_FSIDIV() */ + map->phys = (phys_addr_t)clks[i].enable_reg; + map->len = 8; + + clks[i].enable_reg = 0; /* remove .enable_reg */ + clks[i].ops = &fsidiv_clk_ops; + clks[i].mapping = map; + + clk_register(&clks[i]); + } + + return 0; +} diff --git a/include/linux/sh_clk.h b/include/linux/sh_clk.h index 5091091..60c7239 100644 --- a/include/linux/sh_clk.h +++ b/include/linux/sh_clk.h @@ -199,4 +199,13 @@ int sh_clk_div6_reparent_register(struct clk *clks, int nr); #define CLKDEV_DEV_ID(_id, _clk) { .dev_id = _id, .clk = _clk } #define CLKDEV_ICK_ID(_cid, _did, _clk) { .con_id = _cid, .dev_id = _did, .clk = _clk } +/* .enable_reg will be updated to .mapping on sh_clk_fsidiv_register() */ +#define SH_CLK_FSIDIV(_reg, _parent) \ +{ \ + .enable_reg = (void __iomem *)_reg, \ + .parent = _parent, \ +} + +int sh_clk_fsidiv_register(struct clk *clks, int nr); + #endif /* __SH_CLOCK_H */ -- 1.7.10.4
WARNING: multiple messages have this Message-ID (diff)
From: horms@verge.net.au (Simon Horman) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 4/7] sh: clkfwk: add sh_clk_fsidiv_register() Date: Thu, 8 Nov 2012 10:27:33 +0900 [thread overview] Message-ID: <1352338056-21107-5-git-send-email-horms@verge.net.au> (raw) In-Reply-To: <1352338056-21107-1-git-send-email-horms@verge.net.au> From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> This patch adds sh_clk_fsidiv_register() to share FSI-DIV clock code Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Simon Horman <horms@verge.net.au> --- drivers/sh/clk/cpg.c | 86 ++++++++++++++++++++++++++++++++++++++++++++++++ include/linux/sh_clk.h | 9 +++++ 2 files changed, 95 insertions(+) diff --git a/drivers/sh/clk/cpg.c b/drivers/sh/clk/cpg.c index 07e9fb4..b3dc441 100644 --- a/drivers/sh/clk/cpg.c +++ b/drivers/sh/clk/cpg.c @@ -361,3 +361,89 @@ int __init sh_clk_div4_reparent_register(struct clk *clks, int nr, return sh_clk_div_register_ops(clks, nr, table, &sh_clk_div4_reparent_clk_ops); } + +/* FSI-DIV */ +static unsigned long fsidiv_recalc(struct clk *clk) +{ + u32 value; + + value = __raw_readl(clk->mapping->base); + + value >>= 16; + if (value < 2) + return clk->parent->rate; + + return clk->parent->rate / value; +} + +static long fsidiv_round_rate(struct clk *clk, unsigned long rate) +{ + return clk_rate_div_range_round(clk, 1, 0xffff, rate); +} + +static void fsidiv_disable(struct clk *clk) +{ + __raw_writel(0, clk->mapping->base); +} + +static int fsidiv_enable(struct clk *clk) +{ + u32 value; + + value = __raw_readl(clk->mapping->base) >> 16; + if (value < 2) + return 0; + + __raw_writel((value << 16) | 0x3, clk->mapping->base); + + return 0; +} + +static int fsidiv_set_rate(struct clk *clk, unsigned long rate) +{ + u32 val; + int idx; + + idx = (clk->parent->rate / rate) & 0xffff; + if (idx < 2) + __raw_writel(0, clk->mapping->base); + else + __raw_writel(idx << 16, clk->mapping->base); + + return 0; +} + +static struct sh_clk_ops fsidiv_clk_ops = { + .recalc = fsidiv_recalc, + .round_rate = fsidiv_round_rate, + .set_rate = fsidiv_set_rate, + .enable = fsidiv_enable, + .disable = fsidiv_disable, +}; + +int __init sh_clk_fsidiv_register(struct clk *clks, int nr) +{ + struct clk_mapping *map; + int i; + + for (i = 0; i < nr; i++) { + + map = kzalloc(sizeof(struct clk_mapping), GFP_KERNEL); + if (!map) { + pr_err("%s: unable to alloc memory\n", __func__); + return -ENOMEM; + } + + /* clks[i].enable_reg came from SH_CLK_FSIDIV() */ + map->phys = (phys_addr_t)clks[i].enable_reg; + map->len = 8; + + clks[i].enable_reg = 0; /* remove .enable_reg */ + clks[i].ops = &fsidiv_clk_ops; + clks[i].mapping = map; + + clk_register(&clks[i]); + } + + return 0; +} diff --git a/include/linux/sh_clk.h b/include/linux/sh_clk.h index 5091091..60c7239 100644 --- a/include/linux/sh_clk.h +++ b/include/linux/sh_clk.h @@ -199,4 +199,13 @@ int sh_clk_div6_reparent_register(struct clk *clks, int nr); #define CLKDEV_DEV_ID(_id, _clk) { .dev_id = _id, .clk = _clk } #define CLKDEV_ICK_ID(_cid, _did, _clk) { .con_id = _cid, .dev_id = _did, .clk = _clk } +/* .enable_reg will be updated to .mapping on sh_clk_fsidiv_register() */ +#define SH_CLK_FSIDIV(_reg, _parent) \ +{ \ + .enable_reg = (void __iomem *)_reg, \ + .parent = _parent, \ +} + +int sh_clk_fsidiv_register(struct clk *clks, int nr); + #endif /* __SH_CLOCK_H */ -- 1.7.10.4
next prev parent reply other threads:[~2012-11-08 1:27 UTC|newest] Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top 2012-10-28 2:26 [GIT PULL v2] Renesas ARM-based SoC boards for v3.8 Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 01/12] ARM: shmobile: r8a7740: Enable PMU Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 11:28 ` Sergei Shtylyov 2012-10-28 11:28 ` Sergei Shtylyov 2012-10-29 5:11 ` Simon Horman 2012-10-29 5:11 ` Simon Horman 2012-10-28 2:26 ` [PATCH 02/12] ARM: shmobile: kzm9g: enable magnetometer ak8975 Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 03/12] ARM: shmobile: kzm9g: enable three-axis digital accelerometer ADXL345 Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 04/12] ARM: shmobile: kzm9g: enable DMAEngine on SHDI0 and SDHI2 Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 05/12] ARM: mach-shmobile: add FLCTL DMA slave definitions for sh7372 Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 06/12] ARM: shmobile: armadillo800eva: enable restart Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 07/12] ARM: shmobile: r8a7779: add HSPI clock support Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 08/12] ARM: shmobile: r8a7779: add I2C " Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 09/12] ARM: shmobile: r8a7779: add I2C driver support Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 10/12] ARM: shmobile: marzen: add HSPI support Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 11/12] ARM: shmobile: r8a7740: fixup DT machine desc name typo Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 2:26 ` [PATCH 12/12] ARM: mach-shmobile: Use DT_MACHINE for mackerel Simon Horman 2012-10-28 2:26 ` Simon Horman 2012-10-28 9:37 ` Thomas Petazzoni 2012-10-28 9:37 ` Thomas Petazzoni 2012-10-28 10:44 ` Simon Horman 2012-10-28 10:44 ` Simon Horman 2012-10-28 10:57 ` Thomas Petazzoni 2012-10-28 10:57 ` Thomas Petazzoni 2012-11-08 1:27 ` [GIT PULL v2] Renesas ARM-based SoC boards for v3.8 #2 Simon Horman 2012-11-08 1:27 ` Simon Horman 2012-11-08 1:27 ` [PATCH 1/7] ARM: shmobile: marzen: add USB phy support Simon Horman 2012-11-08 1:27 ` Simon Horman 2012-11-08 1:27 ` [PATCH 2/7] ARM: shmobile: marzen: add USB EHCI driver support Simon Horman 2012-11-08 1:27 ` Simon Horman 2012-11-08 1:27 ` [PATCH 3/7] ARM: shmobile: marzen: add USB OHCI " Simon Horman 2012-11-08 1:27 ` Simon Horman 2012-11-08 1:27 ` Simon Horman [this message] 2012-11-08 1:27 ` [PATCH 4/7] sh: clkfwk: add sh_clk_fsidiv_register() Simon Horman 2012-11-08 1:27 ` [PATCH 5/7] ARM: shmobile: sh7372: sh7372_fsidivX_clk become non-global Simon Horman 2012-11-08 1:27 ` Simon Horman 2012-11-08 1:27 ` [PATCH 6/7] ARM: shmobile: sh7372: use sh_clk_fsidiv_register() for FSI-DIV clocks Simon Horman 2012-11-08 1:27 ` Simon Horman 2012-11-08 1:27 ` [PATCH 7/7] ARM: shmobile: r8a7740: add FSI-DVI clocks Simon Horman 2012-11-08 1:27 ` Simon Horman 2012-11-08 6:29 ` [GIT PULL v2] Renesas ARM-based SoC boards for v3.8 #2 Simon Horman 2012-11-08 6:29 ` Simon Horman 2012-11-20 0:43 ` [GIT PULL v2] Renesas ARM-based SoC boards for v3.8 #3 Simon Horman 2012-11-20 0:43 ` Simon Horman 2012-11-20 0:43 ` [PATCH] ARM: shmobile: mackerel: Add FLCTL IRQ resource Simon Horman 2012-11-20 0:43 ` Simon Horman 2012-11-21 7:21 ` [GIT PULL v2] Renesas ARM-based SoC boards for v3.8 #3 Olof Johansson 2012-11-21 7:21 ` Olof Johansson 2013-03-19 2:17 ` [GIT PULL v2] Renesas ARM-based SoC board updates for v3.10 Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 01/13] ARM: shmobile: use GPIO SD-card detection on armadillo800eva Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 02/13] ARM: shmobile: switch SDHI0 to GPIO regulator " Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 03/13] ARM: shmobile: streamline mackerel SD and MMC devices Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 04/13] ARM: shmobile: mark mackerel sh_mmcif_device __maybe_unused Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 05/13] ARM: shmobile: marzen: Reference DT implementation Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 06/13] ARM: shmobile: kzm9g: " Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 07/13] ARM: shmobile: parse DT and configure pinmux early on kzm9g-reference Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 08/13] ARM: shmobile: SDHI and MMCIF interfaces to kzm9g-reference Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 09/13] ARM: shmobile: simplify kzm9g Kconfig dependencies Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 10/13] ARM: shmobile: kzm9g: Remove warning about SMP Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:17 ` [PATCH 11/13] ARM: shmobile: kzm9g: Trim reference DT_MACHINE_START Simon Horman 2013-03-19 2:17 ` Simon Horman 2013-03-19 2:18 ` [PATCH 12/13] ARM: shmobile: marzen: Use gic_iid macro for ICCIAR / interrupt ID Simon Horman 2013-03-19 2:18 ` Simon Horman 2013-03-19 2:18 ` [PATCH 13/13] ARM: shmobile: kzm9g: correct smsc regulator registration Simon Horman 2013-03-19 2:18 ` Simon Horman 2013-03-21 17:18 ` [GIT PULL v2] Renesas ARM-based SoC board updates for v3.10 Arnd Bergmann 2013-03-21 17:18 ` Arnd Bergmann 2013-03-21 19:22 ` Arnd Bergmann 2013-03-21 19:22 ` Arnd Bergmann 2013-03-22 0:32 ` Simon Horman 2013-03-22 0:32 ` Simon Horman 2013-03-22 0:58 ` Simon Horman 2013-03-22 0:58 ` Simon Horman 2013-03-22 12:40 ` Arnd Bergmann 2013-03-22 12:40 ` Arnd Bergmann 2013-03-22 13:52 ` Simon Horman 2013-03-22 13:52 ` Simon Horman 2013-03-22 15:39 ` Arnd Bergmann 2013-03-22 15:39 ` Arnd Bergmann 2013-03-27 5:30 ` Simon Horman 2013-03-27 5:30 ` Simon Horman 2013-03-27 9:54 ` Magnus Damm 2013-03-27 9:54 ` Magnus Damm 2013-03-27 11:37 ` Arnd Bergmann 2013-03-27 11:37 ` Arnd Bergmann 2013-04-01 9:15 ` Magnus Damm 2013-04-01 9:15 ` Magnus Damm 2013-04-02 10:09 ` Arnd Bergmann 2013-04-02 10:09 ` Arnd Bergmann
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=1352338056-21107-5-git-send-email-horms@verge.net.au \ --to=horms@verge.net.au \ --cc=linux-arm-kernel@lists.infradead.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.