OpenWrt – Diff between revs 2 and 3
?pathlinks?
Rev 2 | Rev 3 | |||
---|---|---|---|---|
1 | From a86bda9f8a7965f0cedd347a9c04800eb9f41ea3 Mon Sep 17 00:00:00 2001 |
1 | From a86bda9f8a7965f0cedd347a9c04800eb9f41ea3 Mon Sep 17 00:00:00 2001 |
|
2 | From: Vasudevan Murugesan <vmuruges@codeaurora.org> |
2 | From: Vasudevan Murugesan <vmuruges@codeaurora.org> |
|
3 | Date: Tue, 21 Jul 2015 10:22:38 +0530 |
3 | Date: Tue, 21 Jul 2015 10:22:38 +0530 |
|
4 | Subject: ipq806x: usb: Control USB master reset |
4 | Subject: ipq806x: usb: Control USB master reset |
|
5 | |
5 | |
|
6 | During removal of the glue layer(dwc3-of-simple), |
6 | During removal of the glue layer(dwc3-of-simple), |
|
7 | USB master reset is set to active and during insertion |
7 | USB master reset is set to active and during insertion |
|
8 | it is de-activated. |
8 | it is de-activated. |
|
9 | |
9 | |
|
10 | Change-Id: I537dc810f6cb2a46664ee674840145066432b957 |
10 | Change-Id: I537dc810f6cb2a46664ee674840145066432b957 |
|
11 | Signed-off-by: Vasudevan Murugesan <vmuruges@codeaurora.org> |
11 | Signed-off-by: Vasudevan Murugesan <vmuruges@codeaurora.org> |
|
12 | (cherry picked from commit 4611e13580a216812f85f0801b95442d02eeb836) |
12 | (cherry picked from commit 4611e13580a216812f85f0801b95442d02eeb836) |
|
13 | --- |
13 | --- |
|
14 | drivers/usb/dwc3/dwc3-of-simple.c | 22 ++++++++++++++++++++++ |
14 | drivers/usb/dwc3/dwc3-of-simple.c | 22 ++++++++++++++++++++++ |
|
15 | 1 file changed, 12 insertions(+) |
15 | 1 file changed, 12 insertions(+) |
|
16 | |
16 | |
|
17 | (limited to 'drivers/usb/dwc3/dwc3-of-simple.c') |
17 | (limited to 'drivers/usb/dwc3/dwc3-of-simple.c') |
|
18 | |
18 | |
|
19 | --- a/drivers/usb/dwc3/dwc3-of-simple.c |
19 | --- a/drivers/usb/dwc3/dwc3-of-simple.c |
|
20 | +++ b/drivers/usb/dwc3/dwc3-of-simple.c |
20 | +++ b/drivers/usb/dwc3/dwc3-of-simple.c |
|
21 | @@ -25,6 +25,7 @@ |
21 | @@ -25,6 +25,7 @@ |
|
22 | #include <linux/platform_device.h> |
22 | #include <linux/platform_device.h> |
|
23 | #include <linux/dma-mapping.h> |
23 | #include <linux/dma-mapping.h> |
|
24 | #include <linux/clk.h> |
24 | #include <linux/clk.h> |
|
25 | +#include <linux/reset.h> |
25 | +#include <linux/reset.h> |
|
26 | #include <linux/of.h> |
26 | #include <linux/of.h> |
|
27 | #include <linux/of_platform.h> |
27 | #include <linux/of_platform.h> |
|
28 | #include <linux/pm_runtime.h> |
28 | #include <linux/pm_runtime.h> |
|
29 | @@ -33,6 +34,8 @@ struct dwc3_of_simple { |
29 | @@ -33,6 +34,8 @@ struct dwc3_of_simple { |
|
30 | struct device *dev; |
30 | struct device *dev; |
|
31 | struct clk **clks; |
31 | struct clk **clks; |
|
32 | int num_clocks; |
32 | int num_clocks; |
|
33 | + struct reset_control *mstr_rst_30_0; |
33 | + struct reset_control *mstr_rst_30_0; |
|
34 | + struct reset_control *mstr_rst_30_1; |
34 | + struct reset_control *mstr_rst_30_1; |
|
35 | }; |
35 | }; |
|
36 | |
36 | |
|
37 | static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count) |
37 | static int dwc3_of_simple_clk_init(struct dwc3_of_simple *simple, int count) |
|
38 | @@ -102,6 +105,20 @@ static int dwc3_of_simple_probe(struct p |
38 | @@ -102,6 +105,20 @@ static int dwc3_of_simple_probe(struct p |
|
39 | if (ret) |
39 | if (ret) |
|
40 | return ret; |
40 | return ret; |
|
41 | |
41 | |
|
42 | + simple->mstr_rst_30_0 = devm_reset_control_get(dev, "usb30_0_mstr_rst"); |
42 | + simple->mstr_rst_30_0 = devm_reset_control_get(dev, "usb30_0_mstr_rst"); |
|
43 | + |
43 | + |
|
44 | + if (!IS_ERR(simple->mstr_rst_30_0)) |
44 | + if (!IS_ERR(simple->mstr_rst_30_0)) |
|
45 | + reset_control_deassert(simple->mstr_rst_30_0); |
45 | + reset_control_deassert(simple->mstr_rst_30_0); |
|
46 | + else |
46 | + else |
|
47 | + dev_dbg(simple->dev, "cannot get handle for USB PHY 0 master reset control\n"); |
47 | + dev_dbg(simple->dev, "cannot get handle for USB PHY 0 master reset control\n"); |
|
48 | + |
48 | + |
|
49 | + simple->mstr_rst_30_1 = devm_reset_control_get(dev, "usb30_1_mstr_rst"); |
49 | + simple->mstr_rst_30_1 = devm_reset_control_get(dev, "usb30_1_mstr_rst"); |
|
50 | + |
50 | + |
|
51 | + if (!IS_ERR(simple->mstr_rst_30_1)) |
51 | + if (!IS_ERR(simple->mstr_rst_30_1)) |
|
52 | + reset_control_deassert(simple->mstr_rst_30_1); |
52 | + reset_control_deassert(simple->mstr_rst_30_1); |
|
53 | + else |
53 | + else |
|
54 | + dev_dbg(simple->dev, "cannot get handle for USB PHY 1 master reset control\n"); |
54 | + dev_dbg(simple->dev, "cannot get handle for USB PHY 1 master reset control\n"); |
|
55 | + |
55 | + |
|
56 | ret = of_platform_populate(np, NULL, NULL, dev); |
56 | ret = of_platform_populate(np, NULL, NULL, dev); |
|
57 | if (ret) { |
57 | if (ret) { |
|
58 | for (i = 0; i < simple->num_clocks; i++) { |
58 | for (i = 0; i < simple->num_clocks; i++) { |
|
59 | @@ -130,6 +147,12 @@ static int dwc3_of_simple_remove(struct |
59 | @@ -130,6 +147,12 @@ static int dwc3_of_simple_remove(struct |
|
60 | clk_put(simple->clks[i]); |
60 | clk_put(simple->clks[i]); |
|
61 | } |
61 | } |
|
62 | |
62 | |
|
63 | + if (!IS_ERR(simple->mstr_rst_30_0)) |
63 | + if (!IS_ERR(simple->mstr_rst_30_0)) |
|
64 | + reset_control_assert(simple->mstr_rst_30_0); |
64 | + reset_control_assert(simple->mstr_rst_30_0); |
|
65 | + |
65 | + |
|
66 | + if (!IS_ERR(simple->mstr_rst_30_1)) |
66 | + if (!IS_ERR(simple->mstr_rst_30_1)) |
|
67 | + reset_control_assert(simple->mstr_rst_30_1); |
67 | + reset_control_assert(simple->mstr_rst_30_1); |
|
68 | + |
68 | + |
|
69 | of_platform_depopulate(dev); |
69 | of_platform_depopulate(dev); |
|
70 | |
70 | |
|
71 | pm_runtime_disable(dev); |
71 | pm_runtime_put_sync(dev); |
|
72 | |
72 | |