From patchwork Tue Sep 11 20:25:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kun Yi X-Patchwork-Id: 10596271 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 4A06114E5 for ; Tue, 11 Sep 2018 20:26:11 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 367D729E1B for ; Tue, 11 Sep 2018 20:26:11 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 2AC6729E55; Tue, 11 Sep 2018 20:26:11 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI, USER_IN_DEF_DKIM_WL autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A45A229E1B for ; Tue, 11 Sep 2018 20:26:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726762AbeILB1H (ORCPT ); Tue, 11 Sep 2018 21:27:07 -0400 Received: from mail-pf1-f201.google.com ([209.85.210.201]:35679 "EHLO mail-pf1-f201.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726792AbeILB1G (ORCPT ); Tue, 11 Sep 2018 21:27:06 -0400 Received: by mail-pf1-f201.google.com with SMTP id c8-v6so13412885pfn.2 for ; Tue, 11 Sep 2018 13:26:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:message-id:mime-version:subject:from:to:cc; bh=nXTYTlpb4L1pospr+dBwwPY/XcSA2ltILm0sXY3q2VY=; b=QPQMkQUtHtBsEwGLfj46wo7pliPr/d0ujzNJqHQrwMnETRdc4Qt+e7tV4bm1ZKNXaP E15uMJYIbE4PZYATJkyngdy/Afjq+VpkWKmypElcQHcU9WzWb+sqr2e8FXDhir91yXta F9AZKXwIz7vjzPGYHcH8ze6qIMP1Af4zCOY6BOhLOoDesHld+aGPOWRyEVbRlIKBhDIS LLcbvko1Nqsjs0WNqaTSIQICALZuZYXG3wrveUn9ThoEZ9u3xJC+hyribtu9RtbRFRYk qh6s+OGrCCTujfK8U79dKDgAVayo0cvKt5Jj08qXv1IM4Sn5BJ3eWFsb+TRxIpXeCV4q BcIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=nXTYTlpb4L1pospr+dBwwPY/XcSA2ltILm0sXY3q2VY=; b=BGkLCvDMUPdAtnstdnLdLnxsA+tpYb+//Gg4JwV6/xiXGf/eR8cDpl2wyP0prFguCq 4/rE75S1iTy1uiJqiTdwzZ+Rz3WytxqMxnHWIFeZ8meGJLcR+tTaPwhrzgPrwoIGvByX EKbaGHLtmERik03r3CrzPccZtvTLmbEBwrBu1zcEYzo2ZbSg0X5BFx+8jMZtpg+kYwDN sknIfdvQSDSOxzgcP62YZY6PYnjjSUKpjPsb9ov9fAQwQpJSXS8LXls1zp1qqJP9blBN 6ka80K6+Ljn2mSbOYgjNFj77AwMsN+f/YW9rQxVhlm77FKJw1uVqgdRucZ23C4NnZgSV k5pw== X-Gm-Message-State: APzg51AtxjNi0Vd1KsNxWmjuakpAg3c11JXqkdXLeTaXpSCu6ror6sR7 9WyQe3QytbLZUdfVP6djnreuIs8dlcUEaOGX+oP9cfSg2YoRcPJHMfOP91u2Ja1b1zGZN1i2f7k gHdqud3kXWicFhofxZKmEs/NxdKNLBIfWxxI9sTDsS6tyzt256YAEpkUjby5Td8pbcg== X-Google-Smtp-Source: ANB0VdbUKPtpBCOUOoI88CyyIofXlHniuumabNyPeO5UJVjAfh9KfV3/Xyu09Pg3iemGufFkfQqsPJeapA== X-Received: by 2002:a65:48c7:: with SMTP id o7-v6mr1834238pgs.49.1536697568367; Tue, 11 Sep 2018 13:26:08 -0700 (PDT) Date: Tue, 11 Sep 2018 13:25:58 -0700 Message-Id: <20180911202558.58433-1-kunyi@google.com> Mime-Version: 1.0 X-Mailer: git-send-email 2.19.0.rc2.392.g5ba43deb5a-goog Subject: [PATCH] hwmon: (lm75) Add MAX31725/6 support From: Kun Yi To: linux-hwmon@vger.kernel.org, linux@roeck-us.net, frodol@dds.nl Cc: openbmc@lists.ozlabs.org, rlippert@google.com, benjaminfair@google.com, Kun Yi Sender: linux-hwmon-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-hwmon@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP MAX31725/MAX31726 are local temperature sensors with +/- 0.5 degree Celsius accuracy and 16-bit (0.00390625 degrees Celsius) resolution. They have a register mapping and encoding compatible with the lm75 series drivers. Address scan and extended temperature range are not supported by this patch. Tested on real hardware and verified temperature readings are correct. Signed-off-by: Kun Yi --- Documentation/hwmon/lm75 | 6 +++--- drivers/hwmon/lm75.c | 18 ++++++++++++++++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/Documentation/hwmon/lm75 b/Documentation/hwmon/lm75 index ac95edfcd907..2f1120f88c16 100644 --- a/Documentation/hwmon/lm75 +++ b/Documentation/hwmon/lm75 @@ -17,8 +17,8 @@ Supported chips: Addresses scanned: none Datasheet: Publicly available at the Maxim website http://www.maximintegrated.com/ - * Maxim MAX6625, MAX6626 - Prefixes: 'max6625', 'max6626' + * Maxim MAX6625, MAX6626, MAX31725, MAX31726 + Prefixes: 'max6625', 'max6626', 'max31725', 'max31726' Addresses scanned: none Datasheet: Publicly available at the Maxim website http://www.maxim-ic.com/ @@ -86,7 +86,7 @@ The LM75 is essentially an industry standard; there may be other LM75 clones not listed here, with or without various enhancements, that are supported. The clones are not detected by the driver, unless they reproduce the exact register tricks of the original LM75, and must -therefore be instantiated explicitly. Higher resolution up to 12-bit +therefore be instantiated explicitly. Higher resolution up to 16-bit is supported by this driver, other specific enhancements are not. The LM77 is not supported, contrary to what we pretended for a long time. diff --git a/drivers/hwmon/lm75.c b/drivers/hwmon/lm75.c index 49f4b33a5685..e6e5a1080f09 100644 --- a/drivers/hwmon/lm75.c +++ b/drivers/hwmon/lm75.c @@ -47,6 +47,7 @@ enum lm75_type { /* keep sorted in alphabetical order */ lm75b, max6625, max6626, + max31725, mcp980x, stds75, tcn75, @@ -64,7 +65,6 @@ enum lm75_type { /* keep sorted in alphabetical order */ static const unsigned short normal_i2c[] = { 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, I2C_CLIENT_END }; - /* The LM75 registers */ #define LM75_REG_TEMP 0x00 #define LM75_REG_CONF 0x01 @@ -76,7 +76,7 @@ struct lm75_data { struct i2c_client *client; struct regmap *regmap; u8 orig_conf; - u8 resolution; /* In bits, between 9 and 12 */ + u8 resolution; /* In bits, between 9 and 16 */ u8 resolution_limits; unsigned int sample_time; /* In ms */ }; @@ -339,6 +339,10 @@ lm75_probe(struct i2c_client *client, const struct i2c_device_id *id) data->resolution_limits = 9; data->sample_time = MSEC_PER_SEC / 4; break; + case max31725: + data->resolution = 16; + data->sample_time = MSEC_PER_SEC / 8; + break; case tcn75: data->resolution = 9; data->sample_time = MSEC_PER_SEC / 8; @@ -415,6 +419,8 @@ static const struct i2c_device_id lm75_ids[] = { { "lm75b", lm75b, }, { "max6625", max6625, }, { "max6626", max6626, }, + { "max31725", max31725, }, + { "max31726", max31725, }, { "mcp980x", mcp980x, }, { "stds75", stds75, }, { "tcn75", tcn75, }, @@ -471,6 +477,14 @@ static const struct of_device_id lm75_of_match[] = { .compatible = "maxim,max6626", .data = (void *)max6626 }, + { + .compatible = "maxim,max31725", + .data = (void *)max31725 + }, + { + .compatible = "maxim,max31726", + .data = (void *)max31725 + }, { .compatible = "maxim,mcp980x", .data = (void *)mcp980x