From nobody Mon Feb 9 03:01:58 2026 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.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 B87AD1FBC89 for ; Wed, 8 Jan 2025 12:49:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340588; cv=none; b=NmWGHwY6WOn0j/1mPwhHhctjFX6YigNO2p1BLShLhmIoaEdlijZY8oCQyh+m6c9n2CgK+xEhwNxCW3bh/xLM1XDWc9a2M3YzkvQ4FRh9dRkD/Iez07D1iTzw0697Kjgh3dbvDIecvITmr1KfJHq23ecJ2/x/L0YL3SwLEJLxmyw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340588; c=relaxed/simple; bh=eSSplP/3FY91YR2XwZTXJZ2Ax/rrzWeyNFYg2OhghvI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=PmTcZYatEqlg00eAfV7BQBsZKIa/qbx/Bu5mOCiUFP/l/lb9Q7jbTA0mKfEZ3KpoalBL59eMiLRqb1sD8jDbK9lVqEi1Lbgku1VEG3tP1hxsi+FJ/UPP7tERBJYa9XXBfUKkbi3yEzMoluqipBjS+XJWZYmlUrF495KQZBgPPSk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=dvn7uwRk; arc=none smtp.client-ip=209.85.128.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="dvn7uwRk" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-43622267b2eso173823255e9.0 for ; Wed, 08 Jan 2025 04:49:45 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1736340584; x=1736945384; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=hZ+/3KnECndMbh/2k2JKBTk8y/NjC4Kknkr3b9iFCA8=; b=dvn7uwRkNBlbrm7t5WMPyNCh8r8y5JplJKUUuRxEd/0jeXv3Yw6waACxC4KodA8mbQ 5kBFlBfl7N7V7PwjiexNdMcevr09LYKumWCzVDqQSjh5ZJm1QeJF0BJF5pNe9rPfuDzG 9YRCxWi7InnvjkismSkIenjoJPbs0fDiANRu064WGTl+xp19MG9lnhbCCRaw4BHRIauk JoIeTOew6TeNTmJSgUeK1qBNp/NM/ZmG+CznE/H7dN9UbYeJVFKsPRgC4zz5YKoQPxFj qmltgVDeNmy01Jg0i8yv8PWHnjBas/tc1JU9g3WhaK5qmp6vBRg7woeGh7uV4qPnLvai pvMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736340584; x=1736945384; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=hZ+/3KnECndMbh/2k2JKBTk8y/NjC4Kknkr3b9iFCA8=; b=uJXGxeqCfKtF6ne7bt4lDUvfqDx0X5GzG/lJRQAJpTk+4vhhQhHXJ99+EiTxOGyxXF 2m7iR+sduZCDUNEY4T12sKmeajzrJDQXAYZH6m2iU36g9KGFVPrPswHnQRuM2ZqTjea8 oaJZ9/yPs6p6Frp1LD4ActKBglXcSXjzHh8ieazeuk+s1aBOkbtHikTS0O7F95LRWY3d Yu3pO0UF4rUnO88h5QgkCcuAICJwRXU+iijnfusJdXm1rjED18hgJtW5olz8nuRaELXP OivevWCohDiaVJZP40RZHtlSJPkJ9hPfk0rIOruje850pEE2tXWxwBWDapc21oPInvAr wPPQ== X-Forwarded-Encrypted: i=1; AJvYcCUCgLe82g/rF8jZIFSR+Y2z94AktapnmkdetmZtZMdlRpcU1Sm6F7XvqfBcY2QxHXCc3T9vPuPS7e8ox9g=@vger.kernel.org X-Gm-Message-State: AOJu0Ywe7r+XxRohqUSjOqz0nJoezOSq1AQ855tmJSs1fsrmO9FFDNfW GxptyTkrG6R2CLV8jWYD2yIUlCRxff0Av9XLN53sasCnWJKLMJlYs6wV12um/eY= X-Gm-Gg: ASbGnctGdagmV1vsyIjYfoxVLv0PkgZMjz9croDg51SAXwAVi5jCV83IJHGbudCcEoL yUPS5NKvP7X/FcE/pddxPpdXjZrfgPNA3x5VgxkeAYAnln/P7d/Aut1OMt7M3uHxaa3hAsTJd2V hPvTLFwgOWAi9ZC4xxKPyHzxugQjZV8fCvbHR+Tf/wG8Oonuv0Mwqa9yw+kkzvU52YXqzjZ37X0 IvsmROeLbQA9uFpEhcrDmgvylzd5GOuHkssDIc1bgT0H958c9+BGasyvg9b8o/IH/z01EJtFa4L IFEJ3Sj2KSmHml8qOQnJeCABM0jQdwwv4WUIzJXO6Yvu9RaHKls2lw== X-Google-Smtp-Source: AGHT+IFwg1bUjwoBd62t98tnLRpUy/beIfCq9zQ1+vKCDUuQw6Mu2z2Mkl61UbqKFZAX4gLat0B9/A== X-Received: by 2002:a05:600c:5251:b0:434:f4f9:8104 with SMTP id 5b1f17b1804b1-436e2700050mr19531555e9.33.1736340583659; Wed, 08 Jan 2025 04:49:43 -0800 (PST) Received: from jstephan-bl.local (2a02-842a-d52e-6101-6fd0-06c4-5d68-f0a5.rev.sfr.net. [2a02:842a:d52e:6101:6fd0:6c4:5d68:f0a5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-436e2da63eesm19846805e9.3.2025.01.08.04.49.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jan 2025 04:49:43 -0800 (PST) From: Julien Stephan Date: Wed, 08 Jan 2025 13:49:33 +0100 Subject: [PATCH v4 1/5] iio: adc: ad7380: do not use iio_device_claim_direct_scoped anymore 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 Message-Id: <20250108-ad7380-add-alert-support-v4-1-1751802471ba@baylibre.com> References: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> In-Reply-To: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> To: Lars-Peter Clausen , Michael Hennerich , =?utf-8?q?Nuno_S=C3=A1?= , David Lechner , Jonathan Cameron , Jonathan Corbet Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Julien Stephan X-Mailer: b4 0.14.2 Conditionnal scoped handlers are turning out to be a real pain: readability issues, compiler and linker handling issues among others so rollback and remove the scoped version of iio_dvice_claim_direct_mode. To impove code readability factorize code to set oversampling ratio. Signed-off-by: Julien Stephan --- drivers/iio/adc/ad7380.c | 110 +++++++++++++++++++++++++++++--------------= ---- 1 file changed, 67 insertions(+), 43 deletions(-) diff --git a/drivers/iio/adc/ad7380.c b/drivers/iio/adc/ad7380.c index 4f32cb22f140442b831dc9a4f275e88e4ab2388e..bc7d58850a3e2a84a241d81377e= 3dc14c43fc101 100644 --- a/drivers/iio/adc/ad7380.c +++ b/drivers/iio/adc/ad7380.c @@ -675,15 +675,21 @@ static const struct regmap_config ad7380_regmap_confi= g =3D { static int ad7380_debugfs_reg_access(struct iio_dev *indio_dev, u32 reg, u32 writeval, u32 *readval) { - iio_device_claim_direct_scoped(return -EBUSY, indio_dev) { - struct ad7380_state *st =3D iio_priv(indio_dev); + struct ad7380_state *st =3D iio_priv(indio_dev); + int ret; =20 - if (readval) - return regmap_read(st->regmap, reg, readval); - else - return regmap_write(st->regmap, reg, writeval); - } - unreachable(); + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + if (readval) + ret =3D regmap_read(st->regmap, reg, readval); + else + ret =3D regmap_write(st->regmap, reg, writeval); + + iio_device_release_direct_mode(indio_dev); + + return ret; } =20 /* @@ -920,6 +926,7 @@ static int ad7380_read_raw(struct iio_dev *indio_dev, { struct ad7380_state *st =3D iio_priv(indio_dev); const struct iio_scan_type *scan_type; + int ret; =20 scan_type =3D iio_get_current_scan_type(indio_dev, chan); =20 @@ -928,11 +935,16 @@ static int ad7380_read_raw(struct iio_dev *indio_dev, =20 switch (info) { case IIO_CHAN_INFO_RAW: - iio_device_claim_direct_scoped(return -EBUSY, indio_dev) { - return ad7380_read_direct(st, chan->scan_index, - scan_type, val); - } - unreachable(); + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + ret =3D ad7380_read_direct(st, chan->scan_index, + scan_type, val); + + iio_device_release_direct_mode(indio_dev); + + return ret; case IIO_CHAN_INFO_SCALE: /* * According to the datasheet, the LSB size is: @@ -1008,47 +1020,59 @@ static int ad7380_osr_to_regval(int ratio) return -EINVAL; } =20 +static int ad7380_set_oversampling_ratio(struct ad7380_state *st, int val) +{ + int ret, osr, boost; + + osr =3D ad7380_osr_to_regval(val); + if (osr < 0) + return osr; + + /* always enable resolution boost when oversampling is enabled */ + boost =3D osr > 0 ? 1 : 0; + + ret =3D regmap_update_bits(st->regmap, + AD7380_REG_ADDR_CONFIG1, + AD7380_CONFIG1_OSR | AD7380_CONFIG1_RES, + FIELD_PREP(AD7380_CONFIG1_OSR, osr) | + FIELD_PREP(AD7380_CONFIG1_RES, boost)); + + if (ret) + return ret; + + st->oversampling_ratio =3D val; + st->resolution_boost_enabled =3D boost; + + /* + * Perform a soft reset. This will flush the oversampling + * block and FIFO but will maintain the content of the + * configurable registers. + */ + ret =3D regmap_update_bits(st->regmap, + AD7380_REG_ADDR_CONFIG2, + AD7380_CONFIG2_RESET, + FIELD_PREP(AD7380_CONFIG2_RESET, + AD7380_CONFIG2_RESET_SOFT)); + return ret; +} static int ad7380_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { struct ad7380_state *st =3D iio_priv(indio_dev); - int ret, osr, boost; + int ret; =20 switch (mask) { case IIO_CHAN_INFO_OVERSAMPLING_RATIO: - osr =3D ad7380_osr_to_regval(val); - if (osr < 0) - return osr; + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; =20 - /* always enable resolution boost when oversampling is enabled */ - boost =3D osr > 0 ? 1 : 0; + ret =3D ad7380_set_oversampling_ratio(st, val); =20 - iio_device_claim_direct_scoped(return -EBUSY, indio_dev) { - ret =3D regmap_update_bits(st->regmap, - AD7380_REG_ADDR_CONFIG1, - AD7380_CONFIG1_OSR | AD7380_CONFIG1_RES, - FIELD_PREP(AD7380_CONFIG1_OSR, osr) | - FIELD_PREP(AD7380_CONFIG1_RES, boost)); + iio_device_release_direct_mode(indio_dev); =20 - if (ret) - return ret; - - st->oversampling_ratio =3D val; - st->resolution_boost_enabled =3D boost; - - /* - * Perform a soft reset. This will flush the oversampling - * block and FIFO but will maintain the content of the - * configurable registers. - */ - return regmap_update_bits(st->regmap, - AD7380_REG_ADDR_CONFIG2, - AD7380_CONFIG2_RESET, - FIELD_PREP(AD7380_CONFIG2_RESET, - AD7380_CONFIG2_RESET_SOFT)); - } - unreachable(); + return ret; default: return -EINVAL; } --=20 2.47.1 From nobody Mon Feb 9 03:01:58 2026 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (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 776731F9F4C for ; Wed, 8 Jan 2025 12:49:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340588; cv=none; b=m0065ZHiGackJHXqk48jL/ZNtQq43ZbhOjbiA56CO+eTS/84dRO1ZFTzjHbnyX6VZXdYbbvvwEZsOIzzS4vaoSkvby06qWA20wDBqZ1WYcHO1rgddQDK9DG2eu9FO+IqBnTE/TIZ6FkA8U77q7UoBdOWsJcoX974M9uZBNma52E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340588; c=relaxed/simple; bh=JiKbZ9Dc0gtggUQQiZa957Mbp+mx1KjmP3cEz6HLKJw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JXYGxy09PV/IwQpPo6f6YRPvrkatPSJTcgKjx4Pm5/9D0iox8E35lAZIA5Rendjh5I7Mxy7SlCTaT8jjVd7QjZyYTOiIF0FIWC89LSyj0rUlPHLtbGC+SgtESYmzh/RW5L7/wO9G7xsF29GfixiVmZPZn/lMDrZt5vRM1HtK20E= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=V1ji1sbT; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="V1ji1sbT" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-385e0e224cbso8364017f8f.2 for ; Wed, 08 Jan 2025 04:49:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1736340585; x=1736945385; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=gpTEVIUx2zsR6KrubLLJzhSMtP7WWrv/YPCN+rrmWfE=; b=V1ji1sbT7uWp1qrT4j2zGjg6L/9duvaEvyOxzlgOzLcOwi+2Fj0Ydgwt7zFTkbIJ2W 9FtCY4hNFke058XvGBVABecSG0n9EU/oSSO93JK9ZqqMRNm1sgD2DoVLrGWBnZiEN0go Eoi555EqOe8ey5uTmzdNvHI/KxZ0ZFwqp3IdZNoX1go4y/c19+YTsIt65tLK5Fq3DzFj dSsdTu96wscA5USTLlZhSOhCjRvC9Hr1MFuWBiTRsp5uETcqduvgw+RV/lb6rclz1KWT 2F3BFosXZjSs+s5rNzyUqSImLdy0fOYbWZ09JrtBln7+KUvlDC8ZhZsiOO85yV9L/QEh eEcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736340585; x=1736945385; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gpTEVIUx2zsR6KrubLLJzhSMtP7WWrv/YPCN+rrmWfE=; b=v5c/gEGoXE8yds+cVFtTVcuaU8KPZ8kyDlPLmHRC5TuPz5mbI5LPgQmQQE0usQ4K2y HHPXOAtDUMXb0pT5cRuzkoKAJ2qfQ2EvodN5nXXnf4nUJIUYq+qa72prpA9U0TpbOutP gOStltvy8jVTIgrmefYDbjPxiSPytMOeyOxAAEVjkSZuftwKNKa+5jyOiHBAoBq8nWbW 70PEjChtY+6aCu0ihjeOEIyHH/DsNsCZyJIhXVwxY+JpimhWv1Tg4idpZUqGOSuYWao9 DA57HYAIRR4D+y+0/YeG0N1OvkVO+qDXLRe7Jc9Z6VeKFUQn+f9CcqQMMDuFVxJJLnFq VtfA== X-Forwarded-Encrypted: i=1; AJvYcCUmQ8pkfDuVOz+UPdTK4KTiVusjS88qKglAS5dFjJi29vM2JcO31lxFEZb/bxgoqUZgpITun73t/PI9oXU=@vger.kernel.org X-Gm-Message-State: AOJu0Yx9wijrp9vS9dhJN6Pq1ZCwxFvDAT6yz7wQ6760sUwv8kjJCs9p z4eGBtTZ12IF3PmA37Gu4Q9DCTerquIVEAacwaa0KtnWwyWpPyQCtU4zvFR2Zho= X-Gm-Gg: ASbGncv5l/qi2ZdWeYrfK+uKOAk3ep2+BVmKt4pihXja1XzRksPpmn03jJiEp2821h8 QeqyvhLdFQ4nRPvxtcLcKtjoD0GX7zD9H94PcIF51RgmWykp0RFclS3uyVJ7f6drGLOQojxiV5F oO43xkensECM9zybgeQ+tadrhbC+WAyW1YSVNNrbfaD+EqWrsMVQrH0uYTSte69A5c8BBTwvf6u rwr0JSKvajgfDhDEfgafIx3AN5mh99k5Efmr3Si2w5WsxI6a1bkbAI8/h9H6veOmzf4hLFdxrUS kMeDE8LuIbuULfD44odQy1OGAs5+qw+DC36pGIlD7jBUSag+CY/eAA== X-Google-Smtp-Source: AGHT+IHvoSPBsQF/zm7w0rdXalA6GzUY9WExMWrYVqa4uKyDTat1oJdLA0hTNsE97vT1IdC9ulsKTg== X-Received: by 2002:a05:6000:186d:b0:38a:20d9:32e6 with SMTP id ffacd0b85a97d-38a87308c4bmr2326100f8f.45.1736340584729; Wed, 08 Jan 2025 04:49:44 -0800 (PST) Received: from jstephan-bl.local (2a02-842a-d52e-6101-6fd0-06c4-5d68-f0a5.rev.sfr.net. [2a02:842a:d52e:6101:6fd0:6c4:5d68:f0a5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-436e2da63eesm19846805e9.3.2025.01.08.04.49.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jan 2025 04:49:44 -0800 (PST) From: Julien Stephan Date: Wed, 08 Jan 2025 13:49:34 +0100 Subject: [PATCH v4 2/5] iio: adc: ad7380: enable regmap cache 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 Message-Id: <20250108-ad7380-add-alert-support-v4-2-1751802471ba@baylibre.com> References: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> In-Reply-To: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> To: Lars-Peter Clausen , Michael Hennerich , =?utf-8?q?Nuno_S=C3=A1?= , David Lechner , Jonathan Cameron , Jonathan Corbet Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Julien Stephan X-Mailer: b4 0.14.2 Enable regmap cache, to avoid useless access on spi bus. Reviewed-by: David Lechner Signed-off-by: Julien Stephan --- drivers/iio/adc/ad7380.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/iio/adc/ad7380.c b/drivers/iio/adc/ad7380.c index bc7d58850a3e2a84a241d81377e3dc14c43fc101..b97d2978289e92ad502cd6a67de= 43d2b51cdab56 100644 --- a/drivers/iio/adc/ad7380.c +++ b/drivers/iio/adc/ad7380.c @@ -663,6 +663,20 @@ static int ad7380_regmap_reg_read(void *context, unsig= ned int reg, return 0; } =20 +static const struct reg_default ad7380_reg_defaults[] =3D { + { AD7380_REG_ADDR_ALERT_LOW_TH, 0x800 }, + { AD7380_REG_ADDR_ALERT_HIGH_TH, 0x7FF }, +}; + +static const struct regmap_range ad7380_volatile_reg_ranges[] =3D { + regmap_reg_range(AD7380_REG_ADDR_CONFIG2, AD7380_REG_ADDR_ALERT), +}; + +static const struct regmap_access_table ad7380_volatile_regs =3D { + .yes_ranges =3D ad7380_volatile_reg_ranges, + .n_yes_ranges =3D ARRAY_SIZE(ad7380_volatile_reg_ranges), +}; + static const struct regmap_config ad7380_regmap_config =3D { .reg_bits =3D 3, .val_bits =3D 12, @@ -670,6 +684,10 @@ static const struct regmap_config ad7380_regmap_config= =3D { .reg_write =3D ad7380_regmap_reg_write, .max_register =3D AD7380_REG_ADDR_ALERT_HIGH_TH, .can_sleep =3D true, + .reg_defaults =3D ad7380_reg_defaults, + .num_reg_defaults =3D ARRAY_SIZE(ad7380_reg_defaults), + .volatile_table =3D &ad7380_volatile_regs, + .cache_type =3D REGCACHE_MAPLE, }; =20 static int ad7380_debugfs_reg_access(struct iio_dev *indio_dev, u32 reg, --=20 2.47.1 From nobody Mon Feb 9 03:01:58 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 3BDB21F9439 for ; Wed, 8 Jan 2025 12:49:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340589; cv=none; b=Fk+jt6II4nGDe1l61dNMg0x40GUfZQtt5OoI9o4GdsR0TH54fVlwI+DVTITlDoiqODi+ukB4UPfaPjVUUdyDSXpHKMKn1V8bdxEEW5ub8DlyFCWgto4nUB/W2MvHYmFMvfjbmeiuVsV14kw5MaTkxJY3O0J1q/LlpIDYpZviqmI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340589; c=relaxed/simple; bh=t81/yNLGUuGTbNCX3xw1FFNci9RHYp8JgJnWXFdWioA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TTRR7SAqjMY+X4jhbB9Vf6p108TMSvivLAFDfkeZbKHU4B+mn22XBQnjsEphh0oACyfpJ06JKDxCP+TetAp/tRRUHoYvvLbMO300r56F9dOSRIfBbJsqfE7PRaPkB8PrvVPnK+C9H4WqKDDOwf+6Sx/BYM6G8N8bG7BkEkWEla8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=GmJQQgJn; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="GmJQQgJn" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4361f664af5so188670615e9.1 for ; Wed, 08 Jan 2025 04:49:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1736340585; x=1736945385; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=/ILpJ8cyEJ/3U1U5xHGXrfoZNcmFJHQkvJM8+6HPLCw=; b=GmJQQgJnGCOrW6YAvhp6x2ZGHdhVRb30S617ojkTUNRTQf/kau7iEzqPfa1JqA1Vio l5vJFh6g+7p0V++iW106O9LRe10MOugeoP/4NnkM4mNXf3qLN6MOi3abtsY2qNVARWos lj1rC9qIbnP62LnNIKBzppfAnLRhzGB5HNzQtV+q3U3d8upSZsR85kvT9cr8RzZjxFyw 0AGc0+igdHo0ddoR4k623+5dtMYmXrnEKrUHuiHQzIdGxGByhBPXMmNl1WzlvpC+aU1p BJwfOVEuSeitLjMDCaUzV1lL6QQvrRAXD7nbD4LsybrOItsv2kGc3xluzm4zFDsg1hvi m8gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736340585; x=1736945385; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/ILpJ8cyEJ/3U1U5xHGXrfoZNcmFJHQkvJM8+6HPLCw=; b=JWWUBcqlq4HYAjeCySmerEyXTb1S61EkUbZ8t7xJRtisWRLQsBDiFD6e40atUU/+GC AqLY6pCpxXzH5Mthl/+WTr6lEl5bSQlQ7VQxK/hpV/2/mGjJdwbiAywv8X8mumcoNssj A++0hMJGOBsPs5aBI0657KKOy+bxPp9nBqTUUWHb1/duOAtI56haWlrK1J2O5+u4y6YW wVlrGGDJscw/KlB3x+qByAJVhg7aKUDbFXJ/+OjqfGWuSF2O3wbW+l6mhSXkHb0GSoPC r+O7C2yF0hG8GHLyOmmUdfF/Jrf3qGqvUXzCa28C/Rx/iYGCf3SCJvgYmXP63yCui6+l KTTA== X-Forwarded-Encrypted: i=1; AJvYcCWkxDTDDoKCpoo0NGD3vx1K57PGX37brEIMQhFI+l+3EiYBsYV8PFazTFs1ovOxI68HcHJfbUT8SJURpFQ=@vger.kernel.org X-Gm-Message-State: AOJu0YydCIY9CGPDVo3wP3niyZNPA/PxB64bV82EzqW95frqe2RA/Uvm ll3bHpAqXal2+JpgaY2kYlzJ9ZmO6orWXJT5uBovcaMf9QEwTrJ3MC1YUCUjrcmyytG+8sv0uDZ lc1e0EA== X-Gm-Gg: ASbGncslCV/1pX6apMe2qNbP9noYtTh0yMYgAgrmrHMLrMQmgMmDERb17keBsR2bQFg BlEfcFWlVzTUxgZ2KU7oD7xMVr0ac9puanD+Jf4mJeYmSXQBD7wvJf4tuwnWvTj59MSDB1AV9U1 mEu7oj3IlcPp48x9AqhDAnI7xjqn+jCUE6bdFgiihRRMQDKDtUlQODWot/AWpWxXjk+KMkntyeL 8DpSisqlyCGoBN/eIzrMM2rWLZBOxKjTr58Ov81IcZ9sd16tzeFshAWn+lin+a8eJ19NUCxGHkx WKqxzXC4NBrK7xa6SDJkjwRGnO7GrfNzI0xKxgNw/b2/NTejwq3euQ== X-Google-Smtp-Source: AGHT+IEJUKPIsY0/+87opxSoC/qv+r+Aof0lKFXqkysIxkeur2mxHgvy0OB9e0pOpf72jDBsYf4V4A== X-Received: by 2002:a05:600c:138a:b0:434:a781:f5d5 with SMTP id 5b1f17b1804b1-436e271bcb3mr24895925e9.30.1736340585622; Wed, 08 Jan 2025 04:49:45 -0800 (PST) Received: from jstephan-bl.local (2a02-842a-d52e-6101-6fd0-06c4-5d68-f0a5.rev.sfr.net. [2a02:842a:d52e:6101:6fd0:6c4:5d68:f0a5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-436e2da63eesm19846805e9.3.2025.01.08.04.49.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jan 2025 04:49:45 -0800 (PST) From: Julien Stephan Date: Wed, 08 Jan 2025 13:49:35 +0100 Subject: [PATCH v4 3/5] iio: adc: ad7380: do not store osr in private data structure 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 Message-Id: <20250108-ad7380-add-alert-support-v4-3-1751802471ba@baylibre.com> References: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> In-Reply-To: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> To: Lars-Peter Clausen , Michael Hennerich , =?utf-8?q?Nuno_S=C3=A1?= , David Lechner , Jonathan Cameron , Jonathan Corbet Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Julien Stephan X-Mailer: b4 0.14.2 Since regmap cache is now enabled, we don't need to store the oversampling ratio in the private data structure. Reviewed-by: David Lechner Signed-off-by: Julien Stephan --- drivers/iio/adc/ad7380.c | 79 +++++++++++++++++++++++++++++++++++++++-----= ---- 1 file changed, 65 insertions(+), 14 deletions(-) diff --git a/drivers/iio/adc/ad7380.c b/drivers/iio/adc/ad7380.c index b97d2978289e92ad502cd6a67de43d2b51cdab56..a532de4422082df8503454d66fc= 49f75b52cff68 100644 --- a/drivers/iio/adc/ad7380.c +++ b/drivers/iio/adc/ad7380.c @@ -582,7 +582,6 @@ struct ad7380_state { const struct ad7380_chip_info *chip_info; struct spi_device *spi; struct regmap *regmap; - unsigned int oversampling_ratio; bool resolution_boost_enabled; unsigned int ch; bool seq; @@ -710,6 +709,36 @@ static int ad7380_debugfs_reg_access(struct iio_dev *i= ndio_dev, u32 reg, return ret; } =20 +/** + * ad7380_regval_to_osr - convert OSR register value to ratio + * @regval: register value to check + * + * Returns: the ratio corresponding to the OSR register. If regval is not = in + * bound, return 1 (oversampling disabled) + * + */ +static int ad7380_regval_to_osr(unsigned int regval) +{ + if (regval >=3D ARRAY_SIZE(ad7380_oversampling_ratios)) + return 1; + + return ad7380_oversampling_ratios[regval]; +} + +static int ad7380_get_osr(struct ad7380_state *st, int *val) +{ + u32 tmp; + int ret; + + ret =3D regmap_read(st->regmap, AD7380_REG_ADDR_CONFIG1, &tmp); + if (ret) + return ret; + + *val =3D ad7380_regval_to_osr(FIELD_GET(AD7380_CONFIG1_OSR, tmp)); + + return 0; +} + /* * When switching channel, the ADC require an additional settling time. * According to the datasheet, data is value on the third CS low. We alrea= dy @@ -725,11 +754,15 @@ static int ad7380_set_ch(struct ad7380_state *st, uns= igned int ch) .unit =3D SPI_DELAY_UNIT_NSECS, } }; - int ret; + int oversampling_ratio, ret; =20 if (st->ch =3D=3D ch) return 0; =20 + ret =3D ad7380_get_osr(st, &oversampling_ratio); + if (ret) + return ret; + ret =3D regmap_update_bits(st->regmap, AD7380_REG_ADDR_CONFIG1, AD7380_CONFIG1_CH, @@ -740,9 +773,9 @@ static int ad7380_set_ch(struct ad7380_state *st, unsig= ned int ch) =20 st->ch =3D ch; =20 - if (st->oversampling_ratio > 1) + if (oversampling_ratio > 1) xfer.delay.value =3D T_CONVERT_0_NS + - T_CONVERT_X_NS * (st->oversampling_ratio - 1) * + T_CONVERT_X_NS * (oversampling_ratio - 1) * st->chip_info->num_simult_channels / AD7380_NUM_SDO_LINES; =20 return spi_sync_transfer(st->spi, &xfer, 1); @@ -753,20 +786,25 @@ static int ad7380_set_ch(struct ad7380_state *st, uns= igned int ch) * @st: device instance specific state * @scan_type: current scan type */ -static void ad7380_update_xfers(struct ad7380_state *st, +static int ad7380_update_xfers(struct ad7380_state *st, const struct iio_scan_type *scan_type) { struct spi_transfer *xfer =3D st->seq ? st->seq_xfer : st->normal_xfer; unsigned int t_convert =3D T_CONVERT_NS; + int oversampling_ratio, ret; =20 /* * In the case of oversampling, conversion time is higher than in normal * mode. Technically T_CONVERT_X_NS is lower for some chips, but we use * the maximum value for simplicity for now. */ - if (st->oversampling_ratio > 1) + ret =3D ad7380_get_osr(st, &oversampling_ratio); + if (ret) + return ret; + + if (oversampling_ratio > 1) t_convert =3D T_CONVERT_0_NS + T_CONVERT_X_NS * - (st->oversampling_ratio - 1) * + (oversampling_ratio - 1) * st->chip_info->num_simult_channels / AD7380_NUM_SDO_LINES; =20 if (st->seq) { @@ -779,7 +817,7 @@ static void ad7380_update_xfers(struct ad7380_state *st, st->chip_info->num_simult_channels; xfer[3].rx_buf =3D xfer[2].rx_buf + xfer[2].len; /* Additional delay required here when oversampling is enabled */ - if (st->oversampling_ratio > 1) + if (oversampling_ratio > 1) xfer[2].delay.value =3D t_convert; else xfer[2].delay.value =3D 0; @@ -791,6 +829,8 @@ static void ad7380_update_xfers(struct ad7380_state *st, xfer[1].len =3D BITS_TO_BYTES(scan_type->storagebits) * st->chip_info->num_simult_channels; } + + return 0; } =20 static int ad7380_triggered_buffer_preenable(struct iio_dev *indio_dev) @@ -798,6 +838,7 @@ static int ad7380_triggered_buffer_preenable(struct iio= _dev *indio_dev) struct ad7380_state *st =3D iio_priv(indio_dev); const struct iio_scan_type *scan_type; struct spi_message *msg =3D &st->normal_msg; + int ret; =20 /* * Currently, we always read all channels at the same time. The scan_type @@ -809,7 +850,6 @@ static int ad7380_triggered_buffer_preenable(struct iio= _dev *indio_dev) =20 if (st->chip_info->has_mux) { unsigned int index; - int ret; =20 /* * Depending on the requested scan_mask and current state, @@ -840,7 +880,9 @@ static int ad7380_triggered_buffer_preenable(struct iio= _dev *indio_dev) =20 } =20 - ad7380_update_xfers(st, scan_type); + ret =3D ad7380_update_xfers(st, scan_type); + if (ret) + return ret; =20 return spi_optimize_message(st->spi, msg); } @@ -913,7 +955,9 @@ static int ad7380_read_direct(struct ad7380_state *st, = unsigned int scan_index, return ret; } =20 - ad7380_update_xfers(st, scan_type); + ret =3D ad7380_update_xfers(st, scan_type); + if (ret) + return ret; =20 ret =3D spi_sync(st->spi, &st->normal_msg); if (ret < 0) @@ -991,7 +1035,16 @@ static int ad7380_read_raw(struct iio_dev *indio_dev, =20 return IIO_VAL_INT; case IIO_CHAN_INFO_OVERSAMPLING_RATIO: - *val =3D st->oversampling_ratio; + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + ret =3D ad7380_get_osr(st, val); + + iio_device_release_direct_mode(indio_dev); + + if (ret) + return ret; =20 return IIO_VAL_INT; default: @@ -1058,7 +1111,6 @@ static int ad7380_set_oversampling_ratio(struct ad738= 0_state *st, int val) if (ret) return ret; =20 - st->oversampling_ratio =3D val; st->resolution_boost_enabled =3D boost; =20 /* @@ -1134,7 +1186,6 @@ static int ad7380_init(struct ad7380_state *st, bool = external_ref_en) } =20 /* This is the default value after reset. */ - st->oversampling_ratio =3D 1; st->ch =3D 0; st->seq =3D false; =20 --=20 2.47.1 From nobody Mon Feb 9 03:01:58 2026 Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) (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 2A2611FBE89 for ; Wed, 8 Jan 2025 12:49:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340590; cv=none; b=k7WiWPUaeBCNTzLHilHvSUr3lTfETbXIIwTL1N/o7x8eTKrXmBBYpiUW4irp/6Wd2HtSjpJ1jmdeyvcx5ZIsiyc+GiVTucp5NsbfcMA7b951+qI8cN0eocX1uP8LwVWz8GIylbZNCRIDO1EzfxRrGsnQkEfr1560mqrn9JCNG3A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340590; c=relaxed/simple; bh=KA1qdqsZfJYL0paJzWnR8IkBa4kpVbH9E0CtFYIh3OQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JLlhZg35mmVfTwcswEBgIOmDjqFhCvwOeF/UqwcicoiSiAaC8wo8hSrfjWa7+iPeXEGrUm+9Lmq30EOD8MW+DtOg371YKl91YqXe1JJctYMBYmyhlbF380JiSitBxLoa7T4/ovXfgW7ZP97BX9cUYoTRsm68JMe5KOYv3O09a0U= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=YbeNM4CF; arc=none smtp.client-ip=209.85.128.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="YbeNM4CF" Received: by mail-wm1-f66.google.com with SMTP id 5b1f17b1804b1-43623f0c574so115294835e9.2 for ; Wed, 08 Jan 2025 04:49:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1736340586; x=1736945386; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=XJ+zcxHZ3EsxL3ZXdjUwAasoZIJYeKInjwJt+E7P06g=; b=YbeNM4CFTi9mrSf/ppPNfri3rE/gTUGeXka/hDVc56OxXzTGJF7/V03BY+Ir3DS6qd 8Po4Kp3tADiY5C+o6Q0AuhT7riJH2A+PXwStw/QaRe7xUvT9xwZcxnWAlBqALMVKKWVz ONDS8wb8m//F0BE9AU1Uubd5sOqIlFZ967q2thp/NfUcrR9sPptf7Ok3ZWYLwFqk/Qv6 MjLsPYR/Ngqi7Ib3rMNg5R6qHynlHqXvpWlpq4zhXNnNVX7L8lkpXlmMupdFFVTkiPE6 Yw+S6j0ldBk7w8/45iBiQC8UAnJ6NQjBlIXjSEUjFuUZxVAm50p5BRFZRTqwYGIFz0jV ByZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736340586; x=1736945386; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=XJ+zcxHZ3EsxL3ZXdjUwAasoZIJYeKInjwJt+E7P06g=; b=oeu4K0xGLfAwHOzaPZ6lc47MaOFJg0YduKI1WciBl/IleQKNBPnNa6Z1t5PBZ3u3nS J4SPjC7uTF+SCSaFh0Lw2iL5TAi4M0VBRhYJLf5sOBEFaOJwDzrIikwPp1OuvRYVvfSD 7/FsCBszqhffMeifyfAlyOx/85zP5xoPQLy+pvi/5/fB9eMFO38MGAxAmjGIaQFIk3Lv M0HpNm6ec3LbvU8dM76uBZPosi1alqoMu4JejGV54L7eBaX8iSxnhreKIktKlL5NZALP 75twlWN3g0EQNrb7s2VMpxzYV0G8+8GDcSKaQMsZVlgz5XTPw3lYsHP8xb9d9iNTB+eC b0Aw== X-Forwarded-Encrypted: i=1; AJvYcCVTCZmjLWhtpnSJ+uLQagcPchKEZX6LKMNepspUK9d0Vfl/8lX6YCOE77xhG/D3eZ6VqpVgLH+ht+qQJYw=@vger.kernel.org X-Gm-Message-State: AOJu0Yxx19648fmjbRF7YGLFKplaAc37CUf+GtUzMb3k32VsYMcB/+mq mqv+occQKsLU72n9Tl0MlRow/n8QRc18lVpB7MEvm59c3oy9/yXf07WwkFI0DIE= X-Gm-Gg: ASbGncubyRV3Hfzxi3kcqhlzyp+paWXHEO14AxwK5yFGWdg4RISN/4Z4hJdVQ3z44d+ SzoPtgxRffELLve2nQTTdZVOaDLTFWeUTyASvOeauWlIz/4BDe1VohPvuPrTPTFcTHCP63/Qdcg A72qS5+UghcAA6tjIx5SRm90dAbHiHqybyN6okvq14QccY3Ab/fExckNpRO4ffiRNRRuxdXppPN oE/3LI7YeVL1e1SyFuVrtoXe5kKJmfMDD7MOyTXh8nEPAJYAdKsyFDSHTCKx+p2J1juvP/zzEsd TD3fMPedTAAxbOWJP6hC6uqTs0CYOHOAEVacTu1NP1lCGEjLS+dWsA== X-Google-Smtp-Source: AGHT+IGTO0/JVXTiLRNDx/Ud4GZVUE6svyHOPNwrUyxK5M5DnPTxtJnvZiHZd6iqkTFwo2fqQEjgJQ== X-Received: by 2002:a05:6000:18a8:b0:388:c790:1dff with SMTP id ffacd0b85a97d-38a8733fd71mr1798784f8f.47.1736340586500; Wed, 08 Jan 2025 04:49:46 -0800 (PST) Received: from jstephan-bl.local (2a02-842a-d52e-6101-6fd0-06c4-5d68-f0a5.rev.sfr.net. [2a02:842a:d52e:6101:6fd0:6c4:5d68:f0a5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-436e2da63eesm19846805e9.3.2025.01.08.04.49.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jan 2025 04:49:45 -0800 (PST) From: Julien Stephan Date: Wed, 08 Jan 2025 13:49:36 +0100 Subject: [PATCH v4 4/5] iio: adc: ad7380: add alert support 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 Message-Id: <20250108-ad7380-add-alert-support-v4-4-1751802471ba@baylibre.com> References: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> In-Reply-To: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> To: Lars-Peter Clausen , Michael Hennerich , =?utf-8?q?Nuno_S=C3=A1?= , David Lechner , Jonathan Cameron , Jonathan Corbet Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Julien Stephan X-Mailer: b4 0.14.2 The alert functionality is an out of range indicator and can be used as an early indicator of an out of bounds conversion result. ALERT_LOW_THRESHOLD and ALERT_HIGH_THRESHOLD registers are common to all channels. When using 1 SDO line (only mode supported by the driver right now), i.e data outputs only on SDOA, SDOB (or SDOD for 4 channels variants) is used as an alert pin. The alert pin is updated at the end of the conversion (set to low if an alert occurs) and is cleared on a falling edge of CS. The ALERT register contains information about the exact alert status: channel and direction. ALERT register can be accessed using debugfs if enabled. User can set high/low thresholds and enable alert detection using the regular iio events attributes: events/in_thresh_falling_value events/in_thresh_rising_value events/thresh_either_en In most use cases, user will hardwire the alert pin to trigger a shutdown. In theory, we could generate userspace IIO events for alerts, but this is not implemented yet for several reasons [1]. This can be implemented later if a real use case actually requires it. Signed-off-by: Julien Stephan [1] https://lore.kernel.org/all/4be16272-5197-4fa1-918c-c4cdfcaee02e@baylib= re.com/ Reviewed-by: David Lechner --- drivers/iio/adc/ad7380.c | 197 +++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 197 insertions(+) diff --git a/drivers/iio/adc/ad7380.c b/drivers/iio/adc/ad7380.c index a532de4422082df8503454d66fc49f75b52cff68..cedd45556ee38b3197f8dd7edea= 162c3f4ba1563 100644 --- a/drivers/iio/adc/ad7380.c +++ b/drivers/iio/adc/ad7380.c @@ -34,6 +34,7 @@ #include =20 #include +#include #include #include #include @@ -112,6 +113,24 @@ struct ad7380_chip_info { const struct ad7380_timing_specs *timing_specs; }; =20 +static const struct iio_event_spec ad7380_events[] =3D { + { + .type =3D IIO_EV_TYPE_THRESH, + .dir =3D IIO_EV_DIR_RISING, + .mask_shared_by_dir =3D BIT(IIO_EV_INFO_VALUE), + }, + { + .type =3D IIO_EV_TYPE_THRESH, + .dir =3D IIO_EV_DIR_FALLING, + .mask_shared_by_dir =3D BIT(IIO_EV_INFO_VALUE), + }, + { + .type =3D IIO_EV_TYPE_THRESH, + .dir =3D IIO_EV_DIR_EITHER, + .mask_shared_by_all =3D BIT(IIO_EV_INFO_ENABLE), + }, +}; + enum { AD7380_SCAN_TYPE_NORMAL, AD7380_SCAN_TYPE_RESOLUTION_BOOST, @@ -214,6 +233,8 @@ static const struct iio_scan_type ad7380_scan_type_16_u= [] =3D { .has_ext_scan_type =3D 1, \ .ext_scan_type =3D ad7380_scan_type_##bits##_##sign, \ .num_ext_scan_type =3D ARRAY_SIZE(ad7380_scan_type_##bits##_##sign), \ + .event_spec =3D ad7380_events, \ + .num_event_specs =3D ARRAY_SIZE(ad7380_events), \ } =20 #define AD7380_CHANNEL(index, bits, diff, sign) \ @@ -1157,12 +1178,188 @@ static int ad7380_get_current_scan_type(const stru= ct iio_dev *indio_dev, : AD7380_SCAN_TYPE_NORMAL; } =20 +static int ad7380_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 ad7380_state *st =3D iio_priv(indio_dev); + int tmp, ret; + + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + ret =3D regmap_read(st->regmap, AD7380_REG_ADDR_CONFIG1, &tmp); + + iio_device_release_direct_mode(indio_dev); + + if (ret) + return ret; + + return FIELD_GET(AD7380_CONFIG1_ALERTEN, tmp); +} + +static int ad7380_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 ad7380_state *st =3D iio_priv(indio_dev); + int ret; + + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + ret =3D regmap_update_bits(st->regmap, + AD7380_REG_ADDR_CONFIG1, + AD7380_CONFIG1_ALERTEN, + FIELD_PREP(AD7380_CONFIG1_ALERTEN, state)); + + iio_device_release_direct_mode(indio_dev); + + return ret; +} + +static int ad7380_get_alert_th(struct ad7380_state *st, + enum iio_event_direction dir, + int *val) +{ + int ret, tmp; + + switch (dir) { + case IIO_EV_DIR_RISING: + ret =3D regmap_read(st->regmap, + AD7380_REG_ADDR_ALERT_HIGH_TH, + &tmp); + if (ret) + return ret; + + *val =3D FIELD_GET(AD7380_ALERT_HIGH_TH, tmp); + ret =3D IIO_VAL_INT; + break; + case IIO_EV_DIR_FALLING: + ret =3D regmap_read(st->regmap, + AD7380_REG_ADDR_ALERT_LOW_TH, + &tmp); + if (ret) + return ret; + + *val =3D FIELD_GET(AD7380_ALERT_LOW_TH, tmp); + ret =3D IIO_VAL_INT; + break; + default: + ret =3D -EINVAL; + break; + } + + return ret; +} + +static int ad7380_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 ad7380_state *st =3D iio_priv(indio_dev); + int ret; + + switch (info) { + case IIO_EV_INFO_VALUE: + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + ret =3D ad7380_get_alert_th(st, dir, val); + + iio_device_release_direct_mode(indio_dev); + return ret; + default: + return -EINVAL; + } +} + +static int ad7380_set_alert_th(struct iio_dev *indio_dev, + const struct iio_chan_spec *chan, + enum iio_event_direction dir, + int val) +{ + struct ad7380_state *st =3D iio_priv(indio_dev); + const struct iio_scan_type *scan_type; + u16 th; + + /* + * According to the datasheet, + * AD7380_REG_ADDR_ALERT_HIGH_TH[11:0] are the 12 MSB of the + * 16-bits internal alert high register. LSB are set to 0xf. + * AD7380_REG_ADDR_ALERT_LOW_TH[11:0] are the 12 MSB of the + * 16 bits internal alert low register. LSB are set to 0x0. + * + * When alert is enabled the conversion from the adc is compared + * immediately to the alert high/low thresholds, before any + * oversampling. This means that the thresholds are the same for + * normal mode and oversampling mode. + */ + + /* Extract the 12 MSB of val */ + scan_type =3D iio_get_current_scan_type(indio_dev, chan); + if (IS_ERR(scan_type)) + return PTR_ERR(scan_type); + + th =3D val >> (scan_type->realbits - 12); + + switch (dir) { + case IIO_EV_DIR_RISING: + return regmap_write(st->regmap, + AD7380_REG_ADDR_ALERT_HIGH_TH, + th); + case IIO_EV_DIR_FALLING: + return regmap_write(st->regmap, + AD7380_REG_ADDR_ALERT_LOW_TH, + th); + default: + return -EINVAL; + } +} + +static int ad7380_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) +{ + int ret; + + switch (info) { + case IIO_EV_INFO_VALUE: + ret =3D iio_device_claim_direct_mode(indio_dev); + if (ret) + return ret; + + ret =3D ad7380_set_alert_th(indio_dev, chan, dir, val); + + iio_device_release_direct_mode(indio_dev); + return ret; + default: + return -EINVAL; + } +} + static const struct iio_info ad7380_info =3D { .read_raw =3D &ad7380_read_raw, .read_avail =3D &ad7380_read_avail, .write_raw =3D &ad7380_write_raw, .get_current_scan_type =3D &ad7380_get_current_scan_type, .debugfs_reg_access =3D &ad7380_debugfs_reg_access, + .read_event_config =3D &ad7380_read_event_config, + .write_event_config =3D &ad7380_write_event_config, + .read_event_value =3D &ad7380_read_event_value, + .write_event_value =3D &ad7380_write_event_value, }; =20 static int ad7380_init(struct ad7380_state *st, bool external_ref_en) --=20 2.47.1 From nobody Mon Feb 9 03:01:58 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.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 823081FC104 for ; Wed, 8 Jan 2025 12:49:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340591; cv=none; b=mEJY8gDzmejn1f9JKfPa5tn1CQu8AAmt2mYRzHNLsHYm8XbPZJ/d7+PZU2dn5frON3R6N6VWGA6mJw7xqiMi0ojnrNiPM9ZCxFmkkdZJXXd/VtYoJ8tR9F1dK6cstFoq+ZkovT1l0oXZXb/YOsa9yGX4Bagf9mtpdl+kJDKDy30= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1736340591; c=relaxed/simple; bh=q+2FfWgXL3it8kWQJY1v1IawdOYfJSEhFMz5RY7Ava8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eS/lCBmZWrlJosMbyk4tm2AGmRwLvyjJyzYw+V3tuNngRwfe9dqUQKKTUDynrkC68jS7bn+Per9uk81FnHVlKC4m579kG+eWr31xzV3a/y1qQpV/ggJiHn/tb2JtFSUKpkDcoI+zISHWPP7EASjnlcG5ostmJ9/wMUC3sKlkR2M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b=gAz2UKPW; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="gAz2UKPW" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-436ce2ab251so34016855e9.1 for ; Wed, 08 Jan 2025 04:49:49 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1736340588; x=1736945388; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=SOhT2Lsro+qOOV89/XsqYrLbTVo9ZQM0Bb0vXMREq/0=; b=gAz2UKPWVK1D3YRfbhMliHNZ5x9UTT6Nd7u5kzIeL3oR8o9yEVN1glofgVQp11OkEH L8RvB+gOk8besqIKSIsqYdbShTD4Lwrgaz97YDXt5rW9vU/kco9WClkuLh9eth3j88Et A9xq9fO6rBhZ+sgiPkeji/+oTuQHYmRMTgb45yxHjKgzzhDtTrLS9zmt2lks6b3BuVrL PCg0F0g5JfWdyqDFQEqBKEBlF6Y+XpU7oH4GuSPPr4e98b7f5P5OQdH8+iOAYrWLYIbJ SGHfqJi51iP28VLY2/Koc/jirFHTG/FNbfGFkzginsd7neQr3rU18KIHCA7K29ufBxvL pjiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1736340588; x=1736945388; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=SOhT2Lsro+qOOV89/XsqYrLbTVo9ZQM0Bb0vXMREq/0=; b=fxb7j/pwFpQFBlMpPlyY5njBh7DRqb9/pSBoUcjWvw2h1nSi2M79L3DVy3Bfst0URc HN+S/2ZEzFOxyQDL7gkfmGUo2Pa+br0mgT5zdI8Ppk5HeDZLTFX5dIWAMaUzisrpAAZV u0c03lrAJRTOKANzu2cfhmGdiDpyNgN9hipMeMqHUAI/Jz7Es8FZeWyabVzDKaYEJYsm uc8JZiK7XvQYjX4ywstXlM6mXMbnxp+B/3ZF4Wou6fg2xiNILexkS0FllOnEbuPHT20S wOF0+qmCNUDUNMetOIcw3phz2PkewHJTFIS2SppxhbC4lx0+WwQdoOPDDcKc1P305So2 cgMw== X-Forwarded-Encrypted: i=1; AJvYcCVWx/2UumHok7lokUeskRoBiPeVoHvOiIErcpwUh8yLdtPqTyakHOzEExUghanxSJliISqJ7rc2ZQC4ZX0=@vger.kernel.org X-Gm-Message-State: AOJu0YxETPFnnQ/NBZ3F/ZMsaEJU7gpoCB10SUx9JqOqNzGLCtMGuX0w a9DtGyYSxtsK7go/gRr12mpkxLAVarHGNiOc+5yMa2G9tjYl2TeE088iMSUru7I= X-Gm-Gg: ASbGncskUOjZGAp1jTktfzWiIdgRMdOGXoKw0nkF9N9L9UwHXieTxPJJThK4sNFeSS5 ZsZfIMkvSitp/ymgEv2Lzz1gs3NhPf5EeS+PLYQE4nXJ2GngFqVck/un8QoI+cM3/BfeNvxAf5C jmGnwyvxI9J8MCHtsCF6ukPgUTN85mZ44P+J2UQxuZ+Q9irHAxab9hsjVAXfLbHZ/ZSXCAyj70d UpWrBr8XYcoTcuudcrdGP23DMs4nUzHBSln+Frq2RYDtJvvD9dIxOQIs0Uhg/zdEbiMpZQHMYBs a2QOF0khbvZxoujBe/xyCTBGHjJLQRX19P/Jao8hiZpzG5RHcXjSRw== X-Google-Smtp-Source: AGHT+IE+QhuDpA8YR57JeyH4IaaPw2brfo9vS5Y7y3nd1ge9+lmd1OqCzvYZWaMA8uj10HLFCeuIHQ== X-Received: by 2002:a05:600c:1c98:b0:436:1b7a:c0b4 with SMTP id 5b1f17b1804b1-436e2677c65mr20409605e9.1.1736340587726; Wed, 08 Jan 2025 04:49:47 -0800 (PST) Received: from jstephan-bl.local (2a02-842a-d52e-6101-6fd0-06c4-5d68-f0a5.rev.sfr.net. [2a02:842a:d52e:6101:6fd0:6c4:5d68:f0a5]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-436e2da63eesm19846805e9.3.2025.01.08.04.49.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 08 Jan 2025 04:49:46 -0800 (PST) From: Julien Stephan Date: Wed, 08 Jan 2025 13:49:37 +0100 Subject: [PATCH v4 5/5] docs: iio: ad7380: add alert support 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 Message-Id: <20250108-ad7380-add-alert-support-v4-5-1751802471ba@baylibre.com> References: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> In-Reply-To: <20250108-ad7380-add-alert-support-v4-0-1751802471ba@baylibre.com> To: Lars-Peter Clausen , Michael Hennerich , =?utf-8?q?Nuno_S=C3=A1?= , David Lechner , Jonathan Cameron , Jonathan Corbet Cc: linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, Julien Stephan X-Mailer: b4 0.14.2 Add a section for alert support, explaining how user can use iio events attributes to enable alert and set thresholds. Reviewed-by: David Lechner Signed-off-by: Julien Stephan --- Documentation/iio/ad7380.rst | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/Documentation/iio/ad7380.rst b/Documentation/iio/ad7380.rst index c46127700e14ca9ec3cac0bd5776b6702f2659e2..cff688bcc2d9601a9faf42d5e9c= 217486639ca66 100644 --- a/Documentation/iio/ad7380.rst +++ b/Documentation/iio/ad7380.rst @@ -92,6 +92,38 @@ must restart iiod using the following command: =20 root:~# systemctl restart iiod =20 +Alert +----- + +2 channels variants of the ad738x family, can use the SDOB line as an aler= t pin +when configured in 1 SDO line mode. 4 channels variants, can use SDOD as an +alert pin when configured in 1 or 2 SDO line(s) mode, although only 1 SDO = line +mode is currently supported by the driver (see `SPI wiring modes`_). + +At the end of a conversion the active-low alert pin gets asserted if the +conversion result exceeds the alert high limit or falls below the alert low +limit. It is cleared, on a falling edge of CS. The alert pin is common to = all +channels. + +User can enable alert using the regular iio events attribute: + +.. code-block:: bash + + events/thresh_either_en + +The high and low thresholds are common to all channels and can also be set= using +regular iio events attributes: + +.. code-block:: bash + + events/in_thresh_falling_value + events/in_thresh_rising_value + +If debugfs is available, user can read the ALERT register to determine the +faulty channel and direction. + +In most use cases, user will hardwire the alert pin to trigger a shutdown. + Channel selection and sequencer (single-end chips only) ------------------------------------------------------- =20 @@ -144,7 +176,6 @@ Unimplemented features - Rolling average oversampling - Power down mode - CRC indication -- Alert =20 =20 Device buffers --=20 2.47.1