From: Christian Marangi <ansuelsmth@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>,
Florian Fainelli <f.fainelli@gmail.com>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Gregory Clement <gregory.clement@bootlin.com>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Andy Gross <agross@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
Christian Marangi <ansuelsmth@gmail.com>,
John Crispin <john@phrozen.org>,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-arm-msm@vger.kernel.org, Lee Jones <lee@kernel.org>,
linux-leds@vger.kernel.org
Subject: [net-next PATCH v3 05/14] net: phy: phy_device: Call into the PHY driver to set LED brightness.
Date: Tue, 14 Mar 2023 11:15:07 +0100 [thread overview]
Message-ID: <20230314101516.20427-6-ansuelsmth@gmail.com> (raw)
In-Reply-To: <20230314101516.20427-1-ansuelsmth@gmail.com>
From: Andrew Lunn <andrew@lunn.ch>
Linux LEDs can be software controlled via the brightness file in /sys.
LED drivers need to implement a brightness_set function which the core
will call. Implement an intermediary in phy_device, which will call
into the phy driver if it implements the necessary function.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
drivers/net/phy/phy_device.c | 14 +++++++++++---
include/linux/phy.h | 9 +++++++++
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 8acade42615c..e4df4fcb6b05 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -2967,11 +2967,18 @@ static bool phy_drv_supports_irq(struct phy_driver *phydrv)
return phydrv->config_intr && phydrv->handle_interrupt;
}
-/* Dummy implementation until calls into PHY driver are added */
static int phy_led_set_brightness(struct led_classdev *led_cdev,
enum led_brightness value)
{
- return 0;
+ struct phy_led *phyled = to_phy_led(led_cdev);
+ struct phy_device *phydev = phyled->phydev;
+ int err;
+
+ mutex_lock(&phydev->lock);
+ err = phydev->drv->led_brightness_set(phydev, phyled->index, value);
+ mutex_unlock(&phydev->lock);
+
+ return err;
}
static int of_phy_led(struct phy_device *phydev,
@@ -2995,7 +3002,8 @@ static int of_phy_led(struct phy_device *phydev,
if (err)
return err;
- cdev->brightness_set_blocking = phy_led_set_brightness;
+ if (phydev->drv->led_brightness_set)
+ cdev->brightness_set_blocking = phy_led_set_brightness;
cdev->max_brightness = 1;
init_data.devicename = dev_name(&phydev->mdio.dev);
init_data.fwnode = of_fwnode_handle(led);
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 1b1efe120f0f..83d3ed7485e0 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -841,6 +841,8 @@ struct phy_led {
u32 index;
};
+#define to_phy_led(d) container_of(d, struct phy_led, led_cdev)
+
/**
* struct phy_driver - Driver structure for a particular PHY type
*
@@ -1063,6 +1065,13 @@ struct phy_driver {
/** @get_plca_status: Return the current PLCA status info */
int (*get_plca_status)(struct phy_device *dev,
struct phy_plca_status *plca_st);
+
+ /* Set a PHY LED brightness. Index indicates which of the PHYs
+ * led should be set. Value follows the standard LED class meaning,
+ * e.g. LED_OFF, LED_HALF, LED_FULL.
+ */
+ int (*led_brightness_set)(struct phy_device *dev,
+ u32 index, enum led_brightness value);
};
#define to_phy_driver(d) container_of(to_mdio_common_driver(d), \
struct phy_driver, mdiodrv)
--
2.39.2
WARNING: multiple messages have this Message-ID (diff)
From: Christian Marangi <ansuelsmth@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>,
Florian Fainelli <f.fainelli@gmail.com>,
Vladimir Oltean <olteanv@gmail.com>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Rob Herring <robh+dt@kernel.org>,
Krzysztof Kozlowski <krzysztof.kozlowski+dt@linaro.org>,
Heiner Kallweit <hkallweit1@gmail.com>,
Russell King <linux@armlinux.org.uk>,
Gregory Clement <gregory.clement@bootlin.com>,
Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>,
Andy Gross <agross@kernel.org>,
Bjorn Andersson <andersson@kernel.org>,
Konrad Dybcio <konrad.dybcio@linaro.org>,
Christian Marangi <ansuelsmth@gmail.com>,
John Crispin <john@phrozen.org>,
netdev@vger.kernel.org, devicetree@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-arm-msm@vger.kernel.org, Lee Jones <lee@kernel.org>,
linux-leds@vger.kernel.org
Subject: [net-next PATCH v3 05/14] net: phy: phy_device: Call into the PHY driver to set LED brightness.
Date: Tue, 14 Mar 2023 11:15:07 +0100 [thread overview]
Message-ID: <20230314101516.20427-6-ansuelsmth@gmail.com> (raw)
In-Reply-To: <20230314101516.20427-1-ansuelsmth@gmail.com>
From: Andrew Lunn <andrew@lunn.ch>
Linux LEDs can be software controlled via the brightness file in /sys.
LED drivers need to implement a brightness_set function which the core
will call. Implement an intermediary in phy_device, which will call
into the phy driver if it implements the necessary function.
Signed-off-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
---
drivers/net/phy/phy_device.c | 14 +++++++++++---
include/linux/phy.h | 9 +++++++++
2 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 8acade42615c..e4df4fcb6b05 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -2967,11 +2967,18 @@ static bool phy_drv_supports_irq(struct phy_driver *phydrv)
return phydrv->config_intr && phydrv->handle_interrupt;
}
-/* Dummy implementation until calls into PHY driver are added */
static int phy_led_set_brightness(struct led_classdev *led_cdev,
enum led_brightness value)
{
- return 0;
+ struct phy_led *phyled = to_phy_led(led_cdev);
+ struct phy_device *phydev = phyled->phydev;
+ int err;
+
+ mutex_lock(&phydev->lock);
+ err = phydev->drv->led_brightness_set(phydev, phyled->index, value);
+ mutex_unlock(&phydev->lock);
+
+ return err;
}
static int of_phy_led(struct phy_device *phydev,
@@ -2995,7 +3002,8 @@ static int of_phy_led(struct phy_device *phydev,
if (err)
return err;
- cdev->brightness_set_blocking = phy_led_set_brightness;
+ if (phydev->drv->led_brightness_set)
+ cdev->brightness_set_blocking = phy_led_set_brightness;
cdev->max_brightness = 1;
init_data.devicename = dev_name(&phydev->mdio.dev);
init_data.fwnode = of_fwnode_handle(led);
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 1b1efe120f0f..83d3ed7485e0 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -841,6 +841,8 @@ struct phy_led {
u32 index;
};
+#define to_phy_led(d) container_of(d, struct phy_led, led_cdev)
+
/**
* struct phy_driver - Driver structure for a particular PHY type
*
@@ -1063,6 +1065,13 @@ struct phy_driver {
/** @get_plca_status: Return the current PLCA status info */
int (*get_plca_status)(struct phy_device *dev,
struct phy_plca_status *plca_st);
+
+ /* Set a PHY LED brightness. Index indicates which of the PHYs
+ * led should be set. Value follows the standard LED class meaning,
+ * e.g. LED_OFF, LED_HALF, LED_FULL.
+ */
+ int (*led_brightness_set)(struct phy_device *dev,
+ u32 index, enum led_brightness value);
};
#define to_phy_driver(d) container_of(to_mdio_common_driver(d), \
struct phy_driver, mdiodrv)
--
2.39.2
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2023-03-14 16:18 UTC|newest]
Thread overview: 51+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-14 10:15 [net-next PATCH v3 00/14] net: Add basic LED support for switch/phy Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 01/14] net: dsa: qca8k: move qca8k_port_to_phy() to header Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 02/14] net: dsa: qca8k: add LEDs basic support Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-15 0:22 ` Vladimir Oltean
2023-03-15 0:22 ` Vladimir Oltean
2023-03-14 10:15 ` [net-next PATCH v3 03/14] net: dsa: qca8k: add LEDs blink_set() support Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 04/14] net: phy: Add a binding for PHY LEDs Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-15 0:41 ` Vladimir Oltean
2023-03-15 0:41 ` Vladimir Oltean
2023-03-16 7:51 ` kernel test robot
2023-03-14 10:15 ` Christian Marangi [this message]
2023-03-14 10:15 ` [net-next PATCH v3 05/14] net: phy: phy_device: Call into the PHY driver to set LED brightness Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 06/14] net: phy: marvell: Add software control of the LEDs Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-15 0:44 ` Vladimir Oltean
2023-03-15 0:44 ` Vladimir Oltean
2023-03-15 1:48 ` Andrew Lunn
2023-03-15 1:48 ` Andrew Lunn
2023-03-14 10:15 ` [net-next PATCH v3 07/14] net: phy: phy_device: Call into the PHY driver to set LED blinking Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 08/14] net: phy: marvell: Implement led_blink_set() Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-15 0:46 ` Vladimir Oltean
2023-03-15 0:46 ` Vladimir Oltean
2023-03-14 10:15 ` [net-next PATCH v3 09/14] dt-bindings: net: dsa: dsa-port: Document support for LEDs node Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-15 0:50 ` Vladimir Oltean
2023-03-15 0:50 ` Vladimir Oltean
2023-03-15 1:58 ` Andrew Lunn
2023-03-15 1:58 ` Andrew Lunn
2023-03-15 3:28 ` Christian Marangi
2023-03-15 3:28 ` Christian Marangi
2023-03-17 21:13 ` Rob Herring
2023-03-17 21:13 ` Rob Herring
2023-03-14 10:15 ` [net-next PATCH v3 10/14] dt-bindings: net: dsa: qca8k: add LEDs definition example Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-15 0:51 ` Vladimir Oltean
2023-03-15 0:51 ` Vladimir Oltean
2023-03-14 10:15 ` [net-next PATCH v3 11/14] arm: qcom: dt: Drop unevaluated properties in switch nodes for rb3011 Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 12/14] arm: qcom: dt: Add Switch LED for each port " Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 13/14] dt-bindings: net: phy: Document support for LEDs node Christian Marangi
2023-03-14 10:15 ` Christian Marangi
2023-03-14 10:15 ` [net-next PATCH v3 14/14] arm: mvebu: dt: Add PHY LED support for 370-rd WAN port Christian Marangi
2023-03-14 10:15 ` Christian Marangi
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=20230314101516.20427-6-ansuelsmth@gmail.com \
--to=ansuelsmth@gmail.com \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=andrew@lunn.ch \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=f.fainelli@gmail.com \
--cc=gregory.clement@bootlin.com \
--cc=hkallweit1@gmail.com \
--cc=john@phrozen.org \
--cc=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=kuba@kernel.org \
--cc=lee@kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=olteanv@gmail.com \
--cc=pabeni@redhat.com \
--cc=robh+dt@kernel.org \
--cc=sebastian.hesselbarth@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.