static int set_auto_brightness(int enable) { u8 wdata[2], rdata; int result; wdata[0] = 4; result = ec_transaction(MSI_EC_COMMAND_LCD_LEVEL, wdata, 1, &rdata, 1, 1); if (result < 0) return result; wdata[0] = 0x84; wdata[1] = (rdata & 0xF7) | (enable ? 8 : 0); return ec_transaction(MSI_EC_COMMAND_LCD_LEVEL, wdata, 2, NULL, 0, 1); }
static int get_auto_brightness(void) { u8 wdata = 4, rdata; int result; result = ec_transaction(MSI_EC_COMMAND_LCD_LEVEL, &wdata, 1, &rdata, 1, 1); if (result < 0) return result; return !!(rdata & 8); }
static int get_lcd_level(void) { u8 wdata = 0, rdata; int result; result = ec_transaction(MSI_EC_COMMAND_LCD_LEVEL, &wdata, 1, &rdata, 1, 1); if (result < 0) return result; return (int) rdata / 31; }
static int set_lcd_level(int level) { u8 buf[2]; if (level < 0 || level >= MSI_LCD_LEVEL_MAX) return -EINVAL; buf[0] = 0x80; buf[1] = (u8) (level*31); return ec_transaction(MSI_EC_COMMAND_LCD_LEVEL, buf, sizeof(buf), NULL, 0, 1); }
acpi_status ec_space_handler ( u32 function, ACPI_PHYSICAL_ADDRESS address, u32 bit_width, u32 *value, void *handler_context, void *region_context) { acpi_status status = AE_OK; EC_CONTEXT *ec = NULL; EC_REQUEST ec_request; FUNCTION_TRACE("ec_space_handler"); if (address > 0xFF || bit_width != 8 || !value || !handler_context) { return_ACPI_STATUS(AE_BAD_PARAMETER); } ec = (EC_CONTEXT*)handler_context; switch (function) { case ACPI_READ_ADR_SPACE: ec_request.command = EC_COMMAND_READ; ec_request.address = address; ec_request.data = 0; break; case ACPI_WRITE_ADR_SPACE: ec_request.command = EC_COMMAND_WRITE; ec_request.address = address; ec_request.data = (u8)(*value); break; default: ACPI_DEBUG_PRINT ((ACPI_DB_WARN, "Received request with invalid function [%X].\n", function)); return_ACPI_STATUS(AE_BAD_PARAMETER); break; } /* * Perform the Transaction. */ status = ec_transaction(ec, &ec_request); if (ACPI_SUCCESS(status)) { (*value) = (u32)ec_request.data; } return_ACPI_STATUS(status); }
static int get_wireless_state(int *wlan, int *bluetooth) { u8 wdata = 0, rdata; int result; result = ec_transaction(MSI_EC_COMMAND_WIRELESS, &wdata, 1, &rdata, 1, 1); if (result < 0) return -1; if (wlan) *wlan = !!(rdata & 8); if (bluetooth) *bluetooth = !!(rdata & 128); return 0; }
acpi_status ec_request ( BM_REQUEST *request, void *context) { acpi_status status = AE_OK; EC_REQUEST *ec_request = NULL; EC_CONTEXT *ec = NULL; FUNCTION_TRACE("ec_request"); /* * Must have a valid request structure and context. */ if (!request || !context) return_ACPI_STATUS(AE_BAD_PARAMETER); /* * buffer must contain a valid EC_REQUEST structure. */ status = bm_cast_buffer(&(request->buffer), (void**)&ec_request, sizeof(EC_REQUEST)); if (ACPI_FAILURE(status)) return_ACPI_STATUS(status); /* * context contains information specific to this EC. */ ec = (EC_CONTEXT*)context; /* * Perform the Transaction. */ status = ec_transaction(ec, ec_request); return_ACPI_STATUS(status); }