Hi Mark, I'm playing with the GPIO interface on a WM9712G, specifically GPIO1 and 2 of the chip. However I'm unable to get the chip to toggle any of these pins. Setup is: [...] wm97xx_config_gpio(wm, WM97XX_GPIO_1, WM97XX_GPIO_OUT, WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_NOTSTICKY, WM97XX_GPIO_NOWAKE); wm97xx_config_gpio(wm, WM97XX_GPIO_2, WM97XX_GPIO_OUT, WM97XX_GPIO_POL_HIGH, WM97XX_GPIO_NOTSTICKY, WM97XX_GPIO_NOWAKE); mutex_lock(&wm->codec_mutex); reg = wm97xx_reg_read(wm, 0x56); if (reg == -1) printk(KERN_ERR "WM97XX: register 0x56 rd fail\n"); reg |= (1 << 2); /* GPIO2 to GPIO logic */ wm97xx_reg_write(wm, 0x56, reg); mutex_unlock(&wm->codec_mutex); [...] Setting a pin with wm97xx_set_gpio(wm, WM97XX_GPIO_1, WM97XX_GPIO_HIGH); reads back 0x0820 from GPIO status reg, sets bit 1,writes back 0x1044 (<<1), but a read following immediately after yields 0x0820 again, and the pin never changes. Am I missing something? Also I need this patch to get wm97xx_set_gpio() to actually set a bit in the gpio register: --- a/drivers/input/touchscreen/wm97xx-core.c +++ b/drivers/input/touchscreen/wm97xx-core.c @@ -200,7 +200,7 @@ void wm97xx_set_gpio(struct wm97xx *wm, u32 gpio, mutex_lock(&wm->codec_mutex); reg = wm97xx_reg_read(wm, AC97_GPIO_STATUS); - if (status & WM97XX_GPIO_HIGH) + if (status == WM97XX_GPIO_HIGH) reg |= gpio; else reg &= ~gpio; Thanks! Manuel Lauss -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html