Commit 32b44568 authored by Sonic Zhang's avatar Sonic Zhang Committed by Greg Kroah-Hartman

serial: bfin-uart: Request CTS GPIO PIN when the serial device starts up.

Serial device may be probed earlier before GPIOLIB is initialized. Requesting and
configuring CTS GPIO PIN fails in that early stage. Do it when the serial device
really starts up.
Signed-off-by: default avatarSonic Zhang <sonic.zhang@analog.com>
Acked-by: default avatarAlan Cox <alan@linux.intel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent 7962fce9
...@@ -739,8 +739,13 @@ static int bfin_serial_startup(struct uart_port *port) ...@@ -739,8 +739,13 @@ static int bfin_serial_startup(struct uart_port *port)
pr_info("Unable to attach BlackFin UART CTS interrupt. So, disable it.\n"); pr_info("Unable to attach BlackFin UART CTS interrupt. So, disable it.\n");
} }
} }
if (uart->rts_pin >= 0) if (uart->rts_pin >= 0) {
gpio_direction_output(uart->rts_pin, 0); if (gpio_request(uart->rts_pin, DRIVER_NAME)) {
pr_info("fail to request RTS PIN at GPIO_%d\n", uart->rts_pin);
uart->rts_pin = -1;
} else
gpio_direction_output(uart->rts_pin, 0);
}
#endif #endif
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
if (uart->cts_pin >= 0 && request_irq(uart->status_irq, if (uart->cts_pin >= 0 && request_irq(uart->status_irq,
...@@ -792,6 +797,8 @@ static void bfin_serial_shutdown(struct uart_port *port) ...@@ -792,6 +797,8 @@ static void bfin_serial_shutdown(struct uart_port *port)
#ifdef CONFIG_SERIAL_BFIN_CTSRTS #ifdef CONFIG_SERIAL_BFIN_CTSRTS
if (uart->cts_pin >= 0) if (uart->cts_pin >= 0)
free_irq(gpio_to_irq(uart->cts_pin), uart); free_irq(gpio_to_irq(uart->cts_pin), uart);
if (uart->rts_pin >= 0)
gpio_free(uart->rts_pin);
#endif #endif
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS #ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
if (uart->cts_pin >= 0) if (uart->cts_pin >= 0)
...@@ -1378,10 +1385,6 @@ static int bfin_serial_probe(struct platform_device *pdev) ...@@ -1378,10 +1385,6 @@ static int bfin_serial_probe(struct platform_device *pdev)
uart->rts_pin = -1; uart->rts_pin = -1;
else else
uart->rts_pin = res->start; uart->rts_pin = res->start;
# if defined(CONFIG_SERIAL_BFIN_CTSRTS)
if (uart->rts_pin >= 0)
gpio_request(uart->rts_pin, DRIVER_NAME);
# endif
#endif #endif
} }
...@@ -1421,10 +1424,6 @@ static int __devexit bfin_serial_remove(struct platform_device *pdev) ...@@ -1421,10 +1424,6 @@ static int __devexit bfin_serial_remove(struct platform_device *pdev)
if (uart) { if (uart) {
uart_remove_one_port(&bfin_serial_reg, &uart->port); uart_remove_one_port(&bfin_serial_reg, &uart->port);
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
if (uart->rts_pin >= 0)
gpio_free(uart->rts_pin);
#endif
iounmap(uart->port.membase); iounmap(uart->port.membase);
peripheral_free_list( peripheral_free_list(
(unsigned short *)pdev->dev.platform_data); (unsigned short *)pdev->dev.platform_data);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment