| /* Copyright (c) 2013 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. |
| */ |
| |
| /* |
| * Dummy power module for Sensor HUB. |
| * |
| * This implements the following features: |
| * when AP_IN_SUSPEND is low, in S0, otherwise S3. |
| * |
| */ |
| |
| #include "chipset.h" /* This module implements chipset functions too */ |
| #include "common.h" |
| #include "console.h" |
| #include "gpio.h" |
| #include "hooks.h" |
| #include "power.h" |
| #include "task.h" |
| #include "util.h" |
| |
| /* Console output macros */ |
| #define CPUTS(outstr) cputs(CC_CHIPSET, outstr) |
| #define CPRINTS(format, args...) cprints(CC_CHIPSET, format, ## args) |
| |
| #define IN_SUSPEND POWER_SIGNAL_MASK(ECDRIVEN_SUSPEND_ASSERTED) |
| |
| enum power_state power_chipset_init(void) |
| { |
| return POWER_S3; |
| } |
| |
| enum power_state power_handle_state(enum power_state state) |
| { |
| switch (state) { |
| case POWER_S3: |
| if (!(power_get_signals() & IN_SUSPEND)) { |
| hook_notify(HOOK_CHIPSET_RESUME); |
| return POWER_S0; |
| } |
| return state; |
| |
| case POWER_S0: |
| if (power_get_signals() & IN_SUSPEND) { |
| hook_notify(HOOK_CHIPSET_SUSPEND); |
| return POWER_S3; |
| } |
| return state; |
| default: |
| CPRINTS("Unexpected state: $d", state); |
| } |
| |
| return state; |
| } |