diff options
Diffstat (limited to 'sound/soc/sh/rcar/gen.c')
-rw-r--r-- | sound/soc/sh/rcar/gen.c | 98 |
1 files changed, 30 insertions, 68 deletions
diff --git a/sound/soc/sh/rcar/gen.c b/sound/soc/sh/rcar/gen.c index add088bd4b2a..9094970dbdfb 100644 --- a/sound/soc/sh/rcar/gen.c +++ b/sound/soc/sh/rcar/gen.c | |||
@@ -155,62 +155,6 @@ static int rsnd_gen_regmap_init(struct rsnd_priv *priv, | |||
155 | return 0; | 155 | return 0; |
156 | } | 156 | } |
157 | 157 | ||
158 | int rsnd_gen_path_init(struct rsnd_priv *priv, | ||
159 | struct rsnd_dai *rdai, | ||
160 | struct rsnd_dai_stream *io) | ||
161 | { | ||
162 | struct rsnd_mod *mod; | ||
163 | int ret; | ||
164 | int id; | ||
165 | |||
166 | /* | ||
167 | * Gen1 is created by SRU/SSI, and this SRU is base module of | ||
168 | * Gen2's SCU/SSIU/SSI. (Gen2 SCU/SSIU came from SRU) | ||
169 | * | ||
170 | * Easy image is.. | ||
171 | * Gen1 SRU = Gen2 SCU + SSIU + etc | ||
172 | * | ||
173 | * Gen2 SCU path is very flexible, but, Gen1 SRU (SCU parts) is | ||
174 | * using fixed path. | ||
175 | * | ||
176 | * Then, SSI id = SCU id here | ||
177 | */ | ||
178 | |||
179 | /* get SSI's ID */ | ||
180 | mod = rsnd_ssi_mod_get_frm_dai(priv, | ||
181 | rsnd_dai_id(priv, rdai), | ||
182 | rsnd_dai_is_play(rdai, io)); | ||
183 | id = rsnd_mod_id(mod); | ||
184 | |||
185 | /* SSI */ | ||
186 | mod = rsnd_ssi_mod_get(priv, id); | ||
187 | ret = rsnd_dai_connect(rdai, mod, io); | ||
188 | if (ret < 0) | ||
189 | return ret; | ||
190 | |||
191 | /* SCU */ | ||
192 | mod = rsnd_scu_mod_get(priv, id); | ||
193 | ret = rsnd_dai_connect(rdai, mod, io); | ||
194 | |||
195 | return ret; | ||
196 | } | ||
197 | |||
198 | int rsnd_gen_path_exit(struct rsnd_priv *priv, | ||
199 | struct rsnd_dai *rdai, | ||
200 | struct rsnd_dai_stream *io) | ||
201 | { | ||
202 | struct rsnd_mod *mod, *n; | ||
203 | int ret = 0; | ||
204 | |||
205 | /* | ||
206 | * remove all mod from rdai | ||
207 | */ | ||
208 | for_each_rsnd_mod(mod, n, io) | ||
209 | ret |= rsnd_dai_disconnect(mod); | ||
210 | |||
211 | return ret; | ||
212 | } | ||
213 | |||
214 | /* | 158 | /* |
215 | * Gen2 | 159 | * Gen2 |
216 | */ | 160 | */ |
@@ -229,14 +173,40 @@ static int rsnd_gen2_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen) | |||
229 | RSND_GEN2_S_REG(gen, SSIU, SSI_MODE0, 0x800), | 173 | RSND_GEN2_S_REG(gen, SSIU, SSI_MODE0, 0x800), |
230 | RSND_GEN2_S_REG(gen, SSIU, SSI_MODE1, 0x804), | 174 | RSND_GEN2_S_REG(gen, SSIU, SSI_MODE1, 0x804), |
231 | /* FIXME: it needs SSI_MODE2/3 in the future */ | 175 | /* FIXME: it needs SSI_MODE2/3 in the future */ |
176 | RSND_GEN2_M_REG(gen, SSIU, SSI_BUSIF_MODE, 0x0, 0x80), | ||
177 | RSND_GEN2_M_REG(gen, SSIU, SSI_BUSIF_ADINR,0x4, 0x80), | ||
178 | RSND_GEN2_M_REG(gen, SSIU, SSI_CTRL, 0x10, 0x80), | ||
232 | RSND_GEN2_M_REG(gen, SSIU, INT_ENABLE, 0x18, 0x80), | 179 | RSND_GEN2_M_REG(gen, SSIU, INT_ENABLE, 0x18, 0x80), |
233 | 180 | ||
181 | RSND_GEN2_M_REG(gen, SCU, SRC_BUSIF_MODE, 0x0, 0x20), | ||
182 | RSND_GEN2_M_REG(gen, SCU, SRC_ROUTE_MODE0,0xc, 0x20), | ||
183 | RSND_GEN2_M_REG(gen, SCU, SRC_CTRL, 0x10, 0x20), | ||
184 | RSND_GEN2_M_REG(gen, SCU, SRC_SWRSR, 0x200, 0x40), | ||
185 | RSND_GEN2_M_REG(gen, SCU, SRC_SRCIR, 0x204, 0x40), | ||
186 | RSND_GEN2_M_REG(gen, SCU, SRC_ADINR, 0x214, 0x40), | ||
187 | RSND_GEN2_M_REG(gen, SCU, SRC_IFSCR, 0x21c, 0x40), | ||
188 | RSND_GEN2_M_REG(gen, SCU, SRC_IFSVR, 0x220, 0x40), | ||
189 | RSND_GEN2_M_REG(gen, SCU, SRC_SRCCR, 0x224, 0x40), | ||
190 | RSND_GEN2_M_REG(gen, SCU, SRC_BSDSR, 0x22c, 0x40), | ||
191 | RSND_GEN2_M_REG(gen, SCU, SRC_BSISR, 0x238, 0x40), | ||
192 | |||
234 | RSND_GEN2_S_REG(gen, ADG, BRRA, 0x00), | 193 | RSND_GEN2_S_REG(gen, ADG, BRRA, 0x00), |
235 | RSND_GEN2_S_REG(gen, ADG, BRRB, 0x04), | 194 | RSND_GEN2_S_REG(gen, ADG, BRRB, 0x04), |
236 | RSND_GEN2_S_REG(gen, ADG, SSICKR, 0x08), | 195 | RSND_GEN2_S_REG(gen, ADG, SSICKR, 0x08), |
237 | RSND_GEN2_S_REG(gen, ADG, AUDIO_CLK_SEL0, 0x0c), | 196 | RSND_GEN2_S_REG(gen, ADG, AUDIO_CLK_SEL0, 0x0c), |
238 | RSND_GEN2_S_REG(gen, ADG, AUDIO_CLK_SEL1, 0x10), | 197 | RSND_GEN2_S_REG(gen, ADG, AUDIO_CLK_SEL1, 0x10), |
239 | RSND_GEN2_S_REG(gen, ADG, AUDIO_CLK_SEL2, 0x14), | 198 | RSND_GEN2_S_REG(gen, ADG, AUDIO_CLK_SEL2, 0x14), |
199 | RSND_GEN2_S_REG(gen, ADG, DIV_EN, 0x30), | ||
200 | RSND_GEN2_S_REG(gen, ADG, SRCIN_TIMSEL0, 0x34), | ||
201 | RSND_GEN2_S_REG(gen, ADG, SRCIN_TIMSEL1, 0x38), | ||
202 | RSND_GEN2_S_REG(gen, ADG, SRCIN_TIMSEL2, 0x3c), | ||
203 | RSND_GEN2_S_REG(gen, ADG, SRCIN_TIMSEL3, 0x40), | ||
204 | RSND_GEN2_S_REG(gen, ADG, SRCIN_TIMSEL4, 0x44), | ||
205 | RSND_GEN2_S_REG(gen, ADG, SRCOUT_TIMSEL0, 0x48), | ||
206 | RSND_GEN2_S_REG(gen, ADG, SRCOUT_TIMSEL1, 0x4c), | ||
207 | RSND_GEN2_S_REG(gen, ADG, SRCOUT_TIMSEL2, 0x50), | ||
208 | RSND_GEN2_S_REG(gen, ADG, SRCOUT_TIMSEL3, 0x54), | ||
209 | RSND_GEN2_S_REG(gen, ADG, SRCOUT_TIMSEL4, 0x58), | ||
240 | 210 | ||
241 | RSND_GEN2_M_REG(gen, SSI, SSICR, 0x00, 0x40), | 211 | RSND_GEN2_M_REG(gen, SSI, SSICR, 0x00, 0x40), |
242 | RSND_GEN2_M_REG(gen, SSI, SSISR, 0x04, 0x40), | 212 | RSND_GEN2_M_REG(gen, SSI, SSISR, 0x04, 0x40), |
@@ -249,7 +219,6 @@ static int rsnd_gen2_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen) | |||
249 | } | 219 | } |
250 | 220 | ||
251 | static int rsnd_gen2_probe(struct platform_device *pdev, | 221 | static int rsnd_gen2_probe(struct platform_device *pdev, |
252 | struct rcar_snd_info *info, | ||
253 | struct rsnd_priv *priv) | 222 | struct rsnd_priv *priv) |
254 | { | 223 | { |
255 | struct device *dev = rsnd_priv_to_dev(priv); | 224 | struct device *dev = rsnd_priv_to_dev(priv); |
@@ -283,7 +252,7 @@ static int rsnd_gen2_probe(struct platform_device *pdev, | |||
283 | return ret; | 252 | return ret; |
284 | 253 | ||
285 | dev_dbg(dev, "Gen2 device probed\n"); | 254 | dev_dbg(dev, "Gen2 device probed\n"); |
286 | dev_dbg(dev, "SRU : %08x => %p\n", scu_res->start, | 255 | dev_dbg(dev, "SCU : %08x => %p\n", scu_res->start, |
287 | gen->base[RSND_GEN2_SCU]); | 256 | gen->base[RSND_GEN2_SCU]); |
288 | dev_dbg(dev, "ADG : %08x => %p\n", adg_res->start, | 257 | dev_dbg(dev, "ADG : %08x => %p\n", adg_res->start, |
289 | gen->base[RSND_GEN2_ADG]); | 258 | gen->base[RSND_GEN2_ADG]); |
@@ -317,7 +286,7 @@ static int rsnd_gen1_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen) | |||
317 | RSND_GEN1_S_REG(gen, SRU, SRC_ROUTE_CTRL, 0xc0), | 286 | RSND_GEN1_S_REG(gen, SRU, SRC_ROUTE_CTRL, 0xc0), |
318 | RSND_GEN1_S_REG(gen, SRU, SSI_MODE0, 0xD0), | 287 | RSND_GEN1_S_REG(gen, SRU, SSI_MODE0, 0xD0), |
319 | RSND_GEN1_S_REG(gen, SRU, SSI_MODE1, 0xD4), | 288 | RSND_GEN1_S_REG(gen, SRU, SSI_MODE1, 0xD4), |
320 | RSND_GEN1_M_REG(gen, SRU, BUSIF_MODE, 0x20, 0x4), | 289 | RSND_GEN1_M_REG(gen, SRU, SRC_BUSIF_MODE, 0x20, 0x4), |
321 | RSND_GEN1_M_REG(gen, SRU, SRC_ROUTE_MODE0,0x50, 0x8), | 290 | RSND_GEN1_M_REG(gen, SRU, SRC_ROUTE_MODE0,0x50, 0x8), |
322 | RSND_GEN1_M_REG(gen, SRU, SRC_SWRSR, 0x200, 0x40), | 291 | RSND_GEN1_M_REG(gen, SRU, SRC_SWRSR, 0x200, 0x40), |
323 | RSND_GEN1_M_REG(gen, SRU, SRC_SRCIR, 0x204, 0x40), | 292 | RSND_GEN1_M_REG(gen, SRU, SRC_SRCIR, 0x204, 0x40), |
@@ -347,7 +316,6 @@ static int rsnd_gen1_regmap_init(struct rsnd_priv *priv, struct rsnd_gen *gen) | |||
347 | } | 316 | } |
348 | 317 | ||
349 | static int rsnd_gen1_probe(struct platform_device *pdev, | 318 | static int rsnd_gen1_probe(struct platform_device *pdev, |
350 | struct rcar_snd_info *info, | ||
351 | struct rsnd_priv *priv) | 319 | struct rsnd_priv *priv) |
352 | { | 320 | { |
353 | struct device *dev = rsnd_priv_to_dev(priv); | 321 | struct device *dev = rsnd_priv_to_dev(priv); |
@@ -392,7 +360,6 @@ static int rsnd_gen1_probe(struct platform_device *pdev, | |||
392 | * Gen | 360 | * Gen |
393 | */ | 361 | */ |
394 | int rsnd_gen_probe(struct platform_device *pdev, | 362 | int rsnd_gen_probe(struct platform_device *pdev, |
395 | struct rcar_snd_info *info, | ||
396 | struct rsnd_priv *priv) | 363 | struct rsnd_priv *priv) |
397 | { | 364 | { |
398 | struct device *dev = rsnd_priv_to_dev(priv); | 365 | struct device *dev = rsnd_priv_to_dev(priv); |
@@ -409,17 +376,12 @@ int rsnd_gen_probe(struct platform_device *pdev, | |||
409 | 376 | ||
410 | ret = -ENODEV; | 377 | ret = -ENODEV; |
411 | if (rsnd_is_gen1(priv)) | 378 | if (rsnd_is_gen1(priv)) |
412 | ret = rsnd_gen1_probe(pdev, info, priv); | 379 | ret = rsnd_gen1_probe(pdev, priv); |
413 | else if (rsnd_is_gen2(priv)) | 380 | else if (rsnd_is_gen2(priv)) |
414 | ret = rsnd_gen2_probe(pdev, info, priv); | 381 | ret = rsnd_gen2_probe(pdev, priv); |
415 | 382 | ||
416 | if (ret < 0) | 383 | if (ret < 0) |
417 | dev_err(dev, "unknown generation R-Car sound device\n"); | 384 | dev_err(dev, "unknown generation R-Car sound device\n"); |
418 | 385 | ||
419 | return ret; | 386 | return ret; |
420 | } | 387 | } |
421 | |||
422 | void rsnd_gen_remove(struct platform_device *pdev, | ||
423 | struct rsnd_priv *priv) | ||
424 | { | ||
425 | } | ||