Re: [PATCH v2] hwmon: (oxp-sensors) Add AOK ZOE and Mini PRO

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

 



On Fri, Nov 25, 2022 at 08:49:01AM -0300, Joaquín Ignacio Aramendía wrote:
> Add support for the AOK ZOE A1 and OXP Mini PRO handheld devices.
> DMI strings are added to this driver since the same EC layout is used and
> has similar specs as the OXP mini AMD.
> 
> The added devices are:
> - OneXPlayer mini PRO (AMD 6800U)
> - AOK ZOE A1 (AMD 6800U)
> 
> Signed-off-by: Joaquín Ignacio Aramendía <samsagax@xxxxxxxxx>

Dropped v1 and applied v2.

Guenter

> ---
> Corrected commit message (AOK ZOE description)
> Removed unhelpful dev_info message
> ---
>  Documentation/hwmon/oxp-sensors.rst | 16 +++++++++---
>  drivers/hwmon/oxp-sensors.c         | 40 ++++++++++++++++++++++++-----
>  2 files changed, 47 insertions(+), 9 deletions(-)
> 
> 
> base-commit: 27fea302952d8c90cafbdbee96bafeca03544401
> --
> 2.38.1
> 
> diff --git a/Documentation/hwmon/oxp-sensors.rst b/Documentation/hwmon/oxp-sensors.rst
> index f612dddc964a..39c588ec5c50 100644
> --- a/Documentation/hwmon/oxp-sensors.rst
> +++ b/Documentation/hwmon/oxp-sensors.rst
> @@ -12,9 +12,19 @@ Description:
>  One X Player devices from One Netbook provide fan readings and fan control
>  through its Embedded Controller.
> 
> -Currently only supports AMD boards from the One X Player lineup. 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.
> +Currently only supports AMD boards from the One X Player and AOK ZOE lineup.
> +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.
> +
> +Supported devices
> +-----------------
> +
> +Currently the driver supports the following handhelds:
> +
> + - AOK ZOE A1
> + - OneXPlayer AMD
> + - OneXPlayer mini AMD
> + - OneXPlayer mini AMD PRO
> 
>  Sysfs entries
>  -------------
> diff --git a/drivers/hwmon/oxp-sensors.c b/drivers/hwmon/oxp-sensors.c
> index da54a38f4454..a2bfcf3f9909 100644
> --- a/drivers/hwmon/oxp-sensors.c
> +++ b/drivers/hwmon/oxp-sensors.c
> @@ -3,13 +3,14 @@
>   * Platform driver for OXP Handhelds that expose fan reading and control
>   * via hwmon sysfs.
>   *
> - * All boards have the same DMI strings and they are told appart by the
> + * Old boards have the same DMI strings and they are told appart by the
>   * boot cpu vendor (Intel/AMD). Currently only AMD boards are supported
>   * but the code is made to be simple to add other handheld boards in the
>   * future.
> - * Fan control is provided via pwm interface in the range [0-255]. AMD
> - * boards use [0-100] as range in the EC, the written value is scaled to
> - * accommodate for that.
> + * Fan control is provided via pwm interface in the range [0-255].
> + * Old AMD boards use [0-100] as range in the EC, the written value is
> + * scaled to accommodate for that. Newer boards like the mini PRO and
> + * AOK ZOE are not scaled but have the same EC layout.
>   *
>   * Copyright (C) 2022 Joaquín I. Aramendía <samsagax@xxxxxxxxx>
>   */
> @@ -39,16 +40,39 @@ static bool unlock_global_acpi_lock(void)
>  	return ACPI_SUCCESS(acpi_release_global_lock(oxp_mutex));
>  }
> 
> +enum oxp_board {
> +	aok_zoe_a1 = 1,
> +	oxp_mini_amd,
> +	oxp_mini_amd_pro,
> +};
> +
> +static enum oxp_board board;
> +
>  #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 */
> 
>  static const struct dmi_system_id dmi_table[] = {
> +	{
> +		.matches = {
> +			DMI_MATCH(DMI_BOARD_VENDOR, "AOKZOE"),
> +			DMI_EXACT_MATCH(DMI_BOARD_NAME, "AOKZOE A1 AR07"),
> +		},
> +		.driver_data = (void *) &(enum oxp_board) {aok_zoe_a1},
> +	},
>  	{
>  		.matches = {
>  			DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
>  			DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONE XPLAYER"),
>  		},
> +		.driver_data = (void *) &(enum oxp_board) {oxp_mini_amd},
> +	},
> +	{
> +		.matches = {
> +			DMI_MATCH(DMI_BOARD_VENDOR, "ONE-NETBOOK"),
> +			DMI_EXACT_MATCH(DMI_BOARD_NAME, "ONEXPLAYER Mini Pro"),
> +		},
> +		.driver_data = (void *) &(enum oxp_board) {oxp_mini_amd_pro},
>  	},
>  	{},
>  };
> @@ -137,7 +161,8 @@ static int oxp_platform_read(struct device *dev, enum hwmon_sensor_types type,
>  			ret = read_from_ec(OXP_SENSOR_PWM_REG, 2, val);
>  			if (ret)
>  				return ret;
> -			*val = (*val * 255) / 100;
> +			if (board == oxp_mini_amd)
> +				*val = (*val * 255) / 100;
>  			return 0;
>  		case hwmon_pwm_enable:
>  			return read_from_ec(OXP_SENSOR_PWM_ENABLE_REG, 1, val);
> @@ -166,7 +191,8 @@ static int oxp_platform_write(struct device *dev, enum hwmon_sensor_types type,
>  		case hwmon_pwm_input:
>  			if (val < 0 || val > 255)
>  				return -EINVAL;
> -			val = (val * 100) / 255;
> +			if (board == oxp_mini_amd)
> +				val = (val * 100) / 255;
>  			return write_to_ec(dev, OXP_SENSOR_PWM_REG, val);
>  		default:
>  			break;
> @@ -216,6 +242,8 @@ static int oxp_platform_probe(struct platform_device *pdev)
>  	if (!dmi_entry || boot_cpu_data.x86_vendor != X86_VENDOR_AMD)
>  		return -ENODEV;
> 
> +	board = *((enum oxp_board *) dmi_entry->driver_data);
> +
>  	hwdev = devm_hwmon_device_register_with_info(dev, "oxpec", NULL,
>  						     &oxp_ec_chip_info, NULL);



[Index of Archives]     [Linux Kernel Development]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux