aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorColin Leroy <colin@colino.net>2005-05-01 11:58:43 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-01 11:58:43 -0400
commit085e6fc96bcf239cab8adc600aab2452d75590b1 (patch)
treeb02b932789402ab96ded653395207cd19d34c2f2
parent1f7b49d042abfbda71f41b8aff6e1bf7685c1f00 (diff)
[PATCH] pmac: save master volume on sleep
Ben's patch that shutdowns master switch and restores it after resume ("pmac: Improve sleep code of tumbler driver") isn't enough here on an iBook (snapper chip). The master switch is correctly saved and restored, but somehow tumbler_put_master_volume() gets called just after tumbler_set_master_volume() and sets mix->master_vol[*] to 0. So, on resuming, the master switch is reenabled, but the volume is set to 0. Here's a patch that also saves and restores master_vol. Signed-off-by: Colin Leroy <colin@colino.net> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r--sound/ppc/tumbler.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c
index f3e010793a6a..9332237cb6a4 100644
--- a/sound/ppc/tumbler.c
+++ b/sound/ppc/tumbler.c
@@ -99,6 +99,7 @@ typedef struct pmac_tumbler_t {
99 pmac_gpio_t hp_detect; 99 pmac_gpio_t hp_detect;
100 int headphone_irq; 100 int headphone_irq;
101 int lineout_irq; 101 int lineout_irq;
102 unsigned int save_master_vol[2];
102 unsigned int master_vol[2]; 103 unsigned int master_vol[2];
103 unsigned int save_master_switch[2]; 104 unsigned int save_master_switch[2];
104 unsigned int master_switch[2]; 105 unsigned int master_switch[2];
@@ -1139,6 +1140,8 @@ static void tumbler_suspend(pmac_t *chip)
1139 disable_irq(mix->lineout_irq); 1140 disable_irq(mix->lineout_irq);
1140 mix->save_master_switch[0] = mix->master_switch[0]; 1141 mix->save_master_switch[0] = mix->master_switch[0];
1141 mix->save_master_switch[1] = mix->master_switch[1]; 1142 mix->save_master_switch[1] = mix->master_switch[1];
1143 mix->save_master_vol[0] = mix->master_vol[0];
1144 mix->save_master_vol[1] = mix->master_vol[1];
1142 mix->master_switch[0] = mix->master_switch[1] = 0; 1145 mix->master_switch[0] = mix->master_switch[1] = 0;
1143 tumbler_set_master_volume(mix); 1146 tumbler_set_master_volume(mix);
1144 if (!mix->anded_reset) { 1147 if (!mix->anded_reset) {
@@ -1166,6 +1169,8 @@ static void tumbler_resume(pmac_t *chip)
1166 mix->acs &= ~1; 1169 mix->acs &= ~1;
1167 mix->master_switch[0] = mix->save_master_switch[0]; 1170 mix->master_switch[0] = mix->save_master_switch[0];
1168 mix->master_switch[1] = mix->save_master_switch[1]; 1171 mix->master_switch[1] = mix->save_master_switch[1];
1172 mix->master_vol[0] = mix->save_master_vol[0];
1173 mix->master_vol[1] = mix->save_master_vol[1];
1169 tumbler_reset_audio(chip); 1174 tumbler_reset_audio(chip);
1170 if (mix->i2c.client && mix->i2c.init_client) { 1175 if (mix->i2c.client && mix->i2c.init_client) {
1171 if (mix->i2c.init_client(&mix->i2c) < 0) 1176 if (mix->i2c.init_client(&mix->i2c) < 0)