From e4fa15d9a667b46057f98092a46dc60a99f547fb Mon Sep 17 00:00:00 2001 From: Tinsae Tadesse Date: Sun, 1 Feb 2026 09:40:24 +0300 Subject: [PATCH 2/2] [PATCH 2/2] hwmon: spd5118: Fail probe if SPD writes are disabled SPD5118 requires write access for page selection, configuration, and cache synchronization during suspend/resume. If the host controller does not allow SPD writes, the driver cannot function properly. Detect this state using adapter quirks and determine whether to stop the probe. Signed-off-by: Tinsae Tadesse --- drivers/hwmon/spd5118.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/drivers/hwmon/spd5118.c b/drivers/hwmon/spd5118.c index 5da44571b6a0..10a6dfb30985 100644 --- a/drivers/hwmon/spd5118.c +++ b/drivers/hwmon/spd5118.c @@ -525,6 +525,8 @@ static int spd5118_common_probe(struct device *dev, struct regmap *regmap, unsigned int capability, revision, vendor, bank; struct spd5118_data *data; struct device *hwmon_dev; + struct i2c_client *client; + const struct i2c_adapter_quirks *quirks; int err; data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); @@ -552,6 +554,20 @@ static int spd5118_common_probe(struct device *dev, struct regmap *regmap, if (!spd5118_vendor_valid(bank, vendor)) return -ENODEV; + /* + * SPD5118 requires write access for correct operation + * (page selection, configuration, and suspend/resume cache sync). + * If the SPD writes are blocked by the SMBus controller, the + * probe fails. + */ + client = to_i2c_client(dev); + quirks = client->adapter->quirks; + if (quirks && (quirks->flags & I2C_AQ_SPD_WRITE_DISABLED)) { + dev_err_probe(dev, -ENODEV, "SPD Write Disable is set on adapter; refusing probe\n"); + return -ENODEV; + } + + data->regmap = regmap; mutex_init(&data->nvmem_lock); dev_set_drvdata(dev, data); -- 2.47.3