summaryrefslogtreecommitdiffstats
path: root/audio
diff options
context:
space:
mode:
authorUtkarsh Gupta <utkarsh.eminem@gmail.com>2014-05-15 17:21:20 +0530
committerUtkarsh Gupta <utkarsh.eminem@gmail.com>2014-07-07 12:48:36 +0530
commitfba9a230049b1b40e83901a9127a6e4294e111f8 (patch)
treea462f6ada7cef3f068eb181c3464538b05c3c0e5 /audio
parentcaa2a166a56ad0776e0f6828c60d386d68e67862 (diff)
downloaddevice_samsung_n7100-fba9a230049b1b40e83901a9127a6e4294e111f8.zip
device_samsung_n7100-fba9a230049b1b40e83901a9127a6e4294e111f8.tar.gz
device_samsung_n7100-fba9a230049b1b40e83901a9127a6e4294e111f8.tar.bz2
Audio HAL updates
Change-Id: Ie41cade3494dc9d3f8ba886ae1f4977e25b97423
Diffstat (limited to 'audio')
-rw-r--r--audio/audio_hw.c183
-rw-r--r--audio/audio_hw.h6
2 files changed, 108 insertions, 81 deletions
diff --git a/audio/audio_hw.c b/audio/audio_hw.c
index 97576fa..c1471b2 100644
--- a/audio/audio_hw.c
+++ b/audio/audio_hw.c
@@ -73,7 +73,7 @@ struct pcm_config pcm_config_capture = {
struct pcm_config pcm_config_vx = {
.channels = 2,
- .rate = VX_NB_SAMPLING_RATE,
+ .rate = VX_WB_SAMPLING_RATE,
.period_size = 160,
.period_count = 2,
.format = PCM_FORMAT_S16_LE,
@@ -314,7 +314,6 @@ static int set_route_by_array(struct mixer *mixer, struct route_setting *route,
void select_devices(struct m0_audio_device *adev)
{
int i;
-
if (adev->active_out_device == adev->out_device && adev->active_in_device == adev->in_device)
return;
@@ -324,26 +323,30 @@ void select_devices(struct m0_audio_device *adev)
/* Turn on new devices first so we don't glitch due to powerdown... */
for (i = 0; i < adev->num_dev_cfgs; i++)
if ((adev->out_device & adev->dev_cfgs[i].mask) &&
- !(adev->active_out_device & adev->dev_cfgs[i].mask))
+ !(adev->active_out_device & adev->dev_cfgs[i].mask) &&
+ !(adev->dev_cfgs[i].mask & AUDIO_DEVICE_BIT_IN))
set_route_by_array(adev->mixer, adev->dev_cfgs[i].on,
adev->dev_cfgs[i].on_len);
for (i = 0; i < adev->num_dev_cfgs; i++)
if ((adev->in_device & adev->dev_cfgs[i].mask) &&
- !(adev->active_in_device & adev->dev_cfgs[i].mask))
+ !(adev->active_in_device & adev->dev_cfgs[i].mask) &&
+ (adev->dev_cfgs[i].mask & AUDIO_DEVICE_BIT_IN))
set_route_by_array(adev->mixer, adev->dev_cfgs[i].on,
adev->dev_cfgs[i].on_len);
/* ...then disable old ones. */
for (i = 0; i < adev->num_dev_cfgs; i++)
if (!(adev->out_device & adev->dev_cfgs[i].mask) &&
- (adev->active_out_device & adev->dev_cfgs[i].mask))
+ (adev->active_out_device & adev->dev_cfgs[i].mask) &&
+ !(adev->dev_cfgs[i].mask & AUDIO_DEVICE_BIT_IN))
set_route_by_array(adev->mixer, adev->dev_cfgs[i].off,
adev->dev_cfgs[i].off_len);
for (i = 0; i < adev->num_dev_cfgs; i++)
if (!(adev->in_device & adev->dev_cfgs[i].mask) &&
- (adev->active_in_device & adev->dev_cfgs[i].mask))
+ (adev->active_in_device & adev->dev_cfgs[i].mask) &&
+ (adev->dev_cfgs[i].mask & AUDIO_DEVICE_BIT_IN))
set_route_by_array(adev->mixer, adev->dev_cfgs[i].off,
adev->dev_cfgs[i].off_len);
@@ -357,7 +360,13 @@ static int start_call(struct m0_audio_device *adev)
int bt_on;
bt_on = adev->out_device & AUDIO_DEVICE_OUT_ALL_SCO;
- pcm_config_vx.rate = adev->wb_amr ? VX_WB_SAMPLING_RATE : VX_NB_SAMPLING_RATE;
+
+ if (bt_on) {
+ /* use amr-nb for bluetooth */
+ pcm_config_vx.rate = VX_NB_SAMPLING_RATE;
+ } else {
+ pcm_config_vx.rate = adev->wb_amr ? VX_WB_SAMPLING_RATE : VX_NB_SAMPLING_RATE;
+ }
/* Open modem PCM channels */
if (adev->pcm_modem_dl == NULL) {
@@ -493,8 +502,9 @@ static void set_incall_device(struct m0_audio_device *adev)
device_type = SOUND_AUDIO_PATH_HANDSET;
break;
case AUDIO_DEVICE_OUT_SPEAKER:
- case AUDIO_DEVICE_OUT_AUX_DIGITAL:
+ case AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET:
case AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET:
+ case AUDIO_DEVICE_OUT_AUX_DIGITAL:
device_type = SOUND_AUDIO_PATH_SPEAKER;
break;
case AUDIO_DEVICE_OUT_WIRED_HEADSET:
@@ -588,6 +598,18 @@ static void select_mode(struct m0_audio_device *adev)
adev->in_call = 0;
ril_set_call_clock_sync(&adev->ril, SOUND_CLOCK_STOP);
end_call(adev);
+ //Force Input Standby
+ adev->in_device = AUDIO_DEVICE_NONE;
+
+ ALOGD("%s: set voicecall route: voicecall_default_disable", __func__);
+ set_bigroute_by_array(adev->mixer, voicecall_default_disable, 1);
+ ALOGD("%s: set voicecall route: default_input_disable", __func__);
+ set_bigroute_by_array(adev->mixer, default_input_disable, 1);
+ ALOGD("%s: set voicecall route: headset_input_disable", __func__);
+ set_bigroute_by_array(adev->mixer, headset_input_disable, 1);
+ ALOGD("%s: set voicecall route: bt_disable", __func__);
+ set_bigroute_by_array(adev->mixer, bt_disable, 1);
+
force_all_standby(adev);
select_output_device(adev);
select_input_device(adev);
@@ -633,6 +655,12 @@ static void select_output_device(struct m0_audio_device *adev)
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;
@@ -692,9 +720,6 @@ static void select_output_device(struct m0_audio_device *adev)
}
if (bt_on) {
- // bt uses a different port (PORT_BT) for playback, reopen the pcms
- end_call(adev);
- start_call(adev);
ALOGD("%s: set voicecall route: bt_input", __func__);
set_bigroute_by_array(adev->mixer, bt_input, 1);
ALOGD("%s: set voicecall route: bt_output", __func__);
@@ -703,19 +728,22 @@ static void select_output_device(struct m0_audio_device *adev)
ALOGD("%s: set voicecall route: bt_disable", __func__);
set_bigroute_by_array(adev->mixer, bt_disable, 1);
}
-
set_incall_device(adev);
}
}
static void select_input_device(struct m0_audio_device *adev)
{
- switch(adev->in_device) {
+ int input_device = AUDIO_DEVICE_BIT_IN | adev->in_device;
+
+ switch(input_device) {
case AUDIO_DEVICE_IN_BUILTIN_MIC:
ALOGD("%s: AUDIO_DEVICE_IN_BUILTIN_MIC", __func__);
break;
case AUDIO_DEVICE_IN_BACK_MIC:
- ALOGD("%s: AUDIO_DEVICE_IN_BACK_MIC", __func__);
+ // Force use both mics for video recording
+ adev->in_device = (AUDIO_DEVICE_IN_BACK_MIC | AUDIO_DEVICE_IN_BUILTIN_MIC) & ~AUDIO_DEVICE_BIT_IN;
+ ALOGD("%s: AUDIO_DEVICE_IN_BACK_MIC and AUDIO_DEVICE_IN_BUILTIN_MIC", __func__);
break;
case AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET:
ALOGD("%s: AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET", __func__);
@@ -2401,7 +2429,6 @@ static int in_remove_audio_effect(const struct audio_stream *stream,
in->preprocessors[in->num_preprocessors].effect_itfe = NULL;
in->preprocessors[in->num_preprocessors].channel_configs = NULL;
-
/* check compatibility between main channel supported and possible auxiliary channels */
in_update_aux_channels(in, NULL);
@@ -2806,9 +2833,10 @@ static const struct {
{ AUDIO_DEVICE_OUT_SPEAKER, "speaker" },
{ 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_ANLG_DOCK_HEADSET, "analogue-dock" },
{ AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET, "digital-dock" },
{ AUDIO_DEVICE_OUT_ALL_SCO, "sco-out" },
+ { AUDIO_DEVICE_OUT_AUX_DIGITAL, "aux-digital" },
{ AUDIO_DEVICE_IN_BUILTIN_MIC, "builtin-mic" },
{ AUDIO_DEVICE_IN_BACK_MIC, "back-mic" },
@@ -2826,86 +2854,85 @@ static void adev_config_start(void *data, const XML_Char *elem,
unsigned int i, j;
for (i = 0; attr[i]; i += 2) {
- if (strcmp(attr[i], "name") == 0)
- name = attr[i + 1];
+ if (strcmp(attr[i], "name") == 0)
+ name = attr[i + 1];
- if (strcmp(attr[i], "val") == 0)
- val = attr[i + 1];
+ if (strcmp(attr[i], "val") == 0)
+ val = attr[i + 1];
}
if (strcmp(elem, "device") == 0) {
- if (!name) {
- ALOGE("Unnamed device\n");
- return;
- }
-
- for (i = 0; i < sizeof(dev_names) / sizeof(dev_names[0]); i++) {
- if (strcmp(dev_names[i].name, name) == 0) {
- ALOGI("Allocating device %s\n", name);
- dev_cfg = realloc(s->adev->dev_cfgs,
- (s->adev->num_dev_cfgs + 1)
- * sizeof(*dev_cfg));
- if (!dev_cfg) {
- ALOGE("Unable to allocate dev_cfg\n");
+ if (!name) {
+ ALOGE("Unnamed device\n");
return;
}
- s->dev = &dev_cfg[s->adev->num_dev_cfgs];
- memset(s->dev, 0, sizeof(*s->dev));
- s->dev->mask = dev_names[i].mask;
+ for (i = 0; i < sizeof(dev_names) / sizeof(dev_names[0]); i++) {
+ if (strcmp(dev_names[i].name, name) == 0) {
+ ALOGI("Allocating device %s\n", name);
+ dev_cfg = realloc(s->adev->dev_cfgs,
+ (s->adev->num_dev_cfgs + 1)
+ * sizeof(*dev_cfg));
+ if (!dev_cfg) {
+ ALOGE("Unable to allocate dev_cfg\n");
+ return;
+ }
- s->adev->dev_cfgs = dev_cfg;
- s->adev->num_dev_cfgs++;
- }
- }
+ s->dev = &dev_cfg[s->adev->num_dev_cfgs];
+ memset(s->dev, 0, sizeof(*s->dev));
+ s->dev->mask = dev_names[i].mask;
+ s->adev->dev_cfgs = dev_cfg;
+ s->adev->num_dev_cfgs++;
+ }
+ }
} else if (strcmp(elem, "path") == 0) {
- if (s->path_len)
- ALOGW("Nested paths\n");
-
- /* If this a path for a device it must have a role */
- if (s->dev) {
- /* Need to refactor a bit... */
- if (strcmp(name, "on") == 0) {
- s->on = true;
- } else if (strcmp(name, "off") == 0) {
- s->on = false;
- } else {
- ALOGW("Unknown path name %s\n", name);
+ if (s->path_len)
+ ALOGW("Nested paths\n");
+
+ /* If this a path for a device it must have a role */
+ if (s->dev) {
+ /* Need to refactor a bit... */
+ if (strcmp(name, "on") == 0) {
+ s->on = true;
+ } else if (strcmp(name, "off") == 0) {
+ s->on = false;
+ } else {
+ ALOGW("Unknown path name %s\n", name);
+ }
}
- }
} else if (strcmp(elem, "ctl") == 0) {
- struct route_setting *r;
+ struct route_setting *r;
- if (!name) {
- ALOGE("Unnamed control\n");
- return;
- }
+ if (!name) {
+ ALOGE("Unnamed control\n");
+ return;
+ }
- if (!val) {
- ALOGE("No value specified for %s\n", name);
- return;
- }
+ if (!val) {
+ ALOGE("No value specified for %s\n", name);
+ return;
+ }
- ALOGV("Parsing control %s => %s\n", name, val);
+ ALOGV("Parsing control %s => %s\n", name, val);
- r = realloc(s->path, sizeof(*r) * (s->path_len + 1));
- if (!r) {
- ALOGE("Out of memory handling %s => %s\n", name, val);
- return;
- }
+ r = realloc(s->path, sizeof(*r) * (s->path_len + 1));
+ if (!r) {
+ ALOGE("Out of memory handling %s => %s\n", name, val);
+ return;
+ }
- r[s->path_len].ctl_name = strdup(name);
- r[s->path_len].strval = NULL;
+ r[s->path_len].ctl_name = strdup(name);
+ r[s->path_len].strval = NULL;
- /* This can be fooled but it'll do */
- r[s->path_len].intval = atoi(val);
- if (!r[s->path_len].intval && strcmp(val, "0") != 0)
- r[s->path_len].strval = strdup(val);
+ /* This can be fooled but it'll do */
+ r[s->path_len].intval = atoi(val);
+ if (!r[s->path_len].intval && strcmp(val, "0") != 0)
+ r[s->path_len].strval = strdup(val);
- s->path = r;
- s->path_len++;
+ s->path = r;
+ s->path_len++;
}
}
@@ -3066,7 +3093,7 @@ static int adev_open(const hw_module_t* module, const char* name,
pthread_mutex_lock(&adev->lock);
adev->mode = AUDIO_MODE_NORMAL;
adev->out_device = AUDIO_DEVICE_OUT_SPEAKER;
- adev->in_device = AUDIO_DEVICE_IN_BUILTIN_MIC & ~AUDIO_DEVICE_BIT_IN;
+ adev->in_device = AUDIO_DEVICE_NONE;
select_devices(adev);
adev->pcm_modem_dl = NULL;
@@ -3104,7 +3131,7 @@ struct audio_module HAL_MODULE_INFO_SYM = {
.module_api_version = AUDIO_MODULE_API_VERSION_0_1,
.hal_api_version = HARDWARE_HAL_API_VERSION,
.id = AUDIO_HARDWARE_MODULE_ID,
- .name = "M0 audio HW HAL",
+ .name = "T03G audio HW HAL",
.author = "The CyanogenMod Project",
.methods = &hal_module_methods,
},
diff --git a/audio/audio_hw.h b/audio/audio_hw.h
index 889f747..889c249 100644
--- a/audio/audio_hw.h
+++ b/audio/audio_hw.h
@@ -177,7 +177,7 @@ struct route_setting noise_suppression_disable[] = {
struct route_setting headset_input[] = {
{ .ctl_name = "MIXINL IN2L Switch", .intval = 0, },
- { .ctl_name = "MIXINR IN1R Switch", .intval = 0, },
+ { .ctl_name = "MIXINR IN1R Switch", .intval = 0, },
{ .ctl_name = "Headset Mic Switch", .intval = 1, },
{ .ctl_name = "IN1L Volume", .intval = 18, },
{ .ctl_name = "MIXINL IN1L Switch", .intval = 1, },
@@ -210,8 +210,8 @@ struct route_setting bt_output[] = {
{ .ctl_name = "AIF2DAC2R Mixer AIF1.1 Switch", .intval = 1, },
{ .ctl_name = "AIF2DAC Volume", .intval = 96, },
{ .ctl_name = "MIXINL IN1L Volume", .intval = 1, },
- { .ctl_name = "IN2L Volume", .intval = 25, },
- { .ctl_name = "IN1R Volume", .intval = 25, },
+ { .ctl_name = "IN2L Volume", .intval = 28, },
+ { .ctl_name = "IN1R Volume", .intval = 28, },
{ .ctl_name = "LINEOUT1N Switch", .intval = 0, },
{ .ctl_name = "LINEOUT1P Switch", .intval = 0, },
{ .ctl_name = "AIF1ADC1 HPF Switch", .intval = 0, },