Re: Naming of HID LED devices

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

 



On Thu, 20 May 2021 22:47:08 -0700
Roderick Colenbrander <thunderbird2k@xxxxxxxxx> wrote:

> Hi Benjamin and Marek,
> 
> Earlier this year during review of the hid-playstation driver there
> was a discussion on the naming of LEDs exposed by HID drivers. Moving
> forward the preference from the LED maintainers was to follow the
> naming scheme "device:color:function" instead of the custom names used
> so far by HID drivers.
> 
> I would like to get some guidance on the naming direction not just for
> hid-playstation, but Daniel's hid-nintendo driver for which he posted
> a new revision today has the same problem.
> 
> The original discussion was on "why not use the input device name?"
> (e.g. input15). It was concluded that it wouldn't uniquely identify a
> HID device among reasons.
> 
> One suggested approach by Benjamin was to use the sysfs unique name
> with the bus, vid, pid.. but without ":" or ".":
> > > > The unique ID of HID devices (in /sys/bus/hid/devices) is in
> > > > the form `BUS:VID:PID.XXXX`. I understand the need to not have
> > > > colons, so could we standardize LEDs on the HID subsystem to be
> > > > named `hid-bus_vid_pid_xxxx:color:fun(-n)?`? That would allow a
> > > > mapping between the LED and the sysfs, and would also allow
> > > > users to quickly filter out the playstation ones.  
> 
> Another approach mentioned was to invent some new ID and use a name
> like "hidN":
> > > So you are saying that the fact that userspace cannot take the
> > > number from "hidN" string and simply do a lookup
> > > /sys/bus/hid/devices/hidN is the problem here.
> > >
> > > This is not a problem in my opinion, because userspace can simply
> > > access the parent HID device via
> > > /sys/class/leds/hidN:color:func/parent.  
> >
> > So in that case, there is no real point at keeping this ID in sync
> > with anything else? I would be more willing to accept a patch in HID
> > core that keeps this ID just for HID LEDs, instead of adding just an
> > ID with no meaning to all HID devices.  
> 
> I'm not sure which approach would be prefered. A "hidN" approach would
> have little meaning perhaps, but looks pretty. While the
> "hid-bus_vid_pid_xxxx" has a real meaning, but looks less nice. Unless
> there is another approach as well.
> 
> Then there is the question on how to best generate these names. The
> "hidN" approach could leverage the XXXX id an store it internally
> (though it doesn't have a real meaning). If we only want to allocate
> such an ID for devices with LEDs then some flag would need to be
> passed back to hid-core. Not sure what the best way would be (almost a
> call like hid_hw_start as part of connect_mask unless there is a
> better way).
> 
> A hid-bus string is easier to create. Though even there is a question
> on how to do it. It would be wasteful to store it for each hid_device.
> It could be generated using a helper function out of
> "dev_name(hdev->dev)", though personally I dislike any string
> manipulation kernel side if it can be avoided. I would probably
> suggest to store "XXXX" in each hid_device struct and have users (so
> far would only be hid-nintendo and hid-playstation) generate the
> strings themselves for now. Again also not nice unless a
> "hid_device_name()" helper is desired then...

Since it was some time ago I don't quite remember what the exact
problem was with the suggestion I had about using the ID from the id
variable in hid_add_device() function in hid-core.c.

The code does:

  int hid_add_device(struct hid_device *hdev)
  {
    static atomic_t id = ATOMIC_INIT(0);
    ...
    dev_set_name(&hdev->dev, "%04X:%04X:%04X.%04X", hdev->bus,
                 hdev->vendor, hdev->product, atomic_inc_return(&id));
    ...
  }

The id variable is static and atomic, so it is unique for every
hid_device. Why cannot we use this?

Marek



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux