aboutsummaryrefslogtreecommitdiffstats
path: root/sound/soc/sh
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2015-11-10 00:12:50 -0500
committerMark Brown <broonie@kernel.org>2015-11-18 13:08:16 -0500
commit9eaa1a6f7e31ead7e2b8eb762455e77376bd87cc (patch)
treedc8457408c02673b7677bfda740b2f5814e63e86 /sound/soc/sh
parentc7fe4be840026d7cdb0676e1d52b9f82e8b32d41 (diff)
ASoC: rsnd: remove platform boot support from dvc.c
No board is using Renesas sound driver via platform boot now. This means all user is using DT boot. Platform boot support is no longer needed. But, it strongly depends on platform boot style. This patch removes platform boot support from dvc.c Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'sound/soc/sh')
-rw-r--r--sound/soc/sh/rcar/dvc.c83
1 files changed, 31 insertions, 52 deletions
diff --git a/sound/soc/sh/rcar/dvc.c b/sound/soc/sh/rcar/dvc.c
index d2bd4804db0d..a550b75ff9ac 100644
--- a/sound/soc/sh/rcar/dvc.c
+++ b/sound/soc/sh/rcar/dvc.c
@@ -15,7 +15,6 @@
15#define DVC_NAME "dvc" 15#define DVC_NAME "dvc"
16 16
17struct rsnd_dvc { 17struct rsnd_dvc {
18 struct rsnd_dvc_platform_info *info; /* rcar_snd.h */
19 struct rsnd_mod mod; 18 struct rsnd_mod mod;
20 struct rsnd_kctrl_cfg_m volume; 19 struct rsnd_kctrl_cfg_m volume;
21 struct rsnd_kctrl_cfg_m mute; 20 struct rsnd_kctrl_cfg_m mute;
@@ -24,6 +23,7 @@ struct rsnd_dvc {
24 struct rsnd_kctrl_cfg_s rdown; /* Ramp Rate Down */ 23 struct rsnd_kctrl_cfg_s rdown; /* Ramp Rate Down */
25}; 24};
26 25
26#define rsnd_dvc_get(priv, id) ((struct rsnd_dvc *)(priv->dvc) + id)
27#define rsnd_dvc_nr(priv) ((priv)->dvc_nr) 27#define rsnd_dvc_nr(priv) ((priv)->dvc_nr)
28#define rsnd_dvc_of_node(priv) \ 28#define rsnd_dvc_of_node(priv) \
29 of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, "rcar_sound,dvc") 29 of_get_child_by_name(rsnd_priv_to_dev(priv)->of_node, "rcar_sound,dvc")
@@ -301,50 +301,15 @@ struct rsnd_mod *rsnd_dvc_mod_get(struct rsnd_priv *priv, int id)
301 if (WARN_ON(id < 0 || id >= rsnd_dvc_nr(priv))) 301 if (WARN_ON(id < 0 || id >= rsnd_dvc_nr(priv)))
302 id = 0; 302 id = 0;
303 303
304 return rsnd_mod_get((struct rsnd_dvc *)(priv->dvc) + id); 304 return rsnd_mod_get(rsnd_dvc_get(priv, id));
305}
306
307static void rsnd_of_parse_dvc(struct platform_device *pdev,
308 const struct rsnd_of_data *of_data,
309 struct rsnd_priv *priv)
310{
311 struct device_node *node;
312 struct rsnd_dvc_platform_info *dvc_info;
313 struct rcar_snd_info *info = rsnd_priv_to_info(priv);
314 struct device *dev = &pdev->dev;
315 int nr;
316
317 if (!of_data)
318 return;
319
320 node = rsnd_dvc_of_node(priv);
321 if (!node)
322 return;
323
324 nr = of_get_child_count(node);
325 if (!nr)
326 goto rsnd_of_parse_dvc_end;
327
328 dvc_info = devm_kzalloc(dev,
329 sizeof(struct rsnd_dvc_platform_info) * nr,
330 GFP_KERNEL);
331 if (!dvc_info) {
332 dev_err(dev, "dvc info allocation error\n");
333 goto rsnd_of_parse_dvc_end;
334 }
335
336 info->dvc_info = dvc_info;
337 info->dvc_info_nr = nr;
338
339rsnd_of_parse_dvc_end:
340 of_node_put(node);
341} 305}
342 306
343int rsnd_dvc_probe(struct platform_device *pdev, 307int rsnd_dvc_probe(struct platform_device *pdev,
344 const struct rsnd_of_data *of_data, 308 const struct rsnd_of_data *of_data,
345 struct rsnd_priv *priv) 309 struct rsnd_priv *priv)
346{ 310{
347 struct rcar_snd_info *info = rsnd_priv_to_info(priv); 311 struct device_node *node;
312 struct device_node *np;
348 struct device *dev = rsnd_priv_to_dev(priv); 313 struct device *dev = rsnd_priv_to_dev(priv);
349 struct rsnd_dvc *dvc; 314 struct rsnd_dvc *dvc;
350 struct clk *clk; 315 struct clk *clk;
@@ -355,36 +320,50 @@ int rsnd_dvc_probe(struct platform_device *pdev,
355 if (rsnd_is_gen1(priv)) 320 if (rsnd_is_gen1(priv))
356 return 0; 321 return 0;
357 322
358 rsnd_of_parse_dvc(pdev, of_data, priv); 323 node = rsnd_dvc_of_node(priv);
324 if (!node)
325 return 0; /* not used is not error */
359 326
360 nr = info->dvc_info_nr; 327 nr = of_get_child_count(node);
361 if (!nr) 328 if (!nr) {
362 return 0; 329 ret = -EINVAL;
330 goto rsnd_dvc_probe_done;
331 }
363 332
364 dvc = devm_kzalloc(dev, sizeof(*dvc) * nr, GFP_KERNEL); 333 dvc = devm_kzalloc(dev, sizeof(*dvc) * nr, GFP_KERNEL);
365 if (!dvc) 334 if (!dvc) {
366 return -ENOMEM; 335 ret = -ENOMEM;
336 goto rsnd_dvc_probe_done;
337 }
367 338
368 priv->dvc_nr = nr; 339 priv->dvc_nr = nr;
369 priv->dvc = dvc; 340 priv->dvc = dvc;
370 341
371 for_each_rsnd_dvc(dvc, priv, i) { 342 i = 0;
343 for_each_child_of_node(node, np) {
344 dvc = rsnd_dvc_get(priv, i);
345
372 snprintf(name, RSND_DVC_NAME_SIZE, "%s.%d", 346 snprintf(name, RSND_DVC_NAME_SIZE, "%s.%d",
373 DVC_NAME, i); 347 DVC_NAME, i);
374 348
375 clk = devm_clk_get(dev, name); 349 clk = devm_clk_get(dev, name);
376 if (IS_ERR(clk)) 350 if (IS_ERR(clk)) {
377 return PTR_ERR(clk); 351 ret = PTR_ERR(clk);
378 352 goto rsnd_dvc_probe_done;
379 dvc->info = &info->dvc_info[i]; 353 }
380 354
381 ret = rsnd_mod_init(priv, rsnd_mod_get(dvc), &rsnd_dvc_ops, 355 ret = rsnd_mod_init(priv, rsnd_mod_get(dvc), &rsnd_dvc_ops,
382 clk, RSND_MOD_DVC, i); 356 clk, RSND_MOD_DVC, i);
383 if (ret) 357 if (ret)
384 return ret; 358 goto rsnd_dvc_probe_done;
359
360 i++;
385 } 361 }
386 362
387 return 0; 363rsnd_dvc_probe_done:
364 of_node_put(node);
365
366 return ret;
388} 367}
389 368
390void rsnd_dvc_remove(struct platform_device *pdev, 369void rsnd_dvc_remove(struct platform_device *pdev,