]> err.no Git - linux-2.6/commitdiff
[ALSA] [PPC,SOUND] Fix audio gpio state detection
authorAndreas Schwab <schwab@suse.de>
Fri, 1 Sep 2006 15:15:36 +0000 (17:15 +0200)
committerJaroslav Kysela <perex@suse.cz>
Sat, 23 Sep 2006 08:45:33 +0000 (10:45 +0200)
When booting with line out or headphone plugged, you won't hear anything.
The problem is that after reset all channels are muted, but the actual
value of the gpio port doesn't exactly match the active_val settings as
expected by check_audio_gpio.  For example, the line_mute port is set to
7, but check_audio_gpio would expect 0xd or 0xf, thus its return value
indicates that it is not active, even though it is.  AFAICS only looking
at the low bit is enough to determine whether the port is active.

Signed-off-by: Andreas Schwab <schwab@suse.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/ppc/tumbler.c

index 6ae2d5b9aa4a06ad3cad79e244906d01985fd718..cdff53e4a17e6ab22a78b652f4b8e5bc8af8639a 100644 (file)
@@ -190,7 +190,7 @@ static int check_audio_gpio(struct pmac_gpio *gp)
 
        ret = do_gpio_read(gp);
 
-       return (ret & 0xd) == (gp->active_val & 0xd);
+       return (ret & 0x1) == (gp->active_val & 0x1);
 }
 
 static int read_audio_gpio(struct pmac_gpio *gp)
@@ -198,7 +198,8 @@ static int read_audio_gpio(struct pmac_gpio *gp)
        int ret;
        if (! gp->addr)
                return 0;
-       ret = ((do_gpio_read(gp) & 0x02) !=0);
+       ret = do_gpio_read(gp);
+       ret = (ret & 0x02) !=0;
        return ret == gp->active_state;
 }