diff options
author | Vijay Hiremath <vijay.p.hiremath@intel.com> | 2016-04-16 01:08:55 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2016-05-24 15:46:01 -0700 |
commit | 313355302b2bc829e7ca16455ffa2a39b46ff4f4 (patch) | |
tree | eb0f338c0c59156408c90402b61847665d157746 /board | |
parent | f4e617e11866c4ce353d42f8c83331017fbf7eb2 (diff) | |
download | chrome-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.c | 66 | ||||
-rw-r--r-- | board/amenia/board.h | 1 | ||||
-rw-r--r-- | board/amenia/ec.tasklist | 2 | ||||
-rw-r--r-- | board/chell/board.c | 4 | ||||
-rw-r--r-- | board/elm/board.c | 4 | ||||
-rw-r--r-- | board/glados/board.c | 4 | ||||
-rw-r--r-- | board/kevin/board.c | 2 | ||||
-rw-r--r-- | board/lucid/board.c | 2 | ||||
-rw-r--r-- | board/oak/board.c | 4 | ||||
-rw-r--r-- | board/reef/board.c | 4 | ||||
-rw-r--r-- | board/ryu/board.c | 4 | ||||
-rw-r--r-- | board/ryu/board.h | 2 | ||||
-rw-r--r-- | board/samus_pd/board.c | 4 | ||||
-rw-r--r-- | board/strago/board.c | 4 | ||||
-rw-r--r-- | board/wheatley/board.c | 4 |
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)); |