Commit d950db3f authored by Dmitry Torokhov's avatar Dmitry Torokhov
Browse files

HID: google: switch to devm when registering keyboard backlight LED

We can use devm to register keyboard backlight LED on hammer devices, this
will allow us to use HID's driver data for something else later.

Link: https://lore.kernel.org/r/20220228075446.466016-2-dmitry.torokhov@gmail.com


Tested-by: Stephen Boyd <swboyd@chromium.org> # coachz, wormdingler
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent ce835633
Loading
Loading
Loading
Loading
+13 −25
Original line number Diff line number Diff line
@@ -340,9 +340,9 @@ static int hammer_kbd_brightness_set_blocking(struct led_classdev *cdev,
static int hammer_register_leds(struct hid_device *hdev)
{
	struct hammer_kbd_leds *kbd_backlight;
	int error;

	kbd_backlight = kzalloc(sizeof(*kbd_backlight), GFP_KERNEL);
	kbd_backlight = devm_kzalloc(&hdev->dev, sizeof(*kbd_backlight),
				     GFP_KERNEL);
	if (!kbd_backlight)
		return -ENOMEM;

@@ -356,26 +356,7 @@ static int hammer_register_leds(struct hid_device *hdev)
	/* Set backlight to 0% initially. */
	hammer_kbd_brightness_set_blocking(&kbd_backlight->cdev, 0);

	error = led_classdev_register(&hdev->dev, &kbd_backlight->cdev);
	if (error)
		goto err_free_mem;

	hid_set_drvdata(hdev, kbd_backlight);
	return 0;

err_free_mem:
	kfree(kbd_backlight);
	return error;
}

static void hammer_unregister_leds(struct hid_device *hdev)
{
	struct hammer_kbd_leds *kbd_backlight = hid_get_drvdata(hdev);

	if (kbd_backlight) {
		led_classdev_unregister(&kbd_backlight->cdev);
		kfree(kbd_backlight);
	}
	return devm_led_classdev_register(&hdev->dev, &kbd_backlight->cdev);
}

#define HID_UP_GOOGLEVENDOR	0xffd10000
@@ -512,6 +493,11 @@ static void hammer_get_folded_state(struct hid_device *hdev)
	kfree(buf);
}

static void hammer_stop(void *hdev)
{
	hid_hw_stop(hdev);
}

static int hammer_probe(struct hid_device *hdev,
			const struct hid_device_id *id)
{
@@ -525,6 +511,10 @@ static int hammer_probe(struct hid_device *hdev,
	if (error)
		return error;

	error = devm_add_action(&hdev->dev, hammer_stop, hdev);
	if (error)
		return error;

	/*
	 * We always want to poll for, and handle tablet mode events from
	 * devices that have folded usage, even when nobody has opened the input
@@ -577,9 +567,7 @@ static void hammer_remove(struct hid_device *hdev)
		spin_unlock_irqrestore(&cbas_ec_lock, flags);
	}

	hammer_unregister_leds(hdev);

	hid_hw_stop(hdev);
	/* Unregistering LEDs and stopping the hardware is done via devm */
}

static const struct hid_device_id hammer_devices[] = {