From b271803ae2451c951344655ffe43ff74b42fa2ab Mon Sep 17 00:00:00 2001 From: codeworkx Date: Sat, 23 Feb 2013 05:03:10 +0000 Subject: p51xx: fix dock audio, add device specific settings Change-Id: Icaa5e6f7dc2a924ededbe9f5be4a768bcb3ecf6e --- audio/audio_hw.c | 28 +++++++++++++++++++++++++--- 1 file changed, 25 insertions(+), 3 deletions(-) (limited to 'audio') diff --git a/audio/audio_hw.c b/audio/audio_hw.c index 9bd054a..c58a91b 100755 --- a/audio/audio_hw.c +++ b/audio/audio_hw.c @@ -492,6 +492,7 @@ static void set_incall_device(struct espresso_audio_device *adev) device_type = SOUND_AUDIO_PATH_HANDSET; break; case AUDIO_DEVICE_OUT_SPEAKER: + case AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET: case AUDIO_DEVICE_OUT_AUX_DIGITAL: case AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET: device_type = SOUND_AUDIO_PATH_SPEAKER; @@ -628,9 +629,18 @@ static void select_output_device(struct espresso_audio_device *adev) case AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET: ALOGD("%s: AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET", __func__); break; + case AUDIO_DEVICE_OUT_AUX_DIGITAL: + ALOGD("%s: AUDIO_DEVICE_OUT_AUX_DIGITAL", __func__); + break; case AUDIO_DEVICE_OUT_ALL_SCO: ALOGD("%s: AUDIO_DEVICE_OUT_ALL_SCO", __func__); break; + case AUDIO_DEVICE_OUT_USB_ACCESSORY: + ALOGD("%s: AUDIO_DEVICE_OUT_USB_ACCESSORY", __func__); + break; + case AUDIO_DEVICE_OUT_USB_DEVICE: + ALOGD("%s: AUDIO_DEVICE_OUT_USB_DEVICE", __func__); + break; default: ALOGD("%s: AUDIO_DEVICE_OUT_ALL", __func__); break; @@ -2424,17 +2434,21 @@ static int adev_open_output_stream(struct audio_hw_device *dev, struct espresso_stream_out *out; int ret; int output_type; + *stream_out = NULL; out = (struct espresso_stream_out *)calloc(1, sizeof(struct espresso_stream_out)); - if (!out) + if (!out) { + ALOGE("%s: out of memory!", __func__); return -ENOMEM; + } out->sup_channel_masks[0] = AUDIO_CHANNEL_OUT_STEREO; out->channel_mask = AUDIO_CHANNEL_OUT_STEREO; if (ladev->outputs[OUTPUT_DEEP_BUF] != NULL) { ret = -ENOSYS; + ALOGW("%s: output not available!", __func__); goto err_open; } output_type = OUTPUT_DEEP_BUF; @@ -2450,8 +2464,10 @@ static int adev_open_output_stream(struct audio_hw_device *dev, RESAMPLER_QUALITY_DEFAULT, NULL, &out->resampler); - if (ret != 0) + if (ret != 0) { + ALOGE("%s: error on resampler create!", __func__); goto err_open; + } out->stream.common.set_sample_rate = out_set_sample_rate; out->stream.common.get_channels = out_get_channels; @@ -2486,6 +2502,7 @@ static int adev_open_output_stream(struct audio_hw_device *dev, return 0; err_open: + ALOGE("%s: error opening output stream", __func__); free(out); return ret; } @@ -2781,6 +2798,7 @@ static const struct { { AUDIO_DEVICE_OUT_WIRED_HEADSET | AUDIO_DEVICE_OUT_WIRED_HEADPHONE, "headphone" }, { AUDIO_DEVICE_OUT_EARPIECE, "earpiece" }, { AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET, "analog-dock" }, + { AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET, "analog-dock" }, { AUDIO_DEVICE_OUT_ALL_SCO, "sco-out" }, { AUDIO_DEVICE_IN_BUILTIN_MIC, "builtin-mic" }, @@ -2990,7 +3008,7 @@ static int adev_open(const hw_module_t* module, const char* name, hw_device_t** device) { struct espresso_audio_device *adev; - int ret; + int i, ret; if (strcmp(name, AUDIO_HARDWARE_INTERFACE) != 0) return -EINVAL; @@ -3037,6 +3055,10 @@ static int adev_open(const hw_module_t* module, const char* name, adev->in_device = AUDIO_DEVICE_IN_BUILTIN_MIC & ~AUDIO_DEVICE_BIT_IN; select_devices(adev); + for (i = 0; i < OUTPUT_TOTAL; i++) { + adev->outputs[i] = NULL; + } + adev->pcm_modem_dl = NULL; adev->pcm_modem_ul = NULL; adev->pcm_bt_dl = NULL; -- cgit v1.1