]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
greybus: audio: Update device type based on widget types
authorVaibhav Agarwal <vaibhav.agarwal@linaro.org>
Wed, 30 Mar 2016 07:53:56 +0000 (13:23 +0530)
committerGreg Kroah-Hartman <gregkh@google.com>
Tue, 5 Apr 2016 13:39:22 +0000 (09:39 -0400)
Device type info shared to above HAL is currently hard coded
to SPK only. Actual device type is identifed while parsing
widget types from topology FW shared by codec module.

Signed-off-by: Vaibhav Agarwal <vaibhav.agarwal@linaro.org>
Reviewed-by: Mark Greer <mgreer@animalcreek.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@google.com>
drivers/staging/greybus/audio_codec.h
drivers/staging/greybus/audio_module.c
drivers/staging/greybus/audio_topology.c

index 165b3595dae9dc1838fa8365f9521cb443ebe5cc..6182b20c5a27cad7d40f7ce08d3f8bc01e50ac93 100644 (file)
@@ -36,6 +36,21 @@ enum gbcodec_reg_index {
        GBCODEC_REG_COUNT
 };
 
+/* device_type should be same as defined in audio.h (Android media layer) */
+enum {
+       GBAUDIO_DEVICE_NONE                     = 0x0,
+       /* reserved bits */
+       GBAUDIO_DEVICE_BIT_IN                   = 0x80000000,
+       GBAUDIO_DEVICE_BIT_DEFAULT              = 0x40000000,
+       /* output devices */
+       GBAUDIO_DEVICE_OUT_SPEAKER              = 0x2,
+       GBAUDIO_DEVICE_OUT_WIRED_HEADSET        = 0x4,
+       GBAUDIO_DEVICE_OUT_WIRED_HEADPHONE      = 0x8,
+       /* input devices */
+       GBAUDIO_DEVICE_IN_BUILTIN_MIC           = GBAUDIO_DEVICE_BIT_IN | 0x4,
+       GBAUDIO_DEVICE_IN_WIRED_HEADSET         = GBAUDIO_DEVICE_BIT_IN | 0x10,
+};
+
 /* bit 0-SPK, 1-HP, 2-DAC,
  * 4-MIC, 5-HSMIC, 6-MIC2
  */
@@ -144,6 +159,8 @@ struct gbaudio_module_info {
        /* need to share this info to above user space */
        int manager_id;
        char name[NAME_SIZE];
+       unsigned int ip_devices;
+       unsigned int op_devices;
 
        /* jack related */
        char jack_name[NAME_SIZE];
index a7f961f85e21ae28d7d8b24a3d0da57b0671b833..dd43b6d5ae077bd8fe252ebcf774d389103c05a8 100644 (file)
@@ -353,8 +353,8 @@ static int gb_audio_probe(struct gb_bundle *bundle,
        desc.vid = 2; /* todo */
        desc.pid = 3; /* todo */
        desc.cport = gbmodule->dev_id;
-       desc.op_devices = 0x2; /* todo */
-       desc.ip_devices = 0x0; /* todo */
+       desc.op_devices = gbmodule->op_devices;
+       desc.ip_devices = gbmodule->ip_devices;
        gbmodule->manager_id = gb_audio_manager_add(&desc);
 
        dev_dbg(dev, "Add GB Audio device:%s\n", gbmodule->name);
index 79161c1b74ce00ca8917d17cf6b42c45c4305031..e423e6d16a25d7c3e6f1936f5a06ab0afb40215b 100644 (file)
@@ -665,15 +665,20 @@ static int gbaudio_tplg_create_widget(struct gbaudio_module_info *module,
        case snd_soc_dapm_spk:
                *dw = (struct snd_soc_dapm_widget)
                        SND_SOC_DAPM_SPK(w->name, gbcodec_event_spk);
+               module->op_devices |= GBAUDIO_DEVICE_OUT_SPEAKER;
                break;
        case snd_soc_dapm_hp:
                *dw = (struct snd_soc_dapm_widget)
                        SND_SOC_DAPM_HP(w->name, gbcodec_event_hp);
                module->num_jacks++;
+               module->op_devices |= (GBAUDIO_DEVICE_OUT_WIRED_HEADSET
+                                       | GBAUDIO_DEVICE_OUT_WIRED_HEADPHONE);
+               module->ip_devices |= GBAUDIO_DEVICE_IN_WIRED_HEADSET;
                break;
        case snd_soc_dapm_mic:
                *dw = (struct snd_soc_dapm_widget)
                        SND_SOC_DAPM_MIC(w->name, gbcodec_event_int_mic);
+               module->ip_devices |= GBAUDIO_DEVICE_IN_BUILTIN_MIC;
                break;
        case snd_soc_dapm_output:
                *dw = (struct snd_soc_dapm_widget)SND_SOC_DAPM_OUTPUT(w->name);