| /* Copyright 2014 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* Inductive charging control */ |
| |
| #include "common.h" |
| #include "gpio.h" |
| #include "hooks.h" |
| #include "lid_switch.h" |
| |
| void inductive_charging_interrupt(enum gpio_signal signal) |
| { |
| int charger_enabled = gpio_get_level(GPIO_BASE_CHG_VDD_EN); |
| int charge_done = gpio_get_level(GPIO_CHARGE_DONE); |
| |
| if (!charger_enabled || charge_done) |
| gpio_set_level(GPIO_CHARGE_EN, 0); |
| else |
| gpio_set_level(GPIO_CHARGE_EN, 1); |
| } |
| |
| static void inductive_charging_lid_update(void) |
| { |
| int lid_open = lid_is_open(); |
| gpio_set_level(GPIO_BASE_CHG_VDD_EN, !lid_open); |
| inductive_charging_interrupt(GPIO_LID_OPEN); |
| } |
| DECLARE_HOOK(HOOK_LID_CHANGE, inductive_charging_lid_update, HOOK_PRIO_DEFAULT); |
| |
| static void inductive_charging_init(void) |
| { |
| gpio_enable_interrupt(GPIO_CHARGE_DONE); |
| inductive_charging_lid_update(); |
| } |
| DECLARE_HOOK(HOOK_INIT, inductive_charging_init, HOOK_PRIO_DEFAULT); |