Ignore:
Timestamp:
Apr 19, 2025, 8:08:37 PM (4 months ago)
Author:
David Azarewicz
Message:

Merge in changes from 6.6-LTS branch.
Fixed additional 25+ problems.

Location:
GPL/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/pci/emu10k1/emufx.c

    r703 r772  
    22/*
    33 *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
     4 *                   James Courtier-Dutton <James@superbug.co.uk>
     5 *                   Oswald Buddenhagen <oswald.buddenhagen@gmx.de>
    46 *                   Creative Labs, Inc.
     7 *
    58 *  Routines for effect processor FX8010
    6  *
    7  *  Copyright (c) by James Courtier-Dutton <James@superbug.co.uk>
    8  *      Added EMU 1010 support.
    9  *
    10  *  BUGS:
    11  *    --
    12  *
    13  *  TODO:
    14  *    --
    159 */
    1610
     
    4842 */
    4943
    50 static const char * const fxbuses[16] = {
     44// Playback channel labels; corresponds with the public FXBUS_* defines.
     45// Unlike the tables below, this is not determined by the hardware.
     46const char * const snd_emu10k1_fxbus[32] = {
    5147        /* 0x00 */ "PCM Left",
    5248        /* 0x01 */ "PCM Right",
    53         /* 0x02 */ "PCM Surround Left",
    54         /* 0x03 */ "PCM Surround Right",
     49        /* 0x02 */ "PCM Rear Left",
     50        /* 0x03 */ "PCM Rear Right",
    5551        /* 0x04 */ "MIDI Left",
    5652        /* 0x05 */ "MIDI Right",
    57         /* 0x06 */ "Center",
    58         /* 0x07 */ "LFE",
    59         /* 0x08 */ NULL,
    60         /* 0x09 */ NULL,
     53        /* 0x06 */ "PCM Center",
     54        /* 0x07 */ "PCM LFE",
     55        /* 0x08 */ "PCM Front Left",
     56        /* 0x09 */ "PCM Front Right",
    6157        /* 0x0a */ NULL,
    6258        /* 0x0b */ NULL,
    6359        /* 0x0c */ "MIDI Reverb",
    6460        /* 0x0d */ "MIDI Chorus",
    65         /* 0x0e */ NULL,
    66         /* 0x0f */ NULL
     61        /* 0x0e */ "PCM Side Left",
     62        /* 0x0f */ "PCM Side Right",
     63        /* 0x10 */ NULL,
     64        /* 0x11 */ NULL,
     65        /* 0x12 */ NULL,
     66        /* 0x13 */ NULL,
     67        /* 0x14 */ "Passthrough Left",
     68        /* 0x15 */ "Passthrough Right",
     69        /* 0x16 */ NULL,
     70        /* 0x17 */ NULL,
     71        /* 0x18 */ NULL,
     72        /* 0x19 */ NULL,
     73        /* 0x1a */ NULL,
     74        /* 0x1b */ NULL,
     75        /* 0x1c */ NULL,
     76        /* 0x1d */ NULL,
     77        /* 0x1e */ NULL,
     78        /* 0x1f */ NULL
    6779};
    6880
    69 static const char * const creative_ins[16] = {
     81// Physical inputs; corresponds with the public EXTIN_* defines.
     82const char * const snd_emu10k1_sblive_ins[16] = {
    7083        /* 0x00 */ "AC97 Left",
    7184        /* 0x01 */ "AC97 Right",
     
    8699};
    87100
    88 static const char * const audigy_ins[16] = {
     101// Physical inputs; corresponds with the public A_EXTIN_* defines.
     102const char * const snd_emu10k1_audigy_ins[16] = {
    89103        /* 0x00 */ "AC97 Left",
    90104        /* 0x01 */ "AC97 Right",
     
    105119};
    106120
    107 static const char * const creative_outs[32] = {
     121// Physical outputs; corresponds with the public EXTOUT_* defines.
     122const char * const snd_emu10k1_sblive_outs[32] = {
    108123        /* 0x00 */ "AC97 Left",
    109124        /* 0x01 */ "AC97 Right",
     
    122137        /* 0x0e */ "AC97 Surround Right",
    123138        /* 0x0f */ NULL,
     139        // This is actually the FXBUS2 range; SB Live! 5.1 only.
    124140        /* 0x10 */ NULL,
    125141        /* 0x11 */ "Analog Center",
     
    140156};
    141157
    142 static const char * const audigy_outs[32] = {
     158// Physical outputs; corresponds with the public A_EXTOUT_* defines.
     159const char * const snd_emu10k1_audigy_outs[32] = {
    143160        /* 0x00 */ "Digital Front Left",
    144161        /* 0x01 */ "Digital Front Right",
     
    173190        /* 0x1e */ NULL,
    174191        /* 0x1f */ NULL,
     192};
     193
     194// On the SB Live! 5.1, FXBUS2[1] and FXBUS2[2] are occupied by EXTOUT_ACENTER
     195// and EXTOUT_ALFE, so we can't connect inputs to them for multitrack recording.
     196//
     197// Since only 14 of the 16 EXTINs are used, this is not a big problem.
     198// We route AC97 to FX capture 14 and 15, SPDIF_CD to FX capture 0 and 3,
     199// and the rest of the EXTINs to the corresponding FX capture channel.
     200// Multitrack recorders will still see the center/LFE output signal
     201// on the second and third "input" channel.
     202const s8 snd_emu10k1_sblive51_fxbus2_map[16] = {
     203        2, -1, -1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 0, 1
    175204};
    176205
     
    320349static int snd_emu10k1_gpr_ctl_get(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
    321350{
     351        struct snd_emu10k1_fx8010_ctl *ctl =
     352                (struct snd_emu10k1_fx8010_ctl *) kcontrol->private_value;
     353        unsigned int i;
     354       
     355        for (i = 0; i < ctl->vcount; i++)
     356                ucontrol->value.integer.value[i] = ctl->value[i];
     357        return 0;
     358}
     359
     360static int snd_emu10k1_gpr_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
     361{
    322362        struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
    323363        struct snd_emu10k1_fx8010_ctl *ctl =
    324364                (struct snd_emu10k1_fx8010_ctl *) kcontrol->private_value;
    325         unsigned long flags;
    326         unsigned int i;
    327        
    328         spin_lock_irqsave(&emu->reg_lock, flags);
    329         for (i = 0; i < ctl->vcount; i++)
    330                 ucontrol->value.integer.value[i] = ctl->value[i];
    331         spin_unlock_irqrestore(&emu->reg_lock, flags);
    332         return 0;
    333 }
    334 
    335 static int snd_emu10k1_gpr_ctl_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
    336 {
    337         struct snd_emu10k1 *emu = snd_kcontrol_chip(kcontrol);
    338         struct snd_emu10k1_fx8010_ctl *ctl =
    339                 (struct snd_emu10k1_fx8010_ctl *) kcontrol->private_value;
    340         unsigned long flags;
    341         unsigned int nval, val;
     365        int nval, val;
    342366        unsigned int i, j;
    343367        int change = 0;
    344368       
    345         spin_lock_irqsave(&emu->reg_lock, flags);
    346369        for (i = 0; i < ctl->vcount; i++) {
    347370                nval = ucontrol->value.integer.value[i];
     
    357380                        snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, val);
    358381                        break;
     382                case EMU10K1_GPR_TRANSLATION_NEGATE:
     383                        snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, ~val);
     384                        break;
    359385                case EMU10K1_GPR_TRANSLATION_TABLE100:
    360386                        snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0, db_table[val]);
     387                        break;
     388                case EMU10K1_GPR_TRANSLATION_NEG_TABLE100:
     389                        snd_emu10k1_ptr_write(emu, emu->gpr_base + ctl->gpr[i], 0,
     390                                              val == 100 ? 0x80000000 : -(int)db_table[val]);
    361391                        break;
    362392                case EMU10K1_GPR_TRANSLATION_BASS:
     
    382412        }
    383413      __error:
    384         spin_unlock_irqrestore(&emu->reg_lock, flags);
    385414        return change;
    386415}
     
    643672                kcontrol = ctl->kcontrol;
    644673                if (kcontrol->id.iface == id->iface &&
    645                     !strcmp(kcontrol->id.name, id->name) &&
    646                     kcontrol->id.index == id->index)
     674                    kcontrol->id.index == id->index &&
     675                    !strcmp(kcontrol->id.name, id->name))
    647676                        return ctl;
    648677        }
     
    766795                        continue;
    767796                gctl_id = (struct snd_ctl_elem_id *)&gctl->id;
    768                 down_read(&emu->card->controls_rwsem);
    769797                if (snd_ctl_find_id(emu->card, gctl_id)) {
    770                         up_read(&emu->card->controls_rwsem);
    771798                        err = -EEXIST;
    772799                        goto __error;
    773800                }
    774                 up_read(&emu->card->controls_rwsem);
    775801                if (gctl_id->iface != SNDRV_CTL_ELEM_IFACE_MIXER &&
    776802                    gctl_id->iface != SNDRV_CTL_ELEM_IFACE_PCM) {
     803                        err = -EINVAL;
     804                        goto __error;
     805                }
     806                switch (gctl->translation) {
     807                case EMU10K1_GPR_TRANSLATION_NONE:
     808                case EMU10K1_GPR_TRANSLATION_NEGATE:
     809                        break;
     810                case EMU10K1_GPR_TRANSLATION_TABLE100:
     811                case EMU10K1_GPR_TRANSLATION_NEG_TABLE100:
     812                        if (gctl->min != 0 || gctl->max != 100) {
     813                                err = -EINVAL;
     814                                goto __error;
     815                        }
     816                        break;
     817                case EMU10K1_GPR_TRANSLATION_BASS:
     818                case EMU10K1_GPR_TRANSLATION_TREBLE:
     819                        if (gctl->min != 0 || gctl->max != 40) {
     820                                err = -EINVAL;
     821                                goto __error;
     822                        }
     823                        break;
     824                case EMU10K1_GPR_TRANSLATION_ONOFF:
     825                        if (gctl->min != 0 || gctl->max != 1) {
     826                                err = -EINVAL;
     827                                goto __error;
     828                        }
     829                        break;
     830                default:
    777831                        err = -EINVAL;
    778832                        goto __error;
     
    916970                if (err < 0)
    917971                        return err;
    918                 down_write(&card->controls_rwsem);
    919972                ctl = snd_emu10k1_look_for_ctl(emu, &id);
    920973                if (ctl)
    921974                        snd_ctl_remove(card, ctl->kcontrol);
    922                 up_write(&card->controls_rwsem);
    923975        }
    924976        return 0;
     
    11181170#define SND_EMU10K1_CAPTURE_CHANNELS    4
    11191171
     1172#define HR_VAL(v) ((v) * 0x80000000LL / 100 - 1)
     1173
    11201174static void
    1121 snd_emu10k1_init_mono_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
    1122                               const char *name, int gpr, int defval)
     1175snd_emu10k1_init_mono_control2(struct snd_emu10k1_fx8010_control_gpr *ctl,
     1176                               const char *name, int gpr, int defval, int defval_hr)
    11231177{
    11241178        ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
    11251179        strcpy(ctl->id.name, name);
    11261180        ctl->vcount = ctl->count = 1;
    1127         ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
    11281181        if (high_res_gpr_volume) {
    1129                 ctl->min = 0;
     1182                ctl->min = -1;
    11301183                ctl->max = 0x7fffffff;
    11311184                ctl->tlv = snd_emu10k1_db_linear;
    1132                 ctl->translation = EMU10K1_GPR_TRANSLATION_NONE;
     1185                ctl->translation = EMU10K1_GPR_TRANSLATION_NEGATE;
     1186                defval = defval_hr;
    11331187        } else {
    11341188                ctl->min = 0;
    11351189                ctl->max = 100;
    11361190                ctl->tlv = snd_emu10k1_db_scale1;
    1137                 ctl->translation = EMU10K1_GPR_TRANSLATION_TABLE100;
    1138         }
    1139 }
     1191                ctl->translation = EMU10K1_GPR_TRANSLATION_NEG_TABLE100;
     1192        }
     1193        ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
     1194}
     1195#define snd_emu10k1_init_mono_control(ctl, name, gpr, defval) \
     1196        snd_emu10k1_init_mono_control2(ctl, name, gpr, defval, HR_VAL(defval))
    11401197
    11411198static void
    1142 snd_emu10k1_init_stereo_control(struct snd_emu10k1_fx8010_control_gpr *ctl,
    1143                                 const char *name, int gpr, int defval)
     1199snd_emu10k1_init_stereo_control2(struct snd_emu10k1_fx8010_control_gpr *ctl,
     1200                                 const char *name, int gpr, int defval, int defval_hr)
    11441201{
    11451202        ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
    11461203        strcpy(ctl->id.name, name);
    11471204        ctl->vcount = ctl->count = 2;
    1148         ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
    1149         ctl->gpr[1] = gpr + 1; ctl->value[1] = defval;
    11501205        if (high_res_gpr_volume) {
    1151                 ctl->min = 0;
     1206                ctl->min = -1;
    11521207                ctl->max = 0x7fffffff;
    11531208                ctl->tlv = snd_emu10k1_db_linear;
    1154                 ctl->translation = EMU10K1_GPR_TRANSLATION_NONE;
     1209                ctl->translation = EMU10K1_GPR_TRANSLATION_NEGATE;
     1210                defval = defval_hr;
    11551211        } else {
    11561212                ctl->min = 0;
    11571213                ctl->max = 100;
    11581214                ctl->tlv = snd_emu10k1_db_scale1;
    1159                 ctl->translation = EMU10K1_GPR_TRANSLATION_TABLE100;
    1160         }
    1161 }
     1215                ctl->translation = EMU10K1_GPR_TRANSLATION_NEG_TABLE100;
     1216        }
     1217        ctl->gpr[0] = gpr + 0; ctl->value[0] = defval;
     1218        ctl->gpr[1] = gpr + 1; ctl->value[1] = defval;
     1219}
     1220#define snd_emu10k1_init_stereo_control(ctl, name, gpr, defval) \
     1221        snd_emu10k1_init_stereo_control2(ctl, name, gpr, defval, HR_VAL(defval))
    11621222
    11631223static void
     
    11891249
    11901250/*
    1191  * Used for emu1010 - conversion from 32-bit capture inputs from HANA
    1192  * to 2 x 16-bit registers in audigy - their values are read via DMA.
     1251 * Used for emu1010 - conversion from 32-bit capture inputs from the FPGA
     1252 * to 2 x 16-bit registers in Audigy - their values are read via DMA.
    11931253 * Conversion is performed by Audigy DSP instructions of FX8010.
    11941254 */
    1195 static int snd_emu10k1_audigy_dsp_convert_32_to_2x16(
     1255static void snd_emu10k1_audigy_dsp_convert_32_to_2x16(
    11961256                                struct snd_emu10k1_fx8010_code *icode,
    11971257                                u32 *ptr, int tmp, int bit_shifter16,
    11981258                                int reg_in, int reg_out)
    11991259{
    1200         A_OP(icode, ptr, iACC3, A_GPR(tmp + 1), reg_in, A_C_00000000, A_C_00000000);
    1201         A_OP(icode, ptr, iANDXOR, A_GPR(tmp), A_GPR(tmp + 1), A_GPR(bit_shifter16 - 1), A_C_00000000);
    1202         A_OP(icode, ptr, iTSTNEG, A_GPR(tmp + 2), A_GPR(tmp), A_C_80000000, A_GPR(bit_shifter16 - 2));
    1203         A_OP(icode, ptr, iANDXOR, A_GPR(tmp + 2), A_GPR(tmp + 2), A_C_80000000, A_C_00000000);
    1204         A_OP(icode, ptr, iANDXOR, A_GPR(tmp), A_GPR(tmp), A_GPR(bit_shifter16 - 3), A_C_00000000);
    1205         A_OP(icode, ptr, iMACINT0, A_GPR(tmp), A_C_00000000, A_GPR(tmp), A_C_00010000);
    1206         A_OP(icode, ptr, iANDXOR, reg_out, A_GPR(tmp), A_C_ffffffff, A_GPR(tmp + 2));
    1207         A_OP(icode, ptr, iACC3, reg_out + 1, A_GPR(tmp + 1), A_C_00000000, A_C_00000000);
    1208         return 1;
    1209 }
     1260        // This leaves the low word in place, which is fine,
     1261        // as the low bits are completely ignored subsequently.
     1262        // reg_out[1] = reg_in
     1263        A_OP(icode, ptr, iACC3, reg_out + 1, reg_in, A_C_00000000, A_C_00000000);
     1264        // It is fine to read reg_in multiple times.
     1265        // tmp = reg_in << 15
     1266        A_OP(icode, ptr, iMACINT1, A_GPR(tmp), A_C_00000000, reg_in, A_GPR(bit_shifter16));
     1267        // Left-shift once more. This is a separate step, as the
     1268        // signed multiplication would clobber the MSB.
     1269        // reg_out[0] = tmp + ((tmp << 31) >> 31)
     1270        A_OP(icode, ptr, iMAC3, reg_out, A_GPR(tmp), A_GPR(tmp), A_C_80000000);
     1271}
     1272
     1273#define ENUM_GPR(name, size) name, name ## _dummy = name + (size) - 1
    12101274
    12111275/*
     
    12151279static int _snd_emu10k1_audigy_init_efx(struct snd_emu10k1 *emu)
    12161280{
    1217         int err, i, z, gpr, nctl;
    1218         int bit_shifter16;
    1219         const int playback = 10;
    1220         const int capture = playback + (SND_EMU10K1_PLAYBACK_CHANNELS * 2); /* we reserve 10 voices */
    1221         const int stereo_mix = capture + 2;
    1222         const int tmp = 0x88;
    1223         u32 ptr;
     1281        int err, z, nctl;
     1282        enum {
     1283                ENUM_GPR(playback, SND_EMU10K1_PLAYBACK_CHANNELS),
     1284                ENUM_GPR(stereo_mix, 2),
     1285                ENUM_GPR(capture, 2),
     1286                ENUM_GPR(bit_shifter16, 1),
     1287                // The fixed allocation of these breaks the pattern, but why not.
     1288                // Splitting these into left/right is questionable, as it will break
     1289                // down for center/lfe. But it works for stereo/quadro, so whatever.
     1290                ENUM_GPR(bass_gpr, 2 * 5),  // two sides, five coefficients
     1291                ENUM_GPR(treble_gpr, 2 * 5),
     1292                ENUM_GPR(bass_tmp, SND_EMU10K1_PLAYBACK_CHANNELS * 4),  // four delay stages
     1293                ENUM_GPR(treble_tmp, SND_EMU10K1_PLAYBACK_CHANNELS * 4),
     1294                ENUM_GPR(tmp, 3),
     1295                num_static_gprs
     1296        };
     1297        int gpr = num_static_gprs;
     1298        u32 ptr, ptr_skip;
    12241299        struct snd_emu10k1_fx8010_code *icode = NULL;
    12251300        struct snd_emu10k1_fx8010_control_gpr *controls = NULL, *ctl;
     
    12471322
    12481323        /* clear free GPRs */
    1249         for (i = 0; i < 512; i++)
    1250                 set_bit(i, icode->gpr_valid);
     1324        memset(icode->gpr_valid, 0xff, 512 / 8);
    12511325               
    12521326        /* clear TRAM data & address lines */
    1253         for (i = 0; i < 256; i++)
    1254                 set_bit(i, icode->tram_valid);
     1327        memset(icode->tram_valid, 0xff, 256 / 8);
    12551328
    12561329        strcpy(icode->name, "Audigy DSP code for ALSA");
    12571330        ptr = 0;
    12581331        nctl = 0;
    1259         gpr = stereo_mix + 10;
    1260         gpr_map[gpr++] = 0x00007fff;
    1261         gpr_map[gpr++] = 0x00008000;
    1262         gpr_map[gpr++] = 0x0000ffff;
    1263         bit_shifter16 = gpr;
    1264 
    1265         /* stop FX processor */
    1266         snd_emu10k1_ptr_write(emu, A_DBG, 0, (emu->fx8010.dbg = 0) | A_DBG_SINGLE_STEP);
     1332        gpr_map[bit_shifter16] = 0x00008000;
    12671333
    12681334#if 1
    12691335        /* PCM front Playback Volume (independent from stereo mix)
    1270          * playback = 0 + ( gpr * FXBUS_PCM_LEFT_FRONT >> 31)
    1271          * where gpr contains attenuation from corresponding mixer control
     1336         * playback = -gpr * FXBUS_PCM_LEFT_FRONT >> 31
     1337         * where gpr contains negated attenuation from corresponding mixer control
    12721338         * (snd_emu10k1_init_stereo_control)
    12731339         */
    1274         A_OP(icode, &ptr, iMAC0, A_GPR(playback), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_FRONT));
    1275         A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_FRONT));
     1340        A_OP(icode, &ptr, iMAC1, A_GPR(playback), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_FRONT));
     1341        A_OP(icode, &ptr, iMAC1, A_GPR(playback+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_FRONT));
    12761342        snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Front Playback Volume", gpr, 100);
    12771343        gpr += 2;
    12781344
    12791345        /* PCM Surround Playback (independent from stereo mix) */
    1280         A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_REAR));
    1281         A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_REAR));
     1346        A_OP(icode, &ptr, iMAC1, A_GPR(playback+2), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_REAR));
     1347        A_OP(icode, &ptr, iMAC1, A_GPR(playback+3), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_REAR));
    12821348        snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Surround Playback Volume", gpr, 100);
    12831349        gpr += 2;
     
    12851351        /* PCM Side Playback (independent from stereo mix) */
    12861352        if (emu->card_capabilities->spk71) {
    1287                 A_OP(icode, &ptr, iMAC0, A_GPR(playback+6), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_SIDE));
    1288                 A_OP(icode, &ptr, iMAC0, A_GPR(playback+7), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_SIDE));
     1353                A_OP(icode, &ptr, iMAC1, A_GPR(playback+6), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT_SIDE));
     1354                A_OP(icode, &ptr, iMAC1, A_GPR(playback+7), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT_SIDE));
    12891355                snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Side Playback Volume", gpr, 100);
    12901356                gpr += 2;
     
    12921358
    12931359        /* PCM Center Playback (independent from stereo mix) */
    1294         A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_CENTER));
     1360        A_OP(icode, &ptr, iMAC1, A_GPR(playback+4), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_CENTER));
    12951361        snd_emu10k1_init_mono_control(&controls[nctl++], "PCM Center Playback Volume", gpr, 100);
    12961362        gpr++;
    12971363
    12981364        /* PCM LFE Playback (independent from stereo mix) */
    1299         A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LFE));
     1365        A_OP(icode, &ptr, iMAC1, A_GPR(playback+5), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LFE));
    13001366        snd_emu10k1_init_mono_control(&controls[nctl++], "PCM LFE Playback Volume", gpr, 100);
    13011367        gpr++;
     
    13051371         */
    13061372        /* Wave (PCM) Playback Volume (will be renamed later) */
    1307         A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
    1308         A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
     1373        A_OP(icode, &ptr, iMAC1, A_GPR(stereo_mix), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
     1374        A_OP(icode, &ptr, iMAC1, A_GPR(stereo_mix+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
    13091375        snd_emu10k1_init_stereo_control(&controls[nctl++], "Wave Playback Volume", gpr, 100);
    13101376        gpr += 2;
    13111377
    13121378        /* Synth Playback */
    1313         A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix+0), A_GPR(stereo_mix+0), A_GPR(gpr), A_FXBUS(FXBUS_MIDI_LEFT));
    1314         A_OP(icode, &ptr, iMAC0, A_GPR(stereo_mix+1), A_GPR(stereo_mix+1), A_GPR(gpr+1), A_FXBUS(FXBUS_MIDI_RIGHT));
     1379        A_OP(icode, &ptr, iMAC1, A_GPR(stereo_mix+0), A_GPR(stereo_mix+0), A_GPR(gpr), A_FXBUS(FXBUS_MIDI_LEFT));
     1380        A_OP(icode, &ptr, iMAC1, A_GPR(stereo_mix+1), A_GPR(stereo_mix+1), A_GPR(gpr+1), A_FXBUS(FXBUS_MIDI_RIGHT));
    13151381        snd_emu10k1_init_stereo_control(&controls[nctl++], "Synth Playback Volume", gpr, 100);
    13161382        gpr += 2;
    13171383
    13181384        /* Wave (PCM) Capture */
    1319         A_OP(icode, &ptr, iMAC0, A_GPR(capture+0), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
    1320         A_OP(icode, &ptr, iMAC0, A_GPR(capture+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
     1385        A_OP(icode, &ptr, iMAC1, A_GPR(capture+0), A_C_00000000, A_GPR(gpr), A_FXBUS(FXBUS_PCM_LEFT));
     1386        A_OP(icode, &ptr, iMAC1, A_GPR(capture+1), A_C_00000000, A_GPR(gpr+1), A_FXBUS(FXBUS_PCM_RIGHT));
    13211387        snd_emu10k1_init_stereo_control(&controls[nctl++], "PCM Capture Volume", gpr, 0);
    13221388        gpr += 2;
    13231389
    13241390        /* Synth Capture */
    1325         A_OP(icode, &ptr, iMAC0, A_GPR(capture+0), A_GPR(capture+0), A_GPR(gpr), A_FXBUS(FXBUS_MIDI_LEFT));
    1326         A_OP(icode, &ptr, iMAC0, A_GPR(capture+1), A_GPR(capture+1), A_GPR(gpr+1), A_FXBUS(FXBUS_MIDI_RIGHT));
     1391        A_OP(icode, &ptr, iMAC1, A_GPR(capture+0), A_GPR(capture+0), A_GPR(gpr), A_FXBUS(FXBUS_MIDI_LEFT));
     1392        A_OP(icode, &ptr, iMAC1, A_GPR(capture+1), A_GPR(capture+1), A_GPR(gpr+1), A_FXBUS(FXBUS_MIDI_RIGHT));
    13271393        snd_emu10k1_init_stereo_control(&controls[nctl++], "Synth Capture Volume", gpr, 0);
    13281394        gpr += 2;
    1329      
     1395
     1396        // We need to double the volume, as we configure the voices for half volume,
     1397        // which is necessary for bit-identical reproduction.
     1398        //{ static_assert(stereo_mix == playback + SND_EMU10K1_PLAYBACK_CHANNELS); }
     1399        for (z = 0; z < SND_EMU10K1_PLAYBACK_CHANNELS + 2; z++)
     1400                A_OP(icode, &ptr, iACC3, A_GPR(playback + z), A_GPR(playback + z), A_GPR(playback + z), A_C_00000000);
     1401
    13301402        /*
    13311403         * inputs
    13321404         */
    13331405#define A_ADD_VOLUME_IN(var,vol,input) \
    1334 A_OP(icode, &ptr, iMAC0, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
    1335 
    1336         /* emu1212 DSP 0 and DSP 1 Capture */
     1406        A_OP(icode, &ptr, iMAC1, A_GPR(var), A_GPR(var), A_GPR(vol), A_EXTIN(input))
     1407
    13371408        if (emu->card_capabilities->emu_model) {
     1409                /* EMU1010 DSP 0 and DSP 1 Capture */
     1410                // The 24 MSB hold the actual value. We implicitly discard the 16 LSB.
    13381411                if (emu->card_capabilities->ca0108_chip) {
    1339                         /* Note:JCD:No longer bit shift lower 16bits to upper 16bits of 32bit value. */
    1340                         A_OP(icode, &ptr, iMACINT0, A_GPR(tmp), A_C_00000000, A3_EMU32IN(0x0), A_C_00000001);
    1341                         A_OP(icode, &ptr, iMAC0, A_GPR(capture+0), A_GPR(capture+0), A_GPR(gpr), A_GPR(tmp));
    1342                         A_OP(icode, &ptr, iMACINT0, A_GPR(tmp), A_C_00000000, A3_EMU32IN(0x1), A_C_00000001);
    1343                         A_OP(icode, &ptr, iMAC0, A_GPR(capture+1), A_GPR(capture+1), A_GPR(gpr), A_GPR(tmp));
     1412                        // For unclear reasons, the EMU32IN cannot be the Y operand!
     1413                        A_OP(icode, &ptr, iMAC1, A_GPR(capture+0), A_GPR(capture+0), A3_EMU32IN(0x0), A_GPR(gpr));
     1414                        // A3_EMU32IN(0) is delayed by one sample, so all other A3_EMU32IN channels
     1415                        // need to be delayed as well; we use an auxiliary register for that.
     1416                        A_OP(icode, &ptr, iMAC1, A_GPR(capture+1), A_GPR(capture+1), A_GPR(gpr+2), A_GPR(gpr+1));
     1417                        A_OP(icode, &ptr, iACC3, A_GPR(gpr+2), A3_EMU32IN(0x1), A_C_00000000, A_C_00000000);
    13441418                } else {
    1345                         A_OP(icode, &ptr, iMAC0, A_GPR(capture+0), A_GPR(capture+0), A_GPR(gpr), A_P16VIN(0x0));
    1346                         A_OP(icode, &ptr, iMAC0, A_GPR(capture+1), A_GPR(capture+1), A_GPR(gpr+1), A_P16VIN(0x1));
     1419                        A_OP(icode, &ptr, iMAC1, A_GPR(capture+0), A_GPR(capture+0), A_P16VIN(0x0), A_GPR(gpr));
     1420                        // A_P16VIN(0) is delayed by one sample, so all other A_P16VIN channels
     1421                        // need to be delayed as well; we use an auxiliary register for that.
     1422                        A_OP(icode, &ptr, iMAC1, A_GPR(capture+1), A_GPR(capture+1), A_GPR(gpr+2), A_GPR(gpr+1));
     1423                        A_OP(icode, &ptr, iACC3, A_GPR(gpr+2), A_P16VIN(0x1), A_C_00000000, A_C_00000000);
    13471424                }
    13481425                snd_emu10k1_init_stereo_control(&controls[nctl++], "EMU Capture Volume", gpr, 0);
     1426                gpr_map[gpr + 2] = 0x00000000;
     1427                gpr += 3;
     1428        } else {
     1429                if (emu->card_capabilities->ac97_chip) {
     1430                        /* AC'97 Playback Volume - used only for mic (renamed later) */
     1431                        A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AC97_L);
     1432                        A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AC97_R);
     1433                        snd_emu10k1_init_stereo_control(&controls[nctl++], "AMic Playback Volume", gpr, 0);
     1434                        gpr += 2;
     1435                        /* AC'97 Capture Volume - used only for mic */
     1436                        A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
     1437                        A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
     1438                        snd_emu10k1_init_stereo_control(&controls[nctl++], "Mic Capture Volume", gpr, 0);
     1439                        gpr += 2;
     1440
     1441                        /* mic capture buffer */
     1442                        A_OP(icode, &ptr, iINTERP, A_EXTOUT(A_EXTOUT_MIC_CAP), A_EXTIN(A_EXTIN_AC97_L), A_C_40000000, A_EXTIN(A_EXTIN_AC97_R));
     1443                }
     1444
     1445                /* Audigy CD Playback Volume */
     1446                A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_SPDIF_CD_L);
     1447                A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_SPDIF_CD_R);
     1448                snd_emu10k1_init_stereo_control(&controls[nctl++],
     1449                                                emu->card_capabilities->ac97_chip ? "Audigy CD Playback Volume" : "CD Playback Volume",
     1450                                                gpr, 0);
    13491451                gpr += 2;
    1350         }
    1351         /* AC'97 Playback Volume - used only for mic (renamed later) */
    1352         A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AC97_L);
    1353         A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AC97_R);
    1354         snd_emu10k1_init_stereo_control(&controls[nctl++], "AMic Playback Volume", gpr, 0);
    1355         gpr += 2;
    1356         /* AC'97 Capture Volume - used only for mic */
    1357         A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AC97_L);
    1358         A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AC97_R);
    1359         snd_emu10k1_init_stereo_control(&controls[nctl++], "Mic Capture Volume", gpr, 0);
    1360         gpr += 2;
    1361 
    1362         /* mic capture buffer */       
    1363         A_OP(icode, &ptr, iINTERP, A_EXTOUT(A_EXTOUT_MIC_CAP), A_EXTIN(A_EXTIN_AC97_L), 0xcd, A_EXTIN(A_EXTIN_AC97_R));
    1364 
    1365         /* Audigy CD Playback Volume */
    1366         A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_SPDIF_CD_L);
    1367         A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_SPDIF_CD_R);
    1368         snd_emu10k1_init_stereo_control(&controls[nctl++],
    1369                                         emu->card_capabilities->ac97_chip ? "Audigy CD Playback Volume" : "CD Playback Volume",
    1370                                         gpr, 0);
    1371         gpr += 2;
    1372         /* Audigy CD Capture Volume */
    1373         A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_SPDIF_CD_L);
    1374         A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_SPDIF_CD_R);
    1375         snd_emu10k1_init_stereo_control(&controls[nctl++],
    1376                                         emu->card_capabilities->ac97_chip ? "Audigy CD Capture Volume" : "CD Capture Volume",
    1377                                         gpr, 0);
    1378         gpr += 2;
    1379 
    1380         /* Optical SPDIF Playback Volume */
    1381         A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_OPT_SPDIF_L);
    1382         A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
    1383         snd_emu10k1_init_stereo_control(&controls[nctl++], SNDRV_CTL_NAME_IEC958("Optical ",PLAYBACK,VOLUME), gpr, 0);
    1384         gpr += 2;
    1385         /* Optical SPDIF Capture Volume */
    1386         A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_OPT_SPDIF_L);
    1387         A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
    1388         snd_emu10k1_init_stereo_control(&controls[nctl++], SNDRV_CTL_NAME_IEC958("Optical ",CAPTURE,VOLUME), gpr, 0);
    1389         gpr += 2;
    1390 
    1391         /* Line2 Playback Volume */
    1392         A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_LINE2_L);
    1393         A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_LINE2_R);
    1394         snd_emu10k1_init_stereo_control(&controls[nctl++],
    1395                                         emu->card_capabilities->ac97_chip ? "Line2 Playback Volume" : "Line Playback Volume",
    1396                                         gpr, 0);
    1397         gpr += 2;
    1398         /* Line2 Capture Volume */
    1399         A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_LINE2_L);
    1400         A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_LINE2_R);
    1401         snd_emu10k1_init_stereo_control(&controls[nctl++],
    1402                                         emu->card_capabilities->ac97_chip ? "Line2 Capture Volume" : "Line Capture Volume",
    1403                                         gpr, 0);
    1404         gpr += 2;
    1405        
    1406         /* Philips ADC Playback Volume */
    1407         A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_ADC_L);
    1408         A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_ADC_R);
    1409         snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Playback Volume", gpr, 0);
    1410         gpr += 2;
    1411         /* Philips ADC Capture Volume */
    1412         A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_ADC_L);
    1413         A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_ADC_R);
    1414         snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Capture Volume", gpr, 0);
    1415         gpr += 2;
    1416 
    1417         /* Aux2 Playback Volume */
    1418         A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AUX2_L);
    1419         A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AUX2_R);
    1420         snd_emu10k1_init_stereo_control(&controls[nctl++],
    1421                                         emu->card_capabilities->ac97_chip ? "Aux2 Playback Volume" : "Aux Playback Volume",
    1422                                         gpr, 0);
    1423         gpr += 2;
    1424         /* Aux2 Capture Volume */
    1425         A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AUX2_L);
    1426         A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AUX2_R);
    1427         snd_emu10k1_init_stereo_control(&controls[nctl++],
    1428                                         emu->card_capabilities->ac97_chip ? "Aux2 Capture Volume" : "Aux Capture Volume",
    1429                                         gpr, 0);
    1430         gpr += 2;
     1452                /* Audigy CD Capture Volume */
     1453                A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_SPDIF_CD_L);
     1454                A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_SPDIF_CD_R);
     1455                snd_emu10k1_init_stereo_control(&controls[nctl++],
     1456                                                emu->card_capabilities->ac97_chip ? "Audigy CD Capture Volume" : "CD Capture Volume",
     1457                                                gpr, 0);
     1458                gpr += 2;
     1459
     1460                /* Optical SPDIF Playback Volume */
     1461                A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_OPT_SPDIF_L);
     1462                A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
     1463                snd_emu10k1_init_stereo_control(&controls[nctl++], SNDRV_CTL_NAME_IEC958("Optical ",PLAYBACK,VOLUME), gpr, 0);
     1464                gpr += 2;
     1465                /* Optical SPDIF Capture Volume */
     1466                A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_OPT_SPDIF_L);
     1467                A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_OPT_SPDIF_R);
     1468                snd_emu10k1_init_stereo_control(&controls[nctl++], SNDRV_CTL_NAME_IEC958("Optical ",CAPTURE,VOLUME), gpr, 0);
     1469                gpr += 2;
     1470
     1471                /* Line2 Playback Volume */
     1472                A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_LINE2_L);
     1473                A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_LINE2_R);
     1474                snd_emu10k1_init_stereo_control(&controls[nctl++],
     1475                                                emu->card_capabilities->ac97_chip ? "Line2 Playback Volume" : "Line Playback Volume",
     1476                                                gpr, 0);
     1477                gpr += 2;
     1478                /* Line2 Capture Volume */
     1479                A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_LINE2_L);
     1480                A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_LINE2_R);
     1481                snd_emu10k1_init_stereo_control(&controls[nctl++],
     1482                                                emu->card_capabilities->ac97_chip ? "Line2 Capture Volume" : "Line Capture Volume",
     1483                                                gpr, 0);
     1484                gpr += 2;
     1485
     1486                /* Philips ADC Playback Volume */
     1487                A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_ADC_L);
     1488                A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_ADC_R);
     1489                snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Playback Volume", gpr, 0);
     1490                gpr += 2;
     1491                /* Philips ADC Capture Volume */
     1492                A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_ADC_L);
     1493                A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_ADC_R);
     1494                snd_emu10k1_init_stereo_control(&controls[nctl++], "Analog Mix Capture Volume", gpr, 0);
     1495                gpr += 2;
     1496
     1497                /* Aux2 Playback Volume */
     1498                A_ADD_VOLUME_IN(stereo_mix, gpr, A_EXTIN_AUX2_L);
     1499                A_ADD_VOLUME_IN(stereo_mix+1, gpr+1, A_EXTIN_AUX2_R);
     1500                snd_emu10k1_init_stereo_control(&controls[nctl++],
     1501                                                emu->card_capabilities->ac97_chip ? "Aux2 Playback Volume" : "Aux Playback Volume",
     1502                                                gpr, 0);
     1503                gpr += 2;
     1504                /* Aux2 Capture Volume */
     1505                A_ADD_VOLUME_IN(capture, gpr, A_EXTIN_AUX2_L);
     1506                A_ADD_VOLUME_IN(capture+1, gpr+1, A_EXTIN_AUX2_R);
     1507                snd_emu10k1_init_stereo_control(&controls[nctl++],
     1508                                                emu->card_capabilities->ac97_chip ? "Aux2 Capture Volume" : "Aux Capture Volume",
     1509                                                gpr, 0);
     1510                gpr += 2;
     1511        }
    14311512       
    14321513        /* Stereo Mix Front Playback Volume */
    1433         A_OP(icode, &ptr, iMAC0, A_GPR(playback), A_GPR(playback), A_GPR(gpr), A_GPR(stereo_mix));
    1434         A_OP(icode, &ptr, iMAC0, A_GPR(playback+1), A_GPR(playback+1), A_GPR(gpr+1), A_GPR(stereo_mix+1));
     1514        A_OP(icode, &ptr, iMAC1, A_GPR(playback), A_GPR(playback), A_GPR(gpr), A_GPR(stereo_mix));
     1515        A_OP(icode, &ptr, iMAC1, A_GPR(playback+1), A_GPR(playback+1), A_GPR(gpr+1), A_GPR(stereo_mix+1));
    14351516        snd_emu10k1_init_stereo_control(&controls[nctl++], "Front Playback Volume", gpr, 100);
    14361517        gpr += 2;
    14371518       
    14381519        /* Stereo Mix Surround Playback */
    1439         A_OP(icode, &ptr, iMAC0, A_GPR(playback+2), A_GPR(playback+2), A_GPR(gpr), A_GPR(stereo_mix));
    1440         A_OP(icode, &ptr, iMAC0, A_GPR(playback+3), A_GPR(playback+3), A_GPR(gpr+1), A_GPR(stereo_mix+1));
     1520        A_OP(icode, &ptr, iMAC1, A_GPR(playback+2), A_GPR(playback+2), A_GPR(gpr), A_GPR(stereo_mix));
     1521        A_OP(icode, &ptr, iMAC1, A_GPR(playback+3), A_GPR(playback+3), A_GPR(gpr+1), A_GPR(stereo_mix+1));
    14411522        snd_emu10k1_init_stereo_control(&controls[nctl++], "Surround Playback Volume", gpr, 0);
    14421523        gpr += 2;
     
    14441525        /* Stereo Mix Center Playback */
    14451526        /* Center = sub = Left/2 + Right/2 */
    1446         A_OP(icode, &ptr, iINTERP, A_GPR(tmp), A_GPR(stereo_mix), 0xcd, A_GPR(stereo_mix+1));
    1447         A_OP(icode, &ptr, iMAC0, A_GPR(playback+4), A_GPR(playback+4), A_GPR(gpr), A_GPR(tmp));
     1527        A_OP(icode, &ptr, iINTERP, A_GPR(tmp), A_GPR(stereo_mix), A_C_40000000, A_GPR(stereo_mix+1));
     1528        A_OP(icode, &ptr, iMAC1, A_GPR(playback+4), A_GPR(playback+4), A_GPR(gpr), A_GPR(tmp));
    14481529        snd_emu10k1_init_mono_control(&controls[nctl++], "Center Playback Volume", gpr, 0);
    14491530        gpr++;
    14501531
    14511532        /* Stereo Mix LFE Playback */
    1452         A_OP(icode, &ptr, iMAC0, A_GPR(playback+5), A_GPR(playback+5), A_GPR(gpr), A_GPR(tmp));
     1533        A_OP(icode, &ptr, iMAC1, A_GPR(playback+5), A_GPR(playback+5), A_GPR(gpr), A_GPR(tmp));
    14531534        snd_emu10k1_init_mono_control(&controls[nctl++], "LFE Playback Volume", gpr, 0);
    14541535        gpr++;
     
    14561537        if (emu->card_capabilities->spk71) {
    14571538                /* Stereo Mix Side Playback */
    1458                 A_OP(icode, &ptr, iMAC0, A_GPR(playback+6), A_GPR(playback+6), A_GPR(gpr), A_GPR(stereo_mix));
    1459                 A_OP(icode, &ptr, iMAC0, A_GPR(playback+7), A_GPR(playback+7), A_GPR(gpr+1), A_GPR(stereo_mix+1));
     1539                A_OP(icode, &ptr, iMAC1, A_GPR(playback+6), A_GPR(playback+6), A_GPR(gpr), A_GPR(stereo_mix));
     1540                A_OP(icode, &ptr, iMAC1, A_GPR(playback+7), A_GPR(playback+7), A_GPR(gpr+1), A_GPR(stereo_mix+1));
    14601541                snd_emu10k1_init_stereo_control(&controls[nctl++], "Side Playback Volume", gpr, 0);
    14611542                gpr += 2;
     
    14821563         *  Process tone control
    14831564         */
    1484         A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 0), A_GPR(playback + 0), A_C_00000000, A_C_00000000); /* left */
    1485         A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 1), A_GPR(playback + 1), A_C_00000000, A_C_00000000); /* right */
    1486         A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 2), A_GPR(playback + 2), A_C_00000000, A_C_00000000); /* rear left */
    1487         A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 3), A_GPR(playback + 3), A_C_00000000, A_C_00000000); /* rear right */
    1488         A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), A_GPR(playback + 4), A_C_00000000, A_C_00000000); /* center */
    1489         A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), A_GPR(playback + 5), A_C_00000000, A_C_00000000); /* LFE */
    1490         if (emu->card_capabilities->spk71) {
    1491                 A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 6), A_GPR(playback + 6), A_C_00000000, A_C_00000000); /* side left */
    1492                 A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 7), A_GPR(playback + 7), A_C_00000000, A_C_00000000); /* side right */
    1493         }
    1494        
    1495 
    14961565        ctl = &controls[nctl + 0];
    14971566        ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
     
    15121581        ctl->value[0] = ctl->value[1] = 20;
    15131582        ctl->translation = EMU10K1_GPR_TRANSLATION_TREBLE;
    1514 
    1515 #define BASS_GPR        0x8c
    1516 #define TREBLE_GPR      0x96
    1517 
    15181583        for (z = 0; z < 5; z++) {
    15191584                int j;
    15201585                for (j = 0; j < 2; j++) {
    1521                         controls[nctl + 0].gpr[z * 2 + j] = BASS_GPR + z * 2 + j;
    1522                         controls[nctl + 1].gpr[z * 2 + j] = TREBLE_GPR + z * 2 + j;
    1523                 }
    1524         }
     1586                        controls[nctl + 0].gpr[z * 2 + j] = bass_gpr + z * 2 + j;
     1587                        controls[nctl + 1].gpr[z * 2 + j] = treble_gpr + z * 2 + j;
     1588                }
     1589        }
     1590        nctl += 2;
     1591
     1592        A_OP(icode, &ptr, iACC3, A_C_00000000, A_GPR(gpr), A_C_00000000, A_C_00000000);
     1593        snd_emu10k1_init_mono_onoff_control(controls + nctl++, "Tone Control - Switch", gpr, 0);
     1594        gpr++;
     1595        A_OP(icode, &ptr, iSKIP, A_GPR_COND, A_GPR_COND, A_CC_REG_ZERO, A_GPR(gpr));
     1596        ptr_skip = ptr;
    15251597        for (z = 0; z < 4; z++) {               /* front/rear/center-lfe/side */
    15261598                int j, k, l, d;
    15271599                for (j = 0; j < 2; j++) {       /* left/right */
    1528                         k = 0xb0 + (z * 8) + (j * 4);
    1529                         l = 0xe0 + (z * 8) + (j * 4);
    1530                         d = playback + SND_EMU10K1_PLAYBACK_CHANNELS + z * 2 + j;
    1531 
    1532                         A_OP(icode, &ptr, iMAC0, A_C_00000000, A_C_00000000, A_GPR(d), A_GPR(BASS_GPR + 0 + j));
    1533                         A_OP(icode, &ptr, iMACMV, A_GPR(k+1), A_GPR(k), A_GPR(k+1), A_GPR(BASS_GPR + 4 + j));
    1534                         A_OP(icode, &ptr, iMACMV, A_GPR(k), A_GPR(d), A_GPR(k), A_GPR(BASS_GPR + 2 + j));
    1535                         A_OP(icode, &ptr, iMACMV, A_GPR(k+3), A_GPR(k+2), A_GPR(k+3), A_GPR(BASS_GPR + 8 + j));
    1536                         A_OP(icode, &ptr, iMAC0, A_GPR(k+2), A_GPR_ACCU, A_GPR(k+2), A_GPR(BASS_GPR + 6 + j));
     1600                        k = bass_tmp + (z * 8) + (j * 4);
     1601                        l = treble_tmp + (z * 8) + (j * 4);
     1602                        d = playback + z * 2 + j;
     1603
     1604                        A_OP(icode, &ptr, iMAC0, A_C_00000000, A_C_00000000, A_GPR(d), A_GPR(bass_gpr + 0 + j));
     1605                        A_OP(icode, &ptr, iMACMV, A_GPR(k+1), A_GPR(k), A_GPR(k+1), A_GPR(bass_gpr + 4 + j));
     1606                        A_OP(icode, &ptr, iMACMV, A_GPR(k), A_GPR(d), A_GPR(k), A_GPR(bass_gpr + 2 + j));
     1607                        A_OP(icode, &ptr, iMACMV, A_GPR(k+3), A_GPR(k+2), A_GPR(k+3), A_GPR(bass_gpr + 8 + j));
     1608                        A_OP(icode, &ptr, iMAC0, A_GPR(k+2), A_GPR_ACCU, A_GPR(k+2), A_GPR(bass_gpr + 6 + j));
    15371609                        A_OP(icode, &ptr, iACC3, A_GPR(k+2), A_GPR(k+2), A_GPR(k+2), A_C_00000000);
    15381610
    1539                         A_OP(icode, &ptr, iMAC0, A_C_00000000, A_C_00000000, A_GPR(k+2), A_GPR(TREBLE_GPR + 0 + j));
    1540                         A_OP(icode, &ptr, iMACMV, A_GPR(l+1), A_GPR(l), A_GPR(l+1), A_GPR(TREBLE_GPR + 4 + j));
    1541                         A_OP(icode, &ptr, iMACMV, A_GPR(l), A_GPR(k+2), A_GPR(l), A_GPR(TREBLE_GPR + 2 + j));
    1542                         A_OP(icode, &ptr, iMACMV, A_GPR(l+3), A_GPR(l+2), A_GPR(l+3), A_GPR(TREBLE_GPR + 8 + j));
    1543                         A_OP(icode, &ptr, iMAC0, A_GPR(l+2), A_GPR_ACCU, A_GPR(l+2), A_GPR(TREBLE_GPR + 6 + j));
     1611                        A_OP(icode, &ptr, iMAC0, A_C_00000000, A_C_00000000, A_GPR(k+2), A_GPR(treble_gpr + 0 + j));
     1612                        A_OP(icode, &ptr, iMACMV, A_GPR(l+1), A_GPR(l), A_GPR(l+1), A_GPR(treble_gpr + 4 + j));
     1613                        A_OP(icode, &ptr, iMACMV, A_GPR(l), A_GPR(k+2), A_GPR(l), A_GPR(treble_gpr + 2 + j));
     1614                        A_OP(icode, &ptr, iMACMV, A_GPR(l+3), A_GPR(l+2), A_GPR(l+3), A_GPR(treble_gpr + 8 + j));
     1615                        A_OP(icode, &ptr, iMAC0, A_GPR(l+2), A_GPR_ACCU, A_GPR(l+2), A_GPR(treble_gpr + 6 + j));
    15441616                        A_OP(icode, &ptr, iMACINT0, A_GPR(l+2), A_C_00000000, A_GPR(l+2), A_C_00000010);
    15451617
     
    15501622                }
    15511623        }
    1552         nctl += 2;
    1553 
    1554 #undef BASS_GPR
    1555 #undef TREBLE_GPR
    1556 
    1557         for (z = 0; z < 8; z++) {
    1558                 A_SWITCH(icode, &ptr, tmp + 0, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, gpr + 0);
    1559                 A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + 0);
    1560                 A_SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
    1561                 A_OP(icode, &ptr, iACC3, A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
    1562         }
    1563         snd_emu10k1_init_stereo_onoff_control(controls + nctl++, "Tone Control - Switch", gpr, 0);
    1564         gpr += 2;
     1624        gpr_map[gpr++] = ptr - ptr_skip;
    15651625
    15661626        /* Master volume (will be renamed later) */
    1567         A_OP(icode, &ptr, iMAC0, A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+0+SND_EMU10K1_PLAYBACK_CHANNELS));
    1568         A_OP(icode, &ptr, iMAC0, A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+1+SND_EMU10K1_PLAYBACK_CHANNELS));
    1569         A_OP(icode, &ptr, iMAC0, A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+2+SND_EMU10K1_PLAYBACK_CHANNELS));
    1570         A_OP(icode, &ptr, iMAC0, A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+3+SND_EMU10K1_PLAYBACK_CHANNELS));
    1571         A_OP(icode, &ptr, iMAC0, A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+4+SND_EMU10K1_PLAYBACK_CHANNELS));
    1572         A_OP(icode, &ptr, iMAC0, A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+5+SND_EMU10K1_PLAYBACK_CHANNELS));
    1573         A_OP(icode, &ptr, iMAC0, A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+6+SND_EMU10K1_PLAYBACK_CHANNELS));
    1574         A_OP(icode, &ptr, iMAC0, A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS), A_C_00000000, A_GPR(gpr), A_GPR(playback+7+SND_EMU10K1_PLAYBACK_CHANNELS));
     1627        for (z = 0; z < 8; z++)
     1628                A_OP(icode, &ptr, iMAC1, A_GPR(playback+z), A_C_00000000, A_GPR(gpr), A_GPR(playback+z));
    15751629        snd_emu10k1_init_mono_control(&controls[nctl++], "Wave Master Playback Volume", gpr, 0);
    1576         gpr += 2;
    1577 
    1578         /* analog speakers */
    1579         A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS);
    1580         A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS);
    1581         A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS);
    1582         A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS);
    1583         if (emu->card_capabilities->spk71)
    1584                 A_PUT_STEREO_OUTPUT(A_EXTOUT_ASIDE_L, A_EXTOUT_ASIDE_R, playback+6 + SND_EMU10K1_PLAYBACK_CHANNELS);
    1585 
    1586         /* headphone */
    1587         A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS);
    1588 
    1589         /* digital outputs */
    1590         /* A_PUT_STEREO_OUTPUT(A_EXTOUT_FRONT_L, A_EXTOUT_FRONT_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS); */
     1630        gpr++;
     1631
    15911632        if (emu->card_capabilities->emu_model) {
    15921633                /* EMU1010 Outputs from PCM Front, Rear, Center, LFE, Side */
     
    15941635                for (z = 0; z < 8; z++) {
    15951636                        if (emu->card_capabilities->ca0108_chip) {
    1596                                 A_OP(icode, &ptr, iACC3, A3_EMU32OUT(z), A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), A_C_00000000, A_C_00000000);
     1637                                A_OP(icode, &ptr, iACC3, A3_EMU32OUT(z), A_GPR(playback + z), A_C_00000000, A_C_00000000);
    15971638                        } else {
    1598                                 A_OP(icode, &ptr, iACC3, A_EMU32OUTL(z), A_GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), A_C_00000000, A_C_00000000);
     1639                                A_OP(icode, &ptr, iACC3, A_EMU32OUTL(z), A_GPR(playback + z), A_C_00000000, A_C_00000000);
    15991640                        }
    16001641                }
    1601         }
    1602 
    1603         /* IEC958 Optical Raw Playback Switch */
    1604         gpr_map[gpr++] = 0;
    1605         gpr_map[gpr++] = 0x1008;
    1606         gpr_map[gpr++] = 0xffff0000;
    1607         for (z = 0; z < 2; z++) {
    1608                 A_OP(icode, &ptr, iMAC0, A_GPR(tmp + 2), A_FXBUS(FXBUS_PT_LEFT + z), A_C_00000000, A_C_00000000);
    1609                 A_OP(icode, &ptr, iSKIP, A_GPR_COND, A_GPR_COND, A_GPR(gpr - 2), A_C_00000001);
    1610                 A_OP(icode, &ptr, iACC3, A_GPR(tmp + 2), A_C_00000000, A_C_00010000, A_GPR(tmp + 2));
    1611                 A_OP(icode, &ptr, iANDXOR, A_GPR(tmp + 2), A_GPR(tmp + 2), A_GPR(gpr - 1), A_C_00000000);
    1612                 A_SWITCH(icode, &ptr, tmp + 0, tmp + 2, gpr + z);
    1613                 A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z);
    1614                 A_SWITCH(icode, &ptr, tmp + 1, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, tmp + 1);
    1615                 if ((z==1) && (emu->card_capabilities->spdif_bug)) {
    1616                         /* Due to a SPDIF output bug on some Audigy cards, this code delays the Right channel by 1 sample */
    1617                         dev_info(emu->card->dev,
    1618                                  "Installing spdif_bug patch: %s\n",
    1619                                  emu->card_capabilities->name);
    1620                         A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(gpr - 3), A_C_00000000, A_C_00000000);
    1621                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 3), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
    1622                 } else {
    1623                         A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
    1624                 }
    1625         }
    1626         snd_emu10k1_init_stereo_onoff_control(controls + nctl++, SNDRV_CTL_NAME_IEC958("Optical Raw ",PLAYBACK,SWITCH), gpr, 0);
    1627         gpr += 2;
    1628        
    1629         A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2 + SND_EMU10K1_PLAYBACK_CHANNELS);
    1630         A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4 + SND_EMU10K1_PLAYBACK_CHANNELS);
    1631         A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5 + SND_EMU10K1_PLAYBACK_CHANNELS);
     1642        } else {
     1643                /* analog speakers */
     1644                A_PUT_STEREO_OUTPUT(A_EXTOUT_AFRONT_L, A_EXTOUT_AFRONT_R, playback);
     1645                A_PUT_STEREO_OUTPUT(A_EXTOUT_AREAR_L, A_EXTOUT_AREAR_R, playback+2);
     1646                A_PUT_OUTPUT(A_EXTOUT_ACENTER, playback+4);
     1647                A_PUT_OUTPUT(A_EXTOUT_ALFE, playback+5);
     1648                if (emu->card_capabilities->spk71)
     1649                        A_PUT_STEREO_OUTPUT(A_EXTOUT_ASIDE_L, A_EXTOUT_ASIDE_R, playback+6);
     1650
     1651                /* headphone */
     1652                A_PUT_STEREO_OUTPUT(A_EXTOUT_HEADPHONE_L, A_EXTOUT_HEADPHONE_R, playback);
     1653
     1654                /* IEC958 Optical Raw Playback Switch */
     1655                gpr_map[gpr++] = 0;
     1656                gpr_map[gpr++] = 0x1008;
     1657                gpr_map[gpr++] = 0xffff0000;
     1658                for (z = 0; z < 2; z++) {
     1659                        A_OP(icode, &ptr, iMAC0, A_GPR(tmp + 2), A_FXBUS(FXBUS_PT_LEFT + z), A_C_00000000, A_C_00000000);
     1660                        A_OP(icode, &ptr, iSKIP, A_GPR_COND, A_GPR_COND, A_GPR(gpr - 2), A_C_00000001);
     1661                        A_OP(icode, &ptr, iACC3, A_GPR(tmp + 2), A_C_00000000, A_C_00010000, A_GPR(tmp + 2));
     1662                        A_OP(icode, &ptr, iANDXOR, A_GPR(tmp + 2), A_GPR(tmp + 2), A_GPR(gpr - 1), A_C_00000000);
     1663                        A_SWITCH(icode, &ptr, tmp + 0, tmp + 2, gpr + z);
     1664                        A_SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z);
     1665                        A_SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
     1666                        if ((z==1) && (emu->card_capabilities->spdif_bug)) {
     1667                                /* Due to a SPDIF output bug on some Audigy cards, this code delays the Right channel by 1 sample */
     1668                                dev_info(emu->card->dev,
     1669                                         "Installing spdif_bug patch: %s\n",
     1670                                         emu->card_capabilities->name);
     1671                                A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(gpr - 3), A_C_00000000, A_C_00000000);
     1672                                A_OP(icode, &ptr, iACC3, A_GPR(gpr - 3), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
     1673                        } else {
     1674                                A_OP(icode, &ptr, iACC3, A_EXTOUT(A_EXTOUT_FRONT_L + z), A_GPR(tmp + 0), A_GPR(tmp + 1), A_C_00000000);
     1675                        }
     1676                }
     1677                snd_emu10k1_init_stereo_onoff_control(controls + nctl++, SNDRV_CTL_NAME_IEC958("Optical Raw ",PLAYBACK,SWITCH), gpr, 0);
     1678                gpr += 2;
     1679
     1680                A_PUT_STEREO_OUTPUT(A_EXTOUT_REAR_L, A_EXTOUT_REAR_R, playback+2);
     1681                A_PUT_OUTPUT(A_EXTOUT_CENTER, playback+4);
     1682                A_PUT_OUTPUT(A_EXTOUT_LFE, playback+5);
     1683        }
    16321684
    16331685        /* ADC buffer */
    16341686#ifdef EMU10K1_CAPTURE_DIGITAL_OUT
    1635         A_PUT_STEREO_OUTPUT(A_EXTOUT_ADC_CAP_L, A_EXTOUT_ADC_CAP_R, playback + SND_EMU10K1_PLAYBACK_CHANNELS);
     1687        A_PUT_STEREO_OUTPUT(A_EXTOUT_ADC_CAP_L, A_EXTOUT_ADC_CAP_R, playback);
    16361688#else
    16371689        A_PUT_OUTPUT(A_EXTOUT_ADC_CAP_L, capture);
     
    16401692
    16411693        if (emu->card_capabilities->emu_model) {
     1694                /* Capture 16 channels of S32_LE sound. */
    16421695                if (emu->card_capabilities->ca0108_chip) {
    16431696                        dev_info(emu->card->dev, "EMU2 inputs on\n");
    1644                         for (z = 0; z < 0x10; z++) {
     1697                        /* Note that the Tina[2] DSPs have 16 more EMU32 inputs which we don't use. */
     1698
     1699                        snd_emu10k1_audigy_dsp_convert_32_to_2x16(
     1700                                icode, &ptr, tmp, bit_shifter16, A3_EMU32IN(0), A_FXBUS2(0));
     1701                        // A3_EMU32IN(0) is delayed by one sample, so all other A3_EMU32IN channels
     1702                        // need to be delayed as well; we use an auxiliary register for that.
     1703                        for (z = 1; z < 0x10; z++) {
    16451704                                snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp,
    16461705                                                                        bit_shifter16,
    1647                                                                         A3_EMU32IN(z),
     1706                                                                        A_GPR(gpr),
    16481707                                                                        A_FXBUS2(z*2) );
     1708                                A_OP(icode, &ptr, iACC3, A_GPR(gpr), A3_EMU32IN(z), A_C_00000000, A_C_00000000);
     1709                                gpr_map[gpr++] = 0x00000000;
    16491710                        }
    16501711                } else {
    16511712                        dev_info(emu->card->dev, "EMU inputs on\n");
    1652                         /* Capture 16 (originally 8) channels of S32_LE sound */
     1713                        /* Note that the Alice2 DSPs have 6 I2S inputs which we don't use. */
    16531714
    16541715                        /*
     
    16561717                               gpr, tmp);
    16571718                        */
    1658                         /* For the EMU1010: How to get 32bit values from the DSP. High 16bits into L, low 16bits into R. */
    1659                         /* A_P16VIN(0) is delayed by one sample,
    1660                          * so all other A_P16VIN channels will need to also be delayed
    1661                          */
    1662                         /* Left ADC in. 1 of 2 */
    16631719                        snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_P16VIN(0x0), A_FXBUS2(0) );
    1664                         /* Right ADC in 1 of 2 */
    1665                         gpr_map[gpr++] = 0x00000000;
    1666                         /* Delaying by one sample: instead of copying the input
    1667                          * value A_P16VIN to output A_FXBUS2 as in the first channel,
    1668                          * we use an auxiliary register, delaying the value by one
    1669                          * sample
    1670                          */
    1671                         snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(2) );
    1672                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x1), A_C_00000000, A_C_00000000);
    1673                         gpr_map[gpr++] = 0x00000000;
    1674                         snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(4) );
    1675                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x2), A_C_00000000, A_C_00000000);
    1676                         gpr_map[gpr++] = 0x00000000;
    1677                         snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(6) );
    1678                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x3), A_C_00000000, A_C_00000000);
    1679                         /* For 96kHz mode */
    1680                         /* Left ADC in. 2 of 2 */
    1681                         gpr_map[gpr++] = 0x00000000;
    1682                         snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0x8) );
    1683                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x4), A_C_00000000, A_C_00000000);
    1684                         /* Right ADC in 2 of 2 */
    1685                         gpr_map[gpr++] = 0x00000000;
    1686                         snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xa) );
    1687                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x5), A_C_00000000, A_C_00000000);
    1688                         gpr_map[gpr++] = 0x00000000;
    1689                         snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xc) );
    1690                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x6), A_C_00000000, A_C_00000000);
    1691                         gpr_map[gpr++] = 0x00000000;
    1692                         snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr - 1), A_FXBUS2(0xe) );
    1693                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x7), A_C_00000000, A_C_00000000);
    1694                         /* Pavel Hofman - we still have voices, A_FXBUS2s, and
    1695                          * A_P16VINs available -
    1696                          * let's add 8 more capture channels - total of 16
    1697                          */
    1698                         gpr_map[gpr++] = 0x00000000;
    1699                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1700                                                                   bit_shifter16,
    1701                                                                   A_GPR(gpr - 1),
    1702                                                                   A_FXBUS2(0x10));
    1703                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x8),
    1704                              A_C_00000000, A_C_00000000);
    1705                         gpr_map[gpr++] = 0x00000000;
    1706                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1707                                                                   bit_shifter16,
    1708                                                                   A_GPR(gpr - 1),
    1709                                                                   A_FXBUS2(0x12));
    1710                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0x9),
    1711                              A_C_00000000, A_C_00000000);
    1712                         gpr_map[gpr++] = 0x00000000;
    1713                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1714                                                                   bit_shifter16,
    1715                                                                   A_GPR(gpr - 1),
    1716                                                                   A_FXBUS2(0x14));
    1717                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xa),
    1718                              A_C_00000000, A_C_00000000);
    1719                         gpr_map[gpr++] = 0x00000000;
    1720                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1721                                                                   bit_shifter16,
    1722                                                                   A_GPR(gpr - 1),
    1723                                                                   A_FXBUS2(0x16));
    1724                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xb),
    1725                              A_C_00000000, A_C_00000000);
    1726                         gpr_map[gpr++] = 0x00000000;
    1727                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1728                                                                   bit_shifter16,
    1729                                                                   A_GPR(gpr - 1),
    1730                                                                   A_FXBUS2(0x18));
    1731                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xc),
    1732                              A_C_00000000, A_C_00000000);
    1733                         gpr_map[gpr++] = 0x00000000;
    1734                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1735                                                                   bit_shifter16,
    1736                                                                   A_GPR(gpr - 1),
    1737                                                                   A_FXBUS2(0x1a));
    1738                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xd),
    1739                              A_C_00000000, A_C_00000000);
    1740                         gpr_map[gpr++] = 0x00000000;
    1741                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1742                                                                   bit_shifter16,
    1743                                                                   A_GPR(gpr - 1),
    1744                                                                   A_FXBUS2(0x1c));
    1745                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xe),
    1746                              A_C_00000000, A_C_00000000);
    1747                         gpr_map[gpr++] = 0x00000000;
    1748                         snd_emu10k1_audigy_dsp_convert_32_to_2x16(icode, &ptr, tmp,
    1749                                                                   bit_shifter16,
    1750                                                                   A_GPR(gpr - 1),
    1751                                                                   A_FXBUS2(0x1e));
    1752                         A_OP(icode, &ptr, iACC3, A_GPR(gpr - 1), A_P16VIN(0xf),
    1753                              A_C_00000000, A_C_00000000);
     1720                        /* A_P16VIN(0) is delayed by one sample, so all other A_P16VIN channels
     1721                         * will need to also be delayed; we use an auxiliary register for that. */
     1722                        for (z = 1; z < 0x10; z++) {
     1723                                snd_emu10k1_audigy_dsp_convert_32_to_2x16( icode, &ptr, tmp, bit_shifter16, A_GPR(gpr), A_FXBUS2(z * 2) );
     1724                                A_OP(icode, &ptr, iACC3, A_GPR(gpr), A_P16VIN(z), A_C_00000000, A_C_00000000);
     1725                                gpr_map[gpr++] = 0x00000000;
     1726                        }
    17541727                }
    17551728
     
    17751748         */
    17761749
    1777         if (gpr > tmp) {
     1750        if (gpr > 512) {
    17781751                snd_BUG();
    17791752                err = -EIO;
    17801753                goto __err;
    17811754        }
     1755
    17821756        /* clear remaining instruction memory */
    17831757        while (ptr < 0x400)
     
    18041778 */
    18051779
    1806 /* when volume = max, then copy only to avoid volume modification */
    1807 /* with iMAC0 (negative values) */
     1780/* Volumes are in the [-2^31, 0] range, zero being mute. */
    18081781static void _volume(struct snd_emu10k1_fx8010_code *icode, u32 *ptr, u32 dst, u32 src, u32 vol)
    18091782{
    1810         OP(icode, ptr, iMAC0, dst, C_00000000, src, vol);
    1811         OP(icode, ptr, iANDXOR, C_00000000, vol, C_ffffffff, C_7fffffff);
    1812         OP(icode, ptr, iSKIP, GPR_COND, GPR_COND, CC_REG_NONZERO, C_00000001);
    1813         OP(icode, ptr, iACC3, dst, src, C_00000000, C_00000000);
     1783        OP(icode, ptr, iMAC1, dst, C_00000000, src, vol);
    18141784}
    18151785static void _volume_add(struct snd_emu10k1_fx8010_code *icode, u32 *ptr, u32 dst, u32 src, u32 vol)
    18161786{
    1817         OP(icode, ptr, iANDXOR, C_00000000, vol, C_ffffffff, C_7fffffff);
    1818         OP(icode, ptr, iSKIP, GPR_COND, GPR_COND, CC_REG_NONZERO, C_00000002);
    1819         OP(icode, ptr, iMACINT0, dst, dst, src, C_00000001);
    1820         OP(icode, ptr, iSKIP, C_00000000, C_7fffffff, C_7fffffff, C_00000001);
    1821         OP(icode, ptr, iMAC0, dst, dst, src, vol);
    1822 }
    1823 static void _volume_out(struct snd_emu10k1_fx8010_code *icode, u32 *ptr, u32 dst, u32 src, u32 vol)
    1824 {
    1825         OP(icode, ptr, iANDXOR, C_00000000, vol, C_ffffffff, C_7fffffff);
    1826         OP(icode, ptr, iSKIP, GPR_COND, GPR_COND, CC_REG_NONZERO, C_00000002);
    1827         OP(icode, ptr, iACC3, dst, src, C_00000000, C_00000000);
    1828         OP(icode, ptr, iSKIP, C_00000000, C_7fffffff, C_7fffffff, C_00000001);
    1829         OP(icode, ptr, iMAC0, dst, C_00000000, src, vol);
     1787        OP(icode, ptr, iMAC1, dst, dst, src, vol);
    18301788}
    18311789
     
    18391797                _volume_add(icode, ptr, GPR(dst), EXTIN(src), GPR(vol))
    18401798#define VOLUME_OUT(icode, ptr, dst, src, vol) \
    1841                 _volume_out(icode, ptr, EXTOUT(dst), GPR(src), GPR(vol))
     1799                _volume(icode, ptr, EXTOUT(dst), GPR(src), GPR(vol))
    18421800#define _SWITCH(icode, ptr, dst, src, sw) \
    18431801        OP((icode), ptr, iMACINT0, dst, C_00000000, src, sw);
     
    18551813{
    18561814        int err, i, z, gpr, tmp, playback, capture;
    1857         u32 ptr;
     1815        u32 ptr, ptr_skip;
    18581816        struct snd_emu10k1_fx8010_code *icode;
    18591817        struct snd_emu10k1_fx8010_pcm_rec *ipcm = NULL;
     
    18881846       
    18891847        /* clear free GPRs */
    1890         for (i = 0; i < 256; i++)
    1891                 set_bit(i, icode->gpr_valid);
     1848        memset(icode->gpr_valid, 0xff, 256 / 8);
    18921849
    18931850        /* clear TRAM data & address lines */
    1894         for (i = 0; i < 160; i++)
    1895                 set_bit(i, icode->tram_valid);
     1851        memset(icode->tram_valid, 0xff, 160 / 8);
    18961852
    18971853        strcpy(icode->name, "SB Live! FX8010 code for ALSA v1.2 by Jaroslav Kysela");
     
    19001856        playback = SND_EMU10K1_INPUTS;
    19011857        /* we have 6 playback channels and tone control doubles */
    1902         capture = playback + (SND_EMU10K1_PLAYBACK_CHANNELS * 2);
     1858        capture = playback + SND_EMU10K1_PLAYBACK_CHANNELS;
    19031859        gpr = capture + SND_EMU10K1_CAPTURE_CHANNELS;
    19041860        tmp = 0x88;     /* we need 4 temporary GPR */
    19051861        /* from 0x8c to 0xff is the area for tone control */
    19061862
    1907         /* stop FX processor */
    1908         snd_emu10k1_ptr_write(emu, DBG, 0, (emu->fx8010.dbg = 0) | EMU10K1_DBG_SINGLE_STEP);
    1909 
    19101863        /*
    19111864         *  Process FX Buses
    19121865         */
    1913         OP(icode, &ptr, iMACINT0, GPR(0), C_00000000, FXBUS(FXBUS_PCM_LEFT), C_00000004);
    1914         OP(icode, &ptr, iMACINT0, GPR(1), C_00000000, FXBUS(FXBUS_PCM_RIGHT), C_00000004);
    1915         OP(icode, &ptr, iMACINT0, GPR(2), C_00000000, FXBUS(FXBUS_MIDI_LEFT), C_00000004);
    1916         OP(icode, &ptr, iMACINT0, GPR(3), C_00000000, FXBUS(FXBUS_MIDI_RIGHT), C_00000004);
    1917         OP(icode, &ptr, iMACINT0, GPR(4), C_00000000, FXBUS(FXBUS_PCM_LEFT_REAR), C_00000004);
    1918         OP(icode, &ptr, iMACINT0, GPR(5), C_00000000, FXBUS(FXBUS_PCM_RIGHT_REAR), C_00000004);
    1919         OP(icode, &ptr, iMACINT0, GPR(6), C_00000000, FXBUS(FXBUS_PCM_CENTER), C_00000004);
    1920         OP(icode, &ptr, iMACINT0, GPR(7), C_00000000, FXBUS(FXBUS_PCM_LFE), C_00000004);
     1866        OP(icode, &ptr, iMACINT0, GPR(0), C_00000000, FXBUS(FXBUS_PCM_LEFT), C_00000008);
     1867        OP(icode, &ptr, iMACINT0, GPR(1), C_00000000, FXBUS(FXBUS_PCM_RIGHT), C_00000008);
     1868        OP(icode, &ptr, iMACINT0, GPR(2), C_00000000, FXBUS(FXBUS_MIDI_LEFT), C_00000008);
     1869        OP(icode, &ptr, iMACINT0, GPR(3), C_00000000, FXBUS(FXBUS_MIDI_RIGHT), C_00000008);
     1870        OP(icode, &ptr, iMACINT0, GPR(4), C_00000000, FXBUS(FXBUS_PCM_LEFT_REAR), C_00000008);
     1871        OP(icode, &ptr, iMACINT0, GPR(5), C_00000000, FXBUS(FXBUS_PCM_RIGHT_REAR), C_00000008);
     1872        OP(icode, &ptr, iMACINT0, GPR(6), C_00000000, FXBUS(FXBUS_PCM_CENTER), C_00000008);
     1873        OP(icode, &ptr, iMACINT0, GPR(7), C_00000000, FXBUS(FXBUS_PCM_LFE), C_00000008);
    19211874        OP(icode, &ptr, iMACINT0, GPR(8), C_00000000, C_00000000, C_00000000);  /* S/PDIF left */
    19221875        OP(icode, &ptr, iMACINT0, GPR(9), C_00000000, C_00000000, C_00000000);  /* S/PDIF right */
    1923         OP(icode, &ptr, iMACINT0, GPR(10), C_00000000, FXBUS(FXBUS_PCM_LEFT_FRONT), C_00000004);
    1924         OP(icode, &ptr, iMACINT0, GPR(11), C_00000000, FXBUS(FXBUS_PCM_RIGHT_FRONT), C_00000004);
     1876        OP(icode, &ptr, iMACINT0, GPR(10), C_00000000, FXBUS(FXBUS_PCM_LEFT_FRONT), C_00000008);
     1877        OP(icode, &ptr, iMACINT0, GPR(11), C_00000000, FXBUS(FXBUS_PCM_RIGHT_FRONT), C_00000008);
    19251878
    19261879        /* Raw S/PDIF PCM */
     
    20161969        /* Wave Center/LFE Playback Volume */
    20171970        OP(icode, &ptr, iACC3, GPR(tmp + 0), FXBUS(FXBUS_PCM_LEFT), FXBUS(FXBUS_PCM_RIGHT), C_00000000);
    2018         OP(icode, &ptr, iMACINT0, GPR(tmp + 0), C_00000000, GPR(tmp + 0), C_00000002);
     1971        OP(icode, &ptr, iMACINT0, GPR(tmp + 0), C_00000000, GPR(tmp + 0), C_00000004);
    20191972        VOLUME(icode, &ptr, playback + 4, tmp + 0, gpr);
    20201973        snd_emu10k1_init_mono_control(controls + i++, "Wave Center Playback Volume", gpr++, 0);
     
    22072160         *  Process tone control
    22082161         */
    2209         OP(icode, &ptr, iACC3, GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 0), GPR(playback + 0), C_00000000, C_00000000); /* left */
    2210         OP(icode, &ptr, iACC3, GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 1), GPR(playback + 1), C_00000000, C_00000000); /* right */
    2211         OP(icode, &ptr, iACC3, GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 2), GPR(playback + 2), C_00000000, C_00000000); /* rear left */
    2212         OP(icode, &ptr, iACC3, GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 3), GPR(playback + 3), C_00000000, C_00000000); /* rear right */
    2213         OP(icode, &ptr, iACC3, GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), GPR(playback + 4), C_00000000, C_00000000); /* center */
    2214         OP(icode, &ptr, iACC3, GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), GPR(playback + 5), C_00000000, C_00000000); /* LFE */
    2215 
    22162162        ctl = &controls[i + 0];
    22172163        ctl->id.iface = (__force int)SNDRV_CTL_ELEM_IFACE_MIXER;
     
    22452191                }
    22462192        }
     2193        i += 2;
     2194
     2195        OP(icode, &ptr, iACC3, C_00000000, GPR(gpr), C_00000000, C_00000000);
     2196        snd_emu10k1_init_mono_onoff_control(controls + i++, "Tone Control - Switch", gpr, 0);
     2197        gpr++;
     2198        OP(icode, &ptr, iSKIP, GPR_COND, GPR_COND, CC_REG_ZERO, GPR(gpr));
     2199        ptr_skip = ptr;
    22472200        for (z = 0; z < 3; z++) {               /* front/rear/center-lfe */
    22482201                int j, k, l, d;
     
    22502203                        k = 0xa0 + (z * 8) + (j * 4);
    22512204                        l = 0xd0 + (z * 8) + (j * 4);
    2252                         d = playback + SND_EMU10K1_PLAYBACK_CHANNELS + z * 2 + j;
     2205                        d = playback + z * 2 + j;
    22532206
    22542207                        OP(icode, &ptr, iMAC0, C_00000000, C_00000000, GPR(d), GPR(BASS_GPR + 0 + j));
     
    22722225                }
    22732226        }
    2274         i += 2;
     2227        gpr_map[gpr++] = ptr - ptr_skip;
    22752228
    22762229#undef BASS_GPR
    22772230#undef TREBLE_GPR
    2278 
    2279         for (z = 0; z < 6; z++) {
    2280                 SWITCH(icode, &ptr, tmp + 0, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, gpr + 0);
    2281                 SWITCH_NEG(icode, &ptr, tmp + 1, gpr + 0);
    2282                 SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
    2283                 OP(icode, &ptr, iACC3, GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), GPR(tmp + 0), GPR(tmp + 1), C_00000000);
    2284         }
    2285         snd_emu10k1_init_stereo_onoff_control(controls + i++, "Tone Control - Switch", gpr, 0);
    2286         gpr += 2;
    22872231
    22882232        /*
     
    22932237
    22942238                for (z = 0; z < 2; z++)
    2295                         OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_L + z), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + z), C_00000000, C_00000000);
     2239                        OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_L + z), GPR(playback + z), C_00000000, C_00000000);
    22962240        }
    22972241
     
    23022246                        SWITCH(icode, &ptr, tmp + 0, 8 + z, gpr + z);
    23032247                        SWITCH_NEG(icode, &ptr, tmp + 1, gpr + z);
    2304                         SWITCH(icode, &ptr, tmp + 1, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, tmp + 1);
     2248                        SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
    23052249                        OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_TOSLINK_L + z), GPR(tmp + 0), GPR(tmp + 1), C_00000000);
    23062250#ifdef EMU10K1_CAPTURE_DIGITAL_OUT
     
    23172261
    23182262                for (z = 0; z < 2; z++) {
    2319                         SWITCH(icode, &ptr, tmp + 0, playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4 + z, gpr + 2 + z);
     2263                        SWITCH(icode, &ptr, tmp + 0, playback + 4 + z, gpr + 2 + z);
    23202264                        SWITCH_NEG(icode, &ptr, tmp + 1, gpr + 2 + z);
    2321                         SWITCH(icode, &ptr, tmp + 1, playback + SND_EMU10K1_PLAYBACK_CHANNELS + z, tmp + 1);
     2265                        SWITCH(icode, &ptr, tmp + 1, playback + z, tmp + 1);
    23222266                        OP(icode, &ptr, iACC3, GPR(tmp + 0), GPR(tmp + 0), GPR(tmp + 1), C_00000000);
    23232267                        VOLUME_OUT(icode, &ptr, EXTOUT_HEADPHONE_L + z, tmp + 0, gpr + z);
     
    23362280        if (emu->fx8010.extout_mask & ((1<<EXTOUT_REAR_L)|(1<<EXTOUT_REAR_R)))
    23372281                for (z = 0; z < 2; z++)
    2338                         OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_REAR_L + z), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 2 + z), C_00000000, C_00000000);
     2282                        OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_REAR_L + z), GPR(playback + 2 + z), C_00000000, C_00000000);
    23392283
    23402284        if (emu->fx8010.extout_mask & ((1<<EXTOUT_AC97_REAR_L)|(1<<EXTOUT_AC97_REAR_R)))
    23412285                for (z = 0; z < 2; z++)
    2342                         OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_REAR_L + z), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 2 + z), C_00000000, C_00000000);
     2286                        OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_REAR_L + z), GPR(playback + 2 + z), C_00000000, C_00000000);
    23432287
    23442288        if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_CENTER)) {
    23452289#ifndef EMU10K1_CENTER_LFE_FROM_FRONT
    2346                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_CENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), C_00000000, C_00000000);
    2347                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ACENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 4), C_00000000, C_00000000);
     2290                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_CENTER), GPR(playback + 4), C_00000000, C_00000000);
     2291                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ACENTER), GPR(playback + 4), C_00000000, C_00000000);
    23482292#else
    2349                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_CENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 0), C_00000000, C_00000000);
    2350                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ACENTER), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 0), C_00000000, C_00000000);
     2293                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_CENTER), GPR(playback + 0), C_00000000, C_00000000);
     2294                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ACENTER), GPR(playback + 0), C_00000000, C_00000000);
    23512295#endif
    23522296        }
     
    23542298        if (emu->fx8010.extout_mask & (1<<EXTOUT_AC97_LFE)) {
    23552299#ifndef EMU10K1_CENTER_LFE_FROM_FRONT
    2356                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_LFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), C_00000000, C_00000000);
    2357                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ALFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 5), C_00000000, C_00000000);
     2300                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_LFE), GPR(playback + 5), C_00000000, C_00000000);
     2301                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ALFE), GPR(playback + 5), C_00000000, C_00000000);
    23582302#else
    2359                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_LFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 1), C_00000000, C_00000000);
    2360                 OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ALFE), GPR(playback + SND_EMU10K1_PLAYBACK_CHANNELS + 1), C_00000000, C_00000000);
     2303                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_AC97_LFE), GPR(playback + 1), C_00000000, C_00000000);
     2304                OP(icode, &ptr, iACC3, EXTOUT(EXTOUT_ALFE), GPR(playback + 1), C_00000000, C_00000000);
    23612305#endif
    23622306        }
     
    23722316        /* EFX capture - capture the 16 EXTINS */
    23732317        if (emu->card_capabilities->sblive51) {
    2374                 /* On the Live! 5.1, FXBUS2(1) and FXBUS(2) are shared with EXTOUT_ACENTER
    2375                  * and EXTOUT_ALFE, so we can't connect inputs to them for multitrack recording.
    2376                  *
    2377                  * Since only 14 of the 16 EXTINs are used, this is not a big problem. 
    2378                  * We route AC97L and R to FX capture 14 and 15, SPDIF CD in to FX capture
    2379                  * 0 and 3, then the rest of the EXTINs to the corresponding FX capture
    2380                  * channel.  Multitrack recorders will still see the center/lfe output signal
    2381                  * on the second and third channels.
    2382                  */
    2383                 OP(icode, &ptr, iACC3, FXBUS2(14), C_00000000, C_00000000, EXTIN(0));
    2384                 OP(icode, &ptr, iACC3, FXBUS2(15), C_00000000, C_00000000, EXTIN(1));
    2385                 OP(icode, &ptr, iACC3, FXBUS2(0), C_00000000, C_00000000, EXTIN(2));
    2386                 OP(icode, &ptr, iACC3, FXBUS2(3), C_00000000, C_00000000, EXTIN(3));
    2387                 for (z = 4; z < 14; z++)
    2388                         OP(icode, &ptr, iACC3, FXBUS2(z), C_00000000, C_00000000, EXTIN(z));
     2318                for (z = 0; z < 16; z++) {
     2319                        s8 c = snd_emu10k1_sblive51_fxbus2_map[z];
     2320                        if (c != -1)
     2321                                OP(icode, &ptr, iACC3, FXBUS2(z), C_00000000, C_00000000, EXTIN(c));
     2322                }
    23892323        } else {
    23902324                for (z = 0; z < 16; z++)
     
    24862420        spin_unlock_irq(&emu->emu_lock);
    24872421        snd_emu10k1_ptr_write(emu, TCB, 0, 0);
    2488         snd_emu10k1_ptr_write(emu, TCBS, 0, 0);
     2422        snd_emu10k1_ptr_write(emu, TCBS, 0, TCBS_BUFFSIZE_16K);
    24892423        if (emu->fx8010.etram_pages.area != NULL) {
    24902424                snd_dma_free_pages(&emu->fx8010.etram_pages);
     
    25252459{
    25262460        const char * const *fxbus, * const *extin, * const *extout;
    2527         unsigned short fxbus_mask, extin_mask, extout_mask;
     2461        unsigned short extin_mask, extout_mask;
    25282462        int res;
    25292463
    25302464        info->internal_tram_size = emu->fx8010.itram_size;
    25312465        info->external_tram_size = emu->fx8010.etram_pages.bytes / 2;
    2532         fxbus = fxbuses;
    2533         extin = emu->audigy ? audigy_ins : creative_ins;
    2534         extout = emu->audigy ? audigy_outs : creative_outs;
    2535         fxbus_mask = emu->fx8010.fxbus_mask;
    2536         extin_mask = emu->fx8010.extin_mask;
    2537         extout_mask = emu->fx8010.extout_mask;
     2466        fxbus = snd_emu10k1_fxbus;
     2467        extin = emu->audigy ? snd_emu10k1_audigy_ins : snd_emu10k1_sblive_ins;
     2468        extout = emu->audigy ? snd_emu10k1_audigy_outs : snd_emu10k1_sblive_outs;
     2469        extin_mask = emu->audigy ? ~0 : emu->fx8010.extin_mask;
     2470        extout_mask = emu->audigy ? ~0 : emu->fx8010.extout_mask;
    25382471        for (res = 0; res < 16; res++, fxbus++, extin++, extout++) {
    2539                 copy_string(info->fxbus_names[res], fxbus_mask & (1 << res) ? *fxbus : NULL, "FXBUS", res);
     2472                copy_string(info->fxbus_names[res], *fxbus, "FXBUS", res);
    25402473                copy_string(info->extin_names[res], extin_mask & (1 << res) ? *extin : NULL, "Unused", res);
    25412474                copy_string(info->extout_names[res], extout_mask & (1 << res) ? *extout : NULL, "Unused", res);
     
    26532586                if (get_user(addr, (unsigned int __user *)argp))
    26542587                        return -EFAULT;
    2655                 if (addr > 0x1ff)
    2656                         return -EINVAL;
    2657                 if (emu->audigy)
    2658                         snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | addr);
    2659                 else
    2660                         snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | addr);
    2661                 udelay(10);
    2662                 if (emu->audigy)
    2663                         snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP | A_DBG_STEP_ADDR | addr);
    2664                 else
    2665                         snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP | EMU10K1_DBG_STEP | addr);
     2588                if (emu->audigy) {
     2589                        if (addr > A_DBG_STEP_ADDR)
     2590                                return -EINVAL;
     2591                        snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg |= A_DBG_SINGLE_STEP);
     2592                        udelay(10);
     2593                        snd_emu10k1_ptr_write(emu, A_DBG, 0, emu->fx8010.dbg | A_DBG_STEP | addr);
     2594                } else {
     2595                        if (addr > EMU10K1_DBG_SINGLE_STEP_ADDR)
     2596                                return -EINVAL;
     2597                        snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg |= EMU10K1_DBG_SINGLE_STEP);
     2598                        udelay(10);
     2599                        snd_emu10k1_ptr_write(emu, DBG, 0, emu->fx8010.dbg | EMU10K1_DBG_STEP | addr);
     2600                }
    26662601                return 0;
    26672602        case SNDRV_EMU10K1_IOCTL_DBG_READ:
Note: See TracChangeset for help on using the changeset viewer.