xref: /openbmc/linux/drivers/usb/chipidea/otg_fsm.h (revision 5fd54ace)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (C) 2014 Freescale Semiconductor, Inc.
4  *
5  * Author: Jun Li
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License version 2 as
9  * published by the Free Software Foundation.
10  */
11 
12 #ifndef __DRIVERS_USB_CHIPIDEA_OTG_FSM_H
13 #define __DRIVERS_USB_CHIPIDEA_OTG_FSM_H
14 
15 #include <linux/usb/otg-fsm.h>
16 
17 /*
18  *  A-DEVICE timing  constants
19  */
20 
21 /* Wait for VBUS Rise  */
22 #define TA_WAIT_VRISE        (100)	/* a_wait_vrise: section 7.1.2
23 					 * a_wait_vrise_tmr: section 7.4.5.1
24 					 * TA_VBUS_RISE <= 100ms, section 4.4
25 					 * Table 4-1: Electrical Characteristics
26 					 * ->DC Electrical Timing
27 					 */
28 /* Wait for VBUS Fall  */
29 #define TA_WAIT_VFALL        (1000)	/* a_wait_vfall: section 7.1.7
30 					 * a_wait_vfall_tmr: section: 7.4.5.2
31 					 */
32 /* Wait for B-Connect */
33 #define TA_WAIT_BCON         (10000)	/* a_wait_bcon: section 7.1.3
34 					 * TA_WAIT_BCON: should be between 1100
35 					 * and 30000 ms, section 5.5, Table 5-1
36 					 */
37 /* A-Idle to B-Disconnect */
38 #define TA_AIDL_BDIS         (5000)	/* a_suspend min 200 ms, section 5.2.1
39 					 * TA_AIDL_BDIS: section 5.5, Table 5-1
40 					 */
41 /* B-Idle to A-Disconnect */
42 #define TA_BIDL_ADIS         (500)	/* TA_BIDL_ADIS: section 5.2.1
43 					 * 500ms is used for B switch to host
44 					 * for safe
45 					 */
46 
47 /*
48  * B-device timing constants
49  */
50 
51 /* Data-Line Pulse Time*/
52 #define TB_DATA_PLS          (10)	/* b_srp_init,continue 5~10ms
53 					 * section:5.1.3
54 					 */
55 /* SRP Fail Time  */
56 #define TB_SRP_FAIL          (6000)	/* b_srp_init,fail time 5~6s
57 					 * section:5.1.6
58 					 */
59 /* A-SE0 to B-Reset  */
60 #define TB_ASE0_BRST         (155)	/* minimum 155 ms, section:5.3.1 */
61 /* SE0 Time Before SRP */
62 #define TB_SE0_SRP           (1000)	/* b_idle,minimum 1s, section:5.1.2 */
63 /* SSEND time before SRP */
64 #define TB_SSEND_SRP         (1500)	/* minimum 1.5 sec, section:5.1.2 */
65 
66 #define TB_AIDL_BDIS         (20)	/* 4ms ~ 150ms, section 5.2.1 */
67 
68 #if IS_ENABLED(CONFIG_USB_OTG_FSM)
69 
70 int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci);
71 int ci_otg_fsm_work(struct ci_hdrc *ci);
72 irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci);
73 void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci);
74 void ci_hdrc_otg_fsm_remove(struct ci_hdrc *ci);
75 
76 #else
77 
78 static inline int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
79 {
80 	return 0;
81 }
82 
83 static inline int ci_otg_fsm_work(struct ci_hdrc *ci)
84 {
85 	return -ENXIO;
86 }
87 
88 static inline irqreturn_t ci_otg_fsm_irq(struct ci_hdrc *ci)
89 {
90 	return IRQ_NONE;
91 }
92 
93 static inline void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci)
94 {
95 
96 }
97 
98 static inline void ci_hdrc_otg_fsm_remove(struct ci_hdrc *ci)
99 {
100 
101 }
102 
103 #endif
104 
105 #endif /* __DRIVERS_USB_CHIPIDEA_OTG_FSM_H */
106