From nobody Mon May 25 06:42:07 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 DABA724CEEA for ; Sun, 17 May 2026 13:48:46 +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=1779025730; cv=none; b=bDmp+KaOKx3WcEzllo3pIbzLT3ldG8WhrEs6+U0PBnVTpwHcoJGoqHnGwiFrkLx+yTkoZ7u3pK6QEoK5KNWRZRp2L+I2RFcQue0DlpHirVDGFMPdpY6NE93zuuM8xuo3EB/0wttWkFWuyNeO669zX46i+rwuXi/aj1WBCrzad7w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1779025730; c=relaxed/simple; bh=llm3BR9vyJRLkM+KxZg8kzpo9X0LN60HerxEE8MpOlI=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=dBdJKylMK5lSOkA1KO0K8to93YKk67XINKyMXNgHNTZuoRDtF4GdnV8ZKDWn46jgH9Tv0vZIpK36aXWIbFz3JGueUdlarTy1WuJHVM+0v1m35+tgjY2XH3dY5RtdjkZVA2p9O2MZtG/ruSPk18IgcAewpGE5wqP+fAf+wU0/h50= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com; spf=pass smtp.mailfrom=baylibre.com; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b=wtbcRcjs; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b="wtbcRcjs" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-48d146705b4so14305165e9.3 for ; Sun, 17 May 2026 06:48:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1779025725; x=1779630525; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=/HO/Q9WW5c2MsVl938awFdYf6dLUefJDaTnkMc5UHgA=; b=wtbcRcjsh6c36rhvE0CoCPXYItIZQNjkEV0PwJPmI/r6UVHgg70v6f2bdPm2lwU6jl PBc0OawMaWbjgpU4e7WqzJFtKoJqcK3ZGgTGK6mK+LmwOvQbODGZn/i0y1awQOThItmn rq7k2cvsfMHpwNDekNIfLDJLZa1ftHkAHUfw2+e4nYJDX2FEaWFbNKkq3v4SAcsLIl4g wgARhK37YfC3ALdsOTNaf1dpGX6xW6uOij+qBGWIH8cN4JWTZRmOo2V6JO4WBOA7GL/G l4b36c3UZ5JuoVjk94T0bL1/nIEwner4A+rdFbjumNb5Y8ZDUV8YBooenEP2E4Od0Ggr 7hAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779025725; x=1779630525; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/HO/Q9WW5c2MsVl938awFdYf6dLUefJDaTnkMc5UHgA=; b=V+iszEx/bhhzXD3FWc3UGLXQ7BU4nZO8iswnYmOSQG4YGp7hkxDr9kSrJLYiFsSYu6 2XvXbJb3A4X7x/3cJnmTEYVVZaBdQ3pBeVukEa8Hx5+w7SsuM+GQmTetR9gD8PLPXje/ VYrwP+P6j5dlkxVFMJdZmncvhCxHKqVwqOGiQnlxbArh7zOx2nNEtwxEAMP4SaSzzarF IN6bTLCXyy7hSETTcVICX3izyVpdqWSS47nI3aY0A7hkIpTzNaDiEhvVAXeKT7iLEWn9 8sWyanZvIK6lx6+2iQfCAUJAhSc6iSeHIAn7IsGur+1dlO8VTj2H5Lso+AQsjbLzUtIy +wpg== X-Forwarded-Encrypted: i=1; AFNElJ/r53zGN1O6aS0YI8a9bbIegJIl37C//TDS4fNytYg7SbvIGloAdWfew40u+Flb7f1eTyNkj/1QrmKzfeQ=@vger.kernel.org X-Gm-Message-State: AOJu0YxW7L72BdjAYKzHRGB2rTU9LPN8uQIOIsrMee2goYu602mf9Ma+ 5AjAyDtMa90X4Zn11JwIdrlwjYvKZBuzEnXweDCiNhv4JcnI3hv+wNBaH1j2xb738+c= X-Gm-Gg: Acq92OH70HrLdTOjn1VwCjIZHKvJ3eRrV1mva6YaaFNhhE1aPStM4aw6FODDQ0X4hLt yLWCOBJQQa6zgLGQRljwLRLd/xqHQoaEzjPt2Pfc6uEDgT8j+Y2SruT4Mf8JzOqtrJdaRL0motI gNpTfpcvr6ZZBL2OfZEtz07Y7yIiFsBtXApI2Fl4aBuQ7hQ2kJXSGOrlyw2epPuKglNC7mIF/qX lNyfQiWclvIulbacvKMnj7fdtD/NSvbUAVLiIotuOAx1gHP+3I0K9tw5RGizSy8trFA+QqWbd6L NPY/09fvl55vm6izsgAr0Bb4CY46N8f9sRCSjhvBY6xYdYGHAgx1JdPRlbpCg5vDebVm4n6GI4f MX/ErCtRp7xTOUatiIPpu4Nju1nzls5VO3mPjVyPkxNu14w2vKEdm5vAT62ioAQ5odycTp8LqIz L2VEKuXhHRo/hYSHS2iLXeEeLAe3vykSqbq0FwMDp0sV6Al0uKmA== X-Received: by 2002:a05:600c:3b07:b0:489:1a3a:9e45 with SMTP id 5b1f17b1804b1-48fe651e127mr163181715e9.26.1779025725294; Sun, 17 May 2026 06:48:45 -0700 (PDT) Received: from localhost ([2a02:8071:56d1:2de0:1d24:d58d:2b65:c291]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-48fe5694f2csm192364145e9.4.2026.05.17.06.48.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 17 May 2026 06:48:44 -0700 (PDT) From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20=28The=20Capable=20Hub=29?= To: Linus Walleij Cc: Patrick Rudolph , linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v1] pinctrl: Use named initializers for arrays of i2c_device_data Date: Sun, 17 May 2026 15:48:35 +0200 Message-ID: <20260517134835.588648-2-u.kleine-koenig@baylibre.com> X-Mailer: git-send-email 2.47.3 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Developer-Signature: v=1; a=openpgp-sha256; l=7455; i=u.kleine-koenig@baylibre.com; h=from:subject; bh=llm3BR9vyJRLkM+KxZg8kzpo9X0LN60HerxEE8MpOlI=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBqCcczX5WHIjQVgJIrdoab0TzuSsPtITk8KvT5/ JAqnUNJWDiJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCagnHMwAKCRCPgPtYfRL+ TqE4B/0RaZuWgXIK3/Z0rsG/rgO7lPj5ln4snG0CNP2zZINlX2N3/htR3zo0iGvAmOZLWHuQDLZ XpzGgogsvJxbnIX+RzSy3+UC5AylhoVO1u4TbP1E39l9m9PSX1yCtC7dL04VqeHSZACfh0/DFlh I4ni+YLIvuX5j2lnC+1QZzh0uAVDTS1gbK62uwDH7P9ndwd4OwVl9ABRT4e7+DDeaWJGykW5pGW Y1/mD9Wv9DzXEkEkddGV14mxAk6PgvjvA8x2NIV1mR+uBOtmduEotYyOjTTfgswiqP8aypzmSwQ hRDIMQHbUdrC05aBmd7PdFzGhOVTRJ9sztPOkhIu7NjGHZZt X-Developer-Key: i=u.kleine-koenig@baylibre.com; a=openpgp; fpr=0D2511F322BFAB1C1580266BE2DCDD9132669BD6 Content-Transfer-Encoding: quoted-printable While being less compact, using named initializers allows to more easily see which members of the structs are assigned which value without having to lookup the declaration of the struct. And it's also more robust against changes to the struct definition. The mentioned robustness is relevant for a planned change to struct i2c_device_id that replaces .driver_data by an anonymous union. While touching all these arrays, unify usage of whitespace in the list terminator. This patch doesn't modify the compiled arrays, only their representation in source form benefits. The former was confirmed with x86 and arm64 builds. Signed-off-by: Uwe Kleine-K=C3=B6nig (The Capable Hub) --- Hello, the mentioned change to i2c_device_id is the following: diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetab= le.h index 23ff24080dfd..aebd3a5e90af 100644 --- a/include/linux/mod_devicetable.h +++ b/include/linux/mod_devicetable.h @@ -477,7 +477,11 @@ struct rpmsg_device_id { =20 struct i2c_device_id { char name[I2C_NAME_SIZE]; - kernel_ulong_t driver_data; /* Data private to the driver */ + union { + /* Data private to the driver */ + kernel_ulong_t driver_data; + const void *driver_data_ptr; + }; }; =20 /* pci_epf */ and this requires that .driver_data is assigned via a named initializer for static data. This requirement isn't a bad one because named initializers are also much better readable than list initializers. The union added to struct i2c_device_id enables further cleanups like: diff --git a/drivers/iio/accel/kxcjk-1013.c b/drivers/iio/accel/kxcjk-1013= .c index 8a082ff034dd..b2aac7348d22 100644 --- a/drivers/iio/accel/kxcjk-1013.c +++ b/drivers/iio/accel/kxcjk-1013.c @@ -1429,7 +1429,7 @@ static int kxcjk1013_probe(struct i2c_client *client) =20 if (id) { name =3D id->name; - data->info =3D (const struct kx_chipset_info *)(id->driver_data); + data->info =3D id->driver_data_ptr; } else { name =3D iio_get_acpi_device_name_and_data(&client->dev, &ddata); data->info =3D ddata; @@ -1630,11 +1630,11 @@ static const struct dev_pm_ops kxcjk1013_pm_ops = =3D { }; =20 static const struct i2c_device_id kxcjk1013_id[] =3D { - { .name =3D "kxcjk1013", .driver_data =3D (kernel_ulong_t)&kxcjk1013_inf= o }, - { .name =3D "kxcj91008", .driver_data =3D (kernel_ulong_t)&kxcj91008_inf= o }, - { .name =3D "kxtj21009", .driver_data =3D (kernel_ulong_t)&kxtj21009_inf= o }, - { .name =3D "kxtf9", .driver_data =3D (kernel_ulong_t)&kxtf9_info }, - { .name =3D "kx023-1025", .driver_data =3D (kernel_ulong_t)&kx0231025_in= fo }, + { .name =3D "kxcjk1013", .driver_data_ptr =3D &kxcjk1013_info }, + { .name =3D "kxcj91008", .driver_data_ptr =3D &kxcj91008_info }, + { .name =3D "kxtj21009", .driver_data_ptr =3D &kxtj21009_info }, + { .name =3D "kxtf9", .driver_data_ptr =3D &kxtf9_info }, + { .name =3D "kx023-1025", .driver_data_ptr =3D &kx0231025_info }, { } }; MODULE_DEVICE_TABLE(i2c, kxcjk1013_id); that are an improvement for readability (again!) and it keeps some properties of the pointers (here: being const) without having to pay attention for that. (I didn't find a good example in drivers/pinctrl, so an iio driver was used to demonstrate the gain.) My additional motivation for this effort is CHERI[1]. This is a hardware extension that uses 128 bit pointers but unsigned long is still 64 bit. So with CHERI you cannot store pointers in unsigned long variables. Best regards Uwe [1] https://cheri-alliance.org/discover-cheri/ https://lwn.net/Articles/1037974/ drivers/pinctrl/pinctrl-aw9523.c | 2 +- drivers/pinctrl/pinctrl-cy8c95x0.c | 6 +++--- drivers/pinctrl/pinctrl-mcp23s08_i2c.c | 6 +++--- drivers/pinctrl/pinctrl-sx150x.c | 20 ++++++++++---------- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/drivers/pinctrl/pinctrl-aw9523.c b/drivers/pinctrl/pinctrl-aw9= 523.c index 02a24ac87ea4..bc94003512cf 100644 --- a/drivers/pinctrl/pinctrl-aw9523.c +++ b/drivers/pinctrl/pinctrl-aw9523.c @@ -1033,7 +1033,7 @@ static void aw9523_remove(struct i2c_client *client) } =20 static const struct i2c_device_id aw9523_i2c_id_table[] =3D { - { "aw9523_i2c" }, + { .name =3D "aw9523_i2c" }, { } }; MODULE_DEVICE_TABLE(i2c, aw9523_i2c_id_table); diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-c= y8c95x0.c index ace0be5ec679..093ae7c1dae5 100644 --- a/drivers/pinctrl/pinctrl-cy8c95x0.c +++ b/drivers/pinctrl/pinctrl-cy8c95x0.c @@ -1461,9 +1461,9 @@ static int cy8c95x0_probe(struct i2c_client *client) } =20 static const struct i2c_device_id cy8c95x0_id[] =3D { - { "cy8c9520", 20 }, - { "cy8c9540", 40 }, - { "cy8c9560", 60 }, + { .name =3D "cy8c9520", .driver_data =3D 20 }, + { .name =3D "cy8c9540", .driver_data =3D 40 }, + { .name =3D "cy8c9560", .driver_data =3D 60 }, { } }; MODULE_DEVICE_TABLE(i2c, cy8c95x0_id); diff --git a/drivers/pinctrl/pinctrl-mcp23s08_i2c.c b/drivers/pinctrl/pinct= rl-mcp23s08_i2c.c index 94e1add6ddd7..f3dffa3c74d3 100644 --- a/drivers/pinctrl/pinctrl-mcp23s08_i2c.c +++ b/drivers/pinctrl/pinctrl-mcp23s08_i2c.c @@ -67,9 +67,9 @@ static const struct mcp23s08_info mcp23018_i2c =3D { }; =20 static const struct i2c_device_id mcp230xx_id[] =3D { - { "mcp23008", (kernel_ulong_t)&mcp23008_i2c }, - { "mcp23017", (kernel_ulong_t)&mcp23017_i2c }, - { "mcp23018", (kernel_ulong_t)&mcp23018_i2c }, + { .name =3D "mcp23008", .driver_data =3D (kernel_ulong_t)&mcp23008_i2c }, + { .name =3D "mcp23017", .driver_data =3D (kernel_ulong_t)&mcp23017_i2c }, + { .name =3D "mcp23018", .driver_data =3D (kernel_ulong_t)&mcp23018_i2c }, { } }; MODULE_DEVICE_TABLE(i2c, mcp230xx_id); diff --git a/drivers/pinctrl/pinctrl-sx150x.c b/drivers/pinctrl/pinctrl-sx1= 50x.c index 1d6760ffe809..b59d913513d5 100644 --- a/drivers/pinctrl/pinctrl-sx150x.c +++ b/drivers/pinctrl/pinctrl-sx150x.c @@ -839,16 +839,16 @@ static const struct pinconf_ops sx150x_pinconf_ops = =3D { }; =20 static const struct i2c_device_id sx150x_id[] =3D { - {"sx1501q", (kernel_ulong_t) &sx1501q_device_data }, - {"sx1502q", (kernel_ulong_t) &sx1502q_device_data }, - {"sx1503q", (kernel_ulong_t) &sx1503q_device_data }, - {"sx1504q", (kernel_ulong_t) &sx1504q_device_data }, - {"sx1505q", (kernel_ulong_t) &sx1505q_device_data }, - {"sx1506q", (kernel_ulong_t) &sx1506q_device_data }, - {"sx1507q", (kernel_ulong_t) &sx1507q_device_data }, - {"sx1508q", (kernel_ulong_t) &sx1508q_device_data }, - {"sx1509q", (kernel_ulong_t) &sx1509q_device_data }, - {} + { .name =3D "sx1501q", .driver_data =3D (kernel_ulong_t)&sx1501q_device_d= ata }, + { .name =3D "sx1502q", .driver_data =3D (kernel_ulong_t)&sx1502q_device_d= ata }, + { .name =3D "sx1503q", .driver_data =3D (kernel_ulong_t)&sx1503q_device_d= ata }, + { .name =3D "sx1504q", .driver_data =3D (kernel_ulong_t)&sx1504q_device_d= ata }, + { .name =3D "sx1505q", .driver_data =3D (kernel_ulong_t)&sx1505q_device_d= ata }, + { .name =3D "sx1506q", .driver_data =3D (kernel_ulong_t)&sx1506q_device_d= ata }, + { .name =3D "sx1507q", .driver_data =3D (kernel_ulong_t)&sx1507q_device_d= ata }, + { .name =3D "sx1508q", .driver_data =3D (kernel_ulong_t)&sx1508q_device_d= ata }, + { .name =3D "sx1509q", .driver_data =3D (kernel_ulong_t)&sx1509q_device_d= ata }, + { } }; =20 static const struct of_device_id sx150x_of_match[] =3D { base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731 --=20 2.47.3