]> git.ipfire.org Git - thirdparty/linux.git/blobdiff - drivers/tty/serial/8250/8250_dw.c
Merge tag 'tty-6.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty
[thirdparty/linux.git] / drivers / tty / serial / 8250 / 8250_dw.c
index 1300c92b8702a3237459190d9027f12319581b25..a3acbf0f5da1beff6724e839fa14a0a990a15576 100644 (file)
@@ -356,9 +356,9 @@ static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios,
        long rate;
        int ret;
 
-       clk_disable_unprepare(d->clk);
        rate = clk_round_rate(d->clk, newrate);
-       if (rate > 0) {
+       if (rate > 0 && p->uartclk != rate) {
+               clk_disable_unprepare(d->clk);
                /*
                 * Note that any clock-notifer worker will block in
                 * serial8250_update_uartclk() until we are done.
@@ -366,8 +366,8 @@ static void dw8250_set_termios(struct uart_port *p, struct ktermios *termios,
                ret = clk_set_rate(d->clk, newrate);
                if (!ret)
                        p->uartclk = rate;
+               clk_prepare_enable(d->clk);
        }
-       clk_prepare_enable(d->clk);
 
        dw8250_do_set_termios(p, termios, old);
 }