Re: [DMARC error][DKIM error] [PATCH v7 1/2] pwm: meson: Add support for Amlogic S4 PWM

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Kelvin, Junyi

On 6/5/24 05:44, Kelvin Zhang via B4 Relay wrote:
From: Junyi Zhao <junyi.zhao@xxxxxxxxxxx>

Add support for Amlogic S4 PWM.

Signed-off-by: Junyi Zhao <junyi.zhao@xxxxxxxxxxx>
Signed-off-by: Kelvin Zhang <kelvin.zhang@xxxxxxxxxxx>
---
  drivers/pwm/pwm-meson.c | 36 ++++++++++++++++++++++++++++++++++++
  1 file changed, 36 insertions(+)

diff --git a/drivers/pwm/pwm-meson.c b/drivers/pwm/pwm-meson.c
index b2f97dfb01bb..4f01847525b2 100644
--- a/drivers/pwm/pwm-meson.c
+++ b/drivers/pwm/pwm-meson.c
@@ -460,6 +460,34 @@ 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)) {
+			ret = PTR_ERR(meson->channels[i].clk);
+			dev_err_probe(dev, ret, "Failed to get clk\n");
+			return ret;
+		}
+		devm_add_action_or_reset(dev, meson_pwm_s4_put_clk,
+					 meson->channels[i].clk);

devm_add_action_or_reset() result should be checked

+	}
+
+	return 0;
+}

You can rewrite it a bit to always have a single allocation for devm node:

static void meson_pwm_s4_put_clk(void *data)
{
	struct meson_pwm *meson = data;
	int i;

	for (i = 0; i < MESON_NUM_PWMS; i++)
		clk_put(meson->channels[i].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;

	ret = devm_add_action(dev, meson_pwm_s4_put_clk, meson);
	if (ret)
		return 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)) {
			ret = PTR_ERR(meson->channels[i].clk);
			dev_err_probe(dev, ret, "Failed to get clk\n");
			return ret;
		}
	}

	return 0;
}


--
Best regards
George




[Index of Archives]     [Device Tree Compilter]     [Device Tree Spec]     [Linux Driver Backports]     [Video for Linux]     [Linux USB Devel]     [Linux PCI Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Yosemite Backpacking]


  Powered by Linux