clocksource: timer-ti-dm: Drop bogus omap_dm_timer_of_set_source()

Message ID
State New
Headers show
  • clocksource: timer-ti-dm: Drop bogus omap_dm_timer_of_set_source()
Related show

Commit Message

Suman Anna Feb. 13, 2020, 5:35 a.m.
The function omap_dm_timer_of_set_source() was originally added in
commit 31a7448f4fa8a ("ARM: OMAP: dmtimer: Add clock source from DT"),
and is designed to set a clock source from DT using the clocks property
of a timer node. This design choice is okay for clk provider nodes but
otherwise is a bad design as typically the clocks property is used to
specify the functional clocks for a device, and not its parents.

The timer nodes now all define a timer functional clock after the
conversion to ti-sysc and the new clkctrl layout, and this results
in an attempt to set the same functional clock as its parent when a
consumer driver attempts to acquire any of these timers in the
omap_dm_timer_prepare() function. This was masked and worked around
in commit 983a5a43ec25 ("clocksource: timer-ti-dm: Fix pwm dmtimer
usage of fck reparenting"). Fix all of this by simply dropping the
entire function.

Any DT configuration of clock sources should be achieved using
assigned-clocks and assigned-clock-parents properties provided
by the Common Clock Framework.

Cc: Tony Lindgren <>
Cc: Tero Kristo <>
Cc: Neil Armstrong <>
Cc: H. Nikolaus Schaller <>
Cc: Bartosz Golaszewski <>
Cc: Keerthy <>
Cc: Ladislav Michl <>
Cc: Pavel Machek <>
Cc: Sebastian Reichel <>
Signed-off-by: Suman Anna <>
Hi Tony,

Do you have the history of why the 32 KHz source is set as parent during
prepare? One of the current side-affects of this patch is that now instead
of bailing out, the 32 KHz source is set, and consumers will still need
to select their appropriate parent. Dropping that call should actually
allow us to select the parents in the consumer nodes in dts files using
the assigned-clocks and assigned-clock-parents properties. I prefer to
drop it if you do not foresee any issues. For now, I do not anticipate
any issues with omap-pwm-dmtimer with this patch.


 drivers/clocksource/timer-ti-dm.c | 33 +------------------------------
 1 file changed, 1 insertion(+), 32 deletions(-)


diff --git a/drivers/clocksource/timer-ti-dm.c b/drivers/clocksource/timer-ti-dm.c
index 269a994d6a99..d8637a60a7eb 100644
--- a/drivers/clocksource/timer-ti-dm.c
+++ b/drivers/clocksource/timer-ti-dm.c
@@ -138,35 +138,6 @@  static int omap_dm_timer_reset(struct omap_dm_timer *timer)
 	return 0;
-static int omap_dm_timer_of_set_source(struct omap_dm_timer *timer)
-	int ret;
-	struct clk *parent;
-	/*
-	 * FIXME: OMAP1 devices do not use the clock framework for dmtimers so
-	 * do not call clk_get() for these devices.
-	 */
-	if (!timer->fclk)
-		return -ENODEV;
-	parent = clk_get(&timer->pdev->dev, NULL);
-	if (IS_ERR(parent))
-		return -ENODEV;
-	/* Bail out if both clocks point to fck */
-	if (clk_is_match(parent, timer->fclk))
-		return 0;
-	ret = clk_set_parent(timer->fclk, parent);
-	if (ret < 0)
-		pr_err("%s: failed to set parent\n", __func__);
-	clk_put(parent);
-	return ret;
 static int omap_dm_timer_set_source(struct omap_dm_timer *timer, int source)
 	int ret;
@@ -276,9 +247,7 @@  static int omap_dm_timer_prepare(struct omap_dm_timer *timer)
-	rc = omap_dm_timer_of_set_source(timer);
-	if (rc == -ENODEV)
-		return omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ);
+	rc = omap_dm_timer_set_source(timer, OMAP_TIMER_SRC_32_KHZ);
 	return rc;