Re: [PATCH v8 1/2] hwmon: add GPD devices sensor driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 9/4/25 01:33, Cryolitia PukNgae via B4 Relay wrote:
From: Cryolitia PukNgae <cryolitia@xxxxxxxxxxxxx>

Sensors driver for GPD Handhelds that expose fan reading and control via
hwmon sysfs.

Shenzhen GPD Technology Co., Ltd. manufactures a series of handheld
devices. This driver implements these functions through x86 port-mapped
IO.

Tested-by: Marcin Strągowski <marcin@xxxxxxxxxxxxxx>
Tested-by: someone5678 <someone5678.dev@xxxxxxxxx>
Tested-by: Justin Weiss <justin@xxxxxxxxxxxxxxx>
Tested-by: Antheas Kapenekakis <lkml@xxxxxxxxxxx>
Tested-by: command_block <mtf@xxxxx>
Tested-by: derjohn <himself@xxxxxxxxxx>
Tested-by: Crashdummyy <crashdummy1337@xxxxxxxxx>
Signed-off-by: Cryolitia PukNgae <cryolitia@xxxxxxxxxxxxx>
---
  MAINTAINERS             |   6 +
  drivers/hwmon/Kconfig   |  10 +
  drivers/hwmon/Makefile  |   1 +
  drivers/hwmon/gpd-fan.c | 786 ++++++++++++++++++++++++++++++++++++++++++++++++
  4 files changed, 803 insertions(+)

diff --git a/MAINTAINERS b/MAINTAINERS
index 6dcfbd11efef87927041f5cf58d70633dbb4b18d..14a616be5ff08aaeee52436dff54a86c4a81e5fb 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -10421,6 +10421,12 @@ F:	drivers/phy/samsung/phy-gs101-ufs.c
  F:	include/dt-bindings/clock/google,gs101.h
  K:	[gG]oogle.?[tT]ensor
+GPD FAN DRIVER
+M:	Cryolitia PukNgae <cryolitia@xxxxxxxxxxxxx>
+L:	linux-hwmon@xxxxxxxxxxxxxxx
+S:	Maintained
+F:	drivers/hwmon/gpd-fan.c
+
  GPD POCKET FAN DRIVER
  M:	Hans de Goede <hansg@xxxxxxxxxx>
  L:	platform-driver-x86@xxxxxxxxxxxxxxx
diff --git a/drivers/hwmon/Kconfig b/drivers/hwmon/Kconfig
index 9d28fcf7cd2a6f9e2f54694a717bd85ff4047b46..a552a5ced64d0fee2c80a5399ce9d1f0dbd7d763 100644
--- a/drivers/hwmon/Kconfig
+++ b/drivers/hwmon/Kconfig
@@ -769,6 +769,16 @@ config SENSORS_GL520SM
  	  This driver can also be built as a module. If so, the module
  	  will be called gl520sm.
+config SENSORS_GPD
+	tristate "GPD handhelds"
+	depends on X86
+	help
+	  If you say yes here you get support for fan readings and
+	  control over GPD handheld devices.
+
+	  Can also be built as a module. In that case it will be
+	  called gpd-fan.
+
  config SENSORS_G760A
  	tristate "GMT G760A"
  	depends on I2C
diff --git a/drivers/hwmon/Makefile b/drivers/hwmon/Makefile
index cd8bc4752b4dbf015c6eb46157626f4e8f87dfae..051981eb8a5089608e9eb351a1d5857805c728c8 100644
--- a/drivers/hwmon/Makefile
+++ b/drivers/hwmon/Makefile
@@ -88,6 +88,7 @@ obj-$(CONFIG_SENSORS_GIGABYTE_WATERFORCE) += gigabyte_waterforce.o
  obj-$(CONFIG_SENSORS_GL518SM)	+= gl518sm.o
  obj-$(CONFIG_SENSORS_GL520SM)	+= gl520sm.o
  obj-$(CONFIG_SENSORS_GSC)	+= gsc-hwmon.o
+obj-$(CONFIG_SENSORS_GPD)	+= gpd-fan.o
  obj-$(CONFIG_SENSORS_GPIO_FAN)	+= gpio-fan.o
  obj-$(CONFIG_SENSORS_GXP_FAN_CTRL) += gxp-fan-ctrl.o
  obj-$(CONFIG_SENSORS_HIH6130)	+= hih6130.o
diff --git a/drivers/hwmon/gpd-fan.c b/drivers/hwmon/gpd-fan.c
new file mode 100644
index 0000000000000000000000000000000000000000..4a9ae049a78524caa0fd608c119eb34c333429ae
--- /dev/null
+++ b/drivers/hwmon/gpd-fan.c
@@ -0,0 +1,786 @@
+// SPDX-License-Identifier: GPL-2.0+
+
+/* Platform driver for GPD devices that expose fan control via hwmon sysfs.
+ *
+ * Fan control is provided via pwm interface in the range [0-255].
+ * Each model has a different range in the EC, the written value is scaled to
+ * accommodate for that.
+ *
+ * Based on this repo:
+ * https://github.com/Cryolitia/gpd-fan-driver
+ *
+ * Copyright (c) 2024 Cryolitia PukNgae
+ */
+
+#include <linux/acpi.h>
+#include <linux/dmi.h>
+#include <linux/hwmon.h>
+#include <linux/ioport.h>
+#include <linux/kernel.h>
+#include <linux/module.h>
+#include <linux/platform_device.h>
+
+#define DRIVER_NAME "gpdfan"
+#define GPD_PWM_CTR_OFFSET 0x1841
+
+static char *gpd_fan_board = "";
+module_param(gpd_fan_board, charp, 0444);
+
+// EC read/write locker, protecting single EC access
+// Should never access EC at the same time, otherwise system down.
+static DEFINE_MUTEX(gpd_fan_atomic_lock);

Why keep this lock ? Each access sequence is now locked in the top
level read/write function, which should make this lock redundant.

Guenter





[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux