ALSA: ice1712: Add support for STAudio ADCIII
authorTakashi Iwai <tiwai@suse.de>
Mon, 21 Aug 2017 14:13:27 +0000 (16:13 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 22 Aug 2017 14:58:59 +0000 (16:58 +0200)
STAudio ADCIII has the same SSID as Hoontech STDSP24, but requires a
slightly different configuration.  This patch allows user to choose
this model via model=staudio option to set the proper configuration
for the board.

Bugzilla: http://bugzilla.suse.com/show_bug.cgi?id=1048934
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/ice1712/hoontech.c
sound/pci/ice1712/hoontech.h

index f37ed0bc203d8a3e3f2943a3f8ac2255648bdca4..fa301d31745bb9b14e0a5b10ea5eb9d846e38c37 100644 (file)
@@ -166,7 +166,7 @@ static void snd_ice1712_stdsp24_midi2(struct snd_ice1712 *ice, int activate)
        mutex_unlock(&ice->gpio_mutex);
 }
 
-static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)
+static int hoontech_init(struct snd_ice1712 *ice, bool staudio)
 {
        struct hoontech_spec *spec;
        int box, chn;
@@ -203,7 +203,10 @@ static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)
        ICE1712_STDSP24_3_INSEL(spec->boxbits, 0);
 
        /* let's go - activate only functions in first box */
-       spec->config = 0;
+       if (staudio)
+               spec->config = ICE1712_STDSP24_MUTE;
+       else
+               spec->config = 0;
                            /* ICE1712_STDSP24_MUTE |
                               ICE1712_STDSP24_INSEL |
                               ICE1712_STDSP24_DAREAR; */
@@ -226,9 +229,16 @@ static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)
                                     ICE1712_STDSP24_BOX_CHN4 |
                                     ICE1712_STDSP24_BOX_MIDI1 |
                                     ICE1712_STDSP24_BOX_MIDI2;
-       spec->boxconfig[1] = 
-       spec->boxconfig[2] = 
-       spec->boxconfig[3] = 0;
+       if (staudio) {
+               spec->boxconfig[1] =
+               spec->boxconfig[2] =
+               spec->boxconfig[3] = spec->boxconfig[0];
+       } else {
+               spec->boxconfig[1] =
+               spec->boxconfig[2] =
+               spec->boxconfig[3] = 0;
+       }
+
        snd_ice1712_stdsp24_darear(ice,
                (spec->config & ICE1712_STDSP24_DAREAR) ? 1 : 0);
        snd_ice1712_stdsp24_mute(ice,
@@ -248,6 +258,16 @@ static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)
        return 0;
 }
 
+static int snd_ice1712_hoontech_init(struct snd_ice1712 *ice)
+{
+       return hoontech_init(ice, false);
+}
+
+static int snd_ice1712_staudio_init(struct snd_ice1712 *ice)
+{
+       return hoontech_init(ice, true);
+}
+
 /*
  * AK4524 access
  */
@@ -351,5 +371,14 @@ struct snd_ice1712_card_info snd_ice1712_hoontech_cards[] = {
                .model = "ez8",
                .chip_init = snd_ice1712_ez8_init,
        },
+       {
+               /* STAudio ADCIII has the same SSID as Hoontech StA DSP24,
+                * thus identified only via the explicit model option
+                */
+               .subvendor = ICE1712_SUBDEVICE_STAUDIO_ADCIII,  /* a dummy id */
+               .name = "STAudio ADCIII",
+               .model = "staudio",
+               .chip_init = snd_ice1712_staudio_init,
+       },
        { } /* terminator */
 };
index cc1da1e69ad137225ac884cc4acb0cf3a2dd503b..7f94943392ce87814f642b2f682d4b0878fbe961 100644 (file)
@@ -34,6 +34,7 @@
 #define ICE1712_SUBDEVICE_STDSP24_VALUE                0x00010010      /* A dummy id for Hoontech SoundTrack Audio DSP 24 Value */
 #define ICE1712_SUBDEVICE_STDSP24_MEDIA7_1     0x16141217      /* Hoontech ST Audio DSP24 Media 7.1 */
 #define ICE1712_SUBDEVICE_EVENT_EZ8            0x00010001      /* A dummy id for EZ8 */
+#define ICE1712_SUBDEVICE_STAUDIO_ADCIII       0x00010002      /* A dummy id for STAudio ADCIII */
 
 extern struct snd_ice1712_card_info snd_ice1712_hoontech_cards[];