From: Marc St-Jean <Marc_St-Jean@pmc-sierra.com>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Marc St-Jean <stjeanma@pmc-sierra.com>,
linux-kernel@vger.kernel.org, linux-mips@linux-mips.org
Subject: Re: [PATCH] drivers: PMC MSP71xx LED driver
Date: Fri, 9 Mar 2007 14:20:56 -0800 [thread overview]
Message-ID: <45F1DDC8.1010503@pmc-sierra.com> (raw)
Andrew Morton wrote:
> > On Mon, 26 Feb 2007 17:48:55 -0600 Marc St-Jean
> <stjeanma@pmc-sierra.com> wrote:
> > [PATCH] drivers: PMC MSP71xx LED driver
> >
> > Patch to add LED driver for the PMC-Sierra MSP71xx devices.
> >
> > This patch references some platform support files previously
> > submitted to the linux-mips@linux-mips.org list.
Thanks for the feedback Andrew, I've implemented your recommendations.
A few comments/answers below.
[...]
> > + /* determine the progress into the current cycle, relative to
> the POLL_PERIOD */
> > + initialPeriod = (u8)(*ledRegPtr >> MSP_LED_INITIALPERIOD_SHIFT);
> > + finalPeriod = (u8)(*ledRegPtr >> MSP_LED_FINALPERIOD_SHIFT);
> > + ledTimeOut = (u8)(*ledRegPtr >> MSP_LED_WATCHDOG_SHIFT);
> > + timer = (u8)(private_msp_led_register[ledId] >>
> MSP_LED_WATCHDOG_SHIFT);
>
> I assume all these (u8) casts are unneeded.
>
> > + totalPeriod = (u16)initialPeriod + (u16)finalPeriod;
>
> And here.
I assume the author didn't expect the integer promotion to occur until
after the addition.
[...]
>
> > +{
> > + int pin;
> > + u8 currDirectionBits, currDataBits, prevDataBits,
> prevDirectionBits;
> > + currDirectionBits = currDataBits = prevDataBits =
> prevDirectionBits = 0;
>
> The unneeded initialisations here are just to suppress the incorrect gcc
> warning, yes?
No, initialization is needed as they are passed by reference to functions
setting/clearing bits.
> If so, that should at least be comented. And try to avoid declarations o
> this form as well as multiple assignments. So you want:
>
> u8 curr_direction_bits = 0; /* Suppress gcc warning */
> u8 curr_data_bits = 0; /* Suppress gcc warning */
> u8 prev_data_bits = 0; /* Suppress gcc warning */
> u8 prev_direction_bits = 0; /* Suppress gcc warning */
>
> the initialisation does cause extra ode to be generated and we usually just
> let te warning come out. I think later gcc's fixed it.
OK, I've split them on to separate line but without the comment.
[...]
>
> > +void __init pmctwiled_setup(void)
> > +{
> > + static int called;
> > + int dev;
> > +
> > + /* check if already initialized */
> > + if( called )
> > + return;
>
> This cannot happen (can it?)
Yes it can happen. Platform code can call pmctwiled_setup (that's why
the function was written) before the pmctwiled_init function runs.
This is so various sub-system init functions can ensure initialization
has occurred before setting start-up values.
If you have an idea on a better way to accomplish this I'm all ears.
> > + /* initialize LEDs to default state */
> > + for( dev = 0; dev < MSP_LED_NUM_DEVICES; dev++ ) {
> > + int pin;
> > + pmctwiled_device[dev] = NULL;
> > +
> > + for( pin = 0; pin < 8; pin++ ) {
> > + int led = MSP_LED_DEVPIN(dev,pin);
> > + if (mspLedInitialInputState[dev] & (1 << pin))
> {
> > + msp_led_disable(led);
> > + } else {
> > + msp_led_enable(led);
> > + if (mspLedInitialPinState[dev] & (1 <<
> pin))
>
> > + msp_led_turn_on(led);
>
> > + else
> > + msp_led_turn_off(led);
> > + }
> > +
> > + /* Initialize the private led register memory */
> > + private_msp_led_register[led] = 0;
> > + }
> > + }
> > +
> > + /* indicate initialised */
> > + called++;
> > +}
[...]
> > +typedef enum {
> > + MSP_LED_INPUT = 0,
> > + MSP_LED_OUTPUT,
> > +} msp_led_direction_t;
>
> No typedefs, please. Convert this to
>
> enum msp_led_direction {
> ...
> };
Alright I'll change it but it wasn't mentioned in the review of
the previous drivers and they've been resubmitted with some.
A quick search shows several drivers typedef'ing enums with and
without *_t suffixes.
Is there a new style rule or are only core kernel types allowed to
use _t?
> > +/* Output modes */
> > +typedef enum {
> > + MSP_LED_OFF = 0, /* Off steady */
> > + MSP_LED_ON, /* On steady */
> > + MSP_LED_BLINK, /* On for initialPeriod, off
> for finalPeriod */
> > + MSP_LED_BLINK_INVERT, /* Off for initialPeriod, on for
> finalPeriod */
> > +} msp_led_mode_t;
>
> Ditto.
>
> > +/* For non-LED pins, these macros set HI and LO accordingly */
> > +#define msp_led_pin_hi msp_led_turn_off
> > +#define msp_led_pin_lo msp_led_turn_on
>
> eww.
>
> static inline wrapper functions are preferred. Write code in C, not cpp
> where possible.
I agree the wrappers are cleaner but don't understand how this relates
to C++.
Marc
next reply other threads:[~2007-03-09 22:21 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-03-09 22:20 Marc St-Jean [this message]
2007-03-10 6:13 ` [PATCH] drivers: PMC MSP71xx LED driver Andrew Morton
-- strict thread matches above, loose matches on Subject: below --
2007-03-13 17:42 Marc St-Jean
2007-03-12 18:50 Marc St-Jean
2007-03-13 8:33 ` Florian Fainelli
2007-02-26 23:48 Marc St-Jean
2007-03-05 10:17 ` Andrew Morton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45F1DDC8.1010503@pmc-sierra.com \
--to=marc_st-jean@pmc-sierra.com \
--cc=akpm@linux-foundation.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@linux-mips.org \
--cc=stjeanma@pmc-sierra.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox