summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShawn Nematbakhsh <shawnn@chromium.org>2015-12-01 13:56:19 -0800
committerchrome-bot <chrome-bot@chromium.org>2015-12-04 11:33:43 -0800
commitb2945c1ce203358e0fd3cd20880265473a62fd2f (patch)
tree4e47e9ff425701a56ae97682f2fd721b73364e15
parentaad615c80d439f5b4443c6b11661b8896f43b442 (diff)
downloadchrome-ec-b2945c1ce203358e0fd3cd20880265473a62fd2f.tar.gz
snoball: Enable PWMs for post-regulator voltage control
BUG=chrome-os-partner:48044 TEST=Manual with snoball w/ subsequent commit. Run `pwm <ch> 50` for each channel, verify with `adc` that each PD output voltage is approximately VBUCK / 2. BRANCH=None Signed-off-by: Shawn Nematbakhsh <shawnn@chromium.org> Change-Id: I0c791fa4de47f92423c4cfd6ef5013495f5a5019 Reviewed-on: https://chromium-review.googlesource.com/315142 Commit-Ready: Shawn N <shawnn@chromium.org> Tested-by: Shawn N <shawnn@chromium.org> Reviewed-by: Alec Berg <alecaberg@chromium.org>
-rw-r--r--board/snoball/board.c15
-rw-r--r--board/snoball/board.h9
-rw-r--r--board/snoball/gpio.inc16
3 files changed, 32 insertions, 8 deletions
diff --git a/board/snoball/board.c b/board/snoball/board.c
index d4d05f13ea..5eaf722946 100644
--- a/board/snoball/board.c
+++ b/board/snoball/board.c
@@ -15,6 +15,8 @@
#include "host_command.h"
#include "i2c.h"
#include "registers.h"
+#include "pwm.h"
+#include "pwm_chip.h"
#include "task.h"
#include "usb_pd.h"
#include "usb_pd_tcpm.h"
@@ -71,11 +73,24 @@ const struct adc_t adc_channels[] = {
};
BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT);
+#define VR_PWM_FLAGS (PWM_CONFIG_ACTIVE_LOW | PWM_CONFIG_COMPLEMENTARY_OUTPUT)
+
+const struct pwm_t pwm_channels[] = {
+ {STM32_TIM(15), STM32_TIM_CH(1), VR_PWM_FLAGS, 480000},
+ {STM32_TIM(16), STM32_TIM_CH(1), VR_PWM_FLAGS, 480000},
+ {STM32_TIM(17), STM32_TIM_CH(1), VR_PWM_FLAGS, 480000},
+};
+BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT);
+
static void board_init(void)
{
gpio_enable_interrupt(GPIO_TCPC1_INT);
gpio_enable_interrupt(GPIO_TCPC2_INT);
gpio_enable_interrupt(GPIO_TCPC3_INT);
+
+ pwm_enable(PWM_PD1, 1);
+ pwm_enable(PWM_PD2, 1);
+ pwm_enable(PWM_PD3, 1);
}
DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
diff --git a/board/snoball/board.h b/board/snoball/board.h
index 55684fc093..f73a50f5ad 100644
--- a/board/snoball/board.h
+++ b/board/snoball/board.h
@@ -32,6 +32,7 @@
#define CONFIG_HW_CRC
#define CONFIG_I2C
#define CONFIG_I2C_MASTER
+#define CONFIG_PWM
#undef CONFIG_LID_SWITCH
#undef CONFIG_WATCHDOG_HELP
@@ -71,6 +72,14 @@ enum adc_channel {
ADC_CH_COUNT
};
+enum pwm_channel {
+ PWM_PD1 = 0,
+ PWM_PD2,
+ PWM_PD3,
+ /* Number of PWM channels */
+ PWM_CH_COUNT
+};
+
enum board_src_cap {
SRC_CAP_5V = 0,
SRC_CAP_12V,
diff --git a/board/snoball/gpio.inc b/board/snoball/gpio.inc
index cd0b71825e..c2512e3d9d 100644
--- a/board/snoball/gpio.inc
+++ b/board/snoball/gpio.inc
@@ -49,15 +49,15 @@ GPIO(DSPIC_UART_RX, PIN(A, 15), GPIO_INPUT)
/* WKUP6 */
GPIO(WAKE, PIN(B, 5), GPIO_INPUT)
+#endif
/* PWM outputs w/ negation */
GPIO(PD1_PWM, PIN(B, 14), GPIO_OUT_LOW)
-GPIO(PD1_PWM_CMP, PIN(B, 15), GPIO_OUT_HIGH)
+GPIO(PD1_PWM_CMP, PIN(B, 15), GPIO_OUT_LOW)
GPIO(PD2_PWM, PIN(A, 6), GPIO_OUT_LOW)
-GPIO(PD2_PWM_CMP, PIN(B, 6), GPIO_OUT_HIGH)
+GPIO(PD2_PWM_CMP, PIN(B, 6), GPIO_OUT_LOW)
GPIO(PD3_PWM, PIN(A, 7), GPIO_OUT_LOW)
-GPIO(PD3_PWM_CMP, PIN(B, 7), GPIO_OUT_HIGH)
-#endif
+GPIO(PD3_PWM_CMP, PIN(B, 7), GPIO_OUT_LOW)
/* PB8 / PB9 / PB11: I2C1_SCL / I2C1_SDA / I2C2_SDA */
ALTERNATE(PIN_MASK(B, 0x0B00), 1, MODULE_I2C, 0)
@@ -66,10 +66,10 @@ ALTERNATE(PIN_MASK(B, 0x2000), 5, MODULE_I2C, 0)
/* PA9 / PA10 / PA14 / PA15: USART1 / USART2 */
ALTERNATE(PIN_MASK(A, 0xC600), 1, MODULE_UART, 0)
/* PA6 / PA7: TIM16_CH1 / TIM17_CH1 */
-ALTERNATE(PIN_MASK(A, 0x00C0), 5, MODULE_EXTPOWER, 0)
+ALTERNATE(PIN_MASK(A, 0x00C0), 5, MODULE_PWM, 0)
/* PB6 / PB7: TIM16_CH1N / TIM17_CH1N */
-ALTERNATE(PIN_MASK(B, 0x00C0), 2, MODULE_EXTPOWER, 0)
+ALTERNATE(PIN_MASK(B, 0x00C0), 2, MODULE_PWM, 0)
/* PB14: TIM15_CH1 */
-ALTERNATE(PIN_MASK(B, 0x4000), 1, MODULE_EXTPOWER, 0)
+ALTERNATE(PIN_MASK(B, 0x4000), 1, MODULE_PWM, 0)
/* PB15: TIM15_CH1N */
-ALTERNATE(PIN_MASK(B, 0x8000), 3, MODULE_EXTPOWER, 0)
+ALTERNATE(PIN_MASK(B, 0x8000), 3, MODULE_PWM, 0)