diff options
Diffstat (limited to 'drivers/fpga/socfpga-a10.c')
-rw-r--r-- | drivers/fpga/socfpga-a10.c | 28 |
1 files changed, 12 insertions, 16 deletions
diff --git a/drivers/fpga/socfpga-a10.c b/drivers/fpga/socfpga-a10.c index a46e343a5b72..be30c48eb6e4 100644 --- a/drivers/fpga/socfpga-a10.c +++ b/drivers/fpga/socfpga-a10.c | |||
@@ -1,21 +1,9 @@ | |||
1 | // SPDX-License-Identifier: GPL-2.0 | ||
1 | /* | 2 | /* |
2 | * FPGA Manager Driver for Altera Arria10 SoCFPGA | 3 | * FPGA Manager Driver for Altera Arria10 SoCFPGA |
3 | * | 4 | * |
4 | * Copyright (C) 2015-2016 Altera Corporation | 5 | * Copyright (C) 2015-2016 Altera Corporation |
5 | * | ||
6 | * This program is free software; you can redistribute it and/or modify it | ||
7 | * under the terms and conditions of the GNU General Public License, | ||
8 | * version 2, as published by the Free Software Foundation. | ||
9 | * | ||
10 | * This program is distributed in the hope it will be useful, but WITHOUT | ||
11 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | ||
12 | * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | ||
13 | * more details. | ||
14 | * | ||
15 | * You should have received a copy of the GNU General Public License along with | ||
16 | * this program. If not, see <http://www.gnu.org/licenses/>. | ||
17 | */ | 6 | */ |
18 | |||
19 | #include <linux/clk.h> | 7 | #include <linux/clk.h> |
20 | #include <linux/device.h> | 8 | #include <linux/device.h> |
21 | #include <linux/delay.h> | 9 | #include <linux/delay.h> |
@@ -482,6 +470,7 @@ static int socfpga_a10_fpga_probe(struct platform_device *pdev) | |||
482 | struct device *dev = &pdev->dev; | 470 | struct device *dev = &pdev->dev; |
483 | struct a10_fpga_priv *priv; | 471 | struct a10_fpga_priv *priv; |
484 | void __iomem *reg_base; | 472 | void __iomem *reg_base; |
473 | struct fpga_manager *mgr; | ||
485 | struct resource *res; | 474 | struct resource *res; |
486 | int ret; | 475 | int ret; |
487 | 476 | ||
@@ -519,9 +508,16 @@ static int socfpga_a10_fpga_probe(struct platform_device *pdev) | |||
519 | return -EBUSY; | 508 | return -EBUSY; |
520 | } | 509 | } |
521 | 510 | ||
522 | ret = fpga_mgr_register(dev, "SoCFPGA Arria10 FPGA Manager", | 511 | mgr = fpga_mgr_create(dev, "SoCFPGA Arria10 FPGA Manager", |
523 | &socfpga_a10_fpga_mgr_ops, priv); | 512 | &socfpga_a10_fpga_mgr_ops, priv); |
513 | if (!mgr) | ||
514 | return -ENOMEM; | ||
515 | |||
516 | platform_set_drvdata(pdev, mgr); | ||
517 | |||
518 | ret = fpga_mgr_register(mgr); | ||
524 | if (ret) { | 519 | if (ret) { |
520 | fpga_mgr_free(mgr); | ||
525 | clk_disable_unprepare(priv->clk); | 521 | clk_disable_unprepare(priv->clk); |
526 | return ret; | 522 | return ret; |
527 | } | 523 | } |
@@ -534,7 +530,7 @@ static int socfpga_a10_fpga_remove(struct platform_device *pdev) | |||
534 | struct fpga_manager *mgr = platform_get_drvdata(pdev); | 530 | struct fpga_manager *mgr = platform_get_drvdata(pdev); |
535 | struct a10_fpga_priv *priv = mgr->priv; | 531 | struct a10_fpga_priv *priv = mgr->priv; |
536 | 532 | ||
537 | fpga_mgr_unregister(&pdev->dev); | 533 | fpga_mgr_unregister(mgr); |
538 | clk_disable_unprepare(priv->clk); | 534 | clk_disable_unprepare(priv->clk); |
539 | 535 | ||
540 | return 0; | 536 | return 0; |