summaryrefslogtreecommitdiff
path: root/board/volmar/pwm.c
diff options
context:
space:
mode:
Diffstat (limited to 'board/volmar/pwm.c')
-rw-r--r--board/volmar/pwm.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/board/volmar/pwm.c b/board/volmar/pwm.c
new file mode 100644
index 0000000000..de19f15cd5
--- /dev/null
+++ b/board/volmar/pwm.c
@@ -0,0 +1,71 @@
+/* Copyright 2022 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.
+ */
+
+#include "common.h"
+
+#include "compile_time_macros.h"
+#include "hooks.h"
+#include "pwm.h"
+#include "pwm_chip.h"
+
+const struct pwm_t pwm_channels[] = {
+ [PWM_CH_LED2] = {
+ .channel = 0,
+ .flags = PWM_CONFIG_ACTIVE_LOW | PWM_CONFIG_DSLEEP,
+ .freq = 4800,
+ },
+ [PWM_CH_LED3] = {
+ .channel = 1,
+ .flags = PWM_CONFIG_ACTIVE_LOW | PWM_CONFIG_DSLEEP,
+ .freq = 4800,
+ },
+ [PWM_CH_LED1] = {
+ .channel = 2,
+ .flags = PWM_CONFIG_ACTIVE_LOW | PWM_CONFIG_DSLEEP,
+ .freq = 4800,
+ },
+ [PWM_CH_KBLIGHT] = {
+ .channel = 3,
+ .flags = 0,
+ /*
+ * Set PWM frequency to multiple of 50 Hz and 60 Hz to prevent
+ * flicker. Higher frequencies consume similar average power to
+ * lower PWM frequencies, but higher frequencies record a much
+ * lower maximum power.
+ */
+ .freq = 2400,
+ },
+ [PWM_CH_FAN] = {
+ .channel = 5,
+ .flags = PWM_CONFIG_OPEN_DRAIN | PWM_CONFIG_DSLEEP,
+ .freq = 1000
+ },
+ [PWM_CH_LED4] = {
+ .channel = 7,
+ .flags = PWM_CONFIG_ACTIVE_LOW | PWM_CONFIG_DSLEEP,
+ .freq = 4800,
+ },
+};
+BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT);
+
+static void board_pwm_init(void)
+{
+ /*
+ * Turn off all the LEDs.
+ * Turn on the fan at 100%.
+ */
+ pwm_enable(PWM_CH_LED1, 1);
+ pwm_set_duty(PWM_CH_LED1, 0);
+ pwm_enable(PWM_CH_LED2, 1);
+ pwm_set_duty(PWM_CH_LED2, 0);
+ pwm_enable(PWM_CH_LED3, 1);
+ pwm_set_duty(PWM_CH_LED3, 0);
+ pwm_enable(PWM_CH_LED4, 1);
+ pwm_set_duty(PWM_CH_LED4, 0);
+
+ pwm_enable(PWM_CH_KBLIGHT, 1);
+ pwm_set_duty(PWM_CH_KBLIGHT, 50);
+}
+DECLARE_HOOK(HOOK_INIT, board_pwm_init, HOOK_PRIO_DEFAULT);