Commit 98a83da3 authored by Rafael J. Wysocki's avatar Rafael J. Wysocki

platform/x86: wmi: Remove custom EC address space handler

The custom EC address space handler in the WMI driver was only needed
because the EC driver did not install its address space handler for
EC operation regions beyond the EC device scope in the ACPI namespace.

That has just changed, so the custom EC address handler is not needed
any more and it can be removed.
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
Reviewed-by: default avatarArmin Wolf <W_Armin@gmx.de>
Reviewed-by: default avatarHeikki Krogerus <heikki.krogerus@linux.intel.com>
Reviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarMario Limonciello <mario.limonciello@amd.com>
Reviewed-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
parent 60fa6ae6
...@@ -1153,77 +1153,6 @@ static int parse_wdg(struct device *wmi_bus_dev, struct platform_device *pdev) ...@@ -1153,77 +1153,6 @@ static int parse_wdg(struct device *wmi_bus_dev, struct platform_device *pdev)
return 0; return 0;
} }
static int ec_read_multiple(u8 address, u8 *buffer, size_t bytes)
{
size_t i;
int ret;
for (i = 0; i < bytes; i++) {
ret = ec_read(address + i, &buffer[i]);
if (ret < 0)
return ret;
}
return 0;
}
static int ec_write_multiple(u8 address, u8 *buffer, size_t bytes)
{
size_t i;
int ret;
for (i = 0; i < bytes; i++) {
ret = ec_write(address + i, buffer[i]);
if (ret < 0)
return ret;
}
return 0;
}
/*
* WMI can have EmbeddedControl access regions. In which case, we just want to
* hand these off to the EC driver.
*/
static acpi_status
acpi_wmi_ec_space_handler(u32 function, acpi_physical_address address,
u32 bits, u64 *value,
void *handler_context, void *region_context)
{
int bytes = bits / BITS_PER_BYTE;
int ret;
if (!value)
return AE_NULL_ENTRY;
if (!bytes || bytes > sizeof(*value))
return AE_BAD_PARAMETER;
if (address > U8_MAX || address + bytes - 1 > U8_MAX)
return AE_BAD_PARAMETER;
if (function != ACPI_READ && function != ACPI_WRITE)
return AE_BAD_PARAMETER;
if (function == ACPI_READ)
ret = ec_read_multiple(address, (u8 *)value, bytes);
else
ret = ec_write_multiple(address, (u8 *)value, bytes);
switch (ret) {
case -EINVAL:
return AE_BAD_PARAMETER;
case -ENODEV:
return AE_NOT_FOUND;
case -ETIME:
return AE_TIME;
case 0:
return AE_OK;
default:
return AE_ERROR;
}
}
static int wmi_get_notify_data(struct wmi_block *wblock, union acpi_object **obj) static int wmi_get_notify_data(struct wmi_block *wblock, union acpi_object **obj)
{ {
struct acpi_buffer data = { ACPI_ALLOCATE_BUFFER, NULL }; struct acpi_buffer data = { ACPI_ALLOCATE_BUFFER, NULL };
...@@ -1338,14 +1267,6 @@ static void acpi_wmi_remove_notify_handler(void *data) ...@@ -1338,14 +1267,6 @@ static void acpi_wmi_remove_notify_handler(void *data)
acpi_remove_notify_handler(acpi_device->handle, ACPI_ALL_NOTIFY, acpi_wmi_notify_handler); acpi_remove_notify_handler(acpi_device->handle, ACPI_ALL_NOTIFY, acpi_wmi_notify_handler);
} }
static void acpi_wmi_remove_address_space_handler(void *data)
{
struct acpi_device *acpi_device = data;
acpi_remove_address_space_handler(acpi_device->handle, ACPI_ADR_SPACE_EC,
&acpi_wmi_ec_space_handler);
}
static void acpi_wmi_remove_bus_device(void *data) static void acpi_wmi_remove_bus_device(void *data)
{ {
struct device *wmi_bus_dev = data; struct device *wmi_bus_dev = data;
...@@ -1377,19 +1298,6 @@ static int acpi_wmi_probe(struct platform_device *device) ...@@ -1377,19 +1298,6 @@ static int acpi_wmi_probe(struct platform_device *device)
dev_set_drvdata(&device->dev, wmi_bus_dev); dev_set_drvdata(&device->dev, wmi_bus_dev);
status = acpi_install_address_space_handler(acpi_device->handle,
ACPI_ADR_SPACE_EC,
&acpi_wmi_ec_space_handler,
NULL, NULL);
if (ACPI_FAILURE(status)) {
dev_err(&device->dev, "Error installing EC region handler\n");
return -ENODEV;
}
error = devm_add_action_or_reset(&device->dev, acpi_wmi_remove_address_space_handler,
acpi_device);
if (error < 0)
return error;
status = acpi_install_notify_handler(acpi_device->handle, ACPI_ALL_NOTIFY, status = acpi_install_notify_handler(acpi_device->handle, ACPI_ALL_NOTIFY,
acpi_wmi_notify_handler, wmi_bus_dev); acpi_wmi_notify_handler, wmi_bus_dev);
if (ACPI_FAILURE(status)) { if (ACPI_FAILURE(status)) {
......
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