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/xilinx-spi.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/xilinx-spi.c')
-rw-r--r-- | drivers/fpga/xilinx-spi.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/fpga/xilinx-spi.c b/drivers/fpga/xilinx-spi.c index 9b62a4c2a3df..8d1945966533 100644 --- a/drivers/fpga/xilinx-spi.c +++ b/drivers/fpga/xilinx-spi.c | |||
@@ -143,6 +143,8 @@ static const struct fpga_manager_ops xilinx_spi_ops = { | |||
143 | static int xilinx_spi_probe(struct spi_device *spi) | 143 | static int xilinx_spi_probe(struct spi_device *spi) |
144 | { | 144 | { |
145 | struct xilinx_spi_conf *conf; | 145 | struct xilinx_spi_conf *conf; |
146 | struct fpga_manager *mgr; | ||
147 | int ret; | ||
146 | 148 | ||
147 | conf = devm_kzalloc(&spi->dev, sizeof(*conf), GFP_KERNEL); | 149 | conf = devm_kzalloc(&spi->dev, sizeof(*conf), GFP_KERNEL); |
148 | if (!conf) | 150 | if (!conf) |
@@ -165,13 +167,25 @@ static int xilinx_spi_probe(struct spi_device *spi) | |||
165 | return PTR_ERR(conf->done); | 167 | return PTR_ERR(conf->done); |
166 | } | 168 | } |
167 | 169 | ||
168 | return fpga_mgr_register(&spi->dev, "Xilinx Slave Serial FPGA Manager", | 170 | mgr = fpga_mgr_create(&spi->dev, "Xilinx Slave Serial FPGA Manager", |
169 | &xilinx_spi_ops, conf); | 171 | &xilinx_spi_ops, conf); |
172 | if (!mgr) | ||
173 | return -ENOMEM; | ||
174 | |||
175 | spi_set_drvdata(spi, mgr); | ||
176 | |||
177 | ret = fpga_mgr_register(mgr); | ||
178 | if (ret) | ||
179 | fpga_mgr_free(mgr); | ||
180 | |||
181 | return ret; | ||
170 | } | 182 | } |
171 | 183 | ||
172 | static int xilinx_spi_remove(struct spi_device *spi) | 184 | static int xilinx_spi_remove(struct spi_device *spi) |
173 | { | 185 | { |
174 | fpga_mgr_unregister(&spi->dev); | 186 | struct fpga_manager *mgr = spi_get_drvdata(spi); |
187 | |||
188 | fpga_mgr_unregister(mgr); | ||
175 | 189 | ||
176 | return 0; | 190 | return 0; |
177 | } | 191 | } |