void fill_lb_gpios(struct lb_gpios *gpios) { int count = 0; /* Write Protect: active low */ gpios->gpios[count].port = GPIO_R1_INDEX; gpios->gpios[count].polarity = ACTIVE_LOW; gpios->gpios[count].value = gpio_get_in_value(GPIO(R1)); strncpy((char *)gpios->gpios[count].name, "write protect", GPIO_MAX_NAME_LENGTH); count++; /* Recovery: active high */ gpios->gpios[count].port = -1; gpios->gpios[count].polarity = ACTIVE_HIGH; gpios->gpios[count].value = get_recovery_mode_switch(); strncpy((char *)gpios->gpios[count].name, "recovery", GPIO_MAX_NAME_LENGTH); count++; /* Lid: active high */ gpios->gpios[count].port = GPIO_R4_INDEX; gpios->gpios[count].polarity = ACTIVE_HIGH; gpios->gpios[count].value = gpio_get_in_value(GPIO(R4)); strncpy((char *)gpios->gpios[count].name, "lid", GPIO_MAX_NAME_LENGTH); count++; /* Power: active low */ gpios->gpios[count].port = GPIO_Q0_INDEX; gpios->gpios[count].polarity = ACTIVE_LOW; gpios->gpios[count].value = gpio_get_in_value(GPIO(Q0)); strncpy((char *)gpios->gpios[count].name, "power", GPIO_MAX_NAME_LENGTH); count++; /* Developer: virtual GPIO active high */ gpios->gpios[count].port = -1; gpios->gpios[count].polarity = ACTIVE_HIGH; gpios->gpios[count].value = get_developer_mode_switch(); strncpy((char *)gpios->gpios[count].name, "developer", GPIO_MAX_NAME_LENGTH); count++; gpios->size = sizeof(*gpios) + (count * sizeof(struct lb_gpio)); gpios->count = count; printk(BIOS_ERR, "Added %d GPIOS size %d\n", count, gpios->size); }
int get_recovery_mode_switch(void) { uint32_t ec_events; /* The GPIO is active low. */ if (!gpio_get_in_value(GPIO(Q7))) // RECMODE_GPIO return 1; ec_events = google_chromeec_get_events_b(); return !!(ec_events & EC_HOST_EVENT_MASK(EC_HOST_EVENT_KEYBOARD_RECOVERY)); }
int get_write_protect_state(void) { return !gpio_get_in_value(GPIO(R1)); }
static int get_gpio(struct GpioOps *me) { IpqGpio *gpio = container_of(me, IpqGpio, gpio_ops); return gpio_get_in_value(gpio->desc); }