Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d161d4c authored by Hans de Goede's avatar Hans de Goede Committed by Darren Hart
Browse files

platform/x86: dell-laptop: Use brightness_set_blocking for kbd_led_level_set



kbd_led_level_set uses dell_smbios call which blocks, so the kbd_led
classdev should use the brightness_set_blocking callback.

Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarPali Rohár <pali.rohar@gmail.com>
Signed-off-by: default avatarDarren Hart <dvhart@linux.intel.com>
parent bb55a2ee
Loading
Loading
Loading
Loading
+14 −12
Original line number Diff line number Diff line
@@ -1904,38 +1904,40 @@ static enum led_brightness kbd_led_level_get(struct led_classdev *led_cdev)
	return 0;
}

static void kbd_led_level_set(struct led_classdev *led_cdev,
static int kbd_led_level_set(struct led_classdev *led_cdev,
			     enum led_brightness value)
{
	struct kbd_state state;
	struct kbd_state new_state;
	u16 num;
	int ret;

	if (kbd_get_max_level()) {
		if (kbd_get_state(&state))
			return;
		ret = kbd_get_state(&state);
		if (ret)
			return ret;
		new_state = state;
		if (kbd_set_level(&new_state, value))
			return;
		kbd_set_state_safe(&new_state, &state);
		return;
		ret = kbd_set_level(&new_state, value);
		if (ret)
			return ret;
		return kbd_set_state_safe(&new_state, &state);
	}

	if (kbd_get_valid_token_counts()) {
		for (num = kbd_token_bits; num != 0 && value > 0; --value)
			num &= num - 1; /* clear the first bit set */
		if (num == 0)
			return;
		kbd_set_token_bit(ffs(num) - 1);
		return;
			return 0;
		return kbd_set_token_bit(ffs(num) - 1);
	}

	pr_warn("Keyboard brightness level control not supported\n");
	return -ENXIO;
}

static struct led_classdev kbd_led = {
	.name           = "dell::kbd_backlight",
	.brightness_set = kbd_led_level_set,
	.brightness_set_blocking = kbd_led_level_set,
	.brightness_get = kbd_led_level_get,
	.groups         = kbd_led_groups,
};