1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
|
/* Copyright 2021 The ChromiumOS Authors
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/* Krabby board-specific USB-C configuration */
#include "adc.h"
#include "baseboard_usbc_config.h"
#include "charge_manager.h"
#include "console.h"
#include "driver/tcpm/it83xx_pd.h"
#include "usb_pd.h"
#include "usbc_ppc.h"
#define CPRINTSUSB(format, args...) cprints(CC_USBCHARGE, format, ##args)
#define CPRINTS(format, args...) cprints(CC_SYSTEM, format, ##args)
#define CPRINTF(format, args...) cprintf(CC_SYSTEM, format, ##args)
const struct cc_para_t *board_get_cc_tuning_parameter(enum usbpd_port port)
{
const static struct cc_para_t
cc_parameter[CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT] = {
{
.rising_time =
IT83XX_TX_PRE_DRIVING_TIME_1_UNIT,
.falling_time =
IT83XX_TX_PRE_DRIVING_TIME_2_UNIT,
},
{
.rising_time =
IT83XX_TX_PRE_DRIVING_TIME_1_UNIT,
.falling_time =
IT83XX_TX_PRE_DRIVING_TIME_2_UNIT,
},
};
return &cc_parameter[port];
}
void board_reset_pd_mcu(void)
{
/*
* C0 & C1: TCPC is embedded in the EC and processes interrupts in the
* chip code (it83xx/intc.c)
*/
}
int board_set_active_charge_port(int port)
{
int i;
int is_valid_port = (port >= 0 && port < board_get_usb_pd_port_count());
if (!is_valid_port && port != CHARGE_PORT_NONE) {
return EC_ERROR_INVAL;
}
if (port == CHARGE_PORT_NONE) {
CPRINTS("Disabling all charger ports");
/* Disable all ports. */
for (i = 0; i < ppc_cnt; i++) {
/*
* Do not return early if one fails otherwise we can
* get into a boot loop assertion failure.
*/
if (ppc_vbus_sink_enable(i, 0)) {
CPRINTS("Disabling C%d as sink failed.", i);
}
}
return EC_SUCCESS;
}
/* Check if the port is sourcing VBUS. */
if (ppc_is_sourcing_vbus(port)) {
CPRINTS("Skip enable C%d", port);
return EC_ERROR_INVAL;
}
CPRINTS("New charge port: C%d", port);
/*
* Turn off the other ports' sink path FETs, before enabling the
* requested charge port.
*/
for (i = 0; i < ppc_cnt; i++) {
if (i == port) {
continue;
}
if (ppc_vbus_sink_enable(i, 0)) {
CPRINTS("C%d: sink path disable failed.", i);
}
}
/* Enable requested charge port. */
if (ppc_vbus_sink_enable(port, 1)) {
CPRINTS("C%d: sink path enable failed.", port);
return EC_ERROR_UNKNOWN;
}
return EC_SUCCESS;
}
#ifdef CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT
enum adc_channel board_get_vbus_adc(int port)
{
if (port == 0) {
return ADC_VBUS_C0;
}
if (port == 1) {
return ADC_VBUS_C1;
}
CPRINTSUSB("Unknown vbus adc port id: %d", port);
return ADC_VBUS_C0;
}
#endif /* CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT */
|