Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Input: ps2-gpio - enforce GPIOs flag open drain

The PS/2 bus defines the data and clock line be open drain, therefore
for both enforce the particular GPIO flags in the driver.

Without enforcing to flag at least the clock gpio as open drain we run
into the following warning:

WARNING: CPU: 1 PID: 40 at drivers/gpio/gpiolib.c:3175 gpiochip_enable_irq+0x54/0x90

gpiochip_enable_irq() warns on a GPIO being configured as output while
serving as IRQ source without being flagged as open drain.

Signed-off-by: Danilo Krummrich <danilokrummrich@dk-develop.de>
Link: https://lore.kernel.org/r/20220215180829.63543-4-danilokrummrich@dk-develop.de
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

authored by

Danilo Krummrich and committed by
Dmitry Torokhov
0c0ef67e 81b9fd69

+7 -2
+7 -2
drivers/input/serio/ps2-gpio.c
··· 372 372 static int ps2_gpio_get_props(struct device *dev, 373 373 struct ps2_gpio_data *drvdata) 374 374 { 375 - drvdata->gpio_data = devm_gpiod_get(dev, "data", GPIOD_IN); 375 + enum gpiod_flags gflags; 376 + 377 + /* Enforce open drain, since this is required by the PS/2 bus. */ 378 + gflags = GPIOD_IN | GPIOD_FLAGS_BIT_OPEN_DRAIN; 379 + 380 + drvdata->gpio_data = devm_gpiod_get(dev, "data", gflags); 376 381 if (IS_ERR(drvdata->gpio_data)) { 377 382 dev_err(dev, "failed to request data gpio: %ld", 378 383 PTR_ERR(drvdata->gpio_data)); 379 384 return PTR_ERR(drvdata->gpio_data); 380 385 } 381 386 382 - drvdata->gpio_clk = devm_gpiod_get(dev, "clk", GPIOD_IN); 387 + drvdata->gpio_clk = devm_gpiod_get(dev, "clk", gflags); 383 388 if (IS_ERR(drvdata->gpio_clk)) { 384 389 dev_err(dev, "failed to request clock gpio: %ld", 385 390 PTR_ERR(drvdata->gpio_clk));