/* Enable DACs and audio output after a short delay */ void audiohw_postinit(void) { /* From app notes: allow Vref to stabilize to reduce clicks */ sleep(HZ); /* 3. Enable DACs as required. */ wmcodec_write(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR); /* 4. Enable line and / or headphone output buffers as required. */ #if defined(MROBE_100) || defined(MPIO_HD200) wmcodec_write(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR | PWRMGMT2_LOUT1 | PWRMGMT2_ROUT1); #else wmcodec_write(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR | PWRMGMT2_LOUT1 | PWRMGMT2_ROUT1 | PWRMGMT2_LOUT2 | PWRMGMT2_ROUT2); #endif wmcodec_write(ADDITIONAL1, ADDITIONAL1_TSDEN | ADDITIONAL1_TOEN | ADDITIONAL1_DMONOMIX_LLRR | ADDITIONAL1_VSEL_DEFAULT); wmcodec_write(LEFTMIX1, LEFTMIX1_LD2LO | LEFTMIX1_LI2LO_DEFAULT); wmcodec_write(RIGHTMIX2, RIGHTMIX2_RD2RO | RIGHTMIX2_RI2RO_DEFAULT); #ifdef TOSHIBA_GIGABEAT_F #ifdef HAVE_HARDWARE_BEEP /* Single-ended mono input */ wmcodec_write(MONOMIX1, 0); /* Route mono input to both outputs at 0dB */ wmcodec_write(LEFTMIX2, LEFTMIX2_MI2LO | LEFTMIX2_MI2LOVOL(2)); wmcodec_write(RIGHTMIX1, RIGHTMIX1_MI2RO | RIGHTMIX1_MI2ROVOL(2)); #endif #endif #ifdef MPIO_HD200 /* Crude fix for high pitch noise at startup * I should find out what realy causes this */ wmcodec_write(LOUT1, LOUT1_BITS|0x7f); wmcodec_write(ROUT1, ROUT1_BITS|0x7f); wmcodec_write(LOUT1, LOUT1_BITS); wmcodec_write(ROUT1, ROUT1_BITS); #endif /* lower power consumption */ wmcodec_write(PWRMGMT1, PWRMGMT1_VREF | PWRMGMT1_VMIDSEL_50K); audiohw_mute(false); #ifdef MROBE_100 /* enable headphone output */ GPIOL_OUTPUT_VAL &= ~0x10; GPIOL_OUTPUT_EN |= 0x10; #endif }
/* Enable DACs and audio output after a short delay */ void audiohw_postinit(void) { /* From app notes: allow Vref to stabilize to reduce clicks */ sleep(HZ); #ifdef AUDIOHW_HAVE_DEPTH_3D wmcodec_set_bits(ENHANCE_3D, ENHANCE_3D_MODE3D_PLAYBACK); #endif /* 3. Enable DACs as required. */ wmcodec_set_bits(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR); /* 4. Enable line and / or headphone output buffers as required. */ #if defined(GIGABEAT_F) /* headphones + line-out */ wmcodec_set_bits(PWRMGMT2, PWRMGMT2_LOUT1 | PWRMGMT2_ROUT1 | PWRMGMT2_LOUT2 | PWRMGMT2_ROUT2); #else /* headphones */ wmcodec_set_bits(PWRMGMT2, PWRMGMT2_LOUT1 | PWRMGMT2_ROUT1); #endif /* Full -0dB on the DACS */ wmcodec_set_bits(LEFTGAIN, 0xff); wmcodec_set_bits(RIGHTGAIN, RIGHTGAIN_RDVU | 0xff); /* Enable Thermal shutdown, Timeout when zero-crossing in use, * set analog bias for 3.3V, monomix to DACR */ wmcodec_set_reg(ADDITIONAL1, ADDITIONAL1_TSDEN | ADDITIONAL1_TOEN | ADDITIONAL1_DMONOMIX_LLRR | ADDITIONAL1_VSEL_DEFAULT); /* Enable zero-crossing in out stage */ wmcodec_set_bits(LOUT1, LOUT1_LO1ZC); wmcodec_set_bits(ROUT1, ROUT1_RO1ZC); wmcodec_set_bits(LOUT2, LOUT2_LO2ZC); wmcodec_set_bits(ROUT2, ROUT2_RO2ZC); /* route signal from DAC to mixers */ wmcodec_set_bits(LEFTMIX1, LEFTMIX1_LD2LO); wmcodec_set_bits(RIGHTMIX2, RIGHTMIX2_RD2RO); #ifdef TOSHIBA_GIGABEAT_F #ifdef HAVE_HARDWARE_BEEP /* Single-ended mono input */ wmcodec_set_reg(MONOMIX1, 0x00); /* Route mono input to both outputs at 0dB */ wmcodec_set_reg(LEFTMIX2, LEFTMIX2_MI2LO | LEFTMIX2_MI2LOVOL(2)); wmcodec_set_reg(RIGHTMIX1, RIGHTMIX1_MI2RO | RIGHTMIX1_MI2ROVOL(2)); #endif #endif /* lower power consumption */ wmcodec_set_masked(PWRMGMT1, PWRMGMT1_VMIDSEL_50K, PWRMGMT1_VMIDSEL_MASK); audiohw_mute(false); #ifdef MROBE_100 /* enable headphone output */ GPIOL_OUTPUT_VAL &= ~0x10; GPIOL_OUTPUT_EN |= 0x10; #endif #ifdef MPIO_HD200 /* enable headphone output */ or_l((1<<25),&GPIO1_OUT); #endif }