linux-hotplug.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [HACK] Give hiddev a device link in sysfs
@ 2003-12-16  0:32 Adam Kropelin
  2003-12-22 20:42 ` Greg KH
  2003-12-23  1:47 ` Adam Kropelin
  0 siblings, 2 replies; 3+ messages in thread
From: Adam Kropelin @ 2003-12-16  0:32 UTC (permalink / raw)
  To: linux-hotplug

I have a bunch of USB interface UPSes which are managed via the hiddev
interface. Recently I've been working on setting up a dedicated server
to manage them all. I'd like to use udev to manage the device nodes so
that I can have consistent naming no matter what USB port a particular
UPS happens to be plugged into. They have unique serial numbers, so a
udev.rules LABEL entry seemed the appropriate thing to do.

It didn't work. Eventually I tracked it to a bad device link in sysfs
(/sys/class/usb/hiddevN/device). Further investigation showed that the
broken link is due to hiddev's being not-quite-a-usb-device and having a
zero kobj with no parent, etc.

I cooked up the hack-job patch below and it seems to be working. Clearly
this isn't the right solution, but it's a starting point and it solves
my immediate need.

Bearing in mind that I'm a kobj newbie, can anyone suggest what the
right approach is to solve this problem? Do we actually want to grow a
legitimate kobj for the hiddev and register it? Comments in the code
imply that hiddev could eventually be severed from usb altogether. Is
there a shorter term solution that is workable?

Thanks for you input...
--Adam


--- linux-2.6.0-test11/drivers/usb/input/hiddev.c	Fri Oct 17 23:23:08 2003
+++ linux-2.6.0-test11-bk8/drivers/usb/input/hiddev.c	Mon Dec 15 19:05:19 2003
@@ -234,6 +234,7 @@
 static void hiddev_cleanup(struct hiddev *hiddev)
 {
 	usb_deregister_dev(&hiddev->intf, &hiddev_class);
+	kobject_put(hiddev->intf.dev.kobj.parent);
 	hiddev_table[hiddev->minor] = NULL;
 	kfree(hiddev);
 }
@@ -724,6 +725,14 @@
 		return -1;
 	memset(hiddev, 0, sizeof(struct hiddev));
 
+	strcpy(hiddev->intf.dev.kobj.name, hid->dev->dev.kobj.name);
+	kobject_get(hid->dev->dev.kobj.parent);
+	hiddev->intf.dev.kobj.parent = hid->dev->dev.kobj.parent;
+	hiddev->intf.dev.kobj.kset = NULL;
+	hiddev->intf.dev.kobj.ktype = NULL;
+	hiddev->intf.dev.kobj.dentry = NULL;
+	kobject_init(&hiddev->intf.dev.kobj);
+
  	retval = usb_register_dev(&hiddev->intf, &hiddev_class);
 	if (retval) {
 		err("Not able to get a minor for this device.");



-------------------------------------------------------
This SF.net email is sponsored by: IBM Linux Tutorials.
Become an expert in LINUX or just sharpen your skills.  Sign up for IBM's
Free Linux Tutorials.  Learn everything from the bash shell to sys admin.
Click now! http://ads.osdn.com/?ad_id\x1278&alloc_id371&op=click
_______________________________________________
Linux-hotplug-devel mailing list  http://linux-hotplug.sourceforge.net
Linux-hotplug-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2003-12-23  1:47 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2003-12-16  0:32 [HACK] Give hiddev a device link in sysfs Adam Kropelin
2003-12-22 20:42 ` Greg KH
2003-12-23  1:47 ` Adam Kropelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).