static acpi_status hci_write1(u32 reg, u32 in1, u32 * result) { u32 in[HCI_WORDS] = { HCI_SET, reg, in1, 0, 0, 0 }; u32 out[HCI_WORDS]; acpi_status status = hci_raw(in, out); *result = (status == AE_OK) ? out[0] : HCI_FAILURE; return status; }
static void toshiba_illumination_set(struct led_classdev *cdev, enum led_brightness brightness) { struct toshiba_acpi_dev *dev = container_of(cdev, struct toshiba_acpi_dev, led_dev); u32 in[HCI_WORDS] = { 0, 0, 0, 0, 0, 0 }; u32 out[HCI_WORDS]; acpi_status status; /* */ in[0] = 0xf100; status = hci_raw(dev, in, out); if (ACPI_FAILURE(status)) { pr_info("Illumination device not available\n"); return; } if (brightness) { /* */ in[0] = 0xf400; in[1] = 0x14e; in[2] = 1; status = hci_raw(dev, in, out); if (ACPI_FAILURE(status)) { pr_info("ACPI call for illumination failed\n"); return; } } else { /* */ in[0] = 0xf400; in[1] = 0x14e; in[2] = 0; status = hci_raw(dev, in, out); if (ACPI_FAILURE(status)) { pr_info("ACPI call for illumination failed.\n"); return; } } /* */ in[0] = 0xf200; in[1] = 0; in[2] = 0; hci_raw(dev, in, out); }
static acpi_status hci_read1(u32 reg, u32 * out1, u32 * result) { u32 in[HCI_WORDS] = { HCI_GET, reg, 0, 0, 0, 0 }; u32 out[HCI_WORDS]; acpi_status status = hci_raw(in, out); *out1 = out[2]; *result = (status == AE_OK) ? out[0] : HCI_FAILURE; return status; }
static acpi_status hci_write2(struct toshiba_acpi_dev *dev, u32 reg, u32 in1, u32 in2, u32 *result) { u32 in[HCI_WORDS] = { HCI_SET, reg, in1, in2, 0, 0 }; u32 out[HCI_WORDS]; acpi_status status = hci_raw(dev, in, out); *result = (status == AE_OK) ? out[0] : HCI_FAILURE; return status; }
static void toshiba_illumination_set(struct led_classdev *cdev, enum led_brightness brightness) { u32 in[HCI_WORDS] = { 0, 0, 0, 0, 0, 0 }; u32 out[HCI_WORDS]; acpi_status status; /* First request : initialize communication. */ in[0] = 0xf100; status = hci_raw(in, out); if (ACPI_FAILURE(status)) { pr_info("Illumination device not available\n"); return; } if (brightness) { /* Switch the illumination on */ in[0] = 0xf400; in[1] = 0x14e; in[2] = 1; status = hci_raw(in, out); if (ACPI_FAILURE(status)) { pr_info("ACPI call for illumination failed\n"); return; } } else { /* Switch the illumination off */ in[0] = 0xf400; in[1] = 0x14e; in[2] = 0; status = hci_raw(in, out); if (ACPI_FAILURE(status)) { pr_info("ACPI call for illumination failed.\n"); return; } } /* Last request : close communication. */ in[0] = 0xf200; in[1] = 0; in[2] = 0; hci_raw(in, out); }
static acpi_status hci_read2(struct toshiba_acpi_dev *dev, u32 reg, u32 *out1, u32 *out2, u32 *result) { u32 in[HCI_WORDS] = { HCI_GET, reg, *out1, *out2, 0, 0 }; u32 out[HCI_WORDS]; acpi_status status = hci_raw(dev, in, out); *out1 = out[2]; *out2 = out[3]; *result = (status == AE_OK) ? out[0] : HCI_FAILURE; return status; }
static enum led_brightness toshiba_illumination_get(struct led_classdev *cdev) { struct toshiba_acpi_dev *dev = container_of(cdev, struct toshiba_acpi_dev, led_dev); u32 in[HCI_WORDS] = { 0, 0, 0, 0, 0, 0 }; u32 out[HCI_WORDS]; acpi_status status; enum led_brightness result; /* */ in[0] = 0xf100; status = hci_raw(dev, in, out); if (ACPI_FAILURE(status)) { pr_info("Illumination device not available\n"); return LED_OFF; } /* */ in[0] = 0xf300; in[1] = 0x14e; status = hci_raw(dev, in, out); if (ACPI_FAILURE(status)) { pr_info("ACPI call for illumination failed.\n"); return LED_OFF; } result = out[2] ? LED_FULL : LED_OFF; /* */ in[0] = 0xf200; in[1] = 0; in[2] = 0; hci_raw(dev, in, out); return result; }