1
2#ifndef _LINUX_RESET_CONTROLLER_H_
3#define _LINUX_RESET_CONTROLLER_H_
4
5#include <linux/list.h>
6
7struct reset_controller_dev;
8
9
10
11
12
13
14
15
16
17
18struct 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
25struct module;
26struct device_node;
27struct of_phandle_args;
28
29
30
31
32
33
34
35
36
37
38struct 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
56
57
58
59
60
61
62
63
64
65
66
67
68struct 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
81int reset_controller_register(struct reset_controller_dev *rcdev);
82void reset_controller_unregister(struct reset_controller_dev *rcdev);
83
84struct device;
85int devm_reset_controller_register(struct device *dev,
86 struct reset_controller_dev *rcdev);
87
88void reset_controller_add_lookup(struct reset_control_lookup *lookup,
89 unsigned int num_entries);
90
91#endif
92