Re: [PATCH] leds: trigger/tty: Add knob to blink only for tx or only for rx

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxxxxxx>

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@xxxxxxxxxxxxxxx
>  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@xxxxxxxxxxxxxxx
> +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
> 



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux