diff options
Diffstat (limited to 'drivers/fpga/altera-pr-ip-core.c')
| -rw-r--r-- | drivers/fpga/altera-pr-ip-core.c | 31 | 
1 files changed, 17 insertions, 14 deletions
diff --git a/drivers/fpga/altera-pr-ip-core.c b/drivers/fpga/altera-pr-ip-core.c index a7b31f9797ce..65e0b6a2c031 100644 --- a/drivers/fpga/altera-pr-ip-core.c +++ b/drivers/fpga/altera-pr-ip-core.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  /*   * Driver for Altera Partial Reconfiguration IP Core   * @@ -5,18 +6,6 @@   *   * Based on socfpga-a10.c Copyright (C) 2015-2016 Altera Corporation   *  by Alan Tull <[email protected]> - * - * This program is free software; you can redistribute it and/or modify it - * under the terms and conditions of the GNU General Public License, - * version 2, as published by the Free Software Foundation. - * - * This program is distributed in the hope it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along with - * this program.  If not, see <http://www.gnu.org/licenses/>.   */  #include <linux/delay.h>  #include <linux/fpga/altera-pr-ip-core.h> @@ -187,6 +176,8 @@ static const struct fpga_manager_ops alt_pr_ops = {  int alt_pr_register(struct device *dev, void __iomem *reg_base)  {  	struct alt_pr_priv *priv; +	struct fpga_manager *mgr; +	int ret;  	u32 val;  	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); @@ -201,15 +192,27 @@ int alt_pr_register(struct device *dev, void __iomem *reg_base)  		(val & ALT_PR_CSR_STATUS_MSK) >> ALT_PR_CSR_STATUS_SFT,  		(int)(val & ALT_PR_CSR_PR_START)); -	return fpga_mgr_register(dev, dev_name(dev), &alt_pr_ops, priv); +	mgr = fpga_mgr_create(dev, dev_name(dev), &alt_pr_ops, priv); +	if (!mgr) +		return -ENOMEM; + +	dev_set_drvdata(dev, mgr); + +	ret = fpga_mgr_register(mgr); +	if (ret) +		fpga_mgr_free(mgr); + +	return ret;  }  EXPORT_SYMBOL_GPL(alt_pr_register);  int alt_pr_unregister(struct device *dev)  { +	struct fpga_manager *mgr = dev_get_drvdata(dev); +  	dev_dbg(dev, "%s\n", __func__); -	fpga_mgr_unregister(dev); +	fpga_mgr_unregister(mgr);  	return 0;  }  |