diff options
Diffstat (limited to 'hal/msm8974/platform.c')
-rw-r--r-- | hal/msm8974/platform.c | 35 |
1 files changed, 31 insertions, 4 deletions
diff --git a/hal/msm8974/platform.c b/hal/msm8974/platform.c index 0d683948..63808c41 100644 --- a/hal/msm8974/platform.c +++ b/hal/msm8974/platform.c @@ -157,7 +157,9 @@ static const char * const device_table[SND_DEVICE_MAX] = { [SND_DEVICE_OUT_HEADPHONES] = "headphones", [SND_DEVICE_OUT_LINE] = "line", [SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES] = "speaker-and-headphones", + [SND_DEVICE_OUT_SPEAKER_SAFE_AND_HEADPHONES] = "speaker-safe-and-headphones", [SND_DEVICE_OUT_SPEAKER_AND_LINE] = "speaker-and-line", + [SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE] = "speaker-safe-and-line", [SND_DEVICE_OUT_VOICE_HANDSET] = "voice-handset", [SND_DEVICE_OUT_VOICE_HAC_HANDSET] = "voice-hac-handset", [SND_DEVICE_OUT_VOICE_SPEAKER] = "voice-speaker", @@ -235,7 +237,9 @@ static int acdb_device_table[SND_DEVICE_MAX] = { [SND_DEVICE_OUT_HEADPHONES] = 10, [SND_DEVICE_OUT_LINE] = 77, [SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES] = 10, + [SND_DEVICE_OUT_SPEAKER_SAFE_AND_HEADPHONES] = 10, [SND_DEVICE_OUT_SPEAKER_AND_LINE] = 77, + [SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE] = 77, [SND_DEVICE_OUT_VOICE_HANDSET] = ACDB_ID_VOICE_HANDSET, [SND_DEVICE_OUT_VOICE_SPEAKER] = ACDB_ID_VOICE_SPEAKER, [SND_DEVICE_OUT_VOICE_HAC_HANDSET] = 53, @@ -319,7 +323,9 @@ static const struct name_to_index snd_device_name_index[SND_DEVICE_MAX] = { {TO_NAME_INDEX(SND_DEVICE_OUT_HEADPHONES)}, {TO_NAME_INDEX(SND_DEVICE_OUT_LINE)}, {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES)}, + {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_SAFE_AND_HEADPHONES)}, {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_AND_LINE)}, + {TO_NAME_INDEX(SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HANDSET)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_SPEAKER)}, {TO_NAME_INDEX(SND_DEVICE_OUT_VOICE_HEADPHONES)}, @@ -730,7 +736,9 @@ static void set_platform_defaults(struct platform_data * my_data __unused) hw_interface_table[SND_DEVICE_OUT_HEADPHONES] = strdup("SLIMBUS_0_RX"); hw_interface_table[SND_DEVICE_OUT_LINE] = strdup("SLIMBUS_0_RX"); hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES] = strdup("SLIMBUS_0_RX"); + hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_HEADPHONES] = strdup("SLIMBUS_0_RX"); hw_interface_table[SND_DEVICE_OUT_SPEAKER_AND_LINE] = strdup("SLIMBUS_0_RX"); + hw_interface_table[SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE] = strdup("SLIMBUS_0_RX"); hw_interface_table[SND_DEVICE_OUT_VOICE_HANDSET] = strdup("SLIMBUS_0_RX"); hw_interface_table[SND_DEVICE_OUT_VOICE_HAC_HANDSET] = strdup("SLIMBUS_0_RX"); hw_interface_table[SND_DEVICE_OUT_VOICE_SPEAKER] = strdup("SLIMBUS_0_RX"); @@ -1427,6 +1435,18 @@ bool platform_can_split_snd_device(snd_device_t snd_device, new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER; new_snd_devices[1] = SND_DEVICE_OUT_LINE; status = true; + } else if (snd_device == SND_DEVICE_OUT_SPEAKER_SAFE_AND_HEADPHONES && + !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER_SAFE, SND_DEVICE_OUT_HEADPHONES)) { + *num_devices = 2; + new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER_SAFE; + new_snd_devices[1] = SND_DEVICE_OUT_HEADPHONES; + status = true; + } else if (snd_device == SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE && + !platform_check_backends_match(SND_DEVICE_OUT_SPEAKER_SAFE, SND_DEVICE_OUT_LINE)) { + *num_devices = 2; + new_snd_devices[0] = SND_DEVICE_OUT_SPEAKER_SAFE; + new_snd_devices[1] = SND_DEVICE_OUT_LINE; + status = true; } return status; } @@ -1489,14 +1509,21 @@ snd_device_t platform_get_output_snd_device(void *platform, audio_devices_t devi if (popcount(devices) == 2) { if (devices == (AUDIO_DEVICE_OUT_WIRED_HEADPHONE | - AUDIO_DEVICE_OUT_SPEAKER)) { - snd_device = SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES; - } else if (devices == (AUDIO_DEVICE_OUT_WIRED_HEADSET | - AUDIO_DEVICE_OUT_SPEAKER)) { + AUDIO_DEVICE_OUT_SPEAKER) || + devices == (AUDIO_DEVICE_OUT_WIRED_HEADSET | + AUDIO_DEVICE_OUT_SPEAKER)) { snd_device = SND_DEVICE_OUT_SPEAKER_AND_HEADPHONES; } else if (devices == (AUDIO_DEVICE_OUT_LINE | AUDIO_DEVICE_OUT_SPEAKER)) { snd_device = SND_DEVICE_OUT_SPEAKER_AND_LINE; + } else if (devices == (AUDIO_DEVICE_OUT_WIRED_HEADPHONE | + AUDIO_DEVICE_OUT_SPEAKER_SAFE) || + devices == (AUDIO_DEVICE_OUT_WIRED_HEADSET | + AUDIO_DEVICE_OUT_SPEAKER_SAFE)) { + snd_device = SND_DEVICE_OUT_SPEAKER_SAFE_AND_HEADPHONES; + } else if (devices == (AUDIO_DEVICE_OUT_LINE | + AUDIO_DEVICE_OUT_SPEAKER_SAFE)) { + snd_device = SND_DEVICE_OUT_SPEAKER_SAFE_AND_LINE; } else if (devices == (AUDIO_DEVICE_OUT_AUX_DIGITAL | AUDIO_DEVICE_OUT_SPEAKER)) { snd_device = SND_DEVICE_OUT_SPEAKER_AND_HDMI; |