diff options
author | Alan Tull <atull@kernel.org> | 2018-05-16 19:49:55 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-05-25 12:23:55 -0400 |
commit | 7085e2a94f7df5f419e3cfb2fe809ce6564e9629 (patch) | |
tree | b0609f2d091aae39e00609357d5e6de678887bef /drivers/fpga/zynq-fpga.c | |
parent | bbaa9cd3a605e337cefc566e5ac1b110763c8d1c (diff) |
fpga: manager: change api, don't use drvdata
Change fpga_mgr_register to not set or use drvdata. This supports
the case where a PCIe device has more than one manager.
Add fpga_mgr_create/free functions. Change fpga_mgr_register and
fpga_mgr_unregister functions to take the mgr struct as their only
parameter.
struct fpga_manager *fpga_mgr_create(struct device *dev,
const char *name,
const struct fpga_manager_ops *mops,
void *priv);
void fpga_mgr_free(struct fpga_manager *mgr);
int fpga_mgr_register(struct fpga_manager *mgr);
void fpga_mgr_unregister(struct fpga_manager *mgr);
Update the drivers that call fpga_mgr_register with the new API.
Signed-off-by: Alan Tull <atull@kernel.org>
[Moritz: Fixup whitespace issue]
Reported-by: Jiuyue Ma <majiuyue@huawei.com>
Signed-off-by: Moritz Fischer <mdf@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/fpga/zynq-fpga.c')
-rw-r--r-- | drivers/fpga/zynq-fpga.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/fpga/zynq-fpga.c b/drivers/fpga/zynq-fpga.c index 70b15b303471..3110e00121ca 100644 --- a/drivers/fpga/zynq-fpga.c +++ b/drivers/fpga/zynq-fpga.c | |||
@@ -558,6 +558,7 @@ static int zynq_fpga_probe(struct platform_device *pdev) | |||
558 | { | 558 | { |
559 | struct device *dev = &pdev->dev; | 559 | struct device *dev = &pdev->dev; |
560 | struct zynq_fpga_priv *priv; | 560 | struct zynq_fpga_priv *priv; |
561 | struct fpga_manager *mgr; | ||
561 | struct resource *res; | 562 | struct resource *res; |
562 | int err; | 563 | int err; |
563 | 564 | ||
@@ -613,10 +614,17 @@ static int zynq_fpga_probe(struct platform_device *pdev) | |||
613 | 614 | ||
614 | clk_disable(priv->clk); | 615 | clk_disable(priv->clk); |
615 | 616 | ||
616 | err = fpga_mgr_register(dev, "Xilinx Zynq FPGA Manager", | 617 | mgr = fpga_mgr_create(dev, "Xilinx Zynq FPGA Manager", |
617 | &zynq_fpga_ops, priv); | 618 | &zynq_fpga_ops, priv); |
619 | if (!mgr) | ||
620 | return -ENOMEM; | ||
621 | |||
622 | platform_set_drvdata(pdev, mgr); | ||
623 | |||
624 | err = fpga_mgr_register(mgr); | ||
618 | if (err) { | 625 | if (err) { |
619 | dev_err(dev, "unable to register FPGA manager\n"); | 626 | dev_err(dev, "unable to register FPGA manager\n"); |
627 | fpga_mgr_free(mgr); | ||
620 | clk_unprepare(priv->clk); | 628 | clk_unprepare(priv->clk); |
621 | return err; | 629 | return err; |
622 | } | 630 | } |
@@ -632,7 +640,7 @@ static int zynq_fpga_remove(struct platform_device *pdev) | |||
632 | mgr = platform_get_drvdata(pdev); | 640 | mgr = platform_get_drvdata(pdev); |
633 | priv = mgr->priv; | 641 | priv = mgr->priv; |
634 | 642 | ||
635 | fpga_mgr_unregister(&pdev->dev); | 643 | fpga_mgr_unregister(mgr); |
636 | 644 | ||
637 | clk_unprepare(priv->clk); | 645 | clk_unprepare(priv->clk); |
638 | 646 | ||