diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c index b20206316..01a6400c3 100755 --- a/drivers/acpi/ec.c +++ b/drivers/acpi/ec.c @@ -786,9 +786,6 @@ static int acpi_ec_transaction_unlocked(struct acpi_ec *ec, unsigned long tmp; int ret = 0; - if (t->rdata) - memset(t->rdata, 0, t->rlen); - /* start transaction */ spin_lock_irqsave(&ec->lock, tmp); /* Enable GPE for command processing (IBF=0/OBF=1) */ @@ -825,6 +822,8 @@ static int acpi_ec_transaction(struct acpi_ec *ec, struct transaction *t) if (!ec || (!t) || (t->wlen && !t->wdata) || (t->rlen && !t->rdata)) return -EINVAL; + if (t->rdata) + memset(t->rdata, 0, t->rlen); mutex_lock(&ec->mutex); if (ec->global_lock) { @@ -851,7 +850,7 @@ static int acpi_ec_burst_enable(struct acpi_ec *ec) .wdata = NULL, .rdata = &d, .wlen = 0, .rlen = 1}; - return acpi_ec_transaction_unlocked(ec, &t); + return acpi_ec_transaction(ec, &t); } static int acpi_ec_burst_disable(struct acpi_ec *ec) @@ -861,7 +860,7 @@ static int acpi_ec_burst_disable(struct acpi_ec *ec) .wlen = 0, .rlen = 0}; return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ? - acpi_ec_transaction_unlocked(ec, &t) : 0; + acpi_ec_transaction(ec, &t) : 0; } static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data) @@ -877,19 +876,6 @@ static int acpi_ec_read(struct acpi_ec *ec, u8 address, u8 *data) return result; } -static int acpi_ec_read_unlocked(struct acpi_ec *ec, u8 address, u8 *data) -{ - int result; - u8 d; - struct transaction t = {.command = ACPI_EC_COMMAND_READ, - .wdata = &address, .rdata = &d, - .wlen = 1, .rlen = 1}; - - result = acpi_ec_transaction_unlocked(ec, &t); - *data = d; - return result; -} - static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data) { u8 wdata[2] = { address, data }; @@ -900,16 +886,6 @@ static int acpi_ec_write(struct acpi_ec *ec, u8 address, u8 data) return acpi_ec_transaction(ec, &t); } -static int acpi_ec_write_unlocked(struct acpi_ec *ec, u8 address, u8 data) -{ - u8 wdata[2] = { address, data }; - struct transaction t = {.command = ACPI_EC_COMMAND_WRITE, - .wdata = wdata, .rdata = NULL, - .wlen = 2, .rlen = 0}; - - return acpi_ec_transaction_unlocked(ec, &t); -} - int ec_read(u8 addr, u8 *val) { int err; @@ -1330,7 +1306,6 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, struct acpi_ec *ec = handler_context; int result = 0, i, bytes = bits / 8; u8 *value = (u8 *)value64; - u32 glk; if ((address > 0xFF) || !value || !handler_context) return AE_BAD_PARAMETER; @@ -1338,25 +1313,13 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, if (function != ACPI_READ && function != ACPI_WRITE) return AE_BAD_PARAMETER; - mutex_lock(&ec->mutex); - - if (ec->global_lock) { - acpi_status status; - - status = acpi_acquire_global_lock(ACPI_EC_UDELAY_GLK, &glk); - if (ACPI_FAILURE(status)) { - result = -ENODEV; - goto unlock; - } - } - if (ec->busy_polling || bits > 8) acpi_ec_burst_enable(ec); for (i = 0; i < bytes; ++i, ++address, ++value) { result = (function == ACPI_READ) ? - acpi_ec_read_unlocked(ec, address, value) : - acpi_ec_write_unlocked(ec, address, *value); + acpi_ec_read(ec, address, value) : + acpi_ec_write(ec, address, *value); if (result < 0) break; } @@ -1364,12 +1327,6 @@ acpi_ec_space_handler(u32 function, acpi_physical_address address, if (ec->busy_polling || bits > 8) acpi_ec_burst_disable(ec); - if (ec->global_lock) - acpi_release_global_lock(glk); - -unlock: - mutex_unlock(&ec->mutex); - switch (result) { case -EINVAL: return AE_BAD_PARAMETER;