Merge remote-tracking branch 'origin/develop-3.10' into develop-3.10-next
[firefly-linux-kernel-4.4.55.git] / drivers / usb / dwc_otg_310 / usbdev_rk.h
1 #ifndef __USBDEV_RK_H
2 #define __USBDEV_RK_H
3
4 #include <linux/kernel.h>
5 #include <linux/platform_device.h>
6 #include <linux/delay.h>
7 #include <linux/dma-mapping.h>
8 #include <linux/clk.h>
9 #include <linux/module.h>
10 #include <linux/slab.h>
11 #include <linux/err.h>
12 #include <linux/io.h>
13 #include <linux/of_gpio.h>
14 #include <linux/of_device.h>
15 #include <linux/of_address.h>
16 #include <linux/gpio.h>
17 #include <linux/wakelock.h>
18 #include <linux/workqueue.h>
19 #include <linux/interrupt.h>
20 #include <linux/irq.h>
21 #include <linux/rockchip/cru.h>
22 #include <linux/rockchip/grf.h>
23 #include <linux/rockchip/cpu.h>
24 #include <linux/rockchip/iomap.h>
25
26 #include "usbdev_grf_regs.h"
27 #include "usbdev_bc.h"
28 #include "usbdev_rkuoc.h"
29
30 #define USB_PHY_ENABLED (0)
31 #define USB_PHY_SUSPEND (1)
32
33 #define PHY_USB_MODE    (0)
34 #define PHY_UART_MODE   (1)
35
36 #define USB_STATUS_BVABLID    (1)
37 #define USB_STATUS_DPDM       (2)
38 #define USB_STATUS_ID         (3)
39 #define USB_STATUS_UARTMODE   (4)
40 #define USB_CHIP_ID           (5)
41 #define USB_REMOTE_WAKEUP     (6)
42 #define USB_IRQ_WAKEUP        (7)
43
44 #define UOC_HIWORD_UPDATE(val, mask, shift) \
45                 ((val) << (shift) | (mask) << ((shift) + 16))
46
47 extern int rk_usb_charger_status;
48 extern void rk_send_wakeup_key(void);
49 /* rk3188 platform data */
50 extern struct dwc_otg_platform_data usb20otg_pdata_rk3188;
51 extern struct dwc_otg_platform_data usb20host_pdata_rk3188;
52 extern struct rkehci_platform_data rkhsic_pdata_rk3188;
53 /* rk3288 platform data */
54 extern struct dwc_otg_platform_data usb20otg_pdata_rk3288;
55 extern struct dwc_otg_platform_data usb20host_pdata_rk3288;
56 extern struct rkehci_platform_data rkhsic_pdata_rk3288;
57 extern struct rkehci_platform_data rkehci_pdata_rk3288;
58 extern struct rkehci_platform_data rkohci_pdata_rk3288;
59 /* rk3036 platform data */
60 extern struct dwc_otg_platform_data usb20otg_pdata_rk3036;
61 extern struct dwc_otg_platform_data usb20host_pdata_rk3036;
62
63 struct dwc_otg_platform_data {
64         void *privdata;
65         struct device *dev;
66         struct clk *phyclk;
67         struct clk *ahbclk;
68         struct clk *busclk;
69         struct clk *phyclk_480m;
70         int phy_status;
71
72         void (*hw_init)(void);
73         void (*phy_suspend)(void *pdata, int suspend);
74         void (*soft_reset)(void);
75         void (*clock_init)(void *pdata);
76         void (*clock_enable)(void *pdata, int enable);
77         void (*power_enable)(int enable);
78         void (*dwc_otg_uart_mode)(void *pdata, int enter_usb_uart_mode);
79         void (*bc_detect_cb)(int bc_type);
80         int (*get_status)(int id);
81 };
82
83 struct rkehci_platform_data {
84         struct device *dev;
85         struct clk *hclk_hsic;
86         struct clk *hsic_phy_480m;
87         struct clk *hsic_phy_12m;
88         struct clk *phyclk;
89         struct clk *ahbclk;
90
91         void (*hw_init)(void);
92         void (*clock_init)(void *pdata);
93         void (*clock_enable)(void *pdata, int enable);
94         void (*phy_suspend)(void *pdata, int suspend);
95         void (*soft_reset)(void);
96         int (*get_status)(int id);
97         int clk_status;
98         int phy_status;
99 };
100
101 struct dwc_otg_control_usb {
102         pGRF_UOC0_REG grf_uoc0_base;
103         pGRF_UOC1_REG grf_uoc1_base;
104         pGRF_UOC2_REG grf_uoc2_base;
105         pGRF_UOC3_REG grf_uoc3_base;
106         pGRF_UOC4_REG grf_uoc4_base;
107         pGRF_SOC_STATUS_RK3188 grf_soc_status0_rk3188;
108         pGRF_SOC_STATUS1_RK3288 grf_soc_status1_rk3288;
109         pGRF_SOC_STATUS2_RK3288 grf_soc_status2_rk3288;
110         pGRF_SOC_STATUS19_RK3288 grf_soc_status19_rk3288;
111         pGRF_SOC_STATUS21_RK3288 grf_soc_status21_rk3288;
112
113         struct gpio *host_gpios;
114         struct gpio *otg_gpios;
115         struct clk *hclk_usb_peri;
116         struct delayed_work usb_det_wakeup_work;
117         struct delayed_work usb_charger_det_work;
118         struct wake_lock usb_wakelock;
119         int remote_wakeup;
120         int usb_irq_wakeup;
121         int chip_id;
122 };
123
124 enum {
125         RK3188_USB_CTLR = 0,    /* rk3188 chip usb */
126         RK3288_USB_CTLR,        /* rk3288 chip usb */
127         RK3036_USB_CTLR,        /* rk3036 chip usb */
128 };
129
130 struct usb20otg_pdata_id {
131         char name[32];
132         struct dwc_otg_platform_data *pdata;
133 };
134
135 struct usb20host_pdata_id {
136         char name[32];
137         struct dwc_otg_platform_data *pdata;
138 };
139
140 struct rkehci_pdata_id {
141         char name[32];
142         struct rkehci_platform_data *pdata;
143 };
144 #endif