From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.46]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C494DC2C6; Sun, 18 May 2025 11:13:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566819; cv=none; b=dwBTKH0mujns0m5VS9sXi5QqadhZZ4x9ivDm1QS3W/6Q+G7ATa48KnY4j1TlvPVVxnalAjmJc571sbS7clpz1Lu3C5rKqFS/tEPa/2ehPCt3VTDf8NZMgvpSf89trYx12GDtPSAQ/BBlAdCw6gERV3z0sXpdb/UOl6sx+QwIGC8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566819; c=relaxed/simple; bh=cKE0WSkFCIF9Brh/SnNokfm5fFpy6Et8C8/qKo9CJEg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=uFZXvkkSxiGQ9W2SdvPYDUzSGPDuGhmXkkcjJ+7jPil7MSk8hGdyDadtkZg9LuhIber+bFWSXreTsYC20CtTTb1FUjXN1YUjvSq7waLGbcRXSdpclplxowKRuNIvUuRicgj6qKSguSI7EVpr1uB8WxOvMXGjcxZX7q4rPD7u5Gg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=QV92btBC; arc=none smtp.client-ip=209.85.221.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="QV92btBC" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3a36561d25cso200619f8f.1; Sun, 18 May 2025 04:13:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566816; x=1748171616; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=V6DN8I6oWq/48UPwKEfQAdQXXD2jU/KNfzvJAEFs5pM=; b=QV92btBCXKrref5VC8gWHiVdTSZjZ8OPx4rZc7GgsmOcvCn6i4OoBVmIMezUTEPs8b B97d7vjyP4oz6OQ0v0QQkEpx+RAalLKhRjZ2rjj3sm4HpOJ9rVioFspYrJoXkEQGqCXw 7f+Ufo9TuXeGL6LKayMJeAQqB+pTIPa67AtlFgikbTDeF3w2nChBrKkZtlCR/6ktBtdR vO3YbIasFwhH/mtoJLr0+1xpicMDyjOhTOsHuzxqI6PxP475zuRA7bFZAMhI7Nr+PfUO i5J5Cw+df3yhFl/gdHtApDHFhDa4s/B2KLsUnm0SzX75RdWbb+Luv3g8wta8xpw9dxKv zJ2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566816; x=1748171616; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=V6DN8I6oWq/48UPwKEfQAdQXXD2jU/KNfzvJAEFs5pM=; b=EUE97H1L7cvDNGpVCYXb6zZpi/0lAxvGsRxu92LNni1Q51gD/Jp9tFR4wXhw29f1uh MlJ5D8EEb+JEoxyoD3hDT+MwfE8k1memJQ014oEV/BVJ+LFkWUs+YJO7J6tPbCbtcPgs u7HLsQSg0u6sk6I9h+gNoIgXVIo88bHywaK54AxqlS5lmJNFBmRoOV8WayWduyBqbfPr upkjStBG2Er+1MFbzzBZAIwnzbl+//HKR9xuaUKJH/Jkt/OP+1Eo/6dlzTEAt6B+IRzE 8niRfDzk21Tz09I5meCSTUitBKSExivlEKmbwSlGxQddnQunE7+29oZ9lD77QdmTX1RX 6NXA== X-Forwarded-Encrypted: i=1; AJvYcCU5H5QALP4SWKLK8fjTk0ktkuAuCjPkdTI+ahgG5S8td+EI1rUNFxuSBFLxdLqhe/W+WLN8f1yRhHW6uD2i@vger.kernel.org, AJvYcCWQCXzbEpGgMUA7aNvMJOHQnPfT4S2jEvaJug1zO82oVNn2FuDm2kuGYwMIMoawFbb7XnWDzO+0/TI=@vger.kernel.org X-Gm-Message-State: AOJu0YxRkG79LVUBKw/Luir2U/XDMY0nMgAfrat2it0ODvGqvprpjNVt lg4qeqiYrvM0SZ+TwGDytkEHN5s42HQCJeOeQJYtr1XfOPoJEzFB5A1WJApVM9YK X-Gm-Gg: ASbGncsahFv/MYqKtTlE9q91SlK7zLm8iLKmbOTif5jkc57wsbL1nikHDBpyHxsuwXO eGzjCVJd64aUnzjCsmhPAyvXHBFamV1GCASn2Osr5JHzSYzvY64LIFltuAh6qVyLYS+6wva0no8 PH68bbgI9uUjk0xUkj0Z9j8hzMFlGqeUp3ZgvNm2oqRomSz8eqb+oV33BYA9JMIdXzh4M8vJWxl 0QqrF64OG5Bco5CJDthTHQ9AVaVUfqivhf29PIbXnYtSqg3rbOtzcThi+Cm/nzeKxYWiVgmbF4d NbD1YCXxjHqFUWUvzmlHIzmAeu/H5afxuRPfanf7lHJI9NVG90f7A49y2ZcAHPCoLTMoKGPLlsC KZbcP8xSwlaDRPy1JRYsm2g== X-Google-Smtp-Source: AGHT+IEe++ciSrBK/lHi/sjGR19Tth6ojbaWHC03R9Yh/QiEdXU7MFcyzc/TKCaEv6SikPguVgXD5w== X-Received: by 2002:a05:6000:184d:b0:3a0:9538:8579 with SMTP id ffacd0b85a97d-3a35c834cfemr2947334f8f.2.1747566815821; Sun, 18 May 2025 04:13:35 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:35 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 01/12] iio: accel: adxl313: add debug register Date: Sun, 18 May 2025 11:13:10 +0000 Message-Id: <20250518111321.75226-2-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add iio debug register for general sensor debugging. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313_core.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 4de0a41bd679..2f26da5857d4 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -321,10 +321,21 @@ static int adxl313_write_raw(struct iio_dev *indio_de= v, } } =20 +static int adxl313_reg_access(struct iio_dev *indio_dev, unsigned int reg, + unsigned int writeval, unsigned int *readval) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + + if (readval) + return regmap_read(data->regmap, reg, readval); + return regmap_write(data->regmap, reg, writeval); +} + static const struct iio_info adxl313_info =3D { .read_raw =3D adxl313_read_raw, .write_raw =3D adxl313_write_raw, .read_avail =3D adxl313_read_freq_avail, + .debugfs_reg_access =3D &adxl313_reg_access, }; =20 static int adxl313_setup(struct device *dev, struct adxl313_data *data, --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C68A7217F54; Sun, 18 May 2025 11:13:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566820; cv=none; b=ruRZ7RlMxk6QeM1ksHMBc3mM9DOK7SNDLNcKZUGx81btJc0nTX31FJPEjMtDjXvU1elIhvKgWKbjxY2+DVrJfQB9rxz9+BEFSr3SqU+EW6SfAsPxwboxUr8anyIzFkbLbMDTV2VjNb+15N5bqalM1VCwBjgK7lGChlA77otAxBg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566820; c=relaxed/simple; bh=scWhXzW6XYq/l4wqrxqgJSnKTwwONvDLqVBlfzHMlX4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=SZ0U+fTwN/3585GpwAXn8kB9SL5hn9tJROW/1oZj/f3rsmEOhH0YgNlh6KvhvoQAHF3fnibwWB1Qit9aE+hHNzDttxSu/cn3WW9BGwfyqQQ77+3UuDTq6gXlOpMq2NHyvEagF2R9b4JtrP1X2822sc8ABeqRWfTDu1oduP+u+pA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=iL/YO7u1; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="iL/YO7u1" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3a35c339e95so344820f8f.3; Sun, 18 May 2025 04:13:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566817; x=1748171617; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=hCY9+1WX1qMGi6W5sZlmi9awN4nnMi5MaeIyZ+3NCK8=; b=iL/YO7u1eb3IrInt04xfJqGCMfCYrpAHFb9Ur3OUeTkQWlHLIKBr4sEZJ4Z5T5G5w6 hnvyQwpUFTCV9WTjCyJC1e+6pVqkhGnrogFwdY4YC5rQ7zZ7+1BniaHRNxlP7J/vDhlq Js7KRwjyXyyTbJyhHer3LsHROnEXwKchsAJLgyjGrOtxwXjIDF0tXnMBVPybSqN8GYhz /59NU01jrCGW0alHiGib83dRe7+Oh/rn8eM1b4ls4P226dUS7JE7N0ANPT5D5pMD6BGL vvsF9Ye9GlYL/lTNYecpKsX1NZroM0rZQhQktGD1HNccvnt70geYFIQk/kw03XU++TM+ a6Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566817; x=1748171617; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hCY9+1WX1qMGi6W5sZlmi9awN4nnMi5MaeIyZ+3NCK8=; b=RhLdlV0v9mJNIxuUJZN1WVdH1x6ByR2mBRRaZ06EReBOoAcCDjz4zCU9+JfLhHME3j LP5HvQPL5rEG3usRppgwpj7hi1GArneYRAuIpeZ1i3905AJK0VyOzbxyW6VR1jaC598l o8NdOntp5qKisLLK9IpSDRK3NxiiupAqPYPJnhLAv+Wm3N5Jb+JxSsXWILhAIeLZYxw7 kFV8MCbDvNCtPsq+3OYnE5u/56kPx5Gz0C9ZQ3R2HQHQwfKd0By9GqxpoX04YwHvHJei Z4PSseH5LbUEZvcTvQhtOrewk6S1nNUbBPhI68QJk2zE4/wUGTHjZnmCGjgKyZydnAHE bDUg== X-Forwarded-Encrypted: i=1; AJvYcCU0skj8A5DMEgOtKJjAdiU8uklW+N65QfcJYE5IjmucskGgThYbWwrI2sJRRIEIl9J2PvC8f9ns10Y=@vger.kernel.org, AJvYcCWzJtSVhsUDUy7o0mIbCX/00XxYrMAF8BaatfiTzmCYeORVKSKOFsWnLkd5rcONznf/ZDgzJS3AoCqTneYN@vger.kernel.org X-Gm-Message-State: AOJu0YxhBn4E5lbl905Q/c/7/K4mOdcna9ms5Vj2btNVFPEUsPVCWO4j l8xQdSpsndn8qkRRx+qh4JQjmeMNmpPZg/CAGEGY9zEgx6CgGqtRd5Wj X-Gm-Gg: ASbGncvyrGL/4S9ZbbxiA4QlSDDhhbiJGJ1zlgM92jU9FKmsG+1Qp4a5iQa8MxHsats Yt0K02Fqc6LI6WbijyhFJzPCJFxv28GsQR9hN3gEXwllh4IzVJoZozX+wY8wCj6QIfVeS1zPqIe ZMMPw5yNMiuKNTOwE0zMH7wE+EmR4LjTA1g+DK35JakZ23C6zy3OPjNUFp1WSkwQoqa/MIed6vV zvSRP98fQ7Aw5xuJf/KpydETXlZZcRnqjj08QOZiY29M/aV+jLZf7k6heoWD3Pq0nPjnqIZO6OR 8sUtAXLu5qAfgV9jXfqSnXfdhaAReE5QHYuhuIwnCsj2QHWj0Fp4O9n528q50+j7Os2XCswFnyy Z8KpVxLpr+XdjhoHduDeVag== X-Google-Smtp-Source: AGHT+IGQoCXmoojOsMN17ZBB476hrBvPfhJkoVvNIe8AY4ac2APXeyaeKA+pyQhdpUThMSApzVYmoA== X-Received: by 2002:a05:6000:2210:b0:39c:30d9:48 with SMTP id ffacd0b85a97d-3a35c83e858mr3467095f8f.6.1747566816898; Sun, 18 May 2025 04:13:36 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:36 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 02/12] iio: accel: adxl313: introduce channel scan_index Date: Sun, 18 May 2025 11:13:11 +0000 Message-Id: <20250518111321.75226-3-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a scan_mask and scan_index to the iio channel. The scan_index prepares the buffer usage. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313_core.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 2f26da5857d4..000f59e2db87 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -171,9 +171,10 @@ static const int adxl313_odr_freqs[][2] =3D { [9] =3D { 3200, 0 }, }; =20 -#define ADXL313_ACCEL_CHANNEL(index, axis) { \ +#define ADXL313_ACCEL_CHANNEL(index, reg, axis) { \ .type =3D IIO_ACCEL, \ - .address =3D index, \ + .scan_index =3D (index), \ + .address =3D (reg), \ .modified =3D 1, \ .channel2 =3D IIO_MOD_##axis, \ .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW) | \ @@ -187,10 +188,19 @@ static const int adxl313_odr_freqs[][2] =3D { }, \ } =20 +enum adxl313_chans { + chan_x, chan_y, chan_z +}; + static const struct iio_chan_spec adxl313_channels[] =3D { - ADXL313_ACCEL_CHANNEL(0, X), - ADXL313_ACCEL_CHANNEL(1, Y), - ADXL313_ACCEL_CHANNEL(2, Z), + ADXL313_ACCEL_CHANNEL(0, chan_x, X), + ADXL313_ACCEL_CHANNEL(1, chan_y, Y), + ADXL313_ACCEL_CHANNEL(2, chan_z, Z), +}; + +static const unsigned long adxl313_scan_masks[] =3D { + BIT(chan_x) | BIT(chan_y) | BIT(chan_z), + 0 }; =20 static int adxl313_set_odr(struct adxl313_data *data, @@ -419,6 +429,7 @@ int adxl313_core_probe(struct device *dev, indio_dev->modes =3D INDIO_DIRECT_MODE; indio_dev->channels =3D adxl313_channels; indio_dev->num_channels =3D ARRAY_SIZE(adxl313_channels); + indio_dev->available_scan_masks =3D adxl313_scan_masks; =20 ret =3D adxl313_setup(dev, data, setup); if (ret) { --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D8C0B218EBD; Sun, 18 May 2025 11:13:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566821; cv=none; b=aEUvZGlV355Gi/60KTVnEM5SIZpO4UJi+yj7pMdLePZJXNPSmtXdBlZNvOA443vm4+wMkgnrSXDDTkEf8aWslIJo/YG+ugENKqr7jVVrXggdHASyZDcIJNB9MRnCpsQX21axq4svwlvTdQzw1flQJ5vmDkmwkYcb+E+X/yWP7i4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566821; c=relaxed/simple; bh=XAQ4Qx/cNXKeTI+urNYJNwwejnrhpgOaw7jqkObVdLs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=tW5sWjfgYE1l352bymsbJ9yRRG4esL8i9+KTPfUcaTD5+5KzkbyeLvpCitBxEsQs7aYC0Zry8jPciuZwrO82E/Vh7hoGcjJa3Z+UfOkqpbVZzmXONFdNN4EqTQWG4K0ZMseuB1wSZcEbbzO5/r1F0W286LITKCDuPjrjtUxGqcs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=V2xTDFQc; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="V2xTDFQc" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3a36561d25cso200624f8f.1; Sun, 18 May 2025 04:13:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566818; x=1748171618; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=QUkIRCCD9m/sgmrQvaYbGBD2Crn3c2cs1UFnqgq9smc=; b=V2xTDFQczFuSSpRGnDiqv7A1o1QU449S4kC9A96RyfMb1ECDZX16g8qgPrNCgbRJuw u1HfmEDexCbXpjLwCordgvlYjq/Johd70w5wXHB/q/lAhIIHbBCj8w55jNify43hmk3S KIrAjAptd8iCY7h76lKynsq5ZS18B3iYg6slBDPTTgm3FtR3oJDGmvik8AtXcMQAVEpS 7Zl5MEVj2LZwUJiotsYKBHZPyF6LdsIy7gWYRM9j8X4TzCxr2mi5KznH4TGSTVcYBoQ/ GrIp5UdJtN/muoOLbTj7e3SFPhw5zKeWm2hNeeegp8py+FmBs2A9HYO604jHrksBHpaR tERA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566818; x=1748171618; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=QUkIRCCD9m/sgmrQvaYbGBD2Crn3c2cs1UFnqgq9smc=; b=Ff6m+rZnavDUe6kH+ICViR2pWeM4RuO6Qyvtp3UmxiP/EsV2BB5OkQ0ijfkYkEBsKk wZJxcImAYO6UUkRKsObQEvMVro3fmYmmvhaHTTPhsyXQW/yrrr0tWk5UOQ8AsI42zsTv EmgCUBnYaG5rStqvsBtTWVxjs6W0X/SvUH3LNCiI71IiQRZQiaJ15Kb1nRPOdKKTRfUE PGcnXIRs1Pvpjpug3KWGU2JhABBBmLBHvl6H5fQdVa8/c0CFQEbgz6tD6cSBWP9JgFTg At+pvveJXXqm9P7qpEYOUnq1UpSTwFZkLmsYwpzc4epLEbqeb+x5GTEOCrZN9/E0BpU2 sVGQ== X-Forwarded-Encrypted: i=1; AJvYcCWmrVkZbzkD8AN3WSn5bo9ue+Y/Av+c22Xa6D+6cMCFb7yuks+rSDwDPYp6iGiWaTMnSx6vU0sNQAc=@vger.kernel.org, AJvYcCWpxy8FBCLB1/KdYng31n2Jbia//Eua6cy+GA4riquoQvUluTMxQgTAytBNE+mf5OXInfcQnHDQtozPhMjU@vger.kernel.org X-Gm-Message-State: AOJu0Yz/ztzPKwVTJ+tTGsGhqBdIir4jo1teLC9s+rZRnQS6Fkvkkzc+ HQvwrkmg0+hwaLFNaONvyuIecCn3AdoweRvdACSTfeyPgvK3lWPjccLH X-Gm-Gg: ASbGnctXKydG6/pLQyu+qeLHEtBh2a7XkpON4LbIJSDG+yQfAlE262qtWH9XFE8xrSa B1hWxV6AfVRvoYMA9LyF0TwIKSAGgcxZ4HORmsMXwP3jCEG1tVmdhgnDb3kTBCYC6T9nn/LR3NN CtvPgTpv1mGUo9pNbjetGRfk/S8entLW1M+wkjwPZ4O/aPZtoEi62TWo/ySZY6d7jpoVfTcd8Sn PjuIsyympqp9P+zQvgeuldUWXtUgTDFauTAz8+vP3UAO4TYxjlKQxwvCa6vHoeuzODkQC8dyU8N PFoNilv9c4t+ZbfP/ffzsP2BRb7kEQW656Bb2aN3W3i7nTcasox3jnGYgGwz1g34XcbQm2UOz8/ T4Rhfh7gQY7EbnaC9mTjQLw== X-Google-Smtp-Source: AGHT+IEfsIxneRwX5XOaIi/ITsFLgHH+ZVFxIYi1xZs6YvNFFA/igr2Ekqn8ZOixdHJzBoZIUb6q7g== X-Received: by 2002:a05:6000:178c:b0:3a0:b807:7433 with SMTP id ffacd0b85a97d-3a35c83a0dbmr3220784f8f.4.1747566817975; Sun, 18 May 2025 04:13:37 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:37 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 03/12] iio: accel: adxl313: configure scan type for buffer Date: Sun, 18 May 2025 11:13:12 +0000 Message-Id: <20250518111321.75226-4-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" According to the datasheet the ADXL313 uses 13 bit in full resolution. Also, add signedness, storage bits and endianness. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313_core.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 000f59e2db87..ab889d50b4d4 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -184,7 +184,10 @@ static const int adxl313_odr_freqs[][2] =3D { .info_mask_shared_by_type_available =3D \ BIT(IIO_CHAN_INFO_SAMP_FREQ), \ .scan_type =3D { \ + .sign =3D 's', \ .realbits =3D 13, \ + .storagebits =3D 16, \ + .endianness =3D IIO_BE, \ }, \ } =20 --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D41AB219A89; Sun, 18 May 2025 11:13:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566822; cv=none; b=j4x8yw45ab2BhpBoMeLoX/Z9uyjOlK9dqdrlklp7/NUdLnZunWGFuPykwg2T+G0FyN1huGDA3IVPm3xEV2JKkJ2LaM2qBk4kUNQqe2IHJaiWdIIhwx/Tvt2WUkXEPDr8s3BBZ6g1qFdL7LSg3F4BCv0eV47KrURXsCFQsXr1+W4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566822; c=relaxed/simple; bh=Bv+oEum1p9D+YG8VBoUJFzdegAl2TPTPtWPNdkz7Lig=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RQFQKJeZElRkNvdgas/XflMC7uoa9MN665Ulx4ZPHlhb7xSnjnI6pGUjO7EK22cE3Vv7CCkfj6D5tiRS7hmbTmBfcB1/Hx1bhoMZhOVIxcCheAjwtEFac8IMW3LGhxnq1nAeHHCUkL2XAExgNjub54sHwGzyCIchS1Z0O9hu3AY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=UHxQ+bpj; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="UHxQ+bpj" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3a367226ad2so169195f8f.0; Sun, 18 May 2025 04:13:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566819; x=1748171619; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ncWZ4jjjp6XB32qF1Br4RkScyWJ4V5bIlyOAukhTdNs=; b=UHxQ+bpjru6vzs9EIhi4uzhVh6KFnEUirzN0IFxA2qc7yDHKzc1uJ9v2d27J4kraP0 n4ibZNI2Vy79TeK9FbtJKu+UK+b0taYheSUWntaqrgPeX5PZfi6pngvPEhrYw0Zv/OO9 yBa7gGU059UmuOtV78ZfdFbFyC0j7Br9KUjPzH58H9oSbILzPx3xQuUX1Y0KTsSLcARI mpH1Lufrbws8JRAacQNg73Co1diOj/2bwcBNlc3A4Te6qyW7fBnZhOgQDLWd6i9XmWLz iPxSB/R1fojJNdu3Ngx56lwDA1V++vbr3tiBCFoLOb/yh/gsVPPvBRBkGIi2G6+iw5jR CkeQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566819; x=1748171619; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ncWZ4jjjp6XB32qF1Br4RkScyWJ4V5bIlyOAukhTdNs=; b=iGI7BL4tljM1gqZ8mO2K8P0s4ocvAB5GIxcwlSTpW6UndS5Y0FIca2F6BrAIBD5Q8d SX0DcoBcL5qJXVwv8UUvoduviEHerjMska9/gXN8TNkGEbJzwNv7aXE2fCnc8QtLMrU3 /6puJExPDImbSlTo2JIiALGVUDOhUa8j+kjbQPrH9COQEmLXu4DhvGgTQDyBiFmaHPFO H3UJK118uIAViC77pt5TZkKtnBN/r/uZ8fhHhgU/+0i7oAJ+9jfTDvwgnaoUnTbzqkVO VSeTM+kOXE++HKWlw2pdf6kw7WuRJnDwART+xzvdsXGKJsrh+cqP4IVa5dGrgyHn3B26 ggZA== X-Forwarded-Encrypted: i=1; AJvYcCW7CQ5EXbaI6dk1MpboDIZw3BWhSh/jHSxEtk9SH/Rh5Nqb4lj3RVfoG8bz+zAFU4bUIUia2fAz5tALDTbP@vger.kernel.org, AJvYcCXuVNdfhkM0eUx5U0wVAAqIqiIJ6OYzCP2p/SJIfOXhW+t+VCQtP17G9EW8AQF6kGWhaD+WqlUmVh4=@vger.kernel.org X-Gm-Message-State: AOJu0YwC2k+mUq9Ijvr3kcRnm+5kYIoTzDkEzVNc8Xx+gkMtEP/YI/l2 JuTpT52YRgDfHo8gFLZKD6i5TFrNi368xArzJcqrNYqygVtrGt3Rpfit X-Gm-Gg: ASbGncsHTFRzrqoMNe0GcDvk97cY7pldw04LnA6snqsExOxR3BUr8NI2l8POEhUuMS4 eC10IL16adAnwPNvnXKGjv3JcrH30F9hNPjGluytudRHAvnFd/1l2vOLeheq2Jyaz8VvNBpJNoT DOlDRMNQfD/TniH4VoOpJK+x+BkexLkx/0oMRFGlFH5W5qpX5aVCyiW3ahFyWcpQZEA3EeOrTVP p0agm0JzpLy2e2GqZHMe8nUY9eNIntrU/kby/diWFMobH3Bny4SvLtQH/5CViwWSP7HZC0g0Ery IyLZBKEOqTo8QamjuulOjRqyaPxXIBv5I8L2Moeh96D+5MpOvNSeEG9bTizxiRWrYZXsFnMHRfH BSCIk7HEvyuB47iVq5Hl/Gw== X-Google-Smtp-Source: AGHT+IGShDkJDXwWVy3gi/p7emybaKdopmTMhfnbzWyEfYyMzgrEQCu0Tg2p5XflAaSNO2DNn4LbgA== X-Received: by 2002:a05:6000:2012:b0:3a0:9575:fac2 with SMTP id ffacd0b85a97d-3a35c845459mr2556352f8f.13.1747566819012; Sun, 18 May 2025 04:13:39 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:38 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 04/12] iio: accel: adxl313: make use of regmap cache Date: Sun, 18 May 2025 11:13:13 +0000 Message-Id: <20250518111321.75226-5-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Setup regmap cache to cache register configuration. This is a preparatory step for follow up patches, to allow easy acces to the cached configuration. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313.h | 2 ++ drivers/iio/accel/adxl313_core.c | 17 +++++++++++++++++ drivers/iio/accel/adxl313_i2c.c | 6 ++++++ drivers/iio/accel/adxl313_spi.c | 6 ++++++ 4 files changed, 31 insertions(+) diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h index 72f624af4686..fc937bdf83b6 100644 --- a/drivers/iio/accel/adxl313.h +++ b/drivers/iio/accel/adxl313.h @@ -54,6 +54,8 @@ extern const struct regmap_access_table adxl312_writable_= regs_table; extern const struct regmap_access_table adxl313_writable_regs_table; extern const struct regmap_access_table adxl314_writable_regs_table; =20 +bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg); + enum adxl313_device_type { ADXL312, ADXL313, diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index ab889d50b4d4..6e0c5704e333 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -46,6 +46,23 @@ const struct regmap_access_table adxl314_readable_regs_t= able =3D { }; EXPORT_SYMBOL_NS_GPL(adxl314_readable_regs_table, IIO_ADXL313); =20 +bool adxl313_is_volatile_reg(struct device *dev, unsigned int reg) +{ + switch (reg) { + case ADXL313_REG_DATA_AXIS(0): + case ADXL313_REG_DATA_AXIS(1): + case ADXL313_REG_DATA_AXIS(2): + case ADXL313_REG_DATA_AXIS(3): + case ADXL313_REG_DATA_AXIS(4): + case ADXL313_REG_DATA_AXIS(5): + case ADXL313_REG_FIFO_STATUS: + return true; + default: + return false; + } +} +EXPORT_SYMBOL_NS_GPL(adxl313_is_volatile_reg, "IIO_ADXL313"); + static int adxl312_check_id(struct device *dev, struct adxl313_data *data) { diff --git a/drivers/iio/accel/adxl313_i2c.c b/drivers/iio/accel/adxl313_i2= c.c index a4cf0cf2c5aa..e8636e8ab14f 100644 --- a/drivers/iio/accel/adxl313_i2c.c +++ b/drivers/iio/accel/adxl313_i2c.c @@ -21,6 +21,8 @@ static const struct regmap_config adxl31x_i2c_regmap_conf= ig[] =3D { .rd_table =3D &adxl312_readable_regs_table, .wr_table =3D &adxl312_writable_regs_table, .max_register =3D 0x39, + .volatile_reg =3D adxl313_is_volatile_reg, + .cache_type =3D REGCACHE_MAPLE, }, [ADXL313] =3D { .reg_bits =3D 8, @@ -28,6 +30,8 @@ static const struct regmap_config adxl31x_i2c_regmap_conf= ig[] =3D { .rd_table =3D &adxl313_readable_regs_table, .wr_table =3D &adxl313_writable_regs_table, .max_register =3D 0x39, + .volatile_reg =3D adxl313_is_volatile_reg, + .cache_type =3D REGCACHE_MAPLE, }, [ADXL314] =3D { .reg_bits =3D 8, @@ -35,6 +39,8 @@ static const struct regmap_config adxl31x_i2c_regmap_conf= ig[] =3D { .rd_table =3D &adxl314_readable_regs_table, .wr_table =3D &adxl314_writable_regs_table, .max_register =3D 0x39, + .volatile_reg =3D adxl313_is_volatile_reg, + .cache_type =3D REGCACHE_MAPLE, }, }; =20 diff --git a/drivers/iio/accel/adxl313_spi.c b/drivers/iio/accel/adxl313_sp= i.c index 9a16b40bff34..68e323e81aeb 100644 --- a/drivers/iio/accel/adxl313_spi.c +++ b/drivers/iio/accel/adxl313_spi.c @@ -24,6 +24,8 @@ static const struct regmap_config adxl31x_spi_regmap_conf= ig[] =3D { .max_register =3D 0x39, /* Setting bits 7 and 6 enables multiple-byte read */ .read_flag_mask =3D BIT(7) | BIT(6), + .volatile_reg =3D adxl313_is_volatile_reg, + .cache_type =3D REGCACHE_MAPLE, }, [ADXL313] =3D { .reg_bits =3D 8, @@ -33,6 +35,8 @@ static const struct regmap_config adxl31x_spi_regmap_conf= ig[] =3D { .max_register =3D 0x39, /* Setting bits 7 and 6 enables multiple-byte read */ .read_flag_mask =3D BIT(7) | BIT(6), + .volatile_reg =3D adxl313_is_volatile_reg, + .cache_type =3D REGCACHE_MAPLE, }, [ADXL314] =3D { .reg_bits =3D 8, @@ -42,6 +46,8 @@ static const struct regmap_config adxl31x_spi_regmap_conf= ig[] =3D { .max_register =3D 0x39, /* Setting bits 7 and 6 enables multiple-byte read */ .read_flag_mask =3D BIT(7) | BIT(6), + .volatile_reg =3D adxl313_is_volatile_reg, + .cache_type =3D REGCACHE_MAPLE, }, }; =20 --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0F6F821A955; Sun, 18 May 2025 11:13:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566823; cv=none; b=VJyl6ol8JOvBCKvxp13chWQrnqsBdWLCFZlp/OiIpmR6fGHr3pI8nCcNWJKw/YH8fs4fqMdne7uTSUBVqkRq62EdmzL4oFZw3ZzFgkRu9GPy1wN87Y07DipuOvLIFr5sPhOpM5EpdD61C803hWQlok6R2TjiAdSvkIK9GG1S9EU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566823; c=relaxed/simple; bh=PmJxDo9TiOpqEIT6q7Zx0RUsErYuI5OTsk7uxONCapg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=GHHGvcBZ0FrxFJXKfW4gKsZHsZdl6EmLGuEUi7FQb4lIqKGSGLgsIIpsG0MhI8ZheKrsh2TOw4V8bfdJ7lIEcyOjSJsXyKh2rT5pGPoCfw++2ya9VpLwshPu06CMrX+tJ+t3t+41HtW0/G5Z+F4BvqPdqEixdPQ2icoX3tt2exg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=KeKFdADx; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="KeKFdADx" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3a364d442e0so243176f8f.2; Sun, 18 May 2025 04:13:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566820; x=1748171620; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YStK8Dtx9JjnBfpPsrheapl31u4kp0BLcubjEdMAHog=; b=KeKFdADx7NimA+CEefT+OeUhE3SkrpMrEj9ANbx/aXAQcbV0jpkJXfzFn/IFmEJxqf +X8dmJbGpMiN78o4bfm6Pvrkb18xEk9LzAgRqqfSLlZy9i0niNilJlX6btn6xAsl5v7u bYHFOyDvkQMdK+WGKvZTlbc9jA6kYOL5jM25nMQfSD8mERdj0j9aKYcsHIMLM+N+fA14 Tblx6RkHiFP3KaMYZ/qJLpp5gxoxes3sDNk3+mE/0gqtz+DE/8hJDNruatm5Xx5WuPSL dBeh6VHTAckuqlUK51hvOgytxutkKemExq+TXs4Y7hG/R7RbLj65u+dHpC9kYqRNsudF 6Wfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566820; x=1748171620; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YStK8Dtx9JjnBfpPsrheapl31u4kp0BLcubjEdMAHog=; b=vMMnK4lx6wPb+ebl1u8uEZIJm4Z7itUKGMuHhHqlCuzNqcLZJ7xWOEOdw07g61Ey4O /hQeJaO6sYPF3kyXGkbn9YqM0SgfFNWYjQs1WEf7F8sRAE1P+Izcw2Ta/gFrxahj5rsF IKahxjZI1/ng7uw3pt9vSUbpPKH7ltKIvlrnEdYPD2WQk5xUkxcJhTiYdxUu4Qy2fW0D liFnpsPIUKfQalqxE5/IrtFeAqwpoX3OjV+axwJ+w/7slORUfAwp8fFuPFn2RQAdPhRQ YKP7DMYayv3zg1bviRjft2awLhv0e3IF4j43qXYmxBKTuwHst+AHC6fz6mLJifNjreCM 2W/g== X-Forwarded-Encrypted: i=1; AJvYcCVISRad4peMrAOuednjK8aJ2KhJJumK3ieAACSeSQzUnFHF8ZVAFGF6xTnngOsBSk5gT54XMJvR+N3WA9e0@vger.kernel.org, AJvYcCWo6ITjLuryRwmqY96Xc3q7QhIUJj9Auw9OgD4tj1+a4ILm8J6TyeZR/OBgRzLeM/cL1SR7DloM3aM=@vger.kernel.org X-Gm-Message-State: AOJu0Ywz48kCs9yqRzOBTaLzS5admTWhTOqnFUO9KCJkfWVGWOTybpHu nZ4TJszTIT5E0lsIof6Z/m/dNaRv5XXbUOcok7JhmTcp5gaVBQRmHa6l X-Gm-Gg: ASbGncuW56f89ycL0hlK1h7XWYbDPjfIvhUx4WVyB8bYeo2ByboUDDFk7/IDOFflF8m waS5+C/QHKJm5V19ErImkn3eXWsY40pJXdxdf0srASbiVJPVnwX0gwMbTXDxWQKTNs2pXUOoDZi rRCrGlj8NG7ndQxDXJEUjK09mMEB+AcT/8XKeK1xx+F6BFm9igIFAm/FmIuEdNGWEd5CKK+x5fn T8PbzYnlC7uXX69wYBlYJsmQNHeZTD1ho2u2Q/hyo8aFkLJjAvLhejW0q4aYxiNpmXo3UyX1FAd m5Q4CW9yZtRNGNq1PZEM+IbdM9/c3o60hTtLjNPeoUHEU9HR+6BYsdee//KF+QoVZSlIqiaxuzv jLTBvBlkPw2jTurkhsSrWRA== X-Google-Smtp-Source: AGHT+IEfd82sWBV8hdIaloU2Bh/nJb6GjQdqxEUbilkqNd2VHnuz9DcDBoqre2NbHhhuhB1nJYLusQ== X-Received: by 2002:a05:600c:4f8e:b0:43b:cab3:1fd1 with SMTP id 5b1f17b1804b1-442fd60e89bmr26350745e9.1.1747566820090; Sun, 18 May 2025 04:13:40 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:39 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 05/12] iio: accel: adxl313: add function to enable measurement Date: Sun, 18 May 2025 11:13:14 +0000 Message-Id: <20250518111321.75226-6-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a function to enable measurement. The data-sheet recomments turning of measurement while modifying certain config registers. This is a preparatory step. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313.h | 3 ++- drivers/iio/accel/adxl313_core.c | 12 +++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h index fc937bdf83b6..ba5b5d53a0ea 100644 --- a/drivers/iio/accel/adxl313.h +++ b/drivers/iio/accel/adxl313.h @@ -36,8 +36,9 @@ #define ADXL313_RATE_MSK GENMASK(3, 0) #define ADXL313_RATE_BASE 6 =20 -#define ADXL313_POWER_CTL_MSK GENMASK(3, 2) +#define ADXL313_POWER_CTL_MSK BIT(3) #define ADXL313_MEASUREMENT_MODE BIT(3) +#define ADXL313_MEASUREMENT_STANDBY 0x00 =20 #define ADXL313_RANGE_MSK GENMASK(1, 0) #define ADXL313_RANGE_MAX 3 diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 6e0c5704e333..244fb2ec0b79 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -63,6 +63,14 @@ bool adxl313_is_volatile_reg(struct device *dev, unsigne= d int reg) } EXPORT_SYMBOL_NS_GPL(adxl313_is_volatile_reg, "IIO_ADXL313"); =20 +static int adxl313_set_measure_en(struct adxl313_data *data, bool en) +{ + unsigned int val =3D en ? ADXL313_MEASUREMENT_MODE : ADXL313_MEASUREMENT_= STANDBY; + + return regmap_update_bits(data->regmap, ADXL313_REG_POWER_CTL, + ADXL313_POWER_CTL_MSK, val); +} + static int adxl312_check_id(struct device *dev, struct adxl313_data *data) { @@ -410,9 +418,7 @@ static int adxl313_setup(struct device *dev, struct adx= l313_data *data, } =20 /* Enables measurement mode */ - return regmap_update_bits(data->regmap, ADXL313_REG_POWER_CTL, - ADXL313_POWER_CTL_MSK, - ADXL313_MEASUREMENT_MODE); + return adxl313_set_measure_en(data, true); } =20 /** --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2791721ADD1; Sun, 18 May 2025 11:13:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566825; cv=none; b=sDrRXAaLXDa5JUYS/9r5ClCN8D6vtIuCZ04XGzpU1XeVgUynQ1ThDXzm3w5BzOLwBt655T6ksaaMo94x23jOOnUSEkle8NISykSaLzB9Go1B+5O6b5/wO4HITnA6furkeWjuuDpCiL67B62IqQZsB+KYHc27RJGJueFVLbMxDSQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566825; c=relaxed/simple; bh=ldeNTf8VOnUl06RqM9EXPcLn7OFwGX8FOsCAo8ge+hs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AUQZq0ZkghLDlm5xlrveIbTbv4GqFXnEFsOk2rtYOgYL9lUpZcayjhQCeKKnxXpwgN28GXr/nfjtS+kYyQqrOx6qXoGv7YniVJwqqrxioRX3uVdyhrJNyU3Fde+8Rdr6M8c4aUfa9BX71y+gFsScLnHEov55d+7TnqhBM6ZNNh8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=mrvz7OBe; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="mrvz7OBe" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3a208a76272so273975f8f.3; Sun, 18 May 2025 04:13:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566821; x=1748171621; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nmCkTqTykN9jQe4NnVf8Ml7pN41CxU8lMiO10tHdtxM=; b=mrvz7OBe6QxgX/QqsYNvmhZe3eMtVF+PGzkhNRdTAFN+SOPEE98OFFELqkcW9duZFQ TfL7ya1gxhIfJwdHGGGSdmCxtQpOgmYptLgjnYpo/mc8JZHPow4+sy2yO1P+Flpe4Laq YJy+0yf9ZarrM0aEk9yPpW6IzASQDhfgfV6cXsgO1YlrV3V8wU0ZupsR/Q+dbkLp+TgJ N9RsV1VcQlI0BU7UtWyvrKQYMoay15hTUA1FJ6OnI8bIYtlZG7rTzj6NTHCW4RfbQ6qa 5atWbDufJEzs6OInuJJWUSYYIqFEapQEcAv4zh0VCaJbXP4d7urcr2sfNmz+toAxcE+F JNwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566821; x=1748171621; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nmCkTqTykN9jQe4NnVf8Ml7pN41CxU8lMiO10tHdtxM=; b=ZYwgV4AaLj8A3BuKKUpWlTtpMfK4HwyJNOrIrSvKoz+l7lk6WdxDUuwr0YDQh4q4pU J6/Ez8brBb1tYlN3whHRVNTLqTFlWENIOkjec9U0SCt0rQMq60uUUJ8VL/5cUygU02us M7psRm4OGuQdWzvcFapwn+rTZuVQLIYSkIOhW8MRARFA6iE6IfiN+z3t75n7VY4t7A6k ZZRXemcl/e9WQJ04uEYPiY3tCzaebG8kIngoJYfGHSO0m2+53t2xfp/3JGcwtmywPNIH kjQg/egdYjWMzIlyvaQTtpv1nr4xiMiSJJ5JsJoMCkcCMYnKqjRWPi1gA4EUQv/zBJfP JjrA== X-Forwarded-Encrypted: i=1; AJvYcCUITcgL7/pPwdIwIp5ridhOetGyq2LnLA5MY3OD7V4GCC3HDSPSM/kiLYvqH0LbFZOS/x7w8YFH0Fg=@vger.kernel.org, AJvYcCUXlfW+HAgaq+fCvefiZwx+PFK/r9t81A8g9kqsFjemZkY4iH+KRAh3w09UpVWbMQk/w2c177SUKEOzVJvI@vger.kernel.org X-Gm-Message-State: AOJu0YwQlgTygQpIIzaCPXYOHA/zDLSR2w2GJ2sOSEQq5GN+5ULV3K7/ q9I0Z6ezgesFUY/5/ebQPybadqVLYuKtXWGauDqtFn4F0yqID5hPhdAw X-Gm-Gg: ASbGncstYPDwFy0t+C64Vct9vTXPCWHYzWhwykH2aQjyx9Qn/27ZWGz0Aa/tZ2yvGSx cI4mSv54O6JFNlVbQG8hTnnrCc7796lsaXLnqu6YQvHM9VWzLhACXAhH6+OVwMA0ljkl87ckHv4 kbUr17es4dkH3mQ/d1QnEXkURwjuIyZoXxlyI+0kAag666CxOuls4R1UTRvY5YPCQecz4AZ0rYf EeyWaCt9fc9p9843+km7hEhHVOPGZ0r/AjpRMc6+JZqEViCtZcqFC35cZ1nit5qFrBSuAri2AB+ ZbfRd6oyXtUjbzp5EHRoXvvHEOSMZ2o2CN7hTU3mACpB6NM4j42FN96/+6Cyi+DolhFn3lPBm5/ jOxwhrIYfzaF85GxWsWnk5A== X-Google-Smtp-Source: AGHT+IFnXoYFhAZS1h+89+s1tNCPQjkhTODl/4wJvtNWsJcdFD/YItEYMVOhhRVh/+P2S+vub98KHg== X-Received: by 2002:a5d:64cb:0:b0:3a3:6ab0:8863 with SMTP id ffacd0b85a97d-3a36ab089b0mr670243f8f.16.1747566821249; Sun, 18 May 2025 04:13:41 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:40 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 06/12] iio: accel: adxl313: prepare interrupt handling Date: Sun, 18 May 2025 11:13:15 +0000 Message-Id: <20250518111321.75226-7-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Evaluate the devicetree property for an optional interrupt line, and configure the interrupt mapping accordingly. When no interrupt line is defined in the devicetree, keep the FIFO in bypass mode as before. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313.h | 8 ++++++++ drivers/iio/accel/adxl313_core.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h index ba5b5d53a0ea..c5673f1934fb 100644 --- a/drivers/iio/accel/adxl313.h +++ b/drivers/iio/accel/adxl313.h @@ -21,7 +21,9 @@ #define ADXL313_REG_ACT_INACT_CTL 0x27 #define ADXL313_REG_BW_RATE 0x2C #define ADXL313_REG_POWER_CTL 0x2D +#define ADXL313_REG_INT_ENABLE 0x2E #define ADXL313_REG_INT_MAP 0x2F +#define ADXL313_REG_INT_SOURCE 0x30 #define ADXL313_REG_DATA_FORMAT 0x31 #define ADXL313_REG_DATA_AXIS(index) (0x32 + ((index) * 2)) #define ADXL313_REG_FIFO_CTL 0x38 @@ -47,6 +49,11 @@ #define ADXL313_SPI_3WIRE BIT(6) #define ADXL313_I2C_DISABLE BIT(6) =20 +#define ADXL313_REG_FIFO_CTL_MODE_MSK GENMASK(7, 6) + +#define ADXL313_FIFO_BYPASS 0 +#define ADXL313_FIFO_STREAM 2 + extern const struct regmap_access_table adxl312_readable_regs_table; extern const struct regmap_access_table adxl313_readable_regs_table; extern const struct regmap_access_table adxl314_readable_regs_table; @@ -67,6 +74,7 @@ struct adxl313_data { struct regmap *regmap; const struct adxl313_chip_info *chip_info; struct mutex lock; /* lock to protect transf_buf */ + int irq; __le16 transf_buf __aligned(IIO_DMA_MINALIGN); }; =20 diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 244fb2ec0b79..05e99708c2c1 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -8,11 +8,17 @@ */ =20 #include +#include #include +#include #include =20 #include "adxl313.h" =20 +#define ADXL313_INT_NONE 0 +#define ADXL313_INT1 1 +#define ADXL313_INT2 2 + static const struct regmap_range adxl312_readable_reg_range[] =3D { regmap_reg_range(ADXL313_REG_DEVID0, ADXL313_REG_DEVID0), regmap_reg_range(ADXL313_REG_OFS_AXIS(0), ADXL313_REG_OFS_AXIS(2)), @@ -438,6 +444,8 @@ int adxl313_core_probe(struct device *dev, { struct adxl313_data *data; struct iio_dev *indio_dev; + unsigned int regval; + u8 int_line; int ret; =20 indio_dev =3D devm_iio_device_alloc(dev, sizeof(*data)); @@ -463,6 +471,30 @@ int adxl313_core_probe(struct device *dev, return ret; } =20 + int_line =3D ADXL313_INT1; + data->irq =3D fwnode_irq_get_byname(dev_fwnode(dev), "INT1"); + if (data->irq < 0) { + int_line =3D ADXL313_INT2; + data->irq =3D fwnode_irq_get_byname(dev_fwnode(dev), "INT2"); + if (data->irq < 0) + int_line =3D ADXL313_INT_NONE; + } + + if (int_line) { + /* FIFO_STREAM mode */ + regval =3D int_line =3D=3D ADXL313_INT2 ? 0xff : 0; + ret =3D regmap_write(data->regmap, ADXL313_REG_INT_MAP, regval); + if (ret) + return ret; + } else { + /* FIFO_BYPASSED mode */ + ret =3D regmap_write(data->regmap, ADXL313_REG_FIFO_CTL, + FIELD_PREP(ADXL313_REG_FIFO_CTL_MODE_MSK, + ADXL313_FIFO_BYPASS)); + if (ret) + return ret; + } + return devm_iio_device_register(dev, indio_dev); } EXPORT_SYMBOL_NS_GPL(adxl313_core_probe, IIO_ADXL313); --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3FDAC21B9FD; Sun, 18 May 2025 11:13:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566826; cv=none; b=f/3cD8oeWqB3DhanFX5Zk8K7+aGRICQB1Xmmv1CY03EUfwC5LgeAxdGb1/GVoPVGPVtp3MUF+RtQwRGZpiCPSHRaatKDWwKrbPike4SWRvosQ0FnL96HD4071AZYxqW4Pm/1+T+iAEKCO0Tyy9ThgDoomBA0j05GFEaUvSfP3bo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566826; c=relaxed/simple; bh=2eYAtuPAxEomrjII9azThshrvACXgU7QkFRQ+DfSJOk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=tZ3QiG07IDG+LsKacBxo3w95IHGt5O+rnNyKElG+WEmFMBO06LJNcE3Cyz7Sk060Hmap0Obp3MCcOUIt9t4WcIBBnzTeNBOk8GbF6IHru/qo2bHQ7NO3pbluv0TdEz+REF4fM+bduo0Sr4KIHdi/9hyD3zpAnvpEJ5OXe0x58yM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=fidtkomw; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="fidtkomw" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3a35ae46214so270650f8f.2; Sun, 18 May 2025 04:13:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566822; x=1748171622; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=4uNN7E1FK1U1Y8BuNgmbbshONk0ntIiyJ5/yC1vuARQ=; b=fidtkomwuB6IZvAYdgJyxm7elYF92IHCzpwBDs7UDi6bMUUMTBgSK2S58QxtbUVu3u 6IAbEbmZA5I44UAknyvAHueriu9Lrd42/c7Ztr3bPjdCxCuDozRXmVU4oGXnQG0LPTOZ 0Pgsv+q8MoP7FLIMV70wKWg5LpjrKxzIJJTwtyhQt0bBoENOS3FPUQB7ZM2+Mx/5lR/8 LUa4tlxClhBpzWEVhUZgiPcqDOb3MzQCpeCt51E667fynsziyPbDv/aUps457V7bln+s pFwilp7thFvgmOYPSyQSxqa70LDEbWh4iuTJOrp8ayjwFDsOY/E4ZNzrMnOPHP0ZjmRo EgpQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566822; x=1748171622; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=4uNN7E1FK1U1Y8BuNgmbbshONk0ntIiyJ5/yC1vuARQ=; b=Cdh7LOlNmodbgR6Iw8H/TAHJqnFzyDjEKKpxap6N7M6ayT0rTGWTPiJ/qj6a8tUQHp NiEBEhxq1Yl7fVcIfFM3jTTg0x19ZRmfz6u8ffXV9w3uwCkUaY7CCX0ktMublrHxnfGX ZyvgOnywhi0QIBJU/7/mUG1pxgbMLESnyaY+p8kOUzAiuB0FzBzISQbCoeDw38Hrn/FU F1IT2W2nC9VZUnOWDYOBVgjdZTpOGUQEiAvgVRgrrBDN1sy7XLVpDgZ5i4/4x7/B+SNv V6PbCi2AwM25UCriw5HfHSVCOxlKUctj7fnlCGSXpY7CYrrZAHHaYcJnrH177QzDGyCu iuOQ== X-Forwarded-Encrypted: i=1; AJvYcCUnxofcfpcUBoA2ZCNQDMdUcMnIF5u7KM39JnL+QflqtEiAlyF2AmlRGnVxhWSeEX7g1Vl8xsgy/ak=@vger.kernel.org, AJvYcCWZXDNLRPjgLGle38Oa1x4vENPAn9ZEHzblrXe6mCfTKLcDBLVwD9toMsH2dOi7UNL0bgZhxmmjv732a7FR@vger.kernel.org X-Gm-Message-State: AOJu0YxGHtZdj4hs2x8SUGqLYtreL6Fch4BZCg3905e5lnacPE/22uJ/ 8aJ3pWL0oGEOBH6uzF14Ww2W476Tkzo93dyG+/J0IeKNImGJGWGkI6Sk X-Gm-Gg: ASbGncsMVt1JA44T55zFSe0GQrsEzMvtCUaHNl/QkOW5T/Af/+s8EQQFTUPmaJk8yo/ xh4HOc27rb6bM5S481QSERIUUSvf/I1CbO+Ywx0+9LJhXhdfJ5olkAu0ufHUuNfohqo0cfBeCOn o9K5ft4Mt9CJpS2cDi8jWZOT7hsyHwJWcpnmo6jzT1RQHNvGqo7/IJMHqhN772JaWZ/Ujr6pE7q WQ+aMetcEleZzKQ+nLxtg5A3XQ1f4HMUm019g4exMrfkonB3rAH9JcQZ7l1l9Ephxvh082z4LSz 4fNzmsLLB2mINdSSnX5GRieYlfrIk1f/kjuRzPIO6Yf7DQWs7NYP52HDpEOpU1aQ9Uh4cygQn10 sqYxY4VEjeKkWsaCeC/EP0w== X-Google-Smtp-Source: AGHT+IGkP5LqCSc0op2tqB9lI1ofqcAz50cM3ED8i523uCNvn4lrKNh/otoOtTxBKR+7KKZAhieGTA== X-Received: by 2002:a5d:5989:0:b0:3a0:89df:3b91 with SMTP id ffacd0b85a97d-3a35c834f7amr3351512f8f.7.1747566822312; Sun, 18 May 2025 04:13:42 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:41 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 07/12] iio: accel: adxl313: add basic interrupt handling Date: Sun, 18 May 2025 11:13:16 +0000 Message-Id: <20250518111321.75226-8-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Prepare the interrupt handler. Add register entries to evaluate the incoming interrupt. Add functions to clear status registers and reset the FIFO. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313.h | 16 ++++ drivers/iio/accel/adxl313_core.c | 133 +++++++++++++++++++++++++++++++ 2 files changed, 149 insertions(+) diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h index c5673f1934fb..4cb1fe1f2616 100644 --- a/drivers/iio/accel/adxl313.h +++ b/drivers/iio/accel/adxl313.h @@ -49,11 +49,25 @@ #define ADXL313_SPI_3WIRE BIT(6) #define ADXL313_I2C_DISABLE BIT(6) =20 +#define ADXL313_INT_OVERRUN BIT(0) +#define ADXL313_INT_WATERMARK BIT(1) +#define ADXL313_INT_INACTIVITY BIT(3) +#define ADXL313_INT_ACTIVITY BIT(4) +#define ADXL313_INT_DREADY BIT(7) + +/* FIFO entries: how many values are stored in the FIFO */ +#define ADXL313_REG_FIFO_STATUS_ENTRIES_MSK GENMASK(5, 0) +/* FIFO samples: number of samples needed for watermark (FIFO mode) */ +#define ADXL313_REG_FIFO_CTL_SAMPLES_MSK GENMASK(4, 0) #define ADXL313_REG_FIFO_CTL_MODE_MSK GENMASK(7, 6) =20 #define ADXL313_FIFO_BYPASS 0 #define ADXL313_FIFO_STREAM 2 =20 +#define ADXL313_FIFO_SIZE 32 + +#define ADXL313_NUM_AXIS 3 + extern const struct regmap_access_table adxl312_readable_regs_table; extern const struct regmap_access_table adxl313_readable_regs_table; extern const struct regmap_access_table adxl314_readable_regs_table; @@ -75,7 +89,9 @@ struct adxl313_data { const struct adxl313_chip_info *chip_info; struct mutex lock; /* lock to protect transf_buf */ int irq; + u8 fifo_mode; __le16 transf_buf __aligned(IIO_DMA_MINALIGN); + __le16 fifo_buf[ADXL313_NUM_AXIS * ADXL313_FIFO_SIZE + 1]; }; =20 struct adxl313_chip_info { diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 05e99708c2c1..574962a8f35d 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -13,12 +13,20 @@ #include #include =20 +#include +#include +#include +#include +#include + #include "adxl313.h" =20 #define ADXL313_INT_NONE 0 #define ADXL313_INT1 1 #define ADXL313_INT2 2 =20 +#define ADXL313_REG_XYZ_BASE ADXL313_REG_DATA_AXIS(0) + static const struct regmap_range adxl312_readable_reg_range[] =3D { regmap_reg_range(ADXL313_REG_DEVID0, ADXL313_REG_DEVID0), regmap_reg_range(ADXL313_REG_OFS_AXIS(0), ADXL313_REG_OFS_AXIS(2)), @@ -62,6 +70,7 @@ bool adxl313_is_volatile_reg(struct device *dev, unsigned= int reg) case ADXL313_REG_DATA_AXIS(4): case ADXL313_REG_DATA_AXIS(5): case ADXL313_REG_FIFO_STATUS: + case ADXL313_REG_INT_SOURCE: return true; default: return false; @@ -365,6 +374,118 @@ static int adxl313_write_raw(struct iio_dev *indio_de= v, } } =20 +static int adxl313_get_samples(struct adxl313_data *data) +{ + unsigned int regval =3D 0; + int ret; + + ret =3D regmap_read(data->regmap, ADXL313_REG_FIFO_STATUS, ®val); + if (ret) + return ret; + + return FIELD_GET(ADXL313_REG_FIFO_STATUS_ENTRIES_MSK, regval); +} + +static int adxl313_set_fifo(struct adxl313_data *data) +{ + unsigned int int_line; + int ret; + + ret =3D adxl313_set_measure_en(data, false); + if (ret) + return ret; + + ret =3D regmap_read(data->regmap, ADXL313_REG_INT_MAP, &int_line); + if (ret) + return ret; + + ret =3D regmap_write(data->regmap, ADXL313_REG_FIFO_CTL, + FIELD_PREP(ADXL313_REG_FIFO_CTL_MODE_MSK, + data->fifo_mode)); + + return adxl313_set_measure_en(data, true); +} + +static int adxl313_fifo_transfer(struct adxl313_data *data, int samples) +{ + size_t count; + int i; + int ret; + + ret =3D 0; + count =3D sizeof(data->fifo_buf[0]) * ADXL313_NUM_AXIS; + for (i =3D 0; i < samples; i++) { + ret =3D regmap_bulk_read(data->regmap, ADXL313_REG_XYZ_BASE, + data->fifo_buf + (i * count / 2), count); + if (ret) + return ret; + } + return ret; +} + +static void adxl313_fifo_reset(struct adxl313_data *data) +{ + int regval; + int samples; + + adxl313_set_measure_en(data, false); + + /* clear samples */ + samples =3D adxl313_get_samples(data); + if (samples) + adxl313_fifo_transfer(data, samples); + + /* clear interrupt register */ + regmap_read(data->regmap, ADXL313_REG_INT_SOURCE, ®val); + + adxl313_set_measure_en(data, true); +} + +static int adxl313_buffer_postenable(struct iio_dev *indio_dev) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + + data->fifo_mode =3D ADXL313_FIFO_STREAM; + return adxl313_set_fifo(data); +} + +static int adxl313_buffer_predisable(struct iio_dev *indio_dev) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + int ret; + + data->fifo_mode =3D ADXL313_FIFO_BYPASS; + ret =3D adxl313_set_fifo(data); + if (ret) + return ret; + + return regmap_write(data->regmap, ADXL313_REG_INT_ENABLE, 0); +} + +static const struct iio_buffer_setup_ops adxl313_buffer_ops =3D { + .postenable =3D adxl313_buffer_postenable, + .predisable =3D adxl313_buffer_predisable, +}; + +static irqreturn_t adxl313_irq_handler(int irq, void *p) +{ + struct iio_dev *indio_dev =3D p; + struct adxl313_data *data =3D iio_priv(indio_dev); + int int_stat; + + if (regmap_read(data->regmap, ADXL313_REG_INT_SOURCE, &int_stat)) + return IRQ_NONE; + + if (FIELD_GET(ADXL313_INT_OVERRUN, int_stat)) + goto err; + + return IRQ_HANDLED; +err: + adxl313_fifo_reset(data); + + return IRQ_HANDLED; +} + static int adxl313_reg_access(struct iio_dev *indio_dev, unsigned int reg, unsigned int writeval, unsigned int *readval) { @@ -486,6 +607,18 @@ int adxl313_core_probe(struct device *dev, ret =3D regmap_write(data->regmap, ADXL313_REG_INT_MAP, regval); if (ret) return ret; + + ret =3D devm_iio_kfifo_buffer_setup(dev, indio_dev, + &adxl313_buffer_ops); + if (ret) + return ret; + + ret =3D devm_request_threaded_irq(dev, data->irq, NULL, + &adxl313_irq_handler, + IRQF_SHARED | IRQF_ONESHOT, + indio_dev->name, indio_dev); + if (ret) + return ret; } else { /* FIFO_BYPASSED mode */ ret =3D regmap_write(data->regmap, ADXL313_REG_FIFO_CTL, --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2D3B221C9E9; Sun, 18 May 2025 11:13:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566826; cv=none; b=oVJlyQsTcllcEfNjSYl6I4XQv7c/y0/80NuB+B2NGmT8rbtdccVZuGXIdoFuzF82LLO3O0fV1yPWTm2G8BUkBswIQKojfdxH+bW4vBJIoIbM0KXtRdMQfs++R9+6JFvWY8/+nPtJuJYnV+A7Yl9VyIZxayNFDp41kTkKl7oB0mw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566826; c=relaxed/simple; bh=327tO4x0rH+X3g/gHKdNSBjruWwiNG7QvaQ0kqdk4so=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=pIbREmOuHY2tLHXiyqxC9/moyDmcVo16UnfsqECClcVpHi7FdBaBQzDSZYLllflb890soP3XRI7Lisz0c1HNvWDsyxhsMP3BX4SXJan/SsuN2ggG4sLUvrVM+ZHmDAC9DWQ8m8fRUqzw3v5E1HarddPKw92vhwdvrx2NSw3/dUc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=MQlQXuW+; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="MQlQXuW+" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3a364d442e0so243178f8f.2; Sun, 18 May 2025 04:13:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566823; x=1748171623; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FihB3JscRz6ypXfgmD+ATnY4gb1bgHVZpQTtp3zZsWY=; b=MQlQXuW+L+WAN+iJ5ruDYD7zvi18ptnfALV34NhODqyXkTemYw4oEU+qMnbVCRmiPq aB0SCw+oPwkn9ilbeDsNFL7lzE4CLDTy80ln3E0bq03+WZPYu7vDaA7lmEuhDHQyQa19 OEZcdnIpefVSb54eUpKExCIGeAV5Xit3aO60yuI042BQuIM415FgPpvRM+D9TzT5rbQr cPCXiSpY/D7r13EcecP2VEntjws8VEHGFGyDI8Wf1rTrceMzE+y/UmpEfUMYfMCjRnTj ch4vNKz3r76ktuXdvuRW2tbjIFiY7USAfvbhIXj4zl1hycaFLICS0MPY3BK/vnLgAgC7 SSAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566823; x=1748171623; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FihB3JscRz6ypXfgmD+ATnY4gb1bgHVZpQTtp3zZsWY=; b=AfGi78mLN9uKgDo1dAP9U9m1OxlgaEjk7ftDxkUB8tw0+Zd1ACjp7aBqB6bL/iDoib JIQ1wSk+nPIswuBb9B/wqz6BN3uAchxQvezYTm2Wb+EShk1abszu6bFFkgcVKh2phY91 3e9khykEk5jy+wmudzGP6R2mg7zU/donR9KNHoIprbQfZHh4kX9hm/8cVVNtOTxa0XR/ Qnz5ExnSMn27me6bOjrnsjBc9UHxuRQoOPf2LFn3t/dvH+uUtuxxnmdYefTdTozqgwFx cExCeAoTblkwF7Vdd72Mpq/xJEcgwFdEJM6uWOrNHDpnIp6hWwmbgTap7vx20QLazcbK JLEQ== X-Forwarded-Encrypted: i=1; AJvYcCUxV0LZP6VJRVxOo8PW2yVZw8Te7/CHcoBLpG+iUPC1CJa097NkThQ2iVvpMw6vqhm59aGKx1HWc2JUV4Oc@vger.kernel.org, AJvYcCVVGKcziWXKLxREt1FvQCBS+mjeHW2ZnsJ22QoyQxwijFMCgSko3d6tPGVFHxZQ20Jo2xNYhHqMHXk=@vger.kernel.org X-Gm-Message-State: AOJu0YzYUEaCd01BdRovuQep2kYIahnvdbXBaWQHpyag9wt1TlvPk+i/ EseKyG8bGkPurrMq2ILzvsR8HpUo/RJRX6hcCo/sh0flZsSJEkJgca7y X-Gm-Gg: ASbGnctLE1IG//49Tt30BJV0bueu7KniCZYxNtjHgFmJbQAKN8sS4jM7hpnJoHcKqNu BivEp2Ii8LOhhptUXcOauL5/HiyUrOdK2+/yApUbLShsZQ8iv9izksd9eNWWcRae0OQPkDQ+UlQ eeioGVpA+ItV+87tgCG3/ayxC5WWCjWFCYJiczdye69BDGIsquSKf3ek7eknN2X7x867V4KBPKT a0DWQCTlao3T56eUCcZqpIn8y/KxHWreU99+szDB9deNVrQL6GXCMu6ANHHs/OYkZruNcmljedb 9+fEcHs7K0xQRhKMphcjtr3Lakmxd/pm7madnwG9H78Ff+JT1eAEwc9rMuudBiRKtfhxqHtsIfh mCcW4d7jNcP6a+VAdIeEHuw== X-Google-Smtp-Source: AGHT+IGyB2qguCzbtpCnaCPX/5k7Qt1JztjwA4Tml+i61NSCNMP6AKS3UI+c357TG/iaEhli/Xn9Jw== X-Received: by 2002:a05:6000:184d:b0:3a0:75ff:2d94 with SMTP id ffacd0b85a97d-3a35c80b638mr3030713f8f.1.1747566823350; Sun, 18 May 2025 04:13:43 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:43 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 08/12] iio: accel: adxl313: add FIFO watermark Date: Sun, 18 May 2025 11:13:17 +0000 Message-Id: <20250518111321.75226-9-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add FIFO watermark configuration and evaluation. Let a watermark to be configured. Evaluate the interrupt accordingly. Read out the FIFO content and push the values to the IIO channel. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313.h | 1 + drivers/iio/accel/adxl313_core.c | 60 ++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h index 4cb1fe1f2616..9c7aedf7da7a 100644 --- a/drivers/iio/accel/adxl313.h +++ b/drivers/iio/accel/adxl313.h @@ -89,6 +89,7 @@ struct adxl313_data { const struct adxl313_chip_info *chip_info; struct mutex lock; /* lock to protect transf_buf */ int irq; + u8 watermark; u8 fifo_mode; __le16 transf_buf __aligned(IIO_DMA_MINALIGN); __le16 fifo_buf[ADXL313_NUM_AXIS * ADXL313_FIFO_SIZE + 1]; diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 574962a8f35d..0a93af89ba19 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -374,6 +374,25 @@ static int adxl313_write_raw(struct iio_dev *indio_dev, } } =20 +static int adxl313_set_watermark(struct iio_dev *indio_dev, unsigned int v= alue) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + const unsigned int fifo_mask =3D 0x1f, watermark_mask =3D 0x02; + int ret; + + value =3D min(value, ADXL313_FIFO_SIZE - 1); + + ret =3D regmap_update_bits(data->regmap, ADXL313_REG_FIFO_CTL, + fifo_mask, value); + if (ret) + return ret; + + data->watermark =3D value; + + return regmap_update_bits(data->regmap, ADXL313_REG_INT_ENABLE, + watermark_mask, ADXL313_INT_WATERMARK); +} + static int adxl313_get_samples(struct adxl313_data *data) { unsigned int regval =3D 0; @@ -400,6 +419,8 @@ static int adxl313_set_fifo(struct adxl313_data *data) return ret; =20 ret =3D regmap_write(data->regmap, ADXL313_REG_FIFO_CTL, + FIELD_PREP(ADXL313_REG_FIFO_CTL_SAMPLES_MSK, + data->watermark) | FIELD_PREP(ADXL313_REG_FIFO_CTL_MODE_MSK, data->fifo_mode)); =20 @@ -467,6 +488,41 @@ static const struct iio_buffer_setup_ops adxl313_buffe= r_ops =3D { .predisable =3D adxl313_buffer_predisable, }; =20 +static int adxl313_fifo_push(struct iio_dev *indio_dev, int samples) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + int i, ret; + + if (samples <=3D 0) + return -EINVAL; + + ret =3D adxl313_fifo_transfer(data, samples); + if (ret) + return ret; + + for (i =3D 0; i < ADXL313_NUM_AXIS * samples; i +=3D ADXL313_NUM_AXIS) + iio_push_to_buffers(indio_dev, &data->fifo_buf[i]); + + return 0; +} + +static int adxl313_push_event(struct iio_dev *indio_dev, int int_stat) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + int samples; + int ret =3D -ENOENT; + + if (FIELD_GET(ADXL313_INT_WATERMARK, int_stat)) { + samples =3D adxl313_get_samples(data); + if (samples < 0) + return -EINVAL; + + ret =3D adxl313_fifo_push(indio_dev, samples); + } + + return ret; +} + static irqreturn_t adxl313_irq_handler(int irq, void *p) { struct iio_dev *indio_dev =3D p; @@ -476,6 +532,9 @@ static irqreturn_t adxl313_irq_handler(int irq, void *p) if (regmap_read(data->regmap, ADXL313_REG_INT_SOURCE, &int_stat)) return IRQ_NONE; =20 + if (adxl313_push_event(indio_dev, int_stat)) + goto err; + if (FIELD_GET(ADXL313_INT_OVERRUN, int_stat)) goto err; =20 @@ -500,6 +559,7 @@ static const struct iio_info adxl313_info =3D { .read_raw =3D adxl313_read_raw, .write_raw =3D adxl313_write_raw, .read_avail =3D adxl313_read_freq_avail, + .hwfifo_set_watermark =3D adxl313_set_watermark, .debugfs_reg_access =3D &adxl313_reg_access, }; =20 --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6AE7F21CC49; Sun, 18 May 2025 11:13:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566828; cv=none; b=Rl+7UpHy3fIZNAkC9JPUzhe13jSa3BlBh3JvWXHn5QuLejhzrqJW53whl3UwVDtAKab2xretKl23KRuTHG67H5FCkaBVl/DkUPtC/rO9E81wdWtc9ga9zTALYj9uoOQ1NQ4YVxPMAMXPoHWzZTxdr4WGZXRBGV8brHJc7+31Yqk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566828; c=relaxed/simple; bh=FAkeI3iLXBoKfNQQG5a9Eb2lE65BJrdkrbdP26nSRkI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AxUHi/R4p3EUFHS5pcL4bZFsxZHVdUTxQb+XKeffKHwYMpAvx+3uENs/7prRtKLYP6bmFV38eEDHzr5rSh8oU+4JULncVvK3eRPRjp2YzmvZpcXL7u9KQdsVgkypaX7lfUi9NH6BL9yGA3q0hEPX4cxlAwfpYM8pwYl20zVxQbs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=gMARcSn2; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="gMARcSn2" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-3a35ae46214so270653f8f.2; Sun, 18 May 2025 04:13:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566825; x=1748171625; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=pV3a4M1kUDF9zkuT1tBZbV9E8xvUYJCDi11TETr8fdc=; b=gMARcSn29F9q5JXOCLfYyIo4/Iaq3F0UIwmA+uLwpOk0Kqcn98qrkizGD00lJLoKkT E7lm5SZfKUr6DciKqPoxzCvXsW1RKu0VRWRhwyuaKEgGL+yIYf5IqtG0D4B2RDlDu4dE aukowIasOKfdhNSYhHhufBv989Bzgi5vDzPpMq6bR6DnQFl+BqsXA7yFnoSqxsyXxDpw zpH41p9izm3g4B1bVS4xZhOsjNgWxHjFOwIo6xkTfDh0n7E0r8vcMJWroNEdpkhPIElB YCTrOV8suBPRM26KEydGvt1wcUtBL4XtK6BsHPT9XslYfzrvsqgg1ns1aVa7mS+k5v1o J72A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566825; x=1748171625; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=pV3a4M1kUDF9zkuT1tBZbV9E8xvUYJCDi11TETr8fdc=; b=Qgylu0Ug+86UV7gqX4ymxneQxKaZyLBiEIgZsxRrLedgIQ/BN4Pmc0ezg/R++QV0JH 8+ikFyWwHwvyJYef6ysmWPegFRblfjcjL3qCUDRDSKDVywLI2yB4uLPq2b4RAqEPlyKJ 43UisT2TXeTWafZQGQsfH7EcCyGiKjnffVf9TG/J5tzxSsK1SQBhgfA1RDd7RfFnNp57 cE8d1zGWjrqk6zKCfs6Da6PnzCSO5C9+IrRidJDGBDEsYaenSwQbyMQbFwrRZfPZKAhB z/nxI3VDwsip2/iNTrO71IGwj3iJ4QZtaxP/aORgJJ8NhhNUPfNL75KXEx1FmqssIjge K1Mg== X-Forwarded-Encrypted: i=1; AJvYcCXKqxJpy3jn3DV80Qy0nOJYbgOexWT+62QOfUnVYk6W2Kju1XBFOuD0LbMave+Q2fKj4a4TNf4pvm0Q4lol@vger.kernel.org, AJvYcCXhIJ+i1/a4gNSzYX4jhmCukt10AAslrLCVGe3bv7d9nYP/J6aFKjgTenRTTnkP0KSum0p7LtlQ6gc=@vger.kernel.org X-Gm-Message-State: AOJu0Yz05sxw3OGm9LngIuVy90joab7LQKJUolEdRnaFUUjV4IsSxiG3 zjK4cMF9zvdtqXK09LWSFVjwE27COgLhqbq5EraBCV7XRTuy9ZehG2lu X-Gm-Gg: ASbGncuQwiMP2Api6vlLlIPZySYSTVHcBiH02O824TxDRhdFpQ8t7mBY0oCXwgpUpp4 mo5qg36CKPG/xc1WVaqm/BsbaKg+VN+yaqYXUgxPzZ39sGKIVVP0lcUyAWwgZqIOG/wvs/NVyWZ 0UAez4c09f351RX5AYehFaPnjjebmw6s/nZamg9/Tk+pwbg+3Ww04cq5WlvnUYimBpM+YG4vswC INRkgr2PfxNMM6PTjeTALZpZaFn1w5PmgSWg0xHz4cCQk+w+0GLsxRkwBFSBEaQ9C4rT/61fyOg YHYByhG2VpOktkxO1dvtulL5AIUgbHyo3jFYxBIBZGNvP8S++FHY87GECTJ+A/NFTO+o1rX/bsE hQMBMofSSGpc0D+B0yLpvzA== X-Google-Smtp-Source: AGHT+IFoPl1oI2i/STs2tXUTPsaokM/zK5NSc7nilel36Z5XA/xBKtTHjlDM5LpSSJ+I+0ngQ2NrVA== X-Received: by 2002:a5d:5f43:0:b0:3a3:62c6:d2b9 with SMTP id ffacd0b85a97d-3a362c6d3fbmr2186482f8f.8.1747566824563; Sun, 18 May 2025 04:13:44 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:44 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 09/12] iio: accel: adxl313: add activity sensing Date: Sun, 18 May 2025 11:13:18 +0000 Message-Id: <20250518111321.75226-10-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add possibilities to set a threshold for activity sensing. Extend the interrupt handler to process activity interrupts. Provide functions to set the activity threshold and to enable/disable activity sensing. Further add a fake channel for having x, y and z axis anded on the iio channel. This is a preparatory patch. Some of the definitions and functions are supposed to be extended for inactivity later on. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313_core.c | 252 +++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 0a93af89ba19..49914ccc92cf 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -27,6 +27,21 @@ =20 #define ADXL313_REG_XYZ_BASE ADXL313_REG_DATA_AXIS(0) =20 +#define ADXL313_ACT_XYZ_EN GENMASK(6, 4) + +/* activity/inactivity */ +enum adxl313_activity_type { + ADXL313_ACTIVITY, +}; + +static const unsigned int adxl313_act_int_reg[] =3D { + [ADXL313_ACTIVITY] =3D ADXL313_INT_ACTIVITY, +}; + +static const unsigned int adxl313_act_thresh_reg[] =3D { + [ADXL313_ACTIVITY] =3D ADXL313_REG_THRESH_ACT, +}; + static const struct regmap_range adxl312_readable_reg_range[] =3D { regmap_reg_range(ADXL313_REG_DEVID0, ADXL313_REG_DEVID0), regmap_reg_range(ADXL313_REG_OFS_AXIS(0), ADXL313_REG_OFS_AXIS(2)), @@ -231,6 +246,16 @@ static const int adxl313_odr_freqs[][2] =3D { }, \ } =20 +static const struct iio_event_spec adxl313_fake_chan_events[] =3D { + { + /* activity */ + .type =3D IIO_EV_TYPE_MAG, + .dir =3D IIO_EV_DIR_RISING, + .mask_separate =3D BIT(IIO_EV_INFO_ENABLE), + .mask_shared_by_type =3D BIT(IIO_EV_INFO_VALUE), + }, +}; + enum adxl313_chans { chan_x, chan_y, chan_z }; @@ -239,6 +264,14 @@ static const struct iio_chan_spec adxl313_channels[] = =3D { ADXL313_ACCEL_CHANNEL(0, chan_x, X), ADXL313_ACCEL_CHANNEL(1, chan_y, Y), ADXL313_ACCEL_CHANNEL(2, chan_z, Z), + { + .type =3D IIO_ACCEL, + .modified =3D 1, + .channel2 =3D IIO_MOD_X_AND_Y_AND_Z, + .scan_index =3D -1, /* Fake channel for axis AND'ing */ + .event_spec =3D adxl313_fake_chan_events, + .num_event_specs =3D ARRAY_SIZE(adxl313_fake_chan_events), + }, }; =20 static const unsigned long adxl313_scan_masks[] =3D { @@ -301,6 +334,67 @@ static int adxl313_read_freq_avail(struct iio_dev *ind= io_dev, } } =20 +static int adxl313_is_act_inact_en(struct adxl313_data *data, + enum adxl313_activity_type type, + bool *en) +{ + unsigned int axis_ctrl; + unsigned int regval; + int ret; + + *en =3D false; + + ret =3D regmap_read(data->regmap, ADXL313_REG_ACT_INACT_CTL, &axis_ctrl); + if (ret) + return ret; + + if (type =3D=3D ADXL313_ACTIVITY) + *en =3D FIELD_GET(ADXL313_ACT_XYZ_EN, axis_ctrl); + + if (*en) { + ret =3D regmap_read(data->regmap, ADXL313_REG_INT_ENABLE, ®val); + if (ret) + return ret; + + *en =3D adxl313_act_int_reg[type] & regval; + } + + return 0; +} + +static int adxl313_set_act_inact_en(struct adxl313_data *data, + enum adxl313_activity_type type, + bool cmd_en) +{ + unsigned int axis_ctrl =3D 0; + unsigned int threshold; + bool en; + int ret; + + if (type =3D=3D ADXL313_ACTIVITY) + axis_ctrl =3D ADXL313_ACT_XYZ_EN; + + ret =3D regmap_update_bits(data->regmap, + ADXL313_REG_ACT_INACT_CTL, + axis_ctrl, + cmd_en ? 0xff : 0x00); + if (ret) + return ret; + + ret =3D regmap_read(data->regmap, adxl313_act_thresh_reg[type], &threshol= d); + if (ret) + return ret; + + en =3D false; + + if (type =3D=3D ADXL313_ACTIVITY) + en =3D cmd_en && threshold; + + return regmap_update_bits(data->regmap, ADXL313_REG_INT_ENABLE, + adxl313_act_int_reg[type], + en ? adxl313_act_int_reg[type] : 0); +} + static int adxl313_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) @@ -374,6 +468,135 @@ static int adxl313_write_raw(struct iio_dev *indio_de= v, } } =20 +static int adxl313_read_event_config(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + bool int_en; + int ret; + + switch (type) { + case IIO_EV_TYPE_MAG: + switch (dir) { + case IIO_EV_DIR_RISING: + ret =3D adxl313_is_act_inact_en(data, + ADXL313_ACTIVITY, + &int_en); + if (ret) + return ret; + return int_en; + default: + return -EINVAL; + } + default: + return -EINVAL; + } +} + +static int adxl313_write_event_config(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir, + bool state) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + + switch (type) { + case IIO_EV_TYPE_MAG: + switch (dir) { + case IIO_EV_DIR_RISING: + return adxl313_set_act_inact_en(data, + ADXL313_ACTIVITY, + state); + default: + return -EINVAL; + } + default: + return -EINVAL; + } +} + +static int adxl313_read_event_value(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir, + enum iio_event_info info, + int *val, int *val2) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + unsigned int act_threshold; + int ret; + + /* measurement stays enabled, reading from regmap cache */ + + switch (type) { + case IIO_EV_TYPE_MAG: + switch (info) { + case IIO_EV_INFO_VALUE: + switch (dir) { + case IIO_EV_DIR_RISING: + ret =3D regmap_read(data->regmap, + adxl313_act_thresh_reg[ADXL313_ACTIVITY], + &act_threshold); + if (ret) + return ret; + *val =3D act_threshold * 15625; + *val2 =3D 1000000; + return IIO_VAL_FRACTIONAL; + default: + return -EINVAL; + } + default: + return -EINVAL; + } + + default: + return -EINVAL; + } +} + +static int adxl313_write_event_value(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_type type, + enum iio_event_direction dir, + enum iio_event_info info, + int val, int val2) +{ + struct adxl313_data *data =3D iio_priv(indio_dev); + unsigned int regval; + int ret; + + ret =3D adxl313_set_measure_en(data, false); + if (ret) + return ret; + + switch (type) { + case IIO_EV_TYPE_MAG: + switch (info) { + case IIO_EV_INFO_VALUE: + /* The scale factor is 15.625 mg/LSB */ + regval =3D DIV_ROUND_CLOSEST(1000000 * val + val2, 15625); + switch (dir) { + case IIO_EV_DIR_RISING: + ret =3D regmap_write(data->regmap, + adxl313_act_thresh_reg[ADXL313_ACTIVITY], + regval); + if (ret) + return ret; + return adxl313_set_measure_en(data, true); + default: + return -EINVAL; + } + default: + return -EINVAL; + } + default: + return -EINVAL; + } +} + static int adxl313_set_watermark(struct iio_dev *indio_dev, unsigned int v= alue) { struct adxl313_data *data =3D iio_priv(indio_dev); @@ -508,10 +731,22 @@ static int adxl313_fifo_push(struct iio_dev *indio_de= v, int samples) =20 static int adxl313_push_event(struct iio_dev *indio_dev, int int_stat) { + s64 ts =3D iio_get_time_ns(indio_dev); struct adxl313_data *data =3D iio_priv(indio_dev); int samples; int ret =3D -ENOENT; =20 + if (FIELD_GET(ADXL313_INT_ACTIVITY, int_stat)) { + ret =3D iio_push_event(indio_dev, + IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, + IIO_MOD_X_AND_Y_AND_Z, + IIO_EV_TYPE_MAG, + IIO_EV_DIR_RISING), + ts); + if (ret) + return ret; + } + if (FIELD_GET(ADXL313_INT_WATERMARK, int_stat)) { samples =3D adxl313_get_samples(data); if (samples < 0) @@ -558,6 +793,10 @@ static int adxl313_reg_access(struct iio_dev *indio_de= v, unsigned int reg, static const struct iio_info adxl313_info =3D { .read_raw =3D adxl313_read_raw, .write_raw =3D adxl313_write_raw, + .read_event_config =3D adxl313_read_event_config, + .write_event_config =3D adxl313_write_event_config, + .read_event_value =3D adxl313_read_event_value, + .write_event_value =3D adxl313_write_event_value, .read_avail =3D adxl313_read_freq_avail, .hwfifo_set_watermark =3D adxl313_set_watermark, .debugfs_reg_access =3D &adxl313_reg_access, @@ -668,6 +907,19 @@ int adxl313_core_probe(struct device *dev, if (ret) return ret; =20 + /* + * Reset or configure the registers with reasonable default + * values. As having 0 in most cases may result in undesirable + * behavior if the interrupts are enabled. + */ + ret =3D regmap_write(data->regmap, ADXL313_REG_ACT_INACT_CTL, 0); + if (ret) + return ret; + + ret =3D regmap_write(data->regmap, ADXL313_REG_THRESH_ACT, 0x52); + if (ret) + return ret; + ret =3D devm_iio_kfifo_buffer_setup(dev, indio_dev, &adxl313_buffer_ops); if (ret) --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5BEA021CFFF; Sun, 18 May 2025 11:13:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566829; cv=none; b=pePQfd4+U5+3N9Un/xNVgfTSBlVt8U3zpm02ZCjhT0zoyFvnC88MFcB65Cp/jEsYSSgp7uMvesaYGDq1KGZCEn01M0bx7fNrW/QHlc0XamFPNO4Nr3O3byAo5ALt4D2Oy2lsDzWGxgx9GmtUYURvL7e2u830qHTsxrmz4C99kBc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566829; c=relaxed/simple; bh=KKviicaxEyRszhNConiqY0Fii1eydJiHO1yqeCIIVu4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=OWbOcJYcHodJi0AtiP5U/LHuDLSfO+jpaQXmOll0DOW2SDzq4cchc+mpKVHjQDulS2JAR6CVnYTGuRyl4vncu6sfIH1MFSP4Pqv2iOyfORz4M70NgjUT04SgJbX0kFwdn0KHL5+SXidAjKGB2tj0d7iVzBIyRCRM5J10wAvWgEo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=eRSGYkP7; arc=none smtp.client-ip=209.85.221.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="eRSGYkP7" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3a35c339e95so344832f8f.3; Sun, 18 May 2025 04:13:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566826; x=1748171626; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MpJq7+q3FiXWjTp65V9AsxgFiWezFi0L+3hZ3O5uTco=; b=eRSGYkP7qv1JlejbvypsVp3s2w979b0nAHH/A7xWBk0/FwHCHfrNo6hRbuQGhHLMTD FShO/+6xjc+Kyp377ofDdP4rlhuMOHSqDXfNeOlfbb+NYV8uAAg/6rxbzl2QOK1/gZ2s ql7/M0vLFqNPWC/Q+3E/WfF89KmiPIm9z1Uwc3InKXQb1HHCGq27Mu9GE4GJx+dCT8Tk 1XnherP/O6zPxLhAE9pSJZR2dy22r45YGM6znuqqs00ZOVdhp+JNRetfXKfroahyDi+R 5TeixUHwjiB7xF8DPahkKx35supFago+SbK5yoYddtQ3j0Fa1PkqqdA2wyIzyYKjCBeh reIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566826; x=1748171626; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MpJq7+q3FiXWjTp65V9AsxgFiWezFi0L+3hZ3O5uTco=; b=P2hQwQaKo4j1Bc7cEBizLEAvFgvZhu+Jb7X9ija7pWIlWWTEJG5WjdV0IlInlM9Ts7 QYrfWrjZ971RcWBQkDB5oiQWS3bjTUdXSL+6PupeSb05m37KnEdi0gtxQn/aQjpCbpD8 hRgwzyVutPV2vrWApPt1x6aT/JEIttmHMpCrWw/DHx18uALeIqdWU4BI3RRwx6xsh3vg mfpqsMQOH/+Rka96aN43sKOQtSu7Td/gZNfhLMgTkHOxn2BSBSjrWbTKe2tirP6J2wwF +UebXoruabGTstZAt2piku6L2L/8O0lAD7FNItGSrhddYkZa9ghSBlNwadiYVxfSx3qc f+Iw== X-Forwarded-Encrypted: i=1; AJvYcCWu5aonXxYBKG5kFo3x1a3XzgDhPU+eVJEhWAsNJ6je26CwSEFGUbARwhhXqAYHJnAuTo9bj80oq8U=@vger.kernel.org, AJvYcCX+qZeIKikCJtIeTqQrGVAIrW26mhDwdycBSX7+KS3WoTHOJIvfrOlnBdxs8zrnxPphYcrnZ7dq7gLk2KFR@vger.kernel.org X-Gm-Message-State: AOJu0Yx2R2nIR73hvFiFkjved1E8zUMUck+R/3UL5EwO7Md62uvzltyn mkAlrcdVQnbyRkqfnDR4corL+dUA94dLtv2lMzkCjEnHxOJZDcSaWtFj X-Gm-Gg: ASbGncsmMmVoGnBA+pBE7zM4LkeAh7oFqT3MqLd9fQY+Rxp7DGM6hxbDoLl7YUNBq5D mGo5Fk1CKeXPotzmllyph17MSEsCkoRFM6iKiJxdIYRgfCuSXPdNGqylpaPTUINjFIScTww6tQk NEhT8iC4lsP6mXxzauR8ubYYwFVPiXUhsWABsrS+NZ0qvfBP9czB5oLrnOt04mJUBD2BsaurSZC sGvppq115v548w2BFT9VijIKIErIFYRLztIArA8hku/MVIzP4I4s9WSP+Uk9snbrbk08bjcJunr HxhuyZAfYCEf0Wu9MJrN3lAmM1vbkshj7W0OvKL8fQCZWxLI53+MgGsEz6m6M45QXX/TEidKEdy MP+QtYqhFU85Say2wFjWXyg== X-Google-Smtp-Source: AGHT+IEVpR8JwtDxTlXRMvp7mogyeJeEwrrQUA6Q78+qFxENwy6zdRLUs8nZtoFVA6E6i/y0Sc88DA== X-Received: by 2002:a05:6000:2405:b0:3a2:133:b1a4 with SMTP id ffacd0b85a97d-3a35c852925mr3103045f8f.13.1747566825646; Sun, 18 May 2025 04:13:45 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:45 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 10/12] iio: accel: adxl313: add inactivity sensing Date: Sun, 18 May 2025 11:13:19 +0000 Message-Id: <20250518111321.75226-11-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extend the interrupt handler to process interrupts as inactivity events. Add functions to set threshold and period registers for inactivity. Add functions to enable / disable inactivity. Extend the fake iio channel to deal with inactivity events on x, y and z combined with AND. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313.h | 2 + drivers/iio/accel/adxl313_core.c | 98 +++++++++++++++++++++++++++++++- 2 files changed, 98 insertions(+), 2 deletions(-) diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h index 9c7aedf7da7a..1398ac54d19b 100644 --- a/drivers/iio/accel/adxl313.h +++ b/drivers/iio/accel/adxl313.h @@ -18,6 +18,8 @@ #define ADXL313_REG_SOFT_RESET 0x18 #define ADXL313_REG_OFS_AXIS(index) (0x1E + (index)) #define ADXL313_REG_THRESH_ACT 0x24 +#define ADXL313_REG_THRESH_INACT 0x25 +#define ADXL313_REG_TIME_INACT 0x26 #define ADXL313_REG_ACT_INACT_CTL 0x27 #define ADXL313_REG_BW_RATE 0x2C #define ADXL313_REG_POWER_CTL 0x2D diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 49914ccc92cf..46ca30abc7fd 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -28,18 +28,22 @@ #define ADXL313_REG_XYZ_BASE ADXL313_REG_DATA_AXIS(0) =20 #define ADXL313_ACT_XYZ_EN GENMASK(6, 4) +#define ADXL313_INACT_XYZ_EN GENMASK(2, 0) =20 /* activity/inactivity */ enum adxl313_activity_type { ADXL313_ACTIVITY, + ADXL313_INACTIVITY, }; =20 static const unsigned int adxl313_act_int_reg[] =3D { [ADXL313_ACTIVITY] =3D ADXL313_INT_ACTIVITY, + [ADXL313_INACTIVITY] =3D ADXL313_INT_INACTIVITY, }; =20 static const unsigned int adxl313_act_thresh_reg[] =3D { [ADXL313_ACTIVITY] =3D ADXL313_REG_THRESH_ACT, + [ADXL313_INACTIVITY] =3D ADXL313_REG_THRESH_INACT, }; =20 static const struct regmap_range adxl312_readable_reg_range[] =3D { @@ -254,6 +258,14 @@ static const struct iio_event_spec adxl313_fake_chan_e= vents[] =3D { .mask_separate =3D BIT(IIO_EV_INFO_ENABLE), .mask_shared_by_type =3D BIT(IIO_EV_INFO_VALUE), }, + { + /* inactivity */ + .type =3D IIO_EV_TYPE_MAG, + .dir =3D IIO_EV_DIR_FALLING, + .mask_separate =3D BIT(IIO_EV_INFO_ENABLE), + .mask_shared_by_type =3D BIT(IIO_EV_INFO_VALUE) | + BIT(IIO_EV_INFO_PERIOD), + }, }; =20 enum adxl313_chans { @@ -334,6 +346,15 @@ static int adxl313_read_freq_avail(struct iio_dev *ind= io_dev, } } =20 +static int adxl313_set_inact_time_s(struct adxl313_data *data, + unsigned int val_s) +{ + unsigned int max_boundary =3D 255; + unsigned int val =3D min(val_s, max_boundary); + + return regmap_write(data->regmap, ADXL313_REG_TIME_INACT, val); +} + static int adxl313_is_act_inact_en(struct adxl313_data *data, enum adxl313_activity_type type, bool *en) @@ -350,6 +371,8 @@ static int adxl313_is_act_inact_en(struct adxl313_data = *data, =20 if (type =3D=3D ADXL313_ACTIVITY) *en =3D FIELD_GET(ADXL313_ACT_XYZ_EN, axis_ctrl); + else + *en =3D FIELD_GET(ADXL313_INACT_XYZ_EN, axis_ctrl); =20 if (*en) { ret =3D regmap_read(data->regmap, ADXL313_REG_INT_ENABLE, ®val); @@ -366,13 +389,16 @@ static int adxl313_set_act_inact_en(struct adxl313_da= ta *data, enum adxl313_activity_type type, bool cmd_en) { - unsigned int axis_ctrl =3D 0; + unsigned int axis_ctrl; unsigned int threshold; + unsigned int inact_time_s; bool en; int ret; =20 if (type =3D=3D ADXL313_ACTIVITY) axis_ctrl =3D ADXL313_ACT_XYZ_EN; + else + axis_ctrl =3D ADXL313_INACT_XYZ_EN; =20 ret =3D regmap_update_bits(data->regmap, ADXL313_REG_ACT_INACT_CTL, @@ -387,8 +413,15 @@ static int adxl313_set_act_inact_en(struct adxl313_dat= a *data, =20 en =3D false; =20 - if (type =3D=3D ADXL313_ACTIVITY) + if (type =3D=3D ADXL313_ACTIVITY) { en =3D cmd_en && threshold; + } else { + ret =3D regmap_read(data->regmap, ADXL313_REG_TIME_INACT, &inact_time_s); + if (ret) + return ret; + + en =3D cmd_en && threshold && inact_time_s; + } =20 return regmap_update_bits(data->regmap, ADXL313_REG_INT_ENABLE, adxl313_act_int_reg[type], @@ -487,6 +520,13 @@ static int adxl313_read_event_config(struct iio_dev *i= ndio_dev, if (ret) return ret; return int_en; + case IIO_EV_DIR_FALLING: + ret =3D adxl313_is_act_inact_en(data, + ADXL313_INACTIVITY, + &int_en); + if (ret) + return ret; + return int_en; default: return -EINVAL; } @@ -510,6 +550,10 @@ static int adxl313_write_event_config(struct iio_dev *= indio_dev, return adxl313_set_act_inact_en(data, ADXL313_ACTIVITY, state); + case IIO_EV_DIR_FALLING: + return adxl313_set_act_inact_en(data, + ADXL313_INACTIVITY, + state); default: return -EINVAL; } @@ -527,6 +571,8 @@ static int adxl313_read_event_value(struct iio_dev *ind= io_dev, { struct adxl313_data *data =3D iio_priv(indio_dev); unsigned int act_threshold; + unsigned int inact_threshold; + unsigned int inact_time_s; int ret; =20 /* measurement stays enabled, reading from regmap cache */ @@ -545,9 +591,26 @@ static int adxl313_read_event_value(struct iio_dev *in= dio_dev, *val =3D act_threshold * 15625; *val2 =3D 1000000; return IIO_VAL_FRACTIONAL; + case IIO_EV_DIR_FALLING: + ret =3D regmap_read(data->regmap, + adxl313_act_thresh_reg[ADXL313_INACTIVITY], + &inact_threshold); + if (ret) + return ret; + *val =3D inact_threshold * 15625; + *val2 =3D 1000000; + return IIO_VAL_FRACTIONAL; default: return -EINVAL; } + case IIO_EV_INFO_PERIOD: + ret =3D regmap_read(data->regmap, + ADXL313_REG_TIME_INACT, + &inact_time_s); + if (ret) + return ret; + *val =3D inact_time_s; + return IIO_VAL_INT; default: return -EINVAL; } @@ -586,9 +649,21 @@ static int adxl313_write_event_value(struct iio_dev *i= ndio_dev, if (ret) return ret; return adxl313_set_measure_en(data, true); + case IIO_EV_DIR_FALLING: + ret =3D regmap_write(data->regmap, + adxl313_act_thresh_reg[ADXL313_INACTIVITY], + regval); + if (ret) + return ret; + return adxl313_set_measure_en(data, true); default: return -EINVAL; } + case IIO_EV_INFO_PERIOD: + ret =3D adxl313_set_inact_time_s(data, val); + if (ret) + return ret; + return adxl313_set_measure_en(data, true); default: return -EINVAL; } @@ -747,6 +822,17 @@ static int adxl313_push_event(struct iio_dev *indio_de= v, int int_stat) return ret; } =20 + if (FIELD_GET(ADXL313_INT_INACTIVITY, int_stat)) { + ret =3D iio_push_event(indio_dev, + IIO_MOD_EVENT_CODE(IIO_ACCEL, 0, + IIO_MOD_X_AND_Y_AND_Z, + IIO_EV_TYPE_MAG, + IIO_EV_DIR_FALLING), + ts); + if (ret) + return ret; + } + if (FIELD_GET(ADXL313_INT_WATERMARK, int_stat)) { samples =3D adxl313_get_samples(data); if (samples < 0) @@ -916,6 +1002,14 @@ int adxl313_core_probe(struct device *dev, if (ret) return ret; =20 + ret =3D regmap_write(data->regmap, ADXL313_REG_TIME_INACT, 5); + if (ret) + return ret; + + ret =3D regmap_write(data->regmap, ADXL313_REG_THRESH_INACT, 0x4f); + if (ret) + return ret; + ret =3D regmap_write(data->regmap, ADXL313_REG_THRESH_ACT, 0x52); if (ret) return ret; --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8009A21D3E6; Sun, 18 May 2025 11:13:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566830; cv=none; b=CWlvBDrE16urbrj6VmCRSwhHWUc/HmHlsbKb+tdvN/UCVfniD+dlW/4Q2/To5bOw9g6VKFsXKnLOku5beNpTlZhSS6xXLl5go4tOah6/Ar0OstVGwI6HARbopviwRBelpwpmnIhrXw/PZBxELzNbAzbhNJNp8oUtI08LnEal6WM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566830; c=relaxed/simple; bh=AQgWRZ+bNmb6VNtMYMD1eQK2L/bmoVe/hTRUpXwNIBo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rlBOyOIeadnXy39rEJJVI1RMIZ2Kt7PNYFOr9WFY5RykR8Z46sATu91JYukgpH4sX+DZbeIVb8qeYebdT6YC5tatM1fA7muea0CAL9Ag4IshpBc2l5ywsp8f6b3Z+cf4tAPyD1dTyVED8Z0CwN1o4j0b95IQdTJbQM/Km3ttTSs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=RdJRS3HW; arc=none smtp.client-ip=209.85.221.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RdJRS3HW" Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-3a36977f261so113128f8f.1; Sun, 18 May 2025 04:13:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566827; x=1748171627; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=u1drZhJrDbb5wAe1X2U8L5IB9vNXA2H8lOJZnEvsQ7A=; b=RdJRS3HWQiJEWmaZ4FHCnJ2Hp6koDBaY+hbzgj/AWVwwDydur10o6EfNkAn6dNX/Nt ZqegqyOhh7zbFimTPsTkvNmCm0lsYsGe/XoeDXbugh08EwVb+4NOTq8skUEt/VwgGlS3 V3RwEjHA5NgLR5N8li2Z2mCwDa8c+zZSVbdMN9VCqgsVCN325KIhj3fXmJ3UZP1Xa6jt sYE3QCbPDytNsbHAWjsqkNHu52bImqyoEyDyLiWJeCteh4rvxMGRYLgOe6A5ESUaxnT+ XC0mvGNBwuxGqSn9C5WEPqg7vixtCBg6+dtrEHgKRXevm+73NPNQ6k3Vsj2wXysLcbr8 rUIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566827; x=1748171627; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=u1drZhJrDbb5wAe1X2U8L5IB9vNXA2H8lOJZnEvsQ7A=; b=CaH9F5Sn9avI0ybNBdkCseBHsriz19rfhlj1lwvAa3vxcwO/LnyIZIOxEnFv+d92G0 I/UGWefLdUVVjqvgdZ1Ir4RCtN7nj47ihzSaNMPsAE6I8qxRyGcoQ2JYB678i9jUNMrq ig1XK/ye8XgfLupBVguopKkWOwTo3Vb2Zfw4ATnBIbK17kziR4osiyvQPqs1m2XnIXTj TFZ3Q/l9T8IseuaojR0DdKP17SeyyCtc7jBHAePCAMqpyPV0nJ0v8ulFMRPWMXmFvz6k UtXZbNJexIxhX1kaAAr8N+YG7qtstqL8tT1DpImX6nwBvsYD7C3Kk/Rkw+hyFM9et8qk NBJw== X-Forwarded-Encrypted: i=1; AJvYcCUD0crVKnYWfTgr0jnSRCCWslBLBBM4ZxovLmCL691nbYrxAofnxRCG2JGHc1iSSwhGkw/vts0ulO4=@vger.kernel.org, AJvYcCW3zw7nmmKp01rhshlbrsacb4XwKE655VoSMKeEDNBTmcznFUI0cmXVvyo6GEKptoYBxsUziGZleXY2F5Lf@vger.kernel.org X-Gm-Message-State: AOJu0YyB9ytEWe/6q1aSXXnDb1onIxgmr+H1kVFZ/Ncgftfw6A2QhFSS SPEDDmmU0EmwH1mQUbTOXiSrQWKLtiEcuWhh4OJmc5KP4wkm3RzwdIRW X-Gm-Gg: ASbGncuCknrUcLDEXPsUbf5KUt3GubvTyJw1Plm8JnA8B3ET649LT1fnRzwMDOOalCO taM2m5SKlDluRfRuvQUgs8CG5hJBSLOjkkQLJbEIgmtTio8kq/p80EAjBip1BN3ck5hKHZWqUH9 mxEdrrm9UAuwUhEjE9v5w/nLAoCRJ9rADRJnA2pC+G1RfwtSp2/cxaiwfQCf2rb0Y6aYhnjD81T 6/KLzu4J+QHHIxQP9Y562ViUN6egi6JHiTpk0ocQXagUl0N9Ly/lfAsReE3ccvhu8pdwfVOmV+d JlJ+qgGAkl7i3UblYi+mK0OA5yuBP/GrDQfDiEMN/L2mpuB55gHGzdzn8hM9BAUMg39+9h6eXtK 5h2QlmXiG4YkBKZmgtt4IRA== X-Google-Smtp-Source: AGHT+IEliM0EwzXhTiOaakSADoBSFwrmUOdk/p4CPfoz42kMheZRwHMXkLfeJtvTHvd6xAy26ov+GA== X-Received: by 2002:adf:f10e:0:b0:3a3:5c8e:2d8d with SMTP id ffacd0b85a97d-3a35c8e2da0mr2877447f8f.0.1747566826697; Sun, 18 May 2025 04:13:46 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:46 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 11/12] iio: accel: adxl313: implement power-save on inactivity Date: Sun, 18 May 2025 11:13:20 +0000 Message-Id: <20250518111321.75226-12-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Link activity and inactivity to indicate the internal power-saving state. Add auto-sleep to be linked to inactivity. Signed-off-by: Lothar Rubusch --- drivers/iio/accel/adxl313.h | 3 +++ drivers/iio/accel/adxl313_core.c | 29 ++++++++++++++++++++++++++--- 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/drivers/iio/accel/adxl313.h b/drivers/iio/accel/adxl313.h index 1398ac54d19b..eafdf8f57816 100644 --- a/drivers/iio/accel/adxl313.h +++ b/drivers/iio/accel/adxl313.h @@ -41,6 +41,9 @@ #define ADXL313_RATE_BASE 6 =20 #define ADXL313_POWER_CTL_MSK BIT(3) +#define ADXL313_POWER_CTL_INACT_MSK GENMASK(5, 4) +#define ADXL313_POWER_CTL_LINK BIT(5) +#define ADXL313_POWER_CTL_AUTO_SLEEP BIT(4) #define ADXL313_MEASUREMENT_MODE BIT(3) #define ADXL313_MEASUREMENT_STANDBY 0x00 =20 diff --git a/drivers/iio/accel/adxl313_core.c b/drivers/iio/accel/adxl313_c= ore.c index 46ca30abc7fd..aabb4a1b9b9b 100644 --- a/drivers/iio/accel/adxl313_core.c +++ b/drivers/iio/accel/adxl313_core.c @@ -392,6 +392,7 @@ static int adxl313_set_act_inact_en(struct adxl313_data= *data, unsigned int axis_ctrl; unsigned int threshold; unsigned int inact_time_s; + bool act_en, inact_en; bool en; int ret; =20 @@ -423,9 +424,31 @@ static int adxl313_set_act_inact_en(struct adxl313_dat= a *data, en =3D cmd_en && threshold && inact_time_s; } =20 - return regmap_update_bits(data->regmap, ADXL313_REG_INT_ENABLE, - adxl313_act_int_reg[type], - en ? adxl313_act_int_reg[type] : 0); + ret =3D regmap_update_bits(data->regmap, ADXL313_REG_INT_ENABLE, + adxl313_act_int_reg[type], + en ? adxl313_act_int_reg[type] : 0); + if (ret) + return ret; + + /* + * Advanced power saving: Set sleep and link bit only when ACT and INACT + * are set. Check enable against regmap cached values. + */ + ret =3D adxl313_is_act_inact_en(data, ADXL313_ACTIVITY, &act_en); + if (ret) + return ret; + + ret =3D adxl313_is_act_inact_en(data, ADXL313_INACTIVITY, &inact_en); + if (ret) + return ret; + + en =3D en && act_en && inact_en; + + return regmap_update_bits(data->regmap, + ADXL313_REG_POWER_CTL, + ADXL313_POWER_CTL_INACT_MSK, + en ? (ADXL313_POWER_CTL_AUTO_SLEEP | ADXL313_POWER_CTL_LINK) + : 0); } =20 static int adxl313_read_raw(struct iio_dev *indio_dev, --=20 2.39.5 From nobody Fri Dec 19 17:14:24 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B825721E08A; Sun, 18 May 2025 11:13:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566831; cv=none; b=dPMY3cly9GUhL4jbLmkiEGFcrm3JfURfCOaX1z/3hBzys5JwdAeplqvEeo0VXA8vXX1/vQtwb5Lw1r49ghI9iKgV6pOIaNwTUXTTz1SUNm4I4b/JRKq9RA/J1Gsl4EudDEO5i9JmQbclh3Jg6s+dxhqbjkGg3ucyJDQfa9Ci3/k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1747566831; c=relaxed/simple; bh=h8H53WstQAHtKB7BqisUydwF30h1NlWHqWKS0j9d0QU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=e0mIXSPFw2USD2KiuBKEWbXfMow+0/J5fR0B+1Dn5wjhAVhDabzckr1vVK/2UUbQfH33orNMJYUsa4h4+IbhVKGm7ZLqa+psTgJc7dNrzd4CmqqvxHLZC4RmgOjbuBaAZWQo+AYz5iz8+wyV7iRf9XOak/m/LxVLtl3p35olxw4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=J2Z9NL8/; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="J2Z9NL8/" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3a35c339e95so344837f8f.3; Sun, 18 May 2025 04:13:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1747566828; x=1748171628; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DgqBxuRnRBCBlpgOJitYe+JYUaYesgoujNN7Mj4ZDPA=; b=J2Z9NL8/pIOLM5lD0j0t2UKSqJCje8m6yE1zROxrE5AE6z6re7Ps4hIBV3tPtZAFDj WC6uS5lJS3+VAWjaYwwYYLH+Dx+/8L2aBfVWNt9uCaV6nA5HeGT1yTMnIFekmD0X1tfE pjhsJbbjwv6LN3lcz1KBohKgBnRBWyfr3/8z1Zb4bPvRLboMNaNLM1vyryc64YlP5PMa nbcH/y3K1xXKZHtA4pY79zOhFCQUdjbHpuorMBEzwSDDDN5uT/oNUfQZy6xBGWksUzkg 7jTudKBA3bOQhEbS1DnBrlNZJqi9Po+2Y9i4nYB1AbITux/Hh9Q37D+7t8kF71StleII NbKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1747566828; x=1748171628; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DgqBxuRnRBCBlpgOJitYe+JYUaYesgoujNN7Mj4ZDPA=; b=l6Bg6wiAwjXg4+0gJcPtxetq7xSR7aMj7cdrTUBvg3LH3ILdIXxytBGpGclPt8Y13a O7lcUMetIMMzvsBWBKFENpvVHikCiwW4LrIVUq3L44WmKdvse96vQGW4KfgtWqJWGyOj Y6wqxZTk7SXth8oDqAqu1SvRQvhxKdF4vLGen2qICYvbbiXEiSHOV02ELMPtZBv0Dt8n 1raaXKnNyGUaZR6aZbGK3m/fTxmV4Y8SNyL7KMG6kPdnk6vLziRph9eA0Inznex+Nmha rAHhOXykw6EnPEn3f2FZJqc0bJAJNbvJGk8TY/cuiXuwhEkGeayl1gE1vjG6ZbsVAZtU SFjw== X-Forwarded-Encrypted: i=1; AJvYcCUfjQm49n+D5DNGtOBTBwDLVGFEdZAH3nH0UtDb1usauyl8YUKTzpHuof+7Nd2VogBYBaPhRlw/dH4=@vger.kernel.org, AJvYcCWjJw17vaLUommEmRuk7RYVqI0MCCHvIPPrWGanSlfbkcUL260NzezAANl5u/mLUgEFx/ObK6W6gneqUzKB@vger.kernel.org X-Gm-Message-State: AOJu0YzInorc8tbVbiuUqAQew3Mxn5qZJDAWf/NRAq3TvoeMGnUbOYbL z3iSLdxLatUs1vNZeqv1TdmW33NRaM8ItlfwEMW5hswED57B0xf97GTmKGe5ckwA X-Gm-Gg: ASbGnctKOglJBkDuCDk/x5HJ/34s6hqTEIuU7ohReP4PjdZPniDkSVRaJvQH0fdqdcQ cD1FYBiQRaEN2dbrMA00sOaleIDFN2tWR3Bjx406YUctTP3HoL6DbD7cDT3imGLkD4H6IwRCMNk WTAo9y/NBkEBba02towPHYWzLH/GElSHs5Vw9d5IaSxJAr9oMU7Tp4T4eNMdcZFAlCpKrCk30p4 xSdkK8BDuHr0Ol5GwcwBGk4DffbjQjtOW4aDAMsd5OtPmP95Z17o3tlhfZdeQycrZyed1w6EnNH NcjPgWfM518gSYHjK/q3vjcI+1INtghCelTowufg5v3G8MlHdm3c/GT96AJlZPW5rMfEgdslV8j bo3H73fKC7C2dmsMpNdn6UtfOZ0hf2pVa X-Google-Smtp-Source: AGHT+IFbVAmXs0v0AmOVILXuya20WEx95+YGvW9uxyp3Csbw7VOLm+dkgAO5BGxopqKKB0+1KkbFNg== X-Received: by 2002:a05:6000:4313:b0:3a2:3c0:a0b4 with SMTP id ffacd0b85a97d-3a35c7dbf50mr3232297f8f.0.1747566827784; Sun, 18 May 2025 04:13:47 -0700 (PDT) Received: from localhost.localdomain (84-72-156-211.dclient.hispeed.ch. [84.72.156.211]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3a35ca4d1dfsm9287446f8f.18.2025.05.18.04.13.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 18 May 2025 04:13:47 -0700 (PDT) From: Lothar Rubusch To: jic23@kernel.org, dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, corbet@lwn.net, lucas.p.stankus@gmail.com, lars@metafoo.de, Michael.Hennerich@analog.com Cc: linux-iio@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, Lothar Rubusch Subject: [PATCH v1 12/12] docs: iio: add ADXL313 accelerometer Date: Sun, 18 May 2025 11:13:21 +0000 Message-Id: <20250518111321.75226-13-l.rubusch@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250518111321.75226-1-l.rubusch@gmail.com> References: <20250518111321.75226-1-l.rubusch@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add documentation for the ADXL313 accelerometer driver. Signed-off-by: Lothar Rubusch --- Documentation/iio/adxl313.rst | 196 ++++++++++++++++++++++++++++++++++ Documentation/iio/index.rst | 1 + 2 files changed, 197 insertions(+) create mode 100644 Documentation/iio/adxl313.rst diff --git a/Documentation/iio/adxl313.rst b/Documentation/iio/adxl313.rst new file mode 100644 index 000000000000..8c4e2d141594 --- /dev/null +++ b/Documentation/iio/adxl313.rst @@ -0,0 +1,196 @@ +.. SPDX-License-Identifier: GPL-2.0 + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +ADXL313 driver +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +This driver supports Analog Device's ADXL313 on SPI/I2C bus. + +1. Supported devices +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +* `ADXL313 `_ + +The ADXL313is a low noise density, low power, 3-axis accelerometer with +selectable measurement ranges. The ADXL313 supports the =C2=B10.5 g, =C2= =B11 g, =C2=B12 g and +=C2=B14 g ranges. + +2. Device attributes +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Accelerometer measurements are always provided. + +Temperature data are also provided. This data can be used to monitor the +internal system temperature or to improve the temperature stability of the +device via calibration. + +Each IIO device, has a device folder under ``/sys/bus/iio/devices/iio:devi= ceX``, +where X is the IIO index of the device. Under these folders reside a set of +device files, depending on the characteristics and features of the hardware +device in questions. These files are consistently generalized and document= ed in +the IIO ABI documentation. + +The following tables show the adxl313 related device files, found in the +specific device folder path ``/sys/bus/iio/devices/iio:deviceX``. + ++---------------------------------------------------+---------------------= -------------------------------------+ +| 3-Axis Accelerometer related device files | Description = | ++---------------------------------------------------+---------------------= -------------------------------------+ +| in_accel_scale | Scale for the accele= rometer channels. | ++---------------------------------------------------+---------------------= -------------------------------------+ +| in_accel_x_calibbias | Calibration offset f= or the X-axis accelerometer channel. | ++---------------------------------------------------+---------------------= -------------------------------------+ +| in_accel_x_raw | Raw X-axis accelerom= eter channel value. | ++---------------------------------------------------+---------------------= -------------------------------------+ +| in_accel_y_calibbias | y-axis acceleration = offset correction | ++---------------------------------------------------+---------------------= -------------------------------------+ +| in_accel_y_raw | Raw Y-axis accelerom= eter channel value. | ++---------------------------------------------------+---------------------= -------------------------------------+ +| in_accel_z_calibbias | Calibration offset f= or the Z-axis accelerometer channel. | ++---------------------------------------------------+---------------------= -------------------------------------+ +| in_accel_z_raw | Raw Z-axis accelerom= eter channel value. | ++---------------------------------------------------+---------------------= -------------------------------------+ + ++---------------------------------------+---------------------------------= -------------+ +| Miscellaneous device files | Description = | ++---------------------------------------+---------------------------------= -------------+ +| name | Name of the IIO device. = | ++---------------------------------------+---------------------------------= -------------+ +| in_accel_sampling_frequency | Currently selected sample rate. = | ++---------------------------------------+---------------------------------= -------------+ +| in_accel_sampling_frequency_available | Available sampling frequency con= figurations. | ++---------------------------------------+---------------------------------= -------------+ + +Channels processed values +------------------------- + +A channel value can be read from its _raw attribute. The value returned is= the +raw value as reported by the devices. To get the processed value of the ch= annel, +apply the following formula: + +.. code-block:: bash + + processed value =3D (_raw + _offset) * _scale + +Where _offset and _scale are device attributes. If no _offset attribute is +present, simply assume its value is 0. + +The ADXL313 driver offers data for a single types of channels, the table b= elow +shows the measurement units for the processed value, which are defined by = the +IIO framework: + ++-------------------------------------+---------------------------+ +| Channel type | Measurement unit | ++-------------------------------------+---------------------------+ +| Acceleration on X, Y, and Z axis | Meters per Second squared | ++-------------------------------------+---------------------------+ + +Usage examples +-------------- + +Show device name: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> cat name + adxl313 + +Show accelerometer channels value: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_raw + 2 + root:/sys/bus/iio/devices/iio:device0> cat in_accel_y_raw + -57 + root:/sys/bus/iio/devices/iio:device0> cat in_accel_z_raw + 2 + root:/sys/bus/iio/devices/iio:device0> cat in_accel_scale + 0.009576806 + +- X-axis acceleration =3D in_accel_x_raw * in_accel_scale =3D 0.0191536 m/= s^2 +- Y-axis acceleration =3D in_accel_y_raw * in_accel_scale =3D -0.5458779 m= /s^2 +- Z-axis acceleration =3D in_accel_z_raw * in_accel_scale =3D 0.0191536 m/= s^2 + +Set calibration offset for accelerometer channels. Note, the calibration w= ill be +rounded according to the graduation of LSB units: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias + 0 + + root:/sys/bus/iio/devices/iio:device0> echo 50 > in_accel_x_calibb= ias + root:/sys/bus/iio/devices/iio:device0> cat in_accel_x_calibbias + 48 + +Set sampling frequency: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> cat in_accel_sampling_frequ= ency + 100.000000 + root:/sys/bus/iio/devices/iio:device0> cat in_accel_sampling_frequ= ency_available + 6.250000 12.500000 25.000000 50.000000 100.000000 200.000000 400.0= 00000 800.000000 1600.000000 3200.000000 + + root:/sys/bus/iio/devices/iio:device0> echo 400 > in_accel_samplin= g_frequency + root:/sys/bus/iio/devices/iio:device0> cat in_accel_sampling_frequ= ency + 400.000000 + +3. Device buffers +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +This driver supports IIO buffers. + +All devices support retrieving the raw acceleration measurements using buf= fers. + +Usage examples +-------------- + +Select channels for buffer read: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_a= ccel_x_en + root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_a= ccel_y_en + root:/sys/bus/iio/devices/iio:device0> echo 1 > scan_elements/in_a= ccel_z_en + +Set the number of samples to be stored in the buffer: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> echo 10 > buffer/length + +Enable buffer readings: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> echo 1 > buffer/enable + +Obtain buffered data: + +.. code-block:: bash + + root:/sys/bus/iio/devices/iio:device0> hexdump -C /dev/iio\:device0 + ... + 000000d0 01 fc 31 00 c7 ff 03 fc 31 00 c7 ff 04 fc 33 00 |..1..= ...1.....3.| + 000000e0 c8 ff 03 fc 32 00 c5 ff ff fc 32 00 c7 ff 0a fc |....2= .....2.....| + 000000f0 30 00 c8 ff 06 fc 33 00 c7 ff 01 fc 2f 00 c8 ff |0....= .3...../...| + 00000100 02 fc 32 00 c6 ff 04 fc 33 00 c8 ff 05 fc 33 00 |..2..= ...3.....3.| + 00000110 ca ff 02 fc 31 00 c7 ff 02 fc 30 00 c9 ff 09 fc |....1= .....0.....| + 00000120 35 00 c9 ff 08 fc 35 00 c8 ff 02 fc 31 00 c5 ff |5....= .5.....1...| + 00000130 03 fc 32 00 c7 ff 04 fc 32 00 c7 ff 02 fc 31 00 |..2..= ...2.....1.| + 00000140 c7 ff 08 fc 30 00 c7 ff 02 fc 32 00 c5 ff ff fc |....0= .....2.....| + 00000150 31 00 c5 ff 04 fc 31 00 c8 ff 03 fc 32 00 c8 ff |1....= .1.....2...| + 00000160 01 fc 31 00 c7 ff 05 fc 31 00 c3 ff 04 fc 31 00 |..1..= ...1.....1.| + 00000170 c5 ff 04 fc 30 00 c7 ff 03 fc 31 00 c9 ff 03 fc |....0= .....1.....| + ... + +See ``Documentation/iio/iio_devbuf.rst`` for more information about how bu= ffered +data is structured. + +4. IIO Interfacing Tools +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +See ``Documentation/iio/iio_tools.rst`` for the description of the availab= le IIO +interfacing tools. diff --git a/Documentation/iio/index.rst b/Documentation/iio/index.rst index 2d6afc5a8ed5..c106402a91f7 100644 --- a/Documentation/iio/index.rst +++ b/Documentation/iio/index.rst @@ -31,6 +31,7 @@ Industrial I/O Kernel Drivers adis16475 adis16480 adis16550 + adxl313 adxl380 bno055 ep93xx_adc --=20 2.39.5