| /* Copyright (c) 2014 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "common.h" |
| #include "config.h" |
| #include "console.h" |
| #include "gpio.h" |
| #include "hooks.h" |
| #include "registers.h" |
| #include "task.h" |
| #include "timer.h" |
| #include "util.h" |
| #include "usb_pd.h" |
| |
| #define CPRINTF(format, args...) cprintf(CC_USBPD, format, ## args) |
| #define CPRINTS(format, args...) cprints(CC_USBPD, format, ## args) |
| |
| #define PDO_FIXED_FLAGS (PDO_FIXED_EXTERNAL | PDO_FIXED_DATA_SWAP) |
| |
| const uint32_t pd_src_pdo[] = { |
| PDO_FIXED(5000, 3000, PDO_FIXED_FLAGS), |
| PDO_FIXED(12000, 3000, PDO_FIXED_FLAGS), |
| PDO_FIXED(20000, 3000, PDO_FIXED_FLAGS), |
| }; |
| const int pd_src_pdo_cnt = ARRAY_SIZE(pd_src_pdo); |
| |
| const uint32_t pd_snk_pdo[] = { |
| PDO_FIXED(5000, 500, PDO_FIXED_FLAGS), |
| PDO_BATT(4750, 21000, 15000), |
| PDO_VAR(4750, 21000, 3000), |
| }; |
| const int pd_snk_pdo_cnt = ARRAY_SIZE(pd_snk_pdo); |
| |
| void pd_set_input_current_limit(int port, uint32_t max_ma, |
| uint32_t supply_voltage) |
| { |
| int red = supply_voltage == 20000; |
| int green = supply_voltage == 5000; |
| int blue = supply_voltage && !(red || green); |
| gpio_set_level(GPIO_LED_R_L, !red); |
| gpio_set_level(GPIO_LED_G_L, !green); |
| gpio_set_level(GPIO_LED_B_L, !blue); |
| } |
| |
| int pd_is_valid_input_voltage(int mv) |
| { |
| /* Any voltage less than the max is allowed */ |
| return 1; |
| } |
| |
| void pd_transition_voltage(int idx) |
| { |
| } |
| |
| int pd_set_power_supply_ready(int port) |
| { |
| return EC_SUCCESS; /* we are ready */ |
| } |
| |
| void pd_power_supply_reset(int port) |
| { |
| } |
| |
| int pd_snk_is_vbus_provided(int port) |
| { |
| /* assume the alert was programmed to detect bus voltage above 4.5V */ |
| return (gpio_get_level(GPIO_VBUS_ALERT_L) == 0); |
| } |
| |
| int pd_board_checks(void) |
| { |
| return EC_SUCCESS; |
| } |
| |
| int pd_check_power_swap(int port) |
| { |
| /* Always refuse power swap */ |
| return 0; |
| } |
| |
| int pd_check_data_swap(int port, int data_role) |
| { |
| /* Always allow data swap */ |
| return 1; |
| } |
| |
| void pd_check_pr_role(int port, int pr_role, int flags) |
| { |
| } |
| |
| void pd_check_dr_role(int port, int dr_role, int flags) |
| { |
| } |
| |
| void pd_execute_data_swap(int port, int data_role) |
| { |
| /* Do nothing */ |
| } |
| |
| /* ----------------- Vendor Defined Messages ------------------ */ |
| const struct svdm_response svdm_rsp = { |
| .identity = NULL, |
| .svids = NULL, |
| .modes = NULL, |
| }; |
| |
| int pd_custom_vdm(int port, int cnt, uint32_t *payload, |
| uint32_t **rpayload) |
| { |
| return 0; |
| } |
| |
| const struct svdm_amode_fx supported_modes[] = { |
| }; |
| const int supported_modes_cnt = ARRAY_SIZE(supported_modes); |