ASoC: tegra-alt: set cya bit for amx auto disable

Set cya bit for amx auto disable feature to work.

Bug 200375235

Change-Id: I174453f97e9fd173bf1cb8d5e65d29766618ec6c
Signed-off-by: Mohan Kumar <mkumard@nvidia.com>
Reviewed-on: https://git-master.nvidia.com/r/1625291
Reviewed-by: svc-mobile-coverity <svc-mobile-coverity@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Dipesh Gandhi <dipeshg@nvidia.com>
GVS: Gerrit_Virtual_Submit
Reviewed-by: Sharad Gupta <sharadg@nvidia.com>
Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com>
Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
This commit is contained in:
Mohan Kumar
2017-12-23 21:48:05 +05:30
committed by Sameer Pujar
parent 2e561466a6
commit 168d0bf316
2 changed files with 32 additions and 2 deletions

View File

@@ -50,6 +50,10 @@
#define TEGRA210_AMX_AHUBRAMCTL_AMX_CTRL 0xb8
#define TEGRA210_AMX_AHUBRAMCTL_AMX_DATA 0xbc
#define TEGRA194_AMX_RX1_CTRL_FRAME_PERIOD 0xc0
#define TEGRA194_AMX_RX2_CTRL_FRAME_PERIOD 0xc4
#define TEGRA194_AMX_RX3_CTRL_FRAME_PERIOD 0xc8
#define TEGRA194_AMX_RX4_CTRL_FRAME_PERIOD 0xcc
#define TEGRA194_AMX_RX4_LAST_FRAME_PERIOD 0xdc
/* Fields in TEGRA210_AMX_AXBAR_RX1_CIF_CTRL */
/* Uses field from TEGRA210_AUDIOCIF_CTRL_* in tegra210_xbar_alt.h */
@@ -179,6 +183,7 @@ struct tegra210_amx_soc_data {
unsigned int reg,
struct tegra210_xbar_cif_conf *conf);
bool is_auto_disable_supported;
const struct regmap_config *regmap_conf;
};
struct tegra210_amx {

View File

@@ -382,11 +382,13 @@ static int tegra210_amx_in_hw_params(struct snd_pcm_substream *substream,
* sample_rate = 8000
* ahub_clk_rate = 49152000
*/
if (amx->soc_data->is_auto_disable_supported)
if (amx->soc_data->is_auto_disable_supported) {
regmap_write(amx->regmap,
TEGRA194_AMX_RX1_CTRL_FRAME_PERIOD +
(dai->id * TEGRA210_AMX_AUDIOCIF_CH_STRIDE),
0x1800);
regmap_write(amx->regmap, TEGRA210_AMX_CYA, 1);
}
ret = tegra210_amx_set_audio_cif(dai, params,
TEGRA210_AMX_AXBAR_RX1_CIF_CTRL +
@@ -784,6 +786,10 @@ static bool tegra210_amx_wr_reg(struct device *dev,
case TEGRA210_AMX_CYA:
case TEGRA210_AMX_AHUBRAMCTL_AMX_CTRL:
case TEGRA210_AMX_AHUBRAMCTL_AMX_DATA:
case TEGRA194_AMX_RX1_CTRL_FRAME_PERIOD:
case TEGRA194_AMX_RX2_CTRL_FRAME_PERIOD:
case TEGRA194_AMX_RX3_CTRL_FRAME_PERIOD:
case TEGRA194_AMX_RX4_CTRL_FRAME_PERIOD:
return true;
default:
return false;
@@ -821,6 +827,10 @@ static bool tegra210_amx_rd_reg(struct device *dev,
case TEGRA210_AMX_DBG:
case TEGRA210_AMX_AHUBRAMCTL_AMX_CTRL:
case TEGRA210_AMX_AHUBRAMCTL_AMX_DATA:
case TEGRA194_AMX_RX1_CTRL_FRAME_PERIOD:
case TEGRA194_AMX_RX2_CTRL_FRAME_PERIOD:
case TEGRA194_AMX_RX3_CTRL_FRAME_PERIOD:
case TEGRA194_AMX_RX4_CTRL_FRAME_PERIOD:
return true;
default:
return false;
@@ -863,13 +873,28 @@ static const struct regmap_config tegra210_amx_regmap_config = {
.cache_type = REGCACHE_FLAT,
};
static const struct regmap_config tegra194_amx_regmap_config = {
.reg_bits = 32,
.reg_stride = 4,
.val_bits = 32,
.max_register = TEGRA194_AMX_RX4_LAST_FRAME_PERIOD,
.writeable_reg = tegra210_amx_wr_reg,
.readable_reg = tegra210_amx_rd_reg,
.volatile_reg = tegra210_amx_volatile_reg,
.reg_defaults = tegra210_amx_reg_defaults,
.num_reg_defaults = ARRAY_SIZE(tegra210_amx_reg_defaults),
.cache_type = REGCACHE_FLAT,
};
static const struct tegra210_amx_soc_data soc_data_tegra210 = {
.set_audio_cif = tegra210_xbar_set_cif,
.regmap_conf = &tegra210_amx_regmap_config,
.is_auto_disable_supported = false,
};
static const struct tegra210_amx_soc_data soc_data_tegra194 = {
.set_audio_cif = tegra210_xbar_set_cif,
.regmap_conf = &tegra194_amx_regmap_config,
.is_auto_disable_supported = true,
};
@@ -931,7 +956,7 @@ static int tegra210_amx_platform_probe(struct platform_device *pdev)
}
amx->regmap = devm_regmap_init_mmio(&pdev->dev, regs,
&tegra210_amx_regmap_config);
soc_data->regmap_conf);
if (IS_ERR(amx->regmap)) {
dev_err(&pdev->dev, "regmap init failed\n");
ret = PTR_ERR(amx->regmap);