USB: add usb soft reset.
[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
23 #include "usbdev_grf_regs.h"
24 #include "usbdev_bc.h"
25 #include "usbdev_rkuoc.h"
26
27 #define USB_PHY_ENABLED (0)
28 #define USB_PHY_SUSPEND (1)
29
30 #define PHY_USB_MODE    (0)
31 #define PHY_UART_MODE   (1)
32
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)
40
41 extern int rk_usb_charger_status;
42 extern void rk_send_wakeup_key(void);
43 /* rk3188 platform data */
44 extern struct dwc_otg_platform_data usb20otg_pdata_rk3188;
45 extern struct dwc_otg_platform_data usb20host_pdata_rk3188;
46 extern struct rkehci_platform_data rkhsic_pdata_rk3188;
47 /* rk3288 platform data */
48 extern struct dwc_otg_platform_data usb20otg_pdata_rk3288;
49 extern struct dwc_otg_platform_data usb20host_pdata_rk3288;
50 extern struct rkehci_platform_data rkhsic_pdata_rk3288;
51 extern struct rkehci_platform_data rkehci_pdata_rk3288;
52 extern struct rkehci_platform_data rkohci_pdata_rk3288;
53
54 struct dwc_otg_platform_data {
55     void *privdata;
56     struct device *dev;
57     struct clk* phyclk;
58     struct clk* ahbclk;
59     struct clk* busclk;
60     int phy_status;
61     void (*hw_init)(void);
62     void (*phy_suspend)(void* pdata, int suspend);
63     void (*soft_reset)(void);
64     void (*clock_init)(void* pdata);
65     void (*clock_enable)(void* pdata, int enable);
66     void (*power_enable)(int enable);
67     void (*dwc_otg_uart_mode)(void* pdata, int enter_usb_uart_mode);
68     void (*bc_detect_cb)(int bc_type);
69     int (*get_status)(int id);
70 };
71
72 struct rkehci_platform_data{
73         struct device *dev;
74         struct clk* hclk_hsic;
75         struct clk* hsic_phy_480m;
76         struct clk* hsic_phy_12m;
77         struct clk* phyclk;
78         struct clk* ahbclk;
79         void (*hw_init)(void);
80         void (*clock_init)(void* pdata);
81         void (*clock_enable)(void *pdata, int enable);
82         void (*soft_reset)(void);
83         int clk_status;
84 };
85
86 struct dwc_otg_control_usb {
87         pGRF_UOC0_REG grf_uoc0_base;
88         pGRF_UOC1_REG grf_uoc1_base;
89         pGRF_UOC2_REG grf_uoc2_base;
90         pGRF_UOC3_REG grf_uoc3_base;
91         pGRF_UOC4_REG grf_uoc4_base;
92         pGRF_SOC_STATUS_RK3188 grf_soc_status0_rk3188;
93         pGRF_SOC_STATUS1_RK3288 grf_soc_status1_rk3288;
94         pGRF_SOC_STATUS2_RK3288 grf_soc_status2_rk3288;
95         pGRF_SOC_STATUS19_RK3288 grf_soc_status19_rk3288;
96         pGRF_SOC_STATUS21_RK3288 grf_soc_status21_rk3288;
97         struct gpio *host_gpios;
98         struct gpio *otg_gpios;
99         struct clk* hclk_usb_peri;
100         struct delayed_work usb_det_wakeup_work;
101         struct delayed_work usb_charger_det_work;
102         struct wake_lock usb_wakelock;
103         int remote_wakeup;
104         int usb_irq_wakeup;
105         int chip_id;
106 };
107
108 enum {
109         RK3188_USB_CTLR = 0,    /* rk3188 chip usb */
110         RK3288_USB_CTLR,        /* rk3288 chip usb */
111 };
112
113 struct usb20otg_pdata_id {
114         char name[32];
115         struct dwc_otg_platform_data *pdata;
116 };
117
118 struct usb20host_pdata_id {
119         char name[32];
120         struct dwc_otg_platform_data *pdata;
121 };
122
123 struct rkehci_pdata_id {
124         char name[32];
125         struct rkehci_platform_data *pdata;
126 };
127 #endif