@@ -508,6 +508,10 @@ static int ayn_platform_write(struct device *dev, enum hwmon_sensor_types type,
508
508
}
509
509
510
510
/* RGB LED Logic */
511
+ static int led_mode_write (int mode ) {
512
+ return write_to_ec (AYN_LED_MODE_REG , mode );
513
+ };
514
+
511
515
static ssize_t led_mode_store (struct device * dev , struct device_attribute * attr ,
512
516
const char * buf , size_t count ) {
513
517
int val ;
@@ -524,7 +528,7 @@ static ssize_t led_mode_store(struct device *dev, struct device_attribute *attr,
524
528
mode = AYN_LED_MODE_BREATH ;
525
529
}
526
530
527
- retval = write_to_ec ( AYN_LED_MODE_REG , mode );
531
+ retval = led_mode_write ( mode );
528
532
if (retval )
529
533
return retval ;
530
534
@@ -556,18 +560,33 @@ static ssize_t led_mode_show(struct device *dev, struct device_attribute *attr,
556
560
557
561
static DEVICE_ATTR_RW (led_mode );
558
562
563
+ static int ayn_led_mc_brightness_write (struct led_classdev * led_cdev ,
564
+ enum led_brightness brightness ) {
565
+
566
+ struct led_classdev_mc * mc_cdev = lcdev_to_mccdev (led_cdev );
567
+ struct mc_subled s_led ;
568
+ int i ;
569
+ int retval ;
570
+ int val ;
571
+
572
+ for (i = 0 ; i < mc_cdev -> num_colors ; i ++ ) {
573
+ s_led = mc_cdev -> subled_info [i ];
574
+ val = brightness * s_led .intensity / led_cdev -> max_brightness ;
575
+ retval = write_to_ec (s_led .channel , val );
576
+ if (retval )
577
+ return retval ;
578
+ }
579
+
580
+ return write_to_ec (AYN_LED_MODE_REG , AYN_LED_MODE_WRITE );
581
+
582
+ };
583
+
559
584
static void ayn_led_mc_brightness_set (struct led_classdev * led_cdev ,
560
585
enum led_brightness brightness ) {
561
- struct led_classdev_mc * mc_cdev = lcdev_to_mccdev (led_cdev );
562
586
long mode ;
563
587
int retval ;
564
- int val ;
565
- int i ;
566
- struct mc_subled s_led ;
567
588
568
- led_cdev -> brightness = brightness ;
569
589
retval = read_from_ec (AYN_LED_MODE_REG , 1 , & mode );
570
-
571
590
if (retval )
572
591
return ;
573
592
@@ -579,13 +598,8 @@ static void ayn_led_mc_brightness_set(struct led_classdev *led_cdev,
579
598
return ;
580
599
}
581
600
582
- for (i = 0 ; i < mc_cdev -> num_colors ; i ++ ) {
583
- s_led = mc_cdev -> subled_info [i ];
584
- val = brightness * s_led .intensity / led_cdev -> max_brightness ;
585
- write_to_ec (s_led .channel , val );
586
- }
587
-
588
- retval = write_to_ec (AYN_LED_MODE_REG , AYN_LED_MODE_WRITE );
601
+ led_cdev -> brightness = brightness ;
602
+ ayn_led_mc_brightness_write (led_cdev , brightness );
589
603
};
590
604
591
605
static enum led_brightness
@@ -655,17 +669,25 @@ struct led_classdev_mc ayn_led_mc = {
655
669
static int ayn_platform_probe (struct platform_device * pdev ) {
656
670
struct device * dev = & pdev -> dev ;
657
671
struct device * hwdev ;
658
- int ret ;
672
+ int retval ;
659
673
660
- ret = devm_led_classdev_multicolor_register (dev , & ayn_led_mc );
661
- if (ret )
662
- return ret ;
674
+ retval = devm_led_classdev_multicolor_register (dev , & ayn_led_mc );
675
+ if (retval )
676
+ return retval ;
677
+
678
+ struct led_classdev * led_cdev = & ayn_led_mc .led_cdev ;
679
+
680
+ retval = devm_device_add_groups (led_cdev -> dev , ayn_led_mc_groups );
681
+ if (retval )
682
+ return retval ;
663
683
664
- struct device * led_dev = ayn_led_mc .led_cdev .dev ;
684
+ retval = led_mode_write (AYN_LED_MODE_WRITE );
685
+ if (retval )
686
+ return retval ;
665
687
666
- ret = devm_device_add_groups ( led_dev , ayn_led_mc_groups );
667
- if (ret )
668
- return ret ;
688
+ retval = ayn_led_mc_brightness_write ( led_cdev , 0 );
689
+ if (retval )
690
+ return retval ;
669
691
670
692
hwdev = devm_hwmon_device_register_with_info (
671
693
dev , "aynec" , NULL , & ayn_ec_chip_info , ayn_sensors_groups );
0 commit comments