| From fa2e7c7a675e9523bd558009e966661e0ba50ddd Mon Sep 17 00:00:00 2001 |
| From: Tobias Klauser <tklauser@distanz.ch> |
| Date: Mon, 24 Apr 2017 16:34:20 -0500 |
| Subject: [PATCH 096/103] fpga altera-hps2fpga: disable/unprepare clock on |
| error in alt_fpga_bridge_probe() |
| |
| If either _alt_hps2fpga_enable_set() or fpga_bridge_register() fail in |
| alt_fpga_bridge_probe(), the clock remains enabled and prepared. Also, |
| in the error path for _alt_hps2fpga_enable_set() a call to |
| fpga_bridge_unregister() is made even though the bridge was not |
| registered yet. |
| |
| Remove the unnecessary call to fpga_bridge_unregister() and call |
| clk_disable_unprepare() in both error paths in order to make sure the |
| clock gets properly disabled and unprepared. |
| |
| Signed-off-by: Tobias Klauser <tklauser@distanz.ch> |
| Acked-by: Moritz Fischer <mdf@kernel.org> |
| Signed-off-by: Alan Tull <atull@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/fpga/altera-hps2fpga.c | 15 +++++++++------ |
| 1 file changed, 9 insertions(+), 6 deletions(-) |
| |
| --- a/drivers/fpga/altera-hps2fpga.c |
| +++ b/drivers/fpga/altera-hps2fpga.c |
| @@ -181,15 +181,18 @@ static int alt_fpga_bridge_probe(struct |
| (enable ? "enabling" : "disabling")); |
| |
| ret = _alt_hps2fpga_enable_set(priv, enable); |
| - if (ret) { |
| - fpga_bridge_unregister(&pdev->dev); |
| - return ret; |
| - } |
| + if (ret) |
| + goto err; |
| } |
| } |
| |
| - return fpga_bridge_register(dev, priv->name, &altera_hps2fpga_br_ops, |
| - priv); |
| + ret = fpga_bridge_register(dev, priv->name, &altera_hps2fpga_br_ops, |
| + priv); |
| +err: |
| + if (ret) |
| + clk_disable_unprepare(priv->clk); |
| + |
| + return ret; |
| } |
| |
| static int alt_fpga_bridge_remove(struct platform_device *pdev) |