Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

phy: ti: usb2: Fix logic on -EPROBE_DEFER

If clk_get() returns -EPROBE_DEFER then we should just
return instead of falling back to old clock name.

Use clk_prepare_enable() and clk_disable_unprepare() instead
of splitting up prepare/unprepare from enable/disable.

Signed-off-by: Roger Quadros <rogerq@ti.com>
Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>

authored by

Roger Quadros and committed by
Kishon Vijay Abraham I
ed31ee7c 32fcf6fc

+49 -43
+49 -43
drivers/phy/ti/phy-omap-usb2.c
··· 135 135 136 136 static int omap_usb2_disable_clocks(struct omap_usb *phy) 137 137 { 138 - clk_disable(phy->wkupclk); 138 + clk_disable_unprepare(phy->wkupclk); 139 139 if (!IS_ERR(phy->optclk)) 140 - clk_disable(phy->optclk); 140 + clk_disable_unprepare(phy->optclk); 141 141 142 142 return 0; 143 143 } ··· 146 146 { 147 147 int ret; 148 148 149 - ret = clk_enable(phy->wkupclk); 149 + ret = clk_prepare_enable(phy->wkupclk); 150 150 if (ret < 0) { 151 151 dev_err(phy->dev, "Failed to enable wkupclk %d\n", ret); 152 152 goto err0; 153 153 } 154 154 155 155 if (!IS_ERR(phy->optclk)) { 156 - ret = clk_enable(phy->optclk); 156 + ret = clk_prepare_enable(phy->optclk); 157 157 if (ret < 0) { 158 158 dev_err(phy->dev, "Failed to enable optclk %d\n", ret); 159 159 goto err1; ··· 346 346 } 347 347 } 348 348 349 - otg->set_host = omap_usb_set_host; 350 - otg->set_peripheral = omap_usb_set_peripheral; 349 + 350 + phy->wkupclk = devm_clk_get(phy->dev, "wkupclk"); 351 + if (IS_ERR(phy->wkupclk)) { 352 + if (PTR_ERR(phy->wkupclk) == -EPROBE_DEFER) 353 + return -EPROBE_DEFER; 354 + 355 + dev_warn(&pdev->dev, "unable to get wkupclk %ld, trying old name\n", 356 + PTR_ERR(phy->wkupclk)); 357 + phy->wkupclk = devm_clk_get(phy->dev, "usb_phy_cm_clk32k"); 358 + 359 + if (IS_ERR(phy->wkupclk)) { 360 + if (PTR_ERR(phy->wkupclk) != -EPROBE_DEFER) 361 + dev_err(&pdev->dev, "unable to get usb_phy_cm_clk32k\n"); 362 + return PTR_ERR(phy->wkupclk); 363 + } else { 364 + dev_warn(&pdev->dev, 365 + "found usb_phy_cm_clk32k, please fix DTS\n"); 366 + } 367 + } 368 + 369 + phy->optclk = devm_clk_get(phy->dev, "refclk"); 370 + if (IS_ERR(phy->optclk)) { 371 + if (PTR_ERR(phy->optclk) == -EPROBE_DEFER) 372 + return -EPROBE_DEFER; 373 + 374 + dev_dbg(&pdev->dev, "unable to get refclk, trying old name\n"); 375 + phy->optclk = devm_clk_get(phy->dev, "usb_otg_ss_refclk960m"); 376 + 377 + if (IS_ERR(phy->optclk)) { 378 + if (PTR_ERR(phy->optclk) != -EPROBE_DEFER) { 379 + dev_dbg(&pdev->dev, 380 + "unable to get usb_otg_ss_refclk960m\n"); 381 + } 382 + } else { 383 + dev_warn(&pdev->dev, 384 + "found usb_otg_ss_refclk960m, please fix DTS\n"); 385 + } 386 + } 387 + 388 + otg->set_host = omap_usb_set_host; 389 + otg->set_peripheral = omap_usb_set_peripheral; 351 390 if (phy_data->flags & OMAP_USB2_HAS_SET_VBUS) 352 - otg->set_vbus = omap_usb_set_vbus; 391 + otg->set_vbus = omap_usb_set_vbus; 353 392 if (phy_data->flags & OMAP_USB2_HAS_START_SRP) 354 - otg->start_srp = omap_usb_start_srp; 355 - otg->usb_phy = &phy->phy; 393 + otg->start_srp = omap_usb_start_srp; 394 + otg->usb_phy = &phy->phy; 356 395 357 396 platform_set_drvdata(pdev, phy); 358 397 pm_runtime_enable(phy->dev); ··· 406 367 omap_usb_power_off(generic_phy); 407 368 408 369 phy_provider = devm_of_phy_provider_register(phy->dev, 409 - of_phy_simple_xlate); 370 + of_phy_simple_xlate); 410 371 if (IS_ERR(phy_provider)) { 411 372 pm_runtime_disable(phy->dev); 412 373 return PTR_ERR(phy_provider); 413 374 } 414 375 415 - phy->wkupclk = devm_clk_get(phy->dev, "wkupclk"); 416 - if (IS_ERR(phy->wkupclk)) { 417 - dev_warn(&pdev->dev, "unable to get wkupclk, trying old name\n"); 418 - phy->wkupclk = devm_clk_get(phy->dev, "usb_phy_cm_clk32k"); 419 - if (IS_ERR(phy->wkupclk)) { 420 - dev_err(&pdev->dev, "unable to get usb_phy_cm_clk32k\n"); 421 - pm_runtime_disable(phy->dev); 422 - return PTR_ERR(phy->wkupclk); 423 - } else { 424 - dev_warn(&pdev->dev, 425 - "found usb_phy_cm_clk32k, please fix DTS\n"); 426 - } 427 - } 428 - clk_prepare(phy->wkupclk); 429 - 430 - phy->optclk = devm_clk_get(phy->dev, "refclk"); 431 - if (IS_ERR(phy->optclk)) { 432 - dev_dbg(&pdev->dev, "unable to get refclk, trying old name\n"); 433 - phy->optclk = devm_clk_get(phy->dev, "usb_otg_ss_refclk960m"); 434 - if (IS_ERR(phy->optclk)) { 435 - dev_dbg(&pdev->dev, 436 - "unable to get usb_otg_ss_refclk960m\n"); 437 - } else { 438 - dev_warn(&pdev->dev, 439 - "found usb_otg_ss_refclk960m, please fix DTS\n"); 440 - } 441 - } 442 - 443 - if (!IS_ERR(phy->optclk)) 444 - clk_prepare(phy->optclk); 445 376 446 377 usb_add_phy_dev(&phy->phy); 447 378 ··· 422 413 { 423 414 struct omap_usb *phy = platform_get_drvdata(pdev); 424 415 425 - clk_unprepare(phy->wkupclk); 426 - if (!IS_ERR(phy->optclk)) 427 - clk_unprepare(phy->optclk); 428 416 usb_remove_phy(&phy->phy); 429 417 pm_runtime_disable(phy->dev); 430 418