diff options
Diffstat (limited to 'Documentation/driver-api/fpga/fpga-mgr.rst')
| -rw-r--r-- | Documentation/driver-api/fpga/fpga-mgr.rst | 38 | 
1 files changed, 29 insertions, 9 deletions
| diff --git a/Documentation/driver-api/fpga/fpga-mgr.rst b/Documentation/driver-api/fpga/fpga-mgr.rst index 4d926b452cb3..42c01f396dce 100644 --- a/Documentation/driver-api/fpga/fpga-mgr.rst +++ b/Documentation/driver-api/fpga/fpga-mgr.rst @@ -24,7 +24,7 @@ How to support a new FPGA device  --------------------------------  To add another FPGA manager, write a driver that implements a set of ops.  The -probe function calls fpga_mgr_register(), such as:: +probe function calls fpga_mgr_register() or fpga_mgr_register_full(), such as::  	static const struct fpga_manager_ops socfpga_fpga_ops = {  		.write_init = socfpga_fpga_ops_configure_init, @@ -49,14 +49,14 @@ probe function calls fpga_mgr_register(), such as::  		 * them in priv  		 */ -		mgr = devm_fpga_mgr_create(dev, "Altera SOCFPGA FPGA Manager", -					   &socfpga_fpga_ops, priv); -		if (!mgr) -			return -ENOMEM; +		mgr = fpga_mgr_register(dev, "Altera SOCFPGA FPGA Manager", +					&socfpga_fpga_ops, priv); +		if (IS_ERR(mgr)) +			return PTR_ERR(mgr);  		platform_set_drvdata(pdev, mgr); -		return fpga_mgr_register(mgr); +		return 0;  	}  	static int socfpga_fpga_remove(struct platform_device *pdev) @@ -68,6 +68,11 @@ probe function calls fpga_mgr_register(), such as::  		return 0;  	} +Alternatively, the probe function could call one of the resource managed +register functions, devm_fpga_mgr_register() or devm_fpga_mgr_register_full(). +When these functions are used, the parameter syntax is the same, but the call +to fpga_mgr_unregister() should be removed. In the above example, the +socfpga_fpga_remove() function would not be required.  The ops will implement whatever device specific register writes are needed to  do the programming sequence for this particular FPGA.  These ops return 0 for @@ -104,8 +109,14 @@ API for implementing a new FPGA Manager driver  * ``fpga_mgr_states`` -  Values for :c:expr:`fpga_manager->state`.  * struct fpga_manager -  the FPGA manager struct  * struct fpga_manager_ops -  Low level FPGA manager driver ops -* devm_fpga_mgr_create() -  Allocate and init a manager struct -* fpga_mgr_register() -  Register an FPGA manager +* struct fpga_manager_info -  Parameter structure for fpga_mgr_register_full() +* fpga_mgr_register_full() -  Create and register an FPGA manager using the +  fpga_mgr_info structure to provide the full flexibility of options +* fpga_mgr_register() -  Create and register an FPGA manager using standard +  arguments +* devm_fpga_mgr_register_full() -  Resource managed version of +  fpga_mgr_register_full() +* devm_fpga_mgr_register() -  Resource managed version of fpga_mgr_register()  * fpga_mgr_unregister() -  Unregister an FPGA manager  .. kernel-doc:: include/linux/fpga/fpga-mgr.h @@ -117,11 +128,20 @@ API for implementing a new FPGA Manager driver  .. kernel-doc:: include/linux/fpga/fpga-mgr.h     :functions: fpga_manager_ops +.. kernel-doc:: include/linux/fpga/fpga-mgr.h +   :functions: fpga_manager_info +  .. kernel-doc:: drivers/fpga/fpga-mgr.c -   :functions: devm_fpga_mgr_create +   :functions: fpga_mgr_register_full  .. kernel-doc:: drivers/fpga/fpga-mgr.c     :functions: fpga_mgr_register  .. kernel-doc:: drivers/fpga/fpga-mgr.c +   :functions: devm_fpga_mgr_register_full + +.. kernel-doc:: drivers/fpga/fpga-mgr.c +   :functions: devm_fpga_mgr_register + +.. kernel-doc:: drivers/fpga/fpga-mgr.c     :functions: fpga_mgr_unregister |