From: Michael Tretter <m.tretter@pengutronix.de> Date: 2021-03-19 15:58:01
Hello,
The dp83867 has 4 LED pins, which can be multiplexed with different functions
of the phy.
This series adds a device tree binding to describe the multiplexing of the
functions to the LEDs and implements the binding for the dp83867 phy.
I found existing bindings for configuring the LED modes for other phys:
In Documentation/devicetree/bindings/net/micrel.txt, the binding is not
flexible enough for the use case in the dp83867, because there is a value for
each LED configuration, which would be a lot of values for the dp83867.
In Documentation/devicetree/bindings/net/mscc-phy-vsc8532.txt, there is a
separate property for each LED, which would work, but I found rather
unintuitive compared to how clock bindings etc. work.
The new binding defines two properties: one for the led names and another
property for the modes of the LEDs with defined values in the same order.
Currently, the binding is specific to the dp83867, but I guess that the
binding could be made more generic and used for other phys, too.
Let me know, what you think.
Michael
Michael Tretter (1):
dt-bindings: dp83867: Add binding for LED mode configuration
Thomas Haemmerle (1):
net: phy: dp83867: add support for changing LED modes
.../devicetree/bindings/net/ti,dp83867.yaml | 24 ++++++++
drivers/net/phy/dp83867.c | 57 +++++++++++++++++++
include/dt-bindings/net/ti-dp83867.h | 16 ++++++
3 files changed, 97 insertions(+)
--
2.29.2
From: Michael Tretter <m.tretter@pengutronix.de> Date: 2021-03-19 15:58:02
The DP83867 supports four configurable LED pins. Describe the
multiplexing of functions to the LEDs via device tree.
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
---
.../devicetree/bindings/net/ti,dp83867.yaml | 24 +++++++++++++++++++
include/dt-bindings/net/ti-dp83867.h | 16 +++++++++++++
2 files changed, 40 insertions(+)
@@ -106,6 +106,30 @@ properties:Transmitt FIFO depth- see dt-bindings/net/ti-dp83867.h for applicablevalues.+ti,dp83867-led-mode-names:+$ref:/schemas/types.yaml#/definitions/string-array+description:|+A list of led name strings sorted in the same order as the+ti,dp83867-led-modes property.+items:+anyOf:+items:+-const:led-0+-const:led-1+-const:led-2+-const:led-gpio+maxItems:4++ti,dp83867-led-modes:+$ref:/schemas/types.yaml#/definitions/uint32-array+description:|+The DP83867 supports four configurable LED pins. Several functions can+be multiplexed onto the LEDs for different modes of operation.++Must contain an entry for each entry in ti,dp83867-led-mode-names.+See dt-bindings/net/ti-dp83867.h for applicable values.+maxItems:4+required:-reg
From: Michael Tretter <m.tretter@pengutronix.de> Date: 2021-03-19 15:58:03
From: Thomas Haemmerle <redacted>
The DP83867 supports four configurable LEDs. Several functions can be
multiplexed to these LEDs. The multiplexing can be configured in the
LEDCR1 register.
Add support for changing the multiplexing of the LEDs via device tree.
Signed-off-by: Thomas Haemmerle <redacted>
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
---
drivers/net/phy/dp83867.c | 57 +++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
From: Michael Tretter <m.tretter@pengutronix.de> Date: 2021-03-19 16:15:23
On Fri, 19 Mar 2021 16:57:10 +0100, Michael Tretter wrote:
quoted hunk
From: Thomas Haemmerle <redacted>
The DP83867 supports four configurable LEDs. Several functions can be
multiplexed to these LEDs. The multiplexing can be configured in the
LEDCR1 register.
Add support for changing the multiplexing of the LEDs via device tree.
Signed-off-by: Thomas Haemmerle <redacted>
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
---
drivers/net/phy/dp83867.c | 57 +++++++++++++++++++++++++++++++++++++++
1 file changed, 57 insertions(+)
drivers/net/phy/dp83867.c:550:14: warning: passing argument 4 of 'of_property_read_u32_index' makes pointer from integer without a cast [-Wint-conversion]
550 | index, tmp);
| ^~~
| |
| u32 {aka unsigned int}
In file included from drivers/net/phy/dp83867.c:11:
include/linux/of.h:311:28: note: expected 'u32 *' {aka 'unsigned int *'} but argument is of type 'u32' {aka 'unsigned int'}
311 | u32 index, u32 *out_value);
| ~~~~~^~~~~~~~~
quoted
drivers/net/phy/dp83867.c:549:8: warning: 'tmp' is used uninitialized in this function [-Wuninitialized]
From: Andrew Lunn <andrew@lunn.ch> Date: 2021-03-19 21:20:25
On Fri, Mar 19, 2021 at 04:57:08PM +0100, Michael Tretter wrote:
Hello,
The dp83867 has 4 LED pins, which can be multiplexed with different functions
of the phy.
This series adds a device tree binding to describe the multiplexing of the
functions to the LEDs and implements the binding for the dp83867 phy.
I found existing bindings for configuring the LED modes for other phys:
In Documentation/devicetree/bindings/net/micrel.txt, the binding is not
flexible enough for the use case in the dp83867, because there is a value for
each LED configuration, which would be a lot of values for the dp83867.
In Documentation/devicetree/bindings/net/mscc-phy-vsc8532.txt, there is a
separate property for each LED, which would work, but I found rather
unintuitive compared to how clock bindings etc. work.
The new binding defines two properties: one for the led names and another
property for the modes of the LEDs with defined values in the same order.
Currently, the binding is specific to the dp83867, but I guess that the
binding could be made more generic and used for other phys, too.
There is some work going on to manage PHY LEDs just like other LEDs in
Linux, using /sys/class/leds.
Please try to help out with that work, rather than adding yet another
DT binding.
Andrew
From: Rob Herring <robh@kernel.org> Date: 2021-03-19 21:50:19
On Fri, 19 Mar 2021 16:57:09 +0100, Michael Tretter wrote:
The DP83867 supports four configurable LED pins. Describe the
multiplexing of functions to the LEDs via device tree.
Signed-off-by: Michael Tretter <m.tretter@pengutronix.de>
---
.../devicetree/bindings/net/ti,dp83867.yaml | 24 +++++++++++++++++++
include/dt-bindings/net/ti-dp83867.h | 16 +++++++++++++
2 files changed, 40 insertions(+)
My bot found errors running 'make dt_binding_check' on your patch:
yamllint warnings/errors:
dtschema/dtc warnings/errors:
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/ti,dp83867.yaml: properties:ti,dp83867-led-mode-names:items: 'anyOf' conditional failed, one must be fixed:
{'anyOf': {'items': [{'const': 'led-0'}, {'const': 'led-1'}, {'const': 'led-2'}, {'const': 'led-gpio'}]}} is not of type 'array'
{'items': [{'const': 'led-0'}, {'const': 'led-1'}, {'const': 'led-2'}, {'const': 'led-gpio'}]} is not of type 'array'
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/ti,dp83867.yaml: properties:ti,dp83867-led-mode-names:items: {'anyOf': {'items': [{'const': 'led-0'}, {'const': 'led-1'}, {'const': 'led-2'}, {'const': 'led-gpio'}]}} is not of type 'array'
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/ti,dp83867.yaml: properties:ti,dp83867-led-mode-names:items: 'oneOf' conditional failed, one must be fixed:
{'anyOf': {'items': [{'const': 'led-0'}, {'const': 'led-1'}, {'const': 'led-2'}, {'const': 'led-gpio'}]}} is not of type 'array'
{'items': [{'const': 'led-0'}, {'const': 'led-1'}, {'const': 'led-2'}, {'const': 'led-gpio'}]} is not of type 'array'
/builds/robherring/linux-dt-review/Documentation/devicetree/bindings/net/ti,dp83867.yaml: ignoring, error in schema: properties: ti,dp83867-led-mode-names: items
warning: no schema found in file: ./Documentation/devicetree/bindings/net/ti,dp83867.yaml
See https://patchwork.ozlabs.org/patch/1455937
This check can fail if there are any dependencies. The base for a patch
series is generally the most recent rc1.
If you already ran 'make dt_binding_check' and didn't see the above
error(s), then make sure 'yamllint' is installed and dt-schema is up to
date:
pip3 install dtschema --upgrade
Please check and re-submit.
From: kernel test robot <hidden> Date: 2021-03-20 00:48:03
Hi Michael,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on robh/for-next]
[also build test WARNING on net/master ipvs/master net-next/master v5.12-rc3 next-20210319]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Michael-Tretter/net-phy-dp83867-Configure-LED-modes-via-device-tree/20210320-000027
base: https://git.kernel.org/pub/scm/linux/kernel/git/robh/linux.git for-next
config: x86_64-randconfig-s031-20210318 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.3-277-gc089cd2d-dirty
# https://github.com/0day-ci/linux/commit/740c2de62bc36c66a54a8c152a65ae2ebf805515
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Michael-Tretter/net-phy-dp83867-Configure-LED-modes-via-device-tree/20210320-000027
git checkout 740c2de62bc36c66a54a8c152a65ae2ebf805515
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=x86_64
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <redacted>
sparse warnings: (new ones prefixed by >>)
quoted
drivers/net/phy/dp83867.c:550:49: sparse: sparse: incorrect type in argument 4 (different base types) @@ expected unsigned int [usertype] *out_value @@ got unsigned int [usertype] tmp @@
drivers/net/phy/dp83867.c:550:49: sparse: expected unsigned int [usertype] *out_value
drivers/net/phy/dp83867.c:550:49: sparse: got unsigned int [usertype] tmp
quoted
drivers/net/phy/dp83867.c:550:49: sparse: sparse: non size-preserving integer to pointer cast
vim +550 drivers/net/phy/dp83867.c
538
539 #if IS_ENABLED(CONFIG_OF_MDIO)
540 static int dp83867_of_led_mode_read(struct device_node *of_node,
541 const char *led_name, u32 *mode)
542 {
543 u32 tmp;
544 int index;
545 int err;
546
547 index = of_property_match_string(of_node, "ti,dp83867-led-mode-names",
548 led_name);
549 err = of_property_read_u32_index(of_node, "ti,dp83867-led-modes",
> 550 index, tmp);
551 if (err)
552 return err;
553 if (tmp == 0xc || tmp >= 0xf)
554 return -EINVAL;
555
556 *mode = tmp;
557
558 return 0;
559 }
560
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
drivers/net/phy/dp83867.c:550:14: warning: incompatible integer to pointer conversion passing 'u32' (aka 'unsigned int') to parameter of type 'u32 *' (aka 'unsigned int *'); take the address with & [-Wint-conversion]
index, tmp);
^~~
&
include/linux/of.h:311:28: note: passing argument to parameter 'out_value' here
u32 index, u32 *out_value);
^
quoted
drivers/net/phy/dp83867.c:550:14: warning: variable 'tmp' is uninitialized when used here [-Wuninitialized]
index, tmp);
^~~
drivers/net/phy/dp83867.c:543:9: note: initialize the variable 'tmp' to silence this warning
u32 tmp;
^
= 0
2 warnings generated.
vim +550 drivers/net/phy/dp83867.c
538
539 #if IS_ENABLED(CONFIG_OF_MDIO)
540 static int dp83867_of_led_mode_read(struct device_node *of_node,
541 const char *led_name, u32 *mode)
542 {
543 u32 tmp;
544 int index;
545 int err;
546
547 index = of_property_match_string(of_node, "ti,dp83867-led-mode-names",
548 led_name);
549 err = of_property_read_u32_index(of_node, "ti,dp83867-led-modes",
> 550 index, tmp);
551 if (err)
552 return err;
553 if (tmp == 0xc || tmp >= 0xf)
554 return -EINVAL;
555
556 *mode = tmp;
557
558 return 0;
559 }
560
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
From: Michael Tretter <m.tretter@pengutronix.de> Date: 2021-03-22 07:40:18
On Fri, 19 Mar 2021 22:19:44 +0100, Andrew Lunn wrote:
On Fri, Mar 19, 2021 at 04:57:08PM +0100, Michael Tretter wrote:
quoted
The dp83867 has 4 LED pins, which can be multiplexed with different functions
of the phy.
This series adds a device tree binding to describe the multiplexing of the
functions to the LEDs and implements the binding for the dp83867 phy.
I found existing bindings for configuring the LED modes for other phys:
In Documentation/devicetree/bindings/net/micrel.txt, the binding is not
flexible enough for the use case in the dp83867, because there is a value for
each LED configuration, which would be a lot of values for the dp83867.
In Documentation/devicetree/bindings/net/mscc-phy-vsc8532.txt, there is a
separate property for each LED, which would work, but I found rather
unintuitive compared to how clock bindings etc. work.
The new binding defines two properties: one for the led names and another
property for the modes of the LEDs with defined values in the same order.
Currently, the binding is specific to the dp83867, but I guess that the
binding could be made more generic and used for other phys, too.
There is some work going on to manage PHY LEDs just like other LEDs in
Linux, using /sys/class/leds.
Please try to help out with that work, rather than adding yet another
DT binding.