aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/phy
diff options
context:
space:
mode:
authorMaxime Ripard <maxime.ripard@free-electrons.com>2014-05-13 11:44:17 -0400
committerKishon Vijay Abraham I <kishon@ti.com>2014-05-14 10:11:13 -0400
commit2a7f9982d6c188052b85a6488c7008a45c4a062c (patch)
tree52bd4b3560d8ef9084cfdb5f8e36da589bca0844 /drivers/phy
parent4fc8a4e65fda3271357bbea933206851736894da (diff)
phy: sunxi: Rework phy initialization
Move the phy initialization and variables declaration to the loop itself, since it is where it really belongs. Also remove all the temporary variables, we can use the structure members directly. Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com> Reviewed-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
Diffstat (limited to 'drivers/phy')
-rw-r--r--drivers/phy/phy-sun4i-usb.c42
1 files changed, 18 insertions, 24 deletions
diff --git a/drivers/phy/phy-sun4i-usb.c b/drivers/phy/phy-sun4i-usb.c
index e6e6c4ba7145..66a87d50512b 100644
--- a/drivers/phy/phy-sun4i-usb.c
+++ b/drivers/phy/phy-sun4i-usb.c
@@ -224,13 +224,8 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
224 struct sun4i_usb_phy_data *data; 224 struct sun4i_usb_phy_data *data;
225 struct device *dev = &pdev->dev; 225 struct device *dev = &pdev->dev;
226 struct device_node *np = dev->of_node; 226 struct device_node *np = dev->of_node;
227 void __iomem *pmu = NULL;
228 struct phy_provider *phy_provider; 227 struct phy_provider *phy_provider;
229 struct reset_control *reset;
230 struct regulator *vbus;
231 struct resource *res; 228 struct resource *res;
232 struct phy *phy;
233 char name[16];
234 int i; 229 int i;
235 230
236 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL); 231 data = devm_kzalloc(dev, sizeof(*data), GFP_KERNEL);
@@ -262,42 +257,41 @@ static int sun4i_usb_phy_probe(struct platform_device *pdev)
262 257
263 /* Skip 0, 0 is the phy for otg which is not yet supported. */ 258 /* Skip 0, 0 is the phy for otg which is not yet supported. */
264 for (i = 1; i < data->num_phys; i++) { 259 for (i = 1; i < data->num_phys; i++) {
260 struct sun4i_usb_phy *phy = data->phys + i;
261 char name[16];
262
265 snprintf(name, sizeof(name), "usb%d_vbus", i); 263 snprintf(name, sizeof(name), "usb%d_vbus", i);
266 vbus = devm_regulator_get_optional(dev, name); 264 phy->vbus = devm_regulator_get_optional(dev, name);
267 if (IS_ERR(vbus)) { 265 if (IS_ERR(phy->vbus)) {
268 if (PTR_ERR(vbus) == -EPROBE_DEFER) 266 if (PTR_ERR(phy->vbus) == -EPROBE_DEFER)
269 return -EPROBE_DEFER; 267 return -EPROBE_DEFER;
270 vbus = NULL; 268 phy->vbus = NULL;
271 } 269 }
272 270
273 snprintf(name, sizeof(name), "usb%d_reset", i); 271 snprintf(name, sizeof(name), "usb%d_reset", i);
274 reset = devm_reset_control_get(dev, name); 272 phy->reset = devm_reset_control_get(dev, name);
275 if (IS_ERR(reset)) { 273 if (IS_ERR(phy->reset)) {
276 dev_err(dev, "failed to get reset %s\n", name); 274 dev_err(dev, "failed to get reset %s\n", name);
277 return PTR_ERR(reset); 275 return PTR_ERR(phy->reset);
278 } 276 }
279 277
280 if (i) { /* No pmu for usbc0 */ 278 if (i) { /* No pmu for usbc0 */
281 snprintf(name, sizeof(name), "pmu%d", i); 279 snprintf(name, sizeof(name), "pmu%d", i);
282 res = platform_get_resource_byname(pdev, 280 res = platform_get_resource_byname(pdev,
283 IORESOURCE_MEM, name); 281 IORESOURCE_MEM, name);
284 pmu = devm_ioremap_resource(dev, res); 282 phy->pmu = devm_ioremap_resource(dev, res);
285 if (IS_ERR(pmu)) 283 if (IS_ERR(phy->pmu))
286 return PTR_ERR(pmu); 284 return PTR_ERR(phy->pmu);
287 } 285 }
288 286
289 phy = devm_phy_create(dev, &sun4i_usb_phy_ops, NULL); 287 phy->phy = devm_phy_create(dev, &sun4i_usb_phy_ops, NULL);
290 if (IS_ERR(phy)) { 288 if (IS_ERR(phy->phy)) {
291 dev_err(dev, "failed to create PHY %d\n", i); 289 dev_err(dev, "failed to create PHY %d\n", i);
292 return PTR_ERR(phy); 290 return PTR_ERR(phy->phy);
293 } 291 }
294 292
295 data->phys[i].phy = phy; 293 phy->index = i;
296 data->phys[i].pmu = pmu; 294 phy_set_drvdata(phy->phy, &data->phys[i]);
297 data->phys[i].vbus = vbus;
298 data->phys[i].reset = reset;
299 data->phys[i].index = i;
300 phy_set_drvdata(phy, &data->phys[i]);
301 } 295 }
302 296
303 dev_set_drvdata(dev, data); 297 dev_set_drvdata(dev, data);