From 9c6eccbf5adcb618035d177498d90698458d09d9 Mon Sep 17 00:00:00 2001 From: RichardG867 Date: Fri, 19 Dec 2025 18:01:30 -0300 Subject: [PATCH] AC97 Codec: Add the ICE1232/VT1611A codec --- src/include/86box/snd_ac97.h | 3 +++ src/sound/snd_ac97_codec.c | 24 +++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/include/86box/snd_ac97.h b/src/include/86box/snd_ac97.h index 0bad4efa0..a0b5a8d72 100644 --- a/src/include/86box/snd_ac97.h +++ b/src/include/86box/snd_ac97.h @@ -108,6 +108,7 @@ #define AC97_CODEC_ALC100 AC97_VENDOR_ID('A', 'L', 'C', 0x20) #define AC97_CODEC_CS4297 AC97_VENDOR_ID('C', 'R', 'Y', 0x03) #define AC97_CODEC_CS4297A AC97_VENDOR_ID('C', 'R', 'Y', 0x11) +#define AC97_CODEC_ICE1232 AC97_VENDOR_ID('I', 'C', 'E', 0x11) #define AC97_CODEC_STAC9708 AC97_VENDOR_ID(0x83, 0x84, 0x76, 0x08) #define AC97_CODEC_STAC9721 AC97_VENDOR_ID(0x83, 0x84, 0x76, 0x09) #define AC97_CODEC_TR28023 AC97_VENDOR_ID('T', 'R', 'A', 0x03) @@ -161,9 +162,11 @@ extern const device_t alc100_device; extern const device_t cs4297_device; extern const device_t cs4297a_device; # define ct1297_device tr28023_device +extern const device_t ice1232_device; extern const device_t stac9708_device; extern const device_t stac9721_device; extern const device_t tr28023_device; +# define vt1611a_device ice1232_device extern const device_t w83971d_device; extern const device_t wm9701a_device; #ifdef USE_SOFTMODEM diff --git a/src/sound/snd_ac97_codec.c b/src/sound/snd_ac97_codec.c index 071356873..c028e429d 100644 --- a/src/sound/snd_ac97_codec.c +++ b/src/sound/snd_ac97_codec.c @@ -35,7 +35,7 @@ static const struct { uint16_t reset_flags; uint16_t extid_flags; uint8_t pcsr_mask; /* register 26 bits [15:8] */ - uint8_t eascr_mask; /* register 2A bits [14:11] (audio) or 56 bits ... */ + uint8_t eascr_mask; /* register 2A bits [14:11] */ uint8_t modem_flags; uint16_t gpi_mask; /* modem GPIO input-capable bits */ uint16_t gpo_mask; /* modem GPIO output-capable bits */ @@ -80,6 +80,14 @@ static const struct { .pcsr_mask = 0xff, .vendor_regs = (const ac97_vendor_reg_t[]) {{0, 0x5e, 0x0000, 0x01b0}, {0, 0x60, 0x0023, 0x0001}, {0, 0x68, 0x0000, 0xdfff}, {0}} }, + { + .device = &ice1232_device, + .misc_flags = AC97_AUDIO | AC97_AUXOUT | AC97_MONOOUT | AC97_PCBEEP | AC97_PHONE | AC97_VIDEO | AC97_AUXIN | AC97_MS | AC97_LPBK, + .reset_flags = AC97_HPOUT | AC97_DAC_18B | AC97_ADC_18B | (27 << AC97_3D_SHIFT), + .extid_flags = AC97_VRA | AC97_AMAP, + .pcsr_mask = 0xff, + .vendor_regs = (const ac97_vendor_reg_t[]) {{0, 0x5a, 0x0021, 0x00fd}, {0}} + }, { .device = &stac9708_device, .misc_flags = AC97_AUDIO | AC97_AUXOUT | AC97_MONOOUT | AC97_PCBEEP | AC97_PHONE | AC97_VIDEO | AC97_AUXIN | AC97_MS | AC97_LPBK, @@ -890,6 +898,20 @@ const device_t cs4297a_device = { .config = NULL }; +const device_t ice1232_device = { + .name = "ICEnsemble ICE1232 / VIA VT1611A", + .internal_name = "ice1232", + .flags = DEVICE_AC97, + .local = AC97_CODEC_ICE1232, + .init = ac97_codec_init, + .close = ac97_codec_close, + .reset = ac97_codec_reset, + .available = NULL, + .speed_changed = NULL, + .force_redraw = NULL, + .config = NULL +}; + const device_t stac9708_device = { .name = "SigmaTel STAC9708", .internal_name = "stac9708",