From patchwork Sat Jul 23 03:38:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 12927078 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8D1AAC433EF for ; Sat, 23 Jul 2022 03:38:55 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231421AbiGWDiy (ORCPT ); Fri, 22 Jul 2022 23:38:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45732 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229699AbiGWDix (ORCPT ); Fri, 22 Jul 2022 23:38:53 -0400 Received: from mout.gmx.net (mout.gmx.net [212.227.15.19]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 84E3F30F57; Fri, 22 Jul 2022 20:38:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1658547517; bh=jsCktH2Bn26ZwcZVYKiIPsFC09HYGgUmcICp35CE6wQ=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=CBRkdoBK5jzSCVG6bMPZWjf3/fyN6F98O7XvkYO738MZcWfsWQqWPH/bEeQG5ajaF PxJ/KDlodzuG6RmeCv6Le8MPxnFsprR8F3Kub074V93qAWROVIX7iSoUSd9crYEhrb pS3UsKc4WtXUnLh58puxM6flcgRG7LCWU5FBSLpM= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from esprimo-mx.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx004 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MjS5A-1nm2o311Ra-00kz5s; Sat, 23 Jul 2022 05:38:37 +0200 From: Armin Wolf To: jdelvare@suse.com, linux@roeck-us.net Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] hwmon: Add pwmX_fan_channel attribute Date: Sat, 23 Jul 2022 05:38:19 +0200 Message-Id: <20220723033820.22612-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220723033820.22612-1-W_Armin@gmx.de> References: <20220723033820.22612-1-W_Armin@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:S7Bt8qp8QA4dr1j9OOvFH4ZHB6y1Qr5NU1MRcLWLCNk8rvNLVCN uFFr6E7dObsy46Z8hKXVbm171kKgfI8oNIsIW7zsk8VhfZEKaWnc95Lg55WiDDBmXaSn+mE 6nR4snVh+bvNRTPkTxva7Xq37g+4RxwXOpjJWBGgzPAnDUyfOp2WWd4W8yJk/9B6o9W6W40 DfAlMxLSDmY/bVJfZfDvg== X-UI-Out-Filterresults: notjunk:1;V03:K0:9u+4JG1hZX0=:wjyk+/3VWYoPCGK6WS9kuZ RI3U7QCijcnZF1R36/5Mq756LPZvl62QVN/T8g9sptoWbgTvalojmfLgvmHKYkkqTfQn/6cCq roinfBoVBl6KMdTpzwUzJRekmV2i2difFYakuN1BUWfGevGBp5stHFzRz1S4JQUsoMa85eQjB QzXNNacq2wAm9+xctk7M+hei/hztM37fydVsP/Kagmv247RL+tT39VyFNoRc4X03PvKjq8G82 ZHjVJ2JG79PA0UZQLkzS/jbC6MuVksaE4vsl3ZRfIKyrW49xHTJh3qqgASQfcw4FSmLKuYfL8 SXs3vGLJ9AYANpHJSewYD/FoVhXXnW+zDmZvmRCosPeR3IgDO14HADaO4Ez0UaZ7RJv8OGes0 EvYyjU8NgjNTrP51bxP4NzxcQYXK9TxhzKR6JzdQ8F7HKKnhD3DxPPWjHbQaHo//uhuVrAiRb 3qOFtoGLtQqNgTQb5EfRrrn7rKiQ/4fNODB9mAL9JW0QnJ2/UyQLVOXL9OebKifUiwJmBW/3M GOAiS7JFL414OBVwu91UAK4WFWoE+SK2POxt36NnCC/+P2THfqxgcqI5hWXOGuR94w8jk3zyA Kp6bhtu1KJpkoZm4J64kvo/aJNvpdMIkauVFPsM9NIphtkPEjCtBf+y6odMD6EGLt+5DHVBuF oQCy+8CrNTKkudfSJhXvYeGrb+mMQ1ZzFVATj9sdIc4BaVa5gHNTAArjXXgCiTKtZAtRMCwcs TWeUxSgDOEJOHt2EG0Bx0/a3LkylKDO4LGzMysFQoKH6YWiDlo4MzKYNp8HpCDD7T2E2eidM0 OSvwSC+D6E2aN4XC/4XJWXCtoWbHF3/K9Z4Ccs0d88gjIy1UBAfFUN9k7lyBJ88+z+TXhQQTy KVx2qbcwfXXCmL1HmPxdNvo8su2hjpdNT+4Xqvu+gbDhYOLobeU40Y6ZZqiipC5fE1Vco9dF/ x17F88FuWu5geFYeH0oezUoiE8hjWopi7YgPYxRlCa/aol9MNP6aDbxFxu8p5rC+fsh2A1E31 rsrThaORJ/Pn6OO9VzSgMRUb799z/qqssIYmrOwNFfSzN6IZXAJHaow54mDLWsl4kNRuvk7sc Ro0Ounci07E4KWZMfsOBZceQ1TDrCtK/567KyavFgec+tTjcNjIfj0iXg== Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org Until now, userspace software needs to guess which PWM channel is associated with which fan channel by probing each PWM output and watch for fan speed changes. This proccess is error-prone and unreliable. Some hwmon chips, especially firmware-based ones, already know which PWM output is associated with which fan channel. Allow such chips to export this knowledge to userspace. Signed-off-by: Armin Wolf --- Documentation/ABI/testing/sysfs-class-hwmon | 8 ++++++++ Documentation/hwmon/sysfs-interface.rst | 3 +++ drivers/hwmon/hwmon.c | 1 + include/linux/hwmon.h | 2 ++ 4 files changed, 14 insertions(+) -- 2.30.2 diff --git a/Documentation/ABI/testing/sysfs-class-hwmon b/Documentation/ABI/testing/sysfs-class-hwmon index 7271781a23b2..f3d653bcf736 100644 --- a/Documentation/ABI/testing/sysfs-class-hwmon +++ b/Documentation/ABI/testing/sysfs-class-hwmon @@ -315,6 +315,14 @@ Description: RW +What: /sys/class/hwmon/hwmonX/pwmY_fan_channel +Description: + Select which fan channel is controlled by this PWM output. + + Valid fan channel/PWM output combinations are chip-dependent. + + RW + What: /sys/class/hwmon/hwmonX/pwmY_auto_channels_temp Description: Select which temperature channels affect this PWM output in diff --git a/Documentation/hwmon/sysfs-interface.rst b/Documentation/hwmon/sysfs-interface.rst index 209626fb2405..17fcec03d3c5 100644 --- a/Documentation/hwmon/sysfs-interface.rst +++ b/Documentation/hwmon/sysfs-interface.rst @@ -209,6 +209,9 @@ PWM `pwm[1-*]_freq` Base PWM frequency in Hz. +`pwm[1-*]_fan_channel` + Select which fan channel is controlled by this PWM output. + `pwm[1-*]_auto_channels_temp` Select which temperature channels affect this PWM output in auto mode. diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index 2e2cd79d89eb..8c2d7574c461 100644 --- a/drivers/hwmon/hwmon.c +++ b/drivers/hwmon/hwmon.c @@ -604,6 +604,7 @@ static const char * const hwmon_pwm_attr_templates[] = { [hwmon_pwm_enable] = "pwm%d_enable", [hwmon_pwm_mode] = "pwm%d_mode", [hwmon_pwm_freq] = "pwm%d_freq", + [hwmon_pwm_fan_channel] = "pwm%d_fan_channel", [hwmon_pwm_auto_channels_temp] = "pwm%d_auto_channels_temp", }; diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h index 14325f93c6b2..9d40cc1e520f 100644 --- a/include/linux/hwmon.h +++ b/include/linux/hwmon.h @@ -332,6 +332,7 @@ enum hwmon_pwm_attributes { hwmon_pwm_enable, hwmon_pwm_mode, hwmon_pwm_freq, + hwmon_pwm_fan_channel, hwmon_pwm_auto_channels_temp, }; @@ -339,6 +340,7 @@ enum hwmon_pwm_attributes { #define HWMON_PWM_ENABLE BIT(hwmon_pwm_enable) #define HWMON_PWM_MODE BIT(hwmon_pwm_mode) #define HWMON_PWM_FREQ BIT(hwmon_pwm_freq) +#define HWMON_PWM_FAN_CHANNEL BIT(hwmon_pwm_fan_channel) #define HWMON_PWM_AUTO_CHANNELS_TEMP BIT(hwmon_pwm_auto_channels_temp) enum hwmon_intrusion_attributes { From patchwork Sat Jul 23 03:38:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 12927079 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 976B3C43334 for ; Sat, 23 Jul 2022 03:38:58 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232788AbiGWDi4 (ORCPT ); Fri, 22 Jul 2022 23:38:56 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45744 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232369AbiGWDiz (ORCPT ); Fri, 22 Jul 2022 23:38:55 -0400 Received: from mout.gmx.net (mout.gmx.net [212.227.15.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 613FF10FFD; Fri, 22 Jul 2022 20:38:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1658547518; bh=MBXn1mSzKXr07dHlRQkghNEdOJEuzq7EyPsMxlX1t64=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=HSjl2NJqaYxJrh7rjuiqICV8keiMEuUOB2RzHVdVdmcKjnElidtk5Dq5UZuHVyauz 7JJXXsRzGBIyZsCgM32HdbrHkVzdZvD6Juv65fmAsLjLyFOCzmB0W9t59uVa8VeTox OKm2YOSGrWXYNZOYoW0S7MRWuQpz1X5sKxht5u34= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from esprimo-mx.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MeCpR-1ngJ7R2Wff-00bL4j; Sat, 23 Jul 2022 05:38:38 +0200 From: Armin Wolf To: jdelvare@suse.com, linux@roeck-us.net Cc: linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] hwmon: (dell-smm) Add support for pwmX_fan_channel attribute Date: Sat, 23 Jul 2022 05:38:20 +0200 Message-Id: <20220723033820.22612-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220723033820.22612-1-W_Armin@gmx.de> References: <20220723033820.22612-1-W_Armin@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:wPeN1JJb3xvUYWpN4DN3qE04tkDVlsjCRc9no7P9GJpsaVHbCxW 4/jEKKbwOfJCheuVV9Mq7Cb0PW6AiZuew6EHLqUkNLyw8GLbphPMX1J3Xf5N5F/uTGJLG1J 0okA6crcvyJ9TktPO8CP3GvbqnHnU0tWxpDEoKcfIlwKg6CQ11zMzE4aHXt4vuyqKN/ZuzE Te3AHzDqEpiwBLOCwWx0g== X-UI-Out-Filterresults: notjunk:1;V03:K0:CuYyjPeY4Iw=:h0kzkYv/QDBtbjnxELLfZ4 Rkwz/af90d2p/d+4ZsjY/+HIjoJ6/tdPffgVUbkniEBSR1umMnjC8YJ1JCs3cqc2WwayCJLSK U8ODHFhPyGaR/gtDMSiz3F/QxqP9OYB5NRHTgHNpwIiUVOZZc6NsLQ6LGDKDrQzzqhB70QJRG 2+I/JGXsbh0n4z4YA+4ST71XsBdUnMo+bNLkdN2AeSrRpQOlyJt0tzDrIOnkD4wFgJqjoGzxI PwIp8+OiFMxp0TCETioEcw/hP8KaOiJ77aS8MFporTV3pbWmJW/wEBycPZ8rrurRYADw6Q/3t 6iJCH+cxkTLXl9EpIxEhQYWSEk0MtsgBaDWXtFORBWPl0BlBLxC28iTQf38nylgcfyaCPT6bp bdUZxx5LrH0w01TzBgfzlAzb/uraAsD9g1YikC5TemgssoOtiofqMCl3ha7o1TkOU8KPQUNmv 2M/xvO5TANFmi0mHIJ1G+DJ2p6SFUKUUPmf4iK5yakGEhv1fMcUUo7fyKNhclq4crJCPtSnQ8 +VWbFMNDaO4mxlWfuZvC4SQLqnp5nziWq/lyWAqmkLDw8Ne4wQVWWxlrGYmPG+ewJZoTucocL RqDa/NxZCM1/ZJf8wQquB79HoOxK91dXA+Ha+yio+1fr2IFNY1nx7vb+ZQtdkBNOSH9WSOW5/ mtbBE8A8fxQdVqolameJuQB79EDbJYwgU+xk30snBFy5JNXhV7gXVCJuUdY0xjQh68K7GXQ6e Th4XMzdyySNF9YdmBy/n9AZJsI6NXqmsqL56NYF64Cp52g+Kf0eVpwi0l3kxyKbCz0D57/B46 9SO/YjVFbcNEoQyUW7tlCcUEVU3bWxDfv1XZehmzi9LLTHQwKxfYVrESxpaoN1a9VovHZ4w5b QYcWzihz9yH4xB48qTT9z7N4jltrngheaqkh67RaHF8maqVxcTDcm+MZ3IC8zxS9XqRyXtUWw BzS0uX6NTRX1f57B7ft6NjSFwz1KlSkr5crrSmdIrK1+7mj6IQ/FefKl/K3mfJcNuzrCwGTAt Hf/4+lxklyE+XzQuMFQfzTmXJ5wbkeiqpS8wifSjYf5lFLaK20AAqrp8Tdgp5cHQ6BAg3Sa2H TsnVkMrovJ4vz65kkle2N5sc4DBMSdaC3FhtLicIm6VaunP3+KITGLORQ== Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org The SMM interface does not differentiate between fan channels and pwm channels, so each pwmX is associated with fanX_*. Inform userspace programs of this with the pwmX_fan_channel attribute. Tested on a Dell Inspiron 3505. Signed-off-by: Armin Wolf --- Documentation/hwmon/dell-smm-hwmon.rst | 1 + drivers/hwmon/dell-smm-hwmon.c | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) -- 2.30.2 diff --git a/Documentation/hwmon/dell-smm-hwmon.rst b/Documentation/hwmon/dell-smm-hwmon.rst index e5d85e40972c..2b0651c3f7c5 100644 --- a/Documentation/hwmon/dell-smm-hwmon.rst +++ b/Documentation/hwmon/dell-smm-hwmon.rst @@ -38,6 +38,7 @@ fan[1-3]_min RO Minimal Fan speed in RPM fan[1-3]_max RO Maximal Fan speed in RPM fan[1-3]_target RO Expected Fan speed in RPM pwm[1-3] RW Control the fan PWM duty-cycle. +pwm[1-3]_fan_channel RO Hints which PWM is connected to which fan pwm1_enable WO Enable or disable automatic BIOS fan control (not supported on all laptops, see below for details). diff --git a/drivers/hwmon/dell-smm-hwmon.c b/drivers/hwmon/dell-smm-hwmon.c index 7f8d95dd2717..e6bf65d2ffc6 100644 --- a/drivers/hwmon/dell-smm-hwmon.c +++ b/drivers/hwmon/dell-smm-hwmon.c @@ -713,6 +713,11 @@ static umode_t dell_smm_is_visible(const void *drvdata, enum hwmon_sensor_types if (data->fan[channel]) return 0644; + break; + case hwmon_pwm_fan_channel: + if (data->fan[channel]) + return 0444; + break; case hwmon_pwm_enable: if (data->auto_fan) @@ -800,6 +805,10 @@ static int dell_smm_read(struct device *dev, enum hwmon_sensor_types type, u32 a *val = clamp_val(ret * data->i8k_pwm_mult, 0, 255); + return 0; + case hwmon_pwm_fan_channel: + *val = channel + 1; + return 0; default: break; @@ -943,9 +952,9 @@ static const struct hwmon_channel_info *dell_smm_info[] = { HWMON_F_TARGET ), HWMON_CHANNEL_INFO(pwm, - HWMON_PWM_INPUT | HWMON_PWM_ENABLE, - HWMON_PWM_INPUT, - HWMON_PWM_INPUT + HWMON_PWM_INPUT | HWMON_PWM_FAN_CHANNEL | HWMON_PWM_ENABLE, + HWMON_PWM_INPUT | HWMON_PWM_FAN_CHANNEL, + HWMON_PWM_INPUT | HWMON_PWM_FAN_CHANNEL ), NULL };