Merge branch develop-3.10
[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/reset.h>
22 #include <linux/mfd/syscon.h>
23 #include <linux/regmap.h>
24 #include <linux/rockchip/cru.h>
25 #include <linux/rockchip/grf.h>
26 #include <linux/rockchip/cpu.h>
27 #include <linux/rockchip/iomap.h>
28
29 #include "usbdev_grf_regs.h"
30 #include "usbdev_bc.h"
31 #include "usbdev_rkuoc.h"
32
33 #define USB_PHY_ENABLED (0)
34 #define USB_PHY_SUSPEND (1)
35
36 #define PHY_USB_MODE    (0)
37 #define PHY_UART_MODE   (1)
38
39 #define PHY_POWER_DOWN  (0)
40 #define PHY_POWER_UP    (1)
41
42 #define USB_STATUS_BVABLID    (1)
43 #define USB_STATUS_DPDM       (2)
44 #define USB_STATUS_ID         (3)
45 #define USB_STATUS_UARTMODE   (4)
46 #define USB_CHIP_ID           (5)
47 #define USB_REMOTE_WAKEUP     (6)
48 #define USB_IRQ_WAKEUP        (7)
49
50 #define UOC_HIWORD_UPDATE(val, mask, shift) \
51                 ((val) << (shift) | (mask) << ((shift) + 16))
52
53 enum rkusb_rst_flag {
54         RST_POR = 0, /* Reset power-on */
55         RST_RECNT,      /* Reset re-connect */
56         RST_CHN_HALT, /* Reset a channel halt has been detected */
57         RST_OTHER,
58 };
59
60 extern void rk_send_wakeup_key(void);
61 /* rk3188 platform data */
62 extern struct dwc_otg_platform_data usb20otg_pdata_rk3188;
63 extern struct dwc_otg_platform_data usb20host_pdata_rk3188;
64 extern struct rkehci_platform_data rkhsic_pdata_rk3188;
65 /* rk3288 platform data */
66 extern struct dwc_otg_platform_data usb20otg_pdata_rk3288;
67 extern struct dwc_otg_platform_data usb20host_pdata_rk3288;
68 extern struct rkehci_platform_data rkhsic_pdata_rk3288;
69 extern struct rkehci_platform_data rkehci_pdata_rk3288;
70 extern struct rkehci_platform_data rkohci_pdata_rk3288;
71 /* rk3036 platform data */
72 extern struct dwc_otg_platform_data usb20otg_pdata_rk3036;
73 extern struct dwc_otg_platform_data usb20host_pdata_rk3036;
74 /* rk3126 platform data */
75 extern struct dwc_otg_platform_data usb20otg_pdata_rk3126;
76 extern struct dwc_otg_platform_data usb20host_pdata_rk3126;
77 extern struct dwc_otg_platform_data usb20ohci_pdata_rk3126;
78 extern struct rkehci_platform_data usb20ehci_pdata_rk3126;
79 /* rk3368 platform data */
80 extern struct rkehci_platform_data usb20ehci_pdata_rk3368;
81 extern struct dwc_otg_platform_data usb20ohci_pdata_rk3368;
82 extern struct dwc_otg_platform_data usb20otg_pdata_rk3368;
83
84 struct dwc_otg_platform_data {
85         void *privdata;
86         struct device *dev;
87         struct clk *phyclk;
88         struct clk *ahbclk;
89         struct clk *busclk;
90         struct clk *phyclk_480m;
91         int phy_status;
92         void (*hw_init) (void);
93         void (*phy_suspend) (void *pdata, int suspend);
94         void (*soft_reset) (void *pdata, enum rkusb_rst_flag rst_type);
95         void (*clock_init) (void *pdata);
96         void (*clock_enable) (void *pdata, int enable);
97         void (*power_enable) (int enable);
98         void (*dwc_otg_uart_mode) (void *pdata, int enter_usb_uart_mode);
99         void (*bc_detect_cb) (int bc_type);
100         int (*get_status) (int id);
101         void (*phy_power_down)(int power_down);
102 };
103
104 struct rkehci_platform_data {
105         struct device *dev;
106         struct clk *hclk_hsic;
107         struct clk *hsic_phy_480m;
108         struct clk *hsic_phy_12m;
109         struct clk *phyclk;
110         struct clk *ahbclk;
111         void (*hw_init) (void);
112         void (*clock_init) (void *pdata);
113         void (*clock_enable) (void *pdata, int enable);
114         void (*phy_suspend) (void *pdata, int suspend);
115         void (*soft_reset) (void *pdata, enum rkusb_rst_flag rst_type);
116         int (*get_status) (int id);
117         int clk_status;
118         int phy_status;
119 };
120
121 struct dwc_otg_control_usb {
122         pGRF_UOC0_REG grf_uoc0_base;
123         pGRF_UOC1_REG grf_uoc1_base;
124         pGRF_UOC2_REG grf_uoc2_base;
125         pGRF_UOC3_REG grf_uoc3_base;
126         pGRF_UOC4_REG grf_uoc4_base;
127         pGRF_SOC_STATUS_RK3188 grf_soc_status0_rk3188;
128         pGRF_SOC_STATUS1_RK3288 grf_soc_status1_rk3288;
129         pGRF_SOC_STATUS2_RK3288 grf_soc_status2_rk3288;
130         pGRF_SOC_STATUS19_RK3288 grf_soc_status19_rk3288;
131         pGRF_SOC_STATUS21_RK3288 grf_soc_status21_rk3288;
132
133         struct regmap *grf;
134         struct gpio *host_gpios;
135         struct gpio *otg_gpios;
136         struct clk *hclk_usb_peri;
137         struct delayed_work usb_det_wakeup_work;
138         struct delayed_work usb_charger_det_work;
139         struct wake_lock usb_wakelock;
140         int remote_wakeup;
141         int usb_irq_wakeup;
142         int linestate_wakeup;
143         int chip_id;
144 };
145
146 enum {
147         RK3188_USB_CTLR = 0,    /* rk3188 chip usb */
148         RK3288_USB_CTLR,        /* rk3288 chip usb */
149         RK3036_USB_CTLR,        /* rk3036 chip usb */
150         RK3126_USB_CTLR,
151 };
152
153 struct rkehci_pdata_id {
154         char name[32];
155         struct rkehci_platform_data *pdata;
156 };
157 #endif