[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CANqRtoS24CUp3cpoWykJ5Ty5XT3Yn+LNvGL_kF5NdEPAQL0f4A@mail.gmail.com>
Date: Fri, 25 May 2012 12:39:06 +0900
From: Magnus Damm <magnus.damm@...il.com>
To: Thomas Gleixner <tglx@...utronix.de>
Cc: linux-kernel@...r.kernel.org, arnd@...db.de, horms@...ge.net.au,
linux-sh@...r.kernel.org, johnstul@...ibm.com, rjw@...k.pl,
lethal@...ux-sh.org, gregkh@...uxfoundation.org, olof@...om.net
Subject: Re: [PATCH 02/03] clocksource: em_sti: Emma Mobile STI driver V2
Hi Thomas,
On Fri, May 25, 2012 at 8:42 AM, Thomas Gleixner <tglx@...utronix.de> wrote:
> On Wed, 9 May 2012, Magnus Damm wrote:
>> +static irqreturn_t em_sti_interrupt(int irq, void *dev_id)
>> +{
>> + struct em_sti_priv *p = dev_id;
>> +
>> + /* Always regprogram timer compare A */
>> + if (p->ced.mode == CLOCK_EVT_MODE_PERIODIC)
>> + em_sti_update(p);
>
> Why do you want to do that? The core code already handles timers which
> only support oneshot mode.
Oh, I wasn't aware that oneshot only is a valid combination. Thanks
for pointing that out, the code will surely become cleaner!
>> + spin_lock_irqsave(&p->lock, flags);
>
> Please make that a raw_spinlock.
Ok!
>> +static void em_sti_clock_event_mode(enum clock_event_mode mode,
>> + struct clock_event_device *ced)
>> +{
>> + struct em_sti_priv *p = ced_to_em_sti(ced);
>> +
>> + /* deal with old setting first */
>> + switch (ced->mode) {
>> + case CLOCK_EVT_MODE_PERIODIC:
>> + case CLOCK_EVT_MODE_ONESHOT:
>> + em_sti_stop(p, USER_CLOCKEVENT);
>> + break;
>> + default:
>> + break;
>> + }
>> +
>> + switch (mode) {
>> + case CLOCK_EVT_MODE_PERIODIC:
>> + dev_info(&p->pdev->dev, "used for periodic clock events\n");
>> + em_sti_start(p, USER_CLOCKEVENT);
>> + clockevents_config(&p->ced, p->rate);
>> + p->delta = (p->rate + HZ/2) / HZ;
>> + p->next = em_sti_count(p);
>> + em_sti_update(p);
>> + break;
>
> All that code in this case can go away.
Right!
>> +static void em_sti_register_clockevent(struct em_sti_priv *p)
>> +{
>> + struct clock_event_device *ced = &p->ced;
>> +
>> + memset(ced, 0, sizeof(*ced));
>> + ced->name = dev_name(&p->pdev->dev);
>> + ced->features = CLOCK_EVT_FEAT_PERIODIC;
>> + ced->features |= CLOCK_EVT_FEAT_ONESHOT;
>
> If you make that:
>
> ced->features = CLOCK_EVT_FEAT_ONESHOT;
Gotcha!
Thanks,
/ magnus
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists