[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