summaryrefslogtreecommitdiffstats
path: root/drivers/staging/greybus/audio_codec.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/staging/greybus/audio_codec.c')
-rw-r--r--drivers/staging/greybus/audio_codec.c68
1 files changed, 45 insertions, 23 deletions
diff --git a/drivers/staging/greybus/audio_codec.c b/drivers/staging/greybus/audio_codec.c
index 810ac62..2f70295 100644
--- a/drivers/staging/greybus/audio_codec.c
+++ b/drivers/staging/greybus/audio_codec.c
@@ -707,50 +707,72 @@ static int gbaudio_init_jack(struct gbaudio_module_info *module,
{
int ret;
+ if (!module->jack_mask)
+ return 0;
+
snprintf(module->jack_name, NAME_SIZE, "GB %d Headset Jack",
module->dev_id);
- ret = snd_soc_jack_new(codec, module->jack_name, GBCODEC_JACK_MASK,
+ ret = snd_soc_jack_new(codec, module->jack_name, module->jack_mask,
&module->headset_jack);
if (ret) {
dev_err(module->dev, "Failed to create new jack\n");
return ret;
}
+ if (!module->button_mask)
+ return 0;
+
snprintf(module->button_name, NAME_SIZE, "GB %d Button Jack",
module->dev_id);
- ret = snd_soc_jack_new(codec, module->button_name,
- GBCODEC_JACK_BUTTON_MASK, &module->button_jack);
+ ret = snd_soc_jack_new(codec, module->button_name, module->button_mask,
+ &module->button_jack);
if (ret) {
dev_err(module->dev, "Failed to create button jack\n");
return ret;
}
- ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_0,
- KEY_MEDIA);
- if (ret) {
- dev_err(module->dev, "Failed to set BTN_0\n");
- return ret;
+ /*
+ * Currently, max 4 buttons are supported with following key mapping
+ * BTN_0 = KEY_MEDIA
+ * BTN_1 = KEY_VOICECOMMAND
+ * BTN_2 = KEY_VOLUMEUP
+ * BTN_3 = KEY_VOLUMEDOWN
+ */
+
+ if (module->button_mask & SND_JACK_BTN_0) {
+ ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_0,
+ KEY_MEDIA);
+ if (ret) {
+ dev_err(module->dev, "Failed to set BTN_0\n");
+ return ret;
+ }
}
- ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_1,
- KEY_VOICECOMMAND);
- if (ret) {
- dev_err(module->dev, "Failed to set BTN_1\n");
- return ret;
+ if (module->button_mask & SND_JACK_BTN_1) {
+ ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_1,
+ KEY_VOICECOMMAND);
+ if (ret) {
+ dev_err(module->dev, "Failed to set BTN_1\n");
+ return ret;
+ }
}
- ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_2,
- KEY_VOLUMEUP);
- if (ret) {
- dev_err(module->dev, "Failed to set BTN_2\n");
- return ret;
+ if (module->button_mask & SND_JACK_BTN_2) {
+ ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_2,
+ KEY_VOLUMEUP);
+ if (ret) {
+ dev_err(module->dev, "Failed to set BTN_2\n");
+ return ret;
+ }
}
- ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_3,
- KEY_VOLUMEDOWN);
- if (ret) {
- dev_err(module->dev, "Failed to set BTN_0\n");
- return ret;
+ if (module->button_mask & SND_JACK_BTN_3) {
+ ret = snd_jack_set_key(module->button_jack.jack, SND_JACK_BTN_3,
+ KEY_VOLUMEDOWN);
+ if (ret) {
+ dev_err(module->dev, "Failed to set BTN_0\n");
+ return ret;
+ }
}
/* FIXME
OpenPOWER on IntegriCloud