blob: 35aecb5f4aaf58a80802b62f0a6a67890eab0e5d (
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
|
/* Copyright 2012 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.
*/
/* USB charging control module for Chrome EC */
#ifndef __CROS_EC_USB_CHARGE_H
#define __CROS_EC_USB_CHARGE_H
#include "common.h"
#include "ec_commands.h"
/* USB charger voltage */
#define USB_CHARGER_VOLTAGE_MV 5000
/* USB charger minimum current */
#define USB_CHARGER_MIN_CURR_MA 500
#define USB_SYSJUMP_TAG 0x5550 /* "UP" - Usb Port */
#define USB_HOOK_VERSION 1
#ifdef CONFIG_USB_PORT_POWER_SMART
#define USB_PORT_ENABLE_COUNT CONFIG_USB_PORT_POWER_SMART_PORT_COUNT
#elif defined(CONFIG_USB_PORT_POWER_DUMB)
#define USB_PORT_ENABLE_COUNT USB_PORT_COUNT
#endif
/* GPIOs to enable/disable USB ports. Board specific. */
#ifdef USB_PORT_ENABLE_COUNT
#ifdef CONFIG_USB_PORT_ENABLE_DYNAMIC
extern int usb_port_enable[USB_PORT_ENABLE_COUNT];
#else
extern const int usb_port_enable[USB_PORT_ENABLE_COUNT];
#endif
#endif /* USB_PORT_ENABLE_COUNT */
/**
* Set USB charge mode for the port.
*
* @param usb_port_id Port to set.
* @param mode New mode for port.
* @param inhibit_charge Inhibit charging during system suspend.
* @return EC_SUCCESS, or non-zero if error.
*/
int usb_charge_set_mode(int usb_port_id, enum usb_charge_mode mode,
enum usb_suspend_charge inhibit_charge);
#define USB_CHG_EVENT_BC12 TASK_EVENT_CUSTOM_BIT(0)
#define USB_CHG_EVENT_VBUS TASK_EVENT_CUSTOM_BIT(1)
#define USB_CHG_EVENT_INTR TASK_EVENT_CUSTOM_BIT(2)
#define USB_CHG_EVENT_DR_UFP TASK_EVENT_CUSTOM_BIT(3)
#define USB_CHG_EVENT_DR_DFP TASK_EVENT_CUSTOM_BIT(4)
#define USB_CHG_EVENT_CC_OPEN TASK_EVENT_CUSTOM_BIT(5)
#define USB_CHG_EVENT_MUX TASK_EVENT_CUSTOM_BIT(6)
/*
* Define USB_CHG_PORT_TO_TASK_ID() and TASK_ID_TO_USB_CHG__PORT() macros to
* go between USB_CHG port number and task ID. Assume that TASK_ID_USB_CHG_P0,
* is the lowest task ID and IDs are on a continuous range.
*/
#ifdef HAS_TASK_USB_CHG_P0
#define USB_CHG_PORT_TO_TASK_ID(port) (TASK_ID_USB_CHG_P0 + (port))
#define TASK_ID_TO_USB_CHG_PORT(id) ((id) - TASK_ID_USB_CHG_P0)
#else
#define USB_CHG_PORT_TO_TASK_ID(port) -1 /* dummy task ID */
#define TASK_ID_TO_USB_CHG_PORT(id) 0
#endif /* HAS_TASK_USB_CHG_P0 */
/**
* Returns true if the passed port is a power source.
*
* @param port Port number.
* @return True if port is sourcing vbus.
*/
int usb_charger_port_is_sourcing_vbus(int port);
enum usb_switch {
USB_SWITCH_CONNECT,
USB_SWITCH_DISCONNECT,
USB_SWITCH_RESTORE,
};
/**
* Configure USB data switches on type-C port.
*
* @param port port number.
* @param setting new switch setting to configure.
*/
void usb_charger_set_switches(int port, enum usb_switch setting);
/**
* Notify USB_CHG task that VBUS level has changed.
*
* @param port port number.
* @param vbus_level new VBUS level
*/
void usb_charger_vbus_change(int port, int vbus_level);
/**
* Check if ramping is allowed for given supplier
*
* @supplier Supplier to check
*
* @return Ramping is allowed for given supplier
*/
int usb_charger_ramp_allowed(int supplier);
/**
* Get the maximum current limit that we are allowed to ramp to
*
* @supplier Active supplier type
* @sup_curr Input current limit based on supplier
*
* @return Maximum current in mA
*/
int usb_charger_ramp_max(int supplier, int sup_curr);
/**
* Reset available BC 1.2 chargers on all ports
* @param port
*/
void usb_charger_reset_charge(int port);
#endif /* __CROS_EC_USB_CHARGE_H */
|