Skip to content

Commit

Permalink
[PATCH] ppc64: improve g5 sound headphone mute
Browse files Browse the repository at this point in the history
This patch fixes a couple more issues with the management of the GPIOs
dealing with headphone and line out mute on the G5.  It should fix the
remaining problems of people not getting any sound out of the headphone
jack.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Benjamin Herrenschmidt authored and Linus Torvalds committed May 1, 2005
1 parent 1bdacf8 commit 4be8dc7
Showing 1 changed file with 17 additions and 6 deletions.
23 changes: 17 additions & 6 deletions sound/ppc/tumbler.c
Original file line number Diff line number Diff line change
Expand Up @@ -177,11 +177,22 @@ static void write_audio_gpio(pmac_gpio_t *gp, int active)
if (! gp->addr)
return;
active = active ? gp->active_val : gp->inactive_val;

do_gpio_write(gp, active);
DBG("(I) gpio %x write %d\n", gp->addr, active);
}

static int check_audio_gpio(pmac_gpio_t *gp)
{
int ret;

if (! gp->addr)
return 0;

ret = do_gpio_read(gp);

return (ret & 0xd) == (gp->active_val & 0xd);
}

static int read_audio_gpio(pmac_gpio_t *gp)
{
int ret;
Expand Down Expand Up @@ -683,7 +694,7 @@ static int tumbler_get_mute_switch(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_
}
if (gp == NULL)
return -EINVAL;
ucontrol->value.integer.value[0] = ! read_audio_gpio(gp);
ucontrol->value.integer.value[0] = !check_audio_gpio(gp);
return 0;
}

Expand Down Expand Up @@ -711,7 +722,7 @@ static int tumbler_put_mute_switch(snd_kcontrol_t *kcontrol, snd_ctl_elem_value_
}
if (gp == NULL)
return -EINVAL;
val = ! read_audio_gpio(gp);
val = ! check_audio_gpio(gp);
if (val != ucontrol->value.integer.value[0]) {
write_audio_gpio(gp, ! ucontrol->value.integer.value[0]);
return 1;
Expand Down Expand Up @@ -897,11 +908,11 @@ static int tumbler_detect_lineout(pmac_t *chip)

static void check_mute(pmac_t *chip, pmac_gpio_t *gp, int val, int do_notify, snd_kcontrol_t *sw)
{
//pmac_tumbler_t *mix = chip->mixer_data;
if (val != read_audio_gpio(gp)) {
if (check_audio_gpio(gp) != val) {
write_audio_gpio(gp, val);
if (do_notify)
snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE, &sw->id);
snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
&sw->id);
}
}

Expand Down

0 comments on commit 4be8dc7

Please sign in to comment.