Skip to content

Commit

Permalink
tty: serial: cpm_uart: Fix behaviour for non existing GPIOs
Browse files Browse the repository at this point in the history
devm_gpiod_get_index() doesn't return NULL but -ENOENT when the
requested GPIO doesn't exist,  leading to the following messages:

[    2.742468] gpiod_direction_input: invalid GPIO (errorpointer)
[    2.748147] can't set direction for gpio #2: -2
[    2.753081] gpiod_direction_input: invalid GPIO (errorpointer)
[    2.758724] can't set direction for gpio #3: -2
[    2.763666] gpiod_direction_output: invalid GPIO (errorpointer)
[    2.769394] can't set direction for gpio #4: -2
[    2.774341] gpiod_direction_input: invalid GPIO (errorpointer)
[    2.779981] can't set direction for gpio #5: -2
[    2.784545] ff000a20.serial: ttyCPM1 at MMIO 0xfff00a20 (irq = 39, base_baud = 8250000) is a CPM UART

Use devm_gpiod_get_index_optional() instead.

At the same time, handle the error case and properly exit
with an error.

Fixes: 97cbaf2 ("tty: serial: cpm_uart: Convert to use GPIO descriptors")
Cc: [email protected]
Cc: Linus Walleij <[email protected]>
Signed-off-by: Christophe Leroy <[email protected]>
Reviewed-by: Linus Walleij <[email protected]>
Link: https://lore.kernel.org/r/694a25fdce548c5ee8b060ef6a4b02746b8f25c0.1591986307.git.christophe.leroy@csgroup.eu
Signed-off-by: Greg Kroah-Hartman <[email protected]>
  • Loading branch information
chleroy authored and gregkh committed Jun 27, 2020
1 parent 4877846 commit 311eab8
Showing 1 changed file with 8 additions and 1 deletion.
9 changes: 8 additions & 1 deletion drivers/tty/serial/cpm_uart/cpm_uart_core.c
Original file line number Diff line number Diff line change
Expand Up @@ -1215,7 +1215,12 @@ static int cpm_uart_init_port(struct device_node *np,

pinfo->gpios[i] = NULL;

gpiod = devm_gpiod_get_index(dev, NULL, i, GPIOD_ASIS);
gpiod = devm_gpiod_get_index_optional(dev, NULL, i, GPIOD_ASIS);

if (IS_ERR(gpiod)) {
ret = PTR_ERR(gpiod);
goto out_irq;
}

if (gpiod) {
if (i == GPIO_RTS || i == GPIO_DTR)
Expand All @@ -1237,6 +1242,8 @@ static int cpm_uart_init_port(struct device_node *np,

return cpm_uart_request_port(&pinfo->port);

out_irq:
irq_dispose_mapping(pinfo->port.irq);
out_pram:
cpm_uart_unmap_pram(pinfo, pram);
out_mem:
Expand Down

0 comments on commit 311eab8

Please sign in to comment.