LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Trent Piepho <tpiepho@freescale.com>
To: Anton Vorontsov <avorontsov@ru.mvista.com>
Cc: Stephen Rothwell <sfr@canb.auug.org.au>,
	linux-kernel@vger.kernel.org, linuxppc-dev@ozlabs.org,
	Richard Purdie <rpurdie@rpsys.net>
Subject: Re: [PATCH v3] leds: implement OpenFirmare GPIO LED driver
Date: Thu, 17 Jul 2008 13:01:21 -0700 (PDT)	[thread overview]
Message-ID: <Pine.LNX.4.64.0807171216420.27902@t2.domain.actdsltmp> (raw)
In-Reply-To: <20080717135542.GA15503@polina.dev.rtsoft.ru>

On Thu, 17 Jul 2008, Anton Vorontsov wrote:
> On Wed, Jul 16, 2008 at 10:13:06PM -0700, Trent Piepho wrote:
>> Ok, how about adding code the existing leds-gpio driver so that it can creates
>> LEDs from of_platform devices too?
>
> Few comments below.
>
>> I've made a patch to do this and it works ok.  The code added to leds-gpio is
>> about half what was involved in Anton's new driver.
>
> This isn't true.

Your new driver was 194 lines, not counting docs or Kconfig.  My patch
added about 104 lines to the existing leds-gpio driver.  So yes, about half
the code.

>> There is still one of_platform device per led because of how the bindings work
>> (but that could be changed with new bindings), but there are zero extra
>> platform devices created.
>
> You didn't count extra platform driver. You can't #ifdef it. The only way
> you can avoid this is creating leds-gpio-base.c or something, and place the
> helper functions there.

I guess, in terms of compiled size, the combined platform + of_platform
driver is bigger than the of_platform only driver.  Though it's much
smaller than having both the platform only and of_platform only drivers. 
In terms of source code, there's less with the combined driver.

I don't see why the combined leds-gpio driver can't have an ifdef for the
platform part.  All the platform driver specific code is already in one
contiguous block.  In fact, I just did it and it works fine.  My LEDs from
the dts were created and the LED I have as a platform device wasn't, as
expected.  Here's the patch, pretty simple:

diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
--- a/drivers/leds/leds-gpio.c
+++ b/drivers/leds/leds-gpio.c
@@ -108,2 +108,3 @@ static int create_gpio_led(struct gpio_led *cur_led,

+#ifdef CONFIG_LEDS_GPIO_PLATFORM
  static int gpio_led_probe(struct platform_device *pdev)
@@ -222,2 +223,3 @@ module_init(gpio_led_init);
  module_exit(gpio_led_exit);
+#endif /* CONFIG_LEDS_GPIO_PLATFORM */


>> +static int create_gpio_led(struct gpio_led *cur_led,
>
> The create_gpio_led() interface is also quite weird, since it implies that
> we have to pass two GPIO LED "handles": struct gpio_led_data (that we
> allocated) and temporary struct gpio_led. And this helper function will
> just assign things from one struct to another, and then will register the
> led.

It creates a "thing" from a template passed a pointer to a struct.  This is
very common, there must be hundreds of functions in the kernel that work
this way.  The difference is instead of allocating and returning the
created thing, you pass it a blank pre-allocated thing to fill in and
register.  I know there is other code that works this way too.  It's
usually used, like it is here, so you can allocate a bunch of things at
once and then register them one at a time.

> With OF driver I don't need "struct gpio_led". Only the platform driver
> need this so platforms could pass gpio led info through it, while with OF
> we're getting all information from the device tree.

The struct gpio_led is just used to pass the stats to the led creation
function.  It doesn't stick around.  You could use local variables for the
gpio and name and pass them to the create led function.  Bundling them into
a struct is an tiny change that lets more code be shared.

>> +/* #ifdef CONFIG_LEDS_GPIO_OF */
>
> Heh.

Obviously the OF binding code should be conditional, selectable from
kconfig if the platform has OF support.  It's all in one contiguous block
and that shows where the ifdef would go.  I didn't think it was necessary
to include the obvious kconfig patch.

  reply	other threads:[~2008-07-17 20:02 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-07-14 16:41 [PATCH] leds: implement OpenFirmare GPIO LED driver Anton Vorontsov
2008-07-15  3:10 ` Stephen Rothwell
2008-07-15 12:38   ` Anton Vorontsov
2008-07-15 12:40     ` [PATCH v2] " Anton Vorontsov
2008-07-15 12:54       ` Richard Purdie
2008-07-15 13:24         ` Anton Vorontsov
2008-07-15 13:31           ` Richard Purdie
2008-07-15 14:23             ` Anton Vorontsov
2008-07-15 14:43               ` Richard Purdie
2008-07-15 15:19                 ` [PATCH v3] " Anton Vorontsov
2008-07-16 23:18                   ` Trent Piepho
2008-07-17  4:15                     ` Grant Likely
2008-07-17  5:13                       ` Trent Piepho
2008-07-17 13:55                         ` Anton Vorontsov
2008-07-17 20:01                           ` Trent Piepho [this message]
2008-07-17 14:05                       ` Anton Vorontsov
2008-07-17 14:13                         ` Anton Vorontsov
2008-07-17 15:04                           ` Grant Likely
2008-07-17 15:20                             ` Anton Vorontsov
2008-07-17 18:05                               ` Grant Likely
2008-07-17 20:18                                 ` Trent Piepho
2008-07-17 20:49                                   ` Grant Likely
2008-07-17 23:42                                   ` Anton Vorontsov
2008-07-18  5:09                                     ` Grant Likely
2008-07-18  9:20                                     ` Trent Piepho
2008-07-18 10:05                                       ` Anton Vorontsov
2008-07-19 21:08                                         ` PIXIS gpio controller and gpio flags Trent Piepho
2008-07-21 17:53                                           ` Anton Vorontsov
2008-07-21 21:12                                             ` Trent Piepho
2008-07-23 14:56                                               ` Anton Vorontsov
2008-07-23 23:42                                                 ` Trent Piepho
2008-07-25 16:48                                                   ` [RFC PATCH] of_gpio: implement of_get_gpio_flags() Anton Vorontsov
2008-07-26  8:26                                                     ` Trent Piepho
2008-07-25 20:38                                         ` [PATCH v3] leds: implement OpenFirmare GPIO LED driver Trent Piepho
2008-07-25 21:01                                           ` [PATCH 1/2] leds: make the default trigger name const Trent Piepho
2008-07-27  2:08                                             ` Grant Likely
2008-07-27 13:11                                               ` Stephen Rothwell
2008-07-28  1:56                                                 ` Trent Piepho
2008-07-28  2:02                                                   ` [PATCH v2] " Trent Piepho
2008-07-28  9:53                                                   ` [PATCH 1/2] " Anton Vorontsov
2008-08-29  1:22                                                     ` Trent Piepho
2008-07-25 21:01                                           ` [PATCH 2/2] leds: Support OpenFirmware led bindings Trent Piepho
2008-07-27  2:21                                             ` Grant Likely
2008-07-28  8:31                                               ` Trent Piepho
2008-07-28 17:09                                                 ` Grant Likely
2008-07-28 18:02                                                   ` Anton Vorontsov
2008-07-28 18:06                                                     ` Grant Likely
2008-07-28 18:26                                                     ` Trent Piepho
2008-07-28 18:49                                                       ` Grant Likely
2008-07-28 18:51                                                       ` Anton Vorontsov
2008-07-28 19:11                                                         ` Trent Piepho
2008-07-17 21:29                   ` [PATCH v3] leds: implement OpenFirmare GPIO LED driver Nate Case
2008-07-16 23:22                 ` [PATCH v2] " Trent Piepho
2008-07-17  5:59 ` [PATCH] " Segher Boessenkool
2008-07-17 11:07   ` Anton Vorontsov
2008-07-17 14:58     ` Sean MacLennan
2008-07-17 15:07     ` Grant Likely
2008-07-18  3:35       ` David Gibson
2008-07-18  4:44         ` Grant Likely

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=Pine.LNX.4.64.0807171216420.27902@t2.domain.actdsltmp \
    --to=tpiepho@freescale.com \
    --cc=avorontsov@ru.mvista.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linuxppc-dev@ozlabs.org \
    --cc=rpurdie@rpsys.net \
    --cc=sfr@canb.auug.org.au \
    /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