mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 19:08:57 +09:00
serial: 8250_bcm7271: balance clk_enable calls
[ Upstream commit8a3b547725] The sw_baud clock must be disabled when the device driver is not connected to the device. This now occurs when probe fails and upon remove. Fixes:41a469482d("serial: 8250: Add new 8250-core based Broadcom STB driver") Reported-by: XuDong Liu <m202071377@hust.edu.cn> Link: https://lore.kernel.org/lkml/20230424125100.4783-1-m202071377@hust.edu.cn/ Signed-off-by: Doug Berger <opendmb@gmail.com> Acked-by: Florian Fainelli <f.fainelli@gmail.com> Link: https://lore.kernel.org/r/20230427181916.2983697-2-opendmb@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
081790eee6
commit
dcf08087c2
@@ -1034,7 +1034,7 @@ static int brcmuart_probe(struct platform_device *pdev)
|
|||||||
if (clk_rate == 0) {
|
if (clk_rate == 0) {
|
||||||
dev_err(dev, "clock-frequency or clk not defined\n");
|
dev_err(dev, "clock-frequency or clk not defined\n");
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto release_dma;
|
goto err_clk_disable;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_dbg(dev, "DMA is %senabled\n", priv->dma_enabled ? "" : "not ");
|
dev_dbg(dev, "DMA is %senabled\n", priv->dma_enabled ? "" : "not ");
|
||||||
@@ -1121,6 +1121,8 @@ err1:
|
|||||||
serial8250_unregister_port(priv->line);
|
serial8250_unregister_port(priv->line);
|
||||||
err:
|
err:
|
||||||
brcmuart_free_bufs(dev, priv);
|
brcmuart_free_bufs(dev, priv);
|
||||||
|
err_clk_disable:
|
||||||
|
clk_disable_unprepare(baud_mux_clk);
|
||||||
release_dma:
|
release_dma:
|
||||||
if (priv->dma_enabled)
|
if (priv->dma_enabled)
|
||||||
brcmuart_arbitration(priv, 0);
|
brcmuart_arbitration(priv, 0);
|
||||||
@@ -1135,6 +1137,7 @@ static int brcmuart_remove(struct platform_device *pdev)
|
|||||||
hrtimer_cancel(&priv->hrt);
|
hrtimer_cancel(&priv->hrt);
|
||||||
serial8250_unregister_port(priv->line);
|
serial8250_unregister_port(priv->line);
|
||||||
brcmuart_free_bufs(&pdev->dev, priv);
|
brcmuart_free_bufs(&pdev->dev, priv);
|
||||||
|
clk_disable_unprepare(priv->baud_mux_clk);
|
||||||
if (priv->dma_enabled)
|
if (priv->dma_enabled)
|
||||||
brcmuart_arbitration(priv, 0);
|
brcmuart_arbitration(priv, 0);
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user