aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2013-11-28 21:43:01 -0500
committerMark Brown <broonie@linaro.org>2013-11-29 07:09:54 -0500
commitc1e6cc5e577d1d446a645aea02d28a924f20b834 (patch)
treeb855ad6dd605b26a6908a10f29cbf8f8d91cc71c
parent17b9a2b78586c42916a2bfc55ea6c0ef962b2c1e (diff)
ASoC: rcar: separate regmap init common field
The repmap initialization difference between Gen1/Gen2 is only register offset. This patch separates rsnd_gen1_regmap_init() into common part and Gen1 specific part. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r--sound/soc/sh/rcar/gen.c49
1 files changed, 28 insertions, 21 deletions
diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c
index b94d4cefa8b8..0ebea44e890f 100644
--- a/sound/soc/sh/rcar/gen.c
+++ b/sound/soc/sh/rcar/gen.c
@@ -115,6 +115,33 @@ void rsnd_bset(struct rsnd_priv *priv, struct rsnd_mod *mod,
115 mask, data); 115 mask, data);
116} 116}
117 117
118static int rsnd_gen_regmap_init(struct rsnd_priv *priv,
119 struct rsnd_gen *gen,
120 struct reg_field *regf)
121{
122 int i;
123 struct device *dev = rsnd_priv_to_dev(priv);
124 struct regmap_config regc;
125
126 memset(&regc, 0, sizeof(regc));
127 regc.reg_bits = 32;
128 regc.val_bits = 32;
129
130 gen->regmap = devm_regmap_init(dev, &rsnd_regmap_bus, priv, &regc);
131 if (IS_ERR(gen->regmap)) {
132 dev_err(dev, "regmap error %ld\n", PTR_ERR(gen->regmap));
133 return PTR_ERR(gen->regmap);
134 }
135
136 for (i = 0; i < RSND_REG_MAX; i++) {
137 gen->regs[i] = devm_regmap_field_alloc(dev, gen->regmap, regf[i]);
138 if (IS_ERR(gen->regs[i]))
139 return PTR_ERR(gen->regs[i]);
140
141 }
142
143 return 0;
144}
118/* 145/*
119 * Gen2 146 * Gen2
120 * will be filled in the future 147 * will be filled in the future
@@ -189,9 +216,6 @@ static int rsnd_gen1_path_exit(struct rsnd_priv *priv,
189 216
190static int rsnd_gen1_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen) 217static int rsnd_gen1_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen)
191{ 218{
192 int i;
193 struct device *dev = rsnd_priv_to_dev(priv);
194 struct regmap_config regc;
195 struct reg_field regf[RSND_REG_MAX] = { 219 struct reg_field regf[RSND_REG_MAX] = {
196 RSND_GEN1_S_REG(gen, SRU, SRC_ROUTE_SEL, 0x00), 220 RSND_GEN1_S_REG(gen, SRU, SRC_ROUTE_SEL, 0x00),
197 RSND_GEN1_S_REG(gen, SRU, SRC_TMG_SEL0, 0x08), 221 RSND_GEN1_S_REG(gen, SRU, SRC_TMG_SEL0, 0x08),
@@ -216,24 +240,7 @@ static int rsnd_gen1_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen)
216 RSND_GEN1_M_REG(gen, SSI, SSIWSR, 0x20, 0x40), 240 RSND_GEN1_M_REG(gen, SSI, SSIWSR, 0x20, 0x40),
217 }; 241 };
218 242
219 memset(&regc, 0, sizeof(regc)); 243 return rsnd_gen_regmap_init(priv, gen, regf);
220 regc.reg_bits = 32;
221 regc.val_bits = 32;
222
223 gen->regmap = devm_regmap_init(dev, &rsnd_regmap_bus, priv, &regc);
224 if (IS_ERR(gen->regmap)) {
225 dev_err(dev, "regmap error %ld\n", PTR_ERR(gen->regmap));
226 return PTR_ERR(gen->regmap);
227 }
228
229 for (i = 0; i < RSND_REG_MAX; i++) {
230 gen->regs[i] = devm_regmap_field_alloc(dev, gen->regmap, regf[i]);
231 if (IS_ERR(gen->regs[i]))
232 return PTR_ERR(gen->regs[i]);
233
234 }
235
236 return 0;
237} 244}
238 245
239static int rsnd_gen1_probe(struct platform_device *pdev, 246static int rsnd_gen1_probe(struct platform_device *pdev,