public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/1] hwmon: (oxp-sensors) Add support for multiple new devices.
@ 2024-08-15  3:12 Derek J. Clark
  2024-08-15  3:12 ` [PATCH 1/1] " Derek J. Clark
  0 siblings, 1 reply; 4+ messages in thread
From: Derek J. Clark @ 2024-08-15  3:12 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Jean Delvare, Jonathan Corbet,
	Joaquín Ignacio Aramendía, Derek J . Clark, linux-hwmon,
	linux-doc, linux-kernel

This patch adds new devices from AYANEO, OneXPlayer and OrangePi. There are
also some formatting changes done for improving readability and making the
lists consistent bewtween the multiple functions, when it made sense to do 
so. These changes have been tested by multiple users since April of this
year as part of the ChimeraOS and Manjaro Handheld Edition kernels.

Derek J. Clark (1):
  Add support for multiple new devices.

 Documentation/hwmon/oxp-sensors.rst |  33 ++--
 drivers/hwmon/oxp-sensors.c         | 273 +++++++++++++++++++++++++---
 2 files changed, 267 insertions(+), 39 deletions(-)

-- 
2.46.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/1] hwmon: (oxp-sensors) Add support for multiple new devices.
  2024-08-15  3:12 [PATCH 0/1] hwmon: (oxp-sensors) Add support for multiple new devices Derek J. Clark
@ 2024-08-15  3:12 ` Derek J. Clark
  2024-08-15 20:01   ` kernel test robot
  2024-08-15 23:46   ` Guenter Roeck
  0 siblings, 2 replies; 4+ messages in thread
From: Derek J. Clark @ 2024-08-15  3:12 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Jean Delvare, Jonathan Corbet,
	Joaquín Ignacio Aramendía, Derek J . Clark, linux-hwmon,
	linux-doc, linux-kernel

Add support for the OrangePi NEO-01. It 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 from 1-255 to maintain
compatibility with the existing interface.

Add OneXPlayer 2 series and OneXFly models. The 2 series uses a new
register for turbo button takeover. While at it, adjust formatting of some
constants and reorders all cases alphabetically for consistency. Rename
OXP_OLD constants to OXP_MINI for disambiguation.

Adds support for AYANEO models 2S, AIR 1S, Flip DS, Flip KB, GEEK 1S, and
KUN.

Signed-off-by: Derek J. Clark <derekjohn.clark@gmail.com>
---
 Documentation/hwmon/oxp-sensors.rst |  33 ++--
 drivers/hwmon/oxp-sensors.c         | 273 +++++++++++++++++++++++++---
 2 files changed, 267 insertions(+), 39 deletions(-)

diff --git a/Documentation/hwmon/oxp-sensors.rst b/Documentation/hwmon/oxp-sensors.rst
index 50618f064379..7b2a2b5d6e80 100644
--- a/Documentation/hwmon/oxp-sensors.rst
+++ b/Documentation/hwmon/oxp-sensors.rst
@@ -10,14 +10,12 @@ Authors:
 Description:
 ------------
 
-Handheld devices from One Netbook and Aya Neo provide fan readings and fan
+Handheld devices from OneNetbook and AYANEO provide fan readings and fan
 control through their embedded controllers.
 
-Currently only supports AMD boards from One X Player, AOK ZOE, and some Aya
-Neo devices. One X Player Intel boards could be supported if we could figure
-out the EC registers and values to write to since the EC layout and model is
-different. Aya Neo devices preceding the AIR may not be supportable as the EC
-model is different and do not appear to have manual control capabilities.
+Currently supports OneXPlayer AMD devices, AOKZOE, AYANEO, and OrangePi
+handheld devices. AYANEO devices preceding the AIR are not be supportable
+as the EC model is different and do not have manual control capabilities.
 
 Some models have a toggle for changing the behaviour of the "Turbo/Silent"
 button of the device. It will change the key event that it triggers with
@@ -31,20 +29,33 @@ Currently the driver supports the following handhelds:
 
  - AOK ZOE A1
  - AOK ZOE A1 PRO
- - Aya Neo 2
- - Aya Neo AIR
- - Aya Neo AIR Plus (Mendocino)
- - Aya Neo AIR Pro
- - Aya Neo Geek
+ - AYANEO 2
+ - AYANEO 2S
+ - AYANEO AIR
+ - AYANEO AIR 1S
+ - AYANEO AIR Plus (Mendocino)
+ - AYANEO AIR Pro
+ - AYANEO KUN
+ - AYANEO Geek
+ - AYANEO Geek 1S
+ - AYANEO Flip DS
+ - AYANEO Flip KB
+ - OneXPlayer 2
+ - OneXPlayer 2 Pro
  - OneXPlayer AMD
  - OneXPlayer mini AMD
  - OneXPlayer mini AMD PRO
+ - OneXPlayer OneXFly
+ - OrangePi NEO-01
 
 "Turbo/Silent" button behaviour toggle is only supported on:
  - AOK ZOE A1
  - AOK ZOE A1 PRO
+ - OneXPlayer 2
+ - OneXPlayer 2 Pro
  - OneXPlayer mini AMD (only with updated alpha BIOS)
  - OneXPlayer mini AMD PRO
+ - OneXPlayer OneXFly
 
 Sysfs entries
 -------------
diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
index 8d3b0f86cc57..701d46fde943 100644
--- a/drivers/hwmon/oxp-sensors.c
+++ b/drivers/hwmon/oxp-sensors.c
@@ -42,10 +42,18 @@ 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_flip,
 	aya_neo_geek,
+	aya_neo_geek_1s,
+	aya_neo_kun,
+	orange_pi_neo,
+	oxp_2,
+	oxp_fly,
 	oxp_mini_amd,
 	oxp_mini_amd_a07,
 	oxp_mini_amd_pro,
@@ -54,21 +62,29 @@ 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 PWM_MODE_AUTO                  0x00
+#define PWM_MODE_MANUAL                0x01
+
+/* OrangePi fan eding and PWM */
+#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 */
 
 /* 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_2_TURBO_SWITCH_REG         0xEB /* OXP2 and OXP2 Pro */
+#define OXP_MINI_TURBO_SWITCH_REG      0x1E /* Mini AO7 */
+
+#define OXP_TURBO_TAKE_VAL             0x40
+#define OXP_MINI_TURBO_TAKE_VAL        0x01
 
-#define OXP_TURBO_SWITCH_REG		0xF1
-#define OXP_TURBO_TAKE_VAL		0x40
-#define OXP_TURBO_RETURN_VAL		0x00
+#define OXP_TURBO_RETURN_VAL           0x00 /* Common return val */
 
 static const struct dmi_system_id dmi_table[] = {
 	{
@@ -92,6 +108,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"),
@@ -99,6 +122,13 @@ static const struct dmi_system_id dmi_table[] = {
 		},
 		.driver_data = (void *)aya_neo_air,
 	},
+	{
+		.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"),
@@ -113,6 +143,13 @@ static const struct dmi_system_id dmi_table[] = {
 		},
 		.driver_data = (void *)aya_neo_air_pro,
 	},
+	{
+		.matches = {
+			DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
+			DMI_MATCH(DMI_BOARD_NAME, "FLIP"),
+		},
+		.driver_data = (void *)aya_neo_flip,
+	},
 	{
 		.matches = {
 			DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
@@ -120,6 +157,27 @@ 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"),
+			DMI_EXACT_MATCH(DMI_BOARD_NAME, "NEO-01"),
+		},
+		.driver_data = (void *)orange_pi_neo,
+	},
 	{
 		.matches = {
 			DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
@@ -127,6 +185,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"),
@@ -192,14 +278,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;
 	}
@@ -213,14 +304,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;
 	}
@@ -233,6 +329,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;
@@ -273,12 +371,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;
 	}
@@ -295,12 +397,55 @@ 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_2s:
+	case aya_neo_air:
+	case aya_neo_air_plus_mendo:
+	case aya_neo_air_pro:
+	case aya_neo_flip:
+	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:
+	case oxp_fly:
+	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_2s:
+	case aya_neo_air:
+	case aya_neo_air_1s:
+	case aya_neo_air_plus_mendo:
+	case aya_neo_air_pro:
+	case aya_neo_flip:
+	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:
+	case oxp_fly:
+	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 +471,29 @@ 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_2s:
+			case aya_neo_air:
+			case aya_neo_air_1s:
+			case aya_neo_air_plus_mendo:
+			case aya_neo_air_pro:
+			case aya_neo_flip:
+			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:
+			case oxp_fly:
+			case oxp_mini_amd_pro:
+				return read_from_ec(OXP_SENSOR_FAN_REG, 2, val);
+			default:
+				break;
+			}
 		default:
 			break;
 		}
@@ -334,27 +501,66 @@ 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_2s:
 			case aya_neo_air:
+			case aya_neo_air_1s:
 			case aya_neo_air_plus_mendo:
 			case aya_neo_air_pro:
+			case aya_neo_flip:
 			case aya_neo_geek:
+			case aya_neo_geek_1s:
+			case aya_neo_kun:
 			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:
+			case oxp_2:
+			case oxp_fly:
+			case oxp_mini_amd_pro:
 			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_2s:
+			case aya_neo_air:
+			case aya_neo_air_1s:
+			case aya_neo_air_plus_mendo:
+			case aya_neo_air_pro:
+			case aya_neo_flip:
+			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:
+			case oxp_fly:
+			case oxp_mini_amd_pro:
+				return read_from_ec(OXP_SENSOR_PWM_ENABLE_REG, 1, val);
+			default:
+				break;
+			}
 		default:
 			break;
 		}
@@ -381,21 +587,32 @@ 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_2s:
 			case aya_neo_air:
+			case aya_neo_air_1s:
 			case aya_neo_air_plus_mendo:
 			case aya_neo_air_pro:
+			case aya_neo_flip:
 			case aya_neo_geek:
+			case aya_neo_geek_1s:
+			case aya_neo_kun:
 			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_2:
+			case oxp_fly:
 			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.46.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/1] hwmon: (oxp-sensors) Add support for multiple new devices.
  2024-08-15  3:12 ` [PATCH 1/1] " Derek J. Clark
@ 2024-08-15 20:01   ` kernel test robot
  2024-08-15 23:46   ` Guenter Roeck
  1 sibling, 0 replies; 4+ messages in thread
From: kernel test robot @ 2024-08-15 20:01 UTC (permalink / raw)
  To: Derek J. Clark, Guenter Roeck
  Cc: llvm, oe-kbuild-all, Jean Delvare, Jonathan Corbet,
	Joaquín Ignacio Aramendía, Derek J . Clark, linux-hwmon,
	linux-doc, linux-kernel

Hi Derek,

kernel test robot noticed the following build warnings:

[auto build test WARNING on groeck-staging/hwmon-next]
[also build test WARNING on linus/master v6.11-rc3 next-20240815]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:    https://github.com/intel-lab-lkp/linux/commits/Derek-J-Clark/hwmon-oxp-sensors-Add-support-for-multiple-new-devices/20240815-111550
base:   https://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git hwmon-next
patch link:    https://lore.kernel.org/r/20240815031358.21027-2-derekjohn.clark%40gmail.com
patch subject: [PATCH 1/1] hwmon: (oxp-sensors) Add support for multiple new devices.
config: i386-buildonly-randconfig-005-20240815 (https://download.01.org/0day-ci/archive/20240816/202408160329.TLNbIwRC-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240816/202408160329.TLNbIwRC-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408160329.TLNbIwRC-lkp@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/hwmon/oxp-sensors.c:497:3: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
     497 |                 default:
         |                 ^
   drivers/hwmon/oxp-sensors.c:497:3: note: insert 'break;' to avoid fall-through
     497 |                 default:
         |                 ^
         |                 break; 
   drivers/hwmon/oxp-sensors.c:564:3: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
     564 |                 default:
         |                 ^
   drivers/hwmon/oxp-sensors.c:564:3: note: insert 'break;' to avoid fall-through
     564 |                 default:
         |                 ^
         |                 break; 
   drivers/hwmon/oxp-sensors.c:616:3: warning: unannotated fall-through between switch labels [-Wimplicit-fallthrough]
     616 |                 default:
         |                 ^
   drivers/hwmon/oxp-sensors.c:616:3: note: insert 'break;' to avoid fall-through
     616 |                 default:
         |                 ^
         |                 break; 
   3 warnings generated.


vim +497 drivers/hwmon/oxp-sensors.c

   464	
   465	static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
   466				     u32 attr, int channel, long *val)
   467	{
   468		int ret;
   469	
   470		switch (type) {
   471		case hwmon_fan:
   472			switch (attr) {
   473			case hwmon_fan_input:
   474				switch (board) {
   475				case orange_pi_neo:
   476					return read_from_ec(ORANGEPI_SENSOR_FAN_REG, 2, val);
   477				case aok_zoe_a1:
   478				case aya_neo_2:
   479				case aya_neo_2s:
   480				case aya_neo_air:
   481				case aya_neo_air_1s:
   482				case aya_neo_air_plus_mendo:
   483				case aya_neo_air_pro:
   484				case aya_neo_flip:
   485				case aya_neo_geek:
   486				case aya_neo_geek_1s:
   487				case aya_neo_kun:
   488				case oxp_mini_amd:
   489				case oxp_mini_amd_a07:
   490				case oxp_2:
   491				case oxp_fly:
   492				case oxp_mini_amd_pro:
   493					return read_from_ec(OXP_SENSOR_FAN_REG, 2, val);
   494				default:
   495					break;
   496				}
 > 497			default:
   498				break;
   499			}
   500			break;
   501		case hwmon_pwm:
   502			switch (attr) {
   503			case hwmon_pwm_input:
   504				switch (board) {
   505				case orange_pi_neo:
   506					ret = read_from_ec(ORANGEPI_SENSOR_PWM_REG, 1, val);
   507					if (ret)
   508						return ret;
   509					/* scale from range [1-244] */
   510					*val = ((*val - 1) * 254 / 243) + 1;
   511					break;
   512				case aya_neo_2:
   513				case aya_neo_2s:
   514				case aya_neo_air:
   515				case aya_neo_air_1s:
   516				case aya_neo_air_plus_mendo:
   517				case aya_neo_air_pro:
   518				case aya_neo_flip:
   519				case aya_neo_geek:
   520				case aya_neo_geek_1s:
   521				case aya_neo_kun:
   522				case oxp_mini_amd:
   523				case oxp_mini_amd_a07:
   524					ret = read_from_ec(OXP_SENSOR_PWM_REG, 1, val);
   525					if (ret)
   526						return ret;
   527					*val = (*val * 255) / 100;
   528					break;
   529				case aok_zoe_a1:
   530				case oxp_2:
   531				case oxp_fly:
   532				case oxp_mini_amd_pro:
   533				default:
   534					ret = read_from_ec(OXP_SENSOR_PWM_REG, 1, val);
   535					if (ret)
   536						return ret;
   537					break;
   538				}
   539				return 0;
   540			case hwmon_pwm_enable:
   541				switch (board) {
   542				case orange_pi_neo:
   543					return read_from_ec(ORANGEPI_SENSOR_PWM_ENABLE_REG, 1, val);
   544				case aok_zoe_a1:
   545				case aya_neo_2:
   546				case aya_neo_2s:
   547				case aya_neo_air:
   548				case aya_neo_air_1s:
   549				case aya_neo_air_plus_mendo:
   550				case aya_neo_air_pro:
   551				case aya_neo_flip:
   552				case aya_neo_geek:
   553				case aya_neo_geek_1s:
   554				case aya_neo_kun:
   555				case oxp_mini_amd:
   556				case oxp_mini_amd_a07:
   557				case oxp_2:
   558				case oxp_fly:
   559				case oxp_mini_amd_pro:
   560					return read_from_ec(OXP_SENSOR_PWM_ENABLE_REG, 1, val);
   561				default:
   562					break;
   563				}
   564			default:
   565				break;
   566			}
   567			break;
   568		default:
   569			break;
   570		}
   571		return -EOPNOTSUPP;
   572	}
   573	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/1] hwmon: (oxp-sensors) Add support for multiple new devices.
  2024-08-15  3:12 ` [PATCH 1/1] " Derek J. Clark
  2024-08-15 20:01   ` kernel test robot
@ 2024-08-15 23:46   ` Guenter Roeck
  1 sibling, 0 replies; 4+ messages in thread
From: Guenter Roeck @ 2024-08-15 23:46 UTC (permalink / raw)
  To: Derek J. Clark
  Cc: Jean Delvare, Jonathan Corbet,
	Joaquín Ignacio Aramendía, linux-hwmon, linux-doc,
	linux-kernel

On 8/14/24 20:12, Derek J. Clark wrote:
> Add support for the OrangePi NEO-01. It 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 from 1-255 to maintain
> compatibility with the existing interface.
> 
> Add OneXPlayer 2 series and OneXFly models. The 2 series uses a new
> register for turbo button takeover. While at it, adjust formatting of some
> constants and reorders all cases alphabetically for consistency. Rename
> OXP_OLD constants to OXP_MINI for disambiguation.
> 
> Adds support for AYANEO models 2S, AIR 1S, Flip DS, Flip KB, GEEK 1S, and
> KUN.
> 
> Signed-off-by: Derek J. Clark <derekjohn.clark@gmail.com>
> ---
>   Documentation/hwmon/oxp-sensors.rst |  33 ++--
>   drivers/hwmon/oxp-sensors.c         | 273 +++++++++++++++++++++++++---
>   2 files changed, 267 insertions(+), 39 deletions(-)
> 
> diff --git a/Documentation/hwmon/oxp-sensors.rst b/Documentation/hwmon/oxp-sensors.rst
> index 50618f064379..7b2a2b5d6e80 100644
> --- a/Documentation/hwmon/oxp-sensors.rst
> +++ b/Documentation/hwmon/oxp-sensors.rst
> @@ -10,14 +10,12 @@ Authors:
>   Description:
>   ------------
>   
> -Handheld devices from One Netbook and Aya Neo provide fan readings and fan
> +Handheld devices from OneNetbook and AYANEO provide fan readings and fan
>   control through their embedded controllers.
>   
> -Currently only supports AMD boards from One X Player, AOK ZOE, and some Aya
> -Neo devices. One X Player Intel boards could be supported if we could figure
> -out the EC registers and values to write to since the EC layout and model is
> -different. Aya Neo devices preceding the AIR may not be supportable as the EC
> -model is different and do not appear to have manual control capabilities.
> +Currently supports OneXPlayer AMD devices, AOKZOE, AYANEO, and OrangePi
> +handheld devices. AYANEO devices preceding the AIR are not be supportable
> +as the EC model is different and do not have manual control capabilities.
>   
>   Some models have a toggle for changing the behaviour of the "Turbo/Silent"
>   button of the device. It will change the key event that it triggers with
> @@ -31,20 +29,33 @@ Currently the driver supports the following handhelds:
>   
>    - AOK ZOE A1
>    - AOK ZOE A1 PRO
> - - Aya Neo 2
> - - Aya Neo AIR
> - - Aya Neo AIR Plus (Mendocino)
> - - Aya Neo AIR Pro
> - - Aya Neo Geek
> + - AYANEO 2
> + - AYANEO 2S
> + - AYANEO AIR
> + - AYANEO AIR 1S
> + - AYANEO AIR Plus (Mendocino)
> + - AYANEO AIR Pro
> + - AYANEO KUN
> + - AYANEO Geek
> + - AYANEO Geek 1S
> + - AYANEO Flip DS
> + - AYANEO Flip KB
> + - OneXPlayer 2
> + - OneXPlayer 2 Pro
>    - OneXPlayer AMD
>    - OneXPlayer mini AMD
>    - OneXPlayer mini AMD PRO
> + - OneXPlayer OneXFly
> + - OrangePi NEO-01
>   
>   "Turbo/Silent" button behaviour toggle is only supported on:
>    - AOK ZOE A1
>    - AOK ZOE A1 PRO
> + - OneXPlayer 2
> + - OneXPlayer 2 Pro
>    - OneXPlayer mini AMD (only with updated alpha BIOS)
>    - OneXPlayer mini AMD PRO
> + - OneXPlayer OneXFly
>   
>   Sysfs entries
>   -------------
> diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
> index 8d3b0f86cc57..701d46fde943 100644
> --- a/drivers/hwmon/oxp-sensors.c
> +++ b/drivers/hwmon/oxp-sensors.c
> @@ -42,10 +42,18 @@ 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_flip,
>   	aya_neo_geek,
> +	aya_neo_geek_1s,
> +	aya_neo_kun,
> +	orange_pi_neo,
> +	oxp_2,
> +	oxp_fly,
>   	oxp_mini_amd,
>   	oxp_mini_amd_a07,
>   	oxp_mini_amd_pro,
> @@ -54,21 +62,29 @@ 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 PWM_MODE_AUTO                  0x00
> +#define PWM_MODE_MANUAL                0x01
> +
> +/* OrangePi fan eding and PWM */
> +#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 */
>   
>   /* 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_2_TURBO_SWITCH_REG         0xEB /* OXP2 and OXP2 Pro */
> +#define OXP_MINI_TURBO_SWITCH_REG      0x1E /* Mini AO7 */
> +
> +#define OXP_TURBO_TAKE_VAL             0x40
> +#define OXP_MINI_TURBO_TAKE_VAL        0x01
>   
> -#define OXP_TURBO_SWITCH_REG		0xF1
> -#define OXP_TURBO_TAKE_VAL		0x40
> -#define OXP_TURBO_RETURN_VAL		0x00
> +#define OXP_TURBO_RETURN_VAL           0x00 /* Common return val */
>   
>   static const struct dmi_system_id dmi_table[] = {
>   	{
> @@ -92,6 +108,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"),
> @@ -99,6 +122,13 @@ static const struct dmi_system_id dmi_table[] = {
>   		},
>   		.driver_data = (void *)aya_neo_air,
>   	},
> +	{
> +		.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"),
> @@ -113,6 +143,13 @@ static const struct dmi_system_id dmi_table[] = {
>   		},
>   		.driver_data = (void *)aya_neo_air_pro,
>   	},
> +	{
> +		.matches = {
> +			DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
> +			DMI_MATCH(DMI_BOARD_NAME, "FLIP"),
> +		},
> +		.driver_data = (void *)aya_neo_flip,
> +	},
>   	{
>   		.matches = {
>   			DMI_MATCH(DMI_BOARD_VENDOR, "AYANEO"),
> @@ -120,6 +157,27 @@ 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"),
> +			DMI_EXACT_MATCH(DMI_BOARD_NAME, "NEO-01"),
> +		},
> +		.driver_data = (void *)orange_pi_neo,
> +	},
>   	{
>   		.matches = {
>   			DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
> @@ -127,6 +185,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"),
> @@ -192,14 +278,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;
>   	}
> @@ -213,14 +304,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;
>   	}
> @@ -233,6 +329,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;
> @@ -273,12 +371,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;
>   	}
> @@ -295,12 +397,55 @@ 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_2s:
> +	case aya_neo_air:
> +	case aya_neo_air_plus_mendo:
> +	case aya_neo_air_pro:
> +	case aya_neo_flip:
> +	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:
> +	case oxp_fly:
> +	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_2s:
> +	case aya_neo_air:
> +	case aya_neo_air_1s:
> +	case aya_neo_air_plus_mendo:
> +	case aya_neo_air_pro:
> +	case aya_neo_flip:
> +	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:
> +	case oxp_fly:
> +	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 +471,29 @@ 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_2s:
> +			case aya_neo_air:
> +			case aya_neo_air_1s:
> +			case aya_neo_air_plus_mendo:
> +			case aya_neo_air_pro:
> +			case aya_neo_flip:
> +			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:
> +			case oxp_fly:
> +			case oxp_mini_amd_pro:
> +				return read_from_ec(OXP_SENSOR_FAN_REG, 2, val);
> +			default:
> +				break;
> +			}
>   		default:
>   			break;
>   		}
> @@ -334,27 +501,66 @@ 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_2s:
>   			case aya_neo_air:
> +			case aya_neo_air_1s:
>   			case aya_neo_air_plus_mendo:
>   			case aya_neo_air_pro:
> +			case aya_neo_flip:
>   			case aya_neo_geek:
> +			case aya_neo_geek_1s:
> +			case aya_neo_kun:
>   			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:
> +			case oxp_2:
> +			case oxp_fly:
> +			case oxp_mini_amd_pro:
>   			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_2s:
> +			case aya_neo_air:
> +			case aya_neo_air_1s:
> +			case aya_neo_air_plus_mendo:
> +			case aya_neo_air_pro:
> +			case aya_neo_flip:
> +			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:
> +			case oxp_fly:
> +			case oxp_mini_amd_pro:
> +				return read_from_ec(OXP_SENSOR_PWM_ENABLE_REG, 1, val);
> +			default:
> +				break;
> +			}

Subtle, but as 0-day reported there are some missing break;
statements. Please watch out for warnings seen when building
the driver.

Thanks,
Guenter


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2024-08-15 23:46 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-15  3:12 [PATCH 0/1] hwmon: (oxp-sensors) Add support for multiple new devices Derek J. Clark
2024-08-15  3:12 ` [PATCH 1/1] " Derek J. Clark
2024-08-15 20:01   ` kernel test robot
2024-08-15 23:46   ` Guenter Roeck

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox