fpga: manager: change api, don't use drvdata
[linux-2.6-block.git] / drivers / fpga / altera-cvp.c
index 77b04e4b32544a3fd7359537c1e0acbe3ccf0f84..dd4edd8f22ceebb67c4f6e1ab486c4ac9e9a1106 100644 (file)
@@ -401,6 +401,7 @@ static int altera_cvp_probe(struct pci_dev *pdev,
                            const struct pci_device_id *dev_id)
 {
        struct altera_cvp_conf *conf;
+       struct fpga_manager *mgr;
        u16 cmd, val;
        int ret;
 
@@ -452,16 +453,24 @@ static int altera_cvp_probe(struct pci_dev *pdev,
        snprintf(conf->mgr_name, sizeof(conf->mgr_name), "%s @%s",
                 ALTERA_CVP_MGR_NAME, pci_name(pdev));
 
-       ret = fpga_mgr_register(&pdev->dev, conf->mgr_name,
-                               &altera_cvp_ops, conf);
-       if (ret)
+       mgr = fpga_mgr_create(&pdev->dev, conf->mgr_name,
+                             &altera_cvp_ops, conf);
+       if (!mgr)
+               return -ENOMEM;
+
+       pci_set_drvdata(pdev, mgr);
+
+       ret = fpga_mgr_register(mgr);
+       if (ret) {
+               fpga_mgr_free(mgr);
                goto err_unmap;
+       }
 
        ret = driver_create_file(&altera_cvp_driver.driver,
                                 &driver_attr_chkcfg);
        if (ret) {
                dev_err(&pdev->dev, "Can't create sysfs chkcfg file\n");
-               fpga_mgr_unregister(&pdev->dev);
+               fpga_mgr_unregister(mgr);
                goto err_unmap;
        }
 
@@ -483,7 +492,7 @@ static void altera_cvp_remove(struct pci_dev *pdev)
        u16 cmd;
 
        driver_remove_file(&altera_cvp_driver.driver, &driver_attr_chkcfg);
-       fpga_mgr_unregister(&pdev->dev);
+       fpga_mgr_unregister(mgr);
        pci_iounmap(pdev, conf->map);
        pci_release_region(pdev, CVP_BAR);
        pci_read_config_word(pdev, PCI_COMMAND, &cmd);