diff --git a/kernel/include/kernel/Audio/HDAudio/Registers.h b/kernel/include/kernel/Audio/HDAudio/Registers.h index e25a7c8e..eab3814b 100644 --- a/kernel/include/kernel/Audio/HDAudio/Registers.h +++ b/kernel/include/kernel/Audio/HDAudio/Registers.h @@ -11,6 +11,7 @@ namespace Kernel::HDAudio VMIN = 0x02, VMAJ = 0x03, GCTL = 0x08, + STATESTS = 0x0E, INTCTL = 0x20, INTSTS = 0x24, diff --git a/kernel/kernel/Audio/HDAudio/Controller.cpp b/kernel/kernel/Audio/HDAudio/Controller.cpp index b3cbb81f..a19714b8 100644 --- a/kernel/kernel/Audio/HDAudio/Controller.cpp +++ b/kernel/kernel/Audio/HDAudio/Controller.cpp @@ -65,8 +65,12 @@ namespace Kernel m_pci_device.enable_interrupt(0, *this); m_bar0->write32(Regs::INTCTL, UINT32_MAX); - for (uint8_t codec_id = 0; codec_id < 0x10; codec_id++) + const uint16_t state_sts = m_bar0->read16(Regs::STATESTS); + for (uint8_t codec_id = 0; codec_id < 15; codec_id++) { + if (!(state_sts & (1 << codec_id))) + continue; + auto codec_or_error = initialize_codec(codec_id); if (codec_or_error.is_error()) continue;