public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Adam Nielsen <a.nielsen@shikadi.net>
To: Jiri Slaby <jirislaby@gmail.com>
Cc: LKML Mailinglist <linux-kernel@vger.kernel.org>
Subject: hid class and sysfs/hwmon (was: led and hid class - hid_device vs led_classdev)
Date: Sat, 08 Nov 2008 16:18:54 +1000	[thread overview]
Message-ID: <49152F4E.5040003@shikadi.net> (raw)
In-Reply-To: <4910C32F.9060204@gmail.com>

>> static void my_led_set(struct led_classdev *led_cdev,
>>   enum led_brightness value)
>> {
>>   /* How do I get my_data back? */
>> }
>>
> 
> my_led should by part of my_data, then you do
> my_data = container_of(led_cdev, /*typeof(my_data)*/, my_led);

That did the trick, thanks!  I hadn't realised what container_of() was 
meant to be for - that's quite a useful little macro!

I got that working (can switch the LED on and off via the led device) 
but now I'm stuck trying to implement a hwmon interface for the device's 
sensors.

As far as I can tell I'm doing everything fine, but for some reason the 
hwmon interface gets created but with no files inside it (apart from a 
few defaults.)  It's supposed to have files like "temp1_input" to report 
temperatures, but these files never appear.

The only thing that I'm unsure of is the first parameter to 
sysfs_create_group().  All the other drivers use something like 
i2c_client.dev.kobj or platform_device.dev.kobj, but I'm using 
hid_device.dev.kobj.  I'm guessing that should work just as well, but I 
can't figure out why else the sysfs files never appear in the new hwmon 
folder in /sys/class/hwmon/

Here is the code so far, if it's useful: (I've omitted all the error 
checking code for clarity, all the functions called here return success)

--------------------------------------------
static SENSOR_DEVICE_ATTR(temp1_input, S_IRUGO, show_temp, NULL, 0);

static struct attribute *odin_attributes[] = {
   &sensor_dev_attr_temp1_input.dev_attr.attr,
   NULL
};

static const struct attribute_group odin_attr_group = {
   .attrs = odin_attributes,
};

static int odin_probe(struct hid_device *hdev,
   const struct hid_device_id *id)
{
   hid_parse(hdev);
   hid_hw_start(hdev, HID_CONNECT_DEFAULT);

   odin_psu = kzalloc(sizeof(struct odin_psu_device), GFP_KERNEL);
   odin_psu->hdev = hdev;

   hid_set_drvdata(hdev, odin_psu);

   sysfs_create_group(&hdev->dev.kobj, &odin_attr_group);
   odin_psu->hwmon_dev = hwmon_device_register(&hdev->dev);

   return 0;
}
--------------------------------------------
$ ls /sys/class/hwmon/hwmon5/
total 0
drwxr-xr-x 3 root root    0 2008-11-08 14:50 .
drwxr-xr-x 8 root root    0 2008-11-08 14:50 ..
lrwxrwxrwx 1 root root    0 2008-11-08 14:50 device -> 
../../../devices/pci0000:00/0000:00:1d.2/usb8/8-1/8-1:1.0/0003:1044:4001.0001
drwxr-xr-x 2 root root    0 2008-11-08 14:50 power
lrwxrwxrwx 1 root root    0 2008-11-08 14:50 subsystem -> ../../hwmon
-rw-r--r-- 1 root root 4.0K 2008-11-08 14:50 uevent
--------------------------------------------

If anyone can see why this might result in no sysfs files, please let me 
know!  I previously had most of this code working with a platform_device 
instead of the hid_device, which is what makes me wonder about 
hdev->dev.kobj.  (Not sure how to test if that variable is accurate, 
either.)  Or perhaps it has already been used elsewhere and it can only 
be used once?

Thanks,
Adam.

  reply	other threads:[~2008-11-08  6:19 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-11-04  7:51 led and hid class - hid_device vs led_classdev Adam Nielsen
2008-11-04 21:48 ` Jiri Slaby
2008-11-08  6:18   ` Adam Nielsen [this message]
2008-11-08 14:16     ` hid class and sysfs/hwmon Jiri Slaby
2008-11-08 21:45       ` Adam Nielsen
2008-11-08 21:51         ` Jiri Slaby
2008-11-08 22:02           ` Adam Nielsen

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=49152F4E.5040003@shikadi.net \
    --to=a.nielsen@shikadi.net \
    --cc=jirislaby@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox