[ALSA] Revolution 5.1 - add AK5365 ADC support
authorJochen Voss <voss@seehuhn.de>
Tue, 8 Aug 2006 19:12:44 +0000 (21:12 +0200)
committerJaroslav Kysela <perex@suse.cz>
Sat, 23 Sep 2006 08:40:18 +0000 (10:40 +0200)
Add support for the AK5365 ADC.

Signed-off-by: Jochen Voss <voss@seehuhn.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
include/sound/ak4xxx-adda.h
sound/i2c/other/ak4xxx-adda.c

index 3d98884920261483c00f47879432933be112583f..65ddfa3cac1fb67a7db48216edd4cfbacf90669e 100644 (file)
@@ -53,7 +53,8 @@ struct snd_akm4xxx {
        unsigned int idx_offset;                /* control index offset */
        enum {
                SND_AK4524, SND_AK4528, SND_AK4529,
-               SND_AK4355, SND_AK4358, SND_AK4381
+               SND_AK4355, SND_AK4358, SND_AK4381,
+               SND_AK5365
        } type;
        unsigned int *num_stereo;       /* array of combined counts
                                         * for the mixer
index dc7cc2001b74a572b67bc4d015e8e2f4f527f600..7d562f0842077d3fda471fb0f78459d8acadba9e 100644 (file)
@@ -598,6 +598,31 @@ int snd_akm4xxx_build_controls(struct snd_akm4xxx *ak)
                if (err < 0)
                        goto __error;
        }
+
+       if (ak->type == SND_AK5365) {
+               memset(ctl, 0, sizeof(*ctl));
+               if (ak->channel_names == NULL)
+                       strcpy(ctl->id.name, "Capture Volume");
+               else
+                       strcpy(ctl->id.name, ak->channel_names[0]);
+               ctl->id.index = ak->idx_offset * 2;
+               ctl->id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
+               ctl->count = 1;
+               ctl->info = snd_akm4xxx_stereo_volume_info;
+               ctl->get = snd_akm4xxx_stereo_volume_get;
+               ctl->put = snd_akm4xxx_stereo_volume_put;
+               /* Registers 4 & 5 (see AK5365 data sheet, pages 34 and 35):
+                * valid values are from 0x00 (mute) to 0x98 (+12dB).  */
+               ctl->private_value =
+                       AK_COMPOSE(0, 4, 0, 0x98);
+               ctl->private_data = ak;
+               err = snd_ctl_add(ak->card,
+                                 snd_ctl_new(ctl, SNDRV_CTL_ELEM_ACCESS_READ|
+                                             SNDRV_CTL_ELEM_ACCESS_WRITE));
+               if (err < 0)
+                       goto __error;
+       }
+
        if (ak->type == SND_AK4355 || ak->type == SND_AK4358)
                num_emphs = 1;
        else