aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SOURCES/kernel.changelog4
-rw-r--r--SOURCES/patch-6.9-redhat.patch2
-rw-r--r--SOURCES/v0-oxp-sensors.patch707
-rw-r--r--SPECS/kernel.spec17
4 files changed, 723 insertions, 7 deletions
diff --git a/SOURCES/kernel.changelog b/SOURCES/kernel.changelog
index c88a1d8..de1e72f 100644
--- a/SOURCES/kernel.changelog
+++ b/SOURCES/kernel.changelog
@@ -1,3 +1,7 @@
+* Sat Jul 27 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.12-0]
+- Linux v6.9.12
+Resolves:
+
* Thu Jul 25 2024 Augusto Caringi <acaringi@redhat.com> [6.9.11-0]
- Linux v6.9.11
Resolves:
diff --git a/SOURCES/patch-6.9-redhat.patch b/SOURCES/patch-6.9-redhat.patch
index 89dd06b..d311b03 100644
--- a/SOURCES/patch-6.9-redhat.patch
+++ b/SOURCES/patch-6.9-redhat.patch
@@ -72,7 +72,7 @@ index 000000000000..733a26bd887a
+
+endmenu
diff --git a/Makefile b/Makefile
-index 46457f645921..00cee8d95bb9 100644
+index d9243ad053f9..bc887a5bce4c 100644
--- a/Makefile
+++ b/Makefile
@@ -22,6 +22,18 @@ $(if $(filter __%, $(MAKECMDGOALS)), \
diff --git a/SOURCES/v0-oxp-sensors.patch b/SOURCES/v0-oxp-sensors.patch
new file mode 100644
index 0000000..4b42d51
--- /dev/null
+++ b/SOURCES/v0-oxp-sensors.patch
@@ -0,0 +1,707 @@
+From b75680974fe91faa5fcc1bbe39156b1e2e134238 Mon Sep 17 00:00:00 2001
+From: "Derek J. Clark" <derekjohn.clark@gmail.com>
+Date: Wed, 27 Mar 2024 18:47:00 -0700
+Subject: [PATCH 1/4] oxp-sensors: hwmon: Add OrangePi Neo PWM fan control
+
+Add OrangePi NEO handheld device. The OrangePi Neo uses different registers
+for PWM manual mode, set PWM, and read fan speed than previous devices. Valid
+PWM input and duty cycle is 1-244, we scale this to 1-155 to maintain
+compatibility with existing userspace tools.
+---
+ drivers/hwmon/oxp-sensors.c | 112 ++++++++++++++++++++++++++++++++----
+ 1 file changed, 100 insertions(+), 12 deletions(-)
+
+diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
+index 8d3b0f86c..ebca28b4a 100644
+--- a/drivers/hwmon/oxp-sensors.c
++++ b/drivers/hwmon/oxp-sensors.c
+@@ -46,6 +46,7 @@ enum oxp_board {
+ aya_neo_air_plus_mendo,
+ aya_neo_air_pro,
+ aya_neo_geek,
++ orange_pi_neo,
+ oxp_mini_amd,
+ oxp_mini_amd_a07,
+ oxp_mini_amd_pro,
+@@ -54,10 +55,16 @@ enum oxp_board {
+ static enum oxp_board board;
+
+ /* Fan reading and PWM */
+-#define OXP_SENSOR_FAN_REG 0x76 /* Fan reading is 2 registers long */
+-#define OXP_SENSOR_PWM_ENABLE_REG 0x4A /* PWM enable is 1 register long */
+-#define OXP_SENSOR_PWM_REG 0x4B /* PWM reading is 1 register long */
++#define OXP_SENSOR_FAN_REG 0x76 /* Fan reading is 2 registers long */
++#define OXP_SENSOR_PWM_ENABLE_REG 0x4A /* PWM enable is 1 register long */
++#define OXP_SENSOR_PWM_REG 0x4B /* PWM reading is 1 register long */
+
++#define ORANGEPI_SENSOR_FAN_REG 0x78 /* Fan reading is 2 registers long */
++#define ORANGEPI_SENSOR_PWM_ENABLE_REG 0x40 /* PWM enable is 1 register long */
++#define ORANGEPI_SENSOR_PWM_REG 0x38 /* PWM reading is 1 register long */
++
++#define PWM_MODE_AUTO 0x00
++#define PWM_MODE_MANUAL 0x01
+ /* Turbo button takeover function
+ * Older boards have different values and EC registers
+ * for the same function
+@@ -120,6 +127,13 @@ static const struct dmi_system_id dmi_table[] = {
+ },
+ .driver_data = (void *)aya_neo_geek,
+ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "OrangePi"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "NEO-01"),
++ },
++ .driver_data = (void *)orange_pi_neo,
++ },
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
+@@ -295,12 +309,42 @@ static DEVICE_ATTR_RW(tt_toggle);
+ /* PWM enable/disable functions */
+ static int oxp_pwm_enable(void)
+ {
+- return write_to_ec(OXP_SENSOR_PWM_ENABLE_REG, 0x01);
++ switch (board) {
++ case orange_pi_neo:
++ return write_to_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, PWM_MODE_MANUAL);
++ case aok_zoe_a1:
++ case aya_neo_2:
++ case aya_neo_air:
++ case aya_neo_air_plus_mendo:
++ case aya_neo_air_pro:
++ case aya_neo_geek:
++ case oxp_mini_amd:
++ case oxp_mini_amd_a07:
++ case oxp_mini_amd_pro:
++ return write_to_ec(OXP_SENSOR_PWM_ENABLE_REG, PWM_MODE_MANUAL);
++ default:
++ return -EINVAL;
++ }
+ }
+
+ static int oxp_pwm_disable(void)
+ {
+- return write_to_ec(OXP_SENSOR_PWM_ENABLE_REG, 0x00);
++ switch (board) {
++ case orange_pi_neo:
++ return write_to_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, PWM_MODE_AUTO);
++ case aok_zoe_a1:
++ case aya_neo_2:
++ case aya_neo_air:
++ case aya_neo_air_plus_mendo:
++ case aya_neo_air_pro:
++ case aya_neo_geek:
++ case oxp_mini_amd:
++ case oxp_mini_amd_a07:
++ case oxp_mini_amd_pro:
++ return write_to_ec(OXP_SENSOR_PWM_ENABLE_REG, PWM_MODE_AUTO);
++ default:
++ return -EINVAL;
++ }
+ }
+
+ /* Callbacks for hwmon interface */
+@@ -326,7 +370,22 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ case hwmon_fan:
+ switch (attr) {
+ case hwmon_fan_input:
+- return read_from_ec(OXP_SENSOR_FAN_REG, 2, val);
++ switch (board) {
++ case orange_pi_neo:
++ return read_from_ec(ORANGEPI_SENSOR_FAN_REG, 2, val);
++ case aok_zoe_a1:
++ case aya_neo_2:
++ case aya_neo_air:
++ case aya_neo_air_plus_mendo:
++ case aya_neo_air_pro:
++ case aya_neo_geek:
++ case oxp_mini_amd:
++ case oxp_mini_amd_a07:
++ case oxp_mini_amd_pro:
++ return read_from_ec(OXP_SENSOR_FAN_REG, 2, val);
++ default:
++ break;
++ }
+ default:
+ break;
+ }
+@@ -334,10 +393,14 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ case hwmon_pwm:
+ switch (attr) {
+ case hwmon_pwm_input:
+- ret = read_from_ec(OXP_SENSOR_PWM_REG, 1, val);
+- if (ret)
+- return ret;
+ switch (board) {
++ case orange_pi_neo:
++ ret = read_from_ec(ORANGEPI_SENSOR_PWM_REG, 1, val);
++ if (ret)
++ return ret;
++ /* scale from range [1-244] */
++ *val = ((*val - 1) * 254 / 243) + 1;
++ break;
+ case aya_neo_2:
+ case aya_neo_air:
+ case aya_neo_air_plus_mendo:
+@@ -345,16 +408,37 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ case aya_neo_geek:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
++ ret = read_from_ec(OXP_SENSOR_PWM_REG, 1, val);
++ if (ret)
++ return ret;
+ *val = (*val * 255) / 100;
+ break;
+ case oxp_mini_amd_pro:
+ case aok_zoe_a1:
+ default:
++ ret = read_from_ec(OXP_SENSOR_PWM_REG, 1, val);
++ if (ret)
++ return ret;
+ break;
+ }
+ return 0;
+ case hwmon_pwm_enable:
+- return read_from_ec(OXP_SENSOR_PWM_ENABLE_REG, 1, val);
++ switch (board) {
++ case orange_pi_neo:
++ return read_from_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, 1, val);
++ case aok_zoe_a1:
++ case aya_neo_2:
++ case aya_neo_air:
++ case aya_neo_air_plus_mendo:
++ case aya_neo_air_pro:
++ case aya_neo_geek:
++ case oxp_mini_amd:
++ case oxp_mini_amd_a07:
++ case oxp_mini_amd_pro:
++ return read_from_ec(OXP_SENSOR_PWM_ENABLE_REG, 1, val);
++ default:
++ break;
++ }
+ default:
+ break;
+ }
+@@ -381,6 +465,10 @@ static int oxp_platform_write(struct device *dev, enum hwmon_sensor_types type,
+ if (val < 0 || val > 255)
+ return -EINVAL;
+ switch (board) {
++ case orange_pi_neo:
++ /* scale to range [1-244] */
++ val = ((val - 1) * 243 / 254) + 1;
++ return write_to_ec(ORANGEPI_SENSOR_PWM_REG, val);
+ case aya_neo_2:
+ case aya_neo_air:
+ case aya_neo_air_plus_mendo:
+@@ -389,13 +477,13 @@ static int oxp_platform_write(struct device *dev, enum hwmon_sensor_types type,
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
+ val = (val * 100) / 255;
+- break;
++ return write_to_ec(OXP_SENSOR_PWM_REG, val);
+ case aok_zoe_a1:
+ case oxp_mini_amd_pro:
++ return write_to_ec(OXP_SENSOR_PWM_REG, val);
+ default:
+ break;
+ }
+- return write_to_ec(OXP_SENSOR_PWM_REG, val);
+ default:
+ break;
+ }
+--
+2.45.2
+
+
+From 78c8501d4c2dc4dcc2125dcf130723b1fbe72e1c Mon Sep 17 00:00:00 2001
+From: "Derek J. Clark" <derekjohn.clark@gmail.com>
+Date: Wed, 27 Mar 2024 18:50:22 -0700
+Subject: [PATCH 2/4] oxp-sensors: hwmon: Add OneXPlayer 2 and OneXFly
+
+Add OneXPlayer 2 series and OneXFly handhelds. The 2 series uses a new register
+for turbo button takeover. While at it, adjust formatting of some constants and
+reorder all cases alphabetically for consistency. Rename some constants for
+disambiguation.
+---
+ drivers/hwmon/oxp-sensors.c | 90 ++++++++++++++++++++++++++++++-------
+ 1 file changed, 74 insertions(+), 16 deletions(-)
+
+diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
+index ebca28b4a..cf8ba1cc6 100644
+--- a/drivers/hwmon/oxp-sensors.c
++++ b/drivers/hwmon/oxp-sensors.c
+@@ -47,6 +47,8 @@ enum oxp_board {
+ aya_neo_air_pro,
+ aya_neo_geek,
+ orange_pi_neo,
++ oxp_2,
++ oxp_fly,
+ oxp_mini_amd,
+ oxp_mini_amd_a07,
+ oxp_mini_amd_pro,
+@@ -66,16 +68,16 @@ static enum oxp_board board;
+ #define PWM_MODE_AUTO 0x00
+ #define PWM_MODE_MANUAL 0x01
+ /* Turbo button takeover function
+- * Older boards have different values and EC registers
++ * Different boards have different values and EC registers
+ * for the same function
+ */
+-#define OXP_OLD_TURBO_SWITCH_REG 0x1E
+-#define OXP_OLD_TURBO_TAKE_VAL 0x01
+-#define OXP_OLD_TURBO_RETURN_VAL 0x00
++#define OXP_TURBO_SWITCH_REG 0xF1
++#define OXP_TURBO_TAKE_VAL 0x40
++#define OXP_TURBO_RETURN_VAL 0x00 /* Common return val */
+
+-#define OXP_TURBO_SWITCH_REG 0xF1
+-#define OXP_TURBO_TAKE_VAL 0x40
+-#define OXP_TURBO_RETURN_VAL 0x00
++#define OXP_2_TURBO_SWITCH_REG 0xEB /* OXP2 and OXP2 Pro */
++#define OXP_MINI_TURBO_SWITCH_REG 0x1E /* Mini AO7 */
++#define OXP_MINI_TURBO_TAKE_VAL 0x01
+
+ static const struct dmi_system_id dmi_table[] = {
+ {
+@@ -141,6 +143,34 @@ static const struct dmi_system_id dmi_table[] = {
+ },
+ .driver_data = (void *)oxp_mini_amd,
+ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER 2 ARP23"),
++ },
++ .driver_data = (void *)oxp_2,
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER 2 PRO ARP23P"),
++ },
++ .driver_data = (void *)oxp_2,
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER 2 PRO ARP23P EVA-01"),
++ },
++ .driver_data = (void *)oxp_2,
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER F1"),
++ },
++ .driver_data = (void *)oxp_fly,
++ },
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
+@@ -206,14 +236,19 @@ static int tt_toggle_enable(void)
+
+ switch (board) {
+ case oxp_mini_amd_a07:
+- reg = OXP_OLD_TURBO_SWITCH_REG;
+- val = OXP_OLD_TURBO_TAKE_VAL;
++ reg = OXP_MINI_TURBO_SWITCH_REG;
++ val = OXP_MINI_TURBO_TAKE_VAL;
+ break;
+- case oxp_mini_amd_pro:
+ case aok_zoe_a1:
++ case oxp_fly:
++ case oxp_mini_amd_pro:
+ reg = OXP_TURBO_SWITCH_REG;
+ val = OXP_TURBO_TAKE_VAL;
+ break;
++ case oxp_2:
++ reg = OXP_2_TURBO_SWITCH_REG;
++ val = OXP_TURBO_TAKE_VAL;
++ break;
+ default:
+ return -EINVAL;
+ }
+@@ -227,14 +262,19 @@ static int tt_toggle_disable(void)
+
+ switch (board) {
+ case oxp_mini_amd_a07:
+- reg = OXP_OLD_TURBO_SWITCH_REG;
+- val = OXP_OLD_TURBO_RETURN_VAL;
++ reg = OXP_MINI_TURBO_SWITCH_REG;
++ val = OXP_TURBO_RETURN_VAL;
+ break;
+- case oxp_mini_amd_pro:
+ case aok_zoe_a1:
++ case oxp_fly:
++ case oxp_mini_amd_pro:
+ reg = OXP_TURBO_SWITCH_REG;
+ val = OXP_TURBO_RETURN_VAL;
+ break;
++ case oxp_2:
++ reg = OXP_2_TURBO_SWITCH_REG;
++ val = OXP_TURBO_RETURN_VAL;
++ break;
+ default:
+ return -EINVAL;
+ }
+@@ -247,6 +287,8 @@ static umode_t tt_toggle_is_visible(struct kobject *kobj,
+ {
+ switch (board) {
+ case aok_zoe_a1:
++ case oxp_2:
++ case oxp_fly:
+ case oxp_mini_amd_a07:
+ case oxp_mini_amd_pro:
+ return attr->mode;
+@@ -287,12 +329,16 @@ static ssize_t tt_toggle_show(struct device *dev,
+
+ switch (board) {
+ case oxp_mini_amd_a07:
+- reg = OXP_OLD_TURBO_SWITCH_REG;
++ reg = OXP_MINI_TURBO_SWITCH_REG;
+ break;
+- case oxp_mini_amd_pro:
+ case aok_zoe_a1:
++ case oxp_fly:
++ case oxp_mini_amd_pro:
+ reg = OXP_TURBO_SWITCH_REG;
+ break;
++ case oxp_2:
++ reg = OXP_2_TURBO_SWITCH_REG;
++ break;
+ default:
+ return -EINVAL;
+ }
+@@ -320,6 +366,8 @@ static int oxp_pwm_enable(void)
+ case aya_neo_geek:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
++ case oxp_2:
++ case oxp_fly:
+ case oxp_mini_amd_pro:
+ return write_to_ec(OXP_SENSOR_PWM_ENABLE_REG, PWM_MODE_MANUAL);
+ default:
+@@ -340,6 +388,8 @@ static int oxp_pwm_disable(void)
+ case aya_neo_geek:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
++ case oxp_2:
++ case oxp_fly:
+ case oxp_mini_amd_pro:
+ return write_to_ec(OXP_SENSOR_PWM_ENABLE_REG, PWM_MODE_AUTO);
+ default:
+@@ -381,6 +431,8 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ case aya_neo_geek:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
++ case oxp_2:
++ case oxp_fly:
+ case oxp_mini_amd_pro:
+ return read_from_ec(OXP_SENSOR_FAN_REG, 2, val);
+ default:
+@@ -413,8 +465,10 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ return ret;
+ *val = (*val * 255) / 100;
+ break;
+- case oxp_mini_amd_pro:
+ case aok_zoe_a1:
++ case oxp_2:
++ case oxp_fly:
++ case oxp_mini_amd_pro:
+ default:
+ ret = read_from_ec(OXP_SENSOR_PWM_REG, 1, val);
+ if (ret)
+@@ -434,6 +488,8 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ case aya_neo_geek:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
++ case oxp_2:
++ case oxp_fly:
+ case oxp_mini_amd_pro:
+ return read_from_ec(OXP_SENSOR_PWM_ENABLE_REG, 1, val);
+ default:
+@@ -479,6 +535,8 @@ static int oxp_platform_write(struct device *dev, enum hwmon_sensor_types type,
+ val = (val * 100) / 255;
+ return write_to_ec(OXP_SENSOR_PWM_REG, val);
+ case aok_zoe_a1:
++ case oxp_2:
++ case oxp_fly:
+ case oxp_mini_amd_pro:
+ return write_to_ec(OXP_SENSOR_PWM_REG, val);
+ default:
+--
+2.45.2
+
+
+From f12bdbb992c66b8f1320372892da116e95a7f104 Mon Sep 17 00:00:00 2001
+From: "Derek J. Clark" <derekjohn.clark@gmail.com>
+Date: Thu, 28 Mar 2024 19:50:40 +0100
+Subject: [PATCH 3/4] oxp-sensors: hwmon: Add support for AYANEO 2s, air 1s,
+ geek 1s and kun models
+
+---
+ drivers/hwmon/oxp-sensors.c | 48 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 48 insertions(+)
+
+diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
+index cf8ba1cc6..e8d9fea9d 100644
+--- a/drivers/hwmon/oxp-sensors.c
++++ b/drivers/hwmon/oxp-sensors.c
+@@ -42,10 +42,14 @@ static bool unlock_global_acpi_lock(void)
+ enum oxp_board {
+ aok_zoe_a1 = 1,
+ aya_neo_2,
++ aya_neo_2s,
+ aya_neo_air,
++ aya_neo_air_1s,
+ aya_neo_air_plus_mendo,
+ aya_neo_air_pro,
+ aya_neo_geek,
++ aya_neo_geek_1s,
++ aya_neo_kun,
+ orange_pi_neo,
+ oxp_2,
+ oxp_fly,
+@@ -101,6 +105,13 @@ static const struct dmi_system_id dmi_table[] = {
+ },
+ .driver_data = (void *)aya_neo_2,
+ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "AYANEO 2S"),
++ },
++ .driver_data = (void *)aya_neo_2s,
++ },
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
+@@ -115,6 +126,13 @@ static const struct dmi_system_id dmi_table[] = {
+ },
+ .driver_data = (void *)aya_neo_air_plus_mendo,
+ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "AIR 1S"),
++ },
++ .driver_data = (void *)aya_neo_air_1s,
++ },
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
+@@ -129,6 +147,20 @@ static const struct dmi_system_id dmi_table[] = {
+ },
+ .driver_data = (void *)aya_neo_geek,
+ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "GEEK 1S"),
++ },
++ .driver_data = (void *)aya_neo_geek_1s,
++ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "KUN"),
++ },
++ .driver_data = (void *)aya_neo_kun,
++ },
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "OrangePi"),
+@@ -360,10 +392,14 @@ static int oxp_pwm_enable(void)
+ return write_to_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, PWM_MODE_MANUAL);
+ case aok_zoe_a1:
+ case aya_neo_2:
++ case aya_neo_2s:
+ case aya_neo_air:
++ case aya_neo_air_1s:
+ case aya_neo_air_plus_mendo:
+ case aya_neo_air_pro:
+ case aya_neo_geek:
++ case aya_neo_geek_1s:
++ case aya_neo_kun:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
+ case oxp_2:
+@@ -382,10 +418,14 @@ static int oxp_pwm_disable(void)
+ return write_to_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, PWM_MODE_AUTO);
+ case aok_zoe_a1:
+ case aya_neo_2:
++ case aya_neo_2s:
+ case aya_neo_air:
++ case aya_neo_air_1s:
+ case aya_neo_air_plus_mendo:
+ case aya_neo_air_pro:
+ case aya_neo_geek:
++ case aya_neo_geek_1s:
++ case aya_neo_kun:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
+ case oxp_2:
+@@ -425,10 +465,14 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ return read_from_ec(ORANGEPI_SENSOR_FAN_REG, 2, val);
+ case aok_zoe_a1:
+ case aya_neo_2:
++ case aya_neo_2s:
+ case aya_neo_air:
++ case aya_neo_air_1s:
+ case aya_neo_air_plus_mendo:
+ case aya_neo_air_pro:
+ case aya_neo_geek:
++ case aya_neo_geek_1s:
++ case aya_neo_kun:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
+ case oxp_2:
+@@ -482,10 +526,14 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ return read_from_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, 1, val);
+ case aok_zoe_a1:
+ case aya_neo_2:
++ case aya_neo_2s:
+ case aya_neo_air:
++ case aya_neo_air_1s:
+ case aya_neo_air_plus_mendo:
+ case aya_neo_air_pro:
+ case aya_neo_geek:
++ case aya_neo_geek_1s:
++ case aya_neo_kun:
+ case oxp_mini_amd:
+ case oxp_mini_amd_a07:
+ case oxp_2:
+--
+2.45.2
+
+
+From 61740ea3d49721fa86f6a0085029f8f4f68ae916 Mon Sep 17 00:00:00 2001
+From: "Derek J. Clark" <derekjohn.clark@gmail.com>
+Date: Wed, 27 Mar 2024 18:58:59 -0700
+Subject: [PATCH 4/4] oxp-sensors: hwmon: Add GPD Win Mini
+
+Add GPD Win Mini. GPD devices don't have a separate enable register, the PWM
+register is used for this purpose. A write value of 0 puts the PWM into auto
+mode, writing anything 1-244 puts the PWM into manual mode, and 245-255 are
+undefined. We scale to 1-255 and handle manual by writing a value to 70% as a
+common sense default.
+---
+ drivers/hwmon/oxp-sensors.c | 43 +++++++++++++++++++++++++++++++++++++
+ 1 file changed, 43 insertions(+)
+
+diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
+index e8d9fea9d..11dec1b31 100644
+--- a/drivers/hwmon/oxp-sensors.c
++++ b/drivers/hwmon/oxp-sensors.c
+@@ -50,6 +50,7 @@ enum oxp_board {
+ aya_neo_geek,
+ aya_neo_geek_1s,
+ aya_neo_kun,
++ gpd_win_mini,
+ orange_pi_neo,
+ oxp_2,
+ oxp_fly,
+@@ -69,8 +70,19 @@ static enum oxp_board board;
+ #define ORANGEPI_SENSOR_PWM_ENABLE_REG 0x40 /* PWM enable is 1 register long */
+ #define ORANGEPI_SENSOR_PWM_REG 0x38 /* PWM reading is 1 register long */
+
++/* GPD devices don't have a separate enable register for the fan.
++ * For the PWM register, 0 is auto, 1+ is a manual value, up to 255
++ * depending on the specific model. This driver will scale to 0-255
++ * and treat PWM enable without a value as "set to manual, 70%."
++ * The mini uses the same fan register as the OrangePi NEO.
++ */
++#define GPD_MINI_SENSOR_PWM_REG 0x7A /* PWM reading is 1 register long */
++/* Values for fan auto mode */
+ #define PWM_MODE_AUTO 0x00
++
++ /* Values for fan manual mode */
+ #define PWM_MODE_MANUAL 0x01
++#define GPD_MINI_PWM_MODE_MANUAL 0xAA /* 70% */
+ /* Turbo button takeover function
+ * Different boards have different values and EC registers
+ * for the same function
+@@ -161,6 +173,13 @@ static const struct dmi_system_id dmi_table[] = {
+ },
+ .driver_data = (void *)aya_neo_kun,
+ },
++ {
++ .matches = {
++ DMI_MATCH(DMI_BOARD_VENDOR, "GPD"),
++ DMI_EXACT_MATCH(DMI_BOARD_NAME, "G1617-01"),
++ },
++ .driver_data = (void *)gpd_win_mini,
++ },
+ {
+ .matches = {
+ DMI_MATCH(DMI_BOARD_VENDOR, "OrangePi"),
+@@ -388,6 +407,11 @@ static DEVICE_ATTR_RW(tt_toggle);
+ static int oxp_pwm_enable(void)
+ {
+ switch (board) {
++ /* GPD has no separate enable register, instead, set the fan to
++ * a safe default.
++ */
++ case gpd_win_mini:
++ return write_to_ec(GPD_MINI_SENSOR_PWM_REG, GPD_MINI_PWM_MODE_MANUAL);
+ case orange_pi_neo:
+ return write_to_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, PWM_MODE_MANUAL);
+ case aok_zoe_a1:
+@@ -414,6 +438,8 @@ static int oxp_pwm_enable(void)
+ static int oxp_pwm_disable(void)
+ {
+ switch (board) {
++ case gpd_win_mini:
++ return write_to_ec(GPD_MINI_SENSOR_PWM_REG, PWM_MODE_AUTO);
+ case orange_pi_neo:
+ return write_to_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, PWM_MODE_AUTO);
+ case aok_zoe_a1:
+@@ -461,6 +487,7 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ switch (attr) {
+ case hwmon_fan_input:
+ switch (board) {
++ case gpd_win_mini:
+ case orange_pi_neo:
+ return read_from_ec(ORANGEPI_SENSOR_FAN_REG, 2, val);
+ case aok_zoe_a1:
+@@ -490,6 +517,14 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ switch (attr) {
+ case hwmon_pwm_input:
+ switch (board) {
++ case gpd_win_mini:
++ ret = read_from_ec(GPD_MINI_SENSOR_PWM_REG, 1, val);
++ if (ret)
++ return ret;
++ if (*val != PWM_MODE_AUTO)
++ /* scale from range [1-244] */
++ *val = ((*val - 1) * 254 / 243) + 1;
++ break;
+ case orange_pi_neo:
+ ret = read_from_ec(ORANGEPI_SENSOR_PWM_REG, 1, val);
+ if (ret)
+@@ -522,6 +557,10 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
+ return 0;
+ case hwmon_pwm_enable:
+ switch (board) {
++ case gpd_win_mini:
++ ret = read_from_ec(GPD_MINI_SENSOR_PWM_REG, 1, val);
++ *val = (*val != PWM_MODE_AUTO);
++ return ret;
+ case orange_pi_neo:
+ return read_from_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, 1, val);
+ case aok_zoe_a1:
+@@ -569,6 +608,10 @@ static int oxp_platform_write(struct device *dev, enum hwmon_sensor_types type,
+ if (val < 0 || val > 255)
+ return -EINVAL;
+ switch (board) {
++ case gpd_win_mini:
++ /* scale to range [1-244] */
++ val = ((val - 1) * 243 / 254) + 1;
++ return write_to_ec(GPD_MINI_SENSOR_PWM_REG, val);
+ case orange_pi_neo:
+ /* scale to range [1-244] */
+ val = ((val - 1) * 243 / 254) + 1;
+--
+2.45.2
+
diff --git a/SPECS/kernel.spec b/SPECS/kernel.spec
index 034e777..714645d 100644
--- a/SPECS/kernel.spec
+++ b/SPECS/kernel.spec
@@ -160,18 +160,18 @@ Summary: The Linux kernel
# the --with-release option overrides this setting.)
%define debugbuildsenabled 1
%define buildid .fsync
-%define specrpmversion 6.9.11
-%define specversion 6.9.11
+%define specrpmversion 6.9.12
+%define specversion 6.9.12
%define patchversion 6.9
%define pkgrelease 200
%define kversion 6
-%define tarfile_release 6.9.11
+%define tarfile_release 6.9.12
# This is needed to do merge window version magic
%define patchlevel 9
# This allows pkg_release to have configurable %%{?dist} tag
%define specrelease 201%{?buildid}%{?dist}
# This defines the kabi tarball version
-%define kabiversion 6.9.11
+%define kabiversion 6.9.12
# If this variable is set to 1, a bpf selftests build failure will cause a
# fatal kernel package build error
@@ -1046,6 +1046,7 @@ Patch413: amdgpu-ignore-min-pcap.patch
Patch414: 0001-add-revoke_all-ioctl-to-release-event-and-joy-nodes-.patch
# Chimera speaker fixes
Patch415: v0-speaker-multifix.patch
+Patch416: v0-oxp-sensors.patch
# Allow to set custom USB pollrate for specific devices like so:
# usbcore.interrupt_interval_override=045e:00db:16,1bcf:0005:1
@@ -1949,6 +1950,7 @@ ApplyOptionalPatch amdgpu-ignore-min-pcap.patch
ApplyOptionalPatch 0001-add-revoke_all-ioctl-to-release-event-and-joy-nodes-.patch
# Chimera speaker fixes
ApplyOptionalPatch v0-speaker-multifix.patch
+ApplyOptionalPatch v0-oxp-sensors.patch
# Allow to set custom USB pollrate for specific devices like so:
# usbcore.interrupt_interval_override=045e:00db:16,1bcf:0005:1
@@ -4129,8 +4131,11 @@ fi\
#
#
%changelog
-* Sun Jul 28 2024 Jan200101 <sentrycraft123@gmail.com> - 6.9.11-201.fsync
-- kernel-fsync v6.9.11
+* Mon Jul 29 2024 Jan200101 <sentrycraft123@gmail.com> - 6.9.12-201.fsync
+- kernel-fsync v6.9.12
+
+* Sat Jul 27 2024 Justin M. Forbes <jforbes@fedoraproject.org> [6.9.12-0]
+- Linux v6.9.12
* Thu Jul 25 2024 Augusto Caringi <acaringi@redhat.com> [6.9.11-0]
- Linux v6.9.11