3 #include <linux/wakelock.h>
4 #include <linux/workqueue.h>
5 #include "usbdev_grf_regs.h"
7 #define USB_PHY_ENABLED (0)
8 #define USB_PHY_SUSPEND (1)
10 #define PHY_USB_MODE (0)
11 #define PHY_UART_MODE (1)
13 #define USB_STATUS_BVABLID (1)
14 #define USB_STATUS_DPDM (2)
15 #define USB_STATUS_ID (3)
16 #define USB_STATUS_UARTMODE (4)
18 /* rk3188 platform data */
19 extern struct dwc_otg_platform_data usb20otg_pdata_rk3188;
20 extern struct dwc_otg_platform_data usb20host_pdata_rk3188;
21 extern struct rkehci_platform_data rkhsic_pdata_rk3188;
22 /* rk3288 platform data */
23 extern struct dwc_otg_platform_data usb20otg_pdata_rk3288;
24 extern struct dwc_otg_platform_data usb20host_pdata_rk3288;
25 extern struct rkehci_platform_data rkhsic_pdata_rk3288;
26 extern struct rkehci_platform_data rkehci_pdata_rk3288;
27 extern struct rkehci_platform_data rkohci_pdata_rk3288;
29 struct dwc_otg_platform_data {
36 void (*hw_init)(void);
37 void (*phy_suspend)(void* pdata, int suspend);
38 void (*soft_reset)(void);
39 void (*clock_init)(void* pdata);
40 void (*clock_enable)(void* pdata, int enable);
41 void (*power_enable)(int enable);
42 void (*dwc_otg_uart_mode)(void* pdata, int enter_usb_uart_mode);
43 int (*get_status)(int id);
44 int (*get_chip_id)(void);
47 struct rkehci_platform_data{
49 struct clk* hclk_hsic;
50 struct clk* hsic_phy_480m;
51 struct clk* hsic_phy_12m;
54 void (*hw_init)(void);
55 void (*clock_init)(void* pdata);
56 void (*clock_enable)(void *pdata, int enable);
57 void (*soft_reset)(void);
58 int (*get_chip_id)(void);
62 struct dwc_otg_control_usb {
63 pGRF_UOC0_REG grf_uoc0_base;
64 pGRF_UOC1_REG grf_uoc1_base;
65 pGRF_UOC2_REG grf_uoc2_base;
66 pGRF_UOC3_REG grf_uoc3_base;
67 pGRF_UOC4_REG grf_uoc4_base;
68 pGRF_SOC_STATUS_RK3188 grf_soc_status0_rk3188;
69 pGRF_SOC_STATUS1_RK3288 grf_soc_status1_rk3288;
70 pGRF_SOC_STATUS2_RK3288 grf_soc_status2_rk3288;
71 pGRF_SOC_STATUS19_RK3288 grf_soc_status19_rk3288;
72 pGRF_SOC_STATUS21_RK3288 grf_soc_status21_rk3288;
73 struct gpio *host_gpios;
74 struct gpio *otg_gpios;
75 struct clk* hclk_usb_peri;
76 struct delayed_work usb_det_wakeup_work;
77 struct wake_lock usb_wakelock;
82 RK3188_USB_CTLR = 0, /* rk3188 chip usb */
83 RK3288_USB_CTLR, /* rk3288 chip usb */
86 struct usb20otg_pdata_id {
88 struct dwc_otg_platform_data *pdata;
91 struct usb20host_pdata_id {
93 struct dwc_otg_platform_data *pdata;
96 struct rkehci_pdata_id {
98 struct rkehci_platform_data *pdata;