Thread (1 message) flat view 1 message, 1 author, 2021-02-18

Re: [PATCH 6/6] ARM: dts: aspeed: rainier: Add leds that are on optional PCI cable cards

From: Andrew Jeffery <hidden>
Date: 2021-02-18 22:46:43
Also in: linux-aspeed


On Mon, 15 Feb 2021, at 17:14, vishwanatha subbanna wrote:
quoted
On 15-Feb-2021, at 4:38 AM, Andrew Jeffery [off-list ref] wrote:



On Wed, 10 Feb 2021, at 21:46, vishwanatha subbanna wrote:
quoted
quoted
On 16-Nov-2020, at 11:43 AM, Joel Stanley [off-list ref] wrote:

On Fri, 13 Nov 2020 at 05:59, Vishwanatha Subbanna
[off-list ref] wrote:
quoted
These are LEDs on the cable cards that plug into PCIE slots.
The LEDs are controlled by PCA9552 I2C expander

Signed-off-by: Vishwanatha Subbanna <redacted>
---
arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts | 288 +++++++++++++++++++++++++++
1 file changed, 288 insertions(+)
diff --git a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
index 67c8c40..7de5f76 100644
--- a/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
+++ b/arch/arm/boot/dts/aspeed-bmc-ibm-rainier.dts
@@ -696,6 +696,70 @@
                     gpios = <&pca4 7 GPIO_ACTIVE_LOW>;
             };
     };
+
+       leds-optional-cablecard0 {
Is it necessary to have separate nodes for each of the different GPIO devices?

Would it make sense to combine them, or is it better to be separate?

Andrew, Eddie, Brad: please review this one before I merge it.
I answered this in previous patch set.  If I express ‘em all in one 
node that is “leds {", then if any of the GPIO is not seen because of 
not having the card, then the current leds-gpio driver knocks off all 
the ones on which it successfully acquired the GPIOs also, leaving 
nothing.
I'm struggling to follow this sentence. Can you please explain what you're 
trying to say in a less colloquial way?

Okay.. So, let me give a bit of background. We have some cards that are 
optional. What that means is, if the cards are to be inserted, then the 
system needs to be brought down to put ‘em. Now, there can be N such 
cards in our system and any of ‘em can be populated or none of ‘em can 
be populated depending on what user wants.

Now, let us assume I put global “leds { , compatible = "gpio-leds"; ” 
section and I describe LEDs of all these N cards along with all the 
other LEDs on the planar, then leds-gpio driver would populate all the 
entries in /sys/class/leds/ __if__ all of the N cards that I mentioned 
are plugged in and their GPIOs can be detected.

However, take for instance where 1 or more of those cards are not 
plugged in, then, because there is a failure in detecting those GPIOs, 
leds-gpio driver will
discard all other LEDs on which it could successfully acquire the 
GPIOs. So, there will not be anything in “/sys/class/leds”. So, the way 
it works is : either -all- or -none-.
Right.

So what's happening is we're using the static description of the hardware in 
the devicetree to describe non-static data. That makes the patch a bit of a 
hack. I'm not terribly enthused about it. Reliance on a specific probe 
behaviour of the leds-gpio driver is not ideal.

The alternative is runtime device creation and driver binding, but then we have 
issues describing the device configuration to the kernel. For LED configuration 
I don't think that's a solved problem, but I'm keen for others to weigh in with 
ideas here.

I think where I land is the devicetree approach is quite distasteful, but 
pragmatic?

I'm torn so I'm going to punt to the maintainer.

Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help