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