summaryrefslogtreecommitdiff
path: root/drivers/clk/at91/sama7g5.c
diff options
context:
space:
mode:
authorClaudiu Beznea <claudiu.beznea@microchip.com>2020-11-19 18:43:16 +0300
committerStephen Boyd <sboyd@kernel.org>2020-12-19 22:50:56 +0300
commit7a110b9107ed8fe27277988cdb4d18e7043b7252 (patch)
tree8e4d7d7bc4f460dd7e8510d08dccd567d849cd6f /drivers/clk/at91/sama7g5.c
parent120d5d8b4614ee26c576b29377a968093948473f (diff)
downloadlinux-7a110b9107ed8fe27277988cdb4d18e7043b7252.tar.xz
clk: at91: clk-master: re-factor master clock
Re-factor master clock driver by splitting it into 2 clocks: prescaller and divider clocks. Based on registered clock flags the prescaler's rate could be changed at runtime. This is necessary for platforms supporting DVFS (e.g. SAMA7G5) where master clock could be changed at run-time. Signed-off-by: Claudiu Beznea <claudiu.beznea@microchip.com> Link: https://lore.kernel.org/r/1605800597-16720-11-git-send-email-claudiu.beznea@microchip.com Signed-off-by: Stephen Boyd <sboyd@kernel.org>
Diffstat (limited to 'drivers/clk/at91/sama7g5.c')
-rw-r--r--drivers/clk/at91/sama7g5.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/clk/at91/sama7g5.c b/drivers/clk/at91/sama7g5.c
index e0c4d2eb9f59..927eb3b2b126 100644
--- a/drivers/clk/at91/sama7g5.c
+++ b/drivers/clk/at91/sama7g5.c
@@ -32,6 +32,7 @@
} while (0)
static DEFINE_SPINLOCK(pmc_pll_lock);
+static DEFINE_SPINLOCK(pmc_mck0_lock);
static DEFINE_SPINLOCK(pmc_mckX_lock);
/**
@@ -984,8 +985,16 @@ static void __init sama7g5_pmc_setup(struct device_node *np)
parent_names[1] = "mainck";
parent_names[2] = "cpupll_divpmcck";
parent_names[3] = "syspll_divpmcck";
- hw = at91_clk_register_master(regmap, "mck0", 4, parent_names,
- &mck0_layout, &mck0_characteristics);
+ hw = at91_clk_register_master_pres(regmap, "mck0_pres", 4, parent_names,
+ &mck0_layout, &mck0_characteristics,
+ &pmc_mck0_lock,
+ CLK_SET_RATE_PARENT, 0);
+ if (IS_ERR(hw))
+ goto err_free;
+
+ hw = at91_clk_register_master_div(regmap, "mck0_div", "mck0_pres",
+ &mck0_layout, &mck0_characteristics,
+ &pmc_mck0_lock, 0);
if (IS_ERR(hw))
goto err_free;