diff --git a/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370.c b/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370.c index f73b51d5cb..308cc7453b 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370.c +++ b/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370.c @@ -463,14 +463,22 @@ es1370_setup(es1370_dev * card) /* reset the codec */ PRINT(("codec reset\n")); - es1370_codec_write(&card->config, CODEC_RES_PD, 0x2); - es1370_codec_write(&card->config, CODEC_RES_PD, 0x3); - es1370_codec_write(&card->config, CODEC_CSEL, 0x0); + es1370_codec_write(&card->config, CODEC_RESET_PWRDWN, 0x2); + snooze (20); + es1370_codec_write(&card->config, CODEC_RESET_PWRDWN, 0x3); + snooze (20); + es1370_codec_write(&card->config, CODEC_CLOCK_SEL, 0x0); - es1370_codec_write(&card->config, 0x0, 0x0); - es1370_codec_write(&card->config, 0x1, 0x0); - es1370_codec_write(&card->config, 0x2, 0x0); - es1370_codec_write(&card->config, 0x3, 0x0); + /* set max volume on master and mixer outputs */ + es1370_codec_write(&card->config, CODEC_MASTER_VOL_L, 0x0); + es1370_codec_write(&card->config, CODEC_MASTER_VOL_R, 0x0); + es1370_codec_write(&card->config, CODEC_VOICE_VOL_L, 0x0); + es1370_codec_write(&card->config, CODEC_VOICE_VOL_R, 0x0); + + /* unmute CD playback */ + es1370_codec_write(&card->config, CODEC_OUTPUT_MIX1, ES1370_OUTPUT_MIX1_CDL | ES1370_OUTPUT_MIX1_CDR); + /* unmute mixer output */ + es1370_codec_write(&card->config, CODEC_OUTPUT_MIX2, ES1370_OUTPUT_MIX2_VOICEL | ES1370_OUTPUT_MIX2_VOICER); snooze(50000); // 50 ms diff --git a/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370reg.h b/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370reg.h index 2d39c6d803..9f7e63ed76 100644 --- a/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370reg.h +++ b/src/add-ons/kernel/drivers/audio/ac97/es1370/es1370reg.h @@ -118,16 +118,49 @@ #define STAT_DAC2 0x00000002 /* DAC2 int pending */ #define STAT_ADC 0x00000001 /* ADC int pending */ -#define CODEC_OMIX1 0x10 -#define CODEC_OMIX2 0x11 -#define CODEC_LIMIX1 0x12 -#define CODEC_RIMIX1 0x13 -#define CODEC_LIMIX2 0x14 -#define CODEC_RIMIX2 0x15 -#define CODEC_RES_PD 0x16 -#define CODEC_CSEL 0x17 -#define CODEC_ADSEL 0x18 -#define CODEC_MGAIN 0x19 +/* AKM AK4531 CODEC Control Register Map */ + +#define CODEC_MASTER_VOL_L 0x00 +#define CODEC_MASTER_VOL_R 0x01 +#define CODEC_VOICE_VOL_L 0x02 +#define CODEC_VOICE_VOL_R 0x03 +#define CODEC_FM_VOL_L 0x04 +#define CODEC_FM_VOL_R 0x05 +#define CODEC_CD_VOL_L 0x06 +#define CODEC_CD_VOL_R 0x07 +#define CODEC_LINE_VOL_L 0x08 +#define CODEC_LINE_VOL_R 0x09 +#define CODEC_AUX_VOL_L 0x0A +#define CODEC_AUX_VOL_R 0x0B +#define CODEC_MONO1_VOL 0x0C +#define CODEC_MONO2_VOL 0x0D +#define CODEC_MIC_VOL 0x0E +#define CODEC_MONO_OUT_VOL 0x0F +#define CODEC_OUTPUT_MIX1 0x10 +#define CODEC_OUTPUT_MIX2 0x11 +#define CODEC_L_INPUT_MIX1 0x12 +#define CODEC_R_INPUT_MIX1 0x13 +#define CODEC_L_INPUT_MIX2 0x14 +#define CODEC_R_INPUT_MIX2 0x15 +#define CODEC_RESET_PWRDWN 0x16 +#define CODEC_CLOCK_SEL 0x17 +#define CODEC_AD_INPUT_SEL 0x18 +#define CODEC_MIC_AMP_GAIN 0x19 + +/* output mixer mute bit positions */ +#define ES1370_OUTPUT_MIX1_FML (1<<6) +#define ES1370_OUTPUT_MIX1_FMR (1<<5) +#define ES1370_OUTPUT_MIX1_LINEL (1<<4) +#define ES1370_OUTPUT_MIX1_LINER (1<<3) +#define ES1370_OUTPUT_MIX1_CDL (1<<2) +#define ES1370_OUTPUT_MIX1_CDR (1<<1) +#define ES1370_OUTPUT_MIX1_MIC (1<<0) +#define ES1370_OUTPUT_MIX2_AUXL (1<<5) +#define ES1370_OUTPUT_MIX2_AUXR (1<<4) +#define ES1370_OUTPUT_MIX2_VOICEL (1<<3) +#define ES1370_OUTPUT_MIX2_VOICER (1<<2) +#define ES1370_OUTPUT_MIX2_MONO2 (1<<1) +#define ES1370_OUTPUT_MIX2_MONO1 (1<<0) /* ES1371 specific */