Perform warm reset if codec reports ready on attach.

Move AC97 link control power up poke so it is always performed on attach.
This commit is contained in:
Orion Hodson 2003-03-28 16:33:15 +00:00
parent 4351e43f7e
commit 6084370fe4

View File

@ -477,13 +477,23 @@ via_attach(device_t dev)
/* Wake up and reset AC97 if necessary */
data = pci_read_config(dev, VIA_AC97STATUS, 1);
if ((data & VIA_AC97STATUS_RDY) == 0) {
/* Cold reset per ac97r2.3 spec (page 95) */
pci_write_config(dev, VIA_ACLINKCTRL, 0, 1); /* Assert low */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_EN, 1); /* Assert low */
DELAY(100); /* Wait T_rst_low */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_NRST, 1); /* Assert high */
DELAY(1); /* Wait T_rst2clk */
pci_write_config(dev, VIA_ACLINKCTRL, 0, 1); /* Assert low */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_EN | VIA_ACLINK_NRST, 1); /* Assert high */
DELAY(5); /* Wait T_rst2clk */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_EN, 1); /* Assert low */
} else {
/* Warm reset */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_EN, 1); /* Force no sync */
DELAY(100);
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_EN | VIA_ACLINK_SYNC, 1); /* Sync */
DELAY(5); /* Wait T_sync_high */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_EN, 1); /* Force no sync */
DELAY(5); /* Wait T_sync2clk */
}
/* Power everything up */
pci_write_config(dev, VIA_ACLINKCTRL, VIA_ACLINK_DESIRED, 1);
@ -495,7 +505,6 @@ via_attach(device_t dev)
break;
DELAY(5000);
}
}
via->regid = PCIR_MAPS;
via->reg = bus_alloc_resource(dev, SYS_RES_IOPORT, &via->regid, 0, ~0, 1, RF_ACTIVE);