|
@@ -57,6 +57,7 @@ static const char * const mtk_pwm_clk_name[MTK_CLK_MAX] = {
|
|
|
struct mtk_pwm_platform_data {
|
|
|
unsigned int num_pwms;
|
|
|
bool pwm45_fixup;
|
|
|
+ bool has_clks;
|
|
|
};
|
|
|
|
|
|
/**
|
|
@@ -86,6 +87,9 @@ static int mtk_pwm_clk_enable(struct pwm_chip *chip, struct pwm_device *pwm)
|
|
|
struct mtk_pwm_chip *pc = to_mtk_pwm_chip(chip);
|
|
|
int ret;
|
|
|
|
|
|
+ if (!pc->soc->has_clks)
|
|
|
+ return 0;
|
|
|
+
|
|
|
ret = clk_prepare_enable(pc->clks[MTK_CLK_TOP]);
|
|
|
if (ret < 0)
|
|
|
return ret;
|
|
@@ -112,6 +116,9 @@ static void mtk_pwm_clk_disable(struct pwm_chip *chip, struct pwm_device *pwm)
|
|
|
{
|
|
|
struct mtk_pwm_chip *pc = to_mtk_pwm_chip(chip);
|
|
|
|
|
|
+ if (!pc->soc->has_clks)
|
|
|
+ return;
|
|
|
+
|
|
|
clk_disable_unprepare(pc->clks[MTK_CLK_PWM1 + pwm->hwpwm]);
|
|
|
clk_disable_unprepare(pc->clks[MTK_CLK_MAIN]);
|
|
|
clk_disable_unprepare(pc->clks[MTK_CLK_TOP]);
|
|
@@ -239,7 +246,7 @@ static int mtk_pwm_probe(struct platform_device *pdev)
|
|
|
if (IS_ERR(pc->regs))
|
|
|
return PTR_ERR(pc->regs);
|
|
|
|
|
|
- for (i = 0; i < data->num_pwms + 2; i++) {
|
|
|
+ for (i = 0; i < data->num_pwms + 2 && pc->soc->has_clks; i++) {
|
|
|
pc->clks[i] = devm_clk_get(&pdev->dev, mtk_pwm_clk_name[i]);
|
|
|
if (IS_ERR(pc->clks[i])) {
|
|
|
dev_err(&pdev->dev, "clock: %s fail: %ld\n",
|
|
@@ -274,22 +281,32 @@ static int mtk_pwm_remove(struct platform_device *pdev)
|
|
|
static const struct mtk_pwm_platform_data mt2712_pwm_data = {
|
|
|
.num_pwms = 8,
|
|
|
.pwm45_fixup = false,
|
|
|
+ .has_clks = true,
|
|
|
};
|
|
|
|
|
|
static const struct mtk_pwm_platform_data mt7622_pwm_data = {
|
|
|
.num_pwms = 6,
|
|
|
.pwm45_fixup = false,
|
|
|
+ .has_clks = true,
|
|
|
};
|
|
|
|
|
|
static const struct mtk_pwm_platform_data mt7623_pwm_data = {
|
|
|
.num_pwms = 5,
|
|
|
.pwm45_fixup = true,
|
|
|
+ .has_clks = true,
|
|
|
+};
|
|
|
+
|
|
|
+static const struct mtk_pwm_platform_data mt7628_pwm_data = {
|
|
|
+ .num_pwms = 4,
|
|
|
+ .pwm45_fixup = true,
|
|
|
+ .has_clks = false,
|
|
|
};
|
|
|
|
|
|
static const struct of_device_id mtk_pwm_of_match[] = {
|
|
|
{ .compatible = "mediatek,mt2712-pwm", .data = &mt2712_pwm_data },
|
|
|
{ .compatible = "mediatek,mt7622-pwm", .data = &mt7622_pwm_data },
|
|
|
{ .compatible = "mediatek,mt7623-pwm", .data = &mt7623_pwm_data },
|
|
|
+ { .compatible = "mediatek,mt7628-pwm", .data = &mt7628_pwm_data },
|
|
|
{ },
|
|
|
};
|
|
|
MODULE_DEVICE_TABLE(of, mtk_pwm_of_match);
|