From nobody Sun May 24 18:41:56 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3EDB238228A for ; Fri, 22 May 2026 12:34:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453266; cv=none; b=MDVf+7KveWBrP4L7YBmf3ydXnkwTZxr30BLCRCkFeG4Rl253KZdColMEftdunNRZzkJLcJPDlYp5UoFSH81pZ3cdIykUbQzTiXcaGb3zSRkKggFSp/rwMXFAxYFMcOK1gowe6V3VTKdntgSuff6ZhHtZCtb2pOrx7171ncoBtB0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453266; c=relaxed/simple; bh=upzag8qhKi6aKvj4oazaakxR+C2DYD1uVCnLUQ1r2A0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=nW1iMKUeczdxDN6muQwbH89PwSplPEO5FIAfkURb7NWO9J8gY1H1HWA13ywBIy68iVkXRuvqYwtx9VBKGYL/tl4lsOdf17UpUFkwTLxF/da9RFPU43ZTEf+Ypc/zg/PtbFwjByX9tLXM3FRZ+ObC1YInGp/zrj2yTLAGeAADJWQ= 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=D+6pZCds; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="D+6pZCds" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4903cbfad68so11543705e9.0 for ; Fri, 22 May 2026 05:34:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453263; x=1780058063; 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=2YX8b4V19qziyTb596TiLv9FQnlA5Iy1jj595uzVils=; b=D+6pZCdsXOS0cpj6yowI3HnZjIccV8iJFxOXzYtbzP8h5ZZQgQsRq2xpoi0P379KcT gPlM0Dv6bYsRQT5v4eGG76FqAZQtHLYLH4gTkIlKxID9GWS6dh+y1MauLd+2augTsdga trF5jlM7Ctn3gC1FMT4MO37AobNuMNCYwrWqPaItrnrurZScHp9T7rU3gWZl6JfQWmKg Xstok02zfIHDBFLehM7Z4FAYABqJip3higQ7Hh/36wYNyTSmrC69NOU4KZDbo0+ADmhe 2TGR9D5+LwIlPNotxAj+xyqnhGM27HxxlAid8JgxpMwJZytQgzp2j4DjOtDVf1IJgxFp 2Ogg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453263; x=1780058063; 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=2YX8b4V19qziyTb596TiLv9FQnlA5Iy1jj595uzVils=; b=g/r8Bxa1fQ81E5cXdXLL026/Cm4IjtWfbL4MWsuTJh6ki2k+mAA2swuZBnAtD8hEBc UnJHUHvUKk/otbTA/YU2wloF0Y8476KrWD9GgHk/k3mTarlEKdMsZuAQjyP0ZnZS1VD7 rEJ0RT7nStq/EDrBbdpKcgC2DQMzXyXZyBZKaPiVf75vegcMXEmS93P30u2bi+JQVW9w XEyXiFlCV9dhq5TeAvTjLMgJipGdF5S0HLut0NX30BHRlOjuShziyxKGkW30ZNIYK9Mg 26JilIMWU2Epu+Pi7lKeCUKclurCg4M4kXeXRvRyFhqZvRL+Ft7tXqwWXyRqRTDrdpv0 R51w== X-Forwarded-Encrypted: i=1; AFNElJ/ApK89fBvFsP6XKdJhVdff+R9fVxVuZzBSqB+ZAomkLgGxTpuEEzeFRg//0OUDCR1Pdz94NgPlr8qttxU=@vger.kernel.org X-Gm-Message-State: AOJu0YxllN2dArr7eQ0Lv1WungoPRWD3+c76mWfX6fCvnc8zbkUfmA6i dC7s4TN6QFQ/qz0zEafGBkyFqIMB+B/agdt5Fq06+GkT1KyZzOVjzuSx X-Gm-Gg: Acq92OGaOx1Iw2aLfLxcY7sQl2hZ0SVHUWlQP9JmuCQQFiTYokqfGgMNt7Y31KhyF5d dEIlXqEKwXkMTseS9dMSH8nGtDPGF+L6snyLB0bxOKoVVtVyFneqHoN8q6JMnPQ5xbfA7LihFm4 h4uH3pxoBaqI8g/U2zcLifQHLyLJlUK8jWSv/t9+yaq3hGFB6SWLFZQnCOlRGHmSPSdxKkvCh3e nbrxoAkHOnV8HUZ5WnAhZ1PfCfdcKo4iSaowkweLbqgf1f83OHSNl/4WC2lfbOsvnoGP3zfJgun +dKk2UyWLLUCIQNJ+3W6mNb0n5YPiBRWwMBRuMXsyNEeITDVA4ZPkibMToNu6ZAga8Yp90l9umc R5l4RNfzZQvCIsUUpn7/1ETYLdk1p6gWo2FB9Y3EHryUs2J7pmoV4v10TTuJ4fgfNB3ru4CL/uH jeInyyvghhaodVT4CY5dnWw89sdD4W7yuiaOytGZUn6EQtIIJYVkpI X-Received: by 2002:a05:600c:8b85:b0:48a:534a:eed8 with SMTP id 5b1f17b1804b1-49042260287mr39772245e9.1.1779453262348; Fri, 22 May 2026 05:34:22 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:22 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 1/8] iio: tcs3472: power down chip on probe failure Date: Fri, 22 May 2026 14:34:12 +0200 Message-ID: <20260522123420.45495-2-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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" If tcs3472_probe() fails after enabling the chip (by writing PON | AEN to the ENABLE register), the error paths return without powering down the device. Add an 'error_powerdown' label at the end of the cleanup chain that calls tcs3472_powerdown() to power down the chip. The existing label cascade is rerouted to fall through to the new label. Move tcs3472_powerdown() above tcs3472_probe() so the probe can call it without a forward declaration. Found by code inspection while reviewing the probe error paths in preparation for the devm_ conversion. Fixes: eb869ade30a6 ("iio: Add tcs3472 color light sensor driver") Signed-off-by: Aldo Conte --- v3: - New patch: extracted bug fix from devm conversion. drivers/iio/light/tcs3472.c | 38 +++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 12429a3261b3..849ca7885d71 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -440,6 +440,23 @@ static const struct iio_info tcs3472_info =3D { .attrs =3D &tcs3472_attribute_group, }; =20 +static int tcs3472_powerdown(struct tcs3472_data *data) +{ + int ret; + u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; + + mutex_lock(&data->lock); + + ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, + data->enable & ~enable_mask); + if (!ret) + data->enable &=3D ~enable_mask; + + mutex_unlock(&data->lock); + + return ret; +} + static int tcs3472_probe(struct i2c_client *client) { struct tcs3472_data *data; @@ -513,7 +530,7 @@ static int tcs3472_probe(struct i2c_client *client) ret =3D iio_triggered_buffer_setup(indio_dev, NULL, tcs3472_trigger_handler, NULL); if (ret < 0) - return ret; + goto error_powerdown; =20 if (client->irq) { ret =3D request_threaded_irq(client->irq, NULL, @@ -536,23 +553,8 @@ static int tcs3472_probe(struct i2c_client *client) 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; - - mutex_lock(&data->lock); - - ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, - data->enable & ~enable_mask); - if (!ret) - data->enable &=3D ~enable_mask; - - mutex_unlock(&data->lock); - +error_powerdown: + tcs3472_powerdown(data); return ret; } =20 --=20 2.54.0 From nobody Sun May 24 18:41:56 2026 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 E62B738C401 for ; Fri, 22 May 2026 12:34:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453267; cv=none; b=husGscieA7lBTH4aWYrNq0FyibMHrVY1cFDcUu/UvFCAuC9xtZlUW55JSjbG3HRIKfGutKKEbyksdjGcvTTosNkah+/Jad2NKL2f8M9TJ7g76pl8DbIC26WedLxbbMracekCkdhMLa3LWsfGaeAUTHxfkBI1q+oH1o9smpBOnhU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453267; c=relaxed/simple; bh=i+te5LxeNXfjJjKfGqFDIuk1wWeRe58/ljtNFiAjvXo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Nu8sMUS+5HGW79oKav8tHxcSRta9mj0sPwjq7IQWSRKU4s4TDm3vZHiR/hfKkhZzSu4mLZeuYHzRbvaDAmLBwWLfeOQ1BZpXuhfMDOgvYQJE4HqL9CuobyQIHuQniKo4fJ9squdM943eRrJkXbijs/7rZaR4YRLT7S9N3Sqv0TY= 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=Tuj2fWvC; arc=none smtp.client-ip=209.85.128.45 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="Tuj2fWvC" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-490388fd0dbso17378345e9.0 for ; Fri, 22 May 2026 05:34:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453263; x=1780058063; 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=tlnYnPb7deSBfYn8dj/YiBzt8a6SjFibSLJrCP9deBQ=; b=Tuj2fWvCrblpDw6DzOn+JrtpsGHojLlJEgJ+9bdAJi/U0MW7d7+xQCgtS6jS9m4Iz5 9H5s9Zw+lk7VB68yICT9dMoiCjhPtf7EtDM4kJhFi7mzCYlTQ/Hc/LEhMFwswQEKnyGT 51OEGQcYMWhDrpcVLxPkhYo5pEedJWnscNESbcQlncoDrzGcaWhIpbL1I8m/Xxf7uABI BIDDaCvEBO6IcROMWSrOGQdsYMUy3iKxfipA2q7eS9wla8zHERhfSyl5CidSq73c6QwJ pApmSRXUwUliGCSkUFO6y4C2YloJl260lVVjLLrVov3C+uBb4vVqqdxCOL4QFt/eBu4H XbwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453263; x=1780058063; 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=tlnYnPb7deSBfYn8dj/YiBzt8a6SjFibSLJrCP9deBQ=; b=XjcbTUQDY4B+2+8uXCIhXiZ8jUFltELWcM7Orv3+n8E7xY2q86YsI4KOFYsCTBy+uw 3zzpOUfgXti76KAurN0SQKMZGUA4p+og3SJBiwYtxPZYp1gos3pBmwVrKeKx4Xe/FRgt 9fz7RHzAifRFpmbrbOC3/zXt8bpp/2mDvRuES5zvkjzUu1MfoHyrcqk6r/Uw+4yYuvSW lEPOxlN1YbFMamjDWuRRpnPr3bPuXr3uzFLuXragX4S5CEWRUSWk2nZ6PkHLXUBxrvfG dbpTP8HsbAFxAbIQ4BpwTZFz42oLWKjEa9i9l44Fw3x1v0Ls4Y9BujukbCQIpv/ixg8A rA6g== X-Forwarded-Encrypted: i=1; AFNElJ8CueCYbTsyLupYxFeZ+rk3Cv1Lofkl6qeYlrW8I/pn5XlsfoxtOGpZy2TFxA+jhxdH2VLrGCTsxyPxjT4=@vger.kernel.org X-Gm-Message-State: AOJu0YxiqxuTgPCDOkiCeiVF0DtTrbFsuSFMqBBfXMBL1DELeknuSRss imU6HqspCouFSCwa74NDbReV92libxrpTpx84FW2FQ3n8o9DMqFq8AwEskamSSpI X-Gm-Gg: Acq92OFdJWTeFNUHw6CmPUkKHinO37kcJ2phjDv04FQ5voI7E+Of8I+1xt7EZp0pHxv S+tNSRC+6m641VHFcaut0jnHFIwHSsHazLiVf0t2A7Eg4lQj2diCxwlE2e8PXsLf6d3Nmc5c3PK OLiT7sqGwEwIIjFChfHKMpbdPv66DvFJy1pzm3sryfSjndnUoAj63VGUGZ81fuhgq3LPNRqad6h HmyXcCCDli/dAzJF0chWFO4KNhb6VdZaJWwxg6sKTs7vDaa2l8ssqIOjCH0KB01vYTnxCdxXta9 mvWrzjUsCPdX2GXVXSXN4yYVl6L3WPt12KpCsms9WLfYIFE3XlXBk+ueXPcezhitY9PPC2AD6VZ ILjiijJJzipSmW1SR9cyFb0SBJ4MFJZ6oCKHc1146Mhc1BbsgHZLiR4k8VXsTtUpon8fkjEJS7o mTCkpnQfinIDXB9ap3mNwvstare5mOscSKrRAk7xmJ7hkJb7PVDZCi0nkEd44qRUM= X-Received: by 2002:a05:600c:4fd0:b0:48e:82b4:b54 with SMTP id 5b1f17b1804b1-490426d1ebbmr44443135e9.23.1779453263098; Fri, 22 May 2026 05:34:23 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:22 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 2/8] iio: tcs3472: sort headers alphabetically Date: Fri, 22 May 2026 14:34:13 +0200 Message-ID: <20260522123420.45495-3-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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 Reviewed-by: Joshua Crofts Signed-off-by: Aldo Conte --- v3: - No changes. 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 849ca7885d71..1803bb882804 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 Sun May 24 18:41:56 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 A611C3B2D14 for ; Fri, 22 May 2026 12:34:25 +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=1779453268; cv=none; b=WcjOYNNoaQMFpX22hTYyMchbC2rcw7RcrKJczn+MYREdv38IS0DwE/52KKskYOUp4bipnUHlzic+Q2DLmZJIcSn8eTmRhnjuiEOsd42VUG0eEk51xlppUShWg3t9FLoOwxLSmEDGSFg/kWL0ZSr+7oQ9MeWMF/i4fqo+540Wgqs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453268; c=relaxed/simple; bh=QTwwIZ3daKW2YIE9q8isjc7HvcH9QXJgTw7t9zS73yE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g6FVzZcFvhrUbjAb/PDgWFMMboZRwNsPrBCe4DaSlFqInnnH5aRbDkzeQHyozznHlRf/3tjLlJEpV+GyGkZaB5tXyBznE/E2C5ebLTwJ9Xpd8UwBZc32JoaDG8AH8/RDY9hd9iqJOZxyJHp5hf8W/K97YldArnA7O3Iorw4RAgs= 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=n3QwBlgM; 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="n3QwBlgM" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-48ff4f8ef0dso77452655e9.3 for ; Fri, 22 May 2026 05:34:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453264; x=1780058064; 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=WvWYIXbd/e0R7bVN4oKYfFF/4Yc8ZEWPnmStsVTHPPg=; b=n3QwBlgMqQlH5KRyVT79lah5s5g7NEqYYPujrfAHMBZlbHcQ6wFWc1ZUOyA2ATREi2 NlXugKLLs8P81BUFyx8qO9/2/3+5bp2zPotbYLUAfZIiLOsmFuqcTCg3ZTjOoUvwuTHq n8pWNf5KYlblbBa6WPAhM2wnfISKZVxd6FCL+/ijtORG2DmMsO0RMvUwijZ3BucQ8jJR ryv2O8hwTyr322L5c26kZpXodDx0r4uVZFt5nCLpnz1XQvub7nQQH4WVR/HIOPjGesa4 bThmyQSt+FC4d/PPOCNYc6CD0VhhxDx/21Od3mbw7Rt2a/fLin3TLKuUXIkHSWkQcFF4 eIeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453264; x=1780058064; 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=WvWYIXbd/e0R7bVN4oKYfFF/4Yc8ZEWPnmStsVTHPPg=; b=VBNaepSD01C8zVqRRbKi9ZSsFDsH7HRTROhX3LTZgJQ9RXk9/Iik2ko8UARYK1KIYl vmj2sJIrsx+diWJGuoKsF/W3Tyi/7+QR4P7+xukNCTLZxSdDCnXpZGXVDiBkqQkcSXHF ufx9Resvr7CaYjIW/uy7By4v0k0/kdA7gbiXXHGwz+J7obyVv8m5cHEfmjjerXk0bHHA m6OVzjupymDLObIA0j+qY0fr0Kae82fzWjPsC7rw4x9URrEenNIuZEAN0LkY/YS5UaiY W8Exne6FIKo2rYpzNCtuSfJubHJnf9mm+DGIlyIO6ra/WghF2q5eXLJ+zsSITOVJu2lv KfEA== X-Forwarded-Encrypted: i=1; AFNElJ/3bVLjVYOLViUP9DdYqbK1G6/Ylw+ukTxJOCtMzycIM4g46A1LXW9oXRgpEuxKJodCHldWNpbsA9UR7I0=@vger.kernel.org X-Gm-Message-State: AOJu0YwFcWKsToRDUSKqB6Ltpf0XHPml6pNPAcUlU53izWApms5jJLgC hFL/xNW00soK9fF1xRywreGOqgWAHhjIyVmDuAmcUBi0Ps2TRUhts9b5 X-Gm-Gg: Acq92OGrg1HEFLIN7ab7aouSL/ZmK3pUqsUSPInGpOOqZGF9r1/0FcVKkHCG+uAGurm eU7P2TsALTATD+dSK2ELLAbPmntZs2B9Tg4vdDRJuK+iRrooiLk+MMYwCHh4ijEHG8DInYeA4xw nApbpTCsVPSFKeE3x1RCx0AVTZikpU8NDJ6837ShkOaoV0l53uezLRJVSU/RJdebGJxKkrRtsc/ 22pwCqruBRiVKSpzeIqFlDMnPUNBAKmX1MqdOAxeD6L+9PNKILBHaa2wIZ3U+utd6uYwXhVti2o j+uS33GxS21mYamTBaq94rUHC1k4Kz6PPtRbK3MXD04y1EQjt3mK/OhO63CS4/g3Fq9AOqBbfS5 sBQPwSFlSndu09+9Pci62YAau2Xp1NEKFGJ97gTplLiNYyW6Lj1m2cGzoeZlyb5gWS9ZgFnMcy3 bhc0r8AlA5+4Kn5wvxmAt0qltHj3h+DGY/wTa+AFOdfGgNh/qpJLXx X-Received: by 2002:a05:600c:35cf:b0:490:3bad:3784 with SMTP id 5b1f17b1804b1-490426bc6demr52827045e9.18.1779453263971; Fri, 22 May 2026 05:34:23 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:23 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 3/8] iio: tcs3472: convert remaining locking to guard(mutex) Date: Fri, 22 May 2026 14:34:14 +0200 Message-ID: <20260522123420.45495-4-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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 several functions to use guard(mutex)() 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. While the conversion is in progress, take the opportunity to make a few small cleanups that guard() enables: - In tcs3472_read_event_config(), replace '!!(...)' with '(...) ? 1 : 0' for readability. - In tcs3472_write_event_config(), tcs3472_powerdown() and tcs3472_resume() use an early return on the I2C write failure path. No functional change. Signed-off-by: Aldo Conte --- v3: - Drop Suggested-by: Andy (inappropriate tag). - In read_event_config(): !! -> ? 1 : 0. - In write_event_config(): early return on I2C error. - In powerdown() and resume(): early return on I2C error. - Remove stray blank line in trigger_handler(). drivers/iio/light/tcs3472.c | 76 ++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 44 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 1803bb882804..b31714040a02 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) ? 1 : 0; } =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 @@ -339,12 +326,13 @@ static int tcs3472_write_event_config(struct iio_dev = *indio_dev, if (enable_old !=3D data->enable) { ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, data->enable); - if (ret) + if (ret) { data->enable =3D enable_old; + return ret; + } } - mutex_unlock(&data->lock); =20 - return ret; + return 0; } =20 static irqreturn_t tcs3472_event_handler(int irq, void *priv) @@ -445,16 +433,16 @@ 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; + if (ret) + return ret; =20 - mutex_unlock(&data->lock); + data->enable &=3D ~enable_mask; =20 - return ret; + return 0; } =20 static int tcs3472_probe(struct i2c_client *client) @@ -583,16 +571,16 @@ 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; + if (ret) + return ret; =20 - mutex_unlock(&data->lock); + data->enable |=3D enable_mask; =20 - return ret; + return 0; } =20 static DEFINE_SIMPLE_DEV_PM_OPS(tcs3472_pm_ops, tcs3472_suspend, --=20 2.54.0 From nobody Sun May 24 18:41:56 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 CDFB53806AD for ; Fri, 22 May 2026 12:34:26 +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=1779453268; cv=none; b=Ym8w3JoHt1eRKwLsbq9zPvOaP1I68NOiK3DIH5hE/ua73zAb7Sj9VvNrwReo+fQNWDIAsbj1bxZzokqjRbqHkHzhh654R2UV+MGuBb0b8hE+3jwIgOIS6bXYYAcL1cZHU41sI9O6ni0aNhoRX7m2s9my+nqXmt3l7rK0XlQL9MA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453268; c=relaxed/simple; bh=ynhxuTkN4BN6oQfGbm87LslmDHKEkF+o1fRrWqA4b9A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EnGdK63y2RIrp9Ixm7KK+hMn2LQ4+W9H/jC/iWlaMot1kgsG9sLh+1ozFFGUxF7UyXBchY4hBMrthGNTjk7DtrckK9eNneBScdPV//hwOqy195sWTmvyi0HkJ41vXiN8XXUx9yJKadMFWS5AtMaX4WsKICcrXq5uLY0FiUTMsos= 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=OtGVe/vk; 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="OtGVe/vk" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-490388fd0dbso17378635e9.0 for ; Fri, 22 May 2026 05:34:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453265; x=1780058065; 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=Yy2/x0VnVRjssoU/WahnWMqOpw1Hx5k8ab9OpEH/mx0=; b=OtGVe/vkLjRCzCZ8z5AUL/GvF/NB6xHewxGfymZXsJVRBhvp+rQlJKEIUGkxd2vflZ 9Dkyx319MmwXwJrq4iAybE3Jgn/RPIpfOm5gejSN62opsqVrIJSxUijV+H0m/4iCGDv1 JpQCMcExDKBAeG3sVwkU3/gC6eWnhf+Ug9Hf8+7w/MenIJi8pwwhhC0Vf0GUPqyELUFS CdItPBDqlRq92uGZTBF1PZwp7rAbP4SqNioRb/nZeYa6F8too6psLgc79PUPh2Ckm8ha 7eldN7VPcut6ikGYPrCgwlI/uAJtAPPSFo2S+sP2979RHJGsjJR8VDu6/0HgBcOQxwY/ GjLA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453265; x=1780058065; 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=Yy2/x0VnVRjssoU/WahnWMqOpw1Hx5k8ab9OpEH/mx0=; b=jQK9dKfx/HPfVRddro6U0bBoOeLI6iOzjk9zOYPL2nKlfFdNH9t12r0ZZukxx4zlch s1pKqbvec7yDRIfnADwhFkAtUasxsIahhuHAgmxLqDDo3CKw2nZhWRySNOOTLd2xf2eR K115kWfXDqFFZC8UMLCfkQ9oR9PC1OQd9Dx9SOQGpQvkC2p65k2+Lq6EwLJrksq42j+T yqo8x02qBTAbm/WGTDx12Ofo0TTY1kWQ3DqG76iTTN+h113e34Ki/5Vu97Ep4AK1BTVy AQEAbO5q65NJJuAfubFs9/kMVw0kaW0oXyOdq+0sqolC2jo1WV8fOUIgrDvzDcwVLpyA RBMg== X-Forwarded-Encrypted: i=1; AFNElJ/s2JYR7NK2yKeiDnlUCwmIfBlMcu5kwVDXcr96yViEjSfOY3cJbPEvb77m1CLLliSZlFncADxnKSAOCvs=@vger.kernel.org X-Gm-Message-State: AOJu0YxzZx4yYtjJcdKMCmRODMCutRA7u676fjBtFc0oMk+GU2UNzKFr HOFNOO6nFUgcrf5pXn8hT0xMgepDHNn+DWH60XJJ88qBx7BbXIH2fp5q X-Gm-Gg: Acq92OFLXbbsixfp+EFtr35utxdW6BHIV6rSR8151ZIZ4s2qwa3GKa6v/lcv9yA7KbB Eyt7POS13GONUvhXmZ2wVK84DDo9OdNwNmen31vIGv9v9+OGOHxFqMoQOERBELEpJEZqKs+eUZ5 CB5uDVDZKZt3reO2dwFYBD1lnl2skpR4jHlfuJxx6NDmbLC6au01Sg+ie1cpN+egehelCsSZ230 DwLoHzhuB6dRUeum12UfBSaIuj1+knMMg3jLDe3KjNJstcNdhtF5AG5auDPVhi4rsltf1CODct2 T4kuV7vgNhxfLETTnLbj0CeOkjEUbRTHmPm/b1GRjWI1VTEcqc4fRjbOuVRQwvrCNghw60X2oUq GGlScpl3HuVMrUaKOToctHVNdMLSo52pWkzDwDO77y0NXLSbgjZYutEebzHolYxCzZo5zn7aJYz S9eXAKtLuHOffTFMPJq+i7D83gbDjjdQqg3OpeP3k52eEGwSbXWHcg X-Received: by 2002:a05:600c:4510:b0:48f:e230:c3fa with SMTP id 5b1f17b1804b1-490428ddc9fmr45980945e9.32.1779453264941; Fri, 22 May 2026 05:34:24 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:24 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 4/8] iio: tcs3472: use ! instead of explicit NULL check Date: Fri, 22 May 2026 14:34:15 +0200 Message-ID: <20260522123420.45495-5-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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" Replace 'if (indio_dev =3D=3D NULL)' with 'if (!indio_dev)' in tcs3472_probe() to follow the preferred kernel style. No functional change. Suggested-by: Joshua Crofts Signed-off-by: Aldo Conte --- v3: - New patch. drivers/iio/light/tcs3472.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index b31714040a02..d7b5805108f6 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -452,7 +452,7 @@ static int tcs3472_probe(struct i2c_client *client) int ret; =20 indio_dev =3D devm_iio_device_alloc(&client->dev, sizeof(*data)); - if (indio_dev =3D=3D NULL) + if (!indio_dev) return -ENOMEM; =20 data =3D iio_priv(indio_dev); --=20 2.54.0 From nobody Sun May 24 18:41:56 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 CD6723BB9FD for ; Fri, 22 May 2026 12:34:28 +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=1779453271; cv=none; b=hxADK7r7/cJ/mZG+vFy78aBbeNDYnfbHn+ERH6duKnj5IpQQj/qHu39ARYuUW8E/kbu4uNsPFfjuywEcs0Y2dvS2abZvapdEPhR9f+NJiHx0s7Qp1qGSIj4ti+NRbXB/vG81cybgzeFpmx4CorRo+RCHSk+PI8d05MbXK0OB/nY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453271; c=relaxed/simple; bh=GgdK1NdF3v1bW+YEFIuLHRfz4sXog4cMyMCRp7zuipk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JbR+q1qHzSgljjHnv276phMYIWJk/9XiOL6J9IchXqKl7nTMQXbXh9BcvkKAjd0dD1E49F5XDcGPVA4xLhsD5A6xGh2aqhjFiGvwsvwA7R0G+IgbFvs46IUz3T7yar9cGs13fvMKToUAJUBVu2IIBK5OPVwmWSIOAYYQuhkbxlI= 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=MjT8xFIU; 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="MjT8xFIU" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-49042aeeb75so11039715e9.1 for ; Fri, 22 May 2026 05:34:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453267; x=1780058067; 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=/9MVD6i7sa82Oj//XUlVTMNpu1VIZIfx70ZqUMN7z/Y=; b=MjT8xFIU9E9ksXAAmQC0F59oOLHZRrLA3YkCjbnsEMWS2nawkQ3EGr/gPlPw0hFDyj 8WCIpvI6y5H47vu6lyLeYYSfBK8lj4/7j19XNXqT6jYY5y3v4xI8g9WDLOoCdKciVEew HkE0YAeBeahYTeW6rJF7lALUh233DqKYaH7SHbEByCeQaObZHBvDEZI4rlYgdM9pPF0c FN8ptrU097zwqDyFbyy5hFU5RteUwrCLuQSvu+AcV4dQweCNgkAx7Xs4FjvEEq3dlHYR 0vyXgoCsIdtnJfkIOEjHYaCx+IPjEgBKc6hz7KoYYxXmfodGh2jmec0mmCzNiXarK6pP eP5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453267; x=1780058067; 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=/9MVD6i7sa82Oj//XUlVTMNpu1VIZIfx70ZqUMN7z/Y=; b=J0pO64IVEqNHc1iQxEQ97bLT4UY6fzXp8pJxL3GFTTqrHN4yNRjSJpatLuptW4CpSx Rn6JCGwYlPd+5vhYRzcuk0E4P0bHErji740Lc8OPKHvcQnVsYuu2xaFUTWQxPCqb4F/9 Z5yoAIsv33oz5jQtYkWiDp8lCl5M6FzjKXnPDJcy+7YvN7ejikAPQI6A2DlRgyPKKQPg lDmuXDR+h8eMuiaHcicfStPSWagVh+RTRRYKOOWcIdglmMkrZ+f17IjAouivrfmHuk8N PS+V0emXfUUioo4/5rn1NinHyszLVfLOegEil+UTrGFscMOAW17mGLkFxdM6ns6f2iWs b0JQ== X-Forwarded-Encrypted: i=1; AFNElJ/Sns3Ur5b5LvFMsO1nwwH59tkyI2McRT+VOAJeAlr6BwXqNpyOQht0co+5DKwaRxn4n1GLTjR8BBGQOeA=@vger.kernel.org X-Gm-Message-State: AOJu0YxZVXyxO1gv6UhiaDKQa3hFUQljq9O8qVyqdmJ+mgnjoh/TFwyY 1UqiqYUfY5x9yQL2tydhLsH0VxQkMK+ZtQhm0l0KBRTVPodZ5O0JZ6qZ X-Gm-Gg: Acq92OFhVWHBLoVHmGXWUagmOXr9JORvu3KePEs6Ka63xxBQby0pvNqc9zXrOGTRIQL RjLbhaqPfHFEkWX6e6dKWDcOXMIbY7cgUgTZQAdrn8bojRmhBUVbloxt29ROFLV26wLO7XTe8s7 qdPTdgj9vguc3RT2Ow2dMeVbTMFfTkiJorzdMVjVyN/mSzoRebeefV/s+kwyeiF1mGIcWf8g5J7 TlXXzRD7+GRQsZ4xzWsGfalR+fb3k4DSZ9UAQwCcMx8JO81W76K/7b55X08tDg3z7N4UnZNywzM BHlaobM3qhnIjmJln+FHp3J/18mlQg/uMOjGIh+DQwDyA2TZ0ZuDaibA7mTKC+HdpDzc6f4WFos fcKbtXYqe+lzbQ9UvDrlBRXIceU0cdq+DjWnagm02sk8bJoQUwqrguphaazGYyD7HYTb6472A9/ fGD0MdLo9yLUYOHqiXaQQLNd1M8lNYaAgWFX7uNNvUyjeY/Ho3DHse X-Received: by 2002:a05:600d:108:10b0:48f:fe2a:107b with SMTP id 5b1f17b1804b1-4904249d1f9mr36827575e9.7.1779453266742; Fri, 22 May 2026 05:34:26 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:26 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 5/8] iio: tcs3472: use devm for resource management Date: Fri, 22 May 2026 14:34:16 +0200 Message-ID: <20260522123420.45495-6-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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. - 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(). - Replace mutex_init() with devm_mutex_init(). - Remove tcs3472_remove() as all cleanup is now handled by devm. Use a local 'dev =3D &client->dev' in tcs3472_probe() to keep the devm calls compact. Signed-off-by: Aldo Conte --- v3: - Drop Suggested-by: Andy (inappropriate tag). - Drop powerdown bug fix (now patch 1). - Drop powerdown/resume RMW refactor (now in guard patch). - Drop TCS3472_ENABLE_RUN define (now in wait time patch). - Drop dev_info() conversion (now in separate patch). - Add devm_mutex_init() for the lock (suggested by Joshua). drivers/iio/light/tcs3472.c | 63 +++++++++++++++---------------------- 1 file changed, 26 insertions(+), 37 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index d7b5805108f6..4966abf83c18 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -17,6 +17,7 @@ #include #include #include +#include #include =20 #include @@ -445,20 +446,28 @@ static int tcs3472_powerdown(struct tcs3472_data *dat= a) return 0; } =20 +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) return -ENOMEM; =20 data =3D iio_priv(indio_dev); i2c_set_clientdata(client, indio_dev); data->client =3D client; - mutex_init(&data->lock); + ret =3D devm_mutex_init(dev, &data->lock); + if (ret) + return ret; =20 indio_dev->info =3D &tcs3472_info; indio_dev->name =3D TCS3472_DRV_NAME; @@ -515,46 +524,27 @@ 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) - goto error_powerdown; + 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); -error_powerdown: - tcs3472_powerdown(data); - 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) @@ -598,7 +588,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 Sun May 24 18:41:56 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 7ACEF3BCD2E for ; Fri, 22 May 2026 12:34:29 +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=1779453271; cv=none; b=mrb+YsRzfPUvSm/u4b9GtQpOtIz5CM+Fh2Pjbf1KLwYNEE+V3vF9L6KYjYVCTmHV83X9TGiecohpiGpoi7jCmDAge9D+x7wfS3YLVBsSmuYGkaUE5ztIJXPTw4tFrJ+HntFL/bdgU8xudmeK3avwSkENAJwSYB65sbSbp6kwPaQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453271; c=relaxed/simple; bh=HNVQB1Sx2eQiNy7XgLEbGRhcVanUAKDqdo7tkqRq+NY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IKSRGeJxyLt67v08q3j2igZ45lhalVk3QqZF2DuaoqVjwiN9do2L0L0iqgnBFTUCS8wTtZtY60JwWvePeEyrd+e/U9EuEEbqkBET38/kRhE/Yp6mmFfLEwlQbMjyHPTH47suom3QvukuKb5In2atN/oXMABF+u1dEHtdllPBkx0= 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=HqoaDxWk; 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="HqoaDxWk" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-49048e043e5so1744725e9.1 for ; Fri, 22 May 2026 05:34:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453268; x=1780058068; 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=vMlIJr0UEjBMHNhPJ63udc9c/uXuEqSnqN9pM/ii/fY=; b=HqoaDxWkj+EbAyRjFhvsMl0E5lEU6Sh1cB/ef/JXsIDOu8skIwLb2xXfivS3Isia1x P4dOPHBtUHbyxqdMKF452WrhD+BsGfb/o4mg3OfOFA+MTUiO8yv4rTWTK8bwkVxcJG9b xsMosTBYdSD1d3GyjFm81Fnlo41szg/bKg+ybppa9HK51nzkyHf7OX1FliiZ4V53ETwU WQIHQDv04Tv4wW1jWz5GeD9WFRL/E3VrX3OtpKVOXuZdwP21mRBam+ubvzu8p7/Fsmo3 YoEjr3wUwy19f+3xkdNHh/f13Vu+9WY6U4WS1jjptnmwnLGqCkC2DcIK9s6q8JBoMPEm eXAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453268; x=1780058068; 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=vMlIJr0UEjBMHNhPJ63udc9c/uXuEqSnqN9pM/ii/fY=; b=a3j7htaNVcoW9KYN9UfEyEbMy7Qw5NnJFMF5PJkMIlTizvU+4K8s85IRzMQM+8prt6 x17Ujq7FIMe51eTLAMqu8fp2u82LaVL5Qw3XFnvu80KunF5vp3YgGvTYbSK9Le2opiqp lTnymCmUz1fjB9dwCuXlXOm3o/PXFlGRPVhq2Kac5PZvaWJhI2LIh4ZeDkkp+Hte4dD+ CIKav2dgm5KNfG5uMg/M19DNos5+15DL5ysrwdQ6uVDiuW2i8thfqBQ4RfKOa/wGugOU 6V6uEwFh5yQIp6W4UrAxbDi108MFyUl+yUEQbWrZrPzOxr7YxuJEJhrx3nG5KnSC++Vp ixWg== X-Forwarded-Encrypted: i=1; AFNElJ8PnE4iScxmATw6IHy8umBmL0xJY7YgNcuakFOcJ+8/DTxa55A2cH2nSPZSpK0h9crkOJvLLbwBlkkE3jM=@vger.kernel.org X-Gm-Message-State: AOJu0YyF9MYePJJo9FxXq9653SyV/W10FNK7jvUozo98xmZMD23uZpNp dLvjcSYXDyL5oOu5bGsnl+TAUFbfpsALFjg4hyyqoavsvx7Pqld7iyhT X-Gm-Gg: Acq92OHYWGwxDR29IrddQs9wBpDWoN0T3OdG/8rzCX2dibr6YyGa7VhgXdc8zi4rye5 PZjCWBkVPiW3cmypLXnOjbFKld4b+rhaDcKjxazIWyVR18mh4a6zNuWbrd93Ly/Wkk1rPc7d35y 13h8Sph6HUyOzgu3augWa76z/SjS0iuLbomxuirS9HbC64E1x1afXYpFjCgf4FZR7zEV/82eix/ E7Z1E9B3K8cE90BfXt088suxD1fRxnsww1UTwCISbj6ls4EwijlRtgwuU6nIxHiCareyYzXfjPB JFqI8tg3F8U/5qAg/p+Th8imK41EJMvPQjz3e4MGcduJQ1nDtKKHWi8A+yaDGBz8iN+lJODNC+q 8ya6adf90NnPN4Q43G21Lykv08Wh3RWaB7JYlBmPA8Moagyrr4GqVnTupIhiIBYsq9BbmlmuNj2 7t4kqDvd2wdEdILwTBPsplLUL5kLYGWFUeVu1cNLHmoy9YHuHp2yppS2CQHhsZXdg= X-Received: by 2002:a05:600c:4ecc:b0:48f:e249:4094 with SMTP id 5b1f17b1804b1-490426d4bf0mr45733275e9.18.1779453267839; Fri, 22 May 2026 05:34:27 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:27 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 6/8] iio: tcs3472: use local struct device * for remaining cases Date: Fri, 22 May 2026 14:34:17 +0200 Message-ID: <20260522123420.45495-7-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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" Use the local 'struct device *dev' variable introduced for the devm calls also for the dev_info() calls in tcs3472_probe(), to keep the probe function consistent. No functional change. Signed-off-by: Aldo Conte --- v3: - New patch drivers/iio/light/tcs3472.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 4966abf83c18..f74e6633db45 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -480,9 +480,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 --=20 2.54.0 From nobody Sun May 24 18:41:56 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 B8D803C0601 for ; Fri, 22 May 2026 12:34:30 +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=1779453273; cv=none; b=i+XQErsuIdYMT+ua6Q5P6lRPE0Ce7EgsAChvUNb3EEyKZFolTS43ND86qqA3VYkFLws1vhVqQuf6ETHpO2SGdmWiaoXBC/1h3XyNVYbEMoWP4eSRVV0Rju2UI5pfKhbhRmFHW4moXJ6/GmfzNowFY00O5WWUZTEo+4fGrsJNrdY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453273; c=relaxed/simple; bh=HrONuiDMQBsyQKK/Qw9EDIlYqlICs8puzZEsFzw3q6E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=fhbaukiZIX8G4Y6NeMRSO8j0+YEALusnoeh1uMtvYm/GWArpEB0fDCXubjVMQo54bUEF+5kjAllfVLIdgcadythlXbNNve0J9A8u+xccoF+ltkgiYlnGdVFzmjMRKhad76PlvyCDN4fDOodChWgBaKR6IriIm61IB6mCLj2b/XA= 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=e+8zUTAY; 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="e+8zUTAY" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-48a7fe4f40bso84296015e9.0 for ; Fri, 22 May 2026 05:34:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453269; x=1780058069; 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=lhPK+WD3x7b1l7d6v6GZpCF931oi4rpE7Ri3gLPt+mY=; b=e+8zUTAYeTtU7iRnrBsiA4h6lrmOS8t56vvnTk4OaWHmQUv0vl/RN5cAGZ2AoBP0D3 gv74p0j3+QApIZvAvMYTtUcpoY5GxreuS3MXHN6F1V9sZ+h8kOfAD6BOuw1zrVoJeXua 3h0ryIK4DLMzUP3zdBi5L16bOGLwuMbtzV/zQl176JBdLd8fH5aGNjYMiGP6mURWjJNj KiCoxAtF5g5RIA9JtrkvVJLs14H5XE5anJ2Z9cLqGa/Yb4RA/j4C+dL2t5qxKzsSzXIU jl0dlcBjnlOcLtH7ZB0Q4nrF+Yh0IVE26g969hGCQAynTmhC5vjR608KAaNftR4tM9pl Hc3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453269; x=1780058069; 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=lhPK+WD3x7b1l7d6v6GZpCF931oi4rpE7Ri3gLPt+mY=; b=KFM+I/y/h6nHgEkN9bqH7qLraLXVMf3z6mOiztqyE9LLangIwkBMu6h8rKXlHjUG/U JwHWKsdjUBdynKwB8ix6Vb49HOSQ92+MRZ/bhwnXZBgNCkRuu6gdRQd+UW8W/C3OO/qg nWPQXD8n+4atSgwtZX+DHGF2K2+/3jDO6SOE8TGa528pPOzwcAAZZRur49DkYEads5kZ v4pd4of7xcrXmmyGyoLQHqeroUWhfOXl69nYxLuxbyb5G9aV+jE9mLQTYj/lYapnZ2Bf JLKmHQOBvz1G/uCOZCpR/pSnXdeYxRYNt5RzBECJasXduahN3qbj+LSiIkSjK453OmdD J7Yg== X-Forwarded-Encrypted: i=1; AFNElJ8pltlmh/rLSnlkPL1IuEv58ZdHcGvc1BKDm8ZyMSiPBZVWOjzV+0v3tbWA3GUbfM+UaYY6MhPZtaA00eQ=@vger.kernel.org X-Gm-Message-State: AOJu0Ywj7L4NUi6Fe6Nux+LfkQrm0WtYowwQTWLyIjb19DKFv2alP/rK kRwclUigRRyQzJgBjHVF56BnaL/8CTGtnHcM62wT8Jwjq87GZkUngx42 X-Gm-Gg: Acq92OGCe0m4r3alFpk7zXfEQfjXuEkJPp2SJ4JjF//W21E3rhoBWePWR9VzrgDDxZz fVqb2kTSEegmjzbD7LYR2WlRETxLXwD1ynUUsxasoO/9/d3gpRfE24kAxejsxOiqKqrX06orfjz QhrL1kn5htIIY4Fpk34AS6Loa9zC6xH1C/ToXvi7nr5iBduaiDffjZRh2p41w0KRZpe1bqx4L2v dbkPU6x4R7ee69lN/9ASSBTRxcszECseRyu+yMQ4bMIoTgMFemony951b0rTMU/BLRK5lovOTEY LNKmculi3nVIZ1TavMrTMTwt1lPZlEqPtAlSaz1yJaTIZEJ7aRdRQnM0+uvngbfpKXjdSxGSd7S VMh+XBe98vvLHxFqxujryBED5i5K+qFJp4U5DB5WpqVI0GUxdMwXhhI7CsXYJgx+ibW6tnqV6rG 8zRPUJRoRVmCZ0IXu+hv3xTc3gpTqcl4FFc76zkeknId51bTZLEqQ92jMeLc2z/gg= X-Received: by 2002:a05:600c:1393:b0:489:c57:7836 with SMTP id 5b1f17b1804b1-490428e5b31mr47285995e9.27.1779453268890; Fri, 22 May 2026 05:34:28 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:28 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 7/8] iio: tcs3472: move standalone return to default case Date: Fri, 22 May 2026 14:34:18 +0200 Message-ID: <20260522123420.45495-8-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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 Reviewed-by: Andy Shevchenko Reviewed-by: Joshua Crofts Signed-off-by: Aldo Conte --- v3: - No changes. 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 f74e6633db45..1f597ca93697 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -166,8 +166,9 @@ 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; + default: + return -EINVAL; } - return -EINVAL; } =20 static int tcs3472_write_raw(struct iio_dev *indio_dev, @@ -204,8 +205,9 @@ static int tcs3472_write_raw(struct iio_dev *indio_dev, =20 } return -EINVAL; + default: + return -EINVAL; } - return -EINVAL; } =20 /* --=20 2.54.0 From nobody Sun May 24 18:41:56 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 7E43E3BFE3F for ; Fri, 22 May 2026 12:34:32 +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=1779453274; cv=none; b=cs3+1hfYoS9iWrkDjnot4NfGMAwYihk6p7L5rhZg0vUI/zMT80onYCl7mAanFwyacflwaocBbusz5ijOELTs/6K3stX8ltnU3IA/X5o9D4+QXlhkRm0Bza89wqaNBuM8H8HctDGNdSlnDv+/W72dEvVIcE6BQHauIVCdFbsm/0U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779453274; c=relaxed/simple; bh=jLIetl3bw+rGRVsSOLu2Ojvxtoke28aurnf/TdWdbpk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ajic14XmikBb4QRZADvLajuQhFGpRdjMfR7K9MOfs+TWRV0+oqFa3vPv+18iQU1IWyX/nHsEdW7u3PvqA5hYiCns841emskO/RzmTGCGpxTktsFEG+3IdTHuwwBllr+aKy8xzgAp/ERjFWo4dShSpWzbwXH8ltWkNjcDbU9AHrY= 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=j0/M0g4f; arc=none smtp.client-ip=209.85.128.49 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="j0/M0g4f" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-488b0e1b870so100166665e9.2 for ; Fri, 22 May 2026 05:34:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1779453271; x=1780058071; 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=kBHfwNqSSbcbmu1tCJQeuwrmbxj6QOr0hRnUh3SugBs=; b=j0/M0g4fQ3JXfPZ7VA43IM6jjj18preqbBN1LDzltrVil6ubo9nagTpKAlNXIzuNZD mhXMlui1wI5abL28tpCL+tIuBqpXKbbvgnKFtTeyFthIhyXwH3Q11hqrdtTASyDW1aNC 8X1o+18P9ftUYwgmIKa1T2cYgvlO79d3K8YhdjZUYy3tIM4ADfOC0F5wHkJIv5nOyUUA b68nIsONfi5qxq7NBIQVG++DsOntNYcNIrcEOIf8/CHUmqG75iw5X1DXaZlgQyKroXZ8 mZN+O8kxHVYxWHrahBWxBAKWjLZbxXaDHq3lF+zvT17+VwNhjNIZG3Lh9uq+oQQWsIOL QLFA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779453271; x=1780058071; 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=kBHfwNqSSbcbmu1tCJQeuwrmbxj6QOr0hRnUh3SugBs=; b=NxQz02nmxfBBwOHKOQagwdAkA8zMZbwQBYb9AD3NAPhyzTw60Gj1G7DjSSNCQ9XbS0 WaQAhGN1ZAXvJ1+L1sGrENrXuHmA8jAOqSKVD9ESp0eBjblUk46xWgUubNXHIgxpckhE 6ovzpEFROVNhiaMHizavF0d9yJeQ/uUAYQjnZG+dGGZpX/fIWG3WVvVR2iB93v6CaH7D fv1sPbfCvEEEw8c4ygZD3kbILhiLBJgS9pVw2nGJzXtQwvrxRxJ9jUgGWiOw1sMtn+Qs NNjrxmpwqHKKJulQO29jlKY1dQo8B1ATfwvCcU9bYxJL0O+l19s8V7b82sFsRe02r/Xj 42NQ== X-Forwarded-Encrypted: i=1; AFNElJ829gqCWVvHVD4d8Eg5Nj6b2mukAn/oDcNMiK6ufSplh2OkL9bg1X6C7I+L8wi3wtqz7wmxUvWslfrvx+Y=@vger.kernel.org X-Gm-Message-State: AOJu0Yx8fMskWGLikYH/cUiW/i4Yeryaxb5dv6vnASHJeQ/EiK/dP5N8 Kfgw52rwnU7nh1WMQcyMU7cQVgiTxqNBPrVcURwiCSloghDpvkl8V817 X-Gm-Gg: Acq92OHvwiEXc+oYw+PVLlqL3oSGZVtOrm/wLC3EYLSDPIOYD8oflj3ecQE5utAfu/b e9v66dIom2Ii4lMEGNly/mHHkij9cIOG/nkVG6XXUFVApwfWbVuUv8eavwMNfaXmicAH3mlvY1G ewUbLuVqoB5FsEUZXV9/hWYnC4D1CPJvASsEeYEWtqAnIr03RQpm9WrftZEouSRafYcKuA8zO7D b7/g2jJ0ZZ89ApOn+LDI62gduVz0HV2ANPk0SlCdVyMa2p2wyKa0NCt8+oglFW77qW2wQXRIN/6 HyMvrkGRlYqAq6SeDth3Gc0keoDUjkJ2K2PVN3mK6o+gpkMMvjBtQSPzGPBCMgQux3wbmpE8tfq HHeTG8CW229Z6/QTGs+8F089mKQio6smHamKydi21kQpBUn+pMxCCrzFTQ6S+Ff8ZdSgTXJ+N55 bMerNBjnRg2vYp+L1IZalgBcLPK0Te87QFV+n43jTrUfM5EGHedYZU X-Received: by 2002:a05:600c:3581:b0:490:482c:4391 with SMTP id 5b1f17b1804b1-490482c4586mr25441665e9.23.1779453270809; Fri, 22 May 2026 05:34:30 -0700 (PDT) Received: from aldo-conte-t14.tailf68ad9.ts.net ([217.61.173.50]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49042af0ac1sm14760175e9.31.2026.05.22.05.34.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 May 2026 05:34:29 -0700 (PDT) From: Aldo Conte To: jic23@kernel.org Cc: dlechner@baylibre.com, nuno.sa@analog.com, andy@kernel.org, shuah@kernel.org, joshua.crofts1@gmail.com, linux-iio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-kernel-mentees@lists.linux.dev Subject: [PATCH v3 8/8] iio: tcs3472: implement wait time and sampling frequency Date: Fri, 22 May 2026 14:34:19 +0200 Message-ID: <20260522123420.45495-9-aldocontelk@gmail.com> X-Mailer: git-send-email 2.54.0 In-Reply-To: <20260522123420.45495-1-aldocontelk@gmail.com> References: <20260522123420.45495-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(). In tcs3472_resume(), only PON and AEN are re-asserted while WEN is preserved from data->enable. Remove the "TODO: wait time" comment at the top of the file. Signed-off-by: Aldo Conte --- v3: - Drop Suggested-by: Andy (inappropriate tag). - TCS3472_ENABLE_RUN: new style. - cycle_us: use div64_u64(). - cycle_us: cast val to u64 for 32-bit safety. - wait_us: keep s64; added comment explaining the range bounds. - Use 'if (ret)' instead of 'if (ret < 0)' after i2c writes. - New helper tcs3472_cycle_to_freq() deduplicates val/val2 logic. - !! -> ? 1 : 0 in probe. - Fix tcs3472_resume(): preserve WEN from data->enable instead of forcing TCS3472_ENABLE_RUN. drivers/iio/light/tcs3472.c | 245 +++++++++++++++++++++++++++++++++--- 1 file changed, 227 insertions(+), 18 deletions(-) diff --git a/drivers/iio/light/tcs3472.c b/drivers/iio/light/tcs3472.c index 1f597ca93697..81549d7eba35 100644 --- a/drivers/iio/light/tcs3472.c +++ b/drivers/iio/light/tcs3472.c @@ -9,8 +9,6 @@ * TCS34727) * * Datasheet: http://ams.com/eng/content/download/319364/1117183/file/TCS3= 472_Datasheet_EN_v2.pdf - * - * TODO: wait time */ =20 #include @@ -53,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 { @@ -91,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, \ @@ -114,6 +121,47 @@ static const struct iio_chan_spec tcs3472_channels[] = =3D { IIO_CHAN_SOFT_TIMESTAMP(4), }; =20 +/* + * The chip's cycle time is the sum of three components: + * - ATIME: the programmable RGBC integration time. + * - The fixed RGBC initialization time (2400 us). + * - WTIME: the wait time, used only if WEN is set. If WLONG is active, + * the wait step is multiplied by 12 (2400 us -> 28800 us). + */ +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 atime_us + init_us + wtime_us; +} + +/* + * Convert a cycle time in microseconds to a frequency in Hz and microhert= z. + * + * Given cycle_us =3D T (the cycle period in microseconds), the correspond= ing + * frequency is: + * f =3D 1e6 / T [Hz] + * + * The result is split into the IIO_VAL_INT_PLUS_MICRO format: + * val =3D floor(1e6 / T) [Hz] + * val2 =3D (1e6 mod T) * 1e6 / T [microhertz] + */ +static void tcs3472_cycle_to_freq(unsigned int cycle_us, int *val, int *va= l2) +{ + *val =3D USEC_PER_SEC / cycle_us; + *val2 =3D div_u64((u64)(USEC_PER_SEC % cycle_us) * USEC_PER_SEC, + cycle_us); +} + static int tcs3472_req_data(struct tcs3472_data *data) { int tries =3D 50; @@ -166,16 +214,131 @@ static int tcs3472_read_raw(struct iio_dev *indio_de= v, *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); + + tcs3472_cycle_to_freq(cycle_us, val, val2); + return IIO_VAL_INT_PLUS_MICRO; + } default: return -EINVAL; } } =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 div64_u64(PSEC_PER_SEC, + (u64)val * USEC_PER_SEC + val2); + + /* + * wait_us can be negative when the requested frequency is too high + * to be reached, or very large when the requested frequency is + * close to zero. Use s64 to cover the full range: + * + * cycle_us =3D PSEC_PER_SEC / (val * USEC_PER_SEC + val2) + * + * The divisor of the formula above reaches its maximum when + * val =3D val2 =3D INT_MAX: + * INT_MAX * USEC_PER_SEC + INT_MAX =3D ~2.15e18 + * so cycle_us_min =3D floor(1e12 / 2.15e18) =3D 0. + * + * The divisor reaches its minimum (1) when val =3D 0 and val2 =3D 1, + * so cycle_us_max =3D 1e12 / 1 =3D 1e12. + * + * Therefore: + * wait_us_min =3D 0 - 2400 - 612000 =3D -616800 + * wait_us_max =3D 1e12 - 2400 - 2400 =3D 999999995200 + * + * Both fit comfortably in s64. + */ + 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) + 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) + 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) + return ret; + + data->wlong =3D wlong; + } + + ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_WTIME, wtime); + if (ret) + return ret; + + data->wtime =3D wtime; + data->target_freq_hz =3D val; + data->target_freq_uhz =3D val2; + + return 0; +} + static int tcs3472_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask) { struct tcs3472_data *data =3D iio_priv(indio_dev); + int ret; int i; =20 switch (mask) { @@ -196,15 +359,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) + 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); default: return -EINVAL; } @@ -434,16 +611,15 @@ static const struct iio_info tcs3472_info =3D { static int tcs3472_powerdown(struct tcs3472_data *data) { int ret; - u8 enable_mask =3D TCS3472_ENABLE_AEN | TCS3472_ENABLE_PON; =20 guard(mutex)(&data->lock); =20 ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, - data->enable & ~enable_mask); + data->enable & ~TCS3472_ENABLE_RUN); if (ret) return ret; =20 - data->enable &=3D ~enable_mask; + data->enable &=3D ~TCS3472_ENABLE_RUN; =20 return 0; } @@ -458,6 +634,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)); @@ -498,6 +675,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) ? 1 : 0; + ret =3D i2c_smbus_read_word_data(data->client, TCS3472_AILT); if (ret < 0) return ret; @@ -518,14 +705,29 @@ static int tcs3472_probe(struct i2c_client *client) if (ret < 0) return ret; =20 - /* enable device */ - data->enable =3D ret | TCS3472_ENABLE_PON | TCS3472_ENABLE_AEN; + /* + * Enable the chip in its full running state, including WEN. The + * actual wait time is controlled by the WTIME and WLONG registers, + * which retain their power-on defaults until userspace writes to + * sampling_frequency. + */ + 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); + tcs3472_cycle_to_freq(cycle_us, &data->target_freq_hz, + &data->target_freq_uhz); + ret =3D devm_add_action_or_reset(dev, tcs3472_powerdown_action, data); if (ret) return ret; @@ -561,16 +763,23 @@ 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; =20 guard(mutex)(&data->lock); =20 - ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, - data->enable | enable_mask); + /* + * On resume, only PON and AEN need to be re-asserted. WEN must not + * be forced on: its desired state was set by the user via + * sampling_frequency and is already stored in data->enable, so we + * read it from there to preserve the user's choice. + */ + value =3D data->enable | TCS3472_ENABLE_PON | TCS3472_ENABLE_AEN; + + ret =3D i2c_smbus_write_byte_data(data->client, TCS3472_ENABLE, value); if (ret) return ret; =20 - data->enable |=3D enable_mask; + data->enable =3D value; =20 return 0; } --=20 2.54.0