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/machine/m_at_socket370.c b/src/machine/m_at_socket370.c index ee75752db..a1ec1a30c 100644 --- a/src/machine/m_at_socket370.c +++ b/src/machine/m_at_socket370.c @@ -611,10 +611,9 @@ machine_at_ms6318_init(const machine_t *model) hwm_values.temperatures[1] += 2; /* System offset */ hwm_values.temperatures[2] = 0; /* unused */ - if (sound_card_current[0] == SOUND_INTERNAL) { + if (sound_card_current[0] == SOUND_INTERNAL) device_add(machine_get_snd_device(machine)); - device_add(&stac9708_device); - } + device_add(&vt1611a_device); /* for both VIA and CT5880 options */ return ret; } 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",