From patchwork Fri Jan 14 16:35:05 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713820 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 A7904C4332F for ; Fri, 14 Jan 2022 16:35:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243394AbiANQfU (ORCPT ); Fri, 14 Jan 2022 11:35:20 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52314 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243422AbiANQfS (ORCPT ); Fri, 14 Jan 2022 11:35:18 -0500 Received: from mail-ot1-x329.google.com (mail-ot1-x329.google.com [IPv6:2607:f8b0:4864:20::329]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9CA9AC061401 for ; Fri, 14 Jan 2022 08:35:18 -0800 (PST) Received: by mail-ot1-x329.google.com with SMTP id w19-20020a056830061300b0058f1dd48932so10609739oti.11 for ; Fri, 14 Jan 2022 08:35:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kcuY71NcT1P5uKtYlPWtdN65iuiBkZNSK9GIZKL4294=; b=VurhK2ecj08A2QMWG6wJKwO3rh6PGIX4ah181Rv9ITBRfULvUMHNY8KZ9BTzO92gFu N76uw145lQKY2LzjPpkoGjQZqaMSm6Z018VLlTwYaEcc5z0g16kPXtH1WQu/JyqdFs4N RxSGyqPmNHCMTCGLv14UF2Ura7fd4jtYHIW8F9yxzyBy50hUog/Dz96SSFTC/dIP53Wx eSfJVFE8FK+k3hsiw7dc1OMdwM+iq9Y8JlCiNma99uhjPyDOJnraVgLSpfm6osr4Benp WP8+qhYhIm6fO80zaFPNwO6PkL54+d3xAmg1u0hGOtS7DAwA+5N9ZGM0KDUWBii5TfMS 5ACw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=kcuY71NcT1P5uKtYlPWtdN65iuiBkZNSK9GIZKL4294=; b=0D2jkUFqysX1+qCkN9kLs8m188OWowRxuUvpwYd8DEfL31lE5GHnKizkhe3sHOyR+d wd+uQeMUgZ3qvQvF/Dtt4rhS+4DEmMDsJ8Utb+9n9wIf7WzI/27K6zEisQR7EwWAKVnn xz24MC//g2AqWDucj4T1ZGkVsJPr1OJu8z3U2FzJyxIe84ix9WxtieZ8tjKXlqWDkgRw 62yM7+R6WScg5A/Mskg55wsEuxZh4zK6DnxiclShL43eIMvzQd4tctIhiU2nHEG1A4Da fDuftLsAdZPTADwsWZocLZzPu/dBBY09eYWe31lKWV6X3s5TCVDmG8/kJiIGDANf07Az L5wg== X-Gm-Message-State: AOAM5323+/Qfp1idgXJyaa4sRHZdis8utz8NI00CgiOQmKAGYC7VLIEl ylMweVW35sdpv0vj1EfoIcJHMNVFlDY= X-Google-Smtp-Source: ABdhPJwi8vYGwFMeqmlU0uD/RFNCGptSElXVBowWV4Jfs8u7exODFXvCsFHvP6PcTc3hCA+ax1H43w== X-Received: by 2002:a05:6830:111a:: with SMTP id w26mr7253788otq.33.1642178117723; Fri, 14 Jan 2022 08:35:17 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id p23sm1704281otp.46.2022.01.14.08.35.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:17 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 1/8] hwmon: (lm83) Reorder include files to be in alphabetic order Date: Fri, 14 Jan 2022 08:35:05 -0800 Message-Id: <20220114163512.1094472-2-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org Reorder include files to be in alphabetic order to simplify driver maintenance. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index 74fd7aa373a3..44d720af2473 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -18,15 +18,15 @@ * http://www.national.com/pf/LM/LM82.html */ -#include +#include +#include #include -#include #include -#include -#include #include -#include +#include +#include #include +#include #include /* From patchwork Fri Jan 14 16:35:06 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713821 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 C8AAFC433FE for ; Fri, 14 Jan 2022 16:35:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243413AbiANQfV (ORCPT ); Fri, 14 Jan 2022 11:35:21 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52324 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243419AbiANQfU (ORCPT ); Fri, 14 Jan 2022 11:35:20 -0500 Received: from mail-ot1-x334.google.com (mail-ot1-x334.google.com [IPv6:2607:f8b0:4864:20::334]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 93B07C061574 for ; Fri, 14 Jan 2022 08:35:20 -0800 (PST) Received: by mail-ot1-x334.google.com with SMTP id s21-20020a05683004d500b0058f585672efso10669081otd.3 for ; Fri, 14 Jan 2022 08:35:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=5wNjqSZf3eXRtRb/8MIbJ+WLfupL3TSPWOpZpEZmkco=; b=iMS2M6d2CLSl9+7BcAzFrnM66QZ99/MqiIVZPuFuO3u3c2fcHFWh9jza5NKuLxOiMn 3e1k728Ab5x/j+Gui6KYCNbI7SY3Hv58Bshl4jghbabWMFDFFEafS5Ns7nIWcd+ooqi3 6Ave33y21+1GMpfPggJ+XcdEHVxECSh+kdAynfh3zphDSMKuKzNrZutsnsx/FKPuZgA6 78m+IhzErxvzhTqmwEKD7MKz4PAWniEIygZ6tJ2Cb+36lBepNSodb9omtDqgA7fPSZMp /36XUKVyWWVAj6xPTeb/S7JJ4NaQo/meaTJnt0AOmGH2c5bk26rIJuOlunjhxgS4Z5Sp 3Uhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=5wNjqSZf3eXRtRb/8MIbJ+WLfupL3TSPWOpZpEZmkco=; b=OFWfThbLh2YkiHqg7Q6waUVOId2ots1StGVyMebQfwe87o7TwuQHw+3MM69vk7IQ4e QzVR9nfX3mTXFV3Okz8ehAk8fM1+tKE/5747r+EQgZPzHSaA1tcLblKynypUQeP7urGQ vZ+227trF/CDQRABjQUYH/uxTrufRNLKN9nghovmX7YwkbVdzpLBDsjiu/KDmxI/f6Zt X9PhY0fE5UUu6S3dUWDojBaOcrlwjSKhAJipjiUWIETm48/Trg5XcCQ0oQ3AIk1ivGxy Ov5BKwUyS37KQnp7Vhk0iTysH2jQcIZjPWpzp1cDSIudEwpit9Kv+2S3w+h6M56DPqtZ wYBg== X-Gm-Message-State: AOAM530XkOQk7ZJpesjMSg0zVNy2HwzxPkpzpliGjEXdC6RhnOWNwHXE szJm2dmT4gpnKMl3MQa3PKgGSTsWt9M= X-Google-Smtp-Source: ABdhPJx0i8vurjL9BdYdDyK4AjFDp3FZXdMINpefIPvF69yjuj/Orp0baQ8POa2q5en98wmaQeqDAg== X-Received: by 2002:a05:6830:244e:: with SMTP id x14mr2232151otr.225.1642178119699; Fri, 14 Jan 2022 08:35:19 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id h9sm953884ooo.47.2022.01.14.08.35.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:19 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 2/8] hwmon: (lm83) Move lm83_id to avoid forward declaration Date: Fri, 14 Jan 2022 08:35:06 -0800 Message-Id: <20220114163512.1094472-3-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org There is no need to keep lm83_id at the end of the driver. Move it forward to where it is needed to avoid a forward declaration. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index 44d720af2473..2bb4bceef551 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -317,7 +317,12 @@ static int lm83_detect(struct i2c_client *new_client, return 0; } -static const struct i2c_device_id lm83_id[]; +static const struct i2c_device_id lm83_id[] = { + { "lm83", lm83 }, + { "lm82", lm82 }, + { } +}; +MODULE_DEVICE_TABLE(i2c, lm83_id); static int lm83_probe(struct i2c_client *new_client) { @@ -352,13 +357,6 @@ static int lm83_probe(struct i2c_client *new_client) * Driver data (common to all clients) */ -static const struct i2c_device_id lm83_id[] = { - { "lm83", lm83 }, - { "lm82", lm82 }, - { } -}; -MODULE_DEVICE_TABLE(i2c, lm83_id); - static struct i2c_driver lm83_driver = { .class = I2C_CLASS_HWMON, .driver = { From patchwork Fri Jan 14 16:35:07 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713822 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 09781C433F5 for ; Fri, 14 Jan 2022 16:35:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243419AbiANQfX (ORCPT ); Fri, 14 Jan 2022 11:35:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52334 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243411AbiANQfW (ORCPT ); Fri, 14 Jan 2022 11:35:22 -0500 Received: from mail-ot1-x32e.google.com (mail-ot1-x32e.google.com [IPv6:2607:f8b0:4864:20::32e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 85E56C061574 for ; Fri, 14 Jan 2022 08:35:22 -0800 (PST) Received: by mail-ot1-x32e.google.com with SMTP id t4-20020a05683022e400b00591aaf48277so10619157otc.13 for ; Fri, 14 Jan 2022 08:35:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xUFzKGCbx4IN3SnL4u9eeBwHx5SXWvqbx0m3iWgkCH0=; b=WUDvAWwx/WvB0DxSq/V3ME49tkCqJppyr7ZCzFkttsm+ixyO9+pxzNsRfnECg6oJum gQ2NfGht06bm9/QzRxapAe9M/0wUvuShkat3jM6j+DvuiX0Q63NhKdwZKaowprOqsO6n KNuA7oKRTSc1DCHd/zyrOzOg3an6LwlJi+rs+G2tOOt5FUHQRjVYpHQpslDkrUXm3sYg cCPt5P7vgTS5N0m4v7ux7HK4x0/WClORvLUcNIzK3dNMlZ61Nxc0m3lgYPXBlPTXo2zL ZyunRQiMNkTY4Ycb98N2p41/aof7d846ruUyzg9HWmz5/6iW7X9rJX6DHe/J2pyJN8Id 3Itw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=xUFzKGCbx4IN3SnL4u9eeBwHx5SXWvqbx0m3iWgkCH0=; b=BViYlb1fuIeTn184S7LXqJeJ6OSTxjeJR9jzEjpjcXP5vGmW17aKLNVDcuTopgvLVB /baaF0IideSAfPVYOTrsMxYSE8yPuYIXIHes8W/1lvF+PknYot/Y43yIJqIZG0SAiMeq Cdpkxvq6H9KcrKAp4MwXhvEYhhu9Ox2Yk8zvY6gG88cbdpEO2EWvarjqXApn0LC+WCRI oWFU1fJq/pV8VRko6/z4BsI/e76cqgFFVm/zKQIb34XwUDrpuirHWvoIHI9FQJy2syiT J9+lDZ8qg+aC4t2o6utolqh25lKpk+6NhLj0sCV6TU8DFUqooTiRk+dHXUN0d03Y+PMP hMcg== X-Gm-Message-State: AOAM5315ltJV/34CUr9PMEomeqrl8o198MpL45Onc0G4s+gyqyddimos n85wvNCsjNihy83wDhuH+qmLe+/Qztw= X-Google-Smtp-Source: ABdhPJzUWUghzQjCPz2YbVM1vdmpO9yIv1s+mzM8VaakoLxcHZYDbErdiynepxfQVjQVoDcE911rXQ== X-Received: by 2002:a05:6830:2424:: with SMTP id k4mr5475790ots.241.1642178121700; Fri, 14 Jan 2022 08:35:21 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id bb20sm2190480oob.4.2022.01.14.08.35.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:21 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 3/8] hwmon: (lm83) Replace new_client with client Date: Fri, 14 Jan 2022 08:35:07 -0800 Message-Id: <20220114163512.1094472-4-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org It has no value to name a variable 'new_client' in probe and detect functions; it is obvious that the client is new. Use 'client' as variable name instead. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index 2bb4bceef551..fdd89cc481fa 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -272,10 +272,10 @@ static const struct attribute_group lm83_group_opt = { */ /* Return 0 if detection is successful, -ENODEV otherwise */ -static int lm83_detect(struct i2c_client *new_client, +static int lm83_detect(struct i2c_client *client, struct i2c_board_info *info) { - struct i2c_adapter *adapter = new_client->adapter; + struct i2c_adapter *adapter = client->adapter; const char *name; u8 man_id, chip_id; @@ -283,20 +283,20 @@ static int lm83_detect(struct i2c_client *new_client, return -ENODEV; /* Detection */ - if ((i2c_smbus_read_byte_data(new_client, LM83_REG_R_STATUS1) & 0xA8) || - (i2c_smbus_read_byte_data(new_client, LM83_REG_R_STATUS2) & 0x48) || - (i2c_smbus_read_byte_data(new_client, LM83_REG_R_CONFIG) & 0x41)) { + if ((i2c_smbus_read_byte_data(client, LM83_REG_R_STATUS1) & 0xA8) || + (i2c_smbus_read_byte_data(client, LM83_REG_R_STATUS2) & 0x48) || + (i2c_smbus_read_byte_data(client, LM83_REG_R_CONFIG) & 0x41)) { dev_dbg(&adapter->dev, "LM83 detection failed at 0x%02x\n", - new_client->addr); + client->addr); return -ENODEV; } /* Identification */ - man_id = i2c_smbus_read_byte_data(new_client, LM83_REG_R_MAN_ID); + man_id = i2c_smbus_read_byte_data(client, LM83_REG_R_MAN_ID); if (man_id != 0x01) /* National Semiconductor */ return -ENODEV; - chip_id = i2c_smbus_read_byte_data(new_client, LM83_REG_R_CHIP_ID); + chip_id = i2c_smbus_read_byte_data(client, LM83_REG_R_CHIP_ID); switch (chip_id) { case 0x03: name = "lm83"; @@ -324,17 +324,17 @@ static const struct i2c_device_id lm83_id[] = { }; MODULE_DEVICE_TABLE(i2c, lm83_id); -static int lm83_probe(struct i2c_client *new_client) +static int lm83_probe(struct i2c_client *client) { struct device *hwmon_dev; struct lm83_data *data; - data = devm_kzalloc(&new_client->dev, sizeof(struct lm83_data), + data = devm_kzalloc(&client->dev, sizeof(struct lm83_data), GFP_KERNEL); if (!data) return -ENOMEM; - data->client = new_client; + data->client = client; mutex_init(&data->update_lock); /* @@ -344,11 +344,11 @@ static int lm83_probe(struct i2c_client *new_client) * declare 1 and 3 common, and then 2 and 4 only for the LM83. */ data->groups[0] = &lm83_group; - if (i2c_match_id(lm83_id, new_client)->driver_data == lm83) + if (i2c_match_id(lm83_id, client)->driver_data == lm83) data->groups[1] = &lm83_group_opt; - hwmon_dev = devm_hwmon_device_register_with_groups(&new_client->dev, - new_client->name, + hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, + client->name, data, data->groups); return PTR_ERR_OR_ZERO(hwmon_dev); } From patchwork Fri Jan 14 16:35:08 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713823 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 C0D2CC433EF for ; Fri, 14 Jan 2022 16:35:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243411AbiANQfZ (ORCPT ); Fri, 14 Jan 2022 11:35:25 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52352 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243409AbiANQfY (ORCPT ); Fri, 14 Jan 2022 11:35:24 -0500 Received: from mail-oi1-x236.google.com (mail-oi1-x236.google.com [IPv6:2607:f8b0:4864:20::236]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 943E3C061574 for ; Fri, 14 Jan 2022 08:35:24 -0800 (PST) Received: by mail-oi1-x236.google.com with SMTP id t9so12819251oie.12 for ; Fri, 14 Jan 2022 08:35:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=gvYWAl5Rf5GU2DVghOd8Gqrs+1BvL6D/MpgfNfJUxQ0=; b=GjD5NzlcwC9sVivbUuRWP82ko+ukIf+Z65D1eHXt7vW4o5pqOw9bWJT3+sweQnupRo 3r8dG04a/Z9ZdwKeTiliHheG5I/C1J6zPKXtCrWTbBtDC9HAsxQE1ao5zZLN3xISWswe wc3lMVqzP0dqnZXtlXXP7WN1tlPBJBUHXeqAOVZ/oG2pvUh6cCj32m/Uwv+jcZFSotTi H6CwxdkTiR7y5el12i9BnhIUFkp4iaT7ktNtkIQZt5dlTIVFFq0TGrX5XKp86vI1j1Pr t9Z8UvTe3FUkP+ojlc/0+hTSVgj4Yg6wlsV3UK6/wXvVgdHLIG00rcZITM4UFPabG5KV y95A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=gvYWAl5Rf5GU2DVghOd8Gqrs+1BvL6D/MpgfNfJUxQ0=; b=ib74nxuee2ueaVYf+mIN1ARcabXjpkfG+ZMW+flEH5tbmnC86dItpciEu1oLisooWC boCkuOhSPNfevlLQhFvraWCxllaBgpmOujm+6069luEOegda4GUhRO3CesOrDz53O97+ ORELHJ9QsZJJvVP4VnniVB3xqyqyAexMDpCXHoiv9Ya5RZi5K2/UeurmUozqsKcKoQ/J I5RUjWnPK1y/+74//i1haKPx7iWgwQ4KmHIU5dEoN1DRByJ+BwJrrx9kqJd2Xq7YD3iL ukWeD98nUfnoIN28Ls+cCcY+GW3m5nIcpPbOJHZVxK7sMo02Khs8QjzP0NBoW97+pbYS Invw== X-Gm-Message-State: AOAM533rTSRyYHvxKwbl2UIak+voUGA123j23PvZbjw17sLHIDaN2brs bPuOiHupXKuCe5a1MmAiYsIbEfZlp7Y= X-Google-Smtp-Source: ABdhPJyfydjpaQ4r20YC1Sqi7i9b07/2lGmBYid8RFh1Sw+p540l1K5vAFMISf+A01wEPWbJt9Bx3Q== X-Received: by 2002:aca:4b03:: with SMTP id y3mr8150901oia.82.1642178123629; Fri, 14 Jan 2022 08:35:23 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id f18sm1952967oop.9.2022.01.14.08.35.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:23 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 4/8] hwmon: (lm83) Use regmap Date: Fri, 14 Jan 2022 08:35:08 -0800 Message-Id: <20220114163512.1094472-5-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org Using local caching in this driver had few benefits. It used cached values for two seconds and then re-read all registers from the chip even if the user only accessed a single attribute. On top of that, alarm attributes were stale for up to four seconds (the first status register read reports and clears an alarm, the second reports it cleared). Use regmap instead for caching. Do not re-read non-volatile registers, and do not cache volatile registers. As part of this change, handle register read and write address differences in regmap code. This is necessary to avoid problems with caching in the regmap core, and ultimately simplifies the code. Also, errors observed when reading from and writing to registers are no longer ignored. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 176 +++++++++++++++++++++++++++---------------- 1 file changed, 111 insertions(+), 65 deletions(-) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index fdd89cc481fa..c9605957e400 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -21,11 +21,11 @@ #include #include #include -#include #include #include #include #include +#include #include #include @@ -77,7 +77,7 @@ enum chips { lm83, lm82 }; (val) < 0 ? ((val) - 500) / 1000 : \ ((val) + 500) / 1000) -static const u8 LM83_REG_R_TEMP[] = { +static const u8 LM83_REG_TEMP[] = { LM83_REG_R_LOCAL_TEMP, LM83_REG_R_REMOTE1_TEMP, LM83_REG_R_REMOTE2_TEMP, @@ -89,62 +89,82 @@ static const u8 LM83_REG_R_TEMP[] = { LM83_REG_R_TCRIT, }; -static const u8 LM83_REG_W_HIGH[] = { - LM83_REG_W_LOCAL_HIGH, - LM83_REG_W_REMOTE1_HIGH, - LM83_REG_W_REMOTE2_HIGH, - LM83_REG_W_REMOTE3_HIGH, - LM83_REG_W_TCRIT, -}; - /* * Client data (each client gets its own) */ struct lm83_data { - struct i2c_client *client; + struct regmap *regmap; const struct attribute_group *groups[3]; - struct mutex update_lock; - bool valid; /* false until following fields are valid */ - unsigned long last_updated; /* in jiffies */ - - /* registers values */ - s8 temp[9]; /* 0..3: input 1-4, - 4..7: high limit 1-4, - 8 : critical limit */ - u16 alarms; /* bitvector, combined */ }; -static struct lm83_data *lm83_update_device(struct device *dev) +/* regmap code */ + +static int lm83_regmap_reg_read(void *context, unsigned int reg, unsigned int *val) { - struct lm83_data *data = dev_get_drvdata(dev); - struct i2c_client *client = data->client; - - mutex_lock(&data->update_lock); - - if (time_after(jiffies, data->last_updated + HZ * 2) || !data->valid) { - int nr; - - dev_dbg(&client->dev, "Updating lm83 data.\n"); - for (nr = 0; nr < 9; nr++) { - data->temp[nr] = - i2c_smbus_read_byte_data(client, - LM83_REG_R_TEMP[nr]); - } - data->alarms = - i2c_smbus_read_byte_data(client, LM83_REG_R_STATUS1) - + (i2c_smbus_read_byte_data(client, LM83_REG_R_STATUS2) - << 8); - - data->last_updated = jiffies; - data->valid = true; + struct i2c_client *client = context; + int ret; + + ret = i2c_smbus_read_byte_data(client, reg); + if (ret < 0) + return ret; + + *val = ret; + return 0; +} + +/* + * The regmap write function maps read register addresses to write register + * addresses. This is necessary for regmap register caching to work. + * An alternative would be to clear the regmap cache whenever a register is + * written, but that would be much more expensive. + */ +static int lm83_regmap_reg_write(void *context, unsigned int reg, unsigned int val) +{ + struct i2c_client *client = context; + + switch (reg) { + case LM83_REG_R_CONFIG: + case LM83_REG_R_LOCAL_HIGH: + case LM83_REG_R_REMOTE2_HIGH: + reg += 0x06; + break; + case LM83_REG_R_REMOTE1_HIGH: + case LM83_REG_R_REMOTE3_HIGH: + case LM83_REG_R_TCRIT: + reg += 0x18; + break; + default: + break; } - mutex_unlock(&data->update_lock); + return i2c_smbus_write_byte_data(client, reg, val); +} - return data; +static bool lm83_regmap_is_volatile(struct device *dev, unsigned int reg) +{ + switch (reg) { + case LM83_REG_R_LOCAL_TEMP: + case LM83_REG_R_REMOTE1_TEMP: + case LM83_REG_R_REMOTE2_TEMP: + case LM83_REG_R_REMOTE3_TEMP: + case LM83_REG_R_STATUS1: + case LM83_REG_R_STATUS2: + return true; + default: + return false; + } } +static const struct regmap_config lm83_regmap_config = { + .reg_bits = 8, + .val_bits = 8, + .cache_type = REGCACHE_RBTREE, + .volatile_reg = lm83_regmap_is_volatile, + .reg_read = lm83_regmap_reg_read, + .reg_write = lm83_regmap_reg_write, +}; + /* * Sysfs stuff */ @@ -153,8 +173,15 @@ static ssize_t temp_show(struct device *dev, struct device_attribute *devattr, char *buf) { struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); - struct lm83_data *data = lm83_update_device(dev); - return sprintf(buf, "%d\n", TEMP_FROM_REG(data->temp[attr->index])); + struct lm83_data *data = dev_get_drvdata(dev); + unsigned int regval; + int ret; + + ret = regmap_read(data->regmap, LM83_REG_TEMP[attr->index], ®val); + if (ret) + return ret; + + return sprintf(buf, "%d\n", TEMP_FROM_REG((s8)regval)); } static ssize_t temp_store(struct device *dev, @@ -163,38 +190,57 @@ static ssize_t temp_store(struct device *dev, { struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct lm83_data *data = dev_get_drvdata(dev); - struct i2c_client *client = data->client; + unsigned int regval; long val; - int nr = attr->index; int err; err = kstrtol(buf, 10, &val); if (err < 0) return err; - mutex_lock(&data->update_lock); - data->temp[nr] = TEMP_TO_REG(val); - i2c_smbus_write_byte_data(client, LM83_REG_W_HIGH[nr - 4], - data->temp[nr]); - mutex_unlock(&data->update_lock); - return count; + regval = TEMP_TO_REG(val); + err = regmap_write(data->regmap, LM83_REG_TEMP[attr->index], regval); + return err ? : count; } static ssize_t alarms_show(struct device *dev, struct device_attribute *dummy, char *buf) { - struct lm83_data *data = lm83_update_device(dev); - return sprintf(buf, "%d\n", data->alarms); + struct lm83_data *data = dev_get_drvdata(dev); + unsigned int alarms, regval; + int err; + + err = regmap_read(data->regmap, LM83_REG_R_STATUS1, ®val); + if (err < 0) + return err; + alarms = regval; + err = regmap_read(data->regmap, LM83_REG_R_STATUS2, ®val); + if (err < 0) + return err; + alarms |= regval << 8; + + return sprintf(buf, "%u\n", alarms); } static ssize_t alarm_show(struct device *dev, struct device_attribute *devattr, char *buf) { struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); - struct lm83_data *data = lm83_update_device(dev); + struct lm83_data *data = dev_get_drvdata(dev); int bitnr = attr->index; - - return sprintf(buf, "%d\n", (data->alarms >> bitnr) & 1); + unsigned int alarm; + int reg, err; + + if (bitnr < 8) { + reg = LM83_REG_R_STATUS1; + } else { + reg = LM83_REG_R_STATUS2; + bitnr -= 8; + } + err = regmap_read(data->regmap, reg, &alarm); + if (err < 0) + return err; + return sprintf(buf, "%d\n", (alarm >> bitnr) & 1); } static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0); @@ -326,16 +372,17 @@ MODULE_DEVICE_TABLE(i2c, lm83_id); static int lm83_probe(struct i2c_client *client) { + struct device *dev = &client->dev; struct device *hwmon_dev; struct lm83_data *data; - data = devm_kzalloc(&client->dev, sizeof(struct lm83_data), - GFP_KERNEL); + data = devm_kzalloc(dev, sizeof(struct lm83_data), GFP_KERNEL); if (!data) return -ENOMEM; - data->client = client; - mutex_init(&data->update_lock); + data->regmap = devm_regmap_init(dev, NULL, client, &lm83_regmap_config); + if (IS_ERR(data->regmap)) + return PTR_ERR(data->regmap); /* * Register sysfs hooks @@ -347,8 +394,7 @@ static int lm83_probe(struct i2c_client *client) if (i2c_match_id(lm83_id, client)->driver_data == lm83) data->groups[1] = &lm83_group_opt; - hwmon_dev = devm_hwmon_device_register_with_groups(&client->dev, - client->name, + hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, data, data->groups); return PTR_ERR_OR_ZERO(hwmon_dev); } From patchwork Fri Jan 14 16:35:09 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713824 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 81691C433FE for ; Fri, 14 Jan 2022 16:35:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243421AbiANQf1 (ORCPT ); Fri, 14 Jan 2022 11:35:27 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52368 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243405AbiANQf0 (ORCPT ); Fri, 14 Jan 2022 11:35:26 -0500 Received: from mail-ot1-x32c.google.com (mail-ot1-x32c.google.com [IPv6:2607:f8b0:4864:20::32c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6CF9EC06161C for ; Fri, 14 Jan 2022 08:35:26 -0800 (PST) Received: by mail-ot1-x32c.google.com with SMTP id z25-20020a0568301db900b005946f536d85so1633049oti.9 for ; Fri, 14 Jan 2022 08:35:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=tK7zr05/ZSG5n32Cz99AkHg2XcDrMWtHo8IT0Z/LPcQ=; b=UUizvoY1bvpSUwbGJ06Llnr1n4soqRtsmBw1ib/3LWkg2HZovpfkxLxVeiqE+hLg0/ lwv/NobctteVpsBahZPFloiSLzF/vMr3x6QGUHAqK/bEi84UHBk3Gs34YDik/2BABX0R MG3U8eVkog0eFmY5K3jGxeAxgELl8rveFuvEYksFxR9+/sm2wb1MB4RUxtet5n7BH+KK +9iPjbh2mdJgrN9oSbM9CIkmmhtqI0G7x8R8yqU8gZECuoi8+cqsUp6cWBPxbAgRiDul JmHQ4D7Ny12hbRUrpDR5SvtNcdDbjEgw4rcExCF7qODk1KNYLyjwuaALgVJ7p1+HXSww dFYA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=tK7zr05/ZSG5n32Cz99AkHg2XcDrMWtHo8IT0Z/LPcQ=; b=uv2rdUgwPe5aX1KcY7r0jJYVglG1WSC+OGPxxVfsBKUJlGyw4c7+OaDyWwmxm89Ugs HczG6bFINfYpmBkvO9GDpRPZ1dMuzOPDlKZcgPbPxohxA7DZQzJHKzCKJ53VIAqKTxS4 fJtc9+abBMyLMUozAufSIQq35IIC8q8F+o/BI/wjtj8Zl4/KxnkCtEi7jlFnQoGfcp5L H+CRP96NA+70uiqtKWv+j5B/i6HVWvmS3YDEonauu2OFzb1Zm0QaVs/WYfZaZuih7U3A vjjstG+TacsFSQnpZhcINuy52ebMD590EcRbYjyz1Ve82xj5TJiFIu4/7D4Lsl3fAyzy cesg== X-Gm-Message-State: AOAM533LpvMaw5mKllFqv1ZIAcp+wSS8bSKGJP4HzxCfhOOhEWbxLVCM cDiu0YMEUxu8V5l/rRCjdRpnxaZQHkE= X-Google-Smtp-Source: ABdhPJyXSr6Ew/q4t87ZoDG4fLOOCnun44cLna039CabIX9TbS1IZL+J3EZ72Hz2MTEvq8SeylbIzw== X-Received: by 2002:a05:6830:441f:: with SMTP id q31mr7756083otv.14.1642178125586; Fri, 14 Jan 2022 08:35:25 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id z188sm2017544ooa.8.2022.01.14.08.35.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:24 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 5/8] hwmon: (lm83) Replace temperature conversion macros with standard functions Date: Fri, 14 Jan 2022 08:35:09 -0800 Message-Id: <20220114163512.1094472-6-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org Replace TEMP_FROM_REG with direct calculation and TEMP_TO_REG with standard functions/macros. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index c9605957e400..434bd5b903d2 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -66,17 +66,6 @@ enum chips { lm83, lm82 }; #define LM83_REG_R_TCRIT 0x42 #define LM83_REG_W_TCRIT 0x5A -/* - * Conversions and various macros - * The LM83 uses signed 8-bit values with LSB = 1 degree Celsius. - */ - -#define TEMP_FROM_REG(val) ((val) * 1000) -#define TEMP_TO_REG(val) ((val) <= -128000 ? -128 : \ - (val) >= 127000 ? 127 : \ - (val) < 0 ? ((val) - 500) / 1000 : \ - ((val) + 500) / 1000) - static const u8 LM83_REG_TEMP[] = { LM83_REG_R_LOCAL_TEMP, LM83_REG_R_REMOTE1_TEMP, @@ -181,7 +170,7 @@ static ssize_t temp_show(struct device *dev, struct device_attribute *devattr, if (ret) return ret; - return sprintf(buf, "%d\n", TEMP_FROM_REG((s8)regval)); + return sprintf(buf, "%d\n", (s8)regval * 1000); } static ssize_t temp_store(struct device *dev, @@ -198,7 +187,7 @@ static ssize_t temp_store(struct device *dev, if (err < 0) return err; - regval = TEMP_TO_REG(val); + regval = DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), 1000); err = regmap_write(data->regmap, LM83_REG_TEMP[attr->index], regval); return err ? : count; } From patchwork Fri Jan 14 16:35:10 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713825 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 8321EC433EF for ; Fri, 14 Jan 2022 16:35:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243409AbiANQf2 (ORCPT ); Fri, 14 Jan 2022 11:35:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52376 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243424AbiANQf2 (ORCPT ); Fri, 14 Jan 2022 11:35:28 -0500 Received: from mail-oo1-xc36.google.com (mail-oo1-xc36.google.com [IPv6:2607:f8b0:4864:20::c36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4E239C061574 for ; Fri, 14 Jan 2022 08:35:28 -0800 (PST) Received: by mail-oo1-xc36.google.com with SMTP id v10-20020a4a244a000000b002ddfb22ab49so2392342oov.0 for ; Fri, 14 Jan 2022 08:35:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Dmevg3985+oCjOlGzgO9q/KJUcVhHLIyP6bMnt1osD8=; b=aD85WCiPJJajsgAASIlylz8yt7Xtdt6trooDpmYeG2uWUVztfXghwgUe4egN7/YAn2 RGSPcSJxhHcz2fvOz4ob8s7a0zCJ6wjKx49vkCIFbVqY8qFG4Cj/tAoKjUjrhmify1G+ AEijeDCaz6Oqo4w8zbX+UT3IFafTkeyBq+DDKMbw4FEmd7fvZqTfKlwBDGsJS2FO0kAm It1jHcEBEe4agAt5077YlW01t4iX0fK/kSVdam1/T1xVenRhzKNiSE4ye+Q4ZK+KotmB bv3jh1GcqvZLjQSwclhubQzQxi9JpVS7U20YF2xNsk0Ktog1WvEZFVx9DaRBEQJCjP7Y ZlsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=Dmevg3985+oCjOlGzgO9q/KJUcVhHLIyP6bMnt1osD8=; b=y3kRjMlRTPAM0xqPzR+pFqZLTnyT0VjgCQnGyzoKEVcxz1YOr6XQa6WX97RvzPvEdt pVZIas80mfZ4Vveg0YUq4t7892v124rqVA+qKSPK+bU7XYCmCE9k/VJGz69lgVIvCD+u 6kz/5Anzy7/XLEZrYNvRMm6IoKaDPpu9jJGxdQqFajkeMu5NaP4kYC3HV2mkw/81UMnU ocKhV8JQydcjOmCp5YkcV8OoDw08eBVkSByZh6uVF+TShupnuRIgMt/s02aubQnsrpeV hJhCCA+xEV7nSnT2Na9rgyxWTm9A6vbq8i58m6vqdDZ3q1/JGE4ko7kPTdmZdsO9uvx/ FYlw== X-Gm-Message-State: AOAM533iuWAkurDUFukfg7Owk7uab1kC8i7KPA6FNp+nW0bSxBeP/ma4 t88E14SMMfwhkrtnDPnAYxJr8ph3Zf0= X-Google-Smtp-Source: ABdhPJw+U2VZ4kzBMbuhOIEm7e5SlUBlaHf7xspW9cG3wr3H5Yu5Lgj6EN5dcMHWquavsGv/8UtjtA== X-Received: by 2002:a4a:2a45:: with SMTP id x5mr2372372oox.64.1642178127464; Fri, 14 Jan 2022 08:35:27 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id c27sm2040822ooe.45.2022.01.14.08.35.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:26 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 6/8] hwmon: (lm83) Demote log message if chip identification fails Date: Fri, 14 Jan 2022 08:35:10 -0800 Message-Id: <20220114163512.1094472-7-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org There should be no message in the kernel function if the detect function fails to identify a chip; this is perfectly normal and does not warrant a kernel log entry. Demote message to debug. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index 434bd5b903d2..82d7ef264f6f 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -341,9 +341,9 @@ static int lm83_detect(struct i2c_client *client, break; default: /* identification failed */ - dev_info(&adapter->dev, - "Unsupported chip (man_id=0x%02X, chip_id=0x%02X)\n", - man_id, chip_id); + dev_dbg(&adapter->dev, + "Unsupported chip (man_id=0x%02X, chip_id=0x%02X)\n", + man_id, chip_id); return -ENODEV; } From patchwork Fri Jan 14 16:35:11 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713826 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 9E8CDC433EF for ; Fri, 14 Jan 2022 16:35:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243405AbiANQfc (ORCPT ); Fri, 14 Jan 2022 11:35:32 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243424AbiANQfa (ORCPT ); Fri, 14 Jan 2022 11:35:30 -0500 Received: from mail-ot1-x335.google.com (mail-ot1-x335.google.com [IPv6:2607:f8b0:4864:20::335]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3D786C061574 for ; Fri, 14 Jan 2022 08:35:30 -0800 (PST) Received: by mail-ot1-x335.google.com with SMTP id w19-20020a056830061300b0058f1dd48932so10610466oti.11 for ; Fri, 14 Jan 2022 08:35:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ElDBSJutI34QIghs6GJJ5wG5TUz1qMgXiR9SDemwGRo=; b=l/tRkEuHdp/KBm15qsHylQIZTudu16i+VMAGEGG6xclSJ8cqk4+3CxQrw970CyHZzo 9xROEDtYIoW47h05Jv0i0yTCfOGRmSSMmyPzgJp5hfOKxQVeLYTe8fMLjuhugZr3V9rp roC7kMRiE0UETDb2BKAyNN32VAhOm24vaq+HKMjg55Lgn5WePM4K+1R+yDYiIVn2VtLh bVDyU3kJYZUcUh1Y5Wou4/oyOwCR+2hTGLiCGOniRiaSh4d9Pod+YfYZbWQFbIHsANJB TgwvYcXnom/OwFHVq8b1ZSNJAU4SmJGSmY95Oum56x610i/khqncGXaY8nuey2XaG3SA 7Xig== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=ElDBSJutI34QIghs6GJJ5wG5TUz1qMgXiR9SDemwGRo=; b=T7SzArRoKvTivfenUOUCGbJ9V51893135fP9Q2Hnpr74gGqluQ0Zg+yMwyrPeVIPDf WzdEeNFLs9XNOWucEnnLTq6x2ENGM+5UBLX92dRhqLERInQdK6dYKmQpfFPdO50soldH CthbF7p5c0XQITJkqQ6DFhfrj4pnzjhcf8XcUpE+w/USFNCtqdEcwjIlA7c9iIzN19+F R+CmILWkrEpQ70qtneBq0oQsMYTplwK57xpUbX8xwA8WlvrlflM0ct6tVZKhnGm7hDmO rDKk4dqmZgwxbXXTRo/zPdbW3kkofFEm+gFGMnuS1rr1p5rGbXrYw/WH3Xv1MoIL5apg Jeig== X-Gm-Message-State: AOAM5308os5bcetbiHPdt/dO0Ahhwx5Peh1XwO0xjBZT3EHv4M+7vuqD DxmoDuOhCBKFH2xl8rBIfYeo/L4BmGI= X-Google-Smtp-Source: ABdhPJzokufWn4XKNnkliBpCABPgNbyJUF7/6/VmWjSTNMwitlR8EPnBTqf5JmjwzdDFLaB3q9M+KQ== X-Received: by 2002:a9d:685a:: with SMTP id c26mr7433124oto.239.1642178129369; Fri, 14 Jan 2022 08:35:29 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id a2sm2026383oon.37.2022.01.14.08.35.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:28 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 7/8] hwmon: (lm83) Explain why LM82 may be misdetected as LM83 Date: Fri, 14 Jan 2022 08:35:11 -0800 Message-Id: <20220114163512.1094472-8-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org According to the March 2013 revision of the LM82 datasheet, the latest LM82 die revision is 0x03. This was confirmed and observed with a real chip. Further details in this revision of the LM82 datasheet suggest that LM82 is now just a repackaged LM83. Such versions of LM82 will be detected as LM83. Add comment to the code explaining why this may happen. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index 82d7ef264f6f..d9ee01ca8aed 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -334,6 +334,14 @@ static int lm83_detect(struct i2c_client *client, chip_id = i2c_smbus_read_byte_data(client, LM83_REG_R_CHIP_ID); switch (chip_id) { case 0x03: + /* + * According to the LM82 datasheet dated March 2013, recent + * revisions of LM82 have a die revision of 0x03. This was + * confirmed with a real chip. Further details in this revision + * of the LM82 datasheet strongly suggest that LM82 is just a + * repackaged LM83. It is therefore impossible to distinguish + * those chips from LM83, and they will be misdetected as LM83. + */ name = "lm83"; break; case 0x01: From patchwork Fri Jan 14 16:35:12 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guenter Roeck X-Patchwork-Id: 12713827 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 0D5D2C433FE for ; Fri, 14 Jan 2022 16:35:36 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S243425AbiANQfe (ORCPT ); Fri, 14 Jan 2022 11:35:34 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52394 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243422AbiANQfc (ORCPT ); Fri, 14 Jan 2022 11:35:32 -0500 Received: from mail-ot1-x32d.google.com (mail-ot1-x32d.google.com [IPv6:2607:f8b0:4864:20::32d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 324E1C061574 for ; Fri, 14 Jan 2022 08:35:32 -0800 (PST) Received: by mail-ot1-x32d.google.com with SMTP id i7-20020a9d68c7000000b0059396529af8so3949643oto.4 for ; Fri, 14 Jan 2022 08:35:32 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XNslqHP4rYbMGaLVAH+7rT36qdkRow7zXw0KfyoMsJk=; b=NT+omLGIBdDKzzwDAyEBZwWhXPoD9/Rwc/Y7QCNdSDF2t1U6QCKWwS++GW+6+/8eaW Nk52UWsFqjvu8RbfZun2w80nOvO0FttBVBqe9J6oHWD+EjgsvHCDN8R9MfQPN/mhrFOm z6EAQmYGNJl9heRA8phFAOiV07D+CmRDOM7vW+Yi8k+3Ar6Tr/Uh8JMg6gdVIi6sRJnj aCvoThVNvk1Ww4mK++nja0e2ma9yLrHFDln4ZkxTjFmUeb4TP2b70XKTO8u5j3jxjDsc 1hXZYUJv3VvJgk7fqLYFBoUQoKKgThMzr1LGDAUc4vJgsnXCq0y9avySLlwM4au4haI0 Ap2Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=XNslqHP4rYbMGaLVAH+7rT36qdkRow7zXw0KfyoMsJk=; b=lh+Srzdb0lIamZkQ+BVoyLoyZrzktudZF+wUbO7tBva8SN57suRDuJtc/Ikt2R6/zc 8tswKgmT5h2LyV2jMWQA8FeKAukvXOnJG5WG6+DZCPnxrsNAz7wfKtpvbFzOUrc16NY7 eQ6DedmJeX2tlNbN3OTzs9nTtoX8FFYLdcSfPRREqJsRZTFT8h2AeOWRqZb8gvjCM0rw Hm013vPi6NN/oCxaaE+/4GVib21aS23IzFfqkZQQqABeHqVPvYycenHW4sk4XrkeeX7p RCsIhlZrYNzQZR0Z+Qp7693xIpNKXyQ8AP1akwUrTyucsSx2rIR6/Y6XARM0/So1DhSJ GG0Q== X-Gm-Message-State: AOAM533jBsYNhlHTYTsKn16tLYY42550IfUEiQYHbAaIG0XDxHdc07ua vmhhxMj1wh9mpZCWgqswBYs4fsBLlC0= X-Google-Smtp-Source: ABdhPJz74M5CgvCD2zNfB92HDt6lNd+ew0XOvF40V7tvzb0NZtPASLpjA6jjYE5hv24MjV1o+slK/A== X-Received: by 2002:a9d:5541:: with SMTP id h1mr7180630oti.115.1642178131234; Fri, 14 Jan 2022 08:35:31 -0800 (PST) Received: from server.roeck-us.net ([2600:1700:e321:62f0:329c:23ff:fee3:9d7c]) by smtp.gmail.com with ESMTPSA id h6sm1950626ooe.22.2022.01.14.08.35.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Jan 2022 08:35:30 -0800 (PST) Sender: Guenter Roeck From: Guenter Roeck To: Hardware Monitoring Cc: Jean Delvare , Guenter Roeck Subject: [PATCH 8/8] hwmon: (lm83) Convert to use with_info API Date: Fri, 14 Jan 2022 08:35:12 -0800 Message-Id: <20220114163512.1094472-9-linux@roeck-us.net> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20220114163512.1094472-1-linux@roeck-us.net> References: <20220114163512.1094472-1-linux@roeck-us.net> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org Use with_info API to reduce code size and simplify the code. Signed-off-by: Guenter Roeck --- drivers/hwmon/lm83.c | 315 +++++++++++++++++++++++++------------------ 1 file changed, 183 insertions(+), 132 deletions(-) diff --git a/drivers/hwmon/lm83.c b/drivers/hwmon/lm83.c index d9ee01ca8aed..7047de234ee1 100644 --- a/drivers/hwmon/lm83.c +++ b/drivers/hwmon/lm83.c @@ -18,11 +18,11 @@ * http://www.national.com/pf/LM/LM82.html */ +#include #include #include #include #include -#include #include #include #include @@ -71,11 +71,30 @@ static const u8 LM83_REG_TEMP[] = { LM83_REG_R_REMOTE1_TEMP, LM83_REG_R_REMOTE2_TEMP, LM83_REG_R_REMOTE3_TEMP, +}; + +static const u8 LM83_REG_MAX[] = { LM83_REG_R_LOCAL_HIGH, LM83_REG_R_REMOTE1_HIGH, LM83_REG_R_REMOTE2_HIGH, LM83_REG_R_REMOTE3_HIGH, - LM83_REG_R_TCRIT, +}; + +/* alarm and fault registers and bits, indexed by channel */ +static const u8 LM83_ALARM_REG[] = { + LM83_REG_R_STATUS1, LM83_REG_R_STATUS2, LM83_REG_R_STATUS1, LM83_REG_R_STATUS2 +}; + +static const u8 LM83_MAX_ALARM_BIT[] = { + BIT(6), BIT(7), BIT(4), BIT(4) +}; + +static const u8 LM83_CRIT_ALARM_BIT[] = { + BIT(0), BIT(0), BIT(1), BIT(1) +}; + +static const u8 LM83_FAULT_BIT[] = { + 0, BIT(5), BIT(2), BIT(2) }; /* @@ -84,7 +103,7 @@ static const u8 LM83_REG_TEMP[] = { struct lm83_data { struct regmap *regmap; - const struct attribute_group *groups[3]; + enum chips type; }; /* regmap code */ @@ -154,157 +173,197 @@ static const struct regmap_config lm83_regmap_config = { .reg_write = lm83_regmap_reg_write, }; -/* - * Sysfs stuff - */ +/* hwmon API */ -static ssize_t temp_show(struct device *dev, struct device_attribute *devattr, - char *buf) +static int lm83_temp_read(struct device *dev, u32 attr, int channel, long *val) { - struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct lm83_data *data = dev_get_drvdata(dev); unsigned int regval; - int ret; - - ret = regmap_read(data->regmap, LM83_REG_TEMP[attr->index], ®val); - if (ret) - return ret; + int err; - return sprintf(buf, "%d\n", (s8)regval * 1000); + switch (attr) { + case hwmon_temp_input: + err = regmap_read(data->regmap, LM83_REG_TEMP[channel], ®val); + if (err < 0) + return err; + *val = (s8)regval * 1000; + break; + case hwmon_temp_max: + err = regmap_read(data->regmap, LM83_REG_MAX[channel], ®val); + if (err < 0) + return err; + *val = (s8)regval * 1000; + break; + case hwmon_temp_crit: + err = regmap_read(data->regmap, LM83_REG_R_TCRIT, ®val); + if (err < 0) + return err; + *val = (s8)regval * 1000; + break; + case hwmon_temp_max_alarm: + err = regmap_read(data->regmap, LM83_ALARM_REG[channel], ®val); + if (err < 0) + return err; + *val = !!(regval & LM83_MAX_ALARM_BIT[channel]); + break; + case hwmon_temp_crit_alarm: + err = regmap_read(data->regmap, LM83_ALARM_REG[channel], ®val); + if (err < 0) + return err; + *val = !!(regval & LM83_CRIT_ALARM_BIT[channel]); + break; + case hwmon_temp_fault: + err = regmap_read(data->regmap, LM83_ALARM_REG[channel], ®val); + if (err < 0) + return err; + *val = !!(regval & LM83_FAULT_BIT[channel]); + break; + default: + return -EOPNOTSUPP; + } + return 0; } -static ssize_t temp_store(struct device *dev, - struct device_attribute *devattr, const char *buf, - size_t count) +static int lm83_temp_write(struct device *dev, u32 attr, int channel, long val) { - struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); struct lm83_data *data = dev_get_drvdata(dev); unsigned int regval; - long val; int err; - err = kstrtol(buf, 10, &val); - if (err < 0) - return err; - regval = DIV_ROUND_CLOSEST(clamp_val(val, -128000, 127000), 1000); - err = regmap_write(data->regmap, LM83_REG_TEMP[attr->index], regval); - return err ? : count; + + switch (attr) { + case hwmon_temp_max: + err = regmap_write(data->regmap, LM83_REG_MAX[channel], regval); + if (err < 0) + return err; + break; + case hwmon_temp_crit: + err = regmap_write(data->regmap, LM83_REG_R_TCRIT, regval); + if (err < 0) + return err; + break; + default: + return -EOPNOTSUPP; + } + return 0; } -static ssize_t alarms_show(struct device *dev, struct device_attribute *dummy, - char *buf) +static int lm83_chip_read(struct device *dev, u32 attr, int channel, long *val) { struct lm83_data *data = dev_get_drvdata(dev); - unsigned int alarms, regval; + unsigned int regval; int err; - err = regmap_read(data->regmap, LM83_REG_R_STATUS1, ®val); - if (err < 0) - return err; - alarms = regval; - err = regmap_read(data->regmap, LM83_REG_R_STATUS2, ®val); - if (err < 0) - return err; - alarms |= regval << 8; + switch (attr) { + case hwmon_chip_alarms: + err = regmap_read(data->regmap, LM83_REG_R_STATUS1, ®val); + if (err < 0) + return err; + *val = regval; + err = regmap_read(data->regmap, LM83_REG_R_STATUS2, ®val); + if (err < 0) + return err; + *val |= regval << 8; + return 0; + default: + return -EOPNOTSUPP; + } - return sprintf(buf, "%u\n", alarms); + return 0; } -static ssize_t alarm_show(struct device *dev, - struct device_attribute *devattr, char *buf) +static int lm83_read(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long *val) { - struct sensor_device_attribute *attr = to_sensor_dev_attr(devattr); - struct lm83_data *data = dev_get_drvdata(dev); - int bitnr = attr->index; - unsigned int alarm; - int reg, err; - - if (bitnr < 8) { - reg = LM83_REG_R_STATUS1; - } else { - reg = LM83_REG_R_STATUS2; - bitnr -= 8; + switch (type) { + case hwmon_chip: + return lm83_chip_read(dev, attr, channel, val); + case hwmon_temp: + return lm83_temp_read(dev, attr, channel, val); + default: + return -EOPNOTSUPP; } - err = regmap_read(data->regmap, reg, &alarm); - if (err < 0) - return err; - return sprintf(buf, "%d\n", (alarm >> bitnr) & 1); } -static SENSOR_DEVICE_ATTR_RO(temp1_input, temp, 0); -static SENSOR_DEVICE_ATTR_RO(temp2_input, temp, 1); -static SENSOR_DEVICE_ATTR_RO(temp3_input, temp, 2); -static SENSOR_DEVICE_ATTR_RO(temp4_input, temp, 3); -static SENSOR_DEVICE_ATTR_RW(temp1_max, temp, 4); -static SENSOR_DEVICE_ATTR_RW(temp2_max, temp, 5); -static SENSOR_DEVICE_ATTR_RW(temp3_max, temp, 6); -static SENSOR_DEVICE_ATTR_RW(temp4_max, temp, 7); -static SENSOR_DEVICE_ATTR_RO(temp1_crit, temp, 8); -static SENSOR_DEVICE_ATTR_RO(temp2_crit, temp, 8); -static SENSOR_DEVICE_ATTR_RW(temp3_crit, temp, 8); -static SENSOR_DEVICE_ATTR_RO(temp4_crit, temp, 8); - -/* Individual alarm files */ -static SENSOR_DEVICE_ATTR_RO(temp1_crit_alarm, alarm, 0); -static SENSOR_DEVICE_ATTR_RO(temp3_crit_alarm, alarm, 1); -static SENSOR_DEVICE_ATTR_RO(temp3_fault, alarm, 2); -static SENSOR_DEVICE_ATTR_RO(temp3_max_alarm, alarm, 4); -static SENSOR_DEVICE_ATTR_RO(temp1_max_alarm, alarm, 6); -static SENSOR_DEVICE_ATTR_RO(temp2_crit_alarm, alarm, 8); -static SENSOR_DEVICE_ATTR_RO(temp4_crit_alarm, alarm, 9); -static SENSOR_DEVICE_ATTR_RO(temp4_fault, alarm, 10); -static SENSOR_DEVICE_ATTR_RO(temp4_max_alarm, alarm, 12); -static SENSOR_DEVICE_ATTR_RO(temp2_fault, alarm, 13); -static SENSOR_DEVICE_ATTR_RO(temp2_max_alarm, alarm, 15); -/* Raw alarm file for compatibility */ -static DEVICE_ATTR_RO(alarms); - -static struct attribute *lm83_attributes[] = { - &sensor_dev_attr_temp1_input.dev_attr.attr, - &sensor_dev_attr_temp3_input.dev_attr.attr, - &sensor_dev_attr_temp1_max.dev_attr.attr, - &sensor_dev_attr_temp3_max.dev_attr.attr, - &sensor_dev_attr_temp1_crit.dev_attr.attr, - &sensor_dev_attr_temp3_crit.dev_attr.attr, - - &sensor_dev_attr_temp1_crit_alarm.dev_attr.attr, - &sensor_dev_attr_temp3_crit_alarm.dev_attr.attr, - &sensor_dev_attr_temp3_fault.dev_attr.attr, - &sensor_dev_attr_temp3_max_alarm.dev_attr.attr, - &sensor_dev_attr_temp1_max_alarm.dev_attr.attr, - &dev_attr_alarms.attr, - NULL -}; +static int lm83_write(struct device *dev, enum hwmon_sensor_types type, + u32 attr, int channel, long val) +{ + switch (type) { + case hwmon_temp: + return lm83_temp_write(dev, attr, channel, val); + default: + return -EOPNOTSUPP; + } +} -static const struct attribute_group lm83_group = { - .attrs = lm83_attributes, -}; +static umode_t lm83_is_visible(const void *_data, enum hwmon_sensor_types type, + u32 attr, int channel) +{ + const struct lm83_data *data = _data; -static struct attribute *lm83_attributes_opt[] = { - &sensor_dev_attr_temp2_input.dev_attr.attr, - &sensor_dev_attr_temp4_input.dev_attr.attr, - &sensor_dev_attr_temp2_max.dev_attr.attr, - &sensor_dev_attr_temp4_max.dev_attr.attr, - &sensor_dev_attr_temp2_crit.dev_attr.attr, - &sensor_dev_attr_temp4_crit.dev_attr.attr, - - &sensor_dev_attr_temp2_crit_alarm.dev_attr.attr, - &sensor_dev_attr_temp4_crit_alarm.dev_attr.attr, - &sensor_dev_attr_temp4_fault.dev_attr.attr, - &sensor_dev_attr_temp4_max_alarm.dev_attr.attr, - &sensor_dev_attr_temp2_fault.dev_attr.attr, - &sensor_dev_attr_temp2_max_alarm.dev_attr.attr, + /* + * LM82 only supports a single external channel, modeled as channel 2. + */ + if (data->type == lm82 && (channel == 1 || channel == 3)) + return 0; + + switch (type) { + case hwmon_chip: + if (attr == hwmon_chip_alarms) + return 0444; + break; + case hwmon_temp: + switch (attr) { + case hwmon_temp_input: + case hwmon_temp_max_alarm: + case hwmon_temp_crit_alarm: + return 0444; + case hwmon_temp_fault: + if (channel) + return 0444; + break; + case hwmon_temp_max: + return 0644; + case hwmon_temp_crit: + if (channel == 2) + return 0644; + return 0444; + default: + break; + } + break; + default: + return -ENODEV; + } + return 0; +} + +static const struct hwmon_channel_info *lm83_info[] = { + HWMON_CHANNEL_INFO(chip, HWMON_C_ALARMS), + HWMON_CHANNEL_INFO(temp, + HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT | + HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM, + HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT | + HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT, + HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT | + HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT, + HWMON_T_INPUT | HWMON_T_MAX | HWMON_T_CRIT | + HWMON_T_MAX_ALARM | HWMON_T_CRIT_ALARM | HWMON_T_FAULT + ), NULL }; -static const struct attribute_group lm83_group_opt = { - .attrs = lm83_attributes_opt, +static const struct hwmon_ops lm83_hwmon_ops = { + .is_visible = lm83_is_visible, + .read = lm83_read, + .write = lm83_write, }; -/* - * Real code - */ +static const struct hwmon_chip_info lm83_chip_info = { + .ops = &lm83_hwmon_ops, + .info = lm83_info, +}; /* Return 0 if detection is successful, -ENODEV otherwise */ static int lm83_detect(struct i2c_client *client, @@ -381,18 +440,10 @@ static int lm83_probe(struct i2c_client *client) if (IS_ERR(data->regmap)) return PTR_ERR(data->regmap); - /* - * Register sysfs hooks - * The LM82 can only monitor one external diode which is - * at the same register as the LM83 temp3 entry - so we - * declare 1 and 3 common, and then 2 and 4 only for the LM83. - */ - data->groups[0] = &lm83_group; - if (i2c_match_id(lm83_id, client)->driver_data == lm83) - data->groups[1] = &lm83_group_opt; + data->type = i2c_match_id(lm83_id, client)->driver_data; - hwmon_dev = devm_hwmon_device_register_with_groups(dev, client->name, - data, data->groups); + hwmon_dev = devm_hwmon_device_register_with_info(dev, client->name, + data, &lm83_chip_info, NULL); return PTR_ERR_OR_ZERO(hwmon_dev); }