Commit 0b38dd17 authored by Mans Rullgard's avatar Mans Rullgard Committed by Daniel Lezcano

clocksource/drivers/sun5i: Remove pointless struct

Remove the pointless struct added in the previous patch to make
the diff smaller.
Signed-off-by: default avatarMans Rullgard <mans@mansr.com>
Acked-by: default avatarJernej Skrabec <jernej.skrabec@gmail.com>
Acked-by: default avatarMaxime Ripard <mripard@kernel.org>
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20230630201800.16501-3-mans@mansr.com
parent 7ded8038
...@@ -35,22 +35,17 @@ ...@@ -35,22 +35,17 @@
#define TIMER_SYNC_TICKS 3 #define TIMER_SYNC_TICKS 3
/* Pointless struct to minimise diff */ struct sun5i_timer {
struct _sun5i_timer {
void __iomem *base; void __iomem *base;
struct clk *clk; struct clk *clk;
struct notifier_block clk_rate_cb; struct notifier_block clk_rate_cb;
u32 ticks_per_jiffy; u32 ticks_per_jiffy;
};
struct sun5i_timer {
struct _sun5i_timer timer;
struct clocksource clksrc; struct clocksource clksrc;
struct clock_event_device clkevt; struct clock_event_device clkevt;
}; };
#define nb_to_sun5i_timer(x) \ #define nb_to_sun5i_timer(x) \
container_of(x, struct sun5i_timer, timer.clk_rate_cb) container_of(x, struct sun5i_timer, clk_rate_cb)
#define clksrc_to_sun5i_timer(x) \ #define clksrc_to_sun5i_timer(x) \
container_of(x, struct sun5i_timer, clksrc) container_of(x, struct sun5i_timer, clksrc)
#define clkevt_to_sun5i_timer(x) \ #define clkevt_to_sun5i_timer(x) \
...@@ -64,28 +59,28 @@ struct sun5i_timer { ...@@ -64,28 +59,28 @@ struct sun5i_timer {
*/ */
static void sun5i_clkevt_sync(struct sun5i_timer *ce) static void sun5i_clkevt_sync(struct sun5i_timer *ce)
{ {
u32 old = readl(ce->timer.base + TIMER_CNTVAL_LO_REG(1)); u32 old = readl(ce->base + TIMER_CNTVAL_LO_REG(1));
while ((old - readl(ce->timer.base + TIMER_CNTVAL_LO_REG(1))) < TIMER_SYNC_TICKS) while ((old - readl(ce->base + TIMER_CNTVAL_LO_REG(1))) < TIMER_SYNC_TICKS)
cpu_relax(); cpu_relax();
} }
static void sun5i_clkevt_time_stop(struct sun5i_timer *ce, u8 timer) static void sun5i_clkevt_time_stop(struct sun5i_timer *ce, u8 timer)
{ {
u32 val = readl(ce->timer.base + TIMER_CTL_REG(timer)); u32 val = readl(ce->base + TIMER_CTL_REG(timer));
writel(val & ~TIMER_CTL_ENABLE, ce->timer.base + TIMER_CTL_REG(timer)); writel(val & ~TIMER_CTL_ENABLE, ce->base + TIMER_CTL_REG(timer));
sun5i_clkevt_sync(ce); sun5i_clkevt_sync(ce);
} }
static void sun5i_clkevt_time_setup(struct sun5i_timer *ce, u8 timer, u32 delay) static void sun5i_clkevt_time_setup(struct sun5i_timer *ce, u8 timer, u32 delay)
{ {
writel(delay, ce->timer.base + TIMER_INTVAL_LO_REG(timer)); writel(delay, ce->base + TIMER_INTVAL_LO_REG(timer));
} }
static void sun5i_clkevt_time_start(struct sun5i_timer *ce, u8 timer, bool periodic) static void sun5i_clkevt_time_start(struct sun5i_timer *ce, u8 timer, bool periodic)
{ {
u32 val = readl(ce->timer.base + TIMER_CTL_REG(timer)); u32 val = readl(ce->base + TIMER_CTL_REG(timer));
if (periodic) if (periodic)
val &= ~TIMER_CTL_ONESHOT; val &= ~TIMER_CTL_ONESHOT;
...@@ -93,7 +88,7 @@ static void sun5i_clkevt_time_start(struct sun5i_timer *ce, u8 timer, bool perio ...@@ -93,7 +88,7 @@ static void sun5i_clkevt_time_start(struct sun5i_timer *ce, u8 timer, bool perio
val |= TIMER_CTL_ONESHOT; val |= TIMER_CTL_ONESHOT;
writel(val | TIMER_CTL_ENABLE | TIMER_CTL_RELOAD, writel(val | TIMER_CTL_ENABLE | TIMER_CTL_RELOAD,
ce->timer.base + TIMER_CTL_REG(timer)); ce->base + TIMER_CTL_REG(timer));
} }
static int sun5i_clkevt_shutdown(struct clock_event_device *clkevt) static int sun5i_clkevt_shutdown(struct clock_event_device *clkevt)
...@@ -118,7 +113,7 @@ static int sun5i_clkevt_set_periodic(struct clock_event_device *clkevt) ...@@ -118,7 +113,7 @@ static int sun5i_clkevt_set_periodic(struct clock_event_device *clkevt)
struct sun5i_timer *ce = clkevt_to_sun5i_timer(clkevt); struct sun5i_timer *ce = clkevt_to_sun5i_timer(clkevt);
sun5i_clkevt_time_stop(ce, 0); sun5i_clkevt_time_stop(ce, 0);
sun5i_clkevt_time_setup(ce, 0, ce->timer.ticks_per_jiffy); sun5i_clkevt_time_setup(ce, 0, ce->ticks_per_jiffy);
sun5i_clkevt_time_start(ce, 0, true); sun5i_clkevt_time_start(ce, 0, true);
return 0; return 0;
} }
...@@ -139,7 +134,7 @@ static irqreturn_t sun5i_timer_interrupt(int irq, void *dev_id) ...@@ -139,7 +134,7 @@ static irqreturn_t sun5i_timer_interrupt(int irq, void *dev_id)
{ {
struct sun5i_timer *ce = dev_id; struct sun5i_timer *ce = dev_id;
writel(0x1, ce->timer.base + TIMER_IRQ_ST_REG); writel(0x1, ce->base + TIMER_IRQ_ST_REG);
ce->clkevt.event_handler(&ce->clkevt); ce->clkevt.event_handler(&ce->clkevt);
return IRQ_HANDLED; return IRQ_HANDLED;
...@@ -149,7 +144,7 @@ static u64 sun5i_clksrc_read(struct clocksource *clksrc) ...@@ -149,7 +144,7 @@ static u64 sun5i_clksrc_read(struct clocksource *clksrc)
{ {
struct sun5i_timer *cs = clksrc_to_sun5i_timer(clksrc); struct sun5i_timer *cs = clksrc_to_sun5i_timer(clksrc);
return ~readl(cs->timer.base + TIMER_CNTVAL_LO_REG(1)); return ~readl(cs->base + TIMER_CNTVAL_LO_REG(1));
} }
static int sun5i_rate_cb(struct notifier_block *nb, static int sun5i_rate_cb(struct notifier_block *nb,
...@@ -166,7 +161,7 @@ static int sun5i_rate_cb(struct notifier_block *nb, ...@@ -166,7 +161,7 @@ static int sun5i_rate_cb(struct notifier_block *nb,
case POST_RATE_CHANGE: case POST_RATE_CHANGE:
clocksource_register_hz(&cs->clksrc, ndata->new_rate); clocksource_register_hz(&cs->clksrc, ndata->new_rate);
clockevents_update_freq(&cs->clkevt, ndata->new_rate); clockevents_update_freq(&cs->clkevt, ndata->new_rate);
cs->timer.ticks_per_jiffy = DIV_ROUND_UP(ndata->new_rate, HZ); cs->ticks_per_jiffy = DIV_ROUND_UP(ndata->new_rate, HZ);
break; break;
default: default:
...@@ -180,7 +175,7 @@ static int __init sun5i_setup_clocksource(struct device_node *node, ...@@ -180,7 +175,7 @@ static int __init sun5i_setup_clocksource(struct device_node *node,
struct sun5i_timer *cs, struct sun5i_timer *cs,
unsigned long rate) unsigned long rate)
{ {
void __iomem *base = cs->timer.base; void __iomem *base = cs->base;
int ret; int ret;
writel(~0, base + TIMER_INTVAL_LO_REG(1)); writel(~0, base + TIMER_INTVAL_LO_REG(1));
...@@ -206,7 +201,7 @@ static int __init sun5i_setup_clockevent(struct device_node *node, ...@@ -206,7 +201,7 @@ static int __init sun5i_setup_clockevent(struct device_node *node,
struct sun5i_timer *ce, struct sun5i_timer *ce,
unsigned long rate, int irq) unsigned long rate, int irq)
{ {
void __iomem *base = ce->timer.base; void __iomem *base = ce->base;
int ret; int ret;
u32 val; u32 val;
...@@ -282,13 +277,13 @@ static int __init sun5i_timer_init(struct device_node *node) ...@@ -282,13 +277,13 @@ static int __init sun5i_timer_init(struct device_node *node)
goto err_disable_clk; goto err_disable_clk;
} }
st->timer.base = timer_base; st->base = timer_base;
st->timer.ticks_per_jiffy = DIV_ROUND_UP(rate, HZ); st->ticks_per_jiffy = DIV_ROUND_UP(rate, HZ);
st->timer.clk = clk; st->clk = clk;
st->timer.clk_rate_cb.notifier_call = sun5i_rate_cb; st->clk_rate_cb.notifier_call = sun5i_rate_cb;
st->timer.clk_rate_cb.next = NULL; st->clk_rate_cb.next = NULL;
ret = clk_notifier_register(clk, &st->timer.clk_rate_cb); ret = clk_notifier_register(clk, &st->clk_rate_cb);
if (ret) { if (ret) {
pr_err("Unable to register clock notifier.\n"); pr_err("Unable to register clock notifier.\n");
goto err_disable_clk; goto err_disable_clk;
...@@ -305,7 +300,7 @@ static int __init sun5i_timer_init(struct device_node *node) ...@@ -305,7 +300,7 @@ static int __init sun5i_timer_init(struct device_node *node)
return sun5i_setup_clockevent(node, st, rate, irq); return sun5i_setup_clockevent(node, st, rate, irq);
err_remove_notifier: err_remove_notifier:
clk_notifier_unregister(clk, &st->timer.clk_rate_cb); clk_notifier_unregister(clk, &st->clk_rate_cb);
err_disable_clk: err_disable_clk:
clk_disable_unprepare(clk); clk_disable_unprepare(clk);
err_free: err_free:
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment