fpga: manager: change api, don't use drvdata
[sfrench/cifs-2.6.git] / drivers / fpga / ice40-spi.c
index 7fca8202306245ae2707c514acc15c0a2307ae9f..5981c7ee7a7d4d1f6c583c74fcbf18288cf8039c 100644 (file)
@@ -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;
 }