forked from ~ljy/RK356X_SDK_RELEASE

hc
2024-05-13 9d77db3c730780c8ef5ccd4b66403ff5675cfe4e
kernel/drivers/usb/renesas_usbhs/rcar3.c
....@@ -2,7 +2,7 @@
22 /*
33 * Renesas USB driver R-Car Gen. 3 initialization and power control
44 *
5
- * Copyright (C) 2016 Renesas Electronics Corporation
5
+ * Copyright (C) 2016-2019 Renesas Electronics Corporation
66 */
77
88 #include <linux/delay.h>
....@@ -27,7 +27,6 @@
2727 * Remarks: bit[31:11] and bit[9:6] should be 0
2828 */
2929 #define UGCTRL2_RESERVED_3 0x00000001 /* bit[3:0] should be B'0001 */
30
-#define UGCTRL2_USB0SEL_EHCI 0x00000010
3130 #define UGCTRL2_USB0SEL_HSUSB 0x00000020
3231 #define UGCTRL2_USB0SEL_OTG 0x00000030
3332 #define UGCTRL2_VBUSSEL 0x00000400
....@@ -50,14 +49,6 @@
5049 usbhs_write32(priv, UGCTRL2, val | UGCTRL2_RESERVED_3);
5150 }
5251
53
-static void usbhs_rcar3_set_usbsel(struct usbhs_priv *priv, bool ehci)
54
-{
55
- if (ehci)
56
- usbhs_rcar3_set_ugctrl2(priv, UGCTRL2_USB0SEL_EHCI);
57
- else
58
- usbhs_rcar3_set_ugctrl2(priv, UGCTRL2_USB0SEL_HSUSB);
59
-}
60
-
6152 static int usbhs_rcar3_power_ctrl(struct platform_device *pdev,
6253 void __iomem *base, int enable)
6354 {
....@@ -68,7 +59,7 @@
6859 if (enable) {
6960 usbhs_bset(priv, LPSTS, LPSTS_SUSPM, LPSTS_SUSPM);
7061 /* The controller on R-Car Gen3 needs to wait up to 45 usec */
71
- udelay(45);
62
+ usleep_range(45, 90);
7263 } else {
7364 usbhs_bset(priv, LPSTS, LPSTS_SUSPM, 0);
7465 }
....@@ -83,14 +74,11 @@
8374 struct usbhs_priv *priv = usbhs_pdev_to_priv(pdev);
8475 u32 val;
8576 int timeout = 1000;
86
- bool is_host = false;
8777
8878 if (enable) {
8979 usbhs_write32(priv, UGCTRL, 0); /* release PLLRESET */
90
- if (priv->edev)
91
- is_host = extcon_get_state(priv->edev, EXTCON_USB_HOST);
92
-
93
- usbhs_rcar3_set_usbsel(priv, is_host);
80
+ usbhs_rcar3_set_ugctrl2(priv,
81
+ UGCTRL2_USB0SEL_OTG | UGCTRL2_VBUSSEL);
9482
9583 usbhs_bset(priv, LPSTS, LPSTS_SUSPM, LPSTS_SUSPM);
9684 do {
....@@ -107,28 +95,26 @@
10795 return 0;
10896 }
10997
110
-static int usbhs_rcar3_get_id(struct platform_device *pdev)
111
-{
112
- return USBHS_GADGET;
113
-}
114
-
115
-static int usbhs_rcar3_notifier(struct notifier_block *nb, unsigned long event,
116
- void *data)
117
-{
118
- struct usbhs_priv *priv = container_of(nb, struct usbhs_priv, nb);
119
-
120
- usbhs_rcar3_set_usbsel(priv, !!event);
121
-
122
- return NOTIFY_DONE;
123
-}
124
-
125
-const struct renesas_usbhs_platform_callback usbhs_rcar3_ops = {
126
- .power_ctrl = usbhs_rcar3_power_ctrl,
127
- .get_id = usbhs_rcar3_get_id,
98
+const struct renesas_usbhs_platform_info usbhs_rcar_gen3_plat_info = {
99
+ .platform_callback = {
100
+ .power_ctrl = usbhs_rcar3_power_ctrl,
101
+ .get_id = usbhs_get_id_as_gadget,
102
+ },
103
+ .driver_param = {
104
+ .has_usb_dmac = 1,
105
+ .multi_clks = 1,
106
+ .has_new_pipe_configs = 1,
107
+ },
128108 };
129109
130
-const struct renesas_usbhs_platform_callback usbhs_rcar3_with_pll_ops = {
131
- .power_ctrl = usbhs_rcar3_power_and_pll_ctrl,
132
- .get_id = usbhs_rcar3_get_id,
133
- .notifier = usbhs_rcar3_notifier,
110
+const struct renesas_usbhs_platform_info usbhs_rcar_gen3_with_pll_plat_info = {
111
+ .platform_callback = {
112
+ .power_ctrl = usbhs_rcar3_power_and_pll_ctrl,
113
+ .get_id = usbhs_get_id_as_gadget,
114
+ },
115
+ .driver_param = {
116
+ .has_usb_dmac = 1,
117
+ .multi_clks = 1,
118
+ .has_new_pipe_configs = 1,
119
+ },
134120 };