Commit 2ed3284f authored by Junyi Zhao's avatar Junyi Zhao Committed by Uwe Kleine-König
Browse files

pwm: meson: Add support for Amlogic S4 PWM

parent 7f61257c
Loading
Loading
Loading
Loading
+39 −0
Original line number Diff line number Diff line
@@ -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);