Linux-libre 5.4.47-gnu
[librecmc/linux-libre.git] / drivers / usb / phy / phy-mv-usb.h
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2011 Marvell International Ltd. All rights reserved.
4  */
5
6 #ifndef __MV_USB_OTG_CONTROLLER__
7 #define __MV_USB_OTG_CONTROLLER__
8
9 #include <linux/types.h>
10
11 /* Command Register Bit Masks */
12 #define USBCMD_RUN_STOP                 (0x00000001)
13 #define USBCMD_CTRL_RESET               (0x00000002)
14
15 /* otgsc Register Bit Masks */
16 #define OTGSC_CTRL_VUSB_DISCHARGE               0x00000001
17 #define OTGSC_CTRL_VUSB_CHARGE                  0x00000002
18 #define OTGSC_CTRL_OTG_TERM                     0x00000008
19 #define OTGSC_CTRL_DATA_PULSING                 0x00000010
20 #define OTGSC_STS_USB_ID                        0x00000100
21 #define OTGSC_STS_A_VBUS_VALID                  0x00000200
22 #define OTGSC_STS_A_SESSION_VALID               0x00000400
23 #define OTGSC_STS_B_SESSION_VALID               0x00000800
24 #define OTGSC_STS_B_SESSION_END                 0x00001000
25 #define OTGSC_STS_1MS_TOGGLE                    0x00002000
26 #define OTGSC_STS_DATA_PULSING                  0x00004000
27 #define OTGSC_INTSTS_USB_ID                     0x00010000
28 #define OTGSC_INTSTS_A_VBUS_VALID               0x00020000
29 #define OTGSC_INTSTS_A_SESSION_VALID            0x00040000
30 #define OTGSC_INTSTS_B_SESSION_VALID            0x00080000
31 #define OTGSC_INTSTS_B_SESSION_END              0x00100000
32 #define OTGSC_INTSTS_1MS                        0x00200000
33 #define OTGSC_INTSTS_DATA_PULSING               0x00400000
34 #define OTGSC_INTR_USB_ID                       0x01000000
35 #define OTGSC_INTR_A_VBUS_VALID                 0x02000000
36 #define OTGSC_INTR_A_SESSION_VALID              0x04000000
37 #define OTGSC_INTR_B_SESSION_VALID              0x08000000
38 #define OTGSC_INTR_B_SESSION_END                0x10000000
39 #define OTGSC_INTR_1MS_TIMER                    0x20000000
40 #define OTGSC_INTR_DATA_PULSING                 0x40000000
41
42 #define CAPLENGTH_MASK          (0xff)
43
44 /* Timer's interval, unit 10ms */
45 #define T_A_WAIT_VRISE          100
46 #define T_A_WAIT_BCON           2000
47 #define T_A_AIDL_BDIS           100
48 #define T_A_BIDL_ADIS           20
49 #define T_B_ASE0_BRST           400
50 #define T_B_SE0_SRP             300
51 #define T_B_SRP_FAIL            2000
52 #define T_B_DATA_PLS            10
53 #define T_B_SRP_INIT            100
54 #define T_A_SRP_RSPNS           10
55 #define T_A_DRV_RSM             5
56
57 enum otg_function {
58         OTG_B_DEVICE = 0,
59         OTG_A_DEVICE
60 };
61
62 enum mv_otg_timer {
63         A_WAIT_BCON_TIMER = 0,
64         OTG_TIMER_NUM
65 };
66
67 /* PXA OTG state machine */
68 struct mv_otg_ctrl {
69         /* internal variables */
70         u8 a_set_b_hnp_en;      /* A-Device set b_hnp_en */
71         u8 b_srp_done;
72         u8 b_hnp_en;
73
74         /* OTG inputs */
75         u8 a_bus_drop;
76         u8 a_bus_req;
77         u8 a_clr_err;
78         u8 a_bus_resume;
79         u8 a_bus_suspend;
80         u8 a_conn;
81         u8 a_sess_vld;
82         u8 a_srp_det;
83         u8 a_vbus_vld;
84         u8 b_bus_req;           /* B-Device Require Bus */
85         u8 b_bus_resume;
86         u8 b_bus_suspend;
87         u8 b_conn;
88         u8 b_se0_srp;
89         u8 b_sess_end;
90         u8 b_sess_vld;
91         u8 id;
92         u8 a_suspend_req;
93
94         /*Timer event */
95         u8 a_aidl_bdis_timeout;
96         u8 b_ase0_brst_timeout;
97         u8 a_bidl_adis_timeout;
98         u8 a_wait_bcon_timeout;
99
100         struct timer_list timer[OTG_TIMER_NUM];
101 };
102
103 #define VUSBHS_MAX_PORTS        8
104
105 struct mv_otg_regs {
106         u32 usbcmd;             /* Command register */
107         u32 usbsts;             /* Status register */
108         u32 usbintr;            /* Interrupt enable */
109         u32 frindex;            /* Frame index */
110         u32 reserved1[1];
111         u32 deviceaddr;         /* Device Address */
112         u32 eplistaddr;         /* Endpoint List Address */
113         u32 ttctrl;             /* HOST TT status and control */
114         u32 burstsize;          /* Programmable Burst Size */
115         u32 txfilltuning;       /* Host Transmit Pre-Buffer Packet Tuning */
116         u32 reserved[4];
117         u32 epnak;              /* Endpoint NAK */
118         u32 epnaken;            /* Endpoint NAK Enable */
119         u32 configflag;         /* Configured Flag register */
120         u32 portsc[VUSBHS_MAX_PORTS];   /* Port Status/Control x, x = 1..8 */
121         u32 otgsc;
122         u32 usbmode;            /* USB Host/Device mode */
123         u32 epsetupstat;        /* Endpoint Setup Status */
124         u32 epprime;            /* Endpoint Initialize */
125         u32 epflush;            /* Endpoint De-initialize */
126         u32 epstatus;           /* Endpoint Status */
127         u32 epcomplete;         /* Endpoint Interrupt On Complete */
128         u32 epctrlx[16];        /* Endpoint Control, where x = 0.. 15 */
129         u32 mcr;                /* Mux Control */
130         u32 isr;                /* Interrupt Status */
131         u32 ier;                /* Interrupt Enable */
132 };
133
134 struct mv_otg {
135         struct usb_phy phy;
136         struct mv_otg_ctrl otg_ctrl;
137
138         /* base address */
139         void __iomem *phy_regs;
140         void __iomem *cap_regs;
141         struct mv_otg_regs __iomem *op_regs;
142
143         struct platform_device *pdev;
144         int irq;
145         u32 irq_status;
146         u32 irq_en;
147
148         struct delayed_work work;
149         struct workqueue_struct *qwork;
150
151         spinlock_t wq_lock;
152
153         struct mv_usb_platform_data *pdata;
154
155         unsigned int active;
156         unsigned int clock_gating;
157         struct clk *clk;
158 };
159
160 #endif