From nobody Fri Jun 12 21:22:23 2026 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0853D397AE5 for ; Tue, 12 May 2026 15:21:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778599296; cv=none; b=YFyVvlcXFUjSvmW3wjiw03tet5yz06uQD+W87aWqR0/zKxPAap6iN5repCA6qyuV5vl/uSpHEoArqpUiLnrqAYzNUsIv9y8aRQVQ/fEeFV3ixugaaY9igrRBF1LusKAta9nz6Fj47Z4umERENjprlnGzJVp8T3e2OVmaB/josO8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1778599296; c=relaxed/simple; bh=Gl9oc4mc/zxA99QeW0v4e5Ek2Ox01jBRjGnpUF+ZOJg=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=co0buefcSmuCDkkCdFDw2VTY36xU+HIYiVJha9YmZ9NmSn/Fx1jDE6Znbd5t4gayOC7okGkd+fmpD8TVROGCIpEabbdlDbICs7rgipZE+cL8yEZjmFGUrlmPdhLBbNGJ2F43mvCpWDMpyb6axQ04WkvXWOhvxbVd+vk2qgaVRL8= 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=ujHyxUnd; arc=none smtp.client-ip=209.85.221.48 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=baylibre.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=baylibre.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=baylibre-com.20251104.gappssmtp.com header.i=@baylibre-com.20251104.gappssmtp.com header.b="ujHyxUnd" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-449de065cb3so5153252f8f.2 for ; Tue, 12 May 2026 08:21:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20251104.gappssmtp.com; s=20251104; t=1778599292; x=1779204092; 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=/gPHbOJzv6pAI7J+8/BYSrMsKQuITf7Y/afIqiLHocw=; b=ujHyxUndH3HxUeeuKn0FcBJnXgcbCmJCatuz9OWmlpjp1R3E0C2Y4efuPKSJA1hqRy 3HqxcRuhaPOZ1GyCvCzAutKfqhD2z9A94hOo7/4SKYDPUBamdUX6qp4QGpldVGQVTd3U u27Frxu/l+RbbckfzHlgn1IX6aNLceejhFoJRke0PnP3a8bwXTR8cRMY5+Ed67+bNrgN aO+Diw/7W1EUK1UQBhw6MCY2LyryVhvGezKs6FmlupM9Qi2rQBUkY5n4I/xyuOF52EAZ GnjyKMw/gE50SAiRnNZry5Vi2jIR97HfpFamqfe6h3CJOiuSZRjCqRios22NRnYIXqUp s03g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1778599292; x=1779204092; 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=/gPHbOJzv6pAI7J+8/BYSrMsKQuITf7Y/afIqiLHocw=; b=d/yboHVTGEAEaWJK6FDiZUt28H7ioGBSEbj4NWCXd83AptqaDwBz2xyL0oMN14Ev/j nufiWMON+JO+ItHOP/rlKtALkV0Fes10M+PJFkmjebvIKDInEcJE/pVj0muHXklnIWv4 iTAkrw/1yT/EAbyT5pyQVcLQxZns00ZnzosCblbwyoZJpc4FGTwV2ALDh2AHuTOCKY8i AQJ4k5X/OszWfQ4T6j7GNym6EhpsT47iIjRT8zYFBrLDo8GUkcLrLbszzZx3+yh+vp7W NxYVMh/YRUTysp8h55nwyI/MgrWtEqu/jYKq+v/fPPgUn5JG7kHxfAR2Gem2itDjG3r3 aC1w== X-Forwarded-Encrypted: i=1; AFNElJ+4lJ6AiGNnyKnDwt9xivDK8+TBxH7H9yuFydTJDBynJLV43jblfuB9Y4m58sJTpadk476IDp0s3PxHiq4=@vger.kernel.org X-Gm-Message-State: AOJu0YxkwlF8Ue/J/YU8PLA/EDHDyE4vWzJqShyOhMtJ2w3Dou36Ae3/ KMaidVyMyEDVbm9hbJgdjjFXdOQZdLb3Ka3GWotjd3tiE2OhdpRvBtLZSvsZXhCSE3DQz/wf029 sqIU4 X-Gm-Gg: Acq92OFPnqRSEdqL3bkP5/h17mAYVz6hZTRLZ1BcvvdgS76KiPPkEAfnqJELUeJIILi W2TpLzjdNW4qZ1fVWadwuAkcCc2SuCkPNeDW6WhFG1gYuJEJK2XsfW66RaWloiQF5qJAEXxBxib vJQ3TAMTbkQ2HlQ22mZTTc2R69yvxiFh/HFn7UDd58I7Rpz+99OPK4PINm8xqHpMli0x0kW6zQu PhB4otmGmrwFBxiVYMc36Gt7+Gs/CYphjYgrJW1zG+TNK8ah2KY12lN3f3fFtXLAs4ZnSOS7qIN XSeVst2cFuJ74yjHieIaBPWhrNBmq9pSuWJxXhGDBmtgng85mL5FHTq3cFrlatfZHABR7Bt90Cu p8qCL/0oojFpNcF6aCm169XDS6QRjDjgmkInqxGB6/UxM54HdsYULFwH9HU67qCpZQfyeIbBiY9 2NrRrQl2EIvtq8I5iDzBedfeS2IXGNiLnOG3Kqtw8KKQo5JXBZOHAO9obgBV04/EzcIBBUlKRj6 uVZMvP0rU1wyB5YEtS1QrPNTw== X-Received: by 2002:a05:6000:2383:b0:43d:7dcf:ae26 with SMTP id ffacd0b85a97d-4515d4d107bmr49219238f8f.34.1778599292262; Tue, 12 May 2026 08:21:32 -0700 (PDT) Received: from localhost (p200300f65f114e08229f8c404acd2182.dip0.t-ipconnect.de. [2003:f6:5f11:4e08:229f:8c40:4acd:2182]) by smtp.gmail.com with UTF8SMTPSA id ffacd0b85a97d-4548ec6be40sm34729467f8f.12.2026.05.12.08.21.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 May 2026 08:21:31 -0700 (PDT) From: =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig=20=28The=20Capable=20Hub=29?= To: Linus Walleij , Bartosz Golaszewski Cc: linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH] gpio: Initialize i2c_device_id arrays using member names Date: Tue, 12 May 2026 17:21:25 +0200 Message-ID: <20260512152125.924433-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=9467; i=u.kleine-koenig@baylibre.com; h=from:subject; bh=Gl9oc4mc/zxA99QeW0v4e5Ek2Ox01jBRjGnpUF+ZOJg=; b=owEBbQGS/pANAwAKAY+A+1h9Ev5OAcsmYgBqA0V12e3BJfynoO/YF9n1hHI+DKVRRdZXET6Ws f2c3jh5IJuJATMEAAEKAB0WIQQ/gaxpOnoeWYmt/tOPgPtYfRL+TgUCagNFdQAKCRCPgPtYfRL+ ToT0B/9nOJ2GS2Fmx4f/pdsU48/ZUGT3TWwg7dItOsTQmA+xpcSoS/MqEf1GrvdSZReEcrp5Qph PNcsvHflfbGNA0imBgfwKB9X3DYKUlakFp9PJUD7bAnP/Fdj7gP7KlgnAqbrnTfVtxLIcj7ezpj 3fSSX9TMTqYczAwm42mCkLk0Jg1rz8jjlPqptvkQ6U3g+VgqaDcCuXNF+j++kAmXZTR87ciNEHZ YpDGO/JodppUIVDm4h/RMwcyhTsa2LMDURmMh7PnRG+wmmZ0PJnwO77Oy1H60N5LkMWuA56z/Fg 3n7ml3R5o3wctdi6pYSzUf4jBHdJD9iRAgrKBSQBWW1bCdRI 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. 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, I didn't find a GPIO driver that benefits from the continuation of my quest with the union in struct i2c_device_id. See https://lore.kernel.org/all/cover.1778582187.git.u.kleine-koenig@baylibre.c= om/ for an example in a different subsystem. But even without that, I consider the changes done here beneficial. Best regards Uwe drivers/gpio/gpio-max732x.c | 20 +++++----- drivers/gpio/gpio-pca953x.c | 80 ++++++++++++++++++------------------- drivers/gpio/gpio-pca9570.c | 6 +-- drivers/gpio/gpio-pcf857x.c | 26 ++++++------ 4 files changed, 66 insertions(+), 66 deletions(-) diff --git a/drivers/gpio/gpio-max732x.c b/drivers/gpio/gpio-max732x.c index 281ba1740a6a..24c67c912954 100644 --- a/drivers/gpio/gpio-max732x.c +++ b/drivers/gpio/gpio-max732x.c @@ -103,16 +103,16 @@ static uint64_t max732x_features[] =3D { }; =20 static const struct i2c_device_id max732x_id[] =3D { - { "max7319", MAX7319 }, - { "max7320", MAX7320 }, - { "max7321", MAX7321 }, - { "max7322", MAX7322 }, - { "max7323", MAX7323 }, - { "max7324", MAX7324 }, - { "max7325", MAX7325 }, - { "max7326", MAX7326 }, - { "max7327", MAX7327 }, - { }, + { .name =3D "max7319", .driver_data =3D MAX7319 }, + { .name =3D "max7320", .driver_data =3D MAX7320 }, + { .name =3D "max7321", .driver_data =3D MAX7321 }, + { .name =3D "max7322", .driver_data =3D MAX7322 }, + { .name =3D "max7323", .driver_data =3D MAX7323 }, + { .name =3D "max7324", .driver_data =3D MAX7324 }, + { .name =3D "max7325", .driver_data =3D MAX7325 }, + { .name =3D "max7326", .driver_data =3D MAX7326 }, + { .name =3D "max7327", .driver_data =3D MAX7327 }, + { } }; MODULE_DEVICE_TABLE(i2c, max732x_id); =20 diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c index 52e96cc5f67b..94bb1a9f9268 100644 --- a/drivers/gpio/gpio-pca953x.c +++ b/drivers/gpio/gpio-pca953x.c @@ -86,49 +86,49 @@ #define PCA_CHIP_TYPE(x) ((x) & PCA_TYPE_MASK) =20 static const struct i2c_device_id pca953x_id[] =3D { - { "pca6408", 8 | PCA953X_TYPE | PCA_INT, }, - { "pca6416", 16 | PCA953X_TYPE | PCA_INT, }, - { "pca9505", 40 | PCA953X_TYPE | PCA_INT, }, - { "pca9506", 40 | PCA953X_TYPE | PCA_INT, }, - { "pca9534", 8 | PCA953X_TYPE | PCA_INT, }, - { "pca9535", 16 | PCA953X_TYPE | PCA_INT, }, - { "pca9536", 4 | PCA953X_TYPE, }, - { "pca9537", 4 | PCA953X_TYPE | PCA_INT, }, - { "pca9538", 8 | PCA953X_TYPE | PCA_INT, }, - { "pca9539", 16 | PCA953X_TYPE | PCA_INT, }, - { "pca9554", 8 | PCA953X_TYPE | PCA_INT, }, - { "pca9555", 16 | PCA953X_TYPE | PCA_INT, }, - { "pca9556", 8 | PCA953X_TYPE, }, - { "pca9557", 8 | PCA953X_TYPE, }, - { "pca9574", 8 | PCA957X_TYPE | PCA_INT, }, - { "pca9575", 16 | PCA957X_TYPE | PCA_INT, }, - { "pca9698", 40 | PCA953X_TYPE, }, + { .name =3D "pca6408", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca6416", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9505", .driver_data =3D 40 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9506", .driver_data =3D 40 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9534", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9535", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9536", .driver_data =3D 4 | PCA953X_TYPE }, + { .name =3D "pca9537", .driver_data =3D 4 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9538", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9539", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9554", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9555", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca9556", .driver_data =3D 8 | PCA953X_TYPE }, + { .name =3D "pca9557", .driver_data =3D 8 | PCA953X_TYPE }, + { .name =3D "pca9574", .driver_data =3D 8 | PCA957X_TYPE | PCA_INT }, + { .name =3D "pca9575", .driver_data =3D 16 | PCA957X_TYPE | PCA_INT }, + { .name =3D "pca9698", .driver_data =3D 40 | PCA953X_TYPE }, =20 - { "pcal6408", 8 | PCA953X_TYPE | PCA_LATCH_INT, }, - { "pcal6416", 16 | PCA953X_TYPE | PCA_LATCH_INT, }, - { "pcal6524", 24 | PCA953X_TYPE | PCA_LATCH_INT, }, - { "pcal6534", 34 | PCAL653X_TYPE | PCA_LATCH_INT, }, - { "pcal9535", 16 | PCA953X_TYPE | PCA_LATCH_INT, }, - { "pcal9554b", 8 | PCA953X_TYPE | PCA_LATCH_INT, }, - { "pcal9555a", 16 | PCA953X_TYPE | PCA_LATCH_INT, }, + { .name =3D "pcal6408", .driver_data =3D 8 | PCA953X_TYPE | PCA_LATCH_I= NT }, + { .name =3D "pcal6416", .driver_data =3D 16 | PCA953X_TYPE | PCA_LATCH_I= NT }, + { .name =3D "pcal6524", .driver_data =3D 24 | PCA953X_TYPE | PCA_LATCH_I= NT }, + { .name =3D "pcal6534", .driver_data =3D 34 | PCAL653X_TYPE | PCA_LATCH_= INT }, + { .name =3D "pcal9535", .driver_data =3D 16 | PCA953X_TYPE | PCA_LATCH_I= NT }, + { .name =3D "pcal9554b", .driver_data =3D 8 | PCA953X_TYPE | PCA_LATCH_I= NT }, + { .name =3D "pcal9555a", .driver_data =3D 16 | PCA953X_TYPE | PCA_LATCH_I= NT }, =20 - { "max7310", 8 | PCA953X_TYPE, }, - { "max7312", 16 | PCA953X_TYPE | PCA_INT, }, - { "max7313", 16 | PCA953X_TYPE | PCA_INT, }, - { "max7315", 8 | PCA953X_TYPE | PCA_INT, }, - { "max7318", 16 | PCA953X_TYPE | PCA_INT, }, - { "pca6107", 8 | PCA953X_TYPE | PCA_INT, }, - { "tca6408", 8 | PCA953X_TYPE | PCA_INT, }, - { "tca6416", 16 | PCA953X_TYPE | PCA_INT, }, - { "tca6418", 18 | TCA6418_TYPE | PCA_INT, }, - { "tca6424", 24 | PCA953X_TYPE | PCA_INT, }, - { "tca9538", 8 | PCA953X_TYPE | PCA_INT, }, - { "tca9539", 16 | PCA953X_TYPE | PCA_INT, }, - { "tca9554", 8 | PCA953X_TYPE | PCA_INT, }, - { "xra1202", 8 | PCA953X_TYPE }, + { .name =3D "max7310", .driver_data =3D 8 | PCA953X_TYPE }, + { .name =3D "max7312", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "max7313", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "max7315", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "max7318", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "pca6107", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "tca6408", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "tca6416", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "tca6418", .driver_data =3D 18 | TCA6418_TYPE | PCA_INT }, + { .name =3D "tca6424", .driver_data =3D 24 | PCA953X_TYPE | PCA_INT }, + { .name =3D "tca9538", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "tca9539", .driver_data =3D 16 | PCA953X_TYPE | PCA_INT }, + { .name =3D "tca9554", .driver_data =3D 8 | PCA953X_TYPE | PCA_INT }, + { .name =3D "xra1202", .driver_data =3D 8 | PCA953X_TYPE }, =20 - { "tcal6408", 8 | PCA953X_TYPE | PCA_LATCH_INT, }, - { "tcal6416", 16 | PCA953X_TYPE | PCA_LATCH_INT, }, + { .name =3D "tcal6408", .driver_data =3D 8 | PCA953X_TYPE | PCA_LATCH_IN= T }, + { .name =3D "tcal6416", .driver_data =3D 16 | PCA953X_TYPE | PCA_LATCH_IN= T }, { } }; MODULE_DEVICE_TABLE(i2c, pca953x_id); diff --git a/drivers/gpio/gpio-pca9570.c b/drivers/gpio/gpio-pca9570.c index 4a368803fb03..7a47a9aa0414 100644 --- a/drivers/gpio/gpio-pca9570.c +++ b/drivers/gpio/gpio-pca9570.c @@ -163,9 +163,9 @@ static const struct pca9570_chip_data slg7xl45106_gpio = =3D { }; =20 static const struct i2c_device_id pca9570_id_table[] =3D { - { "pca9570", (kernel_ulong_t)&pca9570_gpio}, - { "pca9571", (kernel_ulong_t)&pca9571_gpio }, - { "slg7xl45106", (kernel_ulong_t)&slg7xl45106_gpio }, + { .name =3D "pca9570", .driver_data =3D (kernel_ulong_t)&pca9570_gpio }, + { .name =3D "pca9571", .driver_data =3D (kernel_ulong_t)&pca9571_gpio }, + { .name =3D "slg7xl45106", .driver_data =3D (kernel_ulong_t)&slg7xl45106_= gpio }, { /* sentinel */ } }; MODULE_DEVICE_TABLE(i2c, pca9570_id_table); diff --git a/drivers/gpio/gpio-pcf857x.c b/drivers/gpio/gpio-pcf857x.c index 3b9de8c3d924..c942b959571b 100644 --- a/drivers/gpio/gpio-pcf857x.c +++ b/drivers/gpio/gpio-pcf857x.c @@ -20,19 +20,19 @@ #include =20 static const struct i2c_device_id pcf857x_id[] =3D { - { "pcf8574", 8 }, - { "pcf8574a", 8 }, - { "pca8574", 8 }, - { "pca9670", 8 }, - { "pca9672", 8 }, - { "pca9674", 8 }, - { "pcf8575", 16 }, - { "pca8575", 16 }, - { "pca9671", 16 }, - { "pca9673", 16 }, - { "pca9675", 16 }, - { "max7328", 8 }, - { "max7329", 8 }, + { .name =3D "pcf8574", .driver_data =3D 8 }, + { .name =3D "pcf8574a", .driver_data =3D 8 }, + { .name =3D "pca8574", .driver_data =3D 8 }, + { .name =3D "pca9670", .driver_data =3D 8 }, + { .name =3D "pca9672", .driver_data =3D 8 }, + { .name =3D "pca9674", .driver_data =3D 8 }, + { .name =3D "pcf8575", .driver_data =3D 16 }, + { .name =3D "pca8575", .driver_data =3D 16 }, + { .name =3D "pca9671", .driver_data =3D 16 }, + { .name =3D "pca9673", .driver_data =3D 16 }, + { .name =3D "pca9675", .driver_data =3D 16 }, + { .name =3D "max7328", .driver_data =3D 8 }, + { .name =3D "max7329", .driver_data =3D 8 }, { } }; MODULE_DEVICE_TABLE(i2c, pcf857x_id); base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731 --=20 2.47.3