| /* Copyright 2012 The ChromiumOS Authors |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| /* Common interface to throttle the AP */ |
| |
| #ifndef __CROS_EC_THROTTLE_AP_H |
| #define __CROS_EC_THROTTLE_AP_H |
| |
| #define PROCHOT_IN_DEBOUNCE_US (100 * MSEC) |
| |
| /** |
| * Level of throttling desired. |
| */ |
| enum throttle_level { |
| THROTTLE_OFF = 0, |
| THROTTLE_ON, |
| }; |
| |
| /** |
| * Types of throttling desired. These are independent. |
| */ |
| enum throttle_type { |
| THROTTLE_SOFT = 0, /* for example, host events */ |
| THROTTLE_HARD, /* for example, PROCHOT */ |
| NUM_THROTTLE_TYPES |
| }; |
| |
| /** |
| * Possible sources for CPU throttling requests. |
| */ |
| enum throttle_sources { |
| THROTTLE_SRC_THERMAL = 0, |
| THROTTLE_SRC_BAT_DISCHG_CURRENT, |
| THROTTLE_SRC_BAT_VOLTAGE, |
| THROTTLE_SRC_AC, |
| }; |
| |
| /** |
| * PROCHOT detection GPIOs. PROCHOT in assumed to be active high unless |
| * CONFIG_CPU_PROCHOT_ACTIVE_LOW is enabled. |
| * C10 input polarity is explicitly specified in the struct below. |
| */ |
| struct prochot_cfg { |
| enum gpio_signal gpio_prochot_in; |
| void (*callback)(bool asserted, void *data); |
| void *callback_data; |
| #ifdef CONFIG_CPU_PROCHOT_GATE_ON_C10 |
| enum gpio_signal gpio_c10_in; |
| bool c10_active_high; |
| #endif |
| }; |
| |
| /** |
| * Enable/disable CPU throttling. |
| * |
| * This is a virtual "OR" operation. Any caller can enable CPU throttling of |
| * any type, but all callers must agree in order to disable that type. |
| * |
| * @param level Level of throttling desired |
| * @param type Type of throttling desired |
| * @param source Which task is requesting throttling |
| */ |
| #if defined(CONFIG_THROTTLE_AP) || \ |
| defined(CONFIG_THROTTLE_AP_ON_BAT_DISCHG_CURRENT) || \ |
| defined(CONFIG_THROTTLE_AP_ON_BAT_VOLTAGE) |
| |
| void throttle_ap(enum throttle_level level, enum throttle_type type, |
| enum throttle_sources source); |
| |
| /** |
| * Configure the GPIOs used to monitor the PROCHOT signal. |
| * |
| * @param cfg GPIO configuration for the PROCHOT and optional C10 |
| * signals. |
| */ |
| void throttle_ap_config_prochot(const struct prochot_cfg *cfg); |
| |
| /** |
| * Interrupt handler to monitor PROCHOT input to the EC. The PROCHOT signal |
| * can be asserted by the AP or by other devices on the board, such as chargers |
| * and voltage regulators. |
| * |
| * The board initialization is responsible for enabling the interrupt. |
| * |
| * @param signal GPIO signal connected to PROCHOT input. The polarity of this |
| * signal is active high unless CONFIG_CPU_PROCHOT_ACTIVE_LOW |
| * is defined. |
| */ |
| void throttle_ap_prochot_input_interrupt(enum gpio_signal signal); |
| |
| /** |
| * Interrupt handler to monitor the C10 input to the EC. The C10 signal |
| * can be asserted by the AP when entering an idle state. This interrupt |
| * is configured for the edge indicating C10 is de-asserting (GPIO_INT_RISING |
| * if the signal is active low, GPIO_INT_FALLING for an active high signal). |
| * |
| * The board initialization is responsible for enabling the interrupt. |
| * |
| * @param signal GPIO signal connected to C10 input. |
| */ |
| void throttle_ap_c10_input_interrupt(enum gpio_signal signal); |
| |
| #else |
| static inline void throttle_ap(enum throttle_level level, |
| enum throttle_type type, |
| enum throttle_sources source) |
| { |
| } |
| #endif |
| |
| void throttle_gpu(enum throttle_level level, enum throttle_type type, |
| enum throttle_sources source); |
| |
| #endif /* __CROS_EC_THROTTLE_AP_H */ |