diff options
author | Guido Guenther <agx@sigxcpu.org> | 2005-11-15 01:28:05 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2005-11-15 21:51:50 -0500 |
commit | c0ce5c5228dd17d4e3dd1d15b8d52714262cab70 (patch) | |
tree | c4666405c979bd4fb327030416b01fe917259a7f /sound | |
parent | b5166cc252190be80465f3b4f050e4a0310f71af (diff) |
[PATCH] PowerBook 6,1: headphone not detected after suspend
ever since suspend to disk works I had the problem that headphone
(un)plugging doesn't get detected properly anymore after the first
resume.
Reloading the module worked around this ever since, however the real
cause of the problem was that after a resume the driver only got
interrupts on "unplug" not on "plug". Reactivating the headphone status
interrupt in tumbler_resume fixes this. This shouldn't cause
any trouble with software suspend, but it would be nice if somebody
could confirm this:
Signed-off-by: Guido Guenther <agx@sigxcpu.org>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/ppc/tumbler.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/sound/ppc/tumbler.c b/sound/ppc/tumbler.c index 65384afcfc3f..d74bfabe5300 100644 --- a/sound/ppc/tumbler.c +++ b/sound/ppc/tumbler.c | |||
@@ -1194,8 +1194,14 @@ static void tumbler_resume(pmac_t *chip) | |||
1194 | tumbler_set_master_volume(mix); | 1194 | tumbler_set_master_volume(mix); |
1195 | if (chip->update_automute) | 1195 | if (chip->update_automute) |
1196 | chip->update_automute(chip, 0); | 1196 | chip->update_automute(chip, 0); |
1197 | if (mix->headphone_irq >= 0) | 1197 | if (mix->headphone_irq >= 0) { |
1198 | unsigned char val; | ||
1199 | |||
1198 | enable_irq(mix->headphone_irq); | 1200 | enable_irq(mix->headphone_irq); |
1201 | /* activate headphone status interrupts */ | ||
1202 | val = do_gpio_read(&mix->hp_detect); | ||
1203 | do_gpio_write(&mix->hp_detect, val | 0x80); | ||
1204 | } | ||
1199 | if (mix->lineout_irq >= 0) | 1205 | if (mix->lineout_irq >= 0) |
1200 | enable_irq(mix->lineout_irq); | 1206 | enable_irq(mix->lineout_irq); |
1201 | } | 1207 | } |