mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
watchdog: orion: Use the reference clock on Armada 375 SoC
The 25 MHz reference clock has better stability so its use is prefered over the core clock. Change the Armada 375 clock initialization to use this reference clock. To ensure the driver is compatible with an old devicetree, also provide a fallback path which will silently return to the previous behavior. While here, add the clock specification to the binding documentation. Acked-by: Jason Cooper <[email protected]> Acked-by: Gregory CLEMENT <[email protected]> Acked-by: Wim Van Sebroeck <[email protected]> Reviewed-by: Thomas Petazzoni <[email protected]> Tested-by: Thomas Petazzoni <[email protected]> Signed-off-by: Ezequiel Garcia <[email protected]> Signed-off-by: Daniel Lezcano <[email protected]>
This commit is contained in:
parent
551f2fd5c6
commit
8067042ad9
2 changed files with 54 additions and 1 deletions
|
|
@ -114,6 +114,46 @@ static int armada370_wdt_clock_init(struct platform_device *pdev,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int armada375_wdt_clock_init(struct platform_device *pdev,
|
||||
struct orion_watchdog *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
dev->clk = of_clk_get_by_name(pdev->dev.of_node, "fixed");
|
||||
if (!IS_ERR(dev->clk)) {
|
||||
ret = clk_prepare_enable(dev->clk);
|
||||
if (ret) {
|
||||
clk_put(dev->clk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
atomic_io_modify(dev->reg + TIMER_CTRL,
|
||||
WDT_AXP_FIXED_ENABLE_BIT,
|
||||
WDT_AXP_FIXED_ENABLE_BIT);
|
||||
dev->clk_rate = clk_get_rate(dev->clk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Mandatory fallback for proper devicetree backward compatibility */
|
||||
dev->clk = clk_get(&pdev->dev, NULL);
|
||||
if (IS_ERR(dev->clk))
|
||||
return PTR_ERR(dev->clk);
|
||||
|
||||
ret = clk_prepare_enable(dev->clk);
|
||||
if (ret) {
|
||||
clk_put(dev->clk);
|
||||
return ret;
|
||||
}
|
||||
|
||||
atomic_io_modify(dev->reg + TIMER_CTRL,
|
||||
WDT_A370_RATIO_MASK(WDT_A370_RATIO_SHIFT),
|
||||
WDT_A370_RATIO_MASK(WDT_A370_RATIO_SHIFT));
|
||||
dev->clk_rate = clk_get_rate(dev->clk) / WDT_A370_RATIO;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int armadaxp_wdt_clock_init(struct platform_device *pdev,
|
||||
struct orion_watchdog *dev)
|
||||
{
|
||||
|
|
@ -394,7 +434,7 @@ static const struct orion_watchdog_data armada375_data = {
|
|||
.rstout_mask_bit = BIT(10),
|
||||
.wdt_enable_bit = BIT(8),
|
||||
.wdt_counter_offset = 0x34,
|
||||
.clock_init = armada370_wdt_clock_init,
|
||||
.clock_init = armada375_wdt_clock_init,
|
||||
.enabled = armada375_enabled,
|
||||
.start = armada375_start,
|
||||
.stop = armada375_stop,
|
||||
|
|
|
|||
Loading…
Reference in a new issue