aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/clocksource
diff options
context:
space:
mode:
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2014-03-04 08:17:26 -0500
committerLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>2014-04-16 06:03:29 -0400
commitd2b93177065fd8e1e18f4f42880326e0881ff457 (patch)
treee854d4f160f262dfd12b8f343381e2622f5d5103 /drivers/clocksource
parentda90a1c67751a412499a9f5698c3bf0bf80f65a6 (diff)
clocksource: sh_mtu2: Add index to struct sh_mtu2_channel
Use the index as the timer start/stop bit and when printing messages to identify the channel. Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com> Tested-by: Wolfram Sang <wsa@sang-engineering.com>
Diffstat (limited to 'drivers/clocksource')
-rw-r--r--drivers/clocksource/sh_mtu2.c22
1 files changed, 13 insertions, 9 deletions
diff --git a/drivers/clocksource/sh_mtu2.c b/drivers/clocksource/sh_mtu2.c
index 97714ce5e851..61827c66f7d3 100644
--- a/drivers/clocksource/sh_mtu2.c
+++ b/drivers/clocksource/sh_mtu2.c
@@ -38,6 +38,7 @@ struct sh_mtu2_device;
38 38
39struct sh_mtu2_channel { 39struct sh_mtu2_channel {
40 struct sh_mtu2_device *mtu; 40 struct sh_mtu2_device *mtu;
41 unsigned int index;
41 42
42 void __iomem *base; 43 void __iomem *base;
43 int irq; 44 int irq;
@@ -110,7 +111,6 @@ static inline void sh_mtu2_write(struct sh_mtu2_channel *ch, int reg_nr,
110 111
111static void sh_mtu2_start_stop_ch(struct sh_mtu2_channel *ch, int start) 112static void sh_mtu2_start_stop_ch(struct sh_mtu2_channel *ch, int start)
112{ 113{
113 struct sh_timer_config *cfg = ch->mtu->pdev->dev.platform_data;
114 unsigned long flags, value; 114 unsigned long flags, value;
115 115
116 /* start stop register shared by multiple timer channels */ 116 /* start stop register shared by multiple timer channels */
@@ -118,9 +118,9 @@ static void sh_mtu2_start_stop_ch(struct sh_mtu2_channel *ch, int start)
118 value = sh_mtu2_read(ch, TSTR); 118 value = sh_mtu2_read(ch, TSTR);
119 119
120 if (start) 120 if (start)
121 value |= 1 << cfg->timer_bit; 121 value |= 1 << ch->index;
122 else 122 else
123 value &= ~(1 << cfg->timer_bit); 123 value &= ~(1 << ch->index);
124 124
125 sh_mtu2_write(ch, TSTR, value); 125 sh_mtu2_write(ch, TSTR, value);
126 raw_spin_unlock_irqrestore(&sh_mtu2_lock, flags); 126 raw_spin_unlock_irqrestore(&sh_mtu2_lock, flags);
@@ -138,7 +138,8 @@ static int sh_mtu2_enable(struct sh_mtu2_channel *ch)
138 /* enable clock */ 138 /* enable clock */
139 ret = clk_enable(ch->mtu->clk); 139 ret = clk_enable(ch->mtu->clk);
140 if (ret) { 140 if (ret) {
141 dev_err(&ch->mtu->pdev->dev, "cannot enable clock\n"); 141 dev_err(&ch->mtu->pdev->dev, "ch%u: cannot enable clock\n",
142 ch->index);
142 return ret; 143 return ret;
143 } 144 }
144 145
@@ -211,7 +212,7 @@ static void sh_mtu2_clock_event_mode(enum clock_event_mode mode,
211 switch (mode) { 212 switch (mode) {
212 case CLOCK_EVT_MODE_PERIODIC: 213 case CLOCK_EVT_MODE_PERIODIC:
213 dev_info(&ch->mtu->pdev->dev, 214 dev_info(&ch->mtu->pdev->dev,
214 "used for periodic clock events\n"); 215 "ch%u: used for periodic clock events\n", ch->index);
215 sh_mtu2_enable(ch); 216 sh_mtu2_enable(ch);
216 break; 217 break;
217 case CLOCK_EVT_MODE_UNUSED: 218 case CLOCK_EVT_MODE_UNUSED:
@@ -250,15 +251,16 @@ static void sh_mtu2_register_clockevent(struct sh_mtu2_channel *ch,
250 ced->suspend = sh_mtu2_clock_event_suspend; 251 ced->suspend = sh_mtu2_clock_event_suspend;
251 ced->resume = sh_mtu2_clock_event_resume; 252 ced->resume = sh_mtu2_clock_event_resume;
252 253
253 dev_info(&ch->mtu->pdev->dev, "used for clock events\n"); 254 dev_info(&ch->mtu->pdev->dev, "ch%u: used for clock events\n",
255 ch->index);
254 clockevents_register_device(ced); 256 clockevents_register_device(ced);
255 257
256 ret = request_irq(ch->irq, sh_mtu2_interrupt, 258 ret = request_irq(ch->irq, sh_mtu2_interrupt,
257 IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING, 259 IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
258 dev_name(&ch->mtu->pdev->dev), ch); 260 dev_name(&ch->mtu->pdev->dev), ch);
259 if (ret) { 261 if (ret) {
260 dev_err(&ch->mtu->pdev->dev, "failed to request irq %d\n", 262 dev_err(&ch->mtu->pdev->dev, "ch%u: failed to request irq %d\n",
261 ch->irq); 263 ch->index, ch->irq);
262 return; 264 return;
263 } 265 }
264} 266}
@@ -279,10 +281,12 @@ static int sh_mtu2_setup_channel(struct sh_mtu2_channel *ch,
279 281
280 memset(ch, 0, sizeof(*ch)); 282 memset(ch, 0, sizeof(*ch));
281 ch->mtu = mtu; 283 ch->mtu = mtu;
284 ch->index = cfg->timer_bit;
282 285
283 ch->irq = platform_get_irq(mtu->pdev, 0); 286 ch->irq = platform_get_irq(mtu->pdev, 0);
284 if (ch->irq < 0) { 287 if (ch->irq < 0) {
285 dev_err(&mtu->pdev->dev, "failed to get irq\n"); 288 dev_err(&mtu->pdev->dev, "ch%u: failed to get irq\n",
289 ch->index);
286 return ch->irq; 290 return ch->irq;
287 } 291 }
288 292