SUPERH platform development
 help / color / mirror / Atom feed
* [PATCH v2 21/40] clocksource: sh_cmt: Request IRQ for clock event device only
@ 2014-02-28 15:57 Laurent Pinchart
  2014-03-01 17:46 ` Geert Uytterhoeven
  2014-03-02 20:35 ` Laurent Pinchart
  0 siblings, 2 replies; 3+ messages in thread
From: Laurent Pinchart @ 2014-02-28 15:57 UTC (permalink / raw)
  To: linux-sh

Clock sources don't need an IRQ, request the IRQ only for channels used
as clock event devices.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
---
 drivers/clocksource/sh_cmt.c | 37 ++++++++++++++++---------------------
 1 file changed, 16 insertions(+), 21 deletions(-)

diff --git a/drivers/clocksource/sh_cmt.c b/drivers/clocksource/sh_cmt.c
index 9f215e7..d1b1948 100644
--- a/drivers/clocksource/sh_cmt.c
+++ b/drivers/clocksource/sh_cmt.c
@@ -789,6 +789,8 @@ static void sh_cmt_register_clockevent(struct sh_cmt_channel *ch,
 				       const char *name)
 {
 	struct clock_event_device *ced = &ch->ced;
+	int irq;
+	int ret;
 
 	ced->name = name;
 	ced->features = CLOCK_EVT_FEAT_PERIODIC;
@@ -803,6 +805,20 @@ static void sh_cmt_register_clockevent(struct sh_cmt_channel *ch,
 	dev_info(&ch->cmt->pdev->dev, "ch%u: used for clock events\n",
 		 ch->index);
 	clockevents_register_device(ced);
+
+	irq = platform_get_irq(ch->cmt->pdev, ch->cmt->legacy ? 0 : ch->index);
+	if (irq < 0) {
+		dev_err(&ch->cmt->pdev->dev, "ch%u: failed to get irq\n",
+			ch->index);
+		return;
+	}
+
+	ret = request_irq(irq, sh_cmt_interrupt,
+			  IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
+			  dev_name(&ch->cmt->pdev->dev), ch);
+	if (ret)
+		dev_err(&ch->cmt->pdev->dev, "ch%u: failed to request irq %d\n",
+			ch->index, irq);
 }
 
 static int sh_cmt_register(struct sh_cmt_channel *ch, const char *name,
@@ -825,7 +841,6 @@ static int sh_cmt_setup_channel(struct sh_cmt_channel *ch, unsigned int index,
 				unsigned int hwidx, bool clockevent,
 				bool clocksource, struct sh_cmt_device *cmt)
 {
-	int irq;
 	int ret;
 
 	/* Skip unused channels. */
@@ -869,17 +884,6 @@ static int sh_cmt_setup_channel(struct sh_cmt_channel *ch, unsigned int index,
 		}
 	}
 
-	if (cmt->legacy)
-		irq = platform_get_irq(cmt->pdev, 0);
-	else
-		irq = platform_get_irq(cmt->pdev, ch->index);
-
-	if (irq < 0) {
-		dev_err(&cmt->pdev->dev, "ch%u: failed to get irq\n",
-			ch->index);
-		return irq;
-	}
-
 	if (cmt->info->width = (sizeof(ch->max_match_value) * 8))
 		ch->max_match_value = ~0;
 	else
@@ -904,15 +908,6 @@ static int sh_cmt_setup_channel(struct sh_cmt_channel *ch, unsigned int index,
 	}
 	ch->cs_enabled = false;
 
-	ret = request_irq(irq, sh_cmt_interrupt,
-			  IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
-			  dev_name(&cmt->pdev->dev), ch);
-	if (ret) {
-		dev_err(&cmt->pdev->dev, "ch%u: failed to request irq %d\n",
-			ch->index, irq);
-		return ret;
-	}
-
 	return 0;
 }
 
-- 
1.8.3.2


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: [PATCH v2 21/40] clocksource: sh_cmt: Request IRQ for clock event device only
  2014-02-28 15:57 [PATCH v2 21/40] clocksource: sh_cmt: Request IRQ for clock event device only Laurent Pinchart
@ 2014-03-01 17:46 ` Geert Uytterhoeven
  2014-03-02 20:35 ` Laurent Pinchart
  1 sibling, 0 replies; 3+ messages in thread
From: Geert Uytterhoeven @ 2014-03-01 17:46 UTC (permalink / raw)
  To: linux-sh

On Fri, Feb 28, 2014 at 4:57 PM, Laurent Pinchart
<laurent.pinchart+renesas@ideasonboard.com> wrote:
> --- a/drivers/clocksource/sh_cmt.c
> +++ b/drivers/clocksource/sh_cmt.c
> @@ -789,6 +789,8 @@ static void sh_cmt_register_clockevent(struct sh_cmt_channel *ch,
>                                        const char *name)
>  {
>         struct clock_event_device *ced = &ch->ced;
> +       int irq;
> +       int ret;
>
>         ced->name = name;
>         ced->features = CLOCK_EVT_FEAT_PERIODIC;
> @@ -803,6 +805,20 @@ static void sh_cmt_register_clockevent(struct sh_cmt_channel *ch,
>         dev_info(&ch->cmt->pdev->dev, "ch%u: used for clock events\n",
>                  ch->index);
>         clockevents_register_device(ced);
> +
> +       irq = platform_get_irq(ch->cmt->pdev, ch->cmt->legacy ? 0 : ch->index);
> +       if (irq < 0) {
> +               dev_err(&ch->cmt->pdev->dev, "ch%u: failed to get irq\n",
> +                       ch->index);
> +               return;

So the failure is no longer passed upstream, as sh_cmt_register_clockevent()
returns void. Can you please change it to return the error code?

Interestingly, its caller (sh_cmt_register()) does return an error code,
but currently this is hardcoded to zero.
And the caller of sh_cmt_register() already checks for an error code.

> +       }
> +
> +       ret = request_irq(irq, sh_cmt_interrupt,
> +                         IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
> +                         dev_name(&ch->cmt->pdev->dev), ch);
> +       if (ret)
> +               dev_err(&ch->cmt->pdev->dev, "ch%u: failed to request irq %d\n",
> +                       ch->index, irq);
>  }

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH v2 21/40] clocksource: sh_cmt: Request IRQ for clock event device only
  2014-02-28 15:57 [PATCH v2 21/40] clocksource: sh_cmt: Request IRQ for clock event device only Laurent Pinchart
  2014-03-01 17:46 ` Geert Uytterhoeven
@ 2014-03-02 20:35 ` Laurent Pinchart
  1 sibling, 0 replies; 3+ messages in thread
From: Laurent Pinchart @ 2014-03-02 20:35 UTC (permalink / raw)
  To: linux-sh

Hi Geert,

On Saturday 01 March 2014 18:46:46 Geert Uytterhoeven wrote:
> On Fri, Feb 28, 2014 at 4:57 PM, Laurent Pinchart wrote:
> > --- a/drivers/clocksource/sh_cmt.c
> > +++ b/drivers/clocksource/sh_cmt.c
> > @@ -789,6 +789,8 @@ static void sh_cmt_register_clockevent(struct
> > sh_cmt_channel *ch,> 
> >                                        const char *name)
> >  {
> >         struct clock_event_device *ced = &ch->ced;
> > +       int irq;
> > +       int ret;
> > 
> >         ced->name = name;
> >         ced->features = CLOCK_EVT_FEAT_PERIODIC;
> > @@ -803,6 +805,20 @@ static void sh_cmt_register_clockevent(struct
> > sh_cmt_channel *ch,> 
> >         dev_info(&ch->cmt->pdev->dev, "ch%u: used for clock events\n",
> >                  ch->index);
> >         
> >         clockevents_register_device(ced);
> > +
> > +       irq = platform_get_irq(ch->cmt->pdev, ch->cmt->legacy ? 0 :
> > ch->index);
> > +       if (irq < 0) {
> > +               dev_err(&ch->cmt->pdev->dev, "ch%u: failed to get irq\n",
> > +                       ch->index);
> > +               return;
> 
> So the failure is no longer passed upstream, as sh_cmt_register_clockevent()
> returns void. Can you please change it to return the error code?

Sure, I'll fix that for v3.

> Interestingly, its caller (sh_cmt_register()) does return an error code,
> but currently this is hardcoded to zero.
> And the caller of sh_cmt_register() already checks for an error code.
> 
> > +       }
> > +
> > +       ret = request_irq(irq, sh_cmt_interrupt,
> > +                         IRQF_TIMER | IRQF_IRQPOLL | IRQF_NOBALANCING,
> > +                         dev_name(&ch->cmt->pdev->dev), ch);
> > +       if (ret)
> > +               dev_err(&ch->cmt->pdev->dev, "ch%u: failed to request irq
> > %d\n", +                       ch->index, irq);
> > 
> >  }

-- 
Regards,

Laurent Pinchart


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2014-03-02 20:35 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-02-28 15:57 [PATCH v2 21/40] clocksource: sh_cmt: Request IRQ for clock event device only Laurent Pinchart
2014-03-01 17:46 ` Geert Uytterhoeven
2014-03-02 20:35 ` Laurent Pinchart

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox