Commit 0544ee4b authored by Hans de Goede's avatar Hans de Goede Committed by Wolfram Sang

i2c: scmi: Fix probe error on devices with an empty SMB0001 ACPI device node

Some AMD based HP laptops have a SMB0001 ACPI device node which does not
define any methods.

This leads to the following error in dmesg:

[    5.222731] cmi: probe of SMB0001:00 failed with error -5

This commit makes acpi_smbus_cmi_add() return -ENODEV instead in this case
silencing the error. In case of a failure of the i2c_add_adapter() call
this commit now propagates the error from that call instead of -EIO.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
parent 6c7f25ca
...@@ -367,6 +367,7 @@ static int acpi_smbus_cmi_add(struct acpi_device *device) ...@@ -367,6 +367,7 @@ static int acpi_smbus_cmi_add(struct acpi_device *device)
{ {
struct acpi_smbus_cmi *smbus_cmi; struct acpi_smbus_cmi *smbus_cmi;
const struct acpi_device_id *id; const struct acpi_device_id *id;
int ret;
smbus_cmi = kzalloc(sizeof(struct acpi_smbus_cmi), GFP_KERNEL); smbus_cmi = kzalloc(sizeof(struct acpi_smbus_cmi), GFP_KERNEL);
if (!smbus_cmi) if (!smbus_cmi)
...@@ -388,8 +389,10 @@ static int acpi_smbus_cmi_add(struct acpi_device *device) ...@@ -388,8 +389,10 @@ static int acpi_smbus_cmi_add(struct acpi_device *device)
acpi_walk_namespace(ACPI_TYPE_METHOD, smbus_cmi->handle, 1, acpi_walk_namespace(ACPI_TYPE_METHOD, smbus_cmi->handle, 1,
acpi_smbus_cmi_query_methods, NULL, smbus_cmi, NULL); acpi_smbus_cmi_query_methods, NULL, smbus_cmi, NULL);
if (smbus_cmi->cap_info == 0) if (smbus_cmi->cap_info == 0) {
ret = -ENODEV;
goto err; goto err;
}
snprintf(smbus_cmi->adapter.name, sizeof(smbus_cmi->adapter.name), snprintf(smbus_cmi->adapter.name, sizeof(smbus_cmi->adapter.name),
"SMBus CMI adapter %s", "SMBus CMI adapter %s",
...@@ -400,7 +403,8 @@ static int acpi_smbus_cmi_add(struct acpi_device *device) ...@@ -400,7 +403,8 @@ static int acpi_smbus_cmi_add(struct acpi_device *device)
smbus_cmi->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD; smbus_cmi->adapter.class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
smbus_cmi->adapter.dev.parent = &device->dev; smbus_cmi->adapter.dev.parent = &device->dev;
if (i2c_add_adapter(&smbus_cmi->adapter)) { ret = i2c_add_adapter(&smbus_cmi->adapter);
if (ret) {
dev_err(&device->dev, "Couldn't register adapter!\n"); dev_err(&device->dev, "Couldn't register adapter!\n");
goto err; goto err;
} }
...@@ -410,7 +414,7 @@ static int acpi_smbus_cmi_add(struct acpi_device *device) ...@@ -410,7 +414,7 @@ static int acpi_smbus_cmi_add(struct acpi_device *device)
err: err:
kfree(smbus_cmi); kfree(smbus_cmi);
device->driver_data = NULL; device->driver_data = NULL;
return -EIO; return ret;
} }
static int acpi_smbus_cmi_remove(struct acpi_device *device) static int acpi_smbus_cmi_remove(struct acpi_device *device)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment