diff options
author | Colin Leroy <colin@colino.net> | 2005-05-01 11:58:43 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-05-01 11:58:43 -0400 |
commit | 085e6fc96bcf239cab8adc600aab2452d75590b1 (patch) | |
tree | b02b932789402ab96ded653395207cd19d34c2f2 /sound | |
parent | 1f7b49d042abfbda71f41b8aff6e1bf7685c1f00 (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>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/ppc/tumbler.c | 5 |
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) |