diff options
Diffstat (limited to 'drivers/fpga/altera-ps-spi.c')
-rw-r--r-- | drivers/fpga/altera-ps-spi.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/fpga/altera-ps-spi.c b/drivers/fpga/altera-ps-spi.c index 06d212a3d49d..24b25c626036 100644 --- a/drivers/fpga/altera-ps-spi.c +++ b/drivers/fpga/altera-ps-spi.c | |||
@@ -238,6 +238,8 @@ static int altera_ps_probe(struct spi_device *spi) | |||
238 | { | 238 | { |
239 | struct altera_ps_conf *conf; | 239 | struct altera_ps_conf *conf; |
240 | const struct of_device_id *of_id; | 240 | const struct of_device_id *of_id; |
241 | struct fpga_manager *mgr; | ||
242 | int ret; | ||
241 | 243 | ||
242 | conf = devm_kzalloc(&spi->dev, sizeof(*conf), GFP_KERNEL); | 244 | conf = devm_kzalloc(&spi->dev, sizeof(*conf), GFP_KERNEL); |
243 | if (!conf) | 245 | if (!conf) |
@@ -273,13 +275,25 @@ static int altera_ps_probe(struct spi_device *spi) | |||
273 | snprintf(conf->mgr_name, sizeof(conf->mgr_name), "%s %s", | 275 | snprintf(conf->mgr_name, sizeof(conf->mgr_name), "%s %s", |
274 | dev_driver_string(&spi->dev), dev_name(&spi->dev)); | 276 | dev_driver_string(&spi->dev), dev_name(&spi->dev)); |
275 | 277 | ||
276 | return fpga_mgr_register(&spi->dev, conf->mgr_name, | 278 | mgr = fpga_mgr_create(&spi->dev, conf->mgr_name, |
277 | &altera_ps_ops, conf); | 279 | &altera_ps_ops, conf); |
280 | if (!mgr) | ||
281 | return -ENOMEM; | ||
282 | |||
283 | spi_set_drvdata(spi, mgr); | ||
284 | |||
285 | ret = fpga_mgr_register(mgr); | ||
286 | if (ret) | ||
287 | fpga_mgr_free(mgr); | ||
288 | |||
289 | return ret; | ||
278 | } | 290 | } |
279 | 291 | ||
280 | static int altera_ps_remove(struct spi_device *spi) | 292 | static int altera_ps_remove(struct spi_device *spi) |
281 | { | 293 | { |
282 | fpga_mgr_unregister(&spi->dev); | 294 | struct fpga_manager *mgr = spi_get_drvdata(spi); |
295 | |||
296 | fpga_mgr_unregister(mgr); | ||
283 | 297 | ||
284 | return 0; | 298 | return 0; |
285 | } | 299 | } |