From patchwork Wed Feb 23 22:13:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 12757546 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 7189DC433EF for ; Wed, 23 Feb 2022 22:14:05 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243411AbiBWWOb (ORCPT ); Wed, 23 Feb 2022 17:14:31 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231708AbiBWWOa (ORCPT ); Wed, 23 Feb 2022 17:14:30 -0500 Received: from mout.gmx.net (mout.gmx.net [212.227.17.21]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 33CFD5047F; Wed, 23 Feb 2022 14:14:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1645654423; bh=Mb3YF6LNh1Tn63N2V2L8UfDPfSHx3GY0TsdhMMwZ8Uc=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=T4G6WFaM0xbC2DdABjzPM0GTOyv51GPNkzt4xN0TqpYHQLax6iaESkStuML1b/yDN 1iPa0FtfAX5lsmnMS/I7v70W7qCZL3aFjvdYBWjf5BdMkg9k9Xr6czKunXDjF1CAva GeFxIX12ARLDTCBlxDlLM5ADljeVQ9JAjEtNy9ts= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from esprimo-mx.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1MryTF-1nzaEc1pSf-00nwqx; Wed, 23 Feb 2022 23:13:43 +0100 From: Armin Wolf To: hdegoede@redhat.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/2] hwmon: (core) Add support for pwm auto channels attribute Date: Wed, 23 Feb 2022 23:13:33 +0100 Message-Id: <20220223221334.3993-2-W_Armin@gmx.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220223221334.3993-1-W_Armin@gmx.de> References: <20220223221334.3993-1-W_Armin@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:xmvWvg7Ay7fwmz99F4ohQDSVOeKFj9/4fu2gxKwiGOGrmZE+1zE 2K53k5ZwZev8U2xW9hQSn1Asq3VzIdaQOseldcCZRa8Iy/DiRlqYyuCICyuqmY+6kKFMAd/ SKQ7jWMYnqamA42QiXCasXduoaR1kj6jBAcWyxELVAqfcWizCtVeLwYLVW+5JpQCErHS1ZJ VKeNvadD8GgSlEqFI77mA== X-UI-Out-Filterresults: notjunk:1;V03:K0:DQ0nGXG2fnw=:gobnGMRbiGa55k2XSHhr9A JGZdy8/MfYKF5PHIjBtkk/hkSsSnqJ0vrOL0dEhS2MrxEErbO6MTX3PJHwLjr1qQ018Kks1ZO J8js0YVzXH1R8/+z8FymAgeVVi1CQ6Zl97ukczAI8Ba5ev0yxohBs9ZMJCiWNEhlD7wdmOx8B lsqHyfka6T5DGnBUOAAjiS2GmHFTNduZxoMZIizLopNbb1Xyskbc6SPVW9qOAUi/2C4O2tSWy xSqak9wohYYfCIh92y4gGc+C8g912Ij/2b9QF5DPNpdkTwJsCOe35Fjrcy6nowKxosav8TyB+ w0SVzBE+TwRlNUPooflNBLds7OVa369q6sQPPLtd2jWQKNJT6b2GgbztUasoYo+gPsQzrziHy WvMQLDkbfECOPm5smbK0cFA58I3ehK9lJIP2ykL6THpA85wO1YNuWLKdSf8nYsmf+MR3+up3t 7Qkpoi6lhpQj/Ez6eVnVq6Ges6UpMVi6W4cYW5froOPSuX6nE5eJLx8sers89iIcKXWIK8fQD +BVmRrLLpzBn6u7n8Ou9Jlu2k5hW8gP2efc/YYhfK61VcJnWXIE9OLPqoDQNZ3sZ8LJDEtzXi EZV1oE11cFkO7M9BDSuYObLZY4O/LEDnp14uyDwyNMTxRy5S/yQVIie1K0cIkn2750+UcevVv c1We53G2U6iTeytZlTq3694fzCvaxk7VUV+C4+IlkpmEW7mdmR+/1unvmIo7nsVcmXxwY1ZjP 6ucOW7wojw2sO1uw8EaIePr0tBwxeOQTNWG2SK9zuvjWttVQVeVDlCWpAPiu3VtnNrWtPwrrV r+4+HPqE4h7X1ZyKpV9nfbNiZtdfVR4Tl/Q4iDn+iVdWEl+eTKMs2srY7xUz6ayOzvWZu0QGb EYEA3tWU8pzBbE++01qyK2l9uUDtIQyAYdOVi19IDVRJgTVOtQUdKXlieN6O6oJOX/f+yIE+K VqxCjXLwCMRitxg5xNRbo513D7X/ZbUkkkOk8RImRDEcYPegUVGupeTxZdxPjt8J/3QYKNbKU dgRk2NGgAIMz6FFMOi5ExztVjv8Gysqfa4noAFKrMMhUUQg8pYBu8b/7g52V5BA65ttHdergB /5im1bZNmqBS/g= Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org pwm[1-*]_auto_channels_temp is documented as an official hwmon sysfs attribute, yet there is no support for it in the new with_info-API. Fix that. Signed-off-by: Armin Wolf --- drivers/hwmon/hwmon.c | 1 + include/linux/hwmon.h | 2 ++ 2 files changed, 3 insertions(+) -- 2.30.2 diff --git a/drivers/hwmon/hwmon.c b/drivers/hwmon/hwmon.c index 0d6c6809f26c..989e2c8496dd 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_auto_channels_temp] = "pwm%d_auto_channels_temp", }; static const char * const hwmon_intrusion_attr_templates[] = { diff --git a/include/linux/hwmon.h b/include/linux/hwmon.h index fad1f1df26df..eba380b76d15 100644 --- a/include/linux/hwmon.h +++ b/include/linux/hwmon.h @@ -332,12 +332,14 @@ enum hwmon_pwm_attributes { hwmon_pwm_enable, hwmon_pwm_mode, hwmon_pwm_freq, + hwmon_pwm_auto_channels_temp, }; #define HWMON_PWM_INPUT BIT(hwmon_pwm_input) #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_AUTO_CHANNELS_TEMP BIT(hwmon_pwm_auto_channels_temp) enum hwmon_intrusion_attributes { hwmon_intrusion_alarm, From patchwork Wed Feb 23 22:13:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Armin Wolf X-Patchwork-Id: 12757547 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 8D581C433EF for ; Wed, 23 Feb 2022 22:14:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243478AbiBWWOe (ORCPT ); Wed, 23 Feb 2022 17:14:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:55952 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243412AbiBWWOc (ORCPT ); Wed, 23 Feb 2022 17:14:32 -0500 Received: from mout.gmx.net (mout.gmx.net [212.227.17.20]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5797506F4; Wed, 23 Feb 2022 14:14:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.net; s=badeba3b8450; t=1645654426; bh=+cTbGTbHIG9AuxX1N/8CTj6GaxahkL2vJGZG6ewkOvE=; h=X-UI-Sender-Class:From:To:Cc:Subject:Date:In-Reply-To:References; b=KCazj3dmDGh05/FjxirTOTB3hpBbyq23KnwwCh3yg2SymrUOVMVGV81a8QbXuyHIL 9os3cEG9SNn7dMiinikz290kbb2Phd9k4gB3gaSvDWPJdFlO+yPlSQqvIh0NZggbPK XefhjEbmN2e4+fBUFt2x1vISIZ7BN9BY8gqaSPlA= X-UI-Sender-Class: 01bb95c1-4bf8-414a-932a-4f6e2808ef9c Received: from esprimo-mx.users.agdsn.de ([141.30.226.129]) by mail.gmx.net (mrgmx104 [212.227.17.168]) with ESMTPSA (Nemesis) id 1N5mKJ-1oK0X43Jut-017IAI; Wed, 23 Feb 2022 23:13:45 +0100 From: Armin Wolf To: hdegoede@redhat.com Cc: jdelvare@suse.com, linux@roeck-us.net, linux-hwmon@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/2] hwmon: (sch5627) Add pwmX_auto_channels_temp support Date: Wed, 23 Feb 2022 23:13:34 +0100 Message-Id: <20220223221334.3993-3-W_Armin@gmx.de> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220223221334.3993-1-W_Armin@gmx.de> References: <20220223221334.3993-1-W_Armin@gmx.de> MIME-Version: 1.0 X-Provags-ID: V03:K1:M1PgcwCpZ4QXnE7r4Zqy4DVYSeBDK0siG6XRiiwZU7aTg11P10x zNx01QA1Ra8XelVopZXLI0SP4iQXpWs5qe/uXaL7HxJlF+Wga99h3OLPLHel0KcBpPqyKpA L7JjvJh9/jo2CZb3lYdDcVff9E5d+jHRlUzM60Fd4W/qEeYwF4TG/ahgPfAEjyRGtyNPXjQ VHPbWj/zsWBSlbtyK+axg== X-UI-Out-Filterresults: notjunk:1;V03:K0:k+8zKpcnUak=:Z6b1gEBgo6XTR27Xr51o9o 7ad9x7nqhSkSAptJt53ZkqxbXjqScXXYxbTySK24LmQxjCAOLuZ+uw52m3l9A9IXAR1KrnoyU Wl2vzPYVAeIn0PRe0+067HFScBEp1alCcYrNAXVQlj2XJFeuGgMb4te3FF4qPmaXnYwp1yxO1 yFBayrdNlRCoZYqwOnRW8jAfLgKZDLUM3IedKHenafC+L8SthJ/cMPYfBh9FbALbpCKIHWHb6 tMw6hlcpGYgA3gc1w5AUCQOVrDjIGd4+UxYC+t6ehZoOiKAGr/xwmTU6zvHYi9vJgNsSWsS6E CetH5Rcd8FjAGgmGvRjEppyjApACieQGqhVJZwS3gpihrYtMCPKrIs4uc8X267mMiqUjdhTVV ExjdP170gXfPdvWObHM43Z4uNhMCKdM/5AWEe3lypK20h0yxoDi4Z/NAfeGhwBy/h3XMHmjVr FXZdoWzwfDydHgnVXXYignTMRgMHGZb5oBnElQzGqevRTWvEITWXQyAwP/XT+mlUCDLcfIhY1 4B5hxycynWTUP4EquhCTmJxEw3OFzJzLPwHNH8MQeZaCGK3Qt8YW81FpBgROnqQ0yUe4D17+q Ka5aMgbFAUTpAAYx8sx4MehKLu/k6OsXSVoC41Iphn7+vQi/WQRIjdnUa8Y5FY8LImY809znK TSdbbSi+Mib1SIwiiOdvR9uRQRRjno2xPBQd/xEIYgqbrVL/P46XKvv3iZLwAzitPG3Z2+Ecy jiPwfJjAkj2q8mEzVuLNvr06fFwXK3rbkhNlDtZz7YBTGgGllODxMWHmDgwOctKKX23nNplDT KAWdYe+fU1/fEYBnFu5CnzPAO5RbM52Q8R4TJwGt38TC6vrJus1cM0JZV1mnUug2BI3RmvQza nGZrb0UjZU/tcgWTMNEtwUyT+YKb3tb7j6z376F6bw0IbMagHfOID8ohcZQMwpXqPMJa9v3Fv tthE0mYuUZB9Z0ZgFGx+nhCKzHPHO8Fx7B7R57XaQeAdNis/dVh+l4gq2IwL/jw7w5COxXyhd DuZ9aVafItVquTQxk4UiLpPosKP+oLLGanfsnMkSnE78Vxr6JT5hpEiSMhBe2mBWXttK1RdpD DsD6lZ+tuDP01Q= Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org After doing some research, it seems that Fujitsu's hardware monitoring solution exports data describing which temperature sensors affect which fans, similar to the data in fan_source of the ftsteutates driver. Writing 0 into these registers forces the fans to full speed. Export this data with standard attributes. Signed-off-by: Armin Wolf --- Documentation/hwmon/sch5627.rst | 4 +++ drivers/hwmon/sch5627.c | 53 +++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) -- 2.30.2 diff --git a/Documentation/hwmon/sch5627.rst b/Documentation/hwmon/sch5627.rst index 187682e99114..ecb4fc84d045 100644 --- a/Documentation/hwmon/sch5627.rst +++ b/Documentation/hwmon/sch5627.rst @@ -20,6 +20,10 @@ Description SMSC SCH5627 Super I/O chips include complete hardware monitoring capabilities. They can monitor up to 5 voltages, 4 fans and 8 temperatures. +In addition, the SCH5627 exports data describing which temperature sensors +affect the speed of each fan. Setting pwmX_auto_channels_temp to 0 forces +the corresponding fan to full speed until another value is written. + The SMSC SCH5627 hardware monitoring part also contains an integrated watchdog. In order for this watchdog to function some motherboard specific initialization most be done by the BIOS, so if the watchdog is not enabled diff --git a/drivers/hwmon/sch5627.c b/drivers/hwmon/sch5627.c index 72c3f6757e34..d166b6398645 100644 --- a/drivers/hwmon/sch5627.c +++ b/drivers/hwmon/sch5627.c @@ -52,6 +52,9 @@ static const u16 SCH5627_REG_FAN[SCH5627_NO_FANS] = { static const u16 SCH5627_REG_FAN_MIN[SCH5627_NO_FANS] = { 0x62, 0x64, 0x66, 0x68 }; +static const u16 SCH5627_REG_PWM_MAP[SCH5627_NO_FANS] = { + 0xA0, 0xA1, 0xA2, 0xA3 }; + static const u16 SCH5627_REG_IN_MSB[SCH5627_NO_IN] = { 0x22, 0x23, 0x24, 0x25, 0x189 }; static const u16 SCH5627_REG_IN_LSN[SCH5627_NO_IN] = { @@ -223,6 +226,9 @@ static int reg_to_rpm(u16 reg) static umode_t sch5627_is_visible(const void *drvdata, enum hwmon_sensor_types type, u32 attr, int channel) { + if (type == hwmon_pwm && attr == hwmon_pwm_auto_channels_temp) + return 0644; + return 0444; } @@ -278,6 +284,20 @@ static int sch5627_read(struct device *dev, enum hwmon_sensor_types type, u32 at break; } break; + case hwmon_pwm: + switch (attr) { + case hwmon_pwm_auto_channels_temp: + ret = sch56xx_read_virtual_reg(data->addr, SCH5627_REG_PWM_MAP[channel]); + if (ret < 0) + return ret; + + *val = ret; + + return 0; + default: + break; + } + break; case hwmon_in: ret = sch5627_update_in(data); if (ret < 0) @@ -318,10 +338,37 @@ static int sch5627_read_string(struct device *dev, enum hwmon_sensor_types type, return -EOPNOTSUPP; } +static int sch5627_write(struct device *dev, enum hwmon_sensor_types type, u32 attr, int channel, + long val) +{ + struct sch5627_data *data = dev_get_drvdata(dev); + + switch (type) { + case hwmon_pwm: + switch (attr) { + case hwmon_pwm_auto_channels_temp: + /* registers are 8 bit wide */ + if (val > U8_MAX || val < 0) + return -EINVAL; + + return sch56xx_write_virtual_reg(data->addr, SCH5627_REG_PWM_MAP[channel], + val); + default: + break; + } + break; + default: + break; + } + + return -EOPNOTSUPP; +} + static const struct hwmon_ops sch5627_ops = { .is_visible = sch5627_is_visible, .read = sch5627_read, .read_string = sch5627_read_string, + .write = sch5627_write, }; static const struct hwmon_channel_info *sch5627_info[] = { @@ -342,6 +389,12 @@ static const struct hwmon_channel_info *sch5627_info[] = { HWMON_F_INPUT | HWMON_F_MIN | HWMON_F_FAULT, HWMON_F_INPUT | HWMON_F_MIN | HWMON_F_FAULT ), + HWMON_CHANNEL_INFO(pwm, + HWMON_PWM_AUTO_CHANNELS_TEMP, + HWMON_PWM_AUTO_CHANNELS_TEMP, + HWMON_PWM_AUTO_CHANNELS_TEMP, + HWMON_PWM_AUTO_CHANNELS_TEMP + ), HWMON_CHANNEL_INFO(in, HWMON_I_INPUT | HWMON_I_LABEL, HWMON_I_INPUT | HWMON_I_LABEL,