aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/fpga/xilinx-spi.c
diff options
context:
space:
mode:
authorAlan Tull <atull@kernel.org>2018-05-16 19:49:55 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-05-25 12:23:55 -0400
commit7085e2a94f7df5f419e3cfb2fe809ce6564e9629 (patch)
treeb0609f2d091aae39e00609357d5e6de678887bef /drivers/fpga/xilinx-spi.c
parentbbaa9cd3a605e337cefc566e5ac1b110763c8d1c (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.c20
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 = {
143static int xilinx_spi_probe(struct spi_device *spi) 143static 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
172static int xilinx_spi_remove(struct spi_device *spi) 184static 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}