summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorVijay Hiremath <vijay.p.hiremath@intel.com>2016-04-16 01:08:55 -0700
committerchrome-bot <chrome-bot@chromium.org>2016-05-24 15:46:01 -0700
commit313355302b2bc829e7ca16455ffa2a39b46ff4f4 (patch)
treeeb0f338c0c59156408c90402b61847665d157746 /board
parentf4e617e11866c4ce353d42f8c83331017fbf7eb2 (diff)
downloadchrome-ec-313355302b2bc829e7ca16455ffa2a39b46ff4f4.tar.gz
Driver: BD99955: Enable BC1.2 support
BUG=none BRANCH=none TEST=Manually tested on Amenia. Connected Zinger, Type-C, DCP & CDP chargers. Device can negotiate to desired current & voltage and the battery can charge. USB2.0 sync device is detected by Kernel. Change-Id: I58cb69289eef9a966e06bef8fe31d35beaec5e27 Signed-off-by: Vijay Hiremath <vijay.p.hiremath@intel.com> Reviewed-on: https://chromium-review.googlesource.com/341030 Commit-Ready: Vijay P Hiremath <vijay.p.hiremath@intel.com> Tested-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Tested-by: Kevin K Wong <kevin.k.wong@intel.com> Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'board')
-rw-r--r--board/amenia/board.c66
-rw-r--r--board/amenia/board.h1
-rw-r--r--board/amenia/ec.tasklist2
-rw-r--r--board/chell/board.c4
-rw-r--r--board/elm/board.c4
-rw-r--r--board/glados/board.c4
-rw-r--r--board/kevin/board.c2
-rw-r--r--board/lucid/board.c2
-rw-r--r--board/oak/board.c4
-rw-r--r--board/reef/board.c4
-rw-r--r--board/ryu/board.c4
-rw-r--r--board/ryu/board.h2
-rw-r--r--board/samus_pd/board.c4
-rw-r--r--board/strago/board.c4
-rw-r--r--board/wheatley/board.c4
15 files changed, 47 insertions, 64 deletions
diff --git a/board/amenia/board.c b/board/amenia/board.c
index 402ae5519c..d2695d62ca 100644
--- a/board/amenia/board.c
+++ b/board/amenia/board.c
@@ -49,43 +49,6 @@
#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ## args)
#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ## args)
-#if 1 /* TODO: CHARGER / BC1.2 */
-static void update_vbus_supplier(int port, int vbus_level)
-{
- struct charge_port_info charge;
-
- 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);
-}
-
-static void reset_charge(int port)
-{
- struct charge_port_info charge_none;
-
- charge_none.voltage = USB_CHARGER_VOLTAGE_MV;
- charge_none.current = 0;
- charge_manager_update_charge(CHARGE_SUPPLIER_PROPRIETARY,
- port,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_BC12_CDP,
- port,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_BC12_DCP,
- port,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_BC12_SDP,
- port,
- &charge_none);
- charge_manager_update_charge(CHARGE_SUPPLIER_OTHER,
- port,
- &charge_none);
-
- /* Initialize VBUS supplier based on whether VBUS is present */
- update_vbus_supplier(port, pd_snk_is_vbus_provided(port));
-}
-#endif
-
uint16_t tcpc_get_alert_status(void)
{
uint16_t status = 0;
@@ -123,8 +86,7 @@ void vbus0_evt(enum gpio_signal signal)
return;
/* VBUS present GPIO is inverted */
- update_vbus_supplier(0, !gpio_get_level(signal));
-
+ usb_charger_vbus_change(0, !gpio_get_level(signal));
task_wake(TASK_ID_PD_C0);
}
@@ -134,8 +96,7 @@ void vbus1_evt(enum gpio_signal signal)
return;
/* VBUS present GPIO is inverted */
- update_vbus_supplier(1, !gpio_get_level(signal));
-
+ usb_charger_vbus_change(1, !gpio_get_level(signal));
task_wake(TASK_ID_PD_C1);
}
@@ -309,14 +270,6 @@ const struct button_config buttons[CONFIG_BUTTON_COUNT] = {
/* Initialize board. */
static void board_init(void)
{
-#if 1 /* TODO: CHARGER / BC1.2 */
- int i;
-
- /* Initialize all BC1.2 charge suppliers to 0 */
- for (i = 0; i < CONFIG_USB_PD_PORT_COUNT; i++)
- reset_charge(i);
-#endif
-
#if 0 /* TODO: CHARGER */
/* Enable charger interrupt */
gpio_enable_interrupt(GPIO_CHARGER_INT_L);
@@ -343,8 +296,7 @@ int board_set_active_charge_port(int charge_port)
int is_real_port = (charge_port >= 0 &&
charge_port < CONFIG_USB_PD_PORT_COUNT);
/* check if we are source vbus on that port */
- int source = gpio_get_level(charge_port == 0 ? GPIO_USB_C0_5V_EN :
- GPIO_USB_C1_5V_EN);
+ int source = usb_charger_port_is_sourcing_vbus(charge_port);
if (is_real_port && source) {
CPRINTS("Skip enable p%d", charge_port);
@@ -374,10 +326,20 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
+ /* Enable charging trigger by BC1.2 detection */
+ if (supplier == CHARGE_SUPPLIER_BC12_CDP ||
+ supplier == CHARGE_SUPPLIER_BC12_DCP ||
+ supplier == CHARGE_SUPPLIER_BC12_SDP) {
+ if (bd99955_bc12_enable_charging(port, 1))
+ return;
+ }
+
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
}
diff --git a/board/amenia/board.h b/board/amenia/board.h
index 368e7b0b2e..b6117d23cd 100644
--- a/board/amenia/board.h
+++ b/board/amenia/board.h
@@ -42,6 +42,7 @@
#define CONFIG_CHARGER_NARROW_VDC
#define CONFIG_CHARGER_SENSE_RESISTOR 10
#define CONFIG_CHARGER_SENSE_RESISTOR_AC 20
+#define CONFIG_USB_CHARGER
#define CONFIG_CHIPSET_APOLLOLAKE
#define CONFIG_CMD_ACCELS
diff --git a/board/amenia/ec.tasklist b/board/amenia/ec.tasklist
index f47a845f66..8418f4d0f6 100644
--- a/board/amenia/ec.tasklist
+++ b/board/amenia/ec.tasklist
@@ -19,6 +19,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/chell/board.c b/board/chell/board.c
index b1dd93881d..6404844c3b 100644
--- a/board/chell/board.c
+++ b/board/chell/board.c
@@ -352,9 +352,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
diff --git a/board/elm/board.c b/board/elm/board.c
index 809680931d..3a51b0ba68 100644
--- a/board/elm/board.c
+++ b/board/elm/board.c
@@ -289,9 +289,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
diff --git a/board/glados/board.c b/board/glados/board.c
index 8855ae9518..29d05f1dea 100644
--- a/board/glados/board.c
+++ b/board/glados/board.c
@@ -323,9 +323,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
diff --git a/board/kevin/board.c b/board/kevin/board.c
index 1e4cb24a77..f3f99d38b9 100644
--- a/board/kevin/board.c
+++ b/board/kevin/board.c
@@ -196,7 +196,7 @@ int board_set_active_charge_port(int charge_port)
return bd99955_select_input_port(bd99955_port);
}
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
diff --git a/board/lucid/board.c b/board/lucid/board.c
index f5f03e2895..86a423b653 100644
--- a/board/lucid/board.c
+++ b/board/lucid/board.c
@@ -165,7 +165,7 @@ int board_set_active_charge_port(int charge_port)
return EC_SUCCESS;
}
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
int rv;
diff --git a/board/oak/board.c b/board/oak/board.c
index f66c35acee..66ac54d314 100644
--- a/board/oak/board.c
+++ b/board/oak/board.c
@@ -318,9 +318,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
diff --git a/board/reef/board.c b/board/reef/board.c
index 3a6ca25559..81c7054b7a 100644
--- a/board/reef/board.c
+++ b/board/reef/board.c
@@ -363,9 +363,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
diff --git a/board/ryu/board.c b/board/ryu/board.c
index aa59a6778a..0c570a4d2d 100644
--- a/board/ryu/board.c
+++ b/board/ryu/board.c
@@ -546,9 +546,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
int rv;
diff --git a/board/ryu/board.h b/board/ryu/board.h
index 3c5be953ba..a0a20f6479 100644
--- a/board/ryu/board.h
+++ b/board/ryu/board.h
@@ -276,7 +276,7 @@ enum usb_strings {
#define PD_PREFER_LOW_VOLTAGE
/* Set the charge current limit. */
-void board_set_charge_limit(int charge_ma);
+void board_set_charge_limit(int port, int supplier, int charge_ma);
/* PP1800 transition GPIO interrupt handler */
void pp1800_on_off_evt(enum gpio_signal signal);
diff --git a/board/samus_pd/board.c b/board/samus_pd/board.c
index 80e99dd9da..de4a46729a 100644
--- a/board/samus_pd/board.c
+++ b/board/samus_pd/board.c
@@ -495,9 +495,11 @@ static int board_update_charge_limit(int charge_ma)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
/* Update current limit and notify EC if it changed */
if (board_update_charge_limit(charge_ma))
diff --git a/board/strago/board.c b/board/strago/board.c
index 32ca7aa4a8..5c123e7ef4 100644
--- a/board/strago/board.c
+++ b/board/strago/board.c
@@ -346,9 +346,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));
diff --git a/board/wheatley/board.c b/board/wheatley/board.c
index f8754eae0c..408e833697 100644
--- a/board/wheatley/board.c
+++ b/board/wheatley/board.c
@@ -305,9 +305,11 @@ int board_set_active_charge_port(int charge_port)
/**
* Set the charge limit based upon desired maximum.
*
+ * @param port Port number.
+ * @param supplier Charge supplier type.
* @param charge_ma Desired charge limit (mA).
*/
-void board_set_charge_limit(int charge_ma)
+void board_set_charge_limit(int port, int supplier, int charge_ma)
{
charge_set_input_current_limit(MAX(charge_ma,
CONFIG_CHARGER_INPUT_CURRENT));