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)  {  	struct altera_ps_conf *conf;  	const struct of_device_id *of_id; +	struct fpga_manager *mgr; +	int ret;  	conf = devm_kzalloc(&spi->dev, sizeof(*conf), GFP_KERNEL);  	if (!conf) @@ -273,13 +275,25 @@ static int altera_ps_probe(struct spi_device *spi)  	snprintf(conf->mgr_name, sizeof(conf->mgr_name), "%s %s",  		 dev_driver_string(&spi->dev), dev_name(&spi->dev)); -	return fpga_mgr_register(&spi->dev, conf->mgr_name, -				 &altera_ps_ops, conf); +	mgr = fpga_mgr_create(&spi->dev, conf->mgr_name, +			      &altera_ps_ops, conf); +	if (!mgr) +		return -ENOMEM; + +	spi_set_drvdata(spi, mgr); + +	ret = fpga_mgr_register(mgr); +	if (ret) +		fpga_mgr_free(mgr); + +	return ret;  }  static int altera_ps_remove(struct spi_device *spi)  { -	fpga_mgr_unregister(&spi->dev); +	struct fpga_manager *mgr = spi_get_drvdata(spi); + +	fpga_mgr_unregister(mgr);  	return 0;  }  | 
