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

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

Location:
GPL/trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • GPL/trunk

  • GPL/trunk/alsa-kernel/pci/ca0106/ca0106.h

    r717 r772  
    6060/************************************************************************************************/
    6161
    62 #define PTR                     0x00            /* Indexed register set pointer register        */
     62#define CA0106_PTR              0x00            /* Indexed register set pointer register        */
    6363                                                /* NOTE: The CHANNELNUM and ADDRESS words can   */
    6464                                                /* be modified independently of each other.     */
    6565                                                /* CNL[1:0], ADDR[27:16]                        */
    6666
    67 #define DATA                    0x04            /* Indexed register set data register           */
     67#define CA0106_DATA             0x04            /* Indexed register set data register           */
    6868                                                /* DATA[31:0]                                   */
    6969
    70 #define IPR                     0x08            /* Global interrupt pending register            */
     70#define CA0106_IPR              0x08            /* Global interrupt pending register            */
    7171                                                /* Clear pending interrupts by writing a 1 to   */
    7272                                                /* the relevant bits and zero to the other bits */
     
    8989#define IPR_PCI                 0x00000001      /* PCI Bus error                                */
    9090
    91 #define INTE                    0x0c            /* Interrupt enable register                    */
     91#define CA0106_INTE             0x0c            /* Interrupt enable register                    */
    9292
    9393#define INTE_MIDI_RX_B          0x00020000      /* MIDI UART-B Receive buffer non-empty         */
     
    109109#define INTE_PCI                0x00000001      /* PCI Bus error                                */
    110110
    111 #define UNKNOWN10               0x10            /* Unknown ??. Defaults to 0 */
    112 #define HCFG                    0x14            /* Hardware config register                     */
     111#define CA0106_UNKNOWN10        0x10            /* Unknown ??. Defaults to 0 */
     112#define CA0106_HCFG             0x14            /* Hardware config register                     */
    113113                                                /* 0x1000 causes AC3 to fails. It adds a dither bit. */
    114114
     
    134134                                                /* Should be set to 1 when the EMU10K1 is       */
    135135                                                /* completely initialized.                      */
    136 #define GPIO                    0x18            /* Defaults: 005f03a3-Analog, 005f02a2-SPDIF.   */
     136#define CA0106_GPIO             0x18            /* Defaults: 005f03a3-Analog, 005f02a2-SPDIF.   */
    137137                                                /* Here pins 0,1,2,3,4,,6 are output. 5,7 are input */
    138138                                                /* For the Audigy LS, pin 0 (or bit 8) controls the SPDIF/Analog jack. */
     
    153153                                                 * GPO Enable [23:16] Default 0x0f. Setting a bit to 1, causes the pin to be an output pin.
    154154                                                 */
    155 #define AC97DATA                0x1c            /* AC97 register set data register (16 bit)     */
    156 
    157 #define AC97ADDRESS             0x1e            /* AC97 register set address register (8 bit)   */
     155#define CA0106_AC97DATA         0x1c            /* AC97 register set data register (16 bit)     */
     156
     157#define CA0106_AC97ADDRESS      0x1e            /* AC97 register set address register (8 bit)   */
    158158
    159159/********************************************************************************************************/
  • GPL/trunk/alsa-kernel/pci/ca0106/ca0106_main.c

    r717 r772  
    343343
    344344        spin_lock_irqsave(&emu->emu_lock, flags);
    345         outl(regptr, emu->port + PTR);
    346         val = inl(emu->port + DATA);
     345        outl(regptr, emu->port + CA0106_PTR);
     346        val = inl(emu->port + CA0106_DATA);
    347347        spin_unlock_irqrestore(&emu->emu_lock, flags);
    348348        return val;
     
    360360
    361361        spin_lock_irqsave(&emu->emu_lock, flags);
    362         outl(regptr, emu->port + PTR);
    363         outl(data, emu->port + DATA);
     362        outl(regptr, emu->port + CA0106_PTR);
     363        outl(data, emu->port + CA0106_DATA);
    364364        spin_unlock_irqrestore(&emu->emu_lock, flags);
    365365}
     
    460460
    461461        spin_lock_irqsave(&emu->emu_lock, flags);
    462         intr_enable = inl(emu->port + INTE) | intrenb;
    463         outl(intr_enable, emu->port + INTE);
     462        intr_enable = inl(emu->port + CA0106_INTE) | intrenb;
     463        outl(intr_enable, emu->port + CA0106_INTE);
    464464        spin_unlock_irqrestore(&emu->emu_lock, flags);
    465465}
     
    471471
    472472        spin_lock_irqsave(&emu->emu_lock, flags);
    473         intr_enable = inl(emu->port + INTE) & ~intrenb;
    474         outl(intr_enable, emu->port + INTE);
     473        intr_enable = inl(emu->port + CA0106_INTE) & ~intrenb;
     474        outl(intr_enable, emu->port + CA0106_INTE);
    475475        spin_unlock_irqrestore(&emu->emu_lock, flags);
    476476}
     
    791791                break;
    792792        }
    793         hcfg = inl(emu->port + HCFG) ;
     793        hcfg = inl(emu->port + CA0106_HCFG) ;
    794794        hcfg = (hcfg & ~hcfg_mask) | hcfg_set;
    795         outl(hcfg, emu->port + HCFG);
     795        outl(hcfg, emu->port + CA0106_HCFG);
    796796        reg40 = snd_ca0106_ptr_read(emu, 0x40, 0);
    797797        reg40 = (reg40 & ~reg40_mask) | reg40_set;
     
    893893                break;
    894894        }
    895         hcfg = inl(emu->port + HCFG) ;
     895        hcfg = inl(emu->port + CA0106_HCFG) ;
    896896        hcfg = (hcfg & ~hcfg_mask) | hcfg_set;
    897         outl(hcfg, emu->port + HCFG);
     897        outl(hcfg, emu->port + CA0106_HCFG);
    898898        reg71 = snd_ca0106_ptr_read(emu, 0x71, 0);
    899899        reg71 = (reg71 & ~reg71_mask) | reg71_set;
     
    11471147
    11481148        spin_lock_irqsave(&emu->emu_lock, flags);
    1149         outb(reg, emu->port + AC97ADDRESS);
    1150         val = inw(emu->port + AC97DATA);
     1149        outb(reg, emu->port + CA0106_AC97ADDRESS);
     1150        val = inw(emu->port + CA0106_AC97DATA);
    11511151        spin_unlock_irqrestore(&emu->emu_lock, flags);
    11521152        return val;
     
    11601160 
    11611161        spin_lock_irqsave(&emu->emu_lock, flags);
    1162         outb(reg, emu->port + AC97ADDRESS);
    1163         outw(val, emu->port + AC97DATA);
     1162        outb(reg, emu->port + CA0106_AC97ADDRESS);
     1163        outw(val, emu->port + CA0106_AC97DATA);
    11641164        spin_unlock_irqrestore(&emu->emu_lock, flags);
    11651165}
     
    12051205        struct snd_ca0106_channel *pchannel;
    12061206
    1207         status = inl(chip->port + IPR);
     1207        status = inl(chip->port + CA0106_IPR);
    12081208        if (! status)
    12091209                return IRQ_NONE;
     
    12601260
    12611261        // acknowledge the interrupt if necessary
    1262         outl(status, chip->port+IPR);
     1262        outl(status, chip->port + CA0106_IPR);
    12631263
    12641264        return IRQ_HANDLED;
     
    13881388        unsigned int def_bits;
    13891389
    1390         outl(0, chip->port + INTE);
     1390        outl(0, chip->port + CA0106_INTE);
    13911391
    13921392        /*
     
    14251425
    14261426        /* Write 0x8000 to AC97_REC_GAIN to mute it. */
    1427         outb(AC97_REC_GAIN, chip->port + AC97ADDRESS);
    1428         outw(0x8000, chip->port + AC97DATA);
     1427        outb(AC97_REC_GAIN, chip->port + CA0106_AC97ADDRESS);
     1428        outw(0x8000, chip->port + CA0106_AC97DATA);
    14291429#if 0 /* FIXME: what are these? */
    14301430        snd_ca0106_ptr_write(chip, SPCS0, 0, 0x2108006);
     
    15001500                 * E.g. For digital spdif out.
    15011501                 */
    1502                 outl(0x0, chip->port+GPIO);
    1503                 /* outl(0x00f0e000, chip->port+GPIO); */ /* Analog */
    1504                 outl(0x005f5301, chip->port+GPIO); /* Analog */
     1502                outl(0x0, chip->port + CA0106_GPIO);
     1503                /* outl(0x00f0e000, chip->port + CA0106_GPIO); */ /* Analog */
     1504                outl(0x005f5301, chip->port + CA0106_GPIO); /* Analog */
    15051505        } else if (chip->details->gpio_type == 1) {
    15061506                /* The SB0410 and SB0413 use GPIO differently. */
     
    15081508                 * E.g. For digital spdif out.
    15091509                 */
    1510                 outl(0x0, chip->port+GPIO);
    1511                 /* outl(0x00f0e000, chip->port+GPIO); */ /* Analog */
    1512                 outl(0x005f5301, chip->port+GPIO); /* Analog */
     1510                outl(0x0, chip->port + CA0106_GPIO);
     1511                /* outl(0x00f0e000, chip->port + CA0106_GPIO); */ /* Analog */
     1512                outl(0x005f5301, chip->port + CA0106_GPIO); /* Analog */
    15131513        } else {
    1514                 outl(0x0, chip->port+GPIO);
    1515                 outl(0x005f03a3, chip->port+GPIO); /* Analog */
    1516                 /* outl(0x005f02a2, chip->port+GPIO); */ /* SPDIF */
     1514                outl(0x0, chip->port + CA0106_GPIO);
     1515                outl(0x005f03a3, chip->port + CA0106_GPIO); /* Analog */
     1516                /* outl(0x005f02a2, chip->port + CA0106_GPIO); */ /* SPDIF */
    15171517        }
    15181518        snd_ca0106_intr_enable(chip, 0x105); /* Win2000 uses 0x1e0 */
     
    15201520        /* outl(HCFG_LOCKSOUNDCACHE|HCFG_AUDIOENABLE, chip->port+HCFG); */
    15211521        /* 0x1000 causes AC3 to fails. Maybe it effects 24 bit output. */
    1522         /* outl(0x00001409, chip->port+HCFG); */
    1523         /* outl(0x00000009, chip->port+HCFG); */
     1522        /* outl(0x00001409, chip->port + CA0106_HCFG); */
     1523        /* outl(0x00000009, chip->port + CA0106_HCFG); */
    15241524        /* AC97 2.0, Enable outputs. */
    1525         outl(HCFG_AC97 | HCFG_AUDIOENABLE, chip->port+HCFG);
     1525        outl(HCFG_AC97 | HCFG_AUDIOENABLE, chip->port + CA0106_HCFG);
    15261526
    15271527        if (chip->details->i2c_adc == 1) {
     
    15651565        /* disable interrupts */
    15661566        snd_ca0106_ptr_write(chip, BASIC_INTERRUPT, 0, 0);
    1567         outl(0, chip->port + INTE);
     1567        outl(0, chip->port + CA0106_INTE);
    15681568        snd_ca0106_ptr_write(chip, EXTENDED_INT_MASK, 0, 0);
    15691569        udelay(1000);
    15701570        /* disable audio */
    15711571        /* outl(HCFG_LOCKSOUNDCACHE, chip->port + HCFG); */
    1572         outl(0, chip->port + HCFG);
     1572        outl(0, chip->port + CA0106_HCFG);
    15731573        /* FIXME: We need to stop and DMA transfers here.
    15741574         *        But as I am not sure how yet, we cannot from the dma pages.
  • GPL/trunk/alsa-kernel/pci/ca0106/ca0106_mixer.c

    r679 r772  
    7171                val = snd_ca0106_ptr_read(emu, CAPTURE_CONTROL, 0) & ~0x1000;
    7272                snd_ca0106_ptr_write(emu, CAPTURE_CONTROL, 0, val);
    73                 val = inl(emu->port + GPIO) & ~0x101;
    74                 outl(val, emu->port + GPIO);
     73                val = inl(emu->port + CA0106_GPIO) & ~0x101;
     74                outl(val, emu->port + CA0106_GPIO);
    7575
    7676        } else {
     
    8080                val = snd_ca0106_ptr_read(emu, CAPTURE_CONTROL, 0) | 0x1000;
    8181                snd_ca0106_ptr_write(emu, CAPTURE_CONTROL, 0, val);
    82                 val = inl(emu->port + GPIO) | 0x101;
    83                 outl(val, emu->port + GPIO);
     82                val = inl(emu->port + CA0106_GPIO) | 0x101;
     83                outl(val, emu->port + CA0106_GPIO);
    8484        }
    8585}
     
    120120        if (emu->capture_mic_line_in) {
    121121                /* snd_ca0106_i2c_write(emu, ADC_MUX, 0); */ /* Mute input */
    122                 tmp = inl(emu->port+GPIO) & ~0x400;
     122                tmp = inl(emu->port + CA0106_GPIO) & ~0x400;
    123123                tmp = tmp | 0x400;
    124                 outl(tmp, emu->port+GPIO);
     124                outl(tmp, emu->port + CA0106_GPIO);
    125125                /* snd_ca0106_i2c_write(emu, ADC_MUX, ADC_MUX_MIC); */
    126126        } else {
    127127                /* snd_ca0106_i2c_write(emu, ADC_MUX, 0); */ /* Mute input */
    128                 tmp = inl(emu->port+GPIO) & ~0x400;
    129                 outl(tmp, emu->port+GPIO);
     128                tmp = inl(emu->port + CA0106_GPIO) & ~0x400;
     129                outl(tmp, emu->port + CA0106_GPIO);
    130130                /* snd_ca0106_i2c_write(emu, ADC_MUX, ADC_MUX_LINEIN); */
    131131        }
     
    707707}
    708708
    709 static struct snd_kcontrol *ctl_find(struct snd_card *card, const char *name)
    710 {
    711         struct snd_ctl_elem_id sid;
    712         memset(&sid, 0, sizeof(sid));
    713         /* FIXME: strcpy is bad. */
    714         strcpy(sid.name, name);
    715         sid.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
    716         return snd_ctl_find_id(card, &sid);
    717 }
    718 
    719709static int rename_ctl(struct snd_card *card, const char *src, const char *dst)
    720710{
    721         struct snd_kcontrol *kctl = ctl_find(card, src);
     711        struct snd_kcontrol *kctl = snd_ctl_find_id_mixer(card, src);
    722712        if (kctl) {
    723                 strcpy(kctl->id.name, dst);
     713                snd_ctl_rename(card, kctl, dst);
    724714                return 0;
    725715        }
     
    761751        NULL
    762752};
    763 
    764 static void add_followers(struct snd_card *card,
    765                           struct snd_kcontrol *master, const char * const *list)
    766 {
    767         for (; *list; list++) {
    768                 struct snd_kcontrol *follower = ctl_find(card, *list);
    769                 if (follower)
    770                         snd_ctl_add_follower(master, follower);
    771         }
    772 }
    773753
    774754int snd_ca0106_mixer(struct snd_ca0106 *emu)
     
    853833        if (err < 0)
    854834                return err;
    855         add_followers(card, vmaster, follower_vols);
     835        err = snd_ctl_add_followers(card, vmaster, follower_vols);
     836        if (err < 0)
     837                return err;
    856838
    857839        if (emu->details->spi_dac) {
     
    863845                if (err < 0)
    864846                        return err;
    865                 add_followers(card, vmaster, follower_sws);
     847                err = snd_ctl_add_followers(card, vmaster, follower_sws);
     848                if (err < 0)
     849                        return err;
    866850        }
    867851
Note: See TracChangeset for help on using the changeset viewer.