From: Pavel Machek <pavel@ucw.cz>
To: Roderick Colenbrander <roderick@gaikai.com>
Cc: Jiri Kosina <jikos@kernel.org>,
Benjamin Tissoires <benjamin.tissoires@redhat.com>,
linux-input@vger.kernel.org, linux-leds@vger.kernel.org,
"Daniel J . Ogorchock" <djogorchock@gmail.com>,
Roderick Colenbrander <roderick.colenbrander@sony.com>
Subject: Re: [PATCH v2 3/3] HID: playstation: expose DualSense player LEDs through LED class.
Date: Fri, 3 Sep 2021 18:17:32 +0200 [thread overview]
Message-ID: <20210903161724.GC2209@bug> (raw)
In-Reply-To: <20210901223037.2964665-4-roderick.colenbrander@sony.com>
Hi!
> The DualSense player LEDs were so far not adjustable from user-space.
> This patch exposes each LED individually through the LED class. Each
> LED uses the new 'player' function resulting in a name like:
> 'inputX:white:player-1' for the first LED.
>
>
> +struct ps_led_info {
...
> + enum led_brightness (*brightness_get)(struct led_classdev *cdev);
> + void (*brightness_set)(struct led_classdev *cdev, enum led_brightness);
> +};
Do you need these fields? They are constant in the driver...
> +static enum led_brightness dualsense_player_led_get_brightness(struct led_classdev *led)
> +{
> + struct hid_device *hdev = to_hid_device(led->dev->parent);
> + struct dualsense *ds = hid_get_drvdata(hdev);
> +
> + return !!(ds->player_leds_state & BIT(led - ds->player_leds));
> +}
You should not need to implement get if all it does is returning cached state.
> +static void dualsense_player_led_set_brightness(struct led_classdev *led, enum led_brightness value)
> +{
> + struct hid_device *hdev = to_hid_device(led->dev->parent);
> + struct dualsense *ds = hid_get_drvdata(hdev);
> + unsigned long flags;
> + unsigned int led_index;
> +
> + spin_lock_irqsave(&ds->base.lock, flags);
> +
> + led_index = led - ds->player_leds;
> + if (value == LED_OFF)
> + ds->player_leds_state &= ~BIT(led_index);
> + else
> + ds->player_leds_state |= BIT(led_index);
> +
> + ds->update_player_leds = true;
> + spin_unlock_irqrestore(&ds->base.lock, flags);
> +
> + schedule_work(&ds->output_worker);
> +}
LED core can handle scheduling the work for you. You should use it, in similar
way you handle the RGB led.
Best regards,
Pavel
--
(english) http://www.livejournal.com/~pavelmachek
(cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html
next prev parent reply other threads:[~2021-09-03 16:17 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-09-01 22:30 [PATCH v2 0/3] HID: playstation: add LED support Roderick Colenbrander
2021-09-01 22:30 ` [PATCH v2 1/3] HID: playstation: expose DualSense lightbar through a multi-color LED Roderick Colenbrander
2021-09-03 16:16 ` Pavel Machek
2021-09-01 22:30 ` [PATCH v2 2/3] leds: add new LED_FUNCTION_PLAYER for player LEDs for game controllers Roderick Colenbrander
2021-09-03 16:17 ` Pavel Machek
2021-09-08 10:23 ` Jiri Kosina
2021-09-01 22:30 ` [PATCH v2 3/3] HID: playstation: expose DualSense player LEDs through LED class Roderick Colenbrander
2021-09-03 16:17 ` Pavel Machek [this message]
2021-09-07 5:28 ` Roderick Colenbrander
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=20210903161724.GC2209@bug \
--to=pavel@ucw.cz \
--cc=benjamin.tissoires@redhat.com \
--cc=djogorchock@gmail.com \
--cc=jikos@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=roderick.colenbrander@sony.com \
--cc=roderick@gaikai.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.