root/include/linux/reset-controller.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef _LINUX_RESET_CONTROLLER_H_
   3 #define _LINUX_RESET_CONTROLLER_H_
   4 
   5 #include <linux/list.h>
   6 
   7 struct reset_controller_dev;
   8 
   9 /**
  10  * struct reset_control_ops - reset controller driver callbacks
  11  *
  12  * @reset: for self-deasserting resets, does all necessary
  13  *         things to reset the device
  14  * @assert: manually assert the reset line, if supported
  15  * @deassert: manually deassert the reset line, if supported
  16  * @status: return the status of the reset line, if supported
  17  */
  18 struct reset_control_ops {
  19         int (*reset)(struct reset_controller_dev *rcdev, unsigned long id);
  20         int (*assert)(struct reset_controller_dev *rcdev, unsigned long id);
  21         int (*deassert)(struct reset_controller_dev *rcdev, unsigned long id);
  22         int (*status)(struct reset_controller_dev *rcdev, unsigned long id);
  23 };
  24 
  25 struct module;
  26 struct device_node;
  27 struct of_phandle_args;
  28 
  29 /**
  30  * struct reset_control_lookup - represents a single lookup entry
  31  *
  32  * @list: internal list of all reset lookup entries
  33  * @provider: name of the reset controller device controlling this reset line
  34  * @index: ID of the reset controller in the reset controller device
  35  * @dev_id: name of the device associated with this reset line
  36  * @con_id: name of the reset line (can be NULL)
  37  */
  38 struct reset_control_lookup {
  39         struct list_head list;
  40         const char *provider;
  41         unsigned int index;
  42         const char *dev_id;
  43         const char *con_id;
  44 };
  45 
  46 #define RESET_LOOKUP(_provider, _index, _dev_id, _con_id)               \
  47         {                                                               \
  48                 .provider = _provider,                                  \
  49                 .index = _index,                                        \
  50                 .dev_id = _dev_id,                                      \
  51                 .con_id = _con_id,                                      \
  52         }
  53 
  54 /**
  55  * struct reset_controller_dev - reset controller entity that might
  56  *                               provide multiple reset controls
  57  * @ops: a pointer to device specific struct reset_control_ops
  58  * @owner: kernel module of the reset controller driver
  59  * @list: internal list of reset controller devices
  60  * @reset_control_head: head of internal list of requested reset controls
  61  * @dev: corresponding driver model device struct
  62  * @of_node: corresponding device tree node as phandle target
  63  * @of_reset_n_cells: number of cells in reset line specifiers
  64  * @of_xlate: translation function to translate from specifier as found in the
  65  *            device tree to id as given to the reset control ops
  66  * @nr_resets: number of reset controls in this reset controller device
  67  */
  68 struct reset_controller_dev {
  69         const struct reset_control_ops *ops;
  70         struct module *owner;
  71         struct list_head list;
  72         struct list_head reset_control_head;
  73         struct device *dev;
  74         struct device_node *of_node;
  75         int of_reset_n_cells;
  76         int (*of_xlate)(struct reset_controller_dev *rcdev,
  77                         const struct of_phandle_args *reset_spec);
  78         unsigned int nr_resets;
  79 };
  80 
  81 int reset_controller_register(struct reset_controller_dev *rcdev);
  82 void reset_controller_unregister(struct reset_controller_dev *rcdev);
  83 
  84 struct device;
  85 int devm_reset_controller_register(struct device *dev,
  86                                    struct reset_controller_dev *rcdev);
  87 
  88 void reset_controller_add_lookup(struct reset_control_lookup *lookup,
  89                                  unsigned int num_entries);
  90 
  91 #endif

/* [<][>][^][v][top][bottom][index][help] */