From: "Ilpo Järvinen" <ilpo.jarvinen@linux.intel.com>
To: Lyndon Sanche <lsanche@lyndeno.ca>
Cc: mario.limonciello@amd.com, pali@kernel.org, W_Armin@gmx.de,
srinivas.pandruvada@linux.intel.com, lkp@intel.com,
Hans de Goede <hdegoede@redhat.com>,
Yijun.Shen@dell.com, Matthew Garrett <mjg59@srcf.ucam.org>,
Vegard Nossum <vegard.nossum@oracle.com>,
Jonathan Corbet <corbet@lwn.net>,
Heiner Kallweit <hkallweit1@gmail.com>,
LKML <linux-kernel@vger.kernel.org>,
platform-driver-x86@vger.kernel.org,
Dell.Client.Kernel@dell.com
Subject: Re: [PATCH v7 3/3] platform/x86: dell-pc: Implement platform_profile
Date: Mon, 27 May 2024 12:39:51 +0300 (EEST) [thread overview]
Message-ID: <c971cfae-e7d5-fbde-f77b-1a936c6e1ee7@linux.intel.com> (raw)
In-Reply-To: <20240517224323.10045-4-lsanche@lyndeno.ca>
On Fri, 17 May 2024, Lyndon Sanche wrote:
> Some Dell laptops support configuration of preset fan modes through
> smbios tables.
>
> If the platform supports these fan modes, set up platform_profile to
> change these modes. If not supported, skip enabling platform_profile.
>
> Signed-off-by: Lyndon Sanche <lsanche@lyndeno.ca>
> ---
> MAINTAINERS | 6 +
> drivers/platform/x86/dell/Kconfig | 13 +
> drivers/platform/x86/dell/Makefile | 1 +
> drivers/platform/x86/dell/dell-pc.c | 310 +++++++++++++++++++
> drivers/platform/x86/dell/dell-smbios-base.c | 1 +
> drivers/platform/x86/dell/dell-smbios.h | 1 +
> 6 files changed, 332 insertions(+)
> create mode 100644 drivers/platform/x86/dell/dell-pc.c
>
> diff --git a/MAINTAINERS b/MAINTAINERS
> index ebf03f5f0619..69c582b72a08 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -5961,6 +5961,12 @@ F: Documentation/ABI/obsolete/procfs-i8k
> F: drivers/hwmon/dell-smm-hwmon.c
> F: include/uapi/linux/i8k.h
>
> +DELL PC DRIVER
> +M: Lyndon Sanche <lsanche@lyndeno.ca>
> +L: platform-driver-x86@vger.kernel.org
> +S: Maintained
> +F: drivers/platform/x86/dell/dell-pc.c
> +
> DELL REMOTE BIOS UPDATE DRIVER
> M: Stuart Hayes <stuart.w.hayes@gmail.com>
> L: platform-driver-x86@vger.kernel.org
> diff --git a/drivers/platform/x86/dell/Kconfig b/drivers/platform/x86/dell/Kconfig
> index bd9f445974cc..0732850a3dd6 100644
> --- a/drivers/platform/x86/dell/Kconfig
> +++ b/drivers/platform/x86/dell/Kconfig
> @@ -91,6 +91,19 @@ config DELL_RBTN
> To compile this driver as a module, choose M here: the module will
> be called dell-rbtn.
>
> +config DELL_PC
> + tristate "Dell PC Extras"
> + default m
> + depends on ACPI
> + depends on DMI
> + depends on DELL_SMBIOS
> + select ACPI_PLATFORM_PROFILE
> + help
> + This driver adds support for controlling the fan modes via platform_profile
> + on supported Dell systems regardless of formfactor.
> + Module will simply do nothing if thermal management commands are not
> + supported.
> +#include <linux/module.h>
> +#include <linux/kernel.h>
> +#include <linux/init.h>
> +#include <linux/err.h>
> +#include <linux/dmi.h>
> +#include <linux/bitfield.h>
> +#include <linux/bits.h>
> +#include <linux/platform_profile.h>
> +#include <linux/slab.h>
> +#include "dell-smbios.h"
Add empty line between <> and "" includes.
> +static const struct dmi_system_id dell_device_table[] __initconst = {
> + {
> + .ident = "Dell Inc.",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
> + },
> + },
> + {
> + .ident = "Dell Computer Corporation",
> + .matches = {
> + DMI_MATCH(DMI_SYS_VENDOR, "Dell Computer Corporation"),
> + },
> + },
> + { }
> +};
> +MODULE_DEVICE_TABLE(dmi, dell_device_table);
> +enum thermal_mode_bits {
> + DELL_BALANCED = BIT(0),
> + DELL_COOL_BOTTOM = BIT(1),
> + DELL_QUIET = BIT(2),
> + DELL_PERFORMANCE = BIT(3),
A few nits still to address.
Can you please align these so that the values align (IIRC, I asked this
earlier but perhaps my request was too unclear):
DELL_XX = BIT(X),
DELL_YYYYYYYYY = BIT(Y),
> +static int thermal_get_supported_modes(int *supported_bits)
> +{
> + struct calling_interface_buffer buffer;
> + int ret;
> +
> + dell_fill_request(&buffer, 0x0, 0, 0, 0);
> + ret = dell_send_request(&buffer, CLASS_INFO, SELECT_THERMAL_MANAGEMENT);
> + if (ret) {
> + /* Thermal function not supported */
> + if (ret == -ENXIO) {
> + *supported_bits = 0;
> + return 0;
> + } else {
Drop else because the previous block ends into return.
> + return ret;
> + }
> + }
Remove the outer if (ret) block and put the inner ones directly on the
main level as two if () conditions.
> + *supported_bits = FIELD_GET(DELL_THERMAL_SUPPORTED, buffer.output[1]);
> + return 0;
> +}
> +
> +static int thermal_get_acc_mode(int *acc_mode)
> +{
> + struct calling_interface_buffer buffer;
> + int ret;
> +
> + dell_fill_request(&buffer, 0x0, 0, 0, 0);
> + ret = dell_send_request(&buffer, CLASS_INFO, SELECT_THERMAL_MANAGEMENT);
> + if (ret)
> + return ret;
> + *acc_mode = FIELD_GET(DELL_ACC_GET_FIELD, buffer.output[3]);
> + return 0;
> +}
> +
> +static int thermal_set_mode(enum thermal_mode_bits state)
> +{
> + struct calling_interface_buffer buffer;
> + int ret;
> + int acc_mode;
> +
> + ret = thermal_get_acc_mode(&acc_mode);
> + if (ret)
> + return ret;
> +
> + dell_fill_request(&buffer, 0x1, FIELD_PREP(DELL_ACC_SET_FIELD, acc_mode) | state, 0, 0);
> + ret = dell_send_request(&buffer, CLASS_INFO, SELECT_THERMAL_MANAGEMENT);
> + return ret;
Return directly on the previous line.
> +static int thermal_platform_profile_get(struct platform_profile_handler *pprof,
> + enum platform_profile_option *profile)
> +{
> + int ret;
> +
> + ret = thermal_get_mode();
> + if (ret < 0)
> + return ret;
> +
> + switch (ret) {
> + case DELL_BALANCED:
> + *profile = PLATFORM_PROFILE_BALANCED;
> + break;
> + case DELL_PERFORMANCE:
> + *profile = PLATFORM_PROFILE_PERFORMANCE;
> + break;
> + case DELL_COOL_BOTTOM:
> + *profile = PLATFORM_PROFILE_COOL;
> + break;
> + case DELL_QUIET:
> + *profile = PLATFORM_PROFILE_QUIET;
> + break;
> + default:
> + return -EINVAL;
> + }
> +
> + return 0;
> +}
> +
> +static int thermal_init(void)
> +{
> + int ret;
> + int supported_modes;
> +
> + /* If thermal commands not supported, exit without error */
Fix grammar, you're perhaps missing "are".
> + if (!dell_smbios_class_is_supported(CLASS_INFO))
> + return 0;
> +
> + /* If thermal modes not supported, exit without error */
Ditto.
--
i.
next prev parent reply other threads:[~2024-05-27 9:40 UTC|newest]
Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-04-25 17:27 [PATCH] platform/x86: dell-laptop: Implement platform_profile Lyndon Sanche
2024-04-25 20:07 ` Mario Limonciello
2024-04-25 20:24 ` Lyndon Sanche
2024-04-25 20:28 ` Mario Limonciello
2024-04-25 21:51 ` Srinivas Pandruvada
2024-04-26 0:38 ` Lyndon Sanche
2024-04-26 16:14 ` srinivas pandruvada
2024-04-26 18:23 ` Lyndon Sanche
2024-04-26 18:24 ` srinivas pandruvada
2024-04-25 20:12 ` Pali Rohár
2024-04-25 20:27 ` Lyndon Sanche
2024-04-25 20:31 ` Pali Rohár
2024-04-25 21:07 ` Armin Wolf
2024-04-26 0:54 ` Lyndon Sanche
2024-04-26 2:04 ` [PATCH v2] " Lyndon Sanche
2024-04-26 9:23 ` Ilpo Järvinen
2024-04-26 18:05 ` Lyndon Sanche
2024-05-13 20:09 ` kernel test robot
2024-04-26 6:57 ` [PATCH] " Ilpo Järvinen
2024-04-29 16:48 ` [PATCH v3] " Lyndon Sanche
2024-04-29 17:45 ` Mario Limonciello
2024-04-29 17:51 ` Mario Limonciello
2024-04-29 21:25 ` Lyndon Sanche
2024-04-29 21:21 ` Lyndon Sanche
2024-04-30 10:31 ` Ilpo Järvinen
2024-04-30 18:38 ` Lyndon Sanche
2024-04-30 15:36 ` kernel test robot
2024-05-01 8:16 ` kernel test robot
2024-05-01 16:35 ` kernel test robot
2024-05-01 17:07 ` kernel test robot
2024-05-01 1:14 ` [PATCH v4] " Lyndon Sanche
2024-05-01 1:36 ` Pali Rohár
2024-05-01 1:42 ` Lyndon Sanche
2024-05-01 21:58 ` [PATCH v5] " Lyndon Sanche
2024-05-03 10:19 ` kernel test robot
2024-05-04 1:03 ` Lyndon Sanche
2024-05-06 10:18 ` Hans de Goede
2024-05-07 16:00 ` Lyndon Sanche
2024-05-03 21:19 ` Armin Wolf
2024-05-04 0:59 ` Lyndon Sanche
2024-05-08 14:24 ` Shen, Yijun
2024-05-08 15:53 ` Mario Limonciello
2024-05-11 15:05 ` Shen, Yijun
2024-05-11 15:12 ` Limonciello, Mario
2024-05-11 15:56 ` Shen, Yijun
2024-05-12 17:53 ` Armin Wolf
2024-05-12 17:58 ` Limonciello, Mario
2024-05-12 18:47 ` Armin Wolf
2024-05-12 22:14 ` Limonciello, Mario
2024-05-11 16:02 ` Lyndon Sanche
2024-05-09 15:10 ` Lyndon Sanche
2024-05-11 1:49 ` Lyndon Sanche
2024-05-11 15:22 ` Shen, Yijun
2024-05-11 15:54 ` Lyndon Sanche
2024-05-11 16:12 ` Shen, Yijun
2024-05-11 2:36 ` [PATCH v6 0/2] " Lyndon Sanche
2024-05-11 2:36 ` [PATCH v6 1/2] platform/x86: dell-smbios: Add helper for checking supported commands Lyndon Sanche
2024-05-11 15:13 ` Limonciello, Mario
2024-05-12 18:00 ` Armin Wolf
2024-05-11 2:36 ` [PATCH v6 2/2] platform/x86: dell-laptop: Implement platform_profile Lyndon Sanche
2024-05-11 15:16 ` Limonciello, Mario
2024-05-11 15:59 ` Lyndon Sanche
[not found] ` <48JCDS.E4RT1F9DTKFU1@lyndeno.ca>
2024-05-12 1:43 ` Limonciello, Mario
2024-05-12 15:25 ` Hans de Goede
2024-05-12 0:14 ` Lyndon Sanche
2024-05-12 18:05 ` Armin Wolf
2024-05-15 17:06 ` Lyndon Sanche
2024-05-17 22:42 ` [PATCH v7 0/3] platform/x86: dell: " Lyndon Sanche
2024-05-17 22:42 ` [PATCH v7 1/3] platform/x86: dell-smbios: Add helper for checking supported class Lyndon Sanche
2024-05-17 22:42 ` [PATCH v7 2/3] platform/x86: dell-smbios: Move request functions for reuse Lyndon Sanche
2024-05-17 22:42 ` [PATCH v7 3/3] platform/x86: dell-pc: Implement platform_profile Lyndon Sanche
2024-05-27 9:39 ` Ilpo Järvinen [this message]
2024-05-28 16:16 ` Lyndon Sanche
2024-05-21 20:50 ` [PATCH v7 0/3] platform/x86: dell: " Mario Limonciello
2024-05-29 17:47 ` [PATCH v8 " Lyndon Sanche
2024-05-29 17:47 ` [PATCH v8 1/3] platform/x86: dell-smbios: Add helper for checking supported class Lyndon Sanche
2024-05-29 17:47 ` [PATCH v8 2/3] platform/x86: dell-smbios: Move request functions for reuse Lyndon Sanche
2024-05-29 17:47 ` [PATCH v8 3/3] platform/x86: dell-pc: Implement platform_profile Lyndon Sanche
2024-05-30 8:39 ` Ilpo Järvinen
2024-05-31 1:19 ` Lyndon Sanche
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=c971cfae-e7d5-fbde-f77b-1a936c6e1ee7@linux.intel.com \
--to=ilpo.jarvinen@linux.intel.com \
--cc=Dell.Client.Kernel@dell.com \
--cc=W_Armin@gmx.de \
--cc=Yijun.Shen@dell.com \
--cc=corbet@lwn.net \
--cc=hdegoede@redhat.com \
--cc=hkallweit1@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@intel.com \
--cc=lsanche@lyndeno.ca \
--cc=mario.limonciello@amd.com \
--cc=mjg59@srcf.ucam.org \
--cc=pali@kernel.org \
--cc=platform-driver-x86@vger.kernel.org \
--cc=srinivas.pandruvada@linux.intel.com \
--cc=vegard.nossum@oracle.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox