struct regmap *regmap;
        struct pwm_chip *chip;
        struct axi_pwmgen_ddata *ddata;
-       struct clk *clk;
+       struct clk *axi_clk, *clk;
        void __iomem *io_base;
        int ret;
 
        ddata = pwmchip_get_drvdata(chip);
        ddata->regmap = regmap;
 
-       clk = devm_clk_get_enabled(dev, NULL);
+       /*
+        * Using NULL here instead of "axi" for backwards compatibility. There
+        * are some dtbs that don't give clock-names and have the "ext" clock
+        * as the one and only clock (due to mistake in the original bindings).
+        */
+       axi_clk = devm_clk_get_enabled(dev, NULL);
+       if (IS_ERR(axi_clk))
+               return dev_err_probe(dev, PTR_ERR(axi_clk), "failed to get axi clock\n");
+
+       clk = devm_clk_get_optional_enabled(dev, "ext");
        if (IS_ERR(clk))
-               return dev_err_probe(dev, PTR_ERR(clk), "failed to get clock\n");
+               return dev_err_probe(dev, PTR_ERR(clk), "failed to get ext clock\n");
+
+       /*
+        * If there is no "ext" clock, it means the HDL was compiled with
+        * ASYNC_CLK_EN=0. In this case, the AXI clock is also used for the
+        * PWM output clock.
+        */
+       if (!clk)
+               clk = axi_clk;
 
        ret = devm_clk_rate_exclusive_get(dev, clk);
        if (ret)