Index: t4dwave.c =================================================================== RCS file: /home/ncvs/src/sys/dev/sound/pci/t4dwave.c,v retrieving revision 1.9.2.11 diff -u -p -r1.9.2.11 t4dwave.c --- t4dwave.c 22 Oct 2002 08:27:13 -0000 1.9.2.11 +++ t4dwave.c 12 Aug 2004 22:26:45 -0000 @@ -229,6 +229,8 @@ tr_wrcd(kobj_t obj, void *devinfo, int r case TDX_PCI_ID: treg=TDX_REG_CODECWR; trw=TDX_CDC_RWSTAT; + if (tr->type == ALI_PCI_ID && tr->rev > 0x01) + trw |= 0x01; break; case TNX_PCI_ID: treg=TNX_REG_CODECWR; @@ -756,7 +758,27 @@ tr_intr(void *p) static int tr_init(struct tr_info *tr) { + uint32_t data; + switch (tr->type) { + case ALI_PCI_ID: + tr_wr(tr, ALI_REG_GCONTROL, ALI_EN_PCMIN, 4); + tr_wr(tr, 0xa8, 0x00000000, 4); /* T4D_MUSICVAL_WAVEVOL */ + tr_wr(tr, 0x22, 0x10, 1); /* ALI_MPUR2 */ + + /* ALI_SCTRL */ + data = tr_rd(tr, 0x48, 4); + data &= 0x00003fff; + tr_wr(tr, 0x48, data | 0x00010000 | 0x00008000, 4); + data |= 0x00010000 | 0x00008000; + data |= 1; + tr_wr(tr, 0x48, data); + DELAY(500); + data &= ~3; + tr_wr(tr, 0x48, data); + + break; + case SPA_PCI_ID: tr_wr(tr, SPA_REG_GPIO, 0, 4); tr_wr(tr, SPA_REG_CODECST, SPA_RST_OFF, 4); Index: t4dwave.h =================================================================== RCS file: /home/ncvs/src/sys/dev/sound/pci/t4dwave.h,v retrieving revision 1.3.2.4 diff -u -p -r1.3.2.4 t4dwave.h --- t4dwave.h 22 Apr 2002 15:49:33 -0000 1.3.2.4 +++ t4dwave.h 12 Aug 2004 19:05:33 -0000 @@ -85,6 +85,9 @@ #define TNX_CDC_RESET 0x01 #define TNX_CDC_ON (TNX_CDC_ADC1ON|TNX_CDC_DAC1ON) +#define ALI_REG_GCONTROL 0xd4 +#define ALI_EN_PCMIN 0x80000001 + #define TR_REG_STARTA 0x80 #define TR_REG_STOPA 0x84