From 4b70cc537cadc787b748c7c246d703a240b08985 Mon Sep 17 00:00:00 2001 From: Ankit Gupta Date: Wed, 11 Jul 2012 20:50:01 +0530 Subject: asoc: tegra: integration of slave mode support. Add master/slave configurability support interface for all codecs. Currently, complete slave mode functionality is added only for MAX98088 and WM8903 codec only. By default, board parameters will set i2s master mode for all codecs. asoc: tegra: utils: add support for i2s master/slave mode. Support for i2s in master or slave mode is made generic by obtaining information from platform data. Signed-off-by: Ankit Gupta Change-Id: Ided0fcefb6cdb124b78aab423bfd8c7dccd4bf6e Reviewed-on: http://git-master/r/111553 (cherry picked from commit bb1ad7222f9c75424a45976d16de418bc927dc04) asoc: tegra: wm8903 machine: add support for i2s in slave mode. Add support for i2s as slave for playback and capture use cases. Signed-off-by: Ankit Gupta Change-Id: I1f6b73a0a1b690ecd311b0ff4107aadbb1f037d8 Reviewed-on: http://git-master/r/111472 (cherry picked from commit 0434f8ba74adefe60597d95d30a455b9b2ece9b8) asoc: tegra: wm8753 machine: add support for i2s in slave mode. Add support for i2s as slave for playback and capture use cases. Signed-off-by: Ankit Gupta Change-Id: Ib0596955cd0c6ac5ec57b0f3c6ecc9e4ed41268c Reviewed-on: http://git-master/r/113208 (cherry picked from commit 0fc6b5e3a98d9f8866f73d7914b0c590334ce862) asoc: tegra: aic326x machine: add support for i2s in slave mode. Support for i2s in slave mode is added for playabck and capture use cases. Signed-off-by: Ankit Gupta Change-Id: I41f6459765f075703ad7f5f8dc9d4628dd853820 Reviewed-on: http://git-master/r/112874 (cherry picked from commit 9a89ede36a1dca6f53250444e819443fb6f28d09) asoc: tegra: rt5640 machine: add support for i2s in slave mode. Add support for i2s as slave for playback and capture use cases. Signed-off-by: Ankit Gupta Change-Id: I850ec62149b8a8d244445b70658b632dbce06558 Reviewed-on: http://git-master/r/112878 (cherry picked from commit 1d51561c8edf47d8557a825450a48ee8743a185b) asoc: tegra: max98088 machine: add support for codec i2s as slave. Add support for codec i2s as slave during voice Call. (Bug 998682) Signed-off-by: Ankit Gupta Change-Id: I8fc54d367e9acd5417d270869cb5a9398b3b527f Reviewed-on: http://git-master/r/110559 (cherry picked from commit 78a490867e131b1cc892094ddd844c2b892cafb6) asoc: tegra: max98095 machine: add support for i2s in slave mode. Add support for i2s as slave for playback and capture use cases. Signed-off-by: Ankit Gupta Change-Id: I80944d403be94c55ad2ce31aea921d80ea7c088a Reviewed-on: http://git-master/r/112875 Reviewed-on: http://git-master/r/118080 Reviewed-by: Scott Peterson Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Sumit Bhattacharya --- sound/soc/tegra/tegra_asoc_utils.c | 53 +++++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 24 deletions(-) (limited to 'sound/soc/tegra/tegra_asoc_utils.c') diff --git a/sound/soc/tegra/tegra_asoc_utils.c b/sound/soc/tegra/tegra_asoc_utils.c index 6ab5b2d46a1f..2c18a71b8b52 100644 --- a/sound/soc/tegra/tegra_asoc_utils.c +++ b/sound/soc/tegra/tegra_asoc_utils.c @@ -2,8 +2,7 @@ * tegra_asoc_utils.c - Harmony machine ASoC driver * * Author: Stephen Warren - * Copyright (C) 2010 - NVIDIA, Inc. - * + * Copyright (c) 2010-12, NVIDIA CORPORATION. All rights reserved. * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * version 2 as published by the Free Software Foundation. @@ -340,28 +339,6 @@ int tegra_asoc_utils_init(struct tegra_asoc_utils_data *data, ret = PTR_ERR(data->clk_out1); goto err_put_cdev1; } -#endif - -#if !defined(CONFIG_ARCH_TEGRA_2x_SOC) -#if TEGRA30_I2S_MASTER_PLAYBACK - ret = clk_set_parent(data->clk_cdev1, data->clk_pll_a_out0); - if (ret) { - dev_err(data->dev, "Can't set clk cdev1/extern1 parent"); - goto err_put_out1; - } -#else - rate = clk_get_rate(data->clk_m); - - if(rate == 26000000) - clk_set_rate(data->clk_cdev1, 13000000); - - ret = clk_set_parent(data->clk_cdev1, data->clk_m); - if (ret) { - dev_err(data->dev, "Can't set clk cdev1/extern1 parent"); - goto err_put_out1; - } -#endif - #endif ret = clk_enable(data->clk_cdev1); @@ -402,6 +379,34 @@ err: } EXPORT_SYMBOL_GPL(tegra_asoc_utils_init); +#if !defined(CONFIG_ARCH_TEGRA_2x_SOC) +int tegra_asoc_utils_set_parent (struct tegra_asoc_utils_data *data, + int is_i2s_master) +{ + int ret = -ENODEV; + + if (is_i2s_master) { + ret = clk_set_parent(data->clk_cdev1, data->clk_pll_a_out0); + if (ret) { + dev_err(data->dev, "Can't set clk cdev1/extern1 parent"); + return ret; + } + } else { + if(clk_get_rate(data->clk_m) == 26000000) + clk_set_rate(data->clk_cdev1, 13000000); + + ret = clk_set_parent(data->clk_cdev1, data->clk_m); + if (ret) { + dev_err(data->dev, "Can't set clk cdev1/extern1 parent"); + return ret; + } + } + + return 0; +} +EXPORT_SYMBOL_GPL(tegra_asoc_utils_set_parent); +#endif + void tegra_asoc_utils_fini(struct tegra_asoc_utils_data *data) { if (!IS_ERR(data->clk_out1)) -- cgit v1.2.3