From patchwork Wed Sep 9 16:25:46 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marek_Beh=C3=BAn?= X-Patchwork-Id: 255422 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A0A98C43461 for ; Wed, 9 Sep 2020 16:36:06 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 62BDB20C09 for ; Wed, 9 Sep 2020 16:36:06 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nic.cz header.i=@nic.cz header.b="f87YnBrk" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731073AbgIIQ0L (ORCPT ); Wed, 9 Sep 2020 12:26:11 -0400 Received: from mail.nic.cz ([217.31.204.67]:34622 "EHLO mail.nic.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731052AbgIIQ0D (ORCPT ); Wed, 9 Sep 2020 12:26:03 -0400 Received: from dellmb.labs.office.nic.cz (unknown [IPv6:2001:1488:fffe:6:cac7:3539:7f1f:463]) by mail.nic.cz (Postfix) with ESMTP id C2F08140A64; Wed, 9 Sep 2020 18:25:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nic.cz; s=default; t=1599668754; bh=GiMyA6x4ElsGNt3VmolCaxWgc8p8+8SuvAMrXWbJfso=; h=From:To:Date; b=f87YnBrkbGhc0mIVSyThy0I8tEFadbY7bRevzKURZ9u8FsqdUpA2/lTT/7rnUADVz YpnEVtE4a7UcqDL5SUwko8Q7h8/8pJC0mgawuhLM6VqjkGqnUJPvleJRn4k2ROwRdS kCtCRgAacYXe2/ZszbGkdU37lhlonyDym53MpG/s= From: =?utf-8?q?Marek_Beh=C3=BAn?= To: netdev@vger.kernel.org Cc: linux-leds@vger.kernel.org, Pavel Machek , Dan Murphy , =?utf-8?q?Ond=C5=99ej_Jirman?= , Russell King , Andrew Lunn , linux-kernel@vger.kernel.org, Matthias Schiffer , "David S. Miller" , =?utf-8?q?Marek_Beh=C3=BAn?= , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH net-next + leds v2 1/7] dt-bindings: leds: document binding for HW controlled LEDs Date: Wed, 9 Sep 2020 18:25:46 +0200 Message-Id: <20200909162552.11032-2-marek.behun@nic.cz> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200909162552.11032-1-marek.behun@nic.cz> References: <20200909162552.11032-1-marek.behun@nic.cz> MIME-Version: 1.0 X-Spamd-Bar: / X-Virus-Scanned: clamav-milter 0.102.2 at mail X-Virus-Status: Clean Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Document binding for LEDs connected to and controlled by various chips (such as ethernet PHY chips). Signed-off-by: Marek Behún Cc: Rob Herring Cc: devicetree@vger.kernel.org --- .../leds/linux,hw-controlled-leds.yaml | 99 +++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 Documentation/devicetree/bindings/leds/linux,hw-controlled-leds.yaml diff --git a/Documentation/devicetree/bindings/leds/linux,hw-controlled-leds.yaml b/Documentation/devicetree/bindings/leds/linux,hw-controlled-leds.yaml new file mode 100644 index 0000000000000..eaf6e5d80c5f5 --- /dev/null +++ b/Documentation/devicetree/bindings/leds/linux,hw-controlled-leds.yaml @@ -0,0 +1,99 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/leds/linux,hw-controlled-leds.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: LEDs that can be controlled by hardware (eg. by an ethernet PHY chip) + +maintainers: + - Marek Behún + +description: + Many an ethernet PHY (and other chips) supports various HW control modes + for LEDs connected directly to them. With this binding such LEDs can be + described. + +properties: + compatible: + const: linux,hw-controlled-leds + + "#address-cells": + const: 1 + + "#size-cells": + const: 0 + +patternProperties: + "^led@[0-9a-f]+$": + type: object + allOf: + - $ref: common.yaml# + description: + This node represents a LED device connected to a chip that can control + the LED in various HW controlled modes. + + properties: + reg: + maxItems: 1 + description: + This property identifies the LED to the chip the LED is connected to + (eg. an ethernet PHY chip can have multiple LEDs connected to it). + + enable-active-high: + description: + Polarity of LED is active high. If missing, assumed default is active + low. + type: boolean + + led-tristate: + description: + LED pin is tristate type. If missing, assumed false. + type: boolean + + linux,default-hw-mode: + description: + This parameter, if present, specifies the default HW triggering mode + of the LED when LED trigger is set to `dev-hw-mode`. + Available values are specific per device the LED is connected to and + per LED itself. + $ref: /schemas/types.yaml#definitions/string + + required: + - reg + +additionalProperties: false + +examples: + - | + + #include + + ethernet-phy@0 { + compatible = "ethernet-phy-ieee802.3-c45"; + reg = <0>; + + leds { + compatible = "linux,hw-controlled-leds"; + #address-cells = <1>; + #size-cells = <0>; + + led@0 { + reg = <0>; + color = ; + function = ; + linux,default-trigger = "dev-hw-mode"; + linux,default-hw-mode = "1Gbps"; + }; + + led@1 { + reg = <1>; + color = ; + function = ; + linux,default-trigger = "dev-hw-mode"; + linux,default-hw-mode = "activity"; + }; + }; + }; + +... From patchwork Wed Sep 9 16:25:47 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marek_Beh=C3=BAn?= X-Patchwork-Id: 255421 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 62750C43461 for ; Wed, 9 Sep 2020 16:37:09 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 177592087C for ; Wed, 9 Sep 2020 16:37:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nic.cz header.i=@nic.cz header.b="ML2TxvAb" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731209AbgIIQgH (ORCPT ); Wed, 9 Sep 2020 12:36:07 -0400 Received: from lists.nic.cz ([217.31.204.67]:34640 "EHLO mail.nic.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731056AbgIIQ0D (ORCPT ); Wed, 9 Sep 2020 12:26:03 -0400 Received: from dellmb.labs.office.nic.cz (unknown [IPv6:2001:1488:fffe:6:cac7:3539:7f1f:463]) by mail.nic.cz (Postfix) with ESMTP id EF442140A6D; Wed, 9 Sep 2020 18:25:54 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nic.cz; s=default; t=1599668755; bh=u3IRK7xXgZ5VpwhMjFOls8Tmo4FXyAhmL45+VBDAzGQ=; h=From:To:Date; b=ML2TxvAbqcLwYDA0iPUeyrPLt7/bWP2m5GIAVAYoln6nWfuooRfcZy2RVrmzjS6cj qmzIEH+URpE8jFAlG9leOJRAMFPvg28Zqlud4BWYV1XBLgjEYyoONyIk3RU51Iefx6 Dn4QklVmNXP4LmWWd2ckC6Jx9pm5NoQENhkuFwoo= From: =?utf-8?q?Marek_Beh=C3=BAn?= To: netdev@vger.kernel.org Cc: linux-leds@vger.kernel.org, Pavel Machek , Dan Murphy , =?utf-8?q?Ond=C5=99ej_Jirman?= , Russell King , Andrew Lunn , linux-kernel@vger.kernel.org, Matthias Schiffer , "David S. Miller" , =?utf-8?q?Marek_Beh=C3=BAn?= Subject: [PATCH net-next + leds v2 2/7] leds: add generic API for LEDs that can be controlled by hardware Date: Wed, 9 Sep 2020 18:25:47 +0200 Message-Id: <20200909162552.11032-3-marek.behun@nic.cz> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200909162552.11032-1-marek.behun@nic.cz> References: <20200909162552.11032-1-marek.behun@nic.cz> MIME-Version: 1.0 X-Spamd-Bar: / X-Virus-Scanned: clamav-milter 0.102.2 at mail X-Virus-Status: Clean Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Many an ethernet PHY (and other chips) supports various HW control modes for LEDs connected directly to them. This patch adds a generic API for registering such LEDs when described in device tree. This API also exposes generic way to select between these hardware control modes. This API registers a new private LED trigger called dev-hw-mode. When this trigger is enabled for a LED, the various HW control modes which are supported by the device for given LED can be get/set via hw_mode sysfs file. Signed-off-by: Marek Behún --- .../sysfs-class-led-trigger-dev-hw-mode | 8 + drivers/leds/Kconfig | 10 + drivers/leds/Makefile | 1 + drivers/leds/leds-hw-controlled.c | 227 ++++++++++++++++++ include/linux/leds-hw-controlled.h | 74 ++++++ 5 files changed, 320 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-class-led-trigger-dev-hw-mode create mode 100644 drivers/leds/leds-hw-controlled.c create mode 100644 include/linux/leds-hw-controlled.h diff --git a/Documentation/ABI/testing/sysfs-class-led-trigger-dev-hw-mode b/Documentation/ABI/testing/sysfs-class-led-trigger-dev-hw-mode new file mode 100644 index 0000000000000..7bca112e7ff93 --- /dev/null +++ b/Documentation/ABI/testing/sysfs-class-led-trigger-dev-hw-mode @@ -0,0 +1,8 @@ +What: /sys/class/leds//hw_mode +Date: September 2020 +KernelVersion: 5.10 +Contact: Marek Behún + linux-leds@vger.kernel.org +Description: (W) Set the HW control mode of this LED. The various available HW control modes + are specific per device to which the LED is connected to and per LED itself. + (R) Show the available HW control modes and the currently selected one. diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index 1c181df24eae4..5e47ab21aafb4 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -49,6 +49,16 @@ config LEDS_BRIGHTNESS_HW_CHANGED See Documentation/ABI/testing/sysfs-class-led for details. +config LEDS_HW_CONTROLLED + bool "API for LEDs that can be controlled by hardware" + depends on LEDS_CLASS + select LEDS_TRIGGERS + help + This option enables support for a generic API via which other drivers + can register LEDs that can be put into hardware controlled mode, eg. + a LED connected to an ethernet PHY can be configured to blink on + network activity. + comment "LED drivers" config LEDS_88PM860X diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile index c2c7d7ade0d06..858e468e40df0 100644 --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile @@ -6,6 +6,7 @@ obj-$(CONFIG_LEDS_CLASS) += led-class.o obj-$(CONFIG_LEDS_CLASS_FLASH) += led-class-flash.o obj-$(CONFIG_LEDS_CLASS_MULTICOLOR) += led-class-multicolor.o obj-$(CONFIG_LEDS_TRIGGERS) += led-triggers.o +obj-$(CONFIG_LEDS_HW_CONTROLLED) += leds-hw-controlled.o # LED Platform Drivers (keep this sorted, M-| sort) obj-$(CONFIG_LEDS_88PM860X) += leds-88pm860x.o diff --git a/drivers/leds/leds-hw-controlled.c b/drivers/leds/leds-hw-controlled.c new file mode 100644 index 0000000000000..9ef58bf275efd --- /dev/null +++ b/drivers/leds/leds-hw-controlled.c @@ -0,0 +1,227 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Generic API for LEDs that can be controlled by hardware (eg. by an ethernet PHY chip) + * + * Copyright (C) 2020 Marek Behun + */ +#include +#include +#include + +int hw_controlled_led_brightness_set(struct led_classdev *cdev, enum led_brightness brightness) +{ + struct hw_controlled_led *led = led_cdev_to_hw_controlled_led(cdev); + int ret; + + mutex_lock(&led->lock); + ret = led->ops->led_brightness_set(cdev->dev->parent, led, brightness); + mutex_unlock(&led->lock); + + return ret; +} +EXPORT_SYMBOL_GPL(hw_controlled_led_brightness_set); + +static int of_register_hw_controlled_led(struct device *dev, struct device_node *np, + const char *devicename, + const struct hw_controlled_led_ops *ops) +{ + struct led_init_data init_data = {}; + struct hw_controlled_led *led; + u32 reg; + int ret; + + ret = of_property_read_u32(np, "reg", ®); + if (ret < 0) + return ret; + + led = devm_kzalloc(dev, sizeof(struct hw_controlled_led), GFP_KERNEL); + if (!led) + return -ENOMEM; + + led->ops = ops; + + led->cdev.max_brightness = 1; + led->cdev.brightness_set_blocking = hw_controlled_led_brightness_set; + led->cdev.trigger_type = &hw_control_led_trig_type; + led->addr = reg; + + of_property_read_string(np, "linux,default-trigger", &led->cdev.default_trigger); + of_property_read_string(np, "linux,default-hw-mode", &led->hw_mode); + + led->active_low = !of_property_read_bool(np, "enable-active-high"); + led->tristate = of_property_read_bool(np, "led-tristate"); + + init_data.fwnode = &np->fwnode; + init_data.devname_mandatory = true; + init_data.devicename = devicename; + + ret = led->ops->led_init(dev, led); + if (ret < 0) + goto err_free; + + ret = devm_led_classdev_register_ext(dev, &led->cdev, &init_data); + if (ret < 0) + goto err_free; + + return 0; +err_free: + devm_kfree(dev, led); + return ret; +} + +int of_register_hw_controlled_leds(struct device *dev, const char *devicename, + const struct hw_controlled_led_ops *ops) +{ + struct device_node *node = dev->of_node; + struct device_node *leds, *led; + int ret; + + if (!IS_ENABLED(CONFIG_OF_MDIO)) + return 0; + + if (!ops) + return -EINVAL; + + /* maybe we should have of_get_compatible_available_child as well */ + leds = of_get_compatible_child(node, "linux,hw-controlled-leds"); + if (!leds) + return 0; + + if (!devicename) + devicename = dev_name(dev); + + for_each_available_child_of_node(leds, led) { + ret = of_register_hw_controlled_led(dev, led, devicename, ops); + if (ret < 0) + dev_err(dev, "Nonfatal error: cannot register LED from node %pOFn: %i\n", + led, ret); + } + + return 0; +} +EXPORT_SYMBOL_GPL(of_register_hw_controlled_leds); + +static int hw_control_led_trig_activate(struct led_classdev *cdev) +{ + struct hw_controlled_led *led; + int ret; + + led = led_cdev_to_hw_controlled_led(cdev); + + if (!led->hw_mode) + return 0; + + mutex_lock(&led->lock); + ret = led->ops->led_set_hw_mode(cdev->dev->parent, led, led->hw_mode); + mutex_unlock(&led->lock); + + if (ret < 0) + dev_warn(cdev->dev->parent, "Could not set HW mode %s on LED %s: %i\n", + led->hw_mode, cdev->name, ret); + + /* don't fail to activate this trigger so that user can write hw_mode file */ + return 0; +} + +static void hw_control_led_trig_deactivate(struct led_classdev *cdev) +{ + struct hw_controlled_led *led; + int ret; + + led = led_cdev_to_hw_controlled_led(cdev); + + mutex_lock(&led->lock); + /* store HW mode before deactivation */ + led->hw_mode = led->ops->led_get_hw_mode(cdev->dev->parent, led); + ret = led->ops->led_set_hw_mode(cdev->dev->parent, led, NULL); + mutex_unlock(&led->lock); + + if (ret < 0) + dev_err(cdev->dev->parent, "Failed deactivating HW mode on LED %s\n", cdev->name); +} + +static ssize_t hw_mode_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + struct hw_controlled_led *led; + const char *mode, *cur_mode; + void *iter = NULL; + int len = 0; + + led = led_cdev_to_hw_controlled_led(led_trigger_get_led(dev)); + + mutex_lock(&led->lock); + + cur_mode = led->ops->led_get_hw_mode(dev->parent, led); + + for (mode = led->ops->led_iter_hw_mode(dev->parent, led, &iter); + mode; + mode = led->ops->led_iter_hw_mode(dev->parent, led, &iter)) { + bool sel; + + sel = cur_mode && !strcmp(mode, cur_mode); + + len += scnprintf(buf + len, PAGE_SIZE - len, "%s%s%s ", sel ? "[" : "", mode, + sel ? "]" : ""); + } + + if (buf[len - 1] == ' ') + buf[len - 1] = '\n'; + + mutex_unlock(&led->lock); + + return len; +} + +static ssize_t hw_mode_store(struct device *dev, struct device_attribute *attr, const char *buf, + size_t count) +{ + struct hw_controlled_led *led; + int ret; + + led = led_cdev_to_hw_controlled_led(led_trigger_get_led(dev)); + + mutex_lock(&led->lock); + ret = led->ops->led_set_hw_mode(dev->parent, led, buf); + if (ret < 0) + return ret; + mutex_unlock(&led->lock); + + return count; +} + +static DEVICE_ATTR_RW(hw_mode); + +static struct attribute *hw_control_led_trig_attrs[] = { + &dev_attr_hw_mode.attr, + NULL +}; +ATTRIBUTE_GROUPS(hw_control_led_trig); + +struct led_hw_trigger_type hw_control_led_trig_type; +EXPORT_SYMBOL_GPL(hw_control_led_trig_type); + +struct led_trigger hw_control_led_trig = { + .name = "dev-hw-mode", + .activate = hw_control_led_trig_activate, + .deactivate = hw_control_led_trig_deactivate, + .trigger_type = &hw_control_led_trig_type, + .groups = hw_control_led_trig_groups, +}; +EXPORT_SYMBOL_GPL(hw_control_led_trig); + +static int __init hw_controlled_leds_init(void) +{ + return led_trigger_register(&hw_control_led_trig); +} + +static void __exit hw_controlled_leds_exit(void) +{ + led_trigger_unregister(&hw_control_led_trig); +} + +subsys_initcall(hw_controlled_leds_init); +module_exit(hw_controlled_leds_exit); + +MODULE_AUTHOR("Marek Behun "); +MODULE_LICENSE("GPL v2"); +MODULE_DESCRIPTION("API for HW controlled LEDs"); diff --git a/include/linux/leds-hw-controlled.h b/include/linux/leds-hw-controlled.h new file mode 100644 index 0000000000000..2c9b8a06def18 --- /dev/null +++ b/include/linux/leds-hw-controlled.h @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: GPL-2.0+ */ +/* + * Generic API for LEDs that can be controlled by hardware (eg. by an ethernet PHY chip) + * + * Copyright (C) 2020 Marek Behun + */ +#ifndef _LINUX_LEDS_HW_CONTROLLED_H_ +#define _LINUX_LEDS_HW_CONTROLLED_H_ + +#include +#include + +struct hw_controlled_led { + struct led_classdev cdev; + const struct hw_controlled_led_ops *ops; + struct mutex lock; + + /* these members are filled in by OF if OF is enabled */ + int addr; + bool active_low; + bool tristate; + + /* also filled in by OF, but changed by led_set_hw_mode operation */ + const char *hw_mode; + + void *priv; +}; +#define led_cdev_to_hw_controlled_led(l) container_of(l, struct hw_controlled_led, cdev) + +/* struct hw_controlled_led_ops: Operations on LEDs that can be controlled by HW + * + * All the following operations must be implemented: + * @led_init: Should initialize the LED from OF data (and sanity check whether they are correct). + * This should also change led->cdev.max_brightness, if the value differs from default, + * which is 1. + * @led_brightness_set: Sets brightness. + * @led_iter_hw_mode: Iterates available HW control mode names for this LED. + * @led_set_hw_mode: Sets HW control mode to value specified by given name. + * @led_get_hw_mode: Returns current HW control mode name. + */ +struct hw_controlled_led_ops { + int (*led_init)(struct device *dev, struct hw_controlled_led *led); + int (*led_brightness_set)(struct device *dev, struct hw_controlled_led *led, + enum led_brightness brightness); + const char *(*led_iter_hw_mode)(struct device *dev, struct hw_controlled_led *led, + void **iter); + int (*led_set_hw_mode)(struct device *dev, struct hw_controlled_led *led, + const char *mode); + const char *(*led_get_hw_mode)(struct device *dev, struct hw_controlled_led *led); +}; + +#if IS_ENABLED(CONFIG_LEDS_HW_CONTROLLED) + +#define hw_controlled_led_ops_ptr(s) (s) + +int of_register_hw_controlled_leds(struct device *dev, const char *devicename, + const struct hw_controlled_led_ops *ops); +int hw_controlled_led_brightness_set(struct led_classdev *cdev, enum led_brightness brightness); + +extern struct led_hw_trigger_type hw_control_led_trig_type; +extern struct led_trigger hw_control_led_trig; + +#else /* !IS_ENABLED(CONFIG_LEDS_HW_CONTROLLED) */ + +#define hw_controlled_led_ops_ptr(s) NULL +static inline int of_register_hw_controlled_leds(struct device *dev, const char *devicename, + const struct hw_controlled_led_ops *ops) +{ + return 0; +} + +#endif /* !IS_ENABLED(CONFIG_LEDS_HW_CONTROLLED) */ + +#endif /* _LINUX_LEDS_HW_CONTROLLED_H_ */ From patchwork Wed Sep 9 16:25:49 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marek_Beh=C3=BAn?= X-Patchwork-Id: 255420 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 261D2C2D0E1 for ; Wed, 9 Sep 2020 16:37:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id E9A782087C for ; Wed, 9 Sep 2020 16:37:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nic.cz header.i=@nic.cz header.b="esEDFi4f" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731014AbgIIQhN (ORCPT ); Wed, 9 Sep 2020 12:37:13 -0400 Received: from mail.nic.cz ([217.31.204.67]:34678 "EHLO mail.nic.cz" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731057AbgIIQ0A (ORCPT ); Wed, 9 Sep 2020 12:26:00 -0400 Received: from dellmb.labs.office.nic.cz (unknown [IPv6:2001:1488:fffe:6:cac7:3539:7f1f:463]) by mail.nic.cz (Postfix) with ESMTP id 503A6140A73; Wed, 9 Sep 2020 18:25:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nic.cz; s=default; t=1599668755; bh=MvXQD34WvMImgeFSgU4h5cxDM9wpALrPc1U2c97TNVY=; h=From:To:Date; b=esEDFi4f3TDJKUxF7mN6MzWKDJGWacG1D+Spd1xIHmg6lLdcjm+uuP3eEEmy+ElKF GjuPZAc1ZUJBazQibj2HS2xM7O0h2Hc2UKz3xfHunBg1krjXxGRpiNIx3Eww8D1xmI i/4QBWcehwJMgM4deFm8xFympqFdLIWqITJajpas= From: =?utf-8?q?Marek_Beh=C3=BAn?= To: netdev@vger.kernel.org Cc: linux-leds@vger.kernel.org, Pavel Machek , Dan Murphy , =?utf-8?q?Ond=C5=99ej_Jirman?= , Russell King , Andrew Lunn , linux-kernel@vger.kernel.org, Matthias Schiffer , "David S. Miller" , =?utf-8?q?Marek_Beh=C3=BAn?= , Rob Herring , devicetree@vger.kernel.org Subject: [PATCH net-next + leds v2 4/7] dt-bindings: net: ethernet-phy: add description for PHY LEDs Date: Wed, 9 Sep 2020 18:25:49 +0200 Message-Id: <20200909162552.11032-5-marek.behun@nic.cz> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200909162552.11032-1-marek.behun@nic.cz> References: <20200909162552.11032-1-marek.behun@nic.cz> MIME-Version: 1.0 X-Spamd-Bar: / X-Virus-Scanned: clamav-milter 0.102.2 at mail X-Virus-Status: Clean Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Document binding for LEDs connected to an ethernet PHY chip. Signed-off-by: Marek Behún Cc: Rob Herring Cc: devicetree@vger.kernel.org --- Documentation/devicetree/bindings/net/ethernet-phy.yaml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Documentation/devicetree/bindings/net/ethernet-phy.yaml b/Documentation/devicetree/bindings/net/ethernet-phy.yaml index a9e547ac79051..f593e8709dd0d 100644 --- a/Documentation/devicetree/bindings/net/ethernet-phy.yaml +++ b/Documentation/devicetree/bindings/net/ethernet-phy.yaml @@ -174,6 +174,14 @@ properties: PHY's that have configurable TX internal delays. If this property is present then the PHY applies the TX delay. + leds: + type: object + description: | + This is used to described LEDs that are connected to the PHY chip and + their blinking can be controlled by the PHY. + allOf: + - $ref: /schemas/leds/linux,hw-controlled-leds.yaml# + required: - reg From patchwork Wed Sep 9 16:25:52 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Marek_Beh=C3=BAn?= X-Patchwork-Id: 255423 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4B611C43461 for ; Wed, 9 Sep 2020 16:26:18 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 3AE1C206B8 for ; Wed, 9 Sep 2020 16:26:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nic.cz header.i=@nic.cz header.b="fCs8lADv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731087AbgIIQ0P (ORCPT ); Wed, 9 Sep 2020 12:26:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56148 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1731022AbgIIQ0G (ORCPT ); Wed, 9 Sep 2020 12:26:06 -0400 Received: from mail.nic.cz (lists.nic.cz [IPv6:2001:1488:800:400::400]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DA41C061795; Wed, 9 Sep 2020 09:26:05 -0700 (PDT) Received: from dellmb.labs.office.nic.cz (unknown [IPv6:2001:1488:fffe:6:cac7:3539:7f1f:463]) by mail.nic.cz (Postfix) with ESMTP id D5423140A7D; Wed, 9 Sep 2020 18:25:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=nic.cz; s=default; t=1599668755; bh=ETijTD2hHqyWxW2zwXhqdFU5Xk5g005codDN5mEO12w=; h=From:To:Date; b=fCs8lADvaSZx/tRW4It7vvjDQqLxXSf0ofh5ycAqs4qKwAnJ4M6nEOm7C/kWYjWzS ldSpXT1S247pBH6u+pIBV4mjNWMCYm3h+/2ed8WqrHa7K9IgMbq5PVpQOMQnqiu28j QeqYGFpVaS3hXsCIXMtHtGEsFgOywhS5gt+T5jio= From: =?utf-8?q?Marek_Beh=C3=BAn?= To: netdev@vger.kernel.org Cc: linux-leds@vger.kernel.org, Pavel Machek , Dan Murphy , =?utf-8?q?Ond=C5=99ej_Jirman?= , Russell King , Andrew Lunn , linux-kernel@vger.kernel.org, Matthias Schiffer , "David S. Miller" , =?utf-8?q?Marek_Beh=C3=BAn?= Subject: [PATCH net-next + mvebu v2 7/7] arm64: dts: armada-3720-turris-mox: add nodes for ethernet PHY LEDs Date: Wed, 9 Sep 2020 18:25:52 +0200 Message-Id: <20200909162552.11032-8-marek.behun@nic.cz> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200909162552.11032-1-marek.behun@nic.cz> References: <20200909162552.11032-1-marek.behun@nic.cz> MIME-Version: 1.0 X-Spamd-Bar: / X-Virus-Scanned: clamav-milter 0.102.2 at mail X-Virus-Status: Clean Sender: linux-leds-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-leds@vger.kernel.org Add nodes for the green and yellow LEDs that are connected to the ethernet PHY chip on Turris MOX A. Signed-off-by: Marek Behún --- .../dts/marvell/armada-3720-turris-mox.dts | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts index f3a678e0fd99b..6da03b6c69c0a 100644 --- a/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts +++ b/arch/arm64/boot/dts/marvell/armada-3720-turris-mox.dts @@ -9,6 +9,7 @@ #include #include #include +#include #include "armada-372x.dtsi" / { @@ -273,6 +274,28 @@ &mdio { phy1: ethernet-phy@1 { reg = <1>; + + leds { + compatible = "linux,hw-controlled-leds"; + #address-cells = <1>; + #size-cells = <0>; + + led@0 { + reg = <0>; + color = ; + function = LED_FUNCTION_STATUS; + linux,default-trigger = "dev-hw-mode"; + linux,default-hw-mode = "1Gbps/100Mbps/10Mbps"; + }; + + led@1 { + reg = <1>; + color = ; + function = LED_FUNCTION_ACTIVITY; + linux,default-trigger = "dev-hw-mode"; + linux,default-hw-mode = "blink-act"; + }; + }; }; /* switch nodes are enabled by U-Boot if modules are present */