Message ID | 1463041641-27485-4-git-send-email-dirk.behme@de.bosch.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Simon Horman |
Headers | show |
On Thu, May 12, 2016 at 10:27 AM, Dirk Behme <dirk.behme@de.bosch.com> wrote: > --- a/drivers/clk/renesas/r8a7795-cpg-mssr.c > +++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c > @@ -15,6 +15,9 @@ > #include <linux/device.h> > #include <linux/init.h> > #include <linux/kernel.h> > +#include <linux/mfd/syscon.h> > +#include <linux/of.h> > +#include <linux/regmap.h> > > #include <dt-bindings/clock/r8a7795-cpg-mssr.h> > > @@ -294,7 +297,17 @@ static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = { > static int __init r8a7795_cpg_mssr_init(struct device *dev) > { > const struct rcar_gen3_cpg_pll_config *cpg_pll_config; > - u32 cpg_mode = rcar_gen3_read_mode_pins(); > + struct device_node *np = dev->of_node; > + struct regmap *regmap; > + u32 cpg_mode, reg; > + > + regmap = syscon_regmap_lookup_by_phandle(np, "renesas,modemr"); > + if (IS_ERR(regmap) || > + of_property_read_u32_index(np, "renesas,modemr", 1, ®) || > + regmap_read(regmap, reg, &cpg_mode)) { > + dev_err(dev, "Failed to parse renesas,modemr\n"); > + return -EINVAL; > + } I would not add this to each and ... > --- a/drivers/clk/renesas/r8a7796-cpg-mssr.c > +++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c > @@ -16,6 +16,9 @@ > #include <linux/device.h> > #include <linux/init.h> > #include <linux/kernel.h> > +#include <linux/mfd/syscon.h> > +#include <linux/of.h> > +#include <linux/regmap.h> > > #include <dt-bindings/clock/r8a7796-cpg-mssr.h> > > @@ -159,7 +162,17 @@ static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = { > static int __init r8a7796_cpg_mssr_init(struct device *dev) > { > const struct rcar_gen3_cpg_pll_config *cpg_pll_config; > - u32 cpg_mode = rcar_gen3_read_mode_pins(); > + struct device_node *np = dev->of_node; > + struct regmap *regmap; > + u32 cpg_mode, reg; > + > + regmap = syscon_regmap_lookup_by_phandle(np, "renesas,modemr"); > + if (IS_ERR(regmap) || > + of_property_read_u32_index(np, "renesas,modemr", 1, ®) || > + regmap_read(regmap, reg, &cpg_mode)) { > + dev_err(dev, "Failed to parse renesas,modemr\n"); > + return -EINVAL; > + } ... every subdriver for all SoCs that need it... > diff --git a/drivers/clk/renesas/rcar-gen3-cpg.c b/drivers/clk/renesas/rcar-gen3-cpg.c > index bb4f2f9..9d76076 100644 > --- a/drivers/clk/renesas/rcar-gen3-cpg.c > +++ b/drivers/clk/renesas/rcar-gen3-cpg.c > @@ -333,23 +333,6 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev, > __clk_get_name(parent), 0, mult, div); > } > > -/* > - * Reset register definitions. > - */ > -#define MODEMR 0xe6160060 > - > -u32 __init rcar_gen3_read_mode_pins(void) > -{ > - void __iomem *modemr = ioremap_nocache(MODEMR, 4); > - u32 mode; > - > - BUG_ON(!modemr); > - mode = ioread32(modemr); > - iounmap(modemr); > - > - return mode; > -} ... but add it here. Or perhaps just in renesas-cpg-mssr.c, as we're gonna need it for R-Car Gen2 too, if/when that is converted to cpg-mssr.c. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c b/drivers/clk/renesas/r8a7795-cpg-mssr.c index e53aff5..f956a1b 100644 --- a/drivers/clk/renesas/r8a7795-cpg-mssr.c +++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c @@ -15,6 +15,9 @@ #include <linux/device.h> #include <linux/init.h> #include <linux/kernel.h> +#include <linux/mfd/syscon.h> +#include <linux/of.h> +#include <linux/regmap.h> #include <dt-bindings/clock/r8a7795-cpg-mssr.h> @@ -294,7 +297,17 @@ static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = { static int __init r8a7795_cpg_mssr_init(struct device *dev) { const struct rcar_gen3_cpg_pll_config *cpg_pll_config; - u32 cpg_mode = rcar_gen3_read_mode_pins(); + struct device_node *np = dev->of_node; + struct regmap *regmap; + u32 cpg_mode, reg; + + regmap = syscon_regmap_lookup_by_phandle(np, "renesas,modemr"); + if (IS_ERR(regmap) || + of_property_read_u32_index(np, "renesas,modemr", 1, ®) || + regmap_read(regmap, reg, &cpg_mode)) { + dev_err(dev, "Failed to parse renesas,modemr\n"); + return -EINVAL; + } cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)]; if (!cpg_pll_config->extal_div) { diff --git a/drivers/clk/renesas/r8a7796-cpg-mssr.c b/drivers/clk/renesas/r8a7796-cpg-mssr.c index c84b549..2a0375d 100644 --- a/drivers/clk/renesas/r8a7796-cpg-mssr.c +++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c @@ -16,6 +16,9 @@ #include <linux/device.h> #include <linux/init.h> #include <linux/kernel.h> +#include <linux/mfd/syscon.h> +#include <linux/of.h> +#include <linux/regmap.h> #include <dt-bindings/clock/r8a7796-cpg-mssr.h> @@ -159,7 +162,17 @@ static const struct rcar_gen3_cpg_pll_config cpg_pll_configs[16] __initconst = { static int __init r8a7796_cpg_mssr_init(struct device *dev) { const struct rcar_gen3_cpg_pll_config *cpg_pll_config; - u32 cpg_mode = rcar_gen3_read_mode_pins(); + struct device_node *np = dev->of_node; + struct regmap *regmap; + u32 cpg_mode, reg; + + regmap = syscon_regmap_lookup_by_phandle(np, "renesas,modemr"); + if (IS_ERR(regmap) || + of_property_read_u32_index(np, "renesas,modemr", 1, ®) || + regmap_read(regmap, reg, &cpg_mode)) { + dev_err(dev, "Failed to parse renesas,modemr\n"); + return -EINVAL; + } cpg_pll_config = &cpg_pll_configs[CPG_PLL_CONFIG_INDEX(cpg_mode)]; if (!cpg_pll_config->extal_div) { diff --git a/drivers/clk/renesas/rcar-gen3-cpg.c b/drivers/clk/renesas/rcar-gen3-cpg.c index bb4f2f9..9d76076 100644 --- a/drivers/clk/renesas/rcar-gen3-cpg.c +++ b/drivers/clk/renesas/rcar-gen3-cpg.c @@ -333,23 +333,6 @@ struct clk * __init rcar_gen3_cpg_clk_register(struct device *dev, __clk_get_name(parent), 0, mult, div); } -/* - * Reset register definitions. - */ -#define MODEMR 0xe6160060 - -u32 __init rcar_gen3_read_mode_pins(void) -{ - void __iomem *modemr = ioremap_nocache(MODEMR, 4); - u32 mode; - - BUG_ON(!modemr); - mode = ioread32(modemr); - iounmap(modemr); - - return mode; -} - int __init rcar_gen3_cpg_init(const struct rcar_gen3_cpg_pll_config *config, unsigned int clk_extalr) { diff --git a/drivers/clk/renesas/rcar-gen3-cpg.h b/drivers/clk/renesas/rcar-gen3-cpg.h index f699085..f788f48 100644 --- a/drivers/clk/renesas/rcar-gen3-cpg.h +++ b/drivers/clk/renesas/rcar-gen3-cpg.h @@ -33,7 +33,6 @@ struct rcar_gen3_cpg_pll_config { #define CPG_RCKCR 0x240 -u32 rcar_gen3_read_mode_pins(void); struct clk *rcar_gen3_cpg_clk_register(struct device *dev, const struct cpg_core_clk *core, const struct cpg_mssr_info *info, struct clk **clks, void __iomem *base);