Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1019078pxf; Thu, 8 Apr 2021 20:11:02 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx7giG75wDp2VVKMsOlsu/9+cVuM7inFLxFqxkYl10NjI7PRO7Bid8DeWNNZrhmVz464FFM X-Received: by 2002:a05:6402:27d3:: with SMTP id c19mr15504091ede.129.1617937862034; Thu, 08 Apr 2021 20:11:02 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1617937862; cv=none; d=google.com; s=arc-20160816; b=CAuMydbAjTd5gyUIDBjGQ1M/W7W7+589bFIzqgIQBCW2k/JFL7kLvpD5sI6y/atLXa /7mnDXOR44Gqt3nD2lu8ShhEgPCeJDpDWhv33zfHf3WTqEWmzHSkUBi3yY42LeWICzJD Y5565xRuHCYWTATY/KU3CpC/3u+bIzh6q29YJC+7/HSlRN81EjMjhc6O7qeDmDmhaNpS N37xDUriGnquR0x7xXfW7G+4LthWuMVr0wutf+cUzZK9VUQtz0ftHlsYgUxNAPmQDqqV lfVHEKQHz5E9TPMc5/cdDx05OWqdRohQCWpzpBxuAm/6xXqT6b0rxuarYVQhG05K7UQa EAYg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=sUg+qQ2naPK41eFG+uLo1X841jilOQ0/5sOtlHaDPZI=; b=vHiJct71dOh+GSOgGWZSFknN71NcxapF5wHwwHnxXMBY9G9iUVHjtV5PeP1+lTE4Fe FbLfVrcD9Ud9ud6hKDCh43frp1H3EKssPMQJ3z0vfaH5Br4wO4qlY0X6t6E+wFw2AlS8 g6hSqpGxV04zQU1opE7NGAmeAd33P3SV02fmmrRlbkmocPRKypNOldJnIhcOgpao9PeJ PqUG0d5hv6dsie9HEx81P5nAgx/rGlAaLYlfWQ3LPxm9018adqA5L2XZXPAHKTD0eY57 cD+COyA1VwnIfybdblCbQfId1PjGbRfWR0LBq3MSJvXine7aMe98CIUlv/E+gXfo8IIz jzIw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="sJzRge/v"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id i11si1581280edb.41.2021.04.08.20.10.39; Thu, 08 Apr 2021 20:11:02 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b="sJzRge/v"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233225AbhDIDJf (ORCPT + 99 others); Thu, 8 Apr 2021 23:09:35 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48576 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233243AbhDIDJW (ORCPT ); Thu, 8 Apr 2021 23:09:22 -0400 Received: from mail-qk1-x72a.google.com (mail-qk1-x72a.google.com [IPv6:2607:f8b0:4864:20::72a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B7A14C061760; Thu, 8 Apr 2021 20:09:09 -0700 (PDT) Received: by mail-qk1-x72a.google.com with SMTP id q3so4502714qkq.12; Thu, 08 Apr 2021 20:09:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sUg+qQ2naPK41eFG+uLo1X841jilOQ0/5sOtlHaDPZI=; b=sJzRge/vng3nm0ztAJCYD4SodCovKOQ6mMj1tTJ3o5LzLAccii1xaNxZz0N8PX0rr5 t+ujD8QFh8uUlUljimN+rLpV7BG3y2hs9Piqp+C3akxa5xNNK8rPAQejJJ3u4CQu4fVU PTAH4pvqymqzVY/9h9QLmHn/BGTKR1p8G9uoC4NlyJ70nOqnIJ3ZnzkZN0Hdij94flsp HrMxkmZcJf6jPsur+ZH85mk1MQpOm/GVqWqnV7O2IFB2DbLqM0NG5U7B8cMuD2xPLS4c rkTLc7w+3yDpmfIYNuD9f5qTKAmqrWNmfMpAqIN/C7to2RiaF8/j+nDKyVI+w7lXWwHp WMKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=sUg+qQ2naPK41eFG+uLo1X841jilOQ0/5sOtlHaDPZI=; b=CNidOqYZKACtGVYP0YOjsv64zAT1JCLbvAAPJ4ygWD6E1E/lW8oxqiHTABadg1uwJm 2tX/oXdTr1pxLmdBed2awiBluUx9Xzevh4CST8u34CwbAuMCfp7Xcj3VwXskKYrKNdeL N6Q+dMtep2JI9AIViGLh0gH2GfDzugURM05nFafo5uHDk6Zi6yCUJ3fkb0SUBwXmf8Wm JW9ZHJm4+CU7UTPFYndFLyALlyBVPpwQLsEIg2NssnoGRUz26QNY6yjImSEuPeTOxnfj tcQEUdy/GDCnUyNQU9MLyoww5t9YcPaoD/f6ICZxHKI5ZoEQSemz9aNbE5c9OY/PYj4b K/PQ== X-Gm-Message-State: AOAM530csvmX4dk2DftXWcri0LLGzJhWT5CTHKcIQ9IdpVBH0qBKE1vT AMLI9FP+9WpdZ+2uEVWL5vg= X-Received: by 2002:a37:7745:: with SMTP id s66mr11593524qkc.18.1617937749025; Thu, 08 Apr 2021 20:09:09 -0700 (PDT) Received: from LuizSampaio-PC.localdomain ([2804:14d:5c21:af45:3b27:576c:7dde:37f1]) by smtp.gmail.com with ESMTPSA id c5sm925408qkl.21.2021.04.08.20.09.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 08 Apr 2021 20:09:08 -0700 (PDT) From: Luiz Sampaio To: zbr@ioremap.net Cc: corbet@lwn.net, rikard.falkeborn@gmail.com, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Luiz Sampaio Subject: [PATCH v5 5/6] w1: ds2438: adding support for reading page1 Date: Fri, 9 Apr 2021 00:09:41 -0300 Message-Id: <20210409030942.441830-6-sampaio.ime@gmail.com> X-Mailer: git-send-email 2.30.1 In-Reply-To: <20210409030942.441830-1-sampaio.ime@gmail.com> References: <20210405105009.420924-1-sampaio.ime@gmail.com> <20210409030942.441830-1-sampaio.ime@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Added a sysfs entry to support reading the page1 registers. This registers contain Elapsed Time Meter (ETM) data, which shows for how long the chip is on, as well as an Offset Register data, which can be used to calibrate the current measurement of the chip. Signed-off-by: Luiz Sampaio --- .../ABI/stable/sysfs-driver-w1_ds2438 | 6 +++ Documentation/w1/slaves/w1_ds2438.rst | 8 ++++ drivers/w1/slaves/w1_ds2438.c | 41 +++++++++++++++++++ 3 files changed, 55 insertions(+) create mode 100644 Documentation/ABI/stable/sysfs-driver-w1_ds2438 diff --git a/Documentation/ABI/stable/sysfs-driver-w1_ds2438 b/Documentation/ABI/stable/sysfs-driver-w1_ds2438 new file mode 100644 index 000000000000..fa47437c11d9 --- /dev/null +++ b/Documentation/ABI/stable/sysfs-driver-w1_ds2438 @@ -0,0 +1,6 @@ +What: /sys/bus/w1/devices/.../page1 +Date: April 2021 +Contact: Luiz Sampaio +Description: read the contents of the page1 of the DS2438 + see Documentation/w1/slaves/w1_ds2438.rst for detailed information +Users: any user space application which wants to communicate with DS2438 diff --git a/Documentation/w1/slaves/w1_ds2438.rst b/Documentation/w1/slaves/w1_ds2438.rst index a29309a3f8e5..ac8d0d4b0d0e 100644 --- a/Documentation/w1/slaves/w1_ds2438.rst +++ b/Documentation/w1/slaves/w1_ds2438.rst @@ -44,6 +44,14 @@ Internally when this file is read, the additional CRC byte is also obtained from the slave device. If it is correct, the 8 bytes page data are passed to userspace, otherwise an I/O error is returned. +"page1" +------- +This file provides full 8 bytes of the chip Page 1 (01h). +This page contains the ICA, elapsed time meter and current offset data of the DS2438. +Internally when this file is read, the additional CRC byte is also obtained +from the slave device. If it is correct, the 8 bytes page data are passed +to userspace, otherwise an I/O error is returned. + "temperature" ------------- Opening and reading this file initiates the CONVERT_T (temperature conversion) diff --git a/drivers/w1/slaves/w1_ds2438.c b/drivers/w1/slaves/w1_ds2438.c index ef6217ecb1cb..2cfdfedb584f 100644 --- a/drivers/w1/slaves/w1_ds2438.c +++ b/drivers/w1/slaves/w1_ds2438.c @@ -49,6 +49,15 @@ #define DS2438_CURRENT_MSB 0x06 #define DS2438_THRESHOLD 0x07 +/* Page #1 definitions */ +#define DS2438_ETM_0 0x00 +#define DS2438_ETM_1 0x01 +#define DS2438_ETM_2 0x02 +#define DS2438_ETM_3 0x03 +#define DS2438_ICA 0x04 +#define DS2438_OFFSET_LSB 0x05 +#define DS2438_OFFSET_MSB 0x06 + static int w1_ds2438_get_page(struct w1_slave *sl, int pageno, u8 *buf) { unsigned int retries = W1_DS2438_RETRIES; @@ -325,6 +334,36 @@ static ssize_t page0_read(struct file *filp, struct kobject *kobj, return ret; } +static ssize_t page1_read(struct file *filp, struct kobject *kobj, + struct bin_attribute *bin_attr, char *buf, + loff_t off, size_t count) +{ + struct w1_slave *sl = kobj_to_w1_slave(kobj); + int ret; + u8 w1_buf[DS2438_PAGE_SIZE + 1 /*for CRC*/]; + + if (off != 0) + return 0; + if (!buf) + return -EINVAL; + + mutex_lock(&sl->master->bus_mutex); + + /* Read no more than page1 size */ + if (count > DS2438_PAGE_SIZE) + count = DS2438_PAGE_SIZE; + + if (w1_ds2438_get_page(sl, 1, w1_buf) == 0) { + memcpy(buf, &w1_buf, count); + ret = count; + } else + ret = -EIO; + + mutex_unlock(&sl->master->bus_mutex); + + return ret; +} + static ssize_t temperature_read(struct file *filp, struct kobject *kobj, struct bin_attribute *bin_attr, char *buf, loff_t off, size_t count) @@ -390,6 +429,7 @@ static ssize_t vdd_read(struct file *filp, struct kobject *kobj, static BIN_ATTR(iad, 0664, iad_write, 0); static BIN_ATTR_RO(page0, DS2438_PAGE_SIZE); +static BIN_ATTR_RO(page1, DS2438_PAGE_SIZE); static BIN_ATTR_RO(temperature, 0/* real length varies */); static BIN_ATTR_RO(vad, 0/* real length varies */); static BIN_ATTR_RO(vdd, 0/* real length varies */); @@ -397,6 +437,7 @@ static BIN_ATTR_RO(vdd, 0/* real length varies */); static struct bin_attribute *w1_ds2438_bin_attrs[] = { &bin_attr_iad, &bin_attr_page0, + &bin_attr_page1, &bin_attr_temperature, &bin_attr_vad, &bin_attr_vdd, -- 2.30.1