i2c: scmi: Fix probe error on devices with an empty SMB0001 ACPI device node
[ Upstream commit 0544ee4b1ad574aec3b6379af5f5cdee42840971 ] 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: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Wolfram Sang <wsa@the-dreams.de> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
parent
a84f9b11ef
commit
02979d43b3
1 changed files with 7 additions and 3 deletions
|
@ -364,6 +364,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)
|
||||||
|
@ -385,8 +386,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",
|
||||||
|
@ -397,7 +400,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;
|
||||||
}
|
}
|
||||||
|
@ -407,7 +411,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)
|
||||||
|
|
Loading…
Add table
Reference in a new issue