From: Cryolitia PukNgae Date: Mon, 22 Dec 2025 10:51:39 +0000 (+0800) Subject: hwmon: (gpd-fan) add support for Micro PC 2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13bf63b9314034d54b521d83ad6a04142695d1a0;p=thirdparty%2Fkernel%2Flinux.git hwmon: (gpd-fan) add support for Micro PC 2 GPD Micro PC 2 is a mobile productivity device with 7-inch screen and abundant ports.[1] Link: https://www.gpd.hk/gpdmicropc2345345345 #1 Co-developed-by: kylon <3252255+kylon@users.noreply.github.com> Signed-off-by: kylon <3252255+kylon@users.noreply.github.com> Tested-by: kylon <3252255+kylon@users.noreply.github.com> Link: https://github.com/Cryolitia/gpd-fan-driver/pull/23 Signed-off-by: Cryolitia PukNgae Link: https://lore.kernel.org/r/20251222-mpc2-v1-1-695d8d351cc1@uniontech.com Signed-off-by: Guenter Roeck --- diff --git a/Documentation/hwmon/gpd-fan.rst b/Documentation/hwmon/gpd-fan.rst index 0b56b70e6264d..29527a77fe882 100644 --- a/Documentation/hwmon/gpd-fan.rst +++ b/Documentation/hwmon/gpd-fan.rst @@ -28,6 +28,7 @@ Currently the driver supports the following handhelds: - GPD Win Max 2 2025 (HX370) - GPD Win 4 (6800U) - GPD Win 4 (7840U) + - GPD Micro PC 2 Module parameters ----------------- @@ -50,6 +51,8 @@ gpd_fan_board - GPD Win Mini (HX370) - GPD Pocket 4 - GPD Duo + - mpc2 + - GPD Micro PC 2 Sysfs entries ------------- diff --git a/drivers/hwmon/gpd-fan.c b/drivers/hwmon/gpd-fan.c index 237f496c48620..1729729b135f8 100644 --- a/drivers/hwmon/gpd-fan.c +++ b/drivers/hwmon/gpd-fan.c @@ -31,6 +31,7 @@ enum gpd_board { win4_6800u, win_max_2, duo, + mpc2, }; enum FAN_PWM_ENABLE { @@ -106,6 +107,18 @@ static struct gpd_fan_drvdata gpd_wm2_drvdata = { .pwm_max = 184, }; +static struct gpd_fan_drvdata gpd_mpc2_drvdata = { + .board_name = "mpc2", + .board = mpc2, + + .addr_port = 0x4E, + .data_port = 0x4F, + .manual_control_enable = 0x047A, + .rpm_read = 0x0476, + .pwm_write = 0x047A, + .pwm_max = 244, +}; + static const struct dmi_system_id dmi_table[] = { { // GPD Win Mini @@ -212,11 +225,19 @@ static const struct dmi_system_id dmi_table[] = { }, .driver_data = &gpd_win_mini_drvdata, }, + { + // GPD Micro PC 2 + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "GPD"), + DMI_MATCH(DMI_PRODUCT_NAME, "G1688-08"), + }, + .driver_data = &gpd_mpc2_drvdata, + }, {} }; static const struct gpd_fan_drvdata *gpd_module_drvdata[] = { - &gpd_win_mini_drvdata, &gpd_win4_drvdata, &gpd_wm2_drvdata, NULL + &gpd_win_mini_drvdata, &gpd_win4_drvdata, &gpd_wm2_drvdata, &gpd_mpc2_drvdata, NULL }; // Helper functions to handle EC read/write @@ -295,6 +316,7 @@ static int gpd_read_rpm(void) case win4_6800u: case win_mini: case duo: + case mpc2: return gpd_generic_read_rpm(); case win_max_2: return gpd_wm2_read_rpm(); @@ -321,6 +343,7 @@ static int gpd_read_pwm(void) case win_mini: case duo: case win4_6800u: + case mpc2: switch (gpd_driver_priv.pwm_enable) { case DISABLE: return 255; @@ -376,6 +399,7 @@ static int gpd_write_pwm(u8 val) case win_mini: case win4_6800u: case win_max_2: + case mpc2: gpd_generic_write_pwm(val); break; } @@ -443,6 +467,7 @@ static void gpd_set_pwm_enable(enum FAN_PWM_ENABLE enable) switch (gpd_driver_priv.drvdata->board) { case win_mini: case win4_6800u: + case mpc2: gpd_win_mini_set_pwm_enable(enable); break; case duo: