/* * Externally callable EC access functions. For now, assume 1 EC only */ int ec_read(u8 addr, u8 * val) { struct acpi_ec *ec; int err; u8 temp_data; if (!first_ec) return -ENODEV; ec = acpi_driver_data(first_ec); err = acpi_ec_read(ec, addr, &temp_data); if (!err) { *val = temp_data; return 0; } else return err; }
static int acpi_ec_burst_enable(struct acpi_ec *ec) { u8 d; struct transaction t = {.command = ACPI_EC_BURST_ENABLE, .wdata = NULL, .rdata = &d, .wlen = 0, .rlen = 1}; return acpi_ec_transaction(ec, &t); } static int acpi_ec_burst_disable(struct acpi_ec *ec) { struct transaction t = {.command = ACPI_EC_BURST_DISABLE, .wdata = NULL, .rdata = NULL, .wlen = 0, .rlen = 0}; return (acpi_ec_read_status(ec) & ACPI_EC_FLAG_BURST) ? acpi_ec_transaction(ec, &t) : 0; } static int acpi_ec_read(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(ec, &t); *data = d; return result; } static int acpi_ec_write(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(ec, &t); } /* * Externally callable EC access functions. For now, assume 1 EC only */ int ec_burst_enable(void) { if (!first_ec) return -ENODEV; return acpi_ec_burst_enable(first_ec); } EXPORT_SYMBOL(ec_burst_enable); int ec_burst_disable(void) { if (!first_ec) return -ENODEV; return acpi_ec_burst_disable(first_ec); } EXPORT_SYMBOL(ec_burst_disable); int ec_read(u8 addr, u8 * val) { int err; u8 temp_data; if (!first_ec) return -ENODEV; err = acpi_ec_read(first_ec, addr, &temp_data); if (!err) { *val = temp_data; return 0; } else return err; } EXPORT_SYMBOL(ec_read); int ec_write(u8 addr, u8 val) { int err; if (!first_ec) return -ENODEV; err = acpi_ec_write(first_ec, addr, val); return err; }