When the corresponding output device is not in playback, we can hear a little noises.
Fix it by powering on the device only when it's in playback. Signed-off-by: Lu Guanqun <[email protected]> Reviewed-by: Wu Fengguang <[email protected]> --- drivers/staging/intel_sst/intelmid_v2_control.c | 19 +++++++++++++++---- 1 files changed, 15 insertions(+), 4 deletions(-) diff --git a/drivers/staging/intel_sst/intelmid_v2_control.c b/drivers/staging/intel_sst/intelmid_v2_control.c index 9f1b4a5..ad1b03e 100644 --- a/drivers/staging/intel_sst/intelmid_v2_control.c +++ b/drivers/staging/intel_sst/intelmid_v2_control.c @@ -217,6 +217,8 @@ static int nc_power_up_pb(unsigned int port) msleep(30); + snd_pmic_ops_nc.pb_on = 1; + /* * There is a mismatch between Playback Sources and the enumerated * values of output sources. This mismatch causes ALSA upper to send @@ -376,6 +378,8 @@ static int nc_power_down_pb(unsigned int device) msleep(30); + snd_pmic_ops_nc.pb_on = 0; + return nc_enable_audiodac(UNMUTE); @@ -519,11 +523,13 @@ static int nc_set_selected_output_dev(u8 value) { struct sc_reg_access sc_access_HP[] = { {LMUTE, 0x02, 0x06}, - {RMUTE, 0x02, 0x06} + {RMUTE, 0x02, 0x06}, + {DRVPOWERCTRL, 0x06, 0x06}, }; struct sc_reg_access sc_access_IS[] = { {LMUTE, 0x04, 0x06}, - {RMUTE, 0x04, 0x06} + {RMUTE, 0x04, 0x06}, + {DRVPOWERCTRL, 0x00, 0x06}, }; int retval = 0; @@ -535,13 +541,18 @@ static int nc_set_selected_output_dev(u8 value) pr_debug("sst: nc set selected output:%d\n", value); switch (value) { case STEREO_HEADPHONE: + if (snd_pmic_ops_nc.pb_on) { + sst_sc_reg_access(sc_access_HP+2, PMIC_WRITE, 1); + msleep(100); + } retval = sst_sc_reg_access(sc_access_HP, PMIC_WRITE, 2); nc_set_amp_power(0); break; case MONO_EARPIECE: case INTERNAL_SPKR: - retval = sst_sc_reg_access(sc_access_IS, PMIC_WRITE, 2); - nc_set_amp_power(1); + retval = sst_sc_reg_access(sc_access_IS, PMIC_WRITE, 3); + if (snd_pmic_ops_nc.pb_on) + nc_set_amp_power(1); break; default: pr_err("sst: rcvd illegal request: %d\n", value); _______________________________________________ MeeGo-kernel mailing list [email protected] http://lists.meego.com/listinfo/meego-kernel
