summaryrefslogtreecommitdiff
path: root/common/pwm.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/pwm.c')
-rw-r--r--common/pwm.c180
1 files changed, 0 insertions, 180 deletions
diff --git a/common/pwm.c b/common/pwm.c
deleted file mode 100644
index 41989a94e0..0000000000
--- a/common/pwm.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* Copyright 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.
- */
-
-#include "common.h"
-#include "console.h"
-#include "gpio.h"
-#include "hooks.h"
-#include "host_command.h"
-#include "pwm.h"
-#include "util.h"
-
-#ifdef CONFIG_ZEPHYR
-#include "pwm/pwm.h"
-#endif
-
-#ifdef CONFIG_PWM
-
-/*
- * Get target channel based on type / index host command parameters.
- * Returns 0 if a valid channel is selected, -1 on error.
- */
-static int get_target_channel(enum pwm_channel *channel, int type, int index)
-{
- switch (type) {
- case EC_PWM_TYPE_GENERIC:
- *channel = index;
- break;
-#ifdef CONFIG_PWM_KBLIGHT
- case EC_PWM_TYPE_KB_LIGHT:
- *channel = PWM_CH_KBLIGHT;
- break;
-#endif
-#ifdef CONFIG_PWM_DISPLIGHT
- case EC_PWM_TYPE_DISPLAY_LIGHT:
- *channel = PWM_CH_DISPLIGHT;
- break;
-#endif
- default:
- return -1;
- }
-
- return *channel >= PWM_CH_COUNT;
-}
-
-__attribute__((weak)) void pwm_set_raw_duty(enum pwm_channel ch, uint16_t duty)
-{
- int percent;
-
- /* Convert 16 bit duty to percent on [0, 100] */
- percent = DIV_ROUND_NEAREST((uint32_t)duty * 100, 65535);
- pwm_set_duty(ch, percent);
-}
-
-__attribute__((weak)) uint16_t pwm_get_raw_duty(enum pwm_channel ch)
-{
- return (pwm_get_duty(ch) * 65535) / 100;
-}
-
-static enum ec_status
-host_command_pwm_set_duty(struct host_cmd_handler_args *args)
-{
- const struct ec_params_pwm_set_duty *p = args->params;
- enum pwm_channel channel;
-
- if (get_target_channel(&channel, p->pwm_type, p->index))
- return EC_RES_INVALID_PARAM;
-
- pwm_set_raw_duty(channel, p->duty);
- pwm_enable(channel, p->duty > 0);
-
- return EC_RES_SUCCESS;
-}
-DECLARE_HOST_COMMAND(EC_CMD_PWM_SET_DUTY,
- host_command_pwm_set_duty,
- EC_VER_MASK(0));
-
-static enum ec_status
-host_command_pwm_get_duty(struct host_cmd_handler_args *args)
-{
- const struct ec_params_pwm_get_duty *p = args->params;
- struct ec_response_pwm_get_duty *r = args->response;
-
- enum pwm_channel channel;
-
- if (get_target_channel(&channel, p->pwm_type, p->index))
- return EC_RES_INVALID_PARAM;
-
- r->duty = pwm_get_raw_duty(channel);
- args->response_size = sizeof(*r);
-
- return EC_RES_SUCCESS;
-}
-DECLARE_HOST_COMMAND(EC_CMD_PWM_GET_DUTY,
- host_command_pwm_get_duty,
- EC_VER_MASK(0));
-
-/**
- * Print status of a PWM channel.
- *
- * @param ch Channel to print.
- */
-static void print_channel(enum pwm_channel ch, int max_duty)
-{
- if (pwm_get_enabled(ch))
- if (max_duty == 100)
- ccprintf(" %d: %d%%\n", ch, pwm_get_duty(ch));
- else
- ccprintf(" %d: %d\n", ch, pwm_get_raw_duty(ch));
- else
- ccprintf(" %d: disabled\n", ch);
-}
-
-static int cc_pwm_duty(int argc, char **argv)
-{
- int value = 0;
- int max_duty = 100;
- int ch;
- char *e;
- char *raw;
-
- if (argc < 2) {
- ccprintf("PWM channels:\n");
- for (ch = 0; ch < PWM_CH_COUNT; ch++)
- print_channel(ch, max_duty);
- return EC_SUCCESS;
- }
-
- ch = strtoi(argv[1], &e, 0);
- if (*e || ch < 0 || ch >= PWM_CH_COUNT)
- return EC_ERROR_PARAM1;
-
- if (argc > 2) {
- raw = argv[2];
- if (!strcasecmp(raw, "raw")) {
- /* use raw duty */
- value = strtoi(argv[3], &e, 0);
- max_duty = EC_PWM_MAX_DUTY;
- } else {
- /* use percent duty */
- value = strtoi(argv[2], &e, 0);
- max_duty = 100;
- }
-
- if (*e || value > max_duty) {
- /* Bad param */
- return EC_ERROR_PARAM2;
- } else if (value < 0) {
- /* Negative = disable */
- pwm_enable(ch, 0);
- } else {
- ccprintf("Setting channel %d to %d\n", ch, value);
- pwm_enable(ch, 1);
- (max_duty == 100) ? pwm_set_duty(ch, value) :
- pwm_set_raw_duty(ch, value);
- }
- }
-
- print_channel(ch, max_duty);
-
- return EC_SUCCESS;
-}
-DECLARE_CONSOLE_COMMAND(pwmduty, cc_pwm_duty,
- "[channel [<percent> | -1=disable] | [raw <value>]]",
- "Get/set PWM duty cycles ");
-#endif /* CONFIG_PWM */
-
-#ifndef CONFIG_ZEPHYR
-/*
- * Initialize all PWM pins as functional. This is not required under
- * Zephyr as pin configuration is automatically performed by chip driver
- */
-static void pwm_pin_init(void)
-{
- gpio_config_module(MODULE_PWM, 1);
-}
-/* HOOK_PRIO_INIT_PWM may be used for chip PWM unit init, so use PRIO + 1 */
-DECLARE_HOOK(HOOK_INIT, pwm_pin_init, HOOK_PRIO_INIT_PWM + 1);
-#endif /* CONFIG_ZEPHYR */