usb: dwc3: fix backwards compat with rockchip devices
Commit33fb697ec7
("usb: dwc3: Get clocks individually") moved from the clk_bulk api to individual clocks, following the snps,dwc3.yaml dt-binding for clock names. Unfortunately the rk3328 (and upcoming rk356x support) use the rockchip,dwc3.yaml which has different clock names, which are common on devices using the glue layer. The rk3328 does not use a glue layer, but attaches directly to the dwc3 core driver. The offending patch series failed to account for this, thus dwc3 was broken on rk3328. To retain backwards compatibility with rk3328 device trees we must also check for the alternate clock names. Fixes:33fb697ec7
("usb: dwc3: Get clocks individually") Reported-by: Frank Wunderlich <frank-w@public-files.de> Tested-By: Frank Wunderlich <frank-w@public-files.de> Reviewed-by: Heiko Stuebner <heiko@sntech.de> Acked-by: Sean Anderson <sean.anderson@seco.com> Signed-off-by: Peter Geis <pgwipeout@gmail.com> Link: https://lore.kernel.org/r/20220409152116.3834354-1-pgwipeout@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
Родитель
0cade7885f
Коммит
4e64cd7763
|
@ -1690,21 +1690,44 @@ static int dwc3_probe(struct platform_device *pdev)
|
|||
/*
|
||||
* Clocks are optional, but new DT platforms should support all
|
||||
* clocks as required by the DT-binding.
|
||||
* Some devices have different clock names in legacy device trees,
|
||||
* check for them to retain backwards compatibility.
|
||||
*/
|
||||
dwc->bus_clk = devm_clk_get_optional(dev, "bus_early");
|
||||
if (IS_ERR(dwc->bus_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(dwc->bus_clk),
|
||||
"could not get bus clock\n");
|
||||
|
||||
if (dwc->bus_clk == NULL) {
|
||||
dwc->bus_clk = devm_clk_get_optional(dev, "bus_clk");
|
||||
if (IS_ERR(dwc->bus_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(dwc->bus_clk),
|
||||
"could not get bus clock\n");
|
||||
}
|
||||
|
||||
dwc->ref_clk = devm_clk_get_optional(dev, "ref");
|
||||
if (IS_ERR(dwc->ref_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(dwc->ref_clk),
|
||||
"could not get ref clock\n");
|
||||
|
||||
if (dwc->ref_clk == NULL) {
|
||||
dwc->ref_clk = devm_clk_get_optional(dev, "ref_clk");
|
||||
if (IS_ERR(dwc->ref_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(dwc->ref_clk),
|
||||
"could not get ref clock\n");
|
||||
}
|
||||
|
||||
dwc->susp_clk = devm_clk_get_optional(dev, "suspend");
|
||||
if (IS_ERR(dwc->susp_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(dwc->susp_clk),
|
||||
"could not get suspend clock\n");
|
||||
|
||||
if (dwc->susp_clk == NULL) {
|
||||
dwc->susp_clk = devm_clk_get_optional(dev, "suspend_clk");
|
||||
if (IS_ERR(dwc->susp_clk))
|
||||
return dev_err_probe(dev, PTR_ERR(dwc->susp_clk),
|
||||
"could not get suspend clock\n");
|
||||
}
|
||||
}
|
||||
|
||||
ret = reset_control_deassert(dwc->reset);
|
||||
|
|
Загрузка…
Ссылка в новой задаче