aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/fpga/altera-ps-spi.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/fpga/altera-ps-spi.c')
-rw-r--r--drivers/fpga/altera-ps-spi.c20
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
280static int altera_ps_remove(struct spi_device *spi) 292static 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}