pwm: meson: Add support for Amlogic S4 PWM
Add support for Amlogic S4 PWM. Signed-off-by: Junyi Zhao <junyi.zhao@amlogic.com> Signed-off-by: Kelvin Zhang <kelvin.zhang@amlogic.com> Reviewed-by: George Stark <gnstark@salutedevices.com> Link: https://lore.kernel.org/r/20240613-s4-pwm-v8-1-b5bd0a768282@amlogic.com Signed-off-by: Uwe Kleine-König <ukleinek@kernel.org>
This commit is contained in:
parent
7f61257cd6
commit
2ed3284f31
@ -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);
|
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 = {
|
static const struct meson_pwm_data pwm_meson8b_data = {
|
||||||
.parent_names = { "xtal", NULL, "fclk_div4", "fclk_div3" },
|
.parent_names = { "xtal", NULL, "fclk_div4", "fclk_div3" },
|
||||||
.channels_init = meson_pwm_init_channels_meson8b_legacy,
|
.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,
|
.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[] = {
|
static const struct of_device_id meson_pwm_matches[] = {
|
||||||
{
|
{
|
||||||
.compatible = "amlogic,meson8-pwm-v2",
|
.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",
|
.compatible = "amlogic,meson-g12a-ao-pwm-cd",
|
||||||
.data = &pwm_g12a_ao_cd_data
|
.data = &pwm_g12a_ao_cd_data
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.compatible = "amlogic,meson-s4-pwm",
|
||||||
|
.data = &pwm_s4_data
|
||||||
|
},
|
||||||
{},
|
{},
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(of, meson_pwm_matches);
|
MODULE_DEVICE_TABLE(of, meson_pwm_matches);
|
||||||
|
Loading…
Reference in New Issue
Block a user