diff options
Diffstat (limited to 'drivers/fpga/ice40-spi.c')
| -rw-r--r-- | drivers/fpga/ice40-spi.c | 21 | 
1 files changed, 17 insertions, 4 deletions
diff --git a/drivers/fpga/ice40-spi.c b/drivers/fpga/ice40-spi.c index 7fca82023062..5981c7ee7a7d 100644 --- a/drivers/fpga/ice40-spi.c +++ b/drivers/fpga/ice40-spi.c @@ -133,6 +133,7 @@ static int ice40_fpga_probe(struct spi_device *spi)  {  	struct device *dev = &spi->dev;  	struct ice40_fpga_priv *priv; +	struct fpga_manager *mgr;  	int ret;  	priv = devm_kzalloc(&spi->dev, sizeof(*priv), GFP_KERNEL); @@ -174,14 +175,26 @@ static int ice40_fpga_probe(struct spi_device *spi)  		return ret;  	} -	/* Register with the FPGA manager */ -	return fpga_mgr_register(dev, "Lattice iCE40 FPGA Manager", -				 &ice40_fpga_ops, priv); +	mgr = fpga_mgr_create(dev, "Lattice iCE40 FPGA Manager", +			      &ice40_fpga_ops, priv); +	if (!mgr) +		return -ENOMEM; + +	spi_set_drvdata(spi, mgr); + +	ret = fpga_mgr_register(mgr); +	if (ret) +		fpga_mgr_free(mgr); + +	return ret;  }  static int ice40_fpga_remove(struct spi_device *spi)  { -	fpga_mgr_unregister(&spi->dev); +	struct fpga_manager *mgr = spi_get_drvdata(spi); + +	fpga_mgr_unregister(mgr); +  	return 0;  }  |