summaryrefslogtreecommitdiff
path: root/common/mock/tcpc_mock.c
blob: 8a01c0991df5cd15cc154219edd39ddc6201c40f (plain)
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
/* Copyright 2019 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.
 */
 /* Mock for the TCPC interface */

#include "common.h"
#include "console.h"
#include "usb_pd_tcpm.h"
#include "mock/tcpc_mock.h"
#include "memory.h"

/* Public API for controlling/inspecting this mock */
struct mock_tcpc_ctrl mock_tcpc;

void mock_tcpc_reset(void)
{
	memset(&mock_tcpc, 0, sizeof(mock_tcpc));
}

static int mock_init(int port)
{
	return EC_SUCCESS;
}

static int mock_release(int port)
{
	return EC_SUCCESS;
}

static int mock_get_cc(int port,
	enum tcpc_cc_voltage_status *cc1,
	enum tcpc_cc_voltage_status *cc2)
{
	*cc1 = mock_tcpc.cc1;
	*cc2 = mock_tcpc.cc2;
	return EC_SUCCESS;
}

static int mock_get_vbus_level(int port)
{
	return mock_tcpc.vbus_level;
}

static int mock_select_rp_value(int port, int rp)
{
	return EC_SUCCESS;
}

static int mock_set_cc(int port, int pull)
{
	return EC_SUCCESS;
}

static int mock_set_polarity(int port, enum tcpc_cc_polarity polarity)
{
	return EC_SUCCESS;
}

static int mock_set_vconn(int port, int enable)
{
	return EC_SUCCESS;
}

static int mock_set_msg_header(int port, int power_role, int data_role)
{
	++mock_tcpc.num_calls_to_set_header;

	mock_tcpc.power_role = power_role;
	mock_tcpc.data_role = data_role;

	if (!mock_tcpc.should_print_header_changes)
		return EC_SUCCESS;

	ccprints("Setting TCPC header to %s %s",
		power_role == PD_ROLE_SOURCE ? "SRC" : "SNK",
		data_role == PD_ROLE_UFP ? "UFP" : "DFP");

	return EC_SUCCESS;
}

static int mock_set_rx_enable(int port, int enable)
{
	return EC_SUCCESS;
}

static int mock_get_message_raw(int port, uint32_t *payload, int *head)
{
	return EC_SUCCESS;
}

static int mock_transmit(int port,
	enum tcpm_transmit_type type, uint16_t header, const uint32_t *data)
{
	return EC_SUCCESS;
}

void mock_tcpc_alert(int port)
{
}

void mock_tcpc_discharge_vbus(int port, int enable)
{
}

__maybe_unused static int mock_drp_toggle(int port)
{
	return EC_SUCCESS;
}

static int mock_get_chip_info(int port, int live,
	struct ec_response_pd_chip_info_v1 **info)
{
	return EC_SUCCESS;
}

__maybe_unused static int mock_set_snk_ctrl(int port, int enable)
{
	return EC_SUCCESS;
}

__maybe_unused static int mock_set_src_ctrl(int port, int enable)
{
	return EC_SUCCESS;
}

__maybe_unused static int mock_enter_low_power_mode(int port)
{
	return EC_SUCCESS;
}

void mock_set_frs_enable(int port, int enable)
{
}

const struct tcpm_drv mock_tcpc_driver = {
	.init  = &mock_init,
	.release  = &mock_release,
	.get_cc  = &mock_get_cc,
	.get_vbus_level  = &mock_get_vbus_level,
	.select_rp_value  = &mock_select_rp_value,
	.set_cc  = &mock_set_cc,
	.set_polarity  = &mock_set_polarity,
	.set_vconn  = &mock_set_vconn,
	.set_msg_header  = &mock_set_msg_header,
	.set_rx_enable  = &mock_set_rx_enable,
	.get_message_raw  = &mock_get_message_raw,
	.transmit  = &mock_transmit,
	.tcpc_alert  = &mock_tcpc_alert,
	.tcpc_discharge_vbus  = &mock_tcpc_discharge_vbus,
#ifdef CONFIG_USB_PD_DUAL_ROLE_AUTO_TOGGLE
	.drp_toggle  = &mock_drp_toggle,
#endif
	.get_chip_info  = &mock_get_chip_info,
#ifdef CONFIG_USBC_PPC
	.set_snk_ctrl  = &mock_set_snk_ctrl,
	.set_src_ctrl  = &mock_set_src_ctrl,
#endif
#ifdef CONFIG_USB_PD_TCPC_LOW_POWER
	.enter_low_power_mode  = &mock_enter_low_power_mode,
#endif
	.set_frs_enable  = &mock_set_frs_enable,
};