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>
23 #include "usbdev_grf_regs.h"
24 #include "usbdev_bc.h"
25 #include "usbdev_rkuoc.h"
27 #define USB_PHY_ENABLED (0)
28 #define USB_PHY_SUSPEND (1)
30 #define PHY_USB_MODE (0)
31 #define PHY_UART_MODE (1)
33 #define USB_STATUS_BVABLID (1)
34 #define USB_STATUS_DPDM (2)
35 #define USB_STATUS_ID (3)
36 #define USB_STATUS_UARTMODE (4)
37 #define USB_CHIP_ID (5)
38 #define USB_REMOTE_WAKEUP (6)
39 #define USB_IRQ_WAKEUP (7)
41 /* rk3188 platform data */
42 extern struct dwc_otg_platform_data usb20otg_pdata_rk3188;
43 extern struct dwc_otg_platform_data usb20host_pdata_rk3188;
44 extern struct rkehci_platform_data rkhsic_pdata_rk3188;
45 /* rk3288 platform data */
46 extern struct dwc_otg_platform_data usb20otg_pdata_rk3288;
47 extern struct dwc_otg_platform_data usb20host_pdata_rk3288;
48 extern struct rkehci_platform_data rkhsic_pdata_rk3288;
49 extern struct rkehci_platform_data rkehci_pdata_rk3288;
50 extern struct rkehci_platform_data rkohci_pdata_rk3288;
52 struct dwc_otg_platform_data {
59 void (*hw_init)(void);
60 void (*phy_suspend)(void* pdata, int suspend);
61 void (*soft_reset)(void);
62 void (*clock_init)(void* pdata);
63 void (*clock_enable)(void* pdata, int enable);
64 void (*power_enable)(int enable);
65 void (*dwc_otg_uart_mode)(void* pdata, int enter_usb_uart_mode);
66 void (*bc_detect_cb)(int bc_type);
67 int (*get_status)(int id);
70 struct rkehci_platform_data{
72 struct clk* hclk_hsic;
73 struct clk* hsic_phy_480m;
74 struct clk* hsic_phy_12m;
77 void (*hw_init)(void);
78 void (*clock_init)(void* pdata);
79 void (*clock_enable)(void *pdata, int enable);
80 void (*soft_reset)(void);
84 struct dwc_otg_control_usb {
85 pGRF_UOC0_REG grf_uoc0_base;
86 pGRF_UOC1_REG grf_uoc1_base;
87 pGRF_UOC2_REG grf_uoc2_base;
88 pGRF_UOC3_REG grf_uoc3_base;
89 pGRF_UOC4_REG grf_uoc4_base;
90 pGRF_SOC_STATUS_RK3188 grf_soc_status0_rk3188;
91 pGRF_SOC_STATUS1_RK3288 grf_soc_status1_rk3288;
92 pGRF_SOC_STATUS2_RK3288 grf_soc_status2_rk3288;
93 pGRF_SOC_STATUS19_RK3288 grf_soc_status19_rk3288;
94 pGRF_SOC_STATUS21_RK3288 grf_soc_status21_rk3288;
95 struct gpio *host_gpios;
96 struct gpio *otg_gpios;
97 struct clk* hclk_usb_peri;
98 struct delayed_work usb_det_wakeup_work;
99 struct wake_lock usb_wakelock;
106 RK3188_USB_CTLR = 0, /* rk3188 chip usb */
107 RK3288_USB_CTLR, /* rk3288 chip usb */
110 struct usb20otg_pdata_id {
112 struct dwc_otg_platform_data *pdata;
115 struct usb20host_pdata_id {
117 struct dwc_otg_platform_data *pdata;
120 struct rkehci_pdata_id {
122 struct rkehci_platform_data *pdata;