mirror of
https://github.com/torvalds/linux.git
synced 2024-11-27 22:51:35 +00:00
tty: serial: meson: Use devm_clk_get_enabled() helper
The devm_clk_get_enabled() helper: - calls devm_clk_get() - calls clk_prepare_enable() and registers what is needed in order to call clk_disable_unprepare() when needed, as a managed resource. This simplifies the code, the error handling paths and avoid the need of a dedicated function used with devm_add_action_or_reset(). That said, meson_uart_probe_clock() is now more or less the same as devm_clk_get_enabled(), so use this function directly instead. This also fixes an (unlikely) unchecked devm_add_action_or_reset() error. Based on my test with allyesconfig, this reduces the .o size from: text data bss dec hex filename 16350 5016 128 21494 53f6 drivers/tty/serial/meson_uart.o down to: 15415 4784 128 20327 4f67 drivers/tty/serial/meson_uart.o Reviewed-by: Neil Armstrong <narmstrong@baylibre.com> Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> Link: https://lore.kernel.org/r/3f18638cb3cf08ed8817addca1402ed5e3bd3602.1661328361.git.christophe.jaillet@wanadoo.fr Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
70d15f216e
commit
4f1b576d70
@ -667,29 +667,6 @@ static struct uart_driver meson_uart_driver = {
|
||||
.cons = MESON_SERIAL_CONSOLE,
|
||||
};
|
||||
|
||||
static inline struct clk *meson_uart_probe_clock(struct device *dev,
|
||||
const char *id)
|
||||
{
|
||||
struct clk *clk = NULL;
|
||||
int ret;
|
||||
|
||||
clk = devm_clk_get(dev, id);
|
||||
if (IS_ERR(clk))
|
||||
return clk;
|
||||
|
||||
ret = clk_prepare_enable(clk);
|
||||
if (ret) {
|
||||
dev_err(dev, "couldn't enable clk\n");
|
||||
return ERR_PTR(ret);
|
||||
}
|
||||
|
||||
devm_add_action_or_reset(dev,
|
||||
(void(*)(void *))clk_disable_unprepare,
|
||||
clk);
|
||||
|
||||
return clk;
|
||||
}
|
||||
|
||||
static int meson_uart_probe_clocks(struct platform_device *pdev,
|
||||
struct uart_port *port)
|
||||
{
|
||||
@ -697,15 +674,15 @@ static int meson_uart_probe_clocks(struct platform_device *pdev,
|
||||
struct clk *clk_pclk = NULL;
|
||||
struct clk *clk_baud = NULL;
|
||||
|
||||
clk_pclk = meson_uart_probe_clock(&pdev->dev, "pclk");
|
||||
clk_pclk = devm_clk_get_enabled(&pdev->dev, "pclk");
|
||||
if (IS_ERR(clk_pclk))
|
||||
return PTR_ERR(clk_pclk);
|
||||
|
||||
clk_xtal = meson_uart_probe_clock(&pdev->dev, "xtal");
|
||||
clk_xtal = devm_clk_get_enabled(&pdev->dev, "xtal");
|
||||
if (IS_ERR(clk_xtal))
|
||||
return PTR_ERR(clk_xtal);
|
||||
|
||||
clk_baud = meson_uart_probe_clock(&pdev->dev, "baud");
|
||||
clk_baud = devm_clk_get_enabled(&pdev->dev, "baud");
|
||||
if (IS_ERR(clk_baud))
|
||||
return PTR_ERR(clk_baud);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user