Commit 91f8c2d8 authored by Boris BREZILLON's avatar Boris BREZILLON Committed by Greg Kroah-Hartman

tty: atmel_serial: prepare clk before calling enable

Replace clk_enable/disable with clk_prepare_enable/disable_unprepare to
avoid common clk framework warnings.
Signed-off-by: default avatarBoris BREZILLON <b.brezillon@overkiz.com>
Acked-by: default avatarNicolas Ferre <nicolas.ferre@atmel.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 805bf3da
...@@ -1100,7 +1100,7 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state, ...@@ -1100,7 +1100,7 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state,
* Enable the peripheral clock for this serial port. * Enable the peripheral clock for this serial port.
* This is called on uart_open() or a resume event. * This is called on uart_open() or a resume event.
*/ */
clk_enable(atmel_port->clk); clk_prepare_enable(atmel_port->clk);
/* re-enable interrupts if we disabled some on suspend */ /* re-enable interrupts if we disabled some on suspend */
UART_PUT_IER(port, atmel_port->backup_imr); UART_PUT_IER(port, atmel_port->backup_imr);
...@@ -1114,7 +1114,7 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state, ...@@ -1114,7 +1114,7 @@ static void atmel_serial_pm(struct uart_port *port, unsigned int state,
* Disable the peripheral clock for this serial port. * Disable the peripheral clock for this serial port.
* This is called on uart_close() or a suspend event. * This is called on uart_close() or a suspend event.
*/ */
clk_disable(atmel_port->clk); clk_disable_unprepare(atmel_port->clk);
break; break;
default: default:
printk(KERN_ERR "atmel_serial: unknown pm %d\n", state); printk(KERN_ERR "atmel_serial: unknown pm %d\n", state);
...@@ -1458,9 +1458,10 @@ static void atmel_of_init_port(struct atmel_uart_port *atmel_port, ...@@ -1458,9 +1458,10 @@ static void atmel_of_init_port(struct atmel_uart_port *atmel_port,
/* /*
* Configure the port from the platform device resource info. * Configure the port from the platform device resource info.
*/ */
static void atmel_init_port(struct atmel_uart_port *atmel_port, static int atmel_init_port(struct atmel_uart_port *atmel_port,
struct platform_device *pdev) struct platform_device *pdev)
{ {
int ret;
struct uart_port *port = &atmel_port->uart; struct uart_port *port = &atmel_port->uart;
struct atmel_uart_data *pdata = pdev->dev.platform_data; struct atmel_uart_data *pdata = pdev->dev.platform_data;
...@@ -1496,9 +1497,19 @@ static void atmel_init_port(struct atmel_uart_port *atmel_port, ...@@ -1496,9 +1497,19 @@ static void atmel_init_port(struct atmel_uart_port *atmel_port,
/* for console, the clock could already be configured */ /* for console, the clock could already be configured */
if (!atmel_port->clk) { if (!atmel_port->clk) {
atmel_port->clk = clk_get(&pdev->dev, "usart"); atmel_port->clk = clk_get(&pdev->dev, "usart");
clk_enable(atmel_port->clk); if (IS_ERR(atmel_port->clk)) {
ret = PTR_ERR(atmel_port->clk);
atmel_port->clk = NULL;
return ret;
}
ret = clk_prepare_enable(atmel_port->clk);
if (ret) {
clk_put(atmel_port->clk);
atmel_port->clk = NULL;
return ret;
}
port->uartclk = clk_get_rate(atmel_port->clk); port->uartclk = clk_get_rate(atmel_port->clk);
clk_disable(atmel_port->clk); clk_disable_unprepare(atmel_port->clk);
/* only enable clock when USART is in use */ /* only enable clock when USART is in use */
} }
...@@ -1511,6 +1522,8 @@ static void atmel_init_port(struct atmel_uart_port *atmel_port, ...@@ -1511,6 +1522,8 @@ static void atmel_init_port(struct atmel_uart_port *atmel_port,
} else { } else {
atmel_port->tx_done_mask = ATMEL_US_TXRDY; atmel_port->tx_done_mask = ATMEL_US_TXRDY;
} }
return 0;
} }
struct platform_device *atmel_default_console_device; /* the serial console device */ struct platform_device *atmel_default_console_device; /* the serial console device */
...@@ -1601,6 +1614,7 @@ static void __init atmel_console_get_options(struct uart_port *port, int *baud, ...@@ -1601,6 +1614,7 @@ static void __init atmel_console_get_options(struct uart_port *port, int *baud,
static int __init atmel_console_setup(struct console *co, char *options) static int __init atmel_console_setup(struct console *co, char *options)
{ {
int ret;
struct uart_port *port = &atmel_ports[co->index].uart; struct uart_port *port = &atmel_ports[co->index].uart;
int baud = 115200; int baud = 115200;
int bits = 8; int bits = 8;
...@@ -1612,7 +1626,9 @@ static int __init atmel_console_setup(struct console *co, char *options) ...@@ -1612,7 +1626,9 @@ static int __init atmel_console_setup(struct console *co, char *options)
return -ENODEV; return -ENODEV;
} }
clk_enable(atmel_ports[co->index].clk); ret = clk_prepare_enable(atmel_ports[co->index].clk);
if (ret)
return ret;
UART_PUT_IDR(port, -1); UART_PUT_IDR(port, -1);
UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX); UART_PUT_CR(port, ATMEL_US_RSTSTA | ATMEL_US_RSTRX);
...@@ -1645,6 +1661,7 @@ static struct console atmel_console = { ...@@ -1645,6 +1661,7 @@ static struct console atmel_console = {
*/ */
static int __init atmel_console_init(void) static int __init atmel_console_init(void)
{ {
int ret;
if (atmel_default_console_device) { if (atmel_default_console_device) {
struct atmel_uart_data *pdata = struct atmel_uart_data *pdata =
atmel_default_console_device->dev.platform_data; atmel_default_console_device->dev.platform_data;
...@@ -1655,7 +1672,9 @@ static int __init atmel_console_init(void) ...@@ -1655,7 +1672,9 @@ static int __init atmel_console_init(void)
port->uart.line = id; port->uart.line = id;
add_preferred_console(ATMEL_DEVICENAME, id, NULL); add_preferred_console(ATMEL_DEVICENAME, id, NULL);
atmel_init_port(port, atmel_default_console_device); ret = atmel_init_port(port, atmel_default_console_device);
if (ret)
return ret;
register_console(&atmel_console); register_console(&atmel_console);
} }
...@@ -1786,7 +1805,9 @@ static int atmel_serial_probe(struct platform_device *pdev) ...@@ -1786,7 +1805,9 @@ static int atmel_serial_probe(struct platform_device *pdev)
port->backup_imr = 0; port->backup_imr = 0;
port->uart.line = ret; port->uart.line = ret;
atmel_init_port(port, pdev); ret = atmel_init_port(port, pdev);
if (ret)
goto err;
pinctrl = devm_pinctrl_get_select_default(&pdev->dev); pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
if (IS_ERR(pinctrl)) { if (IS_ERR(pinctrl)) {
...@@ -1812,9 +1833,9 @@ static int atmel_serial_probe(struct platform_device *pdev) ...@@ -1812,9 +1833,9 @@ static int atmel_serial_probe(struct platform_device *pdev)
&& ATMEL_CONSOLE_DEVICE->flags & CON_ENABLED) { && ATMEL_CONSOLE_DEVICE->flags & CON_ENABLED) {
/* /*
* The serial core enabled the clock for us, so undo * The serial core enabled the clock for us, so undo
* the clk_enable() in atmel_console_setup() * the clk_prepare_enable() in atmel_console_setup()
*/ */
clk_disable(port->clk); clk_disable_unprepare(port->clk);
} }
#endif #endif
......
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