@@ -24,11 +24,16 @@ enum ns2_led_modes {
24
24
NS_V2_LED_SATA ,
25
25
};
26
26
27
+ /*
28
+ * If the size of this structure or types of its members is changed,
29
+ * the filling of array modval in function ns2_led_register must be changed
30
+ * accordingly.
31
+ */
27
32
struct ns2_led_modval {
28
- enum ns2_led_modes mode ;
29
- int cmd_level ;
30
- int slow_level ;
31
- };
33
+ u32 mode ;
34
+ u32 cmd_level ;
35
+ u32 slow_level ;
36
+ } __packed ;
32
37
33
38
/*
34
39
* The Network Space v2 dual-GPIO LED is wired to a CPLD. Three different LED
@@ -167,27 +172,28 @@ static struct attribute *ns2_led_attrs[] = {
167
172
};
168
173
ATTRIBUTE_GROUPS (ns2_led );
169
174
170
- static int ns2_led_register (struct device * dev , struct device_node * np ,
175
+ static int ns2_led_register (struct device * dev , struct fwnode_handle * node ,
171
176
struct ns2_led * led )
172
177
{
173
178
struct led_init_data init_data = {};
174
179
struct ns2_led_modval * modval ;
175
180
enum ns2_led_modes mode ;
176
- int nmodes , ret , i ;
181
+ int nmodes , ret ;
177
182
178
- led -> cmd = devm_gpiod_get_from_of_node (dev , np , "cmd-gpio " , 0 ,
179
- GPIOD_ASIS , np -> name );
183
+ led -> cmd = devm_fwnode_gpiod_get_index (dev , node , "cmd" , 0 , GPIOD_ASIS ,
184
+ fwnode_get_name ( node ) );
180
185
if (IS_ERR (led -> cmd ))
181
186
return PTR_ERR (led -> cmd );
182
187
183
- led -> slow = devm_gpiod_get_from_of_node (dev , np , "slow-gpio" , 0 ,
184
- GPIOD_ASIS , np -> name );
188
+ led -> slow = devm_fwnode_gpiod_get_index (dev , node , "slow" , 0 ,
189
+ GPIOD_ASIS ,
190
+ fwnode_get_name (node ));
185
191
if (IS_ERR (led -> slow ))
186
192
return PTR_ERR (led -> slow );
187
193
188
- ret = of_property_count_u32_elems ( np , "modes-map" );
194
+ ret = fwnode_property_count_u32 ( node , "modes-map" );
189
195
if (ret < 0 || ret % 3 ) {
190
- dev_err (dev , "Missing or malformed modes-map for %pOF \n" , np );
196
+ dev_err (dev , "Missing or malformed modes-map for %pfw \n" , node );
191
197
return - EINVAL ;
192
198
}
193
199
@@ -196,16 +202,8 @@ static int ns2_led_register(struct device *dev, struct device_node *np,
196
202
if (!modval )
197
203
return - ENOMEM ;
198
204
199
- for (i = 0 ; i < nmodes ; i ++ ) {
200
- u32 val ;
201
-
202
- of_property_read_u32_index (np , "modes-map" , 3 * i , & val );
203
- modval [i ].mode = val ;
204
- of_property_read_u32_index (np , "modes-map" , 3 * i + 1 , & val );
205
- modval [i ].cmd_level = val ;
206
- of_property_read_u32_index (np , "modes-map" , 3 * i + 2 , & val );
207
- modval [i ].slow_level = val ;
208
- }
205
+ fwnode_property_read_u32_array (node , "modes-map" , (void * )modval ,
206
+ nmodes * 3 );
209
207
210
208
rwlock_init (& led -> rw_lock );
211
209
@@ -228,11 +226,11 @@ static int ns2_led_register(struct device *dev, struct device_node *np,
228
226
led -> sata = (mode == NS_V2_LED_SATA ) ? 1 : 0 ;
229
227
led -> cdev .brightness = (mode == NS_V2_LED_OFF ) ? LED_OFF : LED_FULL ;
230
228
231
- init_data .fwnode = of_fwnode_handle ( np ) ;
229
+ init_data .fwnode = node ;
232
230
233
231
ret = devm_led_classdev_register_ext (dev , & led -> cdev , & init_data );
234
232
if (ret )
235
- dev_err (dev , "Failed to register LED for node %pOF \n" , np );
233
+ dev_err (dev , "Failed to register LED for node %pfw \n" , node );
236
234
237
235
return ret ;
238
236
}
@@ -246,24 +244,23 @@ MODULE_DEVICE_TABLE(of, of_ns2_leds_match);
246
244
static int ns2_led_probe (struct platform_device * pdev )
247
245
{
248
246
struct device * dev = & pdev -> dev ;
249
- struct device_node * np , * child ;
247
+ struct fwnode_handle * child ;
250
248
struct ns2_led * leds ;
251
249
int count ;
252
250
int ret ;
253
251
254
- np = dev_of_node (dev );
255
- count = of_get_available_child_count (np );
252
+ count = device_get_child_node_count (dev );
256
253
if (!count )
257
254
return - ENODEV ;
258
255
259
256
leds = devm_kzalloc (dev , array_size (sizeof (* leds ), count ), GFP_KERNEL );
260
257
if (!leds )
261
258
return - ENOMEM ;
262
259
263
- for_each_available_child_of_node ( np , child ) {
260
+ device_for_each_child_node ( dev , child ) {
264
261
ret = ns2_led_register (dev , child , leds ++ );
265
262
if (ret ) {
266
- of_node_put (child );
263
+ fwnode_handle_put (child );
267
264
return ret ;
268
265
}
269
266
}
0 commit comments