Skip to content

Commit 1205974

Browse files
pastaqDerek J. Clark
authored andcommitted
Add automatic LED off at init.
1 parent 8608286 commit 1205974

File tree

1 file changed

+44
-22
lines changed

1 file changed

+44
-22
lines changed

ayn-platform.c

Lines changed: 44 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -508,6 +508,10 @@ static int ayn_platform_write(struct device *dev, enum hwmon_sensor_types type,
508508
}
509509

510510
/* RGB LED Logic */
511+
static int led_mode_write(int mode) {
512+
return write_to_ec(AYN_LED_MODE_REG, mode);
513+
};
514+
511515
static ssize_t led_mode_store(struct device *dev, struct device_attribute *attr,
512516
const char *buf, size_t count) {
513517
int val;
@@ -524,7 +528,7 @@ static ssize_t led_mode_store(struct device *dev, struct device_attribute *attr,
524528
mode = AYN_LED_MODE_BREATH;
525529
}
526530

527-
retval = write_to_ec(AYN_LED_MODE_REG, mode);
531+
retval = led_mode_write(mode);
528532
if (retval)
529533
return retval;
530534

@@ -556,18 +560,33 @@ static ssize_t led_mode_show(struct device *dev, struct device_attribute *attr,
556560

557561
static DEVICE_ATTR_RW(led_mode);
558562

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+
559584
static void ayn_led_mc_brightness_set(struct led_classdev *led_cdev,
560585
enum led_brightness brightness) {
561-
struct led_classdev_mc *mc_cdev = lcdev_to_mccdev(led_cdev);
562586
long mode;
563587
int retval;
564-
int val;
565-
int i;
566-
struct mc_subled s_led;
567588

568-
led_cdev->brightness = brightness;
569589
retval = read_from_ec(AYN_LED_MODE_REG, 1, &mode);
570-
571590
if (retval)
572591
return;
573592

@@ -579,13 +598,8 @@ static void ayn_led_mc_brightness_set(struct led_classdev *led_cdev,
579598
return;
580599
}
581600

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);
589603
};
590604

591605
static enum led_brightness
@@ -655,17 +669,25 @@ struct led_classdev_mc ayn_led_mc = {
655669
static int ayn_platform_probe(struct platform_device *pdev) {
656670
struct device *dev = &pdev->dev;
657671
struct device *hwdev;
658-
int ret;
672+
int retval;
659673

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;
663683

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;
665687

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;
669691

670692
hwdev = devm_hwmon_device_register_with_info(
671693
dev, "aynec", NULL, &ayn_ec_chip_info, ayn_sensors_groups);

0 commit comments

Comments
 (0)