summaryrefslogtreecommitdiffstats
path: root/drivers/base/property.c
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2017-02-02 20:41:25 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2017-02-07 07:21:15 -0500
commitbec84da8d1da6677c458e6eedd8e814eea91b9fc (patch)
treec78b997b7d47c5040f67fdabb3770e5dc0057c63 /drivers/base/property.c
parentd5adbfcd5f7bcc6fa58a41c5c5ada0e5c826ce2c (diff)
device property: allow to constify properties
There is no reason why statically defined properties should be modifiable, so let's make device_add_properties() and the rest of pset_*() functions to take const pointers to properties. This will allow us to mark properties as const/__initconst at definition sites. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'drivers/base/property.c')
-rw-r--r--drivers/base/property.c41
1 files changed, 21 insertions, 20 deletions
diff --git a/drivers/base/property.c b/drivers/base/property.c
index 43a36d68c3fd..e9fa75645d69 100644
--- a/drivers/base/property.c
+++ b/drivers/base/property.c
@@ -21,7 +21,7 @@
21 21
22struct property_set { 22struct property_set {
23 struct fwnode_handle fwnode; 23 struct fwnode_handle fwnode;
24 struct property_entry *properties; 24 const struct property_entry *properties;
25}; 25};
26 26
27static inline bool is_pset_node(struct fwnode_handle *fwnode) 27static inline bool is_pset_node(struct fwnode_handle *fwnode)
@@ -35,10 +35,10 @@ static inline struct property_set *to_pset_node(struct fwnode_handle *fwnode)
35 container_of(fwnode, struct property_set, fwnode) : NULL; 35 container_of(fwnode, struct property_set, fwnode) : NULL;
36} 36}
37 37
38static struct property_entry *pset_prop_get(struct property_set *pset, 38static const struct property_entry *pset_prop_get(struct property_set *pset,
39 const char *name) 39 const char *name)
40{ 40{
41 struct property_entry *prop; 41 const struct property_entry *prop;
42 42
43 if (!pset || !pset->properties) 43 if (!pset || !pset->properties)
44 return NULL; 44 return NULL;
@@ -50,11 +50,11 @@ static struct property_entry *pset_prop_get(struct property_set *pset,
50 return NULL; 50 return NULL;
51} 51}
52 52
53static void *pset_prop_find(struct property_set *pset, const char *propname, 53static const void *pset_prop_find(struct property_set *pset,
54 size_t length) 54 const char *propname, size_t length)
55{ 55{
56 struct property_entry *prop; 56 const struct property_entry *prop;
57 void *pointer; 57 const void *pointer;
58 58
59 prop = pset_prop_get(pset, propname); 59 prop = pset_prop_get(pset, propname);
60 if (!prop) 60 if (!prop)
@@ -74,7 +74,7 @@ static int pset_prop_read_u8_array(struct property_set *pset,
74 const char *propname, 74 const char *propname,
75 u8 *values, size_t nval) 75 u8 *values, size_t nval)
76{ 76{
77 void *pointer; 77 const void *pointer;
78 size_t length = nval * sizeof(*values); 78 size_t length = nval * sizeof(*values);
79 79
80 pointer = pset_prop_find(pset, propname, length); 80 pointer = pset_prop_find(pset, propname, length);
@@ -89,7 +89,7 @@ static int pset_prop_read_u16_array(struct property_set *pset,
89 const char *propname, 89 const char *propname,
90 u16 *values, size_t nval) 90 u16 *values, size_t nval)
91{ 91{
92 void *pointer; 92 const void *pointer;
93 size_t length = nval * sizeof(*values); 93 size_t length = nval * sizeof(*values);
94 94
95 pointer = pset_prop_find(pset, propname, length); 95 pointer = pset_prop_find(pset, propname, length);
@@ -104,7 +104,7 @@ static int pset_prop_read_u32_array(struct property_set *pset,
104 const char *propname, 104 const char *propname,
105 u32 *values, size_t nval) 105 u32 *values, size_t nval)
106{ 106{
107 void *pointer; 107 const void *pointer;
108 size_t length = nval * sizeof(*values); 108 size_t length = nval * sizeof(*values);
109 109
110 pointer = pset_prop_find(pset, propname, length); 110 pointer = pset_prop_find(pset, propname, length);
@@ -119,7 +119,7 @@ static int pset_prop_read_u64_array(struct property_set *pset,
119 const char *propname, 119 const char *propname,
120 u64 *values, size_t nval) 120 u64 *values, size_t nval)
121{ 121{
122 void *pointer; 122 const void *pointer;
123 size_t length = nval * sizeof(*values); 123 size_t length = nval * sizeof(*values);
124 124
125 pointer = pset_prop_find(pset, propname, length); 125 pointer = pset_prop_find(pset, propname, length);
@@ -133,7 +133,7 @@ static int pset_prop_read_u64_array(struct property_set *pset,
133static int pset_prop_count_elems_of_size(struct property_set *pset, 133static int pset_prop_count_elems_of_size(struct property_set *pset,
134 const char *propname, size_t length) 134 const char *propname, size_t length)
135{ 135{
136 struct property_entry *prop; 136 const struct property_entry *prop;
137 137
138 prop = pset_prop_get(pset, propname); 138 prop = pset_prop_get(pset, propname);
139 if (!prop) 139 if (!prop)
@@ -146,7 +146,7 @@ static int pset_prop_read_string_array(struct property_set *pset,
146 const char *propname, 146 const char *propname,
147 const char **strings, size_t nval) 147 const char **strings, size_t nval)
148{ 148{
149 void *pointer; 149 const void *pointer;
150 size_t length = nval * sizeof(*strings); 150 size_t length = nval * sizeof(*strings);
151 151
152 pointer = pset_prop_find(pset, propname, length); 152 pointer = pset_prop_find(pset, propname, length);
@@ -160,8 +160,8 @@ static int pset_prop_read_string_array(struct property_set *pset,
160static int pset_prop_read_string(struct property_set *pset, 160static int pset_prop_read_string(struct property_set *pset,
161 const char *propname, const char **strings) 161 const char *propname, const char **strings)
162{ 162{
163 struct property_entry *prop; 163 const struct property_entry *prop;
164 const char **pointer; 164 const char * const *pointer;
165 165
166 prop = pset_prop_get(pset, propname); 166 prop = pset_prop_get(pset, propname);
167 if (!prop) 167 if (!prop)
@@ -776,7 +776,7 @@ static int pset_copy_entry(struct property_entry *dst,
776 */ 776 */
777static struct property_set *pset_copy_set(const struct property_set *pset) 777static struct property_set *pset_copy_set(const struct property_set *pset)
778{ 778{
779 const struct property_entry *entry; 779 struct property_entry *props;
780 struct property_set *p; 780 struct property_set *p;
781 size_t i, n = 0; 781 size_t i, n = 0;
782 782
@@ -787,14 +787,14 @@ static struct property_set *pset_copy_set(const struct property_set *pset)
787 while (pset->properties[n].name) 787 while (pset->properties[n].name)
788 n++; 788 n++;
789 789
790 p->properties = kcalloc(n + 1, sizeof(*entry), GFP_KERNEL); 790 p->properties = props = kcalloc(n + 1, sizeof(*props), GFP_KERNEL);
791 if (!p->properties) { 791 if (!p->properties) {
792 kfree(p); 792 kfree(p);
793 return ERR_PTR(-ENOMEM); 793 return ERR_PTR(-ENOMEM);
794 } 794 }
795 795
796 for (i = 0; i < n; i++) { 796 for (i = 0; i < n; i++) {
797 int ret = pset_copy_entry(&p->properties[i], 797 int ret = pset_copy_entry(&props[i],
798 &pset->properties[i]); 798 &pset->properties[i]);
799 if (ret) { 799 if (ret) {
800 pset_free_set(p); 800 pset_free_set(p);
@@ -847,7 +847,8 @@ EXPORT_SYMBOL_GPL(device_remove_properties);
847 * @dev as its secondary firmware node. The function takes a copy of 847 * @dev as its secondary firmware node. The function takes a copy of
848 * @properties. 848 * @properties.
849 */ 849 */
850int device_add_properties(struct device *dev, struct property_entry *properties) 850int device_add_properties(struct device *dev,
851 const struct property_entry *properties)
851{ 852{
852 struct property_set *p, pset; 853 struct property_set *p, pset;
853 854