Index: firmware/export/wm8758.h =================================================================== --- firmware/export/wm8758.h (revision 24950) +++ firmware/export/wm8758.h (working copy) @@ -34,6 +34,7 @@ extern void audiohw_set_master_vol(int vol_l, int vol_r); extern void audiohw_set_lineout_vol(int vol_l, int vol_r); extern void audiohw_set_mixer_vol(int channel1, int channel2); +extern void audiohw_enable_lineout(bool enable); #define RESET 0x00 #define RESET_RESET 0x0 Index: firmware/target/arm/ipod/powermgmt-ipod-pcf.c =================================================================== --- firmware/target/arm/ipod/powermgmt-ipod-pcf.c (revision 24950) +++ firmware/target/arm/ipod/powermgmt-ipod-pcf.c (working copy) @@ -25,6 +25,7 @@ #include "powermgmt.h" #include "pcf5060x.h" #include "pcf50605.h" +#include "audiohw.h" const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] = { @@ -127,5 +128,7 @@ pcf50605_write(PCF5060X_D2REGC1, 0x18); /* OFF */ } + /* enable/disable lineout together with accessory supply setting */ + audiohw_enable_lineout(enable); } #endif Index: firmware/drivers/audio/wm8758.c =================================================================== --- firmware/drivers/audio/wm8758.c (revision 24950) +++ firmware/drivers/audio/wm8758.c (working copy) @@ -181,6 +181,23 @@ wmcodec_write(ROUT2VOL, amp_r | ROUT2VOL_ROUT2ZC | ROUT2VOL_OUT2VU); } +void audiohw_enable_lineout(bool enable) +{ + if (enable) + { + /* include enabling of OUT2 */ + wmcodec_write(PWRMGMT3, PWRMGMT3_LOUT2EN | PWRMGMT3_ROUT2EN + | PWRMGMT3_RMIXEN | PWRMGMT3_LMIXEN + | PWRMGMT3_DACENR | PWRMGMT3_DACENL); + } + else + { + /* exclude enabling of OUT2 */ + wmcodec_write(PWRMGMT3, PWRMGMT3_RMIXEN | PWRMGMT3_LMIXEN + | PWRMGMT3_DACENR | PWRMGMT3_DACENL); + } +} + void audiohw_set_bass(int value) { eq1_reg = (eq1_reg & ~EQ_GAIN_MASK) | EQ_GAIN_VALUE(value);