From nobody Fri Jun 12 20:18:30 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.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 AD9F53A6EFA for ; Tue, 12 May 2026 22:32:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625143; cv=none; b=leYvvXMlMk9rjGlSTBAxJga4NMAQe26lH1DtXarQk4HtCE8AYl5JULTXoQ1pi5nt/OFTffffCCxb9q4Zxz3E/WclFfFDC/dLpj2WDzPQS9GuqviPlJ8pXEqOuVtgfPpmJQHyjIK79F1Qo/VV273qCXveDVgelfE+YG4t/l3SlUk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625143; c=relaxed/simple; bh=ND2HtCTQC52eoNszzlf2ntg7RmeZZ7jwrn6D3EdhVS8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tSXkZQnP3k6XEB8tccMbPjiyfzA+6TieOLWlJ0NFLTYtYwEv0HuGc0jDdZcD0MDZzpwtnhqOdxF5SvKrWTGtAuxxlh9jYvnlRFfo3FNWAtIdFWC1fUhbnkB8HUOEpDHhhevKN1nXVvCJ0URrVwe2NlIOLXMb2gsUVoeCJ9jwDmM= 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=XefkX2el; arc=none smtp.client-ip=209.85.128.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="XefkX2el" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-488ab2db91aso65688395e9.3 for ; Tue, 12 May 2026 15:32:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778625139; x=1779229939; 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=t6/kdt7V8DIKCNh3YMA+Wq12M5OeKEn3QJo7BlhEzSU=; b=XefkX2elF3XE0P/3ZHHuM2wwbbkrDITHcRRbJqwdNBb3dtDUkWY+IhETn1J6Vmd10M E1Z/V2HfvdXyguuDko3rMyUSQ3Fstf7ja36vWQNtggWHOV2SlcJ+zrQX4MoDLZ+2IPfI qO9eOpTWZtibZnRHPPYf3ocN6TF5v1KkuQeD9cL0XWHf97721Aho/FMOBJu/4uCwyD48 NYH0AwCgBHcPUEaMcBy4o3sVSXltVK6+0tBdGgKK88JfDPP9maAHqG++xWt7SGffC+Bw qhgurib6GMucBH+eXQtJISpXVPOex/egfzpZN1jB2TOvcgj5W0GdIkLetp4zpACHGH2x VkXQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778625139; x=1779229939; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=t6/kdt7V8DIKCNh3YMA+Wq12M5OeKEn3QJo7BlhEzSU=; b=VU6E9DauFTUfUtIY0ogoCt+Lp1MjzooqClxQHVtvkXyCpmmOuMTb31ThuqqxhSA4y5 xdj7truo1bC+z8nyP1CBg4qlKi9pz2Hch4UOThWse3Ivz6OBT8zIQuh1g0xgKH8vKy62 WKSS3o5qQGjX4HFURN7kg8AMttfmnWYsmDRHy8KFi+34FFS3pt1w5BSI8ngiXZ85fOB2 LOWCvO637ejteWPRc/8epOnpvLDEHC370FfK8Hei43DlvOf7P+8nGoLA18TOXXVfG8Z1 GBYsEeXNx8akqX26Tzkr28HoFUnZTIIQwWOyAn4PLHEZ0YYdogc8WD3QeeNBhB+oPJKt OsXQ== X-Forwarded-Encrypted: i=1; AFNElJ8yry9jqfLo4thp6LIMdL6NgbzqYkBawY+M1wpN9hjqx6RjyLvx6SrFH1Zt5jhZOhDSFDeiGMKB99nqij4=@vger.kernel.org X-Gm-Message-State: AOJu0Yzyv5HbLS2PKGFmlBLmSH88HxZ5ISFVPaqcGa/zcLkOuECOUYr8 FG9g3VRSh9eNRsQz6Q6bOlEF4iGlV3VFN5jOO7R43zSDGv+Z2H3MTSuC X-Gm-Gg: Acq92OFMOqbZh2LWtXV7gtmgRREA2D3/l5E4enJGeSQhv2qv2KO4Z+yX+W98QUc+hsM L59n6WU/5R8CDPCdZ+JgrNA2dMzwp4rqCSK4HqSV9LEROL2FZ8JRuSjDM3aKcbDCQmSEZI9OoW1 BQVVK30GiG0Ra5vbO0tEc559z4qzLhhfWWUU+CZLusX+XE84kkhmjfCgBis1FlVDHAZz0PO2omR Yu/1vDV/o12RyHUdpN9Atr3l4aXftGo3gAgcgzJFSfyhiFPgFSzu4lHSQx+0f1K0FQtgIQaaRVp 1IphhjsDUYsM2mWVa6xYaIecGA7ALEwga5lepxz0FgKu7PV2FAgrwhDB8G15bIEdTVurW2Av5XR pUUaFsS98huLJB4aD4BB3xBSlcl499SqALBMZNwyJdsyLJwi7v9oM+cqnzNKhq+x53gPARCwcVV mBYqx/MlSoB2jZzDBplPHdEH3QijGQIe+X1/XTWNDkWZ3WoES0zJcUdGM= X-Received: by 2002:a05:600c:1f90:b0:48f:81ea:ebbb with SMTP id 5b1f17b1804b1-48fce99dc1cmr929805e9.6.1778625138873; Tue, 12 May 2026 15:32:18 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([2a01:e11:5402:d840:f1ee:c5d:74e4:6e19]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e8f3c65f2sm47377375e9.1.2026.05.12.15.32.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 15:32:18 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v2 1/5] iio: light: tcs3472: sort headers alphabetically Date: Wed, 13 May 2026 00:32:11 +0200 Message-ID: <20260512223215.25596-2-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260512223215.25596-1-aldocontelk@gmail.com> References: <20260512223215.25596-1-aldocontelk@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" Sort the #include directives in alphabetical order in preparation for adding new headers in upcoming patches. No functional change. Suggested-by: Andy Shevchenko Signed-off-by: Aldo Conte Reviewed-by: Joshua Crofts --- drivers/iio/light/tcs3472.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 12429a3261b3..9b0f64cd9c50 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -13,16 +13,16 @@ * TODO: wait time */ =20 -#include -#include #include +#include +#include #include =20 +#include +#include #include #include -#include #include -#include #include =20 #define TCS3472_DRV_NAME "tcs3472" --=20 2.54.0 From nobody Fri Jun 12 20:18:30 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 2EAA03A75A6 for ; Tue, 12 May 2026 22:32:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625143; cv=none; b=m8a4g1Kqa/lPuSuYQE1DJ92iX1K61qBHjm6/Q6qzgcJ8dSMGqk/w8HeB5EwBkSRB6mxwnrR6FqkDwyvniuOvLK3dlQjrH27S5VVtVkrDvexbSGW7JrZvG87G32oIsoCojQqoFlQrLdbAevD2x3moENl1jPmaU6/ksHqJH0OkvDU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625143; c=relaxed/simple; bh=DNK7inRudWsaUqBHPSR45m/wvD/5KEr6IJFBUid8Gko=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tJzAva8WV4F53TGT5ijS4HL226p4t/Uo/L4hsGo9nXAU2CgV5K5C0Z68yYYUtDlZWbbIbZlev5jQUG7Ywu54DWE+S9xhG8LHn3HP9Q0W4YE1r564ur+IVoxHAYRZ+ZB6Jq3Wqi4qY61lvxIuVfiKMf9/542iZmQ46cjUjaag1Yc= 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=p73LGHaj; arc=none smtp.client-ip=209.85.128.52 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="p73LGHaj" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-488ab2db91aso65688535e9.3 for ; Tue, 12 May 2026 15:32:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778625140; x=1779229940; 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=ETFxcyR7YLkUpkcr49E9UXvV2AmU/9yjySW5RDZ5mvo=; b=p73LGHajkupR4I9a0pThFvtyUNijLsFM7EzLu/+M7U3CCiBROw4zXzRL86HShIcO+Y tJhu5EXgDygyceYwiMTMGzi+xUKtRMitZXkzBWkgZwfPjXmTjc0qBEGK4Yz+OcnY2/Ll svjyviE/zXchPxmoMxe1S2H/zKO0ZSqRYp6qPZ03EE420VXKjsPwukJ/Wjk4Q9fIPn16 M3WW3IiTOXawOFByKMCcjSLViBHSxMq4wabK5Zn/o09FhUoAdh60sDRLV0BhkBm2KNQY puBnP7txNiijTpkK2CtQj2KMVQAznb5A1N07L2h+pLXT6wk/334Pge1SdvQdix1314KP jydQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778625140; x=1779229940; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ETFxcyR7YLkUpkcr49E9UXvV2AmU/9yjySW5RDZ5mvo=; b=cRULrXIGeK0wTzbFYQD26uqDCcahNdCjpNdktevoUVB1g4Kum6bFg2v0Xisyqrp/kf lOeZeTSP1z8HNU6Ud3ntJ4GdeHCkspyA4G/mJ+lVq5UhCUbEcWWyZLonzy2FvqbQ8ug+ 043VPlHs/gvLgz8MA2K2aZhWcJmpSmnGfhM1l7I1j1YvhupmvrIL9Zn5WGznVH/zPWkZ 4iHgfr94xRmtvHUPm9O/2sQAKALHGryVZDFVamFddWCTVmdi3s2z9c0VMULz224m3Whb hqlpivpLu4+XkbXGg0HNzHD7jfzJrWyhERYIZIIjy69yab0U1UxYWOP9LEmVD51RQujG iXJA== X-Forwarded-Encrypted: i=1; AFNElJ+UVQ8UrTUQEASzROsqoxPj4j2OSGvpzUqcEqRr/pHZWQ2UnfY3SxFiCPz9wlmaWcp5MS9G1BM/JkhnGiA=@vger.kernel.org X-Gm-Message-State: AOJu0Yx52qFBLa4gqoIxfeWOBX7Jvo/vT8K9S/arZHzAHuay0K9lV1KI Jqkg2aO2mpI99ugyw0cuI50OfnHBTSWvrjUNW6QZy2o048Z1DjB90XwH X-Gm-Gg: Acq92OFU3KvNhH1WVdJCj0TqLF9MTB+xJct9g5TbQgZDirCDvZ5rjrwCCz9g2h3nCWS As1XGRfkByo9yYdMCulClen3mlnGl+hGPrEUf1nYZwT5Ul+lXy7ONnp4BgL/f8Oke9DoMEXWU8F nLT/dGm5ujPc4WD/MpmXATzgwIkrLFEu5DfYlKzUMumCO1Um7mRqNDMb+p7QB3qFfZ8f4kD21ot Xn0Rm/AoGRnigr67ASnok0qp7yOyKWxfoctISye7CCSfh5zVCti66FGKdvsvck3b7cQ+8KTdywf n1WQpdLdOCpPP0CuOhQ1ZS2zx20Pg5g6BsWHqiHoAFVG5NbqYiDYvygxJNxAGrjpLsLtL6XNt9Q +q8pMJ9tcr30+v3yJ9nCfOrBiMmVrEL6rjPKN3n341k/Pv315xnuF6rK1gn/QzCf8b7Ci2OfV4X GxsyncA7pfOHmWAknmtZluByROD5BE4KgS5Lk1Z5WKXvcL/rsw8YI9IW8= X-Received: by 2002:a05:600c:154a:b0:48d:1a94:56c with SMTP id 5b1f17b1804b1-48fce9da5e0mr508025e9.18.1778625140226; Tue, 12 May 2026 15:32:20 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([2a01:e11:5402:d840:f1ee:c5d:74e4:6e19]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e8f3c65f2sm47377375e9.1.2026.05.12.15.32.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 15:32:19 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v2 2/5] iio: light: tcs3472: convert remaining locking to guard(mutex) Date: Wed, 13 May 2026 00:32:12 +0200 Message-ID: <20260512223215.25596-3-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260512223215.25596-1-aldocontelk@gmail.com> References: <20260512223215.25596-1-aldocontelk@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" Convert the locking in tcs3472_read_event(), tcs3472_write_event(), tcs3472_read_event_config(), tcs3472_write_event_config(), tcs3472_powerdown() and tcs3472_resume() to use guard(mutex) instead of explicit mutex_lock()/mutex_unlock() pairs. This avoids manual unlock calls on each return path, drops the goto in tcs3472_write_event(), and removes 'ret' variables only needed to return after the unlock. No functional change. Suggested-by: Andy Shevchenko Signed-off-by: Aldo Conte --- v2: (Suggested by Andy) - Moved earlier in the series to avoid introducing manual locking in the de= vm patch that would then be converted here. - Dropped "found by code inspection" (this is a cleanup, not a bug) - Test details moved to cover letter drivers/iio/light/tcs3472.c | 59 +++++++++++++------------------------ 1 file changed, 21 insertions(+), 38 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 9b0f64cd9c50..4fd4fd74d0d6 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -13,6 +13,7 @@ * TODO: wait time */ =20 +#include #include #include #include @@ -220,32 +221,24 @@ static int tcs3472_read_event(struct iio_dev *indio_d= ev, int *val2) { struct tcs3472_data *data =3D iio_priv(indio_dev); - int ret; unsigned int period; =20 - mutex_lock(&data->lock); + guard(mutex)(&data->lock); =20 switch (info) { case IIO_EV_INFO_VALUE: *val =3D (dir =3D=3D IIO_EV_DIR_RISING) ? data->high_thresh : data->low_thresh; - ret =3D IIO_VAL_INT; - break; + return IIO_VAL_INT; case IIO_EV_INFO_PERIOD: period =3D (256 - data->atime) * 2400 * tcs3472_intr_pers[data->apers]; *val =3D period / USEC_PER_SEC; *val2 =3D period % USEC_PER_SEC; - ret =3D IIO_VAL_INT_PLUS_MICRO; - break; + return IIO_VAL_INT_PLUS_MICRO; default: - ret =3D -EINVAL; - break; + return -EINVAL; } - - mutex_unlock(&data->lock); - - return ret; } =20 static int tcs3472_write_event(struct iio_dev *indio_dev, @@ -259,7 +252,8 @@ static int tcs3472_write_event(struct iio_dev *indio_de= v, int period; int i; =20 - mutex_lock(&data->lock); + guard(mutex)(&data->lock); + switch (info) { case IIO_EV_INFO_VALUE: switch (dir) { @@ -270,18 +264,18 @@ static int tcs3472_write_event(struct iio_dev *indio_= dev, command =3D TCS3472_AILT; break; default: - ret =3D -EINVAL; - goto error; + return -EINVAL; } ret =3D i2c_smbus_write_word_data(data->client, command, val); if (ret) - goto error; + return ret; =20 if (dir =3D=3D IIO_EV_DIR_RISING) data->high_thresh =3D val; else data->low_thresh =3D val; - break; + + return 0; case IIO_EV_INFO_PERIOD: period =3D val * USEC_PER_SEC + val2; for (i =3D 1; i < ARRAY_SIZE(tcs3472_intr_pers) - 1; i++) { @@ -291,18 +285,14 @@ static int tcs3472_write_event(struct iio_dev *indio_= dev, } ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_PERS, i); if (ret) - goto error; + return ret; =20 data->apers =3D i; - break; + + return 0; default: - ret =3D -EINVAL; - break; + return -EINVAL; } -error: - mutex_unlock(&data->lock); - - return ret; } =20 static int tcs3472_read_event_config(struct iio_dev *indio_dev, @@ -310,13 +300,10 @@ static int tcs3472_read_event_config(struct iio_dev *= indio_dev, enum iio_event_direction dir) { struct tcs3472_data *data =3D iio_priv(indio_dev); - int ret; =20 - mutex_lock(&data->lock); - ret =3D !!(data->enable & TCS3472_ENABLE_AIEN); - mutex_unlock(&data->lock); + guard(mutex)(&data->lock); =20 - return ret; + return !!(data->enable & TCS3472_ENABLE_AIEN); } =20 static int tcs3472_write_event_config(struct iio_dev *indio_dev, @@ -327,7 +314,7 @@ static int tcs3472_write_event_config(struct iio_dev *i= ndio_dev, int ret =3D 0; u8 enable_old; =20 - mutex_lock(&data->lock); + guard(mutex)(&data->lock); =20 enable_old =3D data->enable; =20 @@ -342,7 +329,6 @@ static int tcs3472_write_event_config(struct iio_dev *i= ndio_dev, if (ret) data->enable =3D enable_old; } - mutex_unlock(&data->lock); =20 return ret; } @@ -379,6 +365,7 @@ static irqreturn_t tcs3472_trigger_handler(int irq, voi= d *p) } scan =3D { }; =20 int ret =3D tcs3472_req_data(data); + if (ret < 0) goto done; =20 @@ -544,15 +531,13 @@ static int tcs3472_powerdown(struct tcs3472_data *dat= a) int ret; u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; =20 - mutex_lock(&data->lock); + guard(mutex)(&data->lock); =20 ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, data->enable & ~enable_mask); if (!ret) data->enable &=3D ~enable_mask; =20 - mutex_unlock(&data->lock); - return ret; } =20 @@ -581,15 +566,13 @@ static int tcs3472_resume(struct device *dev) int ret; u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; =20 - mutex_lock(&data->lock); + guard(mutex)(&data->lock); =20 ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, data->enable | enable_mask); if (!ret) data->enable |=3D enable_mask; =20 - mutex_unlock(&data->lock); - return ret; } =20 --=20 2.54.0 From nobody Fri Jun 12 20:18:30 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.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 92C9F3A783D for ; Tue, 12 May 2026 22:32:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625144; cv=none; b=J8CAZNWFRE/VhfP+kwbfM9qmEssVKksJkl95/U6FuOxkhFXoGsMWZliqejN9Yl/UFuHmV0CRzEiPBieOXnBNm/KeyoCBSdMiXJ5bjWzF4+Z9JeE42NGKQX0Xo9k0WxMpXWqAK80BxuxJJBkfqMw5Y44OfNYr+PoxMtZpELF8CP4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625144; c=relaxed/simple; bh=OxzII+fOTTxXBAPQvr40pTgzrSo9pzEfYKV4fx4Ik4o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tBCOC6Hw2OGk1PhkD/CII/Dg+B7myBioGzTXz/ODjWxJIDgDFlOKvhSHHmZWSjdzQDczFgOrCHZt9njB9R8C0q5hiut0Uhksh/62HW2Rzm+IrARfRZNlra2aPEUchVktR+M9nEkm7iH0OFrFdqsvLDJgi7razQYMH/nDMnoKJ0c= 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=bVEFdP7+; arc=none smtp.client-ip=209.85.128.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="bVEFdP7+" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-488a88aeec9so67769195e9.2 for ; Tue, 12 May 2026 15:32:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778625141; x=1779229941; 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=EZwtfBXvrnH+M3GRfA8qi3bYkua4D8Thb1Hd5ff45dQ=; b=bVEFdP7+9TUQ/PBNM+c4sRcR1SqNweYViJsIrhjZR46CigirUo1vhhy+XzL6K3fGSB 4Rk61YcwbY9w7Hb0bUXygm4NWGTxGo9FrZ2Pbuv1cxJZOF8BqMZnOBRPTzGiRHNKCoRe oFt3qFimyQG6F9wv6gR5aA7Y+HiSB0vkJE6KPG/OvWmL11iQ/heUpynYI26lqgviIoY4 vCyIJacoh6kQB/jrT09EP4Ewr2xz0j5AFoajtTAgsl2zT8mApJ9gU6BNk38zrZE+SYFK ZN7NrHy1KxkANXSIySG6G0LB//yew29QG5N+h2iaJPOibtYYyy80sUlsaPcrwS9A7niA mDMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778625141; x=1779229941; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=EZwtfBXvrnH+M3GRfA8qi3bYkua4D8Thb1Hd5ff45dQ=; b=EambztDdrFpIo3LhSW9Fg721cYikGkrf5flNEi4pzW3NsooeAKpkmOwPfXWpAk2pkt kL3zs6e7IyjAzLf19BixPwAowyEi/jqSnysrmNMbzKLiSL7eDLER9w0KYESQH3MP7f63 aubIvegYtzGC1LqmrsnPcfg6C3iYfU/PiX+LmQ5floNAKfmjMCzzeurPR5eK1uZ82Q+U vWpkdpKlNaB65CAyWWuUysmhkhAty/7YeUu1gusC/rXijhVKxz+MeVjmvtarRp1eT7kK 7ExtKA9FffSekadKie+pGMoVRFEKb6NgzYvJPgyWGkAap/N67YBNFyHTjA1tr/nhkEuI Mxmw== X-Forwarded-Encrypted: i=1; AFNElJ+3+BkgCnql4V9flFwu45x13Kqzz1Udl9W/gTKRXGSpA8NX9NKljF++G09Cdut+DREvlPl+S5OqQqYFRkQ=@vger.kernel.org X-Gm-Message-State: AOJu0Yyi0zIzjzsZt9Tq/2T8D8fJy9zUgcC4Te1uPaa5dtB0lhIYaNl2 Q95WrmUHIjuqw3I6AyzWJJWcw4rrH6IGo1KNatZT8iyHRnbmLk0l6kSO X-Gm-Gg: Acq92OEwV9uHoBAaPvATsBOujepZNpvpmLa7d2cqo0iTP2JDRZuCIQLtxZqzNr125Tb lQ3DKN9N07rVzhBuPHqHniovt2KIEZtiFNkS2KA3Noe4JgWyZ1lgt5iYyw1UsGX3/oStG9S681D 7vwWFl9K6yo2jEluMVkoaTTfZmhbwBd7ta+6YTh6vraIxkZ8GYZaJ+T+knOe/0gZ/Llp7da9mL2 rmONr24spAicRcm9PLkAzGMCW32iPVCGWK2gjh7Rr2ufDdwSpRX1xirsPdw4lZ/EwVidkZOGYqL 14WJ/5Gag1dl3yB6CV3ZTuT2GM7OXJHQSWkfiosIy5UbzktIUvFs4PHljf05V/JBknDiRq9cZgU ciMCVsvSHNneh8Lg1Z2ebp2D3+g3ul/CtOS8pWKmJjrLSzev5jxE1VJOh/YpVciClegnI4lOhax OhDeorWSnxZdrXuhjufRgBMiOX77+iSjCDJ+8siqzAVgIa32IkByuzoIg= X-Received: by 2002:a05:600c:8b75:b0:488:7ff6:1f75 with SMTP id 5b1f17b1804b1-48fc9a3b8e2mr8939265e9.21.1778625141046; Tue, 12 May 2026 15:32:21 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([2a01:e11:5402:d840:f1ee:c5d:74e4:6e19]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e8f3c65f2sm47377375e9.1.2026.05.12.15.32.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 15:32:20 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v2 3/5] iio: light: tcs3472: use devm for resource management Date: Wed, 13 May 2026 00:32:13 +0200 Message-ID: <20260512223215.25596-4-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260512223215.25596-1-aldocontelk@gmail.com> References: <20260512223215.25596-1-aldocontelk@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" Convert the driver to use device-managed resource allocation: - Add tcs3472_powerdown_action() and register it with devm_add_action_or_reset() to ensure the device is powered down on cleanup. Before this patch, the chip remained powered if probe failed after enabling it. - Replace iio_triggered_buffer_setup() with devm_iio_triggered_buffer_setup(). - Replace request_threaded_irq() with devm_request_threaded_irq(). - Replace iio_device_register() with devm_iio_device_register(). - Remove tcs3472_remove() as all cleanup is now handled by devm. Rewrite the read-modify-write pattern in tcs3472_powerdown() and tcs3472_resume() so the new register value is computed first, written to the chip, and committed to data->enable only on success. Use a local 'dev =3D &client->dev' in tcs3472_probe() to keep the devm calls compact. Suggested-by: Andy Shevchenko Signed-off-by: Aldo Conte --- v2: (Suggested by Andy) - Rewrote read-modify-write in tcs3472_powerdown() and tcs3472_resume() - Use local 'struct device *dev =3D &client->dev' in probe. - Dropped "Compiled with W=3D1" and test details from the commit message. drivers/iio/light/tcs3472.c | 107 +++++++++++++++++------------------- 1 file changed, 51 insertions(+), 56 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 4fd4fd74d0d6..7a6dc8360326 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -427,13 +427,38 @@ static const struct iio_info tcs3472_info =3D { .attrs =3D &tcs3472_attribute_group, }; =20 +static int tcs3472_powerdown(struct tcs3472_data *data) +{ + u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; + u8 value; + int ret; + + guard(mutex)(&data->lock); + + value =3D data->enable & ~enable_mask; + + ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, value); + if (ret) + return ret; + + data->enable =3D value; + + return 0; +} + +static void tcs3472_powerdown_action(void *data) +{ + tcs3472_powerdown(data); +} + static int tcs3472_probe(struct i2c_client *client) { + struct device *dev =3D &client->dev; struct tcs3472_data *data; struct iio_dev *indio_dev; int ret; =20 - indio_dev =3D devm_iio_device_alloc(&client->dev, sizeof(*data)); + indio_dev =3D devm_iio_device_alloc(dev, sizeof(*data)); if (indio_dev =3D=3D NULL) return -ENOMEM; =20 @@ -453,9 +478,9 @@ static int tcs3472_probe(struct i2c_client *client) return ret; =20 if (ret =3D=3D 0x44) - dev_info(&client->dev, "TCS34721/34725 found\n"); + dev_info(dev, "TCS34721/34725 found\n"); else if (ret =3D=3D 0x4d) - dev_info(&client->dev, "TCS34723/34727 found\n"); + dev_info(dev, "TCS34723/34727 found\n"); else return -ENODEV; =20 @@ -497,59 +522,26 @@ static int tcs3472_probe(struct i2c_client *client) if (ret < 0) return ret; =20 - ret =3D iio_triggered_buffer_setup(indio_dev, NULL, - tcs3472_trigger_handler, NULL); + ret =3D devm_add_action_or_reset(dev, tcs3472_powerdown_action, data); + if (ret) + return ret; + + ret =3D devm_iio_triggered_buffer_setup(dev, indio_dev, NULL, + tcs3472_trigger_handler, NULL); if (ret < 0) return ret; =20 if (client->irq) { - ret =3D request_threaded_irq(client->irq, NULL, - tcs3472_event_handler, - IRQF_TRIGGER_FALLING | IRQF_SHARED | - IRQF_ONESHOT, - client->name, indio_dev); + ret =3D devm_request_threaded_irq(dev, client->irq, NULL, + tcs3472_event_handler, + IRQF_TRIGGER_FALLING | IRQF_SHARED | + IRQF_ONESHOT, + client->name, indio_dev); if (ret) - goto buffer_cleanup; + return ret; } =20 - ret =3D iio_device_register(indio_dev); - if (ret < 0) - goto free_irq; - - return 0; - -free_irq: - if (client->irq) - free_irq(client->irq, indio_dev); -buffer_cleanup: - iio_triggered_buffer_cleanup(indio_dev); - return ret; -} - -static int tcs3472_powerdown(struct tcs3472_data *data) -{ - int ret; - u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; - - guard(mutex)(&data->lock); - - ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, - data->enable & ~enable_mask); - if (!ret) - data->enable &=3D ~enable_mask; - - return ret; -} - -static void tcs3472_remove(struct i2c_client *client) -{ - struct iio_dev *indio_dev =3D i2c_get_clientdata(client); - - iio_device_unregister(indio_dev); - if (client->irq) - free_irq(client->irq, indio_dev); - iio_triggered_buffer_cleanup(indio_dev); - tcs3472_powerdown(iio_priv(indio_dev)); + return devm_iio_device_register(dev, indio_dev); } =20 static int tcs3472_suspend(struct device *dev) @@ -563,17 +555,21 @@ static int tcs3472_resume(struct device *dev) { struct tcs3472_data *data =3D iio_priv(i2c_get_clientdata( to_i2c_client(dev))); - int ret; u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; + u8 value; + int ret; =20 guard(mutex)(&data->lock); =20 - ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, - data->enable | enable_mask); - if (!ret) - data->enable |=3D enable_mask; + value =3D data->enable | enable_mask; =20 - return ret; + ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, value); + if (ret) + return ret; + + data->enable =3D value; + + return 0; } =20 static DEFINE_SIMPLE_DEV_PM_OPS(tcs3472_pm_ops, tcs3472_suspend, @@ -591,7 +587,6 @@ static struct i2c_driver tcs3472_driver =3D { .pm =3D pm_sleep_ptr(&tcs3472_pm_ops), }, .probe =3D tcs3472_probe, - .remove =3D tcs3472_remove, .id_table =3D tcs3472_id, }; module_i2c_driver(tcs3472_driver); --=20 2.54.0 From nobody Fri Jun 12 20:18:30 2026 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.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 9F3703A9D9F for ; Tue, 12 May 2026 22:32:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625146; cv=none; b=udOil1jtp+QmFvC4Fyq6Ryyjhh+Lz2GZqHBtWqfSBzUuHKeso2mYoCgcS9E/afWQK28U1vFXTkw0j15265uWBdF+26/11MPelu+rr1BX6fZhLEfoUlHJwAvsuvf+WPJHC828aZr/9/5DQ/YJFiwHk6O/OjZaRHSz5A+Ha9/s/0g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625146; c=relaxed/simple; bh=kXmeJZWhjPp3n0Y8pQXNLpXCKoAkMZVyJaWBm7pQu/M=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LuXZdku3whURudYMXvzEVc70AbebauyX/Y+olEu/gE0ASt1mdl1aEGovzJVIci71CRBf5TFWkKMzocQN+4DFABaC9fn61D3pkaBS2YprPdf6m/f+ZiWukO+EBpyEbsdR/MpzTH2hkkwolRNAZSHCpo4x2jLWZ/yfxvabdajOaPE= 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=AFu0Lch3; arc=none smtp.client-ip=209.85.128.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="AFu0Lch3" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-4891c0620bcso42788165e9.1 for ; Tue, 12 May 2026 15:32:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778625142; x=1779229942; 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=S6w739Ifl/Y6Qjqjo1MQer97vyt9PsvW6lAxp4s+8V4=; b=AFu0Lch3SFeB2L0I6HVOTrtdZE07IGtueG3pJlm0pyrziYbC5Je4d//bxgle3Q/dZR +qpC/vOOlzgHxHvbG0zLsegZ8wz/j2Z+lFmyAu0nkVFtp2IlTSoDfXpiWveecTrMdLFb ijUi1BpnxKUMU7CW/TQChdfggGhonxyISotz3dxvRD3S8yLtGGuYEjYq+pHlJGpuV+qx XmWOvQ3nu5JQ2AigT37PRCatKjddqGBwGuP2Z2EJwC1jt2zWBZicwR0c3drQESWvzzen i7hooUqIV0xqqJF3jxh81UTTEq/+N1cA9ax4doaSqcvKeJDRolM7TwpZLIAIHJ6+9/0Q DK5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778625142; x=1779229942; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=S6w739Ifl/Y6Qjqjo1MQer97vyt9PsvW6lAxp4s+8V4=; b=d1X2yeDKlSKjb4YzX1p2T+qrfOrX69agpuU35PVVHSlBQoDz7S1VwFiniQu4VfpK2L fLkl2ezcXC9PF3oYJUyzCcBjTZoT/0kWh90l34QrSXF5sAFfkxdl1+DEkSaFT7KefYq+ 0LUuzoP8umM2dq/qwqoR1mjCI6hBm5lsNfW7N+CjDPfAaQTTrrKG2RfZpzNqTBj/NCjb bCyTzUU6OmQhTI40FdKd8Zau/EBWmPJcpE4OGGixMGVsw536kB6MsBAJjyMfHps9BL3e o256ErARX3QVypmnpIFThJYem6HAqbW5uYoFSkvqo/3VNlGYRO/yLLM1TZbwFrOQrp5L 7MIA== X-Forwarded-Encrypted: i=1; AFNElJ8w8JEp4HIrJmLMOfI33p6PE++z48C3ZMViciB4KBn0RN91CEIfUPhv2rbwc+CF6KgAJJVeTO3fYcsUEAU=@vger.kernel.org X-Gm-Message-State: AOJu0YzO5OIoFVMl/6uxRf+xXEyMIlDgDcb7a6lT9Es8wh41L/4RePI1 USzsJQz55RKEPSUKtPJmXkONCHo/qmWvGmEgy1PLxqVhQQABTCAcW3I7 X-Gm-Gg: Acq92OERi/BeU4OvnB3uGfaJ7MPAjkIz32bdeXtBQLmI38DCMAy7C3YdrDkQJ73489Q JdNcMp6zV0Gnfi9kac/QCxDjrmTp3DHjibPrhLL1OMS4FH9kewKg+q7Mu0R8TzgK7/5fZxfYtS3 4wHpcZxS0nKZW5kYUaHHZOaBN3Ezt9TuKm9TEgTzHRjb1nZ2fVtnudng1Fd/cKboos2hNNKFfdI +FP7NuXOA7LJI6AOm31tat9nV9gOKCkU+dZdAnTCfQ4JlUY8vvTvMgdzrqwzSwxAfsmYfY25XCo zdlIUW0kggkuxSdBBcx9yyG25MH2lTWmDeQahI5qchRsrrk7Rjk2cDv6kENWjhdCIR0cBbquFWJ yk6IM3mNOeyGlltwJBzPQKwswv47miHUVx7OVBgkQYqMv0YvLum0L4Uv7IvDM5DdZiFW9b98Szv 3ou6CW643usib5HIUsxFx6AXajFlozTUdf6zB3UTBJ0ssJ0sLgtWJ4bIE= X-Received: by 2002:a05:600c:3588:b0:486:fb0b:ad79 with SMTP id 5b1f17b1804b1-48fc9a39b2amr9061255e9.20.1778625141903; Tue, 12 May 2026 15:32:21 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([2a01:e11:5402:d840:f1ee:c5d:74e4:6e19]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e8f3c65f2sm47377375e9.1.2026.05.12.15.32.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 15:32:21 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v2 4/5] iio: light: tcs3472: implement wait time and sampling frequency Date: Wed, 13 May 2026 00:32:14 +0200 Message-ID: <20260512223215.25596-5-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260512223215.25596-1-aldocontelk@gmail.com> References: <20260512223215.25596-1-aldocontelk@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" The TCS3472 has a wait state controlled by the WEN bit in the ENABLE register and the WAIT register, with an additional WLONG bit in CONFIG that if set multiplies the wait step by 12. The driver previously defined TCS3472_WTIME but never used it leaving the TODO comment on the top of the source file. Implement control of the wait time through IIO_CHAN_INFO_SAMP_FREQ: - Reading sampling_frequency returns the chip's current cycle time, computed as the sum of ATIME, the fixed RGBC initialization time and the wait time (which depends on WEN and WLONG). - Writing sampling_frequency programs WTIME so that the resulting cycle period approximates the requested frequency. If the requested frequency cannot be reached with any non-zero wait time, WEN is disabled and the chip runs back-to-back conversions at the maximum rate allowed by ATIME. If the requested period exceeds the maximum WTIME range, WLONG is enabled to extend the wait step from 2.4 ms to 28.8 ms. - The user's last requested frequency is stored in the driver's private data so that subsequent changes to integration_time recompute WTIME and preserve the requested sampling rate as closely as possible. Add TCS3472_ENABLE_WEN, TCS3472_ENABLE_RUN and TCS3472_CONFIG_WLONG bit definitions. TCS3472_ENABLE_RUN bundles the bits (AEN | PON | WEN) that are simultaneously set when the chip is in running state and cleared during powerdown, and is used by tcs3472_probe(), tcs3472_powerdown() and tcs3472_resume(). Remove the "TODO: wait time" comment at the top of the file. Suggested-by: Andy Shevchenko Signed-off-by: Aldo Conte --- v2: ( Suggested-by Andy ) - Validation also rejects val > 0 with val2 < 0 - cycle_us uses PSEC_PER_SEC (was USEC_PER_SEC * USEC_PER_SEC), - clamp() replaces manual WTIME bounds checks. - DIV_ROUND_CLOSEST_ULL() allows to avoid all the castings. - CONFIG read-modify-write uses a separate 'config' variable instead of the ret =3D foo(ret). - Multi-line comments now follow kernel style. - Added comment explaining why wait_us can be negative. - target_freq_uhz uses div_u64() for 32-bit portability. - TCS3472_ENABLE_RUN introduced here with AEN | PON | WEN. - Test details moved to the cover letter. drivers/iio/light/tcs3472.c | 189 +++++++++++++++++++++++++++++++++--- 1 file changed, 175 insertions(+), 14 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 7a6dc8360326..f8f70399a4dc 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -9,13 +9,12 @@ * TCS34727) * * Datasheet: http://ams.com/eng/content/download/319364/1117183/file/TCS3= 472_Datasheet_EN_v2.pdf - * - * TODO: wait time */ =20 #include #include #include +#include #include #include =20 @@ -52,19 +51,27 @@ #define TCS3472_STATUS_AINT BIT(4) #define TCS3472_STATUS_AVALID BIT(0) #define TCS3472_ENABLE_AIEN BIT(4) +#define TCS3472_ENABLE_WEN BIT(3) #define TCS3472_ENABLE_AEN BIT(1) #define TCS3472_ENABLE_PON BIT(0) +#define TCS3472_ENABLE_RUN (TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON | \ + TCS3472_ENABLE_WEN) #define TCS3472_CONTROL_AGAIN_MASK (BIT(0) | BIT(1)) +#define TCS3472_CONFIG_WLONG BIT(1) =20 struct tcs3472_data { struct i2c_client *client; struct mutex lock; + int target_freq_hz; + int target_freq_uhz; u16 low_thresh; u16 high_thresh; u8 enable; u8 control; u8 atime; u8 apers; + u8 wtime; + bool wlong; }; =20 static const struct iio_event_spec tcs3472_events[] =3D { @@ -90,6 +97,7 @@ static const struct iio_event_spec tcs3472_events[] =3D { .info_mask_separate =3D BIT(IIO_CHAN_INFO_RAW), \ .info_mask_shared_by_type =3D BIT(IIO_CHAN_INFO_CALIBSCALE) | \ BIT(IIO_CHAN_INFO_INT_TIME), \ + .info_mask_shared_by_all =3D BIT(IIO_CHAN_INFO_SAMP_FREQ), \ .channel2 =3D IIO_MOD_LIGHT_##_color, \ .address =3D _addr, \ .scan_index =3D _si, \ @@ -113,6 +121,22 @@ static const struct iio_chan_spec tcs3472_channels[] = =3D { IIO_CHAN_SOFT_TIMESTAMP(4), }; =20 +static unsigned int tcs3472_cycle_time_us(struct tcs3472_data *data) +{ + unsigned int atime_us =3D (256 - data->atime) * 2400; + unsigned int init_us =3D 2400; + unsigned int wtime_us; + + if (!(data->enable & TCS3472_ENABLE_WEN)) + wtime_us =3D 0; + else if (data->wlong) + wtime_us =3D (256 - data->wtime) * 28800; + else + wtime_us =3D (256 - data->wtime) * 2400; + + return wtime_us + init_us + atime_us; +} + static int tcs3472_req_data(struct tcs3472_data *data) { int tries =3D 50; @@ -135,6 +159,100 @@ static int tcs3472_req_data(struct tcs3472_data *data) return 0; } =20 +static int tcs3472_set_sampling_freq(struct tcs3472_data *data, + int val, int val2) +{ + unsigned int atime_us; + unsigned int init_us =3D 2400; + u64 cycle_us; + s64 wait_us; + int wtime; + bool wlong =3D false; + u8 config; + int ret; + + if (val < 0 || val2 < 0 || (val =3D=3D 0 && val2 =3D=3D 0)) + return -EINVAL; + + guard(mutex)(&data->lock); + + atime_us =3D (256 - data->atime) * 2400; + cycle_us =3D div_u64((u64)PSEC_PER_SEC, + (u64)val * USEC_PER_SEC + val2); + + /* + * wait_us can be negative or smaller than the minimum wait step + * (2400 us) when the requested frequency is too high to be reached. + * In that case, disable WEN so that the chip can perform back-to-back + * conversions at the maximum rate permitted by the current ATIME. + */ + wait_us =3D (s64)cycle_us - init_us - atime_us; + + if (wait_us < 2400) { + if (data->enable & TCS3472_ENABLE_WEN) { + data->enable &=3D ~TCS3472_ENABLE_WEN; + ret =3D i2c_smbus_write_byte_data(data->client, + TCS3472_ENABLE, + data->enable); + if (ret < 0) + return ret; + } + + data->target_freq_hz =3D val; + data->target_freq_uhz =3D val2; + return 0; + } + + /* + * Wait state is needed: make sure WEN is active before + * programming WTIME (and possibly WLONG). + */ + if (!(data->enable & TCS3472_ENABLE_WEN)) { + data->enable |=3D TCS3472_ENABLE_WEN; + ret =3D i2c_smbus_write_byte_data(data->client, + TCS3472_ENABLE, + data->enable); + if (ret < 0) + return ret; + } + + wtime =3D 256 - DIV_ROUND_CLOSEST_ULL(wait_us, 2400); + if (wtime < 0) { + wlong =3D true; + wtime =3D 256 - DIV_ROUND_CLOSEST_ULL(wait_us, 28800); + } + wtime =3D clamp(wtime, 0, 255); + + if (wlong !=3D data->wlong) { + ret =3D i2c_smbus_read_byte_data(data->client, TCS3472_CONFIG); + if (ret < 0) + return ret; + + config =3D ret; + if (wlong) + config |=3D TCS3472_CONFIG_WLONG; + else + config &=3D ~TCS3472_CONFIG_WLONG; + + ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_CONFIG, + config); + if (ret < 0) + return ret; + + data->wlong =3D wlong; + } + + ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_WTIME, wtime); + if (ret < 0) + return ret; + + data->wtime =3D wtime; + data->target_freq_hz =3D val; + data->target_freq_uhz =3D val2; + + return 0; +} + static int tcs3472_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) @@ -165,6 +283,14 @@ static int tcs3472_read_raw(struct iio_dev *indio_dev, *val =3D 0; *val2 =3D (256 - data->atime) * 2400; return IIO_VAL_INT_PLUS_MICRO; + case IIO_CHAN_INFO_SAMP_FREQ: { + unsigned int cycle_us =3D tcs3472_cycle_time_us(data); + + *val =3D USEC_PER_SEC / cycle_us; + *val2 =3D div_u64((u64)(USEC_PER_SEC % cycle_us) * USEC_PER_SEC, + cycle_us); + return IIO_VAL_INT_PLUS_MICRO; + } } return -EINVAL; } @@ -175,6 +301,7 @@ static int tcs3472_write_raw(struct iio_dev *indio_dev, { struct tcs3472_data *data =3D iio_priv(indio_dev); int i; + int ret; =20 switch (mask) { case IIO_CHAN_INFO_CALIBSCALE: @@ -194,15 +321,29 @@ static int tcs3472_write_raw(struct iio_dev *indio_de= v, if (val !=3D 0) return -EINVAL; for (i =3D 0; i < 256; i++) { - if (val2 =3D=3D (256 - i) * 2400) { - data->atime =3D i; - return i2c_smbus_write_byte_data( - data->client, TCS3472_ATIME, - data->atime); - } - + if (val2 !=3D (256 - i) * 2400) + continue; + + data->atime =3D i; + ret =3D i2c_smbus_write_byte_data(data->client, + TCS3472_ATIME, + data->atime); + if (ret < 0) + return ret; + + /* + * ATIME just changed, so the cycle time changed too. + * Re-run the sampling frequency logic to recompute + * WTIME and preserve the user's last requested + * frequency. + */ + return tcs3472_set_sampling_freq(data, + data->target_freq_hz, + data->target_freq_uhz); } return -EINVAL; + case IIO_CHAN_INFO_SAMP_FREQ: + return tcs3472_set_sampling_freq(data, val, val2); } return -EINVAL; } @@ -429,13 +570,12 @@ static const struct iio_info tcs3472_info =3D { =20 static int tcs3472_powerdown(struct tcs3472_data *data) { - u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; u8 value; int ret; =20 guard(mutex)(&data->lock); =20 - value =3D data->enable & ~enable_mask; + value =3D data->enable & ~TCS3472_ENABLE_RUN; =20 ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, value); if (ret) @@ -456,6 +596,7 @@ static int tcs3472_probe(struct i2c_client *client) struct device *dev =3D &client->dev; struct tcs3472_data *data; struct iio_dev *indio_dev; + unsigned int cycle_us; int ret; =20 indio_dev =3D devm_iio_device_alloc(dev, sizeof(*data)); @@ -494,6 +635,16 @@ static int tcs3472_probe(struct i2c_client *client) return ret; data->atime =3D ret; =20 + ret =3D i2c_smbus_read_byte_data(data->client, TCS3472_WTIME); + if (ret < 0) + return ret; + data->wtime =3D ret; + + ret =3D i2c_smbus_read_byte_data(data->client, TCS3472_CONFIG); + if (ret < 0) + return ret; + data->wlong =3D !!(ret & TCS3472_CONFIG_WLONG); + ret =3D i2c_smbus_read_word_data(data->client, TCS3472_AILT); if (ret < 0) return ret; @@ -515,13 +666,24 @@ static int tcs3472_probe(struct i2c_client *client) return ret; =20 /* enable device */ - data->enable =3D ret | TCS3472_ENABLE_PON | TCS3472_ENABLE_AEN; + data->enable =3D ret | TCS3472_ENABLE_RUN; data->enable &=3D ~TCS3472_ENABLE_AIEN; ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, data->enable); if (ret < 0) return ret; =20 + /* + * Initialize target frequency from the chip's current state so + * that subsequent integration_time changes via IIO_CHAN_INFO_INT_TIME + * can preserve a meaningful sampling rate, even before userspace + * writes sampling_frequency for the first time. + */ + cycle_us =3D tcs3472_cycle_time_us(data); + data->target_freq_hz =3D USEC_PER_SEC / cycle_us; + data->target_freq_uhz =3D div_u64((u64)(USEC_PER_SEC % cycle_us) * + USEC_PER_SEC, cycle_us); + ret =3D devm_add_action_or_reset(dev, tcs3472_powerdown_action, data); if (ret) return ret; @@ -555,13 +717,12 @@ static int tcs3472_resume(struct device *dev) { struct tcs3472_data *data =3D iio_priv(i2c_get_clientdata( to_i2c_client(dev))); - u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; u8 value; int ret; =20 guard(mutex)(&data->lock); =20 - value =3D data->enable | enable_mask; + value =3D data->enable | TCS3472_ENABLE_RUN; =20 ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, value); if (ret) --=20 2.54.0 From nobody Fri Jun 12 20:18:30 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.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 AFFAE3AB26B for ; Tue, 12 May 2026 22:32:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625146; cv=none; b=DVQdvZT6hdWgXqHqVXZBCfCA8dIvrXnu1WoHLUC9xQKmC6i6rA0lTkl8MZQSC/YY4ZCU+arhemWT7s9PXQR8UkZnFGJdiTSN6f/xqK1N/IuitxKWByFfdL7IW7bgNAWvdVHAQt1nBxdBUkdMcqZyjlXJwA/nZaRU7FLG7hqDpvc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778625146; c=relaxed/simple; bh=Ypvnd0yZE4xn5uhz1eYcWrsIAdyROX4VSJlgjqYpqbM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=K5uw9Ipr916StYcozWpMUyzqiuhllhtC+oisCGDzfspdhJywgpgOCO5y1uxik07w2fINS2PzV2mi/NRwou/gq9NCc2aZfHWm0kH8vfyoytDV43LdoOSIFl3NwSktv04doVePzjLebw7i8BNIMrEaqF3ifoUCLMDVgRn7iJWRkmI= 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=aiOHJVoQ; arc=none smtp.client-ip=209.85.128.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="aiOHJVoQ" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-488ab2db91aso65688845e9.3 for ; Tue, 12 May 2026 15:32:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1778625143; x=1779229943; 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=yma1oPBkehBK4buQzFEzmzdCN8nBmPqJCgl17N+SFiw=; b=aiOHJVoQz0SVhd9yM/Kh/PWH34xwauDjW1lP6dvlbIUaMruDFvJIT6XDmnV4cNquyb e9A3KLaea0qWB+f3YUAdqfBYTifGPUaBFU2VY0j+aBNVbvpHfn1vWpZJbtpLMc+Q+GFo RMIrxhfgXJaVm+tMRvAue1NjOAMNjo4ii11T25+/UyXYqqau6MdFSHmaCV9DTOfiEgzp lnq3OAYRZBv6xRkH/ToiB8kd0z+Z9CVWaQKMFUYcJE9bzQz55XeTLMkJsjmpKLHfs1s+ OWyR9lLL4d+uJ5p0E768k76sPuPZd8QSzo30jj9Edrj9kL0Nq08e6YfQx79CZfmlsyh9 OPAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778625143; x=1779229943; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=yma1oPBkehBK4buQzFEzmzdCN8nBmPqJCgl17N+SFiw=; b=AQe85W1F/o20yoNGsM9WC4s5TRUB8LUws55uYoJB1K9GmnFUO3fqfFM54R8DK/rSXn 6XGzHwj59uPMvmSARPmZ67UYcTmFe5LnzCmsifsi9drw/mHQX+qTVAdsJs7wbKXk8nom iNpvwiNF8qkIXCC3/UgOScWYtp4ErAG0RMhrjX3hMrMfpeRYjPNoYlWudkO9rjFQbJy0 9um7fHk2ph0aTvA7F1dSLOGIc3sBooLPtaXxiBl/X2UTYlSWeHBCmtB4hMxmPN3AOXLt 3ZtFLDtKVGU+vIcNAzl8bAnrRfEkCfiDUO+BLj4HbOR/bbJ5x9lo1xF/Kf94MxWixveU mwmw== X-Forwarded-Encrypted: i=1; AFNElJ8hfC/lqmWJkHK0CcVVOwhGH9kjCxCvGpwbTeaJFyJqogeoKuTQEFggVAfHZRBsVjl57ELWvlPoIHbg7Ko=@vger.kernel.org X-Gm-Message-State: AOJu0YxSb2Lh7kUqeK8wH129xFPTXBXZlIDR8VBBUNk5QMTP+E/TBaf7 2BfAbsYghJXrlOUHGjqTx7lYw51MN1NazhAS4skeBNW/jcBiaB2gkLI2 X-Gm-Gg: Acq92OHvZFBQE2OAkzu7Va4y2V2nkw3RHk0aQm6sOkOefnIYQMCJvB6PyVnhJ5TpTV3 Y+9oiPuTMhJeh1W+zMzMhYn5avYRfUrFWF8F0+o6A7r0t+VBiXJh4ea93Io6CdklCeRYCirZ8S3 W+44fe1SV9fWTQa/6D8mfDAh+SeoFAgyX5gjL5/lgprdFi7AB/kl5p0/aQKW8hnksbCp5vvnKup UosSFro0sc7Gjsx0pv6BzgYb4V47sdf/IY3tzP00PQ9USWFB7MxaIlW85nWpbMvC4g6P1jf4xky ibP3rXdZCW6pJPVjqjKYmQ2Di/CqHqlfr6TABDNq5kSdmIIvnyod5tBIZd/heBJaJdOBrGDbzMz IVTaIdLkuC5bc6b/Hg2j/sEsSKbNnX2CGZNYeHUlge/FJCWB2He0ncDrdumjXHQ4hOyErVT84Dx xzQgS/QCE2st1klXoE/hlkYWWPYKgQRwxCTuW+K6TeqMzAvBIgrsKFQ5Y= X-Received: by 2002:a05:600c:a307:b0:488:af48:af11 with SMTP id 5b1f17b1804b1-48fce99da8cmr566825e9.1.1778625142927; Tue, 12 May 2026 15:32:22 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([2a01:e11:5402:d840:f1ee:c5d:74e4:6e19]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-48e8f3c65f2sm47377375e9.1.2026.05.12.15.32.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 15:32:22 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v2 5/5] iio: light: tcs3472: move standalone return to default case Date: Wed, 13 May 2026 00:32:15 +0200 Message-ID: <20260512223215.25596-6-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260512223215.25596-1-aldocontelk@gmail.com> References: <20260512223215.25596-1-aldocontelk@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" Move the trailing 'return -EINVAL' statements at the end of tcs3472_read_raw() and tcs3472_write_raw() into explicit default: cases inside the respective switch statements. This removes the need for a separate return statement after the switch. No functional change. Suggested-by: Andy Shevchenko Signed-off-by: Aldo Conte Reviewed-by: Andy Shevchenko Reviewed-by: Joshua Crofts --- drivers/iio/light/tcs3472.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index f8f70399a4dc..4ba2def244b7 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -291,8 +291,9 @@ static int tcs3472_read_raw(struct iio_dev *indio_dev, cycle_us); return IIO_VAL_INT_PLUS_MICRO; } + default: + return -EINVAL; } - return -EINVAL; } =20 static int tcs3472_write_raw(struct iio_dev *indio_dev, @@ -344,8 +345,9 @@ static int tcs3472_write_raw(struct iio_dev *indio_dev, return -EINVAL; case IIO_CHAN_INFO_SAMP_FREQ: return tcs3472_set_sampling_freq(data, val, val2); + default: + return -EINVAL; } - return -EINVAL; } =20 /* --=20 2.54.0