From: dwalker@codeaurora.org (Daniel Walker)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 1/2] msm: Install the Google-Android gpio driver.
Date: Wed, 01 Sep 2010 14:13:26 -0700 [thread overview]
Message-ID: <1283375606.21049.20.camel@c-dwalke-linux.qualcomm.com> (raw)
In-Reply-To: <0D753D10438DA54287A00B027084269764447830F3@AUSP01VMBX24.collaborationhost.net>
On Wed, 2010-09-01 at 13:59 -0500, H Hartley Sweeten wrote:
> On Monday, August 30, 2010 5:18 PM, Gregory Bean wrote:
> > Subject: [PATCH 1/2] msm: Install the Google-Android gpio driver.
> >
> > From: Arve Hj?nnev?g <arve@android.com>
> >
> > As part of the ongoing effort to converge on a common code base,
> > adopt the Google-Android msmgpio driver, as it has a stronger pedigree
> > than the previous submission from codeaurora.
> >
> > Cc: Arve Hj?nnev?g <arve@android.com>
> > Signed-off-by: Gregory Bean <gbean@codeaurora.org>
>
> Hello Greg,
>
> A couple comments on this.
>
> > +struct msm_gpio_chip msm_gpio_chips[] = {
> > + {
> > + .regs = {
> > + .out = GPIO_OUT_0,
> > + .in = GPIO_IN_0,
> > + .int_status = GPIO_INT_STATUS_0,
> > + .int_clear = GPIO_INT_CLEAR_0,
> > + .int_en = GPIO_INT_EN_0,
> > + .int_edge = GPIO_INT_EDGE_0,
> > + .int_pos = GPIO_INT_POS_0,
> > + .oe = GPIO_OE_0,
> > + },
> > + .chip = {
> > + .base = 0,
> > + .ngpio = 16,
> > + .get = msm_gpio_get,
> > + .set = msm_gpio_set,
> > + .direction_input = msm_gpio_direction_input,
> > + .direction_output = msm_gpio_direction_output,
> > + .to_irq = msm_gpio_to_irq,
> > + }
> > + },
>
> This is a bit ugly... A 204 line struct definition is a bit hard to follow,
> especially the way it's broken up with all the #if defined stuff.
>
> Each gpio "bank" is code duplication other than the .base and .ngpio. The
> whole thing can be reduced using a helper macro. Something like this:
>
> #define MSM_GPIO_BANK(bank, base_gpio, num_gpio) \
> { \
> .regs = { \
> .out = GPIO_OUT_##bank, \
> .in = GPIO_IN_##bank, \
> .int_status = GPIO_INT_STATUS_##bank, \
> .int_clear = GPIO_INT_CLEAR_##bank, \
> .int_en = GPIO_INT_EN_##bank, \
> .int_edge = GPIO_INT_EDGE_##bank, \
> .int_pos = GPIO_INT_POS_##bank, \
> .oe = GPIO_OE_##bank, \
> }, \
> .chip = { \
> .direction_input = msm_gpio_direction_input, \
> .direction_output = msm_gpio_direction_output, \
> .get = msm_gpio_get, \
> .set = msm_gpio_set, \
> .to_irq = msm_gpio_to_irq, \
> .base = base_gpio, \
> .ngpio = num_gpio, \
> }, \
> }
>
> Then the struct definition can be reduced to this:
>
> struct msm_gpio_chip msm_gpio_chips[] = {
> #if defined(CONFIG_ARCH_MSM7X30)
> MSM_GPIO_BANK(0, 0, 16), /* gpio 0-15 */
> MSM_GPIO_BANK(1, 16, 28), /* gpio 16-43 */
> MSM_GPIO_BANK(2, 44, 24), /* gpio 44-67 */
> MSM_GPIO_BANK(3, 68, 27), /* gpio 68-94 */
> MSM_GPIO_BANK(4, 95, 12), /* gpio 95-106 */
> MSM_GPIO_BANK(5, 107, 27), /* gpio 107-133 */
> MSM_GPIO_BANK(6, 134, 17), /* gpio 134-150 */
> MSM_GPIO_BANK(7, 151, 31), /* gpio 151-181 */
> #elif defined(CONFIG_ARCH_QSD8X50)
> MSM_GPIO_BANK(0, 0, 16), /* gpio 0-15 */
> MSM_GPIO_BANK(1, 16, 27), /* gpio 16-42 */
> MSM_GPIO_BANK(2, 43, 25), /* gpio 43-67 */
> MSM_GPIO_BANK(3, 68, 27), /* gpio 68-94 */
> MSM_GPIO_BANK(4, 95, 9), /* gpio 95-103 */
> MSM_GPIO_BANK(5, 104, 18), /* gpio 104-121 */
> MSM_GPIO_BANK(6, 122, 31), /* gpio 122-152 */
> MSM_GPIO_BANK(7, 153, 12), /* gpio 153-164 */
> #else
> MSM_GPIO_BANK(0, 0, 16), /* gpio 0-15 */
> MSM_GPIO_BANK(1, 16, 27), /* gpio 16-42 */
> MSM_GPIO_BANK(2, 43, 25), /* gpio 43-67 */
> MSM_GPIO_BANK(3, 68, 27), /* gpio 68-94 */
> MSM_GPIO_BANK(4, 95, 12), /* gpio 95-106 */
> MSM_GPIO_BANK(5, 107, 15), /* gpio 107-121 */
> #endif
> };
>
Yeah, this macro method is much nicer. It drops 204 lines down to less
than half that.. Less duplication and less lines to maintain.
Thanks for the review Hartley.
Daniel
--
Sent by a consultant of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
next prev parent reply other threads:[~2010-09-01 21:13 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-08-31 0:18 [PATCH 1/2] msm: Install the Google-Android gpio driver Gregory Bean
2010-08-31 0:18 ` [PATCH 2/2] msm: gpio: Add gpiomux calls to request and free Gregory Bean
2010-08-31 16:46 ` [PATCH 1/2] msm: Install the Google-Android gpio driver Daniel Walker
2010-08-31 16:50 ` Daniel Walker
2010-08-31 21:50 ` Daniel Walker
2010-09-01 18:59 ` H Hartley Sweeten
2010-09-01 21:13 ` Daniel Walker [this message]
2010-09-01 21:30 ` Ryan Mallon
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=1283375606.21049.20.camel@c-dwalke-linux.qualcomm.com \
--to=dwalker@codeaurora.org \
--cc=linux-arm-kernel@lists.infradead.org \
/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;
as well as URLs for NNTP newsgroup(s).