4 #include <linux/kernel.h>
5 #include <linux/platform_device.h>
6 #include <linux/delay.h>
7 #include <linux/dma-mapping.h>
9 #include <linux/module.h>
10 #include <linux/slab.h>
11 #include <linux/err.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/rockchip/cru.h>
23 #include <linux/rockchip/grf.h>
24 #include <linux/rockchip/cpu.h>
25 #include <linux/rockchip/iomap.h>
27 #include "usbdev_grf_regs.h"
28 #include "usbdev_bc.h"
29 #include "usbdev_rkuoc.h"
31 #define USB_PHY_ENABLED (0)
32 #define USB_PHY_SUSPEND (1)
34 #define PHY_USB_MODE (0)
35 #define PHY_UART_MODE (1)
37 #define USB_STATUS_BVABLID (1)
38 #define USB_STATUS_DPDM (2)
39 #define USB_STATUS_ID (3)
40 #define USB_STATUS_UARTMODE (4)
41 #define USB_CHIP_ID (5)
42 #define USB_REMOTE_WAKEUP (6)
43 #define USB_IRQ_WAKEUP (7)
45 #define UOC_HIWORD_UPDATE(val, mask, shift) \
46 ((val) << (shift) | (mask) << ((shift) + 16))
49 RST_POR = 0, /* Reset power-on */
50 RST_RECNT, /* Reset re-connect */
51 RST_CHN_HALT, /* Reset a channel halt has been detected */
55 extern int rk_usb_charger_status;
56 extern void rk_send_wakeup_key(void);
57 /* rk3188 platform data */
58 extern struct dwc_otg_platform_data usb20otg_pdata_rk3188;
59 extern struct dwc_otg_platform_data usb20host_pdata_rk3188;
60 extern struct rkehci_platform_data rkhsic_pdata_rk3188;
61 /* rk3288 platform data */
62 extern struct dwc_otg_platform_data usb20otg_pdata_rk3288;
63 extern struct dwc_otg_platform_data usb20host_pdata_rk3288;
64 extern struct rkehci_platform_data rkhsic_pdata_rk3288;
65 extern struct rkehci_platform_data rkehci_pdata_rk3288;
66 extern struct rkehci_platform_data rkohci_pdata_rk3288;
67 /* rk3036 platform data */
68 extern struct dwc_otg_platform_data usb20otg_pdata_rk3036;
69 extern struct dwc_otg_platform_data usb20host_pdata_rk3036;
70 /* rk3126 platform data */
71 extern struct dwc_otg_platform_data usb20otg_pdata_rk3126;
72 extern struct dwc_otg_platform_data usb20host_pdata_rk3126;
75 struct dwc_otg_platform_data {
81 struct clk *phyclk_480m;
83 void (*hw_init) (void);
84 void (*phy_suspend) (void *pdata, int suspend);
85 void (*soft_reset) (void *pdata, enum rkusb_rst_flag rst_type);
86 void (*clock_init) (void *pdata);
87 void (*clock_enable) (void *pdata, int enable);
88 void (*power_enable) (int enable);
89 void (*dwc_otg_uart_mode) (void *pdata, int enter_usb_uart_mode);
90 void (*bc_detect_cb) (int bc_type);
91 int (*get_status) (int id);
94 struct rkehci_platform_data {
96 struct clk *hclk_hsic;
97 struct clk *hsic_phy_480m;
98 struct clk *hsic_phy_12m;
101 void (*hw_init) (void);
102 void (*clock_init) (void *pdata);
103 void (*clock_enable) (void *pdata, int enable);
104 void (*phy_suspend) (void *pdata, int suspend);
105 void (*soft_reset) (void *pdata, enum rkusb_rst_flag rst_type);
106 int (*get_status) (int id);
111 struct dwc_otg_control_usb {
112 pGRF_UOC0_REG grf_uoc0_base;
113 pGRF_UOC1_REG grf_uoc1_base;
114 pGRF_UOC2_REG grf_uoc2_base;
115 pGRF_UOC3_REG grf_uoc3_base;
116 pGRF_UOC4_REG grf_uoc4_base;
117 pGRF_SOC_STATUS_RK3188 grf_soc_status0_rk3188;
118 pGRF_SOC_STATUS1_RK3288 grf_soc_status1_rk3288;
119 pGRF_SOC_STATUS2_RK3288 grf_soc_status2_rk3288;
120 pGRF_SOC_STATUS19_RK3288 grf_soc_status19_rk3288;
121 pGRF_SOC_STATUS21_RK3288 grf_soc_status21_rk3288;
123 struct gpio *host_gpios;
124 struct gpio *otg_gpios;
125 struct clk *hclk_usb_peri;
126 struct delayed_work usb_det_wakeup_work;
127 struct delayed_work usb_charger_det_work;
128 struct wake_lock usb_wakelock;
135 RK3188_USB_CTLR = 0, /* rk3188 chip usb */
136 RK3288_USB_CTLR, /* rk3288 chip usb */
137 RK3036_USB_CTLR, /* rk3036 chip usb */
141 struct usb20otg_pdata_id {
143 struct dwc_otg_platform_data *pdata;
146 struct usb20host_pdata_id {
148 struct dwc_otg_platform_data *pdata;
151 struct rkehci_pdata_id {
153 struct rkehci_platform_data *pdata;