diff options
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 | } |