Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 99079
b: refs/heads/master
c: 8b83afe
h: refs/heads/master
i:
  99077: 8bfd363
  99075: 054384c
  99071: 027d6ca
v: v3
  • Loading branch information
Ville Syrjälä authored and Takashi Iwai committed Jun 6, 2008
1 parent 1cda196 commit 6373742
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 16 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 607d982bbea2a14b5b77cc7689f509d588e1e6da
refs/heads/master: 8b83afe0d21f07145ec34ac006656e4d3edc4bac
42 changes: 27 additions & 15 deletions trunk/sound/pci/maestro3.c
Original file line number Diff line number Diff line change
Expand Up @@ -2427,6 +2427,29 @@ snd_m3_amp_enable(struct snd_m3 *chip, int enable)
outw(0xffff, io + GPIO_MASK);
}

static void
snd_m3_hv_init(struct snd_m3 *chip)
{
unsigned long io = chip->iobase;
u16 val = GPI_VOL_DOWN | GPI_VOL_UP;

if (!chip->is_omnibook)
return;

/*
* Volume buttons on some HP OmniBook laptops
* require some GPIO magic to work correctly.
*/
outw(0xffff, io + GPIO_MASK);
outw(0x0000, io + GPIO_DATA);

outw(~val, io + GPIO_MASK);
outw(inw(io + GPIO_DIRECTION) & ~val, io + GPIO_DIRECTION);
outw(val, io + GPIO_MASK);

outw(0xffff, io + GPIO_MASK);
}

static int
snd_m3_chip_init(struct snd_m3 *chip)
{
Expand All @@ -2442,21 +2465,6 @@ snd_m3_chip_init(struct snd_m3 *chip)
DISABLE_LEGACY);
pci_write_config_word(pcidev, PCI_LEGACY_AUDIO_CTRL, w);

if (chip->is_omnibook) {
/*
* Volume buttons on some HP OmniBook laptops don't work
* correctly. This makes them work for the most part.
*
* Volume up and down buttons on the laptop side work.
* Fn+cursor_up (volme up) works.
* Fn+cursor_down (volume down) doesn't work.
* Fn+F7 (mute) works acts as volume up.
*/
outw(~(GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_MASK);
outw(inw(io + GPIO_DIRECTION) & ~(GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_DIRECTION);
outw((GPI_VOL_DOWN|GPI_VOL_UP), io + GPIO_DATA);
outw(0xffff, io + GPIO_MASK);
}
pci_read_config_dword(pcidev, PCI_ALLEGRO_CONFIG, &n);
n &= ~(HV_CTRL_ENABLE | REDUCED_DEBOUNCE | HV_BUTTON_FROM_GD);
n |= chip->hv_config;
Expand Down Expand Up @@ -2642,6 +2650,8 @@ static int m3_resume(struct pci_dev *pci)
snd_m3_enable_ints(chip);
snd_m3_amp_enable(chip, 1);

snd_m3_hv_init(chip);

snd_power_change_state(card, SNDRV_CTL_POWER_D0);
return 0;
}
Expand Down Expand Up @@ -2781,6 +2791,8 @@ snd_m3_create(struct snd_card *card, struct pci_dev *pci,

snd_m3_amp_enable(chip, 1);

snd_m3_hv_init(chip);

tasklet_init(&chip->hwvol_tq, snd_m3_update_hw_volume, (unsigned long)chip);

if (request_irq(pci->irq, snd_m3_interrupt, IRQF_SHARED,
Expand Down

0 comments on commit 6373742

Please sign in to comment.