From: Alexander Dahl <ada@thorsis.com>
To: "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>
Cc: Pavel Machek <pavel@ucw.cz>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
linux-leds@vger.kernel.org, kernel@pengutronix.de
Subject: Re: [PATCH] leds: trigger/tty: Add knob to blink only for tx or only for rx
Date: Thu, 23 Feb 2023 16:17:12 +0100 [thread overview]
Message-ID: <Y/eDeEi1tekYodGW@ada.ifak-system.com> (raw)
In-Reply-To: <20220224155655.702255-1-u.kleine-koenig@pengutronix.de>
Hei hei,
Am Thu, Feb 24, 2022 at 04:56:55PM +0100 schrieb Uwe Kleine-König:
> The newly introduced "triggerevent" attribute allows to restrict
> blinking to TX or RX only.
>
> Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
This patch has not been merged, has it?
What's the state of it? Fell through the cracks or denied?
I'd have a usecase for it. O:-)
Greets
Alex
> ---
> .../ABI/testing/sysfs-class-led-trigger-tty | 9 +++
> drivers/leds/trigger/ledtrig-tty.c | 60 ++++++++++++++++++-
> 2 files changed, 67 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/ABI/testing/sysfs-class-led-trigger-tty b/Documentation/ABI/testing/sysfs-class-led-trigger-tty
> index 2bf6b24e781b..27532f685b0d 100644
> --- a/Documentation/ABI/testing/sysfs-class-led-trigger-tty
> +++ b/Documentation/ABI/testing/sysfs-class-led-trigger-tty
> @@ -4,3 +4,12 @@ KernelVersion: 5.10
> Contact: linux-leds@vger.kernel.org
> Description:
> Specifies the tty device name of the triggering tty
> +
> +What: /sys/class/leds/<led>/triggerevent
> +Date: Feb 2022
> +KernelVersion: 5.18
> +Contact: linux-leds@vger.kernel.org
> +Description:
> + Can contain "tx', "rx" (to only blink on transfers
> + in the specified direction) or "both" (to blink for
> + both directions.)
> diff --git a/drivers/leds/trigger/ledtrig-tty.c b/drivers/leds/trigger/ledtrig-tty.c
> index f62db7e520b5..f87877ca48d4 100644
> --- a/drivers/leds/trigger/ledtrig-tty.c
> +++ b/drivers/leds/trigger/ledtrig-tty.c
> @@ -14,6 +14,7 @@ struct ledtrig_tty_data {
> const char *ttyname;
> struct tty_struct *tty;
> int rx, tx;
> + bool handle_rx, handle_tx;
> };
>
> static void ledtrig_tty_restart(struct ledtrig_tty_data *trigger_data)
> @@ -76,6 +77,57 @@ static ssize_t ttyname_store(struct device *dev,
> }
> static DEVICE_ATTR_RW(ttyname);
>
> +static ssize_t triggerevent_show(struct device *dev,
> + struct device_attribute *attr, char *buf)
> +{
> + struct ledtrig_tty_data *trigger_data = led_trigger_get_drvdata(dev);
> + ssize_t len = 0;
> +
> + mutex_lock(&trigger_data->mutex);
> +
> + if (trigger_data->handle_tx && trigger_data->handle_rx)
> + len = sprintf(buf, "both\n");
> + else if (trigger_data->handle_tx)
> + len = sprintf(buf, "tx\n");
> + else
> + len = sprintf(buf, "rx\n");
> +
> + mutex_unlock(&trigger_data->mutex);
> +
> + return len;
> +}
> +
> +static ssize_t triggerevent_store(struct device *dev,
> + struct device_attribute *attr,
> + const char *buf, size_t size)
> +{
> + struct ledtrig_tty_data *trigger_data = led_trigger_get_drvdata(dev);
> + ssize_t ret = size;
> +
> + if (size > 0 && buf[size - 1] == '\n')
> + size -= 1;
> +
> + mutex_lock(&trigger_data->mutex);
> +
> + if (!strncmp(buf, "both", size)) {
> + trigger_data->handle_tx = true;
> + trigger_data->handle_rx = true;
> + } else if (!strncmp(buf, "tx", size)) {
> + trigger_data->handle_tx = true;
> + trigger_data->handle_rx = false;
> + } else if (!strncmp(buf, "rx", size)) {
> + trigger_data->handle_tx = false;
> + trigger_data->handle_rx = true;
> + } else {
> + ret = -EINVAL;
> + }
> +
> + mutex_unlock(&trigger_data->mutex);
> +
> + return ret;
> +}
> +static DEVICE_ATTR_RW(triggerevent);
> +
> static void ledtrig_tty_work(struct work_struct *work)
> {
> struct ledtrig_tty_data *trigger_data =
> @@ -120,8 +172,8 @@ static void ledtrig_tty_work(struct work_struct *work)
> return;
> }
>
> - if (icount.rx != trigger_data->rx ||
> - icount.tx != trigger_data->tx) {
> + if ((icount.rx != trigger_data->rx && trigger_data->handle_rx) ||
> + (icount.tx != trigger_data->tx && trigger_data->handle_tx)) {
> led_set_brightness_sync(trigger_data->led_cdev, LED_ON);
>
> trigger_data->rx = icount.rx;
> @@ -137,6 +189,7 @@ static void ledtrig_tty_work(struct work_struct *work)
>
> static struct attribute *ledtrig_tty_attrs[] = {
> &dev_attr_ttyname.attr,
> + &dev_attr_triggerevent.attr,
> NULL
> };
> ATTRIBUTE_GROUPS(ledtrig_tty);
> @@ -155,6 +208,9 @@ static int ledtrig_tty_activate(struct led_classdev *led_cdev)
> trigger_data->led_cdev = led_cdev;
> mutex_init(&trigger_data->mutex);
>
> + trigger_data->handle_tx = true;
> + trigger_data->handle_rx = true;
> +
> return 0;
> }
>
> --
> 2.34.1
>
next prev parent reply other threads:[~2023-02-23 15:23 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-02-24 15:56 [PATCH] leds: trigger/tty: Add knob to blink only for tx or only for rx Uwe Kleine-König
2022-02-25 9:32 ` Alexander Dahl
2022-02-25 9:46 ` Uwe Kleine-König
2022-04-20 16:29 ` Uwe Kleine-König
2022-05-04 17:23 ` Pavel Machek
2023-02-23 15:17 ` Alexander Dahl [this message]
2023-02-23 20:00 ` Pavel Machek
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=Y/eDeEi1tekYodGW@ada.ifak-system.com \
--to=ada@thorsis.com \
--cc=gregkh@linuxfoundation.org \
--cc=kernel@pengutronix.de \
--cc=linux-leds@vger.kernel.org \
--cc=pavel@ucw.cz \
--cc=u.kleine-koenig@pengutronix.de \
/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.