@@ -127,10 +127,9 @@ struct pca955x_led {
127
127
struct pca955x * pca955x ;
128
128
struct led_classdev led_cdev ;
129
129
int led_num ; /* 0 .. 15 potentially */
130
- char name [32 ];
131
130
u32 type ;
132
131
int default_state ;
133
- const char * default_trigger ;
132
+ struct fwnode_handle * fwnode ;
134
133
};
135
134
136
135
struct pca955x_platform_data {
@@ -439,7 +438,6 @@ pca955x_get_pdata(struct i2c_client *client, struct pca955x_chipdef *chip)
439
438
return ERR_PTR (- ENOMEM );
440
439
441
440
device_for_each_child_node (& client -> dev , child ) {
442
- const char * name ;
443
441
const char * state ;
444
442
u32 reg ;
445
443
int res ;
@@ -448,17 +446,10 @@ pca955x_get_pdata(struct i2c_client *client, struct pca955x_chipdef *chip)
448
446
if ((res != 0 ) || (reg >= chip -> bits ))
449
447
continue ;
450
448
451
- res = fwnode_property_read_string (child , "label" , & name );
452
- if ((res != 0 ) && is_of_node (child ))
453
- name = to_of_node (child )-> name ;
454
-
455
449
led = & pdata -> leds [reg ];
456
- snprintf (led -> name , sizeof (led -> name ), "%s" , name );
457
-
458
450
led -> type = PCA955X_TYPE_LED ;
451
+ led -> fwnode = child ;
459
452
fwnode_property_read_u32 (child , "type" , & led -> type );
460
- fwnode_property_read_string (child , "linux,default-trigger" ,
461
- & led -> default_trigger );
462
453
463
454
if (!fwnode_property_read_string (child , "default-state" ,
464
455
& state )) {
@@ -495,11 +486,14 @@ static int pca955x_probe(struct i2c_client *client,
495
486
struct pca955x_led * pca955x_led ;
496
487
struct pca955x_chipdef * chip ;
497
488
struct led_classdev * led ;
489
+ struct led_init_data init_data ;
498
490
struct i2c_adapter * adapter ;
499
491
int i , err ;
500
492
struct pca955x_platform_data * pdata ;
501
493
int ngpios = 0 ;
494
+ bool set_default_label = false;
502
495
bool keep_pwm = false;
496
+ char default_label [8 ];
503
497
504
498
chip = & pca955x_chipdefs [id -> driver_data ];
505
499
adapter = client -> adapter ;
@@ -547,6 +541,9 @@ static int pca955x_probe(struct i2c_client *client,
547
541
pca955x -> client = client ;
548
542
pca955x -> chipdef = chip ;
549
543
544
+ init_data .devname_mandatory = false;
545
+ init_data .devicename = "pca955x" ;
546
+
550
547
for (i = 0 ; i < chip -> bits ; i ++ ) {
551
548
pca955x_led = & pca955x -> leds [i ];
552
549
pca955x_led -> led_num = i ;
@@ -560,23 +557,7 @@ static int pca955x_probe(struct i2c_client *client,
560
557
ngpios ++ ;
561
558
break ;
562
559
case PCA955X_TYPE_LED :
563
- /*
564
- * Platform data can specify LED names and
565
- * default triggers
566
- */
567
- if (pdata -> leds [i ].name [0 ] == '\0' )
568
- snprintf (pdata -> leds [i ].name ,
569
- sizeof (pdata -> leds [i ].name ), "%d" , i );
570
-
571
- snprintf (pca955x_led -> name , sizeof (pca955x_led -> name ),
572
- "pca955x:%s" , pdata -> leds [i ].name );
573
-
574
560
led = & pca955x_led -> led_cdev ;
575
- if (pdata -> leds [i ].default_trigger )
576
- led -> default_trigger =
577
- pdata -> leds [i ].default_trigger ;
578
-
579
- led -> name = pca955x_led -> name ;
580
561
led -> brightness_set_blocking = pca955x_led_set ;
581
562
led -> brightness_get = pca955x_led_get ;
582
563
@@ -592,7 +573,28 @@ static int pca955x_probe(struct i2c_client *client,
592
573
return err ;
593
574
}
594
575
595
- err = devm_led_classdev_register (& client -> dev , led );
576
+ init_data .fwnode = pdata -> leds [i ].fwnode ;
577
+
578
+ if (is_of_node (init_data .fwnode )) {
579
+ if (to_of_node (init_data .fwnode )-> name [0 ] ==
580
+ '\0' )
581
+ set_default_label = true;
582
+ else
583
+ set_default_label = false;
584
+ } else {
585
+ set_default_label = true;
586
+ }
587
+
588
+ if (set_default_label ) {
589
+ snprintf (default_label , sizeof (default_label ),
590
+ "%d" , i );
591
+ init_data .default_label = default_label ;
592
+ } else {
593
+ init_data .default_label = NULL ;
594
+ }
595
+
596
+ err = devm_led_classdev_register_ext (& client -> dev , led ,
597
+ & init_data );
596
598
if (err )
597
599
return err ;
598
600
0 commit comments