hal: Fix true mode native playback on internal codec
- Update check to ensure that native playback is supported
on non-tasha variants as well if the platform supports it.
-Configure ADM with correct sample rate for native
playback.
Change-Id: I7c95171b6afd3727f114be1223e09d40c674a428
diff --git a/hal/audio_extn/utils.c b/hal/audio_extn/utils.c
index 81dfbd1..b12ab8e 100644
--- a/hal/audio_extn/utils.c
+++ b/hal/audio_extn/utils.c
@@ -830,15 +830,6 @@
}
if ((usecase->type == PCM_PLAYBACK) && (usecase->stream.out != NULL)) {
- if (usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
- usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
- } else if ((usecase->stream.out->app_type_cfg.sample_rate == OUTPUT_SAMPLING_RATE_44100 &&
- !(audio_is_this_native_usecase(usecase))) ||
- (usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) {
- usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
- }
-
- sample_rate = usecase->stream.out->app_type_cfg.sample_rate;
property_get("audio.playback.mch.downsample",value,"");
if (!strncmp("true", value, sizeof("true"))) {
@@ -848,8 +839,7 @@
sample_rate = CODEC_BACKEND_DEFAULT_SAMPLE_RATE;
}
- if ((24 == usecase->stream.out->bit_width) &&
- (usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER)) {
+ if (usecase->stream.out->devices & AUDIO_DEVICE_OUT_SPEAKER) {
usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
} else if ((snd_device == SND_DEVICE_OUT_HDMI ||
snd_device == SND_DEVICE_OUT_USB_HEADSET ||
@@ -863,9 +853,11 @@
platform_check_and_update_copp_sample_rate(adev->platform, snd_device,
usecase->stream.out->sample_rate,
&usecase->stream.out->app_type_cfg.sample_rate);
- } else if ((snd_device != SND_DEVICE_OUT_HEADPHONES_44_1 &&
+ } else if (((snd_device != SND_DEVICE_OUT_HEADPHONES_44_1 &&
+ !audio_is_this_native_usecase(usecase)) &&
usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100) ||
(usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) {
+ /* Reset to default if no native stream is active*/
usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
}
sample_rate = usecase->stream.out->app_type_cfg.sample_rate;
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index 595e72b..6f33acf 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -1656,7 +1656,8 @@
platform_check_and_update_copp_sample_rate(adev->platform, out_snd_device,
usecase->stream.out->sample_rate,
&usecase->stream.out->app_type_cfg.sample_rate);
- } else if ((out_snd_device != SND_DEVICE_OUT_HEADPHONES_44_1 &&
+ } else if (((out_snd_device != SND_DEVICE_OUT_HEADPHONES_44_1 &&
+ !audio_is_true_native_stream_active(adev)) &&
usecase->stream.out->sample_rate == OUTPUT_SAMPLING_RATE_44100) ||
(usecase->stream.out->sample_rate < OUTPUT_SAMPLING_RATE_44100)) {
usecase->stream.out->app_type_cfg.sample_rate = DEFAULT_OUTPUT_SAMPLING_RATE;
diff --git a/hal/msm8916/platform.c b/hal/msm8916/platform.c
index fc461ce..43869a2 100644
--- a/hal/msm8916/platform.c
+++ b/hal/msm8916/platform.c
@@ -239,7 +239,7 @@
char *channels_mixer_ctl;
} codec_backend_cfg_t;
-static native_audio_prop na_props = {0, 0, 0};
+static native_audio_prop na_props = {0, 0, NATIVE_AUDIO_MODE_INVALID};
static bool supports_true_32_bit = false;
struct meta_key_list {
@@ -2460,17 +2460,15 @@
__func__);
platform_set_native_support(NATIVE_AUDIO_MODE_SRC);
}
- } else {
- platform_set_native_support(NATIVE_AUDIO_MODE_INVALID);
+ }
+ if (strstr(snd_card_name, "tavil")) {
+ ALOGD("%s:DSD playback is supported", __func__);
+ my_data->is_dsd_supported = true;
+ my_data->is_asrc_supported = true;
+ platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_44_1);
}
}
- if(strstr(snd_card_name, "tavil")) {
- ALOGD("%s:DSD playback is supported", __func__);
- my_data->is_dsd_supported = true;
- my_data->is_asrc_supported = true;
- platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_44_1);
- }
my_data->edid_info = NULL;
return my_data;
}
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c
index f161f7e..93b28ca 100644
--- a/hal/msm8974/platform.c
+++ b/hal/msm8974/platform.c
@@ -214,7 +214,7 @@
char *channels_mixer_ctl;
} codec_backend_cfg_t;
-static native_audio_prop na_props = {0, 0, 0};
+static native_audio_prop na_props = {0, 0, NATIVE_AUDIO_MODE_INVALID};
static bool supports_true_32_bit = false;
typedef int (*acdb_send_gain_dep_cal_t)(int, int, int, int, int);
@@ -2134,16 +2134,13 @@
__func__);
platform_set_native_support(NATIVE_AUDIO_MODE_SRC);
}
- } else {
- platform_set_native_support(NATIVE_AUDIO_MODE_INVALID);
}
- }
-
- if(strstr(snd_card_name, "tavil")) {
- ALOGD("%s:DSD playback is supported", __func__);
- my_data->is_dsd_supported = true;
- my_data->is_asrc_supported = true;
- platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_44_1);
+ if (strstr(snd_card_name, "tavil")) {
+ ALOGD("%s:DSD playback is supported", __func__);
+ my_data->is_dsd_supported = true;
+ my_data->is_asrc_supported = true;
+ platform_set_native_support(NATIVE_AUDIO_MODE_MULTIPLE_44_1);
+ }
}
my_data->current_backend_cfg[HEADPHONE_BACKEND].bitwidth_mixer_ctl =