Skip to content

Commit

Permalink
hwmon: (asus_atk0110) Refactor interface probe code
Browse files Browse the repository at this point in the history
The behaviour is unmodified, this makes easier to override the heuristic (which
is probably needed for some boards).

Signed-off-by: Luca Tettamanti <kronos.it@gmail.com>
Signed-off-by: Jean Delvare <khali@linux-fr.org>
  • Loading branch information
Luca Tettamanti authored and Jean Delvare committed Jan 10, 2010
1 parent bb595c9 commit 8ba406b
Showing 1 changed file with 44 additions and 54 deletions.
98 changes: 44 additions & 54 deletions drivers/hwmon/asus_atk0110.c
Original file line number Diff line number Diff line change
Expand Up @@ -1047,76 +1047,75 @@ static int atk_register_hwmon(struct atk_data *data)
return err;
}

static int atk_check_old_if(struct atk_data *data)
static int atk_probe_if(struct atk_data *data)
{
struct device *dev = &data->acpi_dev->dev;
acpi_handle ret;
acpi_status status;
int err = 0;

/* RTMP: read temperature */
status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_TMP, &ret);
if (status != AE_OK) {
if (ACPI_SUCCESS(status))
data->rtmp_handle = ret;
else
dev_dbg(dev, "method " METHOD_OLD_READ_TMP " not found: %s\n",
acpi_format_exception(status));
return -ENODEV;
}
data->rtmp_handle = ret;

/* RVLT: read voltage */
status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_VLT, &ret);
if (status != AE_OK) {
if (ACPI_SUCCESS(status))
data->rvlt_handle = ret;
else
dev_dbg(dev, "method " METHOD_OLD_READ_VLT " not found: %s\n",
acpi_format_exception(status));
return -ENODEV;
}
data->rvlt_handle = ret;

/* RFAN: read fan status */
status = acpi_get_handle(data->atk_handle, METHOD_OLD_READ_FAN, &ret);
if (status != AE_OK) {
if (ACPI_SUCCESS(status))
data->rfan_handle = ret;
else
dev_dbg(dev, "method " METHOD_OLD_READ_FAN " not found: %s\n",
acpi_format_exception(status));
return -ENODEV;
}
data->rfan_handle = ret;

return 0;
}

static int atk_check_new_if(struct atk_data *data)
{
struct device *dev = &data->acpi_dev->dev;
acpi_handle ret;
acpi_status status;

/* Enumeration */
status = acpi_get_handle(data->atk_handle, METHOD_ENUMERATE, &ret);
if (status != AE_OK) {
if (ACPI_SUCCESS(status))
data->enumerate_handle = ret;
else
dev_dbg(dev, "method " METHOD_ENUMERATE " not found: %s\n",
acpi_format_exception(status));
return -ENODEV;
}
data->enumerate_handle = ret;

/* De-multiplexer (read) */
status = acpi_get_handle(data->atk_handle, METHOD_READ, &ret);
if (status != AE_OK) {
if (ACPI_SUCCESS(status))
data->read_handle = ret;
else
dev_dbg(dev, "method " METHOD_READ " not found: %s\n",
acpi_format_exception(status));
return -ENODEV;
}
data->read_handle = ret;

/* De-multiplexer (write) */
status = acpi_get_handle(data->atk_handle, METHOD_WRITE, &ret);
if (status != AE_OK) {
dev_dbg(dev, "method " METHOD_READ " not found: %s\n",
if (ACPI_SUCCESS(status))
data->write_handle = ret;
else
dev_dbg(dev, "method " METHOD_WRITE " not found: %s\n",
acpi_format_exception(status));
return -ENODEV;
}
data->write_handle = ret;

return 0;
/* Check for hwmon methods: first check "old" style methods; note that
* both may be present: in this case we stick to the old interface;
* analysis of multiple DSDTs indicates that when both interfaces
* are present the new one (GGRP/GITM) is not functional.
*/
if (data->rtmp_handle && data->rvlt_handle && data->rfan_handle)
data->old_interface = true;
else if (data->enumerate_handle && data->read_handle &&
data->write_handle)
data->old_interface = false;
else
err = -ENODEV;

return err;
}

static int atk_add(struct acpi_device *device)
Expand Down Expand Up @@ -1155,28 +1154,19 @@ static int atk_add(struct acpi_device *device)
}
ACPI_FREE(buf.pointer);

/* Check for hwmon methods: first check "old" style methods; note that
* both may be present: in this case we stick to the old interface;
* analysis of multiple DSDTs indicates that when both interfaces
* are present the new one (GGRP/GITM) is not functional.
*/
err = atk_check_old_if(data);
if (!err) {
dev_dbg(&device->dev, "Using old hwmon interface\n");
data->old_interface = true;
} else {
err = atk_check_new_if(data);
if (err)
goto out;

dev_dbg(&device->dev, "Using new hwmon interface\n");
data->old_interface = false;
err = atk_probe_if(data);
if (err) {
dev_err(&device->dev, "No usable hwmon interface detected\n");
goto out;
}

if (data->old_interface)
if (data->old_interface) {
dev_dbg(&device->dev, "Using old hwmon interface\n");
err = atk_enumerate_old_hwmon(data);
else
} else {
dev_dbg(&device->dev, "Using new hwmon interface\n");
err = atk_enumerate_new_hwmon(data);
}
if (err < 0)
goto out;
if (err == 0) {
Expand Down

0 comments on commit 8ba406b

Please sign in to comment.