aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/fpga/xilinx-pr-decoupler.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/fpga/xilinx-pr-decoupler.c')
-rw-r--r--drivers/fpga/xilinx-pr-decoupler.c22
1 files changed, 17 insertions, 5 deletions
diff --git a/drivers/fpga/xilinx-pr-decoupler.c b/drivers/fpga/xilinx-pr-decoupler.c
index 0d7743089414..07ba1539e82c 100644
--- a/drivers/fpga/xilinx-pr-decoupler.c
+++ b/drivers/fpga/xilinx-pr-decoupler.c
@@ -94,6 +94,7 @@ MODULE_DEVICE_TABLE(of, xlnx_pr_decoupler_of_match);
94static int xlnx_pr_decoupler_probe(struct platform_device *pdev) 94static int xlnx_pr_decoupler_probe(struct platform_device *pdev)
95{ 95{
96 struct xlnx_pr_decoupler_data *priv; 96 struct xlnx_pr_decoupler_data *priv;
97 struct fpga_bridge *br;
97 int err; 98 int err;
98 struct resource *res; 99 struct resource *res;
99 100
@@ -120,16 +121,27 @@ static int xlnx_pr_decoupler_probe(struct platform_device *pdev)
120 121
121 clk_disable(priv->clk); 122 clk_disable(priv->clk);
122 123
123 err = fpga_bridge_register(&pdev->dev, "Xilinx PR Decoupler", 124 br = fpga_bridge_create(&pdev->dev, "Xilinx PR Decoupler",
124 &xlnx_pr_decoupler_br_ops, priv); 125 &xlnx_pr_decoupler_br_ops, priv);
126 if (!br) {
127 err = -ENOMEM;
128 goto err_clk;
129 }
130
131 platform_set_drvdata(pdev, br);
125 132
133 err = fpga_bridge_register(br);
126 if (err) { 134 if (err) {
127 dev_err(&pdev->dev, "unable to register Xilinx PR Decoupler"); 135 dev_err(&pdev->dev, "unable to register Xilinx PR Decoupler");
128 clk_unprepare(priv->clk); 136 goto err_clk;
129 return err;
130 } 137 }
131 138
132 return 0; 139 return 0;
140
141err_clk:
142 clk_unprepare(priv->clk);
143
144 return err;
133} 145}
134 146
135static int xlnx_pr_decoupler_remove(struct platform_device *pdev) 147static int xlnx_pr_decoupler_remove(struct platform_device *pdev)
@@ -137,7 +149,7 @@ static int xlnx_pr_decoupler_remove(struct platform_device *pdev)
137 struct fpga_bridge *bridge = platform_get_drvdata(pdev); 149 struct fpga_bridge *bridge = platform_get_drvdata(pdev);
138 struct xlnx_pr_decoupler_data *p = bridge->priv; 150 struct xlnx_pr_decoupler_data *p = bridge->priv;
139 151
140 fpga_bridge_unregister(&pdev->dev); 152 fpga_bridge_unregister(bridge);
141 153
142 clk_unprepare(p->clk); 154 clk_unprepare(p->clk);
143 155