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/ts73xx-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/ts73xx-fpga.c')
-rw-r--r-- | drivers/fpga/ts73xx-fpga.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/fpga/ts73xx-fpga.c b/drivers/fpga/ts73xx-fpga.c index f6a96b42e2ca..08efd1895b1b 100644 --- a/drivers/fpga/ts73xx-fpga.c +++ b/drivers/fpga/ts73xx-fpga.c | |||
@@ -116,7 +116,9 @@ static int ts73xx_fpga_probe(struct platform_device *pdev) | |||
116 | { | 116 | { |
117 | struct device *kdev = &pdev->dev; | 117 | struct device *kdev = &pdev->dev; |
118 | struct ts73xx_fpga_priv *priv; | 118 | struct ts73xx_fpga_priv *priv; |
119 | struct fpga_manager *mgr; | ||
119 | struct resource *res; | 120 | struct resource *res; |
121 | int ret; | ||
120 | 122 | ||
121 | priv = devm_kzalloc(kdev, sizeof(*priv), GFP_KERNEL); | 123 | priv = devm_kzalloc(kdev, sizeof(*priv), GFP_KERNEL); |
122 | if (!priv) | 124 | if (!priv) |
@@ -131,13 +133,25 @@ static int ts73xx_fpga_probe(struct platform_device *pdev) | |||
131 | return PTR_ERR(priv->io_base); | 133 | return PTR_ERR(priv->io_base); |
132 | } | 134 | } |
133 | 135 | ||
134 | return fpga_mgr_register(kdev, "TS-73xx FPGA Manager", | 136 | mgr = fpga_mgr_create(kdev, "TS-73xx FPGA Manager", |
135 | &ts73xx_fpga_ops, priv); | 137 | &ts73xx_fpga_ops, priv); |
138 | if (!mgr) | ||
139 | return -ENOMEM; | ||
140 | |||
141 | platform_set_drvdata(pdev, mgr); | ||
142 | |||
143 | ret = fpga_mgr_register(mgr); | ||
144 | if (ret) | ||
145 | fpga_mgr_free(mgr); | ||
146 | |||
147 | return ret; | ||
136 | } | 148 | } |
137 | 149 | ||
138 | static int ts73xx_fpga_remove(struct platform_device *pdev) | 150 | static int ts73xx_fpga_remove(struct platform_device *pdev) |
139 | { | 151 | { |
140 | fpga_mgr_unregister(&pdev->dev); | 152 | struct fpga_manager *mgr = platform_get_drvdata(pdev); |
153 | |||
154 | fpga_mgr_unregister(mgr); | ||
141 | 155 | ||
142 | return 0; | 156 | return 0; |
143 | } | 157 | } |