summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVincent Palatin <vpalatin@chromium.org>2014-06-03 13:38:08 -0700
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-06-07 01:25:24 +0000
commit3d9544ae42a1c952d31a39fea71dc9c6c52fbdcc (patch)
tree7718b9cb2314146da484931ceac5aa91f52e4104
parent3d51ec882392bbb819ee75ca4a7010d62d224128 (diff)
downloadchrome-ec-3d9544ae42a1c952d31a39fea71dc9c6c52fbdcc.tar.gz
fruitpie: new PD TX driving for reworked board
For boards reworked with FETs on the TX path, TX_DATA (PB14) needs to be driven low when we are not transmitting. Set MISO as GPIO low by default and set the alternate SPI function in the TX enable code. This should be backward compatible with non-reworked Fruitpies. Signed-off-by: Vincent Palatin <vpalatin@chromium.org> BRANCH=none BUG=none TEST=plug 2 fruitpies with a type-C cable and do a PD power negotiation. Change-Id: I9ef9c84147e9468667eed9c96647c6a9a7f79fdd Reviewed-on: https://chromium-review.googlesource.com/202512 Tested-by: Vincent Palatin <vpalatin@chromium.org> Reviewed-by: Daming Chen <ddchen@chromium.org> Reviewed-by: Alec Berg <alecaberg@chromium.org> Commit-Queue: Vincent Palatin <vpalatin@chromium.org>
-rw-r--r--board/fruitpie/board.c4
-rw-r--r--board/fruitpie/board.h2
-rw-r--r--board/fruitpie/usb_pd_config.h9
3 files changed, 12 insertions, 3 deletions
diff --git a/board/fruitpie/board.c b/board/fruitpie/board.c
index c715b86c0e..c0121208de 100644
--- a/board/fruitpie/board.c
+++ b/board/fruitpie/board.c
@@ -42,9 +42,9 @@ const struct gpio_info gpio_list[] = {
{"USB_CC2_PD", GPIO_A, (1<<4), GPIO_ANALOG, NULL},
{"PD_CLK_OUT", GPIO_B, (1<<9), GPIO_OUT_LOW, NULL},
{"PD_TX_EN", GPIO_B, (1<<12), GPIO_OUT_LOW, NULL},
+ {"PD_TX_DATA", GPIO_B, (1<<14), GPIO_OUT_LOW, NULL},
#if 0
{"PD_CLK_IN", GPIO_B, (1<<13), GPIO_OUT_LOW, NULL},
- {"PD_TX_DATA", GPIO_B, (1<<14), GPIO_OUT_LOW, NULL},
#endif
/* Power and muxes control */
@@ -104,7 +104,7 @@ DECLARE_HOOK(HOOK_INIT, board_init, HOOK_PRIO_DEFAULT);
/* Pins with alternate functions */
const struct gpio_alt_func gpio_alt_funcs[] = {
- {GPIO_B, 0x6000, 0, MODULE_USB_PD},/* SPI2: MISO(PB14) SCK(PB13) */
+ {GPIO_B, 0x2000, 0, MODULE_USB_PD},/* SPI2: SCK(PB13) */
{GPIO_B, 0x0200, 2, MODULE_USB_PD},/* TIM17_CH1: PB9) */
{GPIO_A, 0xC000, 1, MODULE_UART}, /* USART2: PA14/PA15 */
{GPIO_B, 0x0cc0, 1, MODULE_I2C}, /* I2C SLAVE:PB6/7 MASTER:PB10/11 */
diff --git a/board/fruitpie/board.h b/board/fruitpie/board.h
index 8ab7345c56..9b5692f5f4 100644
--- a/board/fruitpie/board.h
+++ b/board/fruitpie/board.h
@@ -69,9 +69,9 @@ enum gpio_signal {
GPIO_USB_CC2_PD,
GPIO_PD_CLK_OUT,
GPIO_PD_TX_EN,
+ GPIO_PD_TX_DATA,
#if 0
GPIO_PD_CLK_IN,
- GPIO_PD_TX_DATA,
#endif
/* Power and muxes control */
diff --git a/board/fruitpie/usb_pd_config.h b/board/fruitpie/usb_pd_config.h
index 75d3b112c3..efd702a284 100644
--- a/board/fruitpie/usb_pd_config.h
+++ b/board/fruitpie/usb_pd_config.h
@@ -47,11 +47,20 @@ static inline void pd_set_pins_speed(void)
static inline void pd_tx_enable(int polarity)
{
gpio_set_level(GPIO_PD_TX_EN, 1);
+ /* TX_DATA on PB14 is now connected to SPI2 */
+ gpio_set_alternate_function(GPIO_B, 0x4000, 0);
}
/* Put the TX driver in Hi-Z state */
static inline void pd_tx_disable(int polarity)
{
+ /* TX_DATA on PB14 is an output low GPIO to disable the FET */
+ STM32_GPIO_MODER(GPIO_B) = (STM32_GPIO_MODER(GPIO_B) & ~(3 << (2*14)))
+ | (1 << (2*14));
+ /*
+ * Tri-state the low side after the high side
+ * to ensure we are not going above Vnc
+ */
gpio_set_level(GPIO_PD_TX_EN, 0);
}