From patchwork Fri Feb 14 09:29:15 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Tachici X-Patchwork-Id: 11382009 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id C6C7E109A for ; Fri, 14 Feb 2020 09:29:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B06C522314 for ; Fri, 14 Feb 2020 09:29:47 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727965AbgBNJ3i (ORCPT ); Fri, 14 Feb 2020 04:29:38 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:33086 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728807AbgBNJ3h (ORCPT ); Fri, 14 Feb 2020 04:29:37 -0500 Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01E9GcYG003460; Fri, 14 Feb 2020 04:29:36 -0500 Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com with ESMTP id 2y1udn4rjc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Feb 2020 04:29:36 -0500 Received: from ASHBMBX8.ad.analog.com (ashbmbx8.ad.analog.com [10.64.17.5]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 01E9TZZp059242 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Fri, 14 Feb 2020 04:29:35 -0500 Received: from ASHBMBX9.ad.analog.com (10.64.17.10) by ASHBMBX8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Fri, 14 Feb 2020 04:29:34 -0500 Received: from zeus.spd.analog.com (10.64.82.11) by ASHBMBX9.ad.analog.com (10.64.17.10) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Fri, 14 Feb 2020 04:29:34 -0500 Received: from tachici-Precision-5530.ad.analog.com ([10.48.65.175]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 01E9TVrF029232; Fri, 14 Feb 2020 04:29:33 -0500 From: Alexandru Tachici To: , CC: Subject: [PATCH 1/5] iio: accel: adxl372: Add support for FIFO peak mode Date: Fri, 14 Feb 2020 11:29:15 +0200 Message-ID: <20200214092919.24351-2-alexandru.tachici@analog.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214092919.24351-1-alexandru.tachici@analog.com> References: <20200214092919.24351-1-alexandru.tachici@analog.com> MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-14_02:2020-02-12,2020-02-14 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 mlxlogscore=999 lowpriorityscore=0 clxscore=1015 mlxscore=0 impostorscore=0 spamscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2002140076 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org From: Stefan Popa By default, if all three channels (x, y, z) are enabled, sample sets of concurrent 3-axis data is stored in the FIFO. This patch adds the option to configure the FIFO to store peak acceleration (x, y and z) of every over-threshold event. Since we cannot store 1 or 2 axis peak acceleration data in the FIFO, then all three axis need to be enabled in order for this mode to work. Signed-off-by: Stefan Popa --- drivers/iio/accel/adxl372.c | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/drivers/iio/accel/adxl372.c b/drivers/iio/accel/adxl372.c index 67b8817995c0..bb6c2bf1a457 100644 --- a/drivers/iio/accel/adxl372.c +++ b/drivers/iio/accel/adxl372.c @@ -264,6 +264,7 @@ struct adxl372_state { u8 int2_bitmask; u16 watermark; __be16 fifo_buf[ADXL372_FIFO_SIZE]; + bool peak_fifo_mode_en; }; static const unsigned long adxl372_channel_masks[] = { @@ -722,6 +723,36 @@ static int adxl372_write_raw(struct iio_dev *indio_dev, } } +static ssize_t adxl372_peak_fifo_en_get(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct adxl372_state *st = iio_priv(dev_to_iio_dev(dev)); + + return sprintf(buf, "%d\n", st->peak_fifo_mode_en); +} + +static ssize_t adxl372_peak_fifo_en_set(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct adxl372_state *st = iio_priv(dev_to_iio_dev(dev)); + bool val; + int ret; + + ret = kstrtobool(buf, &val); + if (ret) + return ret; + + st->peak_fifo_mode_en = val; + + return len; +} + +static IIO_DEVICE_ATTR(peak_fifo_mode_enable, 0644, + adxl372_peak_fifo_en_get, + adxl372_peak_fifo_en_set, 0); + static ssize_t adxl372_show_filter_freq_avail(struct device *dev, struct device_attribute *attr, char *buf) @@ -817,11 +848,16 @@ static int adxl372_buffer_postenable(struct iio_dev *indio_dev) st->fifo_format = adxl372_axis_lookup_table[i].fifo_format; st->fifo_set_size = bitmap_weight(indio_dev->active_scan_mask, indio_dev->masklength); + + /* Configure the FIFO to store sets of impact event peak. */ + if (st->fifo_set_size == 3 && st->peak_fifo_mode_en) + st->fifo_format = ADXL372_XYZ_PEAK_FIFO; /* * The 512 FIFO samples can be allotted in several ways, such as: * 170 sample sets of concurrent 3-axis data * 256 sample sets of concurrent 2-axis data (user selectable) * 512 sample sets of single-axis data + * 170 sets of impact event peak (x, y, z) */ if ((st->watermark * st->fifo_set_size) > ADXL372_FIFO_SIZE) st->watermark = (ADXL372_FIFO_SIZE / st->fifo_set_size); @@ -894,6 +930,7 @@ static IIO_DEVICE_ATTR(in_accel_filter_low_pass_3db_frequency_available, static struct attribute *adxl372_attributes[] = { &iio_const_attr_sampling_frequency_available.dev_attr.attr, &iio_dev_attr_in_accel_filter_low_pass_3db_frequency_available.dev_attr.attr, + &iio_dev_attr_peak_fifo_mode_enable.dev_attr.attr, NULL, }; From patchwork Fri Feb 14 09:29:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Tachici X-Patchwork-Id: 11382007 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id F3CEA1820 for ; Fri, 14 Feb 2020 09:29:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id D237422314 for ; Fri, 14 Feb 2020 09:29:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729108AbgBNJ3k (ORCPT ); Fri, 14 Feb 2020 04:29:40 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:34754 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728807AbgBNJ3j (ORCPT ); Fri, 14 Feb 2020 04:29:39 -0500 Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01E9Gb7i003138; Fri, 14 Feb 2020 04:29:38 -0500 Received: from nwd2mta3.analog.com ([137.71.173.56]) by mx0a-00128a01.pphosted.com with ESMTP id 2y1udn4rje-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Feb 2020 04:29:38 -0500 Received: from SCSQMBX11.ad.analog.com (scsqmbx11.ad.analog.com [10.77.17.10]) by nwd2mta3.analog.com (8.14.7/8.14.7) with ESMTP id 01E9TaGj026360 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Fri, 14 Feb 2020 04:29:37 -0500 Received: from SCSQMBX11.ad.analog.com (10.77.17.10) by SCSQMBX11.ad.analog.com (10.77.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Fri, 14 Feb 2020 01:29:35 -0800 Received: from zeus.spd.analog.com (10.64.82.11) by SCSQMBX11.ad.analog.com (10.77.17.10) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Fri, 14 Feb 2020 01:29:35 -0800 Received: from tachici-Precision-5530.ad.analog.com ([10.48.65.175]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 01E9TVrG029232; Fri, 14 Feb 2020 04:29:34 -0500 From: Alexandru Tachici To: , CC: Subject: [PATCH 2/5] iio: accel: adxl372: Set iio_chan BE Date: Fri, 14 Feb 2020 11:29:16 +0200 Message-ID: <20200214092919.24351-3-alexandru.tachici@analog.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214092919.24351-1-alexandru.tachici@analog.com> References: <20200214092919.24351-1-alexandru.tachici@analog.com> MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-14_02:2020-02-12,2020-02-14 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 mlxlogscore=923 lowpriorityscore=0 clxscore=1015 mlxscore=0 impostorscore=0 spamscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2002140076 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Data stored in the iio-buffer is BE and this should be specified in the iio_chan_spec struct. Signed-off-by: Alexandru Tachici --- drivers/iio/accel/adxl372.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/iio/accel/adxl372.c b/drivers/iio/accel/adxl372.c index bb6c2bf1a457..538e5053a946 100644 --- a/drivers/iio/accel/adxl372.c +++ b/drivers/iio/accel/adxl372.c @@ -237,6 +237,7 @@ static const struct adxl372_axis_lookup adxl372_axis_lookup_table[] = { .realbits = 12, \ .storagebits = 16, \ .shift = 4, \ + .endianness = IIO_BE, \ }, \ } From patchwork Fri Feb 14 09:29:17 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Tachici X-Patchwork-Id: 11382005 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id B5361109A for ; Fri, 14 Feb 2020 09:29:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9CCEA22314 for ; Fri, 14 Feb 2020 09:29:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728807AbgBNJ3m (ORCPT ); Fri, 14 Feb 2020 04:29:42 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:35688 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729113AbgBNJ3l (ORCPT ); Fri, 14 Feb 2020 04:29:41 -0500 Received: from pps.filterd (m0167088.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01E9F1Ah026700; Fri, 14 Feb 2020 04:29:39 -0500 Received: from nwd2mta3.analog.com ([137.71.173.56]) by mx0a-00128a01.pphosted.com with ESMTP id 2y1tyqn1fm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Feb 2020 04:29:39 -0500 Received: from SCSQMBX11.ad.analog.com (scsqmbx11.ad.analog.com [10.77.17.10]) by nwd2mta3.analog.com (8.14.7/8.14.7) with ESMTP id 01E9TbxY026363 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Fri, 14 Feb 2020 04:29:38 -0500 Received: from SCSQCASHYB7.ad.analog.com (10.77.17.133) by SCSQMBX11.ad.analog.com (10.77.17.10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Fri, 14 Feb 2020 01:29:36 -0800 Received: from SCSQMBX11.ad.analog.com (10.77.17.10) by SCSQCASHYB7.ad.analog.com (10.77.17.133) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Fri, 14 Feb 2020 01:29:36 -0800 Received: from zeus.spd.analog.com (10.64.82.11) by SCSQMBX11.ad.analog.com (10.77.17.10) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Fri, 14 Feb 2020 01:29:36 -0800 Received: from tachici-Precision-5530.ad.analog.com ([10.48.65.175]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 01E9TVrH029232; Fri, 14 Feb 2020 04:29:35 -0500 From: Alexandru Tachici To: , CC: Subject: [PATCH 3/5] iio: accel: adxl372: add sysfs for time registers Date: Fri, 14 Feb 2020 11:29:17 +0200 Message-ID: <20200214092919.24351-4-alexandru.tachici@analog.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214092919.24351-1-alexandru.tachici@analog.com> References: <20200214092919.24351-1-alexandru.tachici@analog.com> MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-14_02:2020-02-12,2020-02-14 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 suspectscore=0 priorityscore=1501 malwarescore=0 mlxscore=0 lowpriorityscore=0 phishscore=0 mlxlogscore=999 bulkscore=0 impostorscore=0 clxscore=1015 spamscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2002140076 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Currently the driver configures adxl372 to work in loop mode. The inactivity and activity timings decide how fast the chip will loop through the awake and waiting states. This patch adds sysfs entries for the inactivity and activity shared properties. Signed-off-by: Alexandru Tachici --- drivers/iio/accel/adxl372.c | 66 +++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/drivers/iio/accel/adxl372.c b/drivers/iio/accel/adxl372.c index 538e5053a946..8bef6f2030ff 100644 --- a/drivers/iio/accel/adxl372.c +++ b/drivers/iio/accel/adxl372.c @@ -754,6 +754,70 @@ static IIO_DEVICE_ATTR(peak_fifo_mode_enable, 0644, adxl372_peak_fifo_en_get, adxl372_peak_fifo_en_set, 0); +static ssize_t adxl372_time_activity_get(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct adxl372_state *st = iio_priv(dev_to_iio_dev(dev)); + + return sprintf(buf, "%d\n", st->act_time_ms); +} + +static ssize_t adxl372_time_activity_set(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct adxl372_state *st = iio_priv(dev_to_iio_dev(dev)); + unsigned int val; + int ret; + + ret = kstrtouint(buf, 0, &val); + if (ret) + return ret; + + ret = adxl372_set_activity_time_ms(st, val); + if (ret < 0) + return ret; + + return len; +} + +static IIO_DEVICE_ATTR(time_activity, 0644, + adxl372_time_activity_get, + adxl372_time_activity_set, 0); + +static ssize_t adxl372_time_inactivity_get(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + struct adxl372_state *st = iio_priv(dev_to_iio_dev(dev)); + + return sprintf(buf, "%d\n", st->inact_time_ms); +} + +static ssize_t adxl372_time_inactivity_set(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + struct adxl372_state *st = iio_priv(dev_to_iio_dev(dev)); + unsigned int val; + int ret; + + ret = kstrtouint(buf, 0, &val); + if (ret) + return ret; + + ret = adxl372_set_inactivity_time_ms(st, val); + if (ret) + return ret; + + return len; +} + +static IIO_DEVICE_ATTR(time_inactivity, 0644, + adxl372_time_inactivity_get, + adxl372_time_inactivity_set, 0); + static ssize_t adxl372_show_filter_freq_avail(struct device *dev, struct device_attribute *attr, char *buf) @@ -932,6 +996,8 @@ static struct attribute *adxl372_attributes[] = { &iio_const_attr_sampling_frequency_available.dev_attr.attr, &iio_dev_attr_in_accel_filter_low_pass_3db_frequency_available.dev_attr.attr, &iio_dev_attr_peak_fifo_mode_enable.dev_attr.attr, + &iio_dev_attr_time_inactivity.dev_attr.attr, + &iio_dev_attr_time_activity.dev_attr.attr, NULL, }; From patchwork Fri Feb 14 09:31:56 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Tachici X-Patchwork-Id: 11382013 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 96925109A for ; Fri, 14 Feb 2020 09:32:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 75DE7222C4 for ; Fri, 14 Feb 2020 09:32:14 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729007AbgBNJcO (ORCPT ); Fri, 14 Feb 2020 04:32:14 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:42002 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728522AbgBNJcN (ORCPT ); Fri, 14 Feb 2020 04:32:13 -0500 Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01E9GrRj011251; Fri, 14 Feb 2020 04:32:12 -0500 Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com with ESMTP id 2y1udn4rqc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Feb 2020 04:32:12 -0500 Received: from ASHBMBX8.ad.analog.com (ashbmbx8.ad.analog.com [10.64.17.5]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 01E9WBuT059588 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Fri, 14 Feb 2020 04:32:11 -0500 Received: from ASHBMBX8.ad.analog.com (10.64.17.5) by ASHBMBX8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Fri, 14 Feb 2020 04:32:10 -0500 Received: from zeus.spd.analog.com (10.64.82.11) by ASHBMBX8.ad.analog.com (10.64.17.5) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Fri, 14 Feb 2020 04:32:10 -0500 Received: from tachici-Precision-5530.ad.analog.com ([10.48.65.175]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 01E9W9op029437; Fri, 14 Feb 2020 04:32:09 -0500 From: Alexandru Tachici To: , CC: Subject: [PATCH 4/5] iio: accel: adxl372: Add sysfs for g thresholds Date: Fri, 14 Feb 2020 11:31:56 +0200 Message-ID: <20200214093156.24528-1-alexandru.tachici@analog.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214092919.24351-1-alexandru.tachici@analog.com> References: <20200214092919.24351-1-alexandru.tachici@analog.com> MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-14_02:2020-02-12,2020-02-14 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 mlxlogscore=686 lowpriorityscore=0 clxscore=1015 mlxscore=0 impostorscore=0 spamscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2002140076 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org Adxl372 has configurable thresholds for all 3 axis that define activity and inactivity. The driver sets the default inactivity threshold to 100mg and the activity threshold to 1g. These values are not ideal for all applications. This patch adds device attributes for activity and inactivity thresholds for each axis. Signed-off-by: Alexandru Tachici --- drivers/iio/accel/adxl372.c | 91 +++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) diff --git a/drivers/iio/accel/adxl372.c b/drivers/iio/accel/adxl372.c index 8bef6f2030ff..ab154699e23a 100644 --- a/drivers/iio/accel/adxl372.c +++ b/drivers/iio/accel/adxl372.c @@ -5,6 +5,7 @@ * Copyright 2018 Analog Devices Inc. */ +#include #include #include #include @@ -131,6 +132,14 @@ #define ADXL372_INT1_MAP_LOW_MSK BIT(7) #define ADXL372_INT1_MAP_LOW_MODE(x) (((x) & 0x1) << 7) +/* ADX372_THRESH */ +#define ADXL372_THRESH_VAL_H_MSK GENMASK(10, 3) +#define ADXL372_THRESH_VAL_H_SEL(x) \ + FIELD_GET(ADXL372_THRESH_VAL_H_MSK, x) +#define ADXL372_THRESH_VAL_L_MSK GENMASK(2, 0) +#define ADXL372_THRESH_VAL_L_SEL(x) \ + FIELD_GET(ADXL372_THRESH_VAL_L_MSK, x) + /* The ADXL372 includes a deep, 512 sample FIFO buffer */ #define ADXL372_FIFO_SIZE 512 @@ -222,6 +231,32 @@ static const struct adxl372_axis_lookup adxl372_axis_lookup_table[] = { { BIT(0) | BIT(1) | BIT(2), ADXL372_XYZ_FIFO }, }; +static ssize_t adxl372_read_threshold_value(struct iio_dev *, uintptr_t, + const struct iio_chan_spec *, + char *); + +static ssize_t adxl372_write_threshold_value(struct iio_dev *, uintptr_t, + struct iio_chan_spec const *, + const char *, size_t); + +static const struct iio_chan_spec_ext_info adxl372_ext_info[] = { + { + .name = "threshold_activity", + .shared = IIO_SEPARATE, + .read = adxl372_read_threshold_value, + .write = adxl372_write_threshold_value, + .private = ADXL372_X_THRESH_ACT_H, + }, + { + .name = "threshold_inactivity", + .shared = IIO_SEPARATE, + .read = adxl372_read_threshold_value, + .write = adxl372_write_threshold_value, + .private = ADXL372_X_THRESH_INACT_H, + }, + {}, +}; + #define ADXL372_ACCEL_CHANNEL(index, reg, axis) { \ .type = IIO_ACCEL, \ .address = reg, \ @@ -239,6 +274,7 @@ static const struct adxl372_axis_lookup adxl372_axis_lookup_table[] = { .shift = 4, \ .endianness = IIO_BE, \ }, \ + .ext_info = adxl372_ext_info, \ } static const struct iio_chan_spec adxl372_channels[] = { @@ -277,6 +313,61 @@ static const unsigned long adxl372_channel_masks[] = { 0 }; +static ssize_t adxl372_read_threshold_value(struct iio_dev *indio_dev, + uintptr_t private, + const struct iio_chan_spec *chan, + char *buf) +{ + struct adxl372_state *st = iio_priv(indio_dev); + unsigned int addr; + __be16 __regval; + u16 regval; + int ret; + + addr = (unsigned int)chan->ext_info->private; + addr = addr + chan->scan_index * 2; + + ret = regmap_bulk_read(st->regmap, addr, &__regval, sizeof(__regval)); + if (ret < 0) + return ret; + + regval = be16_to_cpu(__regval); + regval >>= 5; + + return sprintf(buf, "%d\n", regval); +} + +static ssize_t adxl372_write_threshold_value(struct iio_dev *indio_dev, + uintptr_t private, + const struct iio_chan_spec *chan, + const char *buf, + size_t len) +{ + struct adxl372_state *st = iio_priv(indio_dev); + unsigned int addr; + u16 threshold; + int ret; + + ret = kstrtou16(buf, 0, &threshold); + if (ret < 0) + return ret; + + addr = chan->ext_info->private; + addr = addr + chan->scan_index * 2; + + ret = regmap_write(st->regmap, addr, + ADXL372_THRESH_VAL_H_SEL(threshold)); + if (ret < 0) + return ret; + + ret = regmap_update_bits(st->regmap, addr + 1, GENMASK(7, 5), + ADXL372_THRESH_VAL_L_SEL(threshold) << 5); + if (ret < 0) + return ret; + + return len; +} + static int adxl372_read_axis(struct adxl372_state *st, u8 addr) { __be16 regval; From patchwork Fri Feb 14 09:32:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexandru Tachici X-Patchwork-Id: 11382017 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 54DF3109A for ; Fri, 14 Feb 2020 09:32:43 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3D84C22314 for ; Fri, 14 Feb 2020 09:32:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729014AbgBNJcm (ORCPT ); Fri, 14 Feb 2020 04:32:42 -0500 Received: from mx0a-00128a01.pphosted.com ([148.163.135.77]:7784 "EHLO mx0a-00128a01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726179AbgBNJcm (ORCPT ); Fri, 14 Feb 2020 04:32:42 -0500 Received: from pps.filterd (m0167089.ppops.net [127.0.0.1]) by mx0a-00128a01.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 01E9WcoS027027; Fri, 14 Feb 2020 04:32:41 -0500 Received: from nwd2mta4.analog.com ([137.71.173.58]) by mx0a-00128a01.pphosted.com with ESMTP id 2y1udn4rrr-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 Feb 2020 04:32:41 -0500 Received: from SCSQMBX10.ad.analog.com (scsqmbx10.ad.analog.com [10.77.17.5]) by nwd2mta4.analog.com (8.14.7/8.14.7) with ESMTP id 01E9WdSl059653 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=FAIL); Fri, 14 Feb 2020 04:32:40 -0500 Received: from SCSQMBX10.ad.analog.com (10.77.17.5) by SCSQMBX10.ad.analog.com (10.77.17.5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1779.2; Fri, 14 Feb 2020 01:32:38 -0800 Received: from zeus.spd.analog.com (10.64.82.11) by SCSQMBX10.ad.analog.com (10.77.17.5) with Microsoft SMTP Server id 15.1.1779.2 via Frontend Transport; Fri, 14 Feb 2020 01:32:38 -0800 Received: from tachici-Precision-5530.ad.analog.com ([10.48.65.175]) by zeus.spd.analog.com (8.15.1/8.15.1) with ESMTP id 01E9WaZj029532; Fri, 14 Feb 2020 04:32:36 -0500 From: Alexandru Tachici To: , CC: Subject: [PATCH 5/5] iio: accel: adxl372: Update sysfs docs Date: Fri, 14 Feb 2020 11:32:23 +0200 Message-ID: <20200214093223.24664-1-alexandru.tachici@analog.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200214092919.24351-1-alexandru.tachici@analog.com> References: <20200214092919.24351-1-alexandru.tachici@analog.com> MIME-Version: 1.0 X-ADIRoutedOnPrem: True X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.138,18.0.572 definitions=2020-02-14_02:2020-02-12,2020-02-14 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 bulkscore=0 adultscore=0 mlxlogscore=999 lowpriorityscore=0 clxscore=1015 mlxscore=0 impostorscore=0 spamscore=0 phishscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2001150001 definitions=main-2002140077 Sender: linux-iio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-iio@vger.kernel.org This patch adds entries in the syfs docs of ADXL372. Signed-off-by: Stefan Popa Signed-off-by: Alexandru Tachici --- .../ABI/testing/sysfs-bus-iio-accel-adxl372 | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-bus-iio-accel-adxl372 diff --git a/Documentation/ABI/testing/sysfs-bus-iio-accel-adxl372 b/Documentation/ABI/testing/sysfs-bus-iio-accel-adxl372 new file mode 100644 index 000000000000..1d74fc2ea0ac --- /dev/null +++ b/Documentation/ABI/testing/sysfs-bus-iio-accel-adxl372 @@ -0,0 +1,40 @@ +What: /sys/bus/iio/devices/iio:deviceX/peak_fifo_mode_enable +KernelVersion: +Contact: linux-iio@vger.kernel.org +Description: + This attribute allows to configure the FIFO to store sample + sets of impact event peak (x, y, z). As a precondition, all + three channels (x, y, z) need to be enabled. + Writing 1, peak fifo mode will be enabled, if cleared and + all three channels are enabled, sample sets of concurrent + 3-axis data will be stored in the FIFO. + +What: /sys/bus/iio/devices/iio:deviceX/time_activity +KernelVersion: +Contact: linux-iio@vger.kernel.org +Description: + This attribute allows to set the activity timer in ms, + the minimum time measured acceleration needs to overcome + the set threshold in order to detect activity. + +What: /sys/bus/iio/devices/iio:deviceX/time_inactivity +KernelVersion: +Contact: linux-iio@vger.kernel.org +Description: + This attribute allows to set the inactivity timer in ms, + the minimum time measured acceleration needs to be lower + than set threshold in order to detect inactivity. + +What: /sys/bus/iio/devices/iio:deviceX/in_accel_x_threshold_activity +KernelVersion: +Contact: linux-iio@vger.kernel.org +Description: + This attribute allows to set the activity threshold in 100 mg + (0.1 m/s^2 SI). + +What: /sys/bus/iio/devices/iio:deviceX/in_accel_x_threshold_inactivity +KernelVersion: +Contact: linux-iio@vger.kernel.org +Description: + This attribute allows to set the inactivity threshold in 100 mg + (0.1 m/s^2 SI).