[PATCH v1 0/2] ASoC: Rework initialization of i2c_device_ids

Uwe Kleine-König (The Capable Hub) u.kleine-koenig at baylibre.com
Wed May 13 10:23:02 PDT 2026


Hello,

this series is a preparation for

	diff --git a/include/linux/mod_devicetable.h b/include/linux/mod_devicetable.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 {
	 
	 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;
	+	};
	 };
	 
	 /* 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)
	 
		if (id) {
			name = id->name;
	-		data->info = (const struct kx_chipset_info *)(id->driver_data);
	+		data->info = id->driver_data_ptr;
		} else {
			name = iio_get_acpi_device_name_and_data(&client->dev, &ddata);
			data->info = ddata;
	@@ -1630,11 +1630,11 @@ static const struct dev_pm_ops kxcjk1013_pm_ops = {
	 };
	 
	 static const struct i2c_device_id kxcjk1013_id[] = {
	-	{ .name = "kxcjk1013", .driver_data = (kernel_ulong_t)&kxcjk1013_info },
	-	{ .name = "kxcj91008", .driver_data = (kernel_ulong_t)&kxcj91008_info },
	-	{ .name = "kxtj21009", .driver_data = (kernel_ulong_t)&kxtj21009_info },
	-	{ .name = "kxtf9", .driver_data = (kernel_ulong_t)&kxtf9_info },
	-	{ .name = "kx023-1025", .driver_data = (kernel_ulong_t)&kx0231025_info },
	+	{ .name = "kxcjk1013", .driver_data_ptr = &kxcjk1013_info },
	+	{ .name = "kxcj91008", .driver_data_ptr = &kxcj91008_info },
	+	{ .name = "kxtj21009", .driver_data_ptr = &kxtj21009_info },
	+	{ .name = "kxtf9", .driver_data_ptr = &kxtf9_info },
	+	{ .name = "kx023-1025", .driver_data_ptr = &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 sound/soc, 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.

The first patch drops a few empty remove callbacks that I found while
working on patch #2. The second converts all hwmon drivers to use named
initializers.

Best regards
Uwe

Uwe Kleine-König (The Capable Hub) (2):
  ASoC: Drop empty i2c remove callbacks
  ASoC: Use named initializers for arrays of i2c_device_data

 .../hda/codecs/side-codecs/cs35l41_hda_i2c.c  |  4 +-
 .../hda/codecs/side-codecs/cs35l56_hda_i2c.c  |  8 ++--
 .../hda/codecs/side-codecs/tas2781_hda_i2c.c  |  4 +-
 sound/soc/codecs/ad193x-i2c.c                 |  4 +-
 sound/soc/codecs/adau1372-i2c.c               |  2 +-
 sound/soc/codecs/adau1373.c                   |  2 +-
 sound/soc/codecs/adau1701.c                   |  8 ++--
 sound/soc/codecs/adau1761-i2c.c               |  8 ++--
 sound/soc/codecs/adau1781-i2c.c               |  4 +-
 sound/soc/codecs/adau1977-i2c.c               |  6 +--
 sound/soc/codecs/adau7118-i2c.c               |  4 +-
 sound/soc/codecs/adav803.c                    |  2 +-
 sound/soc/codecs/ak4118.c                     |  4 +-
 sound/soc/codecs/ak4535.c                     |  2 +-
 sound/soc/codecs/ak4613.c                     |  2 +-
 sound/soc/codecs/ak4619.c                     |  2 +-
 sound/soc/codecs/ak4642.c                     |  8 ++--
 sound/soc/codecs/ak4671.c                     |  2 +-
 sound/soc/codecs/alc5623.c                    |  8 ++--
 sound/soc/codecs/alc5632.c                    |  4 +-
 sound/soc/codecs/aw87390.c                    |  4 +-
 sound/soc/codecs/aw88081.c                    |  4 +-
 sound/soc/codecs/aw88166.c                    |  2 +-
 sound/soc/codecs/aw88261.c                    |  2 +-
 sound/soc/codecs/aw88395/aw88395.c            |  2 +-
 sound/soc/codecs/aw88399.c                    |  2 +-
 sound/soc/codecs/cs35l32.c                    |  4 +-
 sound/soc/codecs/cs35l33.c                    |  4 +-
 sound/soc/codecs/cs35l34.c                    |  4 +-
 sound/soc/codecs/cs35l35.c                    |  4 +-
 sound/soc/codecs/cs35l36.c                    |  4 +-
 sound/soc/codecs/cs35l41-i2c.c                | 10 ++---
 sound/soc/codecs/cs35l45-i2c.c                |  4 +-
 sound/soc/codecs/cs35l56-i2c.c                |  6 +--
 sound/soc/codecs/cs4265.c                     |  2 +-
 sound/soc/codecs/cs4270.c                     |  4 +-
 sound/soc/codecs/cs4271-i2c.c                 |  2 +-
 sound/soc/codecs/cs42l42-i2c.c                |  4 +-
 sound/soc/codecs/cs42l51-i2c.c                |  2 +-
 sound/soc/codecs/cs42l52.c                    |  2 +-
 sound/soc/codecs/cs42l56.c                    |  2 +-
 sound/soc/codecs/cs42l73.c                    |  4 +-
 sound/soc/codecs/cs42l84.c                    |  4 +-
 sound/soc/codecs/cs42xx8-i2c.c                |  6 +--
 sound/soc/codecs/cs43130.c                    | 10 ++---
 sound/soc/codecs/cs4341.c                     |  2 +-
 sound/soc/codecs/cs4349.c                     |  4 +-
 sound/soc/codecs/cs530x-i2c.c                 | 14 +++---
 sound/soc/codecs/cs53l30.c                    |  4 +-
 sound/soc/codecs/cx2072x.c                    |  6 +--
 sound/soc/codecs/da7210.c                     |  2 +-
 sound/soc/codecs/da7213.c                     |  2 +-
 sound/soc/codecs/da7218.c                     |  4 +-
 sound/soc/codecs/da7219.c                     |  2 +-
 sound/soc/codecs/da732x.c                     |  2 +-
 sound/soc/codecs/da9055.c                     |  2 +-
 sound/soc/codecs/es8311.c                     |  2 +-
 sound/soc/codecs/es8316.c                     |  4 +-
 sound/soc/codecs/es8323.c                     |  2 +-
 sound/soc/codecs/es8326.c                     |  4 +-
 sound/soc/codecs/es8328-i2c.c                 |  4 +-
 sound/soc/codecs/es8375.c                     |  2 +-
 sound/soc/codecs/es8389.c                     |  2 +-
 sound/soc/codecs/fs210x.c                     |  6 +--
 sound/soc/codecs/isabelle.c                   |  2 +-
 sound/soc/codecs/lm4857.c                     |  2 +-
 sound/soc/codecs/lm49453.c                    |  2 +-
 sound/soc/codecs/max9768.c                    |  2 +-
 sound/soc/codecs/max98088.c                   |  4 +-
 sound/soc/codecs/max98090.c                   |  4 +-
 sound/soc/codecs/max98095.c                   |  2 +-
 sound/soc/codecs/max98371.c                   |  2 +-
 sound/soc/codecs/max98373-i2c.c               |  4 +-
 sound/soc/codecs/max98388.c                   |  4 +-
 sound/soc/codecs/max98390.c                   |  4 +-
 sound/soc/codecs/max98396.c                   |  6 +--
 sound/soc/codecs/max9850.c                    |  2 +-
 sound/soc/codecs/max98504.c                   |  2 +-
 sound/soc/codecs/max98520.c                   |  4 +-
 sound/soc/codecs/max9860.c                    |  2 +-
 sound/soc/codecs/max9867.c                    |  2 +-
 sound/soc/codecs/max9877.c                    |  2 +-
 sound/soc/codecs/max98925.c                   |  2 +-
 sound/soc/codecs/max98926.c                   |  2 +-
 sound/soc/codecs/max98927.c                   |  4 +-
 sound/soc/codecs/ml26124.c                    |  2 +-
 sound/soc/codecs/mt6660.c                     |  4 +-
 sound/soc/codecs/nau8325.c                    |  2 +-
 sound/soc/codecs/nau8540.c                    |  2 +-
 sound/soc/codecs/nau8810.c                    |  6 +--
 sound/soc/codecs/nau8821.c                    |  2 +-
 sound/soc/codecs/nau8822.c                    |  2 +-
 sound/soc/codecs/nau8824.c                    |  2 +-
 sound/soc/codecs/nau8825.c                    |  6 +--
 sound/soc/codecs/ntp8835.c                    |  4 +-
 sound/soc/codecs/ntp8918.c                    |  4 +-
 sound/soc/codecs/pcm1681.c                    |  4 +-
 sound/soc/codecs/pcm1789-i2c.c                |  2 +-
 sound/soc/codecs/pcm179x-i2c.c                |  2 +-
 sound/soc/codecs/pcm186x-i2c.c                |  8 ++--
 sound/soc/codecs/pcm3168a-i2c.c               |  2 +-
 sound/soc/codecs/pcm512x-i2c.c                | 14 +++---
 sound/soc/codecs/pcm6240.c                    | 44 +++++++++----------
 sound/soc/codecs/rt1011.c                     |  2 +-
 sound/soc/codecs/rt1015.c                     |  2 +-
 sound/soc/codecs/rt1016.c                     |  2 +-
 sound/soc/codecs/rt1019.c                     |  2 +-
 sound/soc/codecs/rt1305.c                     |  4 +-
 sound/soc/codecs/rt1308.c                     |  2 +-
 sound/soc/codecs/rt1318.c                     |  2 +-
 sound/soc/codecs/rt274.c                      |  4 +-
 sound/soc/codecs/rt286.c                      |  6 +--
 sound/soc/codecs/rt298.c                      |  4 +-
 sound/soc/codecs/rt5514.c                     |  2 +-
 sound/soc/codecs/rt5575.c                     |  2 +-
 sound/soc/codecs/rt5616.c                     |  6 +--
 sound/soc/codecs/rt5631.c                     | 10 ++---
 sound/soc/codecs/rt5640.c                     |  6 +--
 sound/soc/codecs/rt5645.c                     |  4 +-
 sound/soc/codecs/rt5651.c                     |  2 +-
 sound/soc/codecs/rt5659.c                     |  4 +-
 sound/soc/codecs/rt5660.c                     |  2 +-
 sound/soc/codecs/rt5663.c                     |  4 +-
 sound/soc/codecs/rt5665.c                     |  4 +-
 sound/soc/codecs/rt5668.c                     |  4 +-
 sound/soc/codecs/rt5670.c                     |  6 +--
 sound/soc/codecs/rt5677.c                     |  2 +-
 sound/soc/codecs/rt5682-i2c.c                 |  4 +-
 sound/soc/codecs/rt5682s.c                    |  4 +-
 sound/soc/codecs/sgtl5000.c                   |  4 +-
 sound/soc/codecs/sma1303.c                    |  4 +-
 sound/soc/codecs/sma1307.c                    |  4 +-
 sound/soc/codecs/src4xxx-i2c.c                |  2 +-
 sound/soc/codecs/ssm2518.c                    |  2 +-
 sound/soc/codecs/ssm2602-i2c.c                |  6 +--
 sound/soc/codecs/ssm4567.c                    |  2 +-
 sound/soc/codecs/sta32x.c                     |  6 +--
 sound/soc/codecs/sta350.c                     |  8 +---
 sound/soc/codecs/sta529.c                     |  2 +-
 sound/soc/codecs/tas2552.c                    |  2 +-
 sound/soc/codecs/tas2562.c                    |  6 +--
 sound/soc/codecs/tas2764.c                    |  2 +-
 sound/soc/codecs/tas2770.c                    |  2 +-
 sound/soc/codecs/tas2780.c                    |  2 +-
 sound/soc/codecs/tas2781-i2c.c                | 42 +++++++++---------
 sound/soc/codecs/tas5086.c                    | 12 ++---
 sound/soc/codecs/tas571x.c                    | 14 +++---
 sound/soc/codecs/tas5720.c                    |  6 +--
 sound/soc/codecs/tas5805m.c                   |  2 +-
 sound/soc/codecs/tas6424.c                    |  2 +-
 sound/soc/codecs/tda7419.c                    |  2 +-
 sound/soc/codecs/tfa9879.c                    |  2 +-
 sound/soc/codecs/tlv320adc3xxx.c              |  6 +--
 sound/soc/codecs/tlv320adcx140.c              |  8 ++--
 sound/soc/codecs/tlv320aic23-i2c.c            |  4 +-
 sound/soc/codecs/tlv320aic31xx.c              | 16 +++----
 sound/soc/codecs/tlv320aic32x4-i2c.c          |  6 +--
 sound/soc/codecs/tlv320aic3x-i2c.c            | 10 ++---
 sound/soc/codecs/ts3a227e.c                   |  2 +-
 sound/soc/codecs/tscs42xx.c                   |  4 +-
 sound/soc/codecs/tscs454.c                    |  2 +-
 sound/soc/codecs/uda1342.c                    |  2 +-
 sound/soc/codecs/uda1380.c                    |  2 +-
 sound/soc/codecs/wm1250-ev1.c                 |  2 +-
 sound/soc/codecs/wm2000.c                     |  2 +-
 sound/soc/codecs/wm2200.c                     |  2 +-
 sound/soc/codecs/wm5100.c                     |  2 +-
 sound/soc/codecs/wm8510.c                     |  2 +-
 sound/soc/codecs/wm8523.c                     |  2 +-
 sound/soc/codecs/wm8580.c                     |  4 +-
 sound/soc/codecs/wm8711.c                     |  2 +-
 sound/soc/codecs/wm8728.c                     |  2 +-
 sound/soc/codecs/wm8731-i2c.c                 |  2 +-
 sound/soc/codecs/wm8737.c                     |  2 +-
 sound/soc/codecs/wm8741.c                     |  2 +-
 sound/soc/codecs/wm8750.c                     |  4 +-
 sound/soc/codecs/wm8753.c                     |  2 +-
 sound/soc/codecs/wm8776.c                     |  4 +-
 sound/soc/codecs/wm8804-i2c.c                 |  2 +-
 sound/soc/codecs/wm8900.c                     |  8 +---
 sound/soc/codecs/wm8903.c                     |  2 +-
 sound/soc/codecs/wm8904.c                     |  6 +--
 sound/soc/codecs/wm8940.c                     |  2 +-
 sound/soc/codecs/wm8955.c                     |  2 +-
 sound/soc/codecs/wm8960.c                     |  2 +-
 sound/soc/codecs/wm8961.c                     |  2 +-
 sound/soc/codecs/wm8962.c                     |  2 +-
 sound/soc/codecs/wm8971.c                     |  2 +-
 sound/soc/codecs/wm8974.c                     |  2 +-
 sound/soc/codecs/wm8978.c                     |  2 +-
 sound/soc/codecs/wm8983.c                     |  2 +-
 sound/soc/codecs/wm8985.c                     |  4 +-
 sound/soc/codecs/wm8988.c                     |  2 +-
 sound/soc/codecs/wm8990.c                     |  2 +-
 sound/soc/codecs/wm8991.c                     |  2 +-
 sound/soc/codecs/wm8993.c                     |  2 +-
 sound/soc/codecs/wm8995.c                     |  4 +-
 sound/soc/codecs/wm8996.c                     |  2 +-
 sound/soc/codecs/wm9081.c                     |  8 +---
 sound/soc/codecs/wm9090.c                     |  4 +-
 200 files changed, 398 insertions(+), 426 deletions(-)


base-commit: 254f49634ee16a731174d2ae34bc50bd5f45e731
-- 
2.47.3




More information about the Linux-mediatek mailing list