diff --git a/sound/pci/maestro3.c b/sound/pci/maestro3.c
index c1c7eeeb199b3879543b7298805d783281480da1..3690ea05b042c4269c1bd08a4d08961a3b27c31b 100644
--- a/sound/pci/maestro3.c
+++ b/sound/pci/maestro3.c
@@ -2392,6 +2392,18 @@ snd_m3_chip_init(m3_t *chip)
 	       DISABLE_LEGACY);
 	pci_write_config_word(pcidev, PCI_LEGACY_AUDIO_CTRL, w);
 
+	/*
+	 * Volume buttons on some HP OmniBook laptops (500 and 6000 at least)
+	 * don't work correctly. This makes them work for the most part.
+	 * Volume up and down buttons on the laptop side work perfectly.
+	 * Fn+cursor_up (volme up) works, Fn+cursor_down (volume down) doesn't,
+	 * Fn+F8 (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_BUTTON_FROM_GD;
 	n |= HV_CTRL_ENABLE | REDUCED_DEBOUNCE;