mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
ASoC: tegra-alt: audio fixes
fixes for: a) asrc b) arad c) machine driver List of CL's: http://git-master/r/799350 http://git-master/r/799941 http://git-master/r/801101 Bug 200133225 Change-Id: Icbec3b988e134c47dc13cbf64bbef394bc31b0a6 Signed-off-by: Dipesh Gandhi <dipeshg@nvidia.com> Reviewed-on: http://git-master/r/823283 Reviewed-by: Sharad Gupta <sharadg@nvidia.com> GVS: Gerrit_Virtual_Submit Reviewed-by: Nitin Pai <npai@nvidia.com>
This commit is contained in:
committed by
Sameer Pujar
parent
eb7dacf7ea
commit
34b3cc18d3
@@ -808,12 +808,16 @@ static int tegra186_arad_platform_probe(struct platform_device *pdev)
|
|||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
tegra186_arad_runtime_resume(&pdev->dev);
|
||||||
|
|
||||||
pm_runtime_enable(&pdev->dev);
|
pm_runtime_enable(&pdev->dev);
|
||||||
if (!pm_runtime_enabled(&pdev->dev)) {
|
|
||||||
ret = tegra186_arad_runtime_resume(&pdev->dev);
|
ret = snd_soc_register_codec(&pdev->dev, &tegra186_arad_codec,
|
||||||
if (ret)
|
tegra186_arad_dais,
|
||||||
goto err_pm_disable;
|
ARRAY_SIZE(tegra186_arad_dais));
|
||||||
|
if (ret != 0) {
|
||||||
|
dev_err(&pdev->dev, "Could not register CODEC: %d\n", ret);
|
||||||
|
goto err_suspend;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SND_SOC_TEGRA186_ARAD_WAR
|
#ifdef CONFIG_SND_SOC_TEGRA186_ARAD_WAR
|
||||||
@@ -826,14 +830,6 @@ static int tegra186_arad_platform_probe(struct platform_device *pdev)
|
|||||||
dev_err(&pdev->dev, "Could not register ARAD INTERRUPT\n");
|
dev_err(&pdev->dev, "Could not register ARAD INTERRUPT\n");
|
||||||
spin_lock_init(&arad->int_lock);
|
spin_lock_init(&arad->int_lock);
|
||||||
#endif
|
#endif
|
||||||
ret = snd_soc_register_codec(&pdev->dev, &tegra186_arad_codec,
|
|
||||||
tegra186_arad_dais,
|
|
||||||
ARRAY_SIZE(tegra186_arad_dais));
|
|
||||||
if (ret != 0) {
|
|
||||||
dev_err(&pdev->dev, "Could not register CODEC: %d\n", ret);
|
|
||||||
goto err_suspend;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err_suspend:
|
err_suspend:
|
||||||
|
|||||||
@@ -209,6 +209,8 @@ static int tegra186_asrc_runtime_resume(struct device *dev)
|
|||||||
regcache_cache_only(asrc->regmap, false);
|
regcache_cache_only(asrc->regmap, false);
|
||||||
regcache_sync(asrc->regmap);
|
regcache_sync(asrc->regmap);
|
||||||
|
|
||||||
|
regmap_write(asrc->regmap, TEGRA186_ASRC_GLOBAL_INT_CLEAR,
|
||||||
|
0x01);
|
||||||
for (lane_id = 0; lane_id < 6; lane_id++) {
|
for (lane_id = 0; lane_id < 6; lane_id++) {
|
||||||
if (asrc->lane[lane_id].ratio_source == RATIO_SW) {
|
if (asrc->lane[lane_id].ratio_source == RATIO_SW) {
|
||||||
regmap_write(asrc->regmap,
|
regmap_write(asrc->regmap,
|
||||||
@@ -619,37 +621,37 @@ static const struct snd_kcontrol_new tegra186_asrc_controls[] = {
|
|||||||
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
||||||
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
||||||
SOC_SINGLE_EXT("Ratio1 Frac", TEGRA186_ASRC_STREAM1_RATIO_FRAC_PART,
|
SOC_SINGLE_EXT("Ratio1 Frac", TEGRA186_ASRC_STREAM1_RATIO_FRAC_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MAX, 0,
|
||||||
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
||||||
SOC_SINGLE_EXT("Ratio2 Int", TEGRA186_ASRC_STREAM2_RATIO_INTEGER_PART,
|
SOC_SINGLE_EXT("Ratio2 Int", TEGRA186_ASRC_STREAM2_RATIO_INTEGER_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
||||||
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
||||||
SOC_SINGLE_EXT("Ratio2 Frac", TEGRA186_ASRC_STREAM2_RATIO_FRAC_PART,
|
SOC_SINGLE_EXT("Ratio2 Frac", TEGRA186_ASRC_STREAM2_RATIO_FRAC_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MAX, 0,
|
||||||
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
||||||
SOC_SINGLE_EXT("Ratio3 Int", TEGRA186_ASRC_STREAM3_RATIO_INTEGER_PART,
|
SOC_SINGLE_EXT("Ratio3 Int", TEGRA186_ASRC_STREAM3_RATIO_INTEGER_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
||||||
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
||||||
SOC_SINGLE_EXT("Ratio3 Frac", TEGRA186_ASRC_STREAM3_RATIO_FRAC_PART,
|
SOC_SINGLE_EXT("Ratio3 Frac", TEGRA186_ASRC_STREAM3_RATIO_FRAC_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MAX, 0,
|
||||||
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
||||||
SOC_SINGLE_EXT("Ratio4 Int", TEGRA186_ASRC_STREAM4_RATIO_INTEGER_PART,
|
SOC_SINGLE_EXT("Ratio4 Int", TEGRA186_ASRC_STREAM4_RATIO_INTEGER_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
||||||
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
||||||
SOC_SINGLE_EXT("Ratio4 Frac", TEGRA186_ASRC_STREAM4_RATIO_FRAC_PART,
|
SOC_SINGLE_EXT("Ratio4 Frac", TEGRA186_ASRC_STREAM4_RATIO_FRAC_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MAX, 0,
|
||||||
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
||||||
SOC_SINGLE_EXT("Ratio5 Int", TEGRA186_ASRC_STREAM5_RATIO_INTEGER_PART,
|
SOC_SINGLE_EXT("Ratio5 Int", TEGRA186_ASRC_STREAM5_RATIO_INTEGER_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
||||||
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
||||||
SOC_SINGLE_EXT("Ratio5 Frac", TEGRA186_ASRC_STREAM5_RATIO_FRAC_PART,
|
SOC_SINGLE_EXT("Ratio5 Frac", TEGRA186_ASRC_STREAM5_RATIO_FRAC_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MAX, 0,
|
||||||
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
||||||
SOC_SINGLE_EXT("Ratio6 Int", TEGRA186_ASRC_STREAM6_RATIO_INTEGER_PART,
|
SOC_SINGLE_EXT("Ratio6 Int", TEGRA186_ASRC_STREAM6_RATIO_INTEGER_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_INTEGER_PART_MASK, 0,
|
||||||
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
tegra186_asrc_get_ratio_int, tegra186_asrc_put_ratio_int),
|
||||||
SOC_SINGLE_EXT("Ratio6 Frac", TEGRA186_ASRC_STREAM6_RATIO_FRAC_PART,
|
SOC_SINGLE_EXT("Ratio6 Frac", TEGRA186_ASRC_STREAM6_RATIO_FRAC_PART,
|
||||||
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MASK, 0,
|
0, TEGRA186_ASRC_STREAM_RATIO_FRAC_PART_MAX, 0,
|
||||||
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
tegra186_asrc_get_ratio_frac, tegra186_asrc_put_ratio_frac),
|
||||||
|
|
||||||
SOC_ENUM_EXT("Ratio1 SRC", src_select1,
|
SOC_ENUM_EXT("Ratio1 SRC", src_select1,
|
||||||
@@ -945,11 +947,7 @@ static int tegra186_asrc_platform_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
pm_runtime_enable(&pdev->dev);
|
pm_runtime_enable(&pdev->dev);
|
||||||
if (!pm_runtime_enabled(&pdev->dev)) {
|
tegra186_asrc_runtime_resume(&pdev->dev);
|
||||||
ret = tegra186_asrc_runtime_resume(&pdev->dev);
|
|
||||||
if (ret)
|
|
||||||
goto err_pm_disable;
|
|
||||||
}
|
|
||||||
|
|
||||||
regmap_write(asrc->regmap, TEGRA186_ASRC_GLOBAL_CONFIG,
|
regmap_write(asrc->regmap, TEGRA186_ASRC_GLOBAL_CONFIG,
|
||||||
TEGRA186_ASRC_GLOBAL_CONFIG_FRAC_32BIT_PRECISION);
|
TEGRA186_ASRC_GLOBAL_CONFIG_FRAC_32BIT_PRECISION);
|
||||||
@@ -959,10 +957,11 @@ static int tegra186_asrc_platform_probe(struct platform_device *pdev)
|
|||||||
TEGRA186_ASRC_GLOBAL_SCRATCH_ADDR,
|
TEGRA186_ASRC_GLOBAL_SCRATCH_ADDR,
|
||||||
ASRC_ARAM_START_ADDR);
|
ASRC_ARAM_START_ADDR);
|
||||||
|
|
||||||
|
regmap_write(asrc->regmap, TEGRA186_ASRC_GLOBAL_INT_MASK,
|
||||||
|
0x01);
|
||||||
/* set global enable */
|
/* set global enable */
|
||||||
regmap_write(asrc->regmap,
|
regmap_write(asrc->regmap,
|
||||||
TEGRA186_ASRC_GLOBAL_ENB, TEGRA186_ASRC_GLOBAL_EN);
|
TEGRA186_ASRC_GLOBAL_ENB, TEGRA186_ASRC_GLOBAL_EN);
|
||||||
|
|
||||||
/* initialize default output srate */
|
/* initialize default output srate */
|
||||||
for (i = 0; i < 6; i++) {
|
for (i = 0; i < 6; i++) {
|
||||||
asrc->lane[i].int_part = 1;
|
asrc->lane[i].int_part = 1;
|
||||||
|
|||||||
Reference in New Issue
Block a user