diff options
Diffstat (limited to 'arch/arm/mach-omap2/omap_phy_internal.c')
-rw-r--r-- | arch/arm/mach-omap2/omap_phy_internal.c | 138 |
1 files changed, 0 insertions, 138 deletions
diff --git a/arch/arm/mach-omap2/omap_phy_internal.c b/arch/arm/mach-omap2/omap_phy_internal.c index 593eaea35cec..d992db8ff0b0 100644 --- a/arch/arm/mach-omap2/omap_phy_internal.c +++ b/arch/arm/mach-omap2/omap_phy_internal.c | |||
@@ -33,144 +33,6 @@ | |||
33 | #include "soc.h" | 33 | #include "soc.h" |
34 | #include "control.h" | 34 | #include "control.h" |
35 | 35 | ||
36 | /* OMAP control module register for UTMI PHY */ | ||
37 | #define CONTROL_DEV_CONF 0x300 | ||
38 | #define PHY_PD 0x1 | ||
39 | |||
40 | #define USBOTGHS_CONTROL 0x33c | ||
41 | #define AVALID BIT(0) | ||
42 | #define BVALID BIT(1) | ||
43 | #define VBUSVALID BIT(2) | ||
44 | #define SESSEND BIT(3) | ||
45 | #define IDDIG BIT(4) | ||
46 | |||
47 | static struct clk *phyclk, *clk48m, *clk32k; | ||
48 | static void __iomem *ctrl_base; | ||
49 | static int usbotghs_control; | ||
50 | |||
51 | int omap4430_phy_init(struct device *dev) | ||
52 | { | ||
53 | ctrl_base = ioremap(OMAP443X_SCM_BASE, SZ_1K); | ||
54 | if (!ctrl_base) { | ||
55 | pr_err("control module ioremap failed\n"); | ||
56 | return -ENOMEM; | ||
57 | } | ||
58 | /* Power down the phy */ | ||
59 | __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF); | ||
60 | |||
61 | if (!dev) { | ||
62 | iounmap(ctrl_base); | ||
63 | return 0; | ||
64 | } | ||
65 | |||
66 | phyclk = clk_get(dev, "ocp2scp_usb_phy_ick"); | ||
67 | if (IS_ERR(phyclk)) { | ||
68 | dev_err(dev, "cannot clk_get ocp2scp_usb_phy_ick\n"); | ||
69 | iounmap(ctrl_base); | ||
70 | return PTR_ERR(phyclk); | ||
71 | } | ||
72 | |||
73 | clk48m = clk_get(dev, "ocp2scp_usb_phy_phy_48m"); | ||
74 | if (IS_ERR(clk48m)) { | ||
75 | dev_err(dev, "cannot clk_get ocp2scp_usb_phy_phy_48m\n"); | ||
76 | clk_put(phyclk); | ||
77 | iounmap(ctrl_base); | ||
78 | return PTR_ERR(clk48m); | ||
79 | } | ||
80 | |||
81 | clk32k = clk_get(dev, "usb_phy_cm_clk32k"); | ||
82 | if (IS_ERR(clk32k)) { | ||
83 | dev_err(dev, "cannot clk_get usb_phy_cm_clk32k\n"); | ||
84 | clk_put(phyclk); | ||
85 | clk_put(clk48m); | ||
86 | iounmap(ctrl_base); | ||
87 | return PTR_ERR(clk32k); | ||
88 | } | ||
89 | return 0; | ||
90 | } | ||
91 | |||
92 | int omap4430_phy_set_clk(struct device *dev, int on) | ||
93 | { | ||
94 | static int state; | ||
95 | |||
96 | if (on && !state) { | ||
97 | /* Enable the phy clocks */ | ||
98 | clk_enable(phyclk); | ||
99 | clk_enable(clk48m); | ||
100 | clk_enable(clk32k); | ||
101 | state = 1; | ||
102 | } else if (state) { | ||
103 | /* Disable the phy clocks */ | ||
104 | clk_disable(phyclk); | ||
105 | clk_disable(clk48m); | ||
106 | clk_disable(clk32k); | ||
107 | state = 0; | ||
108 | } | ||
109 | return 0; | ||
110 | } | ||
111 | |||
112 | int omap4430_phy_power(struct device *dev, int ID, int on) | ||
113 | { | ||
114 | if (on) { | ||
115 | if (ID) | ||
116 | /* enable VBUS valid, IDDIG groung */ | ||
117 | __raw_writel(AVALID | VBUSVALID, ctrl_base + | ||
118 | USBOTGHS_CONTROL); | ||
119 | else | ||
120 | /* | ||
121 | * Enable VBUS Valid, AValid and IDDIG | ||
122 | * high impedance | ||
123 | */ | ||
124 | __raw_writel(IDDIG | AVALID | VBUSVALID, | ||
125 | ctrl_base + USBOTGHS_CONTROL); | ||
126 | } else { | ||
127 | /* Enable session END and IDIG to high impedance. */ | ||
128 | __raw_writel(SESSEND | IDDIG, ctrl_base + | ||
129 | USBOTGHS_CONTROL); | ||
130 | } | ||
131 | return 0; | ||
132 | } | ||
133 | |||
134 | int omap4430_phy_suspend(struct device *dev, int suspend) | ||
135 | { | ||
136 | if (suspend) { | ||
137 | /* Disable the clocks */ | ||
138 | omap4430_phy_set_clk(dev, 0); | ||
139 | /* Power down the phy */ | ||
140 | __raw_writel(PHY_PD, ctrl_base + CONTROL_DEV_CONF); | ||
141 | |||
142 | /* save the context */ | ||
143 | usbotghs_control = __raw_readl(ctrl_base + USBOTGHS_CONTROL); | ||
144 | } else { | ||
145 | /* Enable the internel phy clcoks */ | ||
146 | omap4430_phy_set_clk(dev, 1); | ||
147 | /* power on the phy */ | ||
148 | if (__raw_readl(ctrl_base + CONTROL_DEV_CONF) & PHY_PD) { | ||
149 | __raw_writel(~PHY_PD, ctrl_base + CONTROL_DEV_CONF); | ||
150 | mdelay(200); | ||
151 | } | ||
152 | |||
153 | /* restore the context */ | ||
154 | __raw_writel(usbotghs_control, ctrl_base + USBOTGHS_CONTROL); | ||
155 | } | ||
156 | |||
157 | return 0; | ||
158 | } | ||
159 | |||
160 | int omap4430_phy_exit(struct device *dev) | ||
161 | { | ||
162 | if (ctrl_base) | ||
163 | iounmap(ctrl_base); | ||
164 | if (phyclk) | ||
165 | clk_put(phyclk); | ||
166 | if (clk48m) | ||
167 | clk_put(clk48m); | ||
168 | if (clk32k) | ||
169 | clk_put(clk32k); | ||
170 | |||
171 | return 0; | ||
172 | } | ||
173 | |||
174 | void am35x_musb_reset(void) | 36 | void am35x_musb_reset(void) |
175 | { | 37 | { |
176 | u32 regval; | 38 | u32 regval; |