diff options
author | Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> | 2013-11-28 21:43:01 -0500 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2013-11-29 07:09:54 -0500 |
commit | c1e6cc5e577d1d446a645aea02d28a924f20b834 (patch) | |
tree | b855ad6dd605b26a6908a10f29cbf8f8d91cc71c | |
parent | 17b9a2b78586c42916a2bfc55ea6c0ef962b2c1e (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.c | 49 |
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 | ||
118 | static 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(®c, 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, ®c); | ||
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 | ||
190 | static int rsnd_gen1_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen) | 217 | static 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(®c, 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, ®c); | ||
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 | ||
239 | static int rsnd_gen1_probe(struct platform_device *pdev, | 246 | static int rsnd_gen1_probe(struct platform_device *pdev, |