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/machxo2-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/machxo2-spi.c')
-rw-r--r-- | drivers/fpga/machxo2-spi.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/fpga/machxo2-spi.c b/drivers/fpga/machxo2-spi.c index 8e95ec9c5c9a..a582e0000c97 100644 --- a/drivers/fpga/machxo2-spi.c +++ b/drivers/fpga/machxo2-spi.c | |||
@@ -355,21 +355,33 @@ static const struct fpga_manager_ops machxo2_ops = { | |||
355 | static int machxo2_spi_probe(struct spi_device *spi) | 355 | static int machxo2_spi_probe(struct spi_device *spi) |
356 | { | 356 | { |
357 | struct device *dev = &spi->dev; | 357 | struct device *dev = &spi->dev; |
358 | struct fpga_manager *mgr; | ||
359 | int ret; | ||
358 | 360 | ||
359 | if (spi->max_speed_hz > MACHXO2_MAX_SPEED) { | 361 | if (spi->max_speed_hz > MACHXO2_MAX_SPEED) { |
360 | dev_err(dev, "Speed is too high\n"); | 362 | dev_err(dev, "Speed is too high\n"); |
361 | return -EINVAL; | 363 | return -EINVAL; |
362 | } | 364 | } |
363 | 365 | ||
364 | return fpga_mgr_register(dev, "Lattice MachXO2 SPI FPGA Manager", | 366 | mgr = fpga_mgr_create(dev, "Lattice MachXO2 SPI FPGA Manager", |
365 | &machxo2_ops, spi); | 367 | &machxo2_ops, spi); |
368 | if (!mgr) | ||
369 | return -ENOMEM; | ||
370 | |||
371 | spi_set_drvdata(spi, mgr); | ||
372 | |||
373 | ret = fpga_mgr_register(mgr); | ||
374 | if (ret) | ||
375 | fpga_mgr_free(mgr); | ||
376 | |||
377 | return ret; | ||
366 | } | 378 | } |
367 | 379 | ||
368 | static int machxo2_spi_remove(struct spi_device *spi) | 380 | static int machxo2_spi_remove(struct spi_device *spi) |
369 | { | 381 | { |
370 | struct device *dev = &spi->dev; | 382 | struct fpga_manager *mgr = spi_get_drvdata(spi); |
371 | 383 | ||
372 | fpga_mgr_unregister(dev); | 384 | fpga_mgr_unregister(mgr); |
373 | 385 | ||
374 | return 0; | 386 | return 0; |
375 | } | 387 | } |