diff --git a/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c b/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c index cdd5b74345..f31c124ca8 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ich/ac97.c @@ -586,11 +586,6 @@ ac97_reg_is_valid(ac97_dev *dev, uint8 reg) return false; switch (dev->codec_id) { - case CODEC_ID_ALC201A: - if (reg != 0x54) /* reading register 0x54 causes a semaphore timeout on the next register accessed */ - return true; - return false; - case CODEC_ID_AK4540: case CODEC_ID_AK4542: if (reg < 0x1e || reg == 0x20 || reg == 0x26 || reg > 0x7a) diff --git a/src/add-ons/kernel/drivers/audio/ac97/ich/io.c b/src/add-ons/kernel/drivers/audio/ac97/ich/io.c index c0c6377709..aeccca650a 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/ich/io.c +++ b/src/add-ons/kernel/drivers/audio/ac97/ich/io.c @@ -130,7 +130,10 @@ ich_codec_read(int regno) { status_t rv; ASSERT(regno >= 0); + ASSERT((regno & 1) == 0); ASSERT(((config->type & TYPE_ICH4) != 0 && regno <= 511) || regno <= 255); + if (regno == 0x54) // intel uses 0x54 for GPIO access, we filter it! + return 0; rv = ich_codec_wait(); if (rv != B_OK) PRINT(("semaphore timeout reading register %#x\n",regno)); @@ -145,7 +148,10 @@ ich_codec_write(int regno, uint16 value) { status_t rv; ASSERT(regno >= 0); + ASSERT((regno & 1) == 0); ASSERT(((config->type & TYPE_ICH4) != 0 && regno <= 511) || regno <= 255); + if (regno == 0x54) // intel uses 0x54 for GPIO access, we filter it! + return; rv = ich_codec_wait(); if (rv != B_OK) PRINT(("semaphore timeout writing register %#x\n",regno));