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
  */
        /* 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];
 
        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);
 
        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);