* Registering GPIO LEDs
@ 2013-08-07 22:51 Ian Pilcher
2013-08-09 2:08 ` Kim, Milo
0 siblings, 1 reply; 5+ messages in thread
From: Ian Pilcher @ 2013-08-07 22:51 UTC (permalink / raw)
To: linux-leds
I've discovered that it's quite simple to control the drive activity
LEDs on my Thecus N5550 with the standard gpio_ich module. AFAIK, this
means that I should be able to use them with the leds_gpio module. I
just need to register them.
I've found this page that gives an example:
http://fabiobaltieri.com/2011/09/21/linux-led-subsystem/
I'm confused, however, about the .gpio member of the struct gpio_led.
I'm guessing that it's the GPIO number, but (at least in the case of
gpio_ich) that number can vary depending on the base number for that
chip.
Am I missing something?
Thanks!
--
========================================================================
Ian Pilcher arequipeno@gmail.com
Sometimes there's nothing left to do but crash and burn...or die trying.
========================================================================
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: Registering GPIO LEDs
2013-08-07 22:51 Registering GPIO LEDs Ian Pilcher
@ 2013-08-09 2:08 ` Kim, Milo
2013-08-09 3:51 ` Ian Pilcher
0 siblings, 1 reply; 5+ messages in thread
From: Kim, Milo @ 2013-08-09 2:08 UTC (permalink / raw)
To: Ian Pilcher; +Cc: linux-leds@vger.kernel.org
Hi Ian,
> I've discovered that it's quite simple to control the drive activity
> LEDs on my Thecus N5550 with the standard gpio_ich module. AFAIK, this
> means that I should be able to use them with the leds_gpio module. I
> just need to register them.
>
> I've found this page that gives an example:
>
> http://fabiobaltieri.com/2011/09/21/linux-led-subsystem/
>
> I'm confused, however, about the .gpio member of the struct gpio_led.
> I'm guessing that it's the GPIO number, but (at least in the case of
> gpio_ich) that number can vary depending on the base number for that
> chip.
>From the viewpoint of a GPIO consumer, we don't care the base GPIO number.
That is required when a GPIO controller is added.
Just check '/sys/kernel/debug/gpio' and use available GPIOs for LEDs.
Regards,
Milo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Registering GPIO LEDs
2013-08-09 2:08 ` Kim, Milo
@ 2013-08-09 3:51 ` Ian Pilcher
2013-08-09 5:26 ` Kim, Milo
0 siblings, 1 reply; 5+ messages in thread
From: Ian Pilcher @ 2013-08-09 3:51 UTC (permalink / raw)
To: Kim, Milo; +Cc: linux-leds@vger.kernel.org
On 08/08/2013 09:08 PM, Kim, Milo wrote:
> From the viewpoint of a GPIO consumer, we don't care the base GPIO number.
> That is required when a GPIO controller is added.
> Just check '/sys/kernel/debug/gpio' and use available GPIOs for LEDs.
Hmm. I'm using leds-gpio, and it certainly does seem to care about GPIO
numbers. As a point of reference, here's what I'm doing to set up my
drive activity LEDs:
#define N5550_ICH_GPIO_BASE 195
#define N5550_DISK_ACT_0_GPIO (N5550_ICH_GPIO_BASE + 0)
#define N5550_DISK_ACT_1_GPIO (N5550_ICH_GPIO_BASE + 2)
#define N5550_DISK_ACT_2_GPIO (N5550_ICH_GPIO_BASE + 3)
#define N5550_DISK_ACT_3_GPIO (N5550_ICH_GPIO_BASE + 4)
#define N5550_DISK_ACT_4_GPIO (N5550_ICH_GPIO_BASE + 5)
static struct gpio_led n5550_disk_act_leds[5] = {
{
.name = "n5550:green:disk-act-0",
.default_trigger = "thecus-ahci-0",
.gpio = N5550_DISK_ACT_0_GPIO,
.active_low = 1,
.default_state = LEDS_GPIO_DEFSTATE_OFF,
},
{
.name = "n5550:green:disk-act-1",
.default_trigger = "thecus-ahci-1",
.gpio = N5550_DISK_ACT_1_GPIO,
.active_low = 1,
.default_state = LEDS_GPIO_DEFSTATE_OFF,
},
{
.name = "n5550:green:disk-act-2",
.default_trigger = "thecus-ahci-2",
.gpio = N5550_DISK_ACT_2_GPIO,
.active_low = 1,
.default_state = LEDS_GPIO_DEFSTATE_OFF,
},
{
.name = "n5550:green:disk-act-3",
.default_trigger = "thecus-ahci-3",
.gpio = N5550_DISK_ACT_3_GPIO,
.active_low = 1,
.default_state = LEDS_GPIO_DEFSTATE_OFF,
},
{
.name = "n5550:green:disk-act-4",
.default_trigger = "thecus-ahci-4",
.gpio = N5550_DISK_ACT_4_GPIO,
.active_low = 1,
.default_state = LEDS_GPIO_DEFSTATE_OFF,
},
};
As you can see, every LED has a GPIO number (.gpio), which comes from
the chip's GPIO base, and that number gets hardcoded into the setup
code. If the ich_gpio driver ever "dynamically" selects a base other
than 195, the LEDs won't work.
I just seems very fragile, and I can't help thinking that there must be
a better way. Maybe a module parameter ...
Thanks!
--
========================================================================
Ian Pilcher arequipeno@gmail.com
Sometimes there's nothing left to do but crash and burn...or die trying.
========================================================================
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: Registering GPIO LEDs
2013-08-09 3:51 ` Ian Pilcher
@ 2013-08-09 5:26 ` Kim, Milo
2013-08-13 23:35 ` Ian Pilcher
0 siblings, 1 reply; 5+ messages in thread
From: Kim, Milo @ 2013-08-09 5:26 UTC (permalink / raw)
To: Ian Pilcher; +Cc: linux-leds@vger.kernel.org
> > From the viewpoint of a GPIO consumer, we don't care the base GPIO number.
> > That is required when a GPIO controller is added.
> > Just check '/sys/kernel/debug/gpio' and use available GPIOs for LEDs.
>
> Hmm. I'm using leds-gpio, and it certainly does seem to care about GPIO
> numbers. As a point of reference, here's what I'm doing to set up my
> drive activity LEDs:
>
> #define N5550_ICH_GPIO_BASE 195
>
> #define N5550_DISK_ACT_0_GPIO (N5550_ICH_GPIO_BASE + 0)
> #define N5550_DISK_ACT_1_GPIO (N5550_ICH_GPIO_BASE + 2)
> #define N5550_DISK_ACT_2_GPIO (N5550_ICH_GPIO_BASE + 3)
> #define N5550_DISK_ACT_3_GPIO (N5550_ICH_GPIO_BASE + 4)
> #define N5550_DISK_ACT_4_GPIO (N5550_ICH_GPIO_BASE + 5)
>
> static struct gpio_led n5550_disk_act_leds[5] = {
> {
> .name = "n5550:green:disk-act-0",
> .default_trigger = "thecus-ahci-0",
> .gpio = N5550_DISK_ACT_0_GPIO,
> .active_low = 1,
> .default_state = LEDS_GPIO_DEFSTATE_OFF,
> },
> {
> .name = "n5550:green:disk-act-1",
> .default_trigger = "thecus-ahci-1",
> .gpio = N5550_DISK_ACT_1_GPIO,
> .active_low = 1,
> .default_state = LEDS_GPIO_DEFSTATE_OFF,
> },
> {
> .name = "n5550:green:disk-act-2",
> .default_trigger = "thecus-ahci-2",
> .gpio = N5550_DISK_ACT_2_GPIO,
> .active_low = 1,
> .default_state = LEDS_GPIO_DEFSTATE_OFF,
> },
> {
> .name = "n5550:green:disk-act-3",
> .default_trigger = "thecus-ahci-3",
> .gpio = N5550_DISK_ACT_3_GPIO,
> .active_low = 1,
> .default_state = LEDS_GPIO_DEFSTATE_OFF,
> },
> {
> .name = "n5550:green:disk-act-4",
> .default_trigger = "thecus-ahci-4",
> .gpio = N5550_DISK_ACT_4_GPIO,
> .active_low = 1,
> .default_state = LEDS_GPIO_DEFSTATE_OFF,
> },
> };
>
> As you can see, every LED has a GPIO number (.gpio), which comes from
> the chip's GPIO base, and that number gets hardcoded into the setup
> code. If the ich_gpio driver ever "dynamically" selects a base other
> than 195, the LEDs won't work.
It sounds you want to make the LED platform data flexible, right?
> I just seems very fragile, and I can't help thinking that there must be
> a better way. Maybe a module parameter ...
If you can use .dtb file in your system, it may be possible to use just offset
values with GPIO controller, ich_gpio. Then, no hardcoded GPIO is required.
For example, leds-gpio can be created with the DT below.
leds {
compatible = "gpio-leds";
hdd0 {
label = " n5550:green:disk-act-0";
gpios = <&ich_gpio 0 1>; /* offset 0, active low */
linux,default-trigger = " thecus-ahci-0";
default-state = "off";
};
.
.
.
hdd4 {
label = " n5550:green:disk-act-4";
gpios = <&ich_gpio 4 1>; /* offset 4, active low */
linux,default-trigger = " thecus-ahci-4";
default-state = "off";
};
};
Then, we don't care the base number of the ich_gpio controller.
However, ich_gpio driver should support the GPIO DT structure.
I've not checked it yet.
Best regards,
Milo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: Registering GPIO LEDs
2013-08-09 5:26 ` Kim, Milo
@ 2013-08-13 23:35 ` Ian Pilcher
0 siblings, 0 replies; 5+ messages in thread
From: Ian Pilcher @ 2013-08-13 23:35 UTC (permalink / raw)
To: linux-leds
On 08/09/2013 12:26 AM, Kim, Milo wrote:
> It sounds you want to make the LED platform data flexible, right?
Yes, but only to the extent that it can handle this particular hardware.
I'm mostly concerned that something like a kernel upgrade, BIOS upgrade,
or loading additional modules will cause the "magic" GPIO numbers to
change.
> If you can use .dtb file in your system, it may be possible to use just offset
> values with GPIO controller, ich_gpio. Then, no hardcoded GPIO is required.
I'm fairly sure that device tree is not an option in most x86_64
distros. (And the whole reason I'm doing this is to used such a
"mainstream" distro on this hardware, rather than the NAS vendor's
"firmware".)
For now, I think I'll go the kernel module route. If necessary, user-
space can use sysfs to find the GPIO base of the ICH and pass it in. I
suspect there's a way to do this entirely in the kernel, but I also
suspect that it's too much trouble to be worth the effort right now.
Thanks!
--
========================================================================
Ian Pilcher arequipeno@gmail.com
Sometimes there's nothing left to do but crash and burn...or die trying.
========================================================================
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-08-13 23:35 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-08-07 22:51 Registering GPIO LEDs Ian Pilcher
2013-08-09 2:08 ` Kim, Milo
2013-08-09 3:51 ` Ian Pilcher
2013-08-09 5:26 ` Kim, Milo
2013-08-13 23:35 ` Ian Pilcher
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).