Sean Anderson wrote: > Instead of using a special property to determine the reference clock > period, use the rate of the reference clock. When we have a legacy > snps,ref-clock-period-ns property and no reference clock, use it > instead. Fractional clocks are not currently supported, and will be > dealt with in the next commit. > > Signed-off-by: Sean Anderson <sean.anderson@xxxxxxxx> > Reviewed-by: Robert Hancock <robert.hancock@xxxxxxxxxx> > Tested-by: Robert Hancock <robert.hancock@xxxxxxxxxx> > --- > > Changes in v3: > - Define each variable on its own line > > drivers/usb/dwc3/core.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/dwc3/core.c b/drivers/usb/dwc3/core.c > index 699ab9abdc47..38fef5c74359 100644 > --- a/drivers/usb/dwc3/core.c > +++ b/drivers/usb/dwc3/core.c > @@ -347,14 +347,24 @@ static void dwc3_frame_length_adjustment(struct dwc3 *dwc) > */ > static void dwc3_ref_clk_period(struct dwc3 *dwc) > { > + unsigned long period; > + unsigned long rate; > u32 reg; > > - if (dwc->ref_clk_per == 0) > + if (dwc->ref_clk) { > + rate = clk_get_rate(dwc->ref_clk); > + if (!rate) > + return; > + period = NSEC_PER_SEC / rate; > + } else if (dwc->ref_clk_per) { > + period = dwc->ref_clk_per; > + } else { > return; > + } > > reg = dwc3_readl(dwc->regs, DWC3_GUCTL); > reg &= ~DWC3_GUCTL_REFCLKPER_MASK; > - reg |= FIELD_PREP(DWC3_GUCTL_REFCLKPER_MASK, dwc->ref_clk_per); > + reg |= FIELD_PREP(DWC3_GUCTL_REFCLKPER_MASK, period); > dwc3_writel(dwc->regs, DWC3_GUCTL, reg); > } > Reviewed-by: Thinh Nguyen <Thinh.Nguyen@xxxxxxxxxxxx> Thanks, Thinh