All of lore.kernel.org
 help / color / mirror / Atom feed
From: Luke Jones <luke@ljones.dev>
To: hdegoede@redhat.com
Cc: andy.shevchenko@gmail.com, pobrn@protonmail.com, pavel@ucw.cz,
	platform-driver-x86@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 2/6] asus-wmi: Implement TUF laptop keyboard LED modes
Date: Tue, 09 Aug 2022 15:16:05 +1200	[thread overview]
Message-ID: <UQVBGR.1W6SHRT392MR@ljones.dev> (raw)
In-Reply-To: <20220809025054.1626339-3-luke@ljones.dev>

*sighs*

I swear I ran checkpatch. I just doublechecked and ran again, getting 
this:

----------------------------------------------------------------
./v3-0002-asus-wmi-Implement-TUF-laptop-keyboard-LED-modes.patch
----------------------------------------------------------------
WARNING: Prefer kstrto<type> to single variable sscanf
#108: FILE: drivers/platform/x86/asus-wmi.c:783:
+ if (sscanf(buf, "%hhd", &save) != 1)
+ return -EINVAL;

WARNING: Prefer kstrto<type> to single variable sscanf
#129: FILE: drivers/platform/x86/asus-wmi.c:804:
+ if (sscanf(buf, "%hhd", &mode) != 1)
+ return -EINVAL;

WARNING: suspect code indent for conditional statements (8, 10)
#133: FILE: drivers/platform/x86/asus-wmi.c:808:
+ if (mode >= 12 || mode == 10)
+ asus->keyboard_rgb_led.mode = 10;

WARNING: suspect code indent for conditional statements (8, 10)
#135: FILE: drivers/platform/x86/asus-wmi.c:810:
+ else
+ asus->keyboard_rgb_led.mode = mode;

WARNING: Prefer kstrto<type> to single variable sscanf
#151: FILE: drivers/platform/x86/asus-wmi.c:826:
+ if (sscanf(buf, "%hhd", &speed) != 1)
+ return -EINVAL;

I will fix, and wait for review of V3 before submitting hopefully the 
final version.

Sorry everyone.


On Tue, Aug 9 2022 at 14:50:50 +1200, Luke D. Jones <luke@ljones.dev> 
wrote:
> Adds support for changing the laptop keyboard LED modes. These
> are visible effects such as static, rainbow, pulsing, colour cycles.
> 
> These sysfs attributes are added to asus-nb-wmi:
> - keyboard_rgb_save
> - keyboard_rgb_mode
> - keyboard_rgb_speed
> 
> Signed-off-by: Luke D. Jones <luke@ljones.dev>
> ---
>  .../ABI/testing/sysfs-platform-asus-wmi       |  30 +++++
>  drivers/platform/x86/asus-wmi.c               | 127 
> ++++++++++++++++--
>  2 files changed, 149 insertions(+), 8 deletions(-)
> 
> diff --git a/Documentation/ABI/testing/sysfs-platform-asus-wmi 
> b/Documentation/ABI/testing/sysfs-platform-asus-wmi
> index 04885738cf15..a9128fa5cc65 100644
> --- a/Documentation/ABI/testing/sysfs-platform-asus-wmi
> +++ b/Documentation/ABI/testing/sysfs-platform-asus-wmi
> @@ -57,3 +57,33 @@ Description:
>  			* 0 - default,
>  			* 1 - overboost,
>  			* 2 - silent
> +
> +What:		/sys/devices/platform/<platform>/keyboard_rgb_save
> +Date:		Aug 2022
> +KernelVersion:	6.1
> +Contact:	"Luke Jones" <luke@ljones.dev>
> +Description:
> +		Set or save the RGB mode details (write-only):
> +			* 0 - set, the settings will be lost on boot
> +			* 1 - save, the settings will be retained on boot
> +
> +What:		/sys/devices/platform/<platform>/keyboard_rgb_mode
> +Date:		Aug 2022
> +KernelVersion:	6.1
> +Contact:	"Luke Jones" <luke@ljones.dev>
> +Description:
> +		Set the mode of the RGB keyboard, the mode will not apply until the
> +		keyboard_rgb_save attribute is set (write-only):
> +			* 0 to 12, each is an RGB such as static, rainbow, pulse.
> +				Not all keyboards accept every mode.
> +
> +What:		/sys/devices/platform/<platform>/keyboard_rgb_speed
> +Date:		Aug 2022
> +KernelVersion:	6.1
> +Contact:	"Luke Jones" <luke@ljones.dev>
> +Description:
> +		Set the speed of the selected RGB effect, the speed will not apply
> +		until the keyboard_rgb_save attribute is set (write-only):
> +			* 0 - slow
> +			* 1 - medium
> +			* 2 - fast
> \ No newline at end of file
> diff --git a/drivers/platform/x86/asus-wmi.c 
> b/drivers/platform/x86/asus-wmi.c
> index 233e73f4313d..fa0cc2895a66 100644
> --- a/drivers/platform/x86/asus-wmi.c
> +++ b/drivers/platform/x86/asus-wmi.c
> @@ -246,7 +246,8 @@ struct asus_wmi {
>  	bool dgpu_disable_available;
>  	bool dgpu_disable;
> 
> -	struct keyboard_rgb_led keyboard_rgb_mode;
> +	bool keyboard_rgb_mode_available;
> +	struct keyboard_rgb_led keyboard_rgb_led;
> 
>  	bool throttle_thermal_policy_available;
>  	u8 throttle_thermal_policy_mode;
> @@ -748,6 +749,102 @@ static ssize_t egpu_enable_store(struct device 
> *dev,
> 
>  static DEVICE_ATTR_RW(egpu_enable);
> 
> +/* TUF Laptop Keyboard RGB Modes 
> **********************************************/
> +static int keyboard_rgb_check_present(struct asus_wmi *asus)
> +{
> +	u32 result;
> +	int err;
> +
> +	asus->keyboard_rgb_mode_available = false;
> +
> +	err = asus_wmi_get_devstate(asus, ASUS_WMI_DEVID_TUF_RGB_MODE, 
> &result);
> +	if (err) {
> +		if (err == -ENODEV)
> +			return 0;
> +		return err;
> +	}
> +
> +	if (result & ASUS_WMI_DSTS_PRESENCE_BIT)
> +		asus->keyboard_rgb_mode_available = true;
> +
> +	return 0;
> +}
> +
> +static ssize_t keyboard_rgb_save_store(struct device *device,
> +				 struct device_attribute *attr,
> +				 const char *buf, size_t count)
> +{
> +	u8 save;
> +	int err;
> +
> +	struct asus_wmi *asus = dev_get_drvdata(device);
> +	struct led_classdev *cdev = &asus->keyboard_rgb_led.dev.led_cdev;
> +
> +	if (sscanf(buf, "%hhd", &save) != 1)
> +		return -EINVAL;
> +
> +	asus->keyboard_rgb_led.save = !!save;
> +
> +	err = tuf_rgb_brightness_set(cdev, cdev->brightness);
> +	if (err)
> +		return err;
> +
> +	return count;
> +}
> +static DEVICE_ATTR_WO(keyboard_rgb_save);
> +
> +static ssize_t keyboard_rgb_mode_store(struct device *device,
> +				 struct device_attribute *attr,
> +				 const char *buf, size_t count)
> +{
> +	u8 mode;
> +
> +	struct asus_wmi *asus = dev_get_drvdata(device);
> +
> +	if (sscanf(buf, "%hhd", &mode) != 1)
> +		return -EINVAL;
> +
> +	/* These are the known usable modes across all TUF/ROG */
> +	if (mode >= 12 || mode == 10)
> +	  asus->keyboard_rgb_led.mode = 10;
> +	else
> +	  asus->keyboard_rgb_led.mode = mode;
> +
> +	return count;
> +}
> +static DEVICE_ATTR_WO(keyboard_rgb_mode);
> +
> +
> +static ssize_t keyboard_rgb_speed_store(struct device *device,
> +				 struct device_attribute *attr,
> +				 const char *buf, size_t count)
> +{
> +	u8 speed;
> +
> +	struct asus_wmi *asus = dev_get_drvdata(device);
> +
> +	if (sscanf(buf, "%hhd", &speed) != 1)
> +		return -EINVAL;
> +
> +	switch (speed) {
> +	case 0:
> +		asus->keyboard_rgb_led.speed = 0xe1;
> +		break;
> +	case 1:
> +		asus->keyboard_rgb_led.speed = 0xeb;
> +		break;
> +	case 2:
> +		asus->keyboard_rgb_led.speed = 0xf5;
> +		break;
> +	default:
> +		asus->keyboard_rgb_led.speed = 0xeb;
> +		break;
> +	}
> +
> +	return count;
> +}
> +static DEVICE_ATTR_WO(keyboard_rgb_speed);
> +
>  /* Battery 
> ********************************************************************/
> 
>  /* The battery maximum charging percentage */
> @@ -1047,7 +1144,7 @@ static int tuf_rgb_brightness_set(struct 
> led_classdev *cdev,
>  {
>  	struct led_classdev_mc *mc_cdev = lcdev_to_mccdev(cdev);
>  	struct keyboard_rgb_led *rgb = container_of(mc_cdev, struct 
> keyboard_rgb_led, dev);
> -	struct asus_wmi *asus = container_of(rgb, struct asus_wmi, 
> keyboard_rgb_mode);
> +	struct asus_wmi *asus = container_of(rgb, struct asus_wmi, 
> keyboard_rgb_led);
>  	struct device *dev = &asus->platform_device->dev;
>  	u8 r, g, b;
>  	int err;
> @@ -1075,7 +1172,7 @@ static void asus_wmi_led_exit(struct asus_wmi 
> *asus)
>  	led_classdev_unregister(&asus->tpd_led);
>  	led_classdev_unregister(&asus->wlan_led);
>  	led_classdev_unregister(&asus->lightbar_led);
> -	led_classdev_multicolor_unregister(&asus->keyboard_rgb_mode.dev);
> +	led_classdev_multicolor_unregister(&asus->keyboard_rgb_led.dev);
> 
>  	if (asus->led_workqueue)
>  		destroy_workqueue(asus->led_workqueue);
> @@ -1148,8 +1245,8 @@ static int asus_wmi_led_init(struct asus_wmi 
> *asus)
>  	}
> 
>  	if (asus_wmi_dev_is_present(asus, ASUS_WMI_DEVID_TUF_RGB_MODE)) {
> -		struct mc_subled *mc_led_info = 
> asus->keyboard_rgb_mode.subled_info;
> -		struct led_classdev_mc *mc_cdev = &asus->keyboard_rgb_mode.dev;
> +		struct mc_subled *mc_led_info = asus->keyboard_rgb_led.subled_info;
> +		struct led_classdev_mc *mc_cdev = &asus->keyboard_rgb_led.dev;
>  		struct device *dev = &asus->platform_device->dev;
>  		u8 led_brightness = 255;
> 
> @@ -1174,9 +1271,9 @@ static int asus_wmi_led_init(struct asus_wmi 
> *asus)
>  		 * It's not possible to get last set data from device so set 
> defaults
>  		 * to make it safe for a user to change either RGB or modes.
>  		 */
> -		asus->keyboard_rgb_mode.save = 1;
> -		asus->keyboard_rgb_mode.mode = 0;
> -		asus->keyboard_rgb_mode.speed = 0xeb;
> +		asus->keyboard_rgb_led.save = 1;
> +		asus->keyboard_rgb_led.mode = 0;
> +		asus->keyboard_rgb_led.speed = 0xeb;
> 
>  		mc_cdev->led_cdev.brightness = led_brightness;
>  		mc_cdev->led_cdev.max_brightness = led_brightness;
> @@ -3338,6 +3435,9 @@ static struct attribute *platform_attributes[] 
> = {
>  	&dev_attr_touchpad.attr,
>  	&dev_attr_egpu_enable.attr,
>  	&dev_attr_dgpu_disable.attr,
> +	&dev_attr_keyboard_rgb_save.attr,
> +	&dev_attr_keyboard_rgb_mode.attr,
> +	&dev_attr_keyboard_rgb_speed.attr,
>  	&dev_attr_lid_resume.attr,
>  	&dev_attr_als_enable.attr,
>  	&dev_attr_fan_boost_mode.attr,
> @@ -3368,6 +3468,12 @@ static umode_t asus_sysfs_is_visible(struct 
> kobject *kobj,
>  		ok = asus->egpu_enable_available;
>  	else if (attr == &dev_attr_dgpu_disable.attr)
>  		ok = asus->dgpu_disable_available;
> +	else if (attr == &dev_attr_keyboard_rgb_save.attr)
> +		ok = asus->keyboard_rgb_mode_available;
> +	else if (attr == &dev_attr_keyboard_rgb_mode.attr)
> +		ok = asus->keyboard_rgb_mode_available;
> +	else if (attr == &dev_attr_keyboard_rgb_speed.attr)
> +		ok = asus->keyboard_rgb_mode_available;
>  	else if (attr == &dev_attr_fan_boost_mode.attr)
>  		ok = asus->fan_boost_mode_available;
>  	else if (attr == &dev_attr_throttle_thermal_policy.attr)
> @@ -3637,6 +3743,10 @@ static int asus_wmi_add(struct platform_device 
> *pdev)
>  	if (err)
>  		goto fail_dgpu_disable;
> 
> +	err = keyboard_rgb_check_present(asus);
> +	if (err)
> +		goto fail_keyboard_rgb_mode;
> +
>  	err = fan_boost_mode_check_present(asus);
>  	if (err)
>  		goto fail_fan_boost_mode;
> @@ -3751,6 +3861,7 @@ static int asus_wmi_add(struct platform_device 
> *pdev)
>  fail_fan_boost_mode:
>  fail_egpu_enable:
>  fail_dgpu_disable:
> +fail_keyboard_rgb_mode:
>  fail_platform:
>  fail_panel_od:
>  	kfree(asus);
> --
> 2.37.1
> 



  reply	other threads:[~2022-08-09  3:16 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-09  2:50 [PATCH v3 0/6] asus-wmi: Add support for RGB keyboards Luke D. Jones
2022-08-09  2:50 ` [PATCH v3 1/6] asus-wmi: Implement TUF laptop keyboard RGB control Luke D. Jones
2022-08-09  8:46   ` Andy Shevchenko
2022-08-09  8:55     ` Luke Jones
2022-08-09  9:29       ` Andy Shevchenko
2022-08-09  9:31         ` Luke Jones
2022-08-09 10:50   ` Pavel Machek
2022-08-10  4:44     ` Luke Jones
2022-08-11 15:01       ` Hans de Goede
2022-08-11 15:05         ` Hans de Goede
2022-08-11 22:13           ` Luke Jones
2022-08-09  2:50 ` [PATCH v3 2/6] asus-wmi: Implement TUF laptop keyboard LED modes Luke D. Jones
2022-08-09  3:16   ` Luke Jones [this message]
2022-08-09  9:22   ` Andy Shevchenko
2022-08-09  9:30     ` Luke Jones
2022-08-09  2:50 ` [PATCH v3 3/6] asus-wmi: Implement TUF laptop keyboard power states Luke D. Jones
2022-08-09  8:52   ` Andy Shevchenko
2022-08-09  8:58     ` Luke Jones
2022-08-09  2:50 ` [PATCH v3 4/6] asus-wmi: Document previously added attributes Luke D. Jones
2022-08-09  9:25   ` Andy Shevchenko
2022-08-11 15:08     ` Hans de Goede
2022-08-11 22:08       ` Luke Jones
2022-08-09  2:50 ` [PATCH v3 5/6] asus-wmi: Convert all attr-show to use sysfs_emit Luke D. Jones
2022-08-09  9:27   ` Andy Shevchenko
2022-08-11 18:52     ` Hans de Goede
2022-08-09  2:50 ` [PATCH v3 6/6] asus-wmi: Support the hardware GPU MUX on some laptops Luke D. Jones
2022-08-09  7:19   ` Luke Jones
2022-08-11 13:53   ` Hans de Goede
2022-08-11 22:01     ` Luke Jones
2022-08-12  7:59       ` Hans de Goede
2022-08-12  8:31         ` Thomas Weißschuh
2022-08-12  8:44           ` Hans de Goede
2022-08-09  8:55 ` [PATCH v3 0/6] asus-wmi: Add support for RGB keyboards Andy Shevchenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=UQVBGR.1W6SHRT392MR@ljones.dev \
    --to=luke@ljones.dev \
    --cc=andy.shevchenko@gmail.com \
    --cc=hdegoede@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pavel@ucw.cz \
    --cc=platform-driver-x86@vger.kernel.org \
    --cc=pobrn@protonmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.