summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVijay Hiremath <vijay.p.hiremath@intel.com>2016-06-02 11:42:36 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-06-08 19:17:56 -0700
commit2225fbac6c818752309b1627093ca9d7ca1ac00f (patch)
treeec9602b742b9684665a85f58c8501189cbe3bc9c
parent4a6967951f107dfaf4ea7cc14516b5b1c0819244 (diff)
downloadchrome-ec-2225fbac6c818752309b1627093ca9d7ca1ac00f.tar.gz
reef: Enable BC1.2 support
BUG=chrome-os-partner:53688, chrome-os-partner:53721 BRANCH=none TEST=Type-C, DCP & SDP chargers can negotiate to desired current & voltage. Battery can charge. USB3.0 & USB2.0 sync devices are detected by the Kernel. Change-Id: I37890518c151ef94da2b2ade67a023f72d48fce6 Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com> Reviewed-on: https://chromium-review.googlesource.com/346784 Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com> Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: David Hendricks <dhendrix@chromium.org>
-rw-r--r--board/reef/board.c79
-rw-r--r--board/reef/board.h3
-rw-r--r--board/reef/ec.tasklist2
-rw-r--r--board/reef/gpio.inc2
4 files changed, 17 insertions, 69 deletions
diff --git a/board/reef/board.c b/board/reef/board.c
index b298b64b6e..1fe7aaab80 100644
--- a/board/reef/board.c
+++ b/board/reef/board.c
@@ -66,16 +66,6 @@ static void tcpc_alert_event(enum gpio_signal signal)
#endif
}
-
-/* Exchange status with PD MCU. */
-static void pd_mcu_interrupt(enum gpio_signal signal)
-{
-#ifdef HAS_TASK_PDCMD
- /* Exchange status with PD MCU to determine interrupt cause */
- host_command_pd_send_status(0);
-#endif
-}
-
/*
* enable_input_devices() is called by the tablet_mode ISR, but changes the
* state of GPIOs, so its definition must reside after including gpio_list.
@@ -287,68 +277,19 @@ static void chipset_pre_init(void)
/* Enable PD interrupts */
gpio_enable_interrupt(GPIO_USB_C0_PD_INT);
gpio_enable_interrupt(GPIO_USB_C1_PD_INT_ODL);
-
- /* Enable charger interrupts */
- gpio_enable_interrupt(GPIO_PD_MCU_INT);
#endif
}
DECLARE_HOOK(HOOK_CHIPSET_PRE_INIT, chipset_pre_init, HOOK_PRIO_DEFAULT);
-static void update_vbus_supplier(int port, int vbus_level)
-{
- struct charge_port_info charge;
-
- /*
- * If VBUS is low, or VBUS is high and we are not outputting VBUS
- * ourselves, then update the VBUS supplier.
- */
- if (!vbus_level || !usb_charger_port_is_sourcing_vbus(port)) {
- charge.voltage = USB_CHARGER_VOLTAGE_MV;
- charge.current = vbus_level ? USB_CHARGER_MIN_CURR_MA : 0;
- charge_manager_update_charge(CHARGE_SUPPLIER_VBUS,
- port,
- &charge);
- }
-}
-
-/* TODO: Implement BC1.2 + VBUS detection */
-static void usb_charger_init(void)
-{
- int i;
- struct charge_port_info charge_none;
-
- /* Initialize all charge suppliers to 0 */
- charge_none.voltage = USB_CHARGER_VOLTAGE_MV;
- charge_none.current = 0;
- for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++) {
- charge_manager_update_charge(CHARGE_SUPPLIER_PROPRIETARY,
- i,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_BC12_CDP,
- i,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_BC12_DCP,
- i,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_BC12_SDP,
- i,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_OTHER,
- i,
- &charge_none);
-
- /* Initialize VBUS supplier based on whether VBUS is present */
- update_vbus_supplier(i, pd_snk_is_vbus_provided(i));
- }
-}
-DECLARE_HOOK(HOOK_INIT, usb_charger_init, HOOK_PRIO_CHARGE_MANAGER_INIT + 1);
-
/* Initialize board. */
static void board_init(void)
{
/* FIXME: Handle tablet mode */
/* gpio_enable_interrupt(GPIO_TABLET_MODE_L); */
+ /* Enable charger interrupts */
+ gpio_enable_interrupt(GPIO_CHARGER_INT_L);
+
/*
* There are dependencies in Reef's power topology:
* 1. PP5000 must be enabled before PP3300 (chrome-os-partner:50807).
@@ -426,6 +367,15 @@ int board_set_active_charge_port(int charge_port)
*/
void board_set_charge_limit(int port, int supplier, int charge_ma)
{
+ /* Enable charging trigger by BC1.2 detection */
+ int bc12_enable = (supplier == CHARGE_SUPPLIER_BC12_CDP ||
+ supplier == CHARGE_SUPPLIER_BC12_DCP ||
+ supplier == CHARGE_SUPPLIER_BC12_SDP ||
+ supplier == CHARGE_SUPPLIER_OTHER);
+
+ if (bd99955_bc12_enable_charging(port, bc12_enable))
+ return;
+
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
}
@@ -436,11 +386,6 @@ int extpower_is_present(void)
return bd99955_is_vbus_provided(BD99955_CHARGE_PORT_BOTH);
}
-int usb_charger_port_is_sourcing_vbus(int port)
-{
- return gpio_get_level(port ? GPIO_USB_C1_5V_EN : GPIO_USB_C0_5V_EN);
-}
-
/* Enable or disable input devices, based upon chipset state and tablet mode */
static void enable_input_devices(void)
{
diff --git a/board/reef/board.h b/board/reef/board.h
index 08cbd7235a..837bd292dd 100644
--- a/board/reef/board.h
+++ b/board/reef/board.h
@@ -29,6 +29,7 @@
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_BAT_PCT 1
#define CONFIG_CHARGER_LIMIT_POWER_THRESH_CHG_MW 15000
#define CONFIG_CHARGER_MIN_BAT_PCT_FOR_POWER_ON 1
+#define CONFIG_USB_CHARGER
/* USB PD config */
#define CONFIG_USB_PD_ALT_MODE
@@ -38,7 +39,7 @@
#define CONFIG_USB_PD_LOGGING
#define CONFIG_USB_PD_LOG_SIZE 512
#define CONFIG_USB_PD_PORT_COUNT 2
-#define CONFIG_USB_PD_VBUS_DETECT_TCPC
+#define CONFIG_USB_PD_VBUS_DETECT_CHARGER
#define CONFIG_USB_PD_TCPM_MUX /* for both PS8751 and ANX3429 */
#define CONFIG_USB_PD_TCPM_TCPCI
#define CONFIG_USB_PD_TCPM_ANX74XX
diff --git a/board/reef/ec.tasklist b/board/reef/ec.tasklist
index a07c0f66af..cd755be38c 100644
--- a/board/reef/ec.tasklist
+++ b/board/reef/ec.tasklist
@@ -23,6 +23,8 @@
#define CONFIG_TASK_LIST \
TASK_ALWAYS(HOOKS, hook_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_ALWAYS(ALS, als_task, NULL, TASK_STACK_SIZE) \
+ TASK_ALWAYS(USB_CHG_P0, usb_charger_task, NULL, TASK_STACK_SIZE) \
+ TASK_ALWAYS(USB_CHG_P1, usb_charger_task, NULL, TASK_STACK_SIZE) \
TASK_ALWAYS(CHARGER, charger_task, NULL, LARGER_TASK_STACK_SIZE) \
TASK_NOTEST(MOTIONSENSE, motion_sense_task, NULL, VENTI_TASK_STACK_SIZE) \
TASK_NOTEST(CHIPSET, chipset_task, NULL, LARGER_TASK_STACK_SIZE) \
diff --git a/board/reef/gpio.inc b/board/reef/gpio.inc
index 1c69b0ef8f..c7f3bc7336 100644
--- a/board/reef/gpio.inc
+++ b/board/reef/gpio.inc
@@ -8,7 +8,7 @@
/* Declare symbolic names for all the GPIOs that we care about.
* Note: Those with interrupt handlers must be declared first. */
-GPIO_INT(PD_MCU_INT, PIN(3, 3), GPIO_INT_LOW, pd_mcu_interrupt) /* CHARGER_EC_INT_ODL from BD99955 */
+GPIO_INT(CHARGER_INT_L, PIN(3, 3), GPIO_INT_FALLING, bd99955_vbus_interrupt) /* CHARGER_EC_INT_ODL from BD99955 */
GPIO_INT(USB_C0_PD_INT, PIN(3, 7), GPIO_INT_RISING, tcpc_alert_event) /* from Analogix TCPC */
GPIO_INT(USB_C1_PD_INT_ODL, PIN(D, 2), GPIO_INT_FALLING, tcpc_alert_event) /* from Parade TCPC */