]> Git Repo - J-linux.git/blobdiff - drivers/pwm/pwm-meson.c
Merge tag 'zonefs-6.11-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/dlemoal...
[J-linux.git] / drivers / pwm / pwm-meson.c
index b2f97dfb01bb85e2a09ce1090f106321eff56be5..98e6c1533312eb8b060feb9d77907d49545647d2 100644 (file)
@@ -460,6 +460,37 @@ static int meson_pwm_init_channels_meson8b_v2(struct pwm_chip *chip)
        return meson_pwm_init_clocks_meson8b(chip, mux_parent_data);
 }
 
+static void meson_pwm_s4_put_clk(void *data)
+{
+       struct clk *clk = data;
+
+       clk_put(clk);
+}
+
+static int meson_pwm_init_channels_s4(struct pwm_chip *chip)
+{
+       struct device *dev = pwmchip_parent(chip);
+       struct device_node *np = dev->of_node;
+       struct meson_pwm *meson = to_meson_pwm(chip);
+       int i, ret;
+
+       for (i = 0; i < MESON_NUM_PWMS; i++) {
+               meson->channels[i].clk = of_clk_get(np, i);
+               if (IS_ERR(meson->channels[i].clk))
+                       return dev_err_probe(dev,
+                                            PTR_ERR(meson->channels[i].clk),
+                                            "Failed to get clk\n");
+
+               ret = devm_add_action_or_reset(dev, meson_pwm_s4_put_clk,
+                                              meson->channels[i].clk);
+               if (ret)
+                       return dev_err_probe(dev, ret,
+                                            "Failed to add clk_put action\n");
+       }
+
+       return 0;
+}
+
 static const struct meson_pwm_data pwm_meson8b_data = {
        .parent_names = { "xtal", NULL, "fclk_div4", "fclk_div3" },
        .channels_init = meson_pwm_init_channels_meson8b_legacy,
@@ -498,6 +529,10 @@ static const struct meson_pwm_data pwm_meson8_v2_data = {
        .channels_init = meson_pwm_init_channels_meson8b_v2,
 };
 
+static const struct meson_pwm_data pwm_s4_data = {
+       .channels_init = meson_pwm_init_channels_s4,
+};
+
 static const struct of_device_id meson_pwm_matches[] = {
        {
                .compatible = "amlogic,meson8-pwm-v2",
@@ -536,6 +571,10 @@ static const struct of_device_id meson_pwm_matches[] = {
                .compatible = "amlogic,meson-g12a-ao-pwm-cd",
                .data = &pwm_g12a_ao_cd_data
        },
+       {
+               .compatible = "amlogic,meson-s4-pwm",
+               .data = &pwm_s4_data
+       },
        {},
 };
 MODULE_DEVICE_TABLE(of, meson_pwm_matches);
This page took 0.028624 seconds and 4 git commands to generate.