diff options
Diffstat (limited to 'drivers/phy/phy-qcom-ufs.c')
-rw-r--r-- | drivers/phy/phy-qcom-ufs.c | 37 |
1 files changed, 10 insertions, 27 deletions
diff --git a/drivers/phy/phy-qcom-ufs.c b/drivers/phy/phy-qcom-ufs.c index c69568b8543d..43865ef340e2 100644 --- a/drivers/phy/phy-qcom-ufs.c +++ b/drivers/phy/phy-qcom-ufs.c | |||
@@ -189,12 +189,12 @@ int ufs_qcom_phy_init_clks(struct ufs_qcom_phy *phy_common) | |||
189 | if (err) | 189 | if (err) |
190 | goto out; | 190 | goto out; |
191 | 191 | ||
192 | skip_txrx_clk: | ||
192 | err = ufs_qcom_phy_clk_get(phy_common->dev, "ref_clk_src", | 193 | err = ufs_qcom_phy_clk_get(phy_common->dev, "ref_clk_src", |
193 | &phy_common->ref_clk_src); | 194 | &phy_common->ref_clk_src); |
194 | if (err) | 195 | if (err) |
195 | goto out; | 196 | goto out; |
196 | 197 | ||
197 | skip_txrx_clk: | ||
198 | /* | 198 | /* |
199 | * "ref_clk_parent" is optional hence don't abort init if it's not | 199 | * "ref_clk_parent" is optional hence don't abort init if it's not |
200 | * found. | 200 | * found. |
@@ -210,25 +210,19 @@ out: | |||
210 | } | 210 | } |
211 | EXPORT_SYMBOL_GPL(ufs_qcom_phy_init_clks); | 211 | EXPORT_SYMBOL_GPL(ufs_qcom_phy_init_clks); |
212 | 212 | ||
213 | static int __ufs_qcom_phy_init_vreg(struct device *dev, | 213 | static int ufs_qcom_phy_init_vreg(struct device *dev, |
214 | struct ufs_qcom_phy_vreg *vreg, const char *name, bool optional) | 214 | struct ufs_qcom_phy_vreg *vreg, |
215 | const char *name) | ||
215 | { | 216 | { |
216 | int err = 0; | 217 | int err = 0; |
217 | 218 | ||
218 | char prop_name[MAX_PROP_NAME]; | 219 | char prop_name[MAX_PROP_NAME]; |
219 | 220 | ||
220 | vreg->name = devm_kstrdup(dev, name, GFP_KERNEL); | 221 | vreg->name = name; |
221 | if (!vreg->name) { | ||
222 | err = -ENOMEM; | ||
223 | goto out; | ||
224 | } | ||
225 | |||
226 | vreg->reg = devm_regulator_get(dev, name); | 222 | vreg->reg = devm_regulator_get(dev, name); |
227 | if (IS_ERR(vreg->reg)) { | 223 | if (IS_ERR(vreg->reg)) { |
228 | err = PTR_ERR(vreg->reg); | 224 | err = PTR_ERR(vreg->reg); |
229 | vreg->reg = NULL; | 225 | dev_err(dev, "failed to get %s, %d\n", name, err); |
230 | if (!optional) | ||
231 | dev_err(dev, "failed to get %s, %d\n", name, err); | ||
232 | goto out; | 226 | goto out; |
233 | } | 227 | } |
234 | 228 | ||
@@ -248,9 +242,6 @@ static int __ufs_qcom_phy_init_vreg(struct device *dev, | |||
248 | } | 242 | } |
249 | err = 0; | 243 | err = 0; |
250 | } | 244 | } |
251 | snprintf(prop_name, MAX_PROP_NAME, "%s-always-on", name); | ||
252 | vreg->is_always_on = of_property_read_bool(dev->of_node, | ||
253 | prop_name); | ||
254 | } | 245 | } |
255 | 246 | ||
256 | if (!strcmp(name, "vdda-pll")) { | 247 | if (!strcmp(name, "vdda-pll")) { |
@@ -265,17 +256,9 @@ static int __ufs_qcom_phy_init_vreg(struct device *dev, | |||
265 | } | 256 | } |
266 | 257 | ||
267 | out: | 258 | out: |
268 | if (err) | ||
269 | kfree(vreg->name); | ||
270 | return err; | 259 | return err; |
271 | } | 260 | } |
272 | 261 | ||
273 | static int ufs_qcom_phy_init_vreg(struct device *dev, | ||
274 | struct ufs_qcom_phy_vreg *vreg, const char *name) | ||
275 | { | ||
276 | return __ufs_qcom_phy_init_vreg(dev, vreg, name, false); | ||
277 | } | ||
278 | |||
279 | int ufs_qcom_phy_init_vregulators(struct ufs_qcom_phy *phy_common) | 262 | int ufs_qcom_phy_init_vregulators(struct ufs_qcom_phy *phy_common) |
280 | { | 263 | { |
281 | int err; | 264 | int err; |
@@ -291,9 +274,9 @@ int ufs_qcom_phy_init_vregulators(struct ufs_qcom_phy *phy_common) | |||
291 | if (err) | 274 | if (err) |
292 | goto out; | 275 | goto out; |
293 | 276 | ||
294 | /* vddp-ref-clk-* properties are optional */ | 277 | err = ufs_qcom_phy_init_vreg(phy_common->dev, &phy_common->vddp_ref_clk, |
295 | __ufs_qcom_phy_init_vreg(phy_common->dev, &phy_common->vddp_ref_clk, | 278 | "vddp-ref-clk"); |
296 | "vddp-ref-clk", true); | 279 | |
297 | out: | 280 | out: |
298 | return err; | 281 | return err; |
299 | } | 282 | } |
@@ -416,7 +399,7 @@ static int ufs_qcom_phy_disable_vreg(struct device *dev, | |||
416 | { | 399 | { |
417 | int ret = 0; | 400 | int ret = 0; |
418 | 401 | ||
419 | if (!vreg || !vreg->enabled || vreg->is_always_on) | 402 | if (!vreg || !vreg->enabled) |
420 | goto out; | 403 | goto out; |
421 | 404 | ||
422 | ret = regulator_disable(vreg->reg); | 405 | ret = regulator_disable(vreg->reg); |