/* Copyright (c) 2012 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. */ #ifndef __CROS_EC_PWM_H #define __CROS_EC_PWM_H /* The values are defined in board.h */ enum pwm_channel; /** * Enable/disable a PWM channel. */ void pwm_enable(enum pwm_channel ch, int enabled); /** * Get PWM channel enabled status. */ int pwm_get_enabled(enum pwm_channel ch); /** * Set PWM channel frequency (Hz). * PWM will be disabled until the duty is set. */ void pwm_set_freq(enum pwm_channel ch, uint32_t freq); /** * Set PWM channel duty cycle (0-65535). */ void pwm_set_raw_duty(enum pwm_channel ch, uint16_t duty); /** * Get PWM channel duty cycle. */ uint16_t pwm_get_raw_duty(enum pwm_channel ch); /** * Set PWM channel duty cycle (0-100). */ void pwm_set_duty(enum pwm_channel ch, int percent); /** * Get PWM channel duty cycle. */ int pwm_get_duty(enum pwm_channel ch); /* Flags for PWM config table */ /** * PWM output signal is inverted, so 100% duty means always low */ #define PWM_CONFIG_ACTIVE_LOW (1 << 0) /** * PWM channel has a fan controller with a tach input and can auto-adjust * its duty cycle to produce a given fan RPM. */ #define PWM_CONFIG_HAS_RPM_MODE (1 << 1) /** * PWM clock select alternate source. The actual clock and alternate * source are chip dependent. */ #define PWM_CONFIG_ALT_CLOCK (1 << 2) /** * PWM channel has a complementary output signal which should be enabled in * addition to the primary output. */ #define PWM_CONFIG_COMPLEMENTARY_OUTPUT (1 << 3) /** * PWM channel must stay active in low-power idle, if enabled. */ #define PWM_CONFIG_DSLEEP (1 << 4) /** * PWM channel's IO type is open-drain, if enabled. (default IO is push-pull.) */ #define PWM_CONFIG_OPEN_DRAIN (1 << 5) #endif /* __CROS_EC_PWM_H */