* [PATCH 1/2] Add support to hid2hci for recovering Dell BT devices
@ 2009-07-16 21:37 Mario Limonciello
2009-07-24 16:27 ` Kay Sievers
2009-07-27 21:19 ` Mario Limonciello
0 siblings, 2 replies; 3+ messages in thread
From: Mario Limonciello @ 2009-07-16 21:37 UTC (permalink / raw)
To: linux-hotplug
[-- Attachment #1.1: Type: text/plain, Size: 423 bytes --]
Hi:
Attached is the first of two follow up patches to the original thread
titled "Explicitly disable BT radio using rfkill interface on suspend".
This patch adds support for finding the child device to poke. It
addresses previous feedback that more pointers needed to be added to
find_resuscitated_device for readability.
Regards
--
Mario Limonciello
*Dell | Linux Engineering*
mario_limonciello@dell.com
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: resuscitate.patch --]
[-- Type: text/x-patch; name="resuscitate.patch", Size: 3784 bytes --]
=== modified file 'extras/hid2hci/70-hid2hci.rules'
--- extras/hid2hci/70-hid2hci.rules 2009-06-26 06:17:23 +0000
+++ extras/hid2hci/70-hid2hci.rules 2009-07-15 22:50:01 +0000
@@ -11,6 +11,11 @@
ATTR{bInterfaceClass}=="03", ATTR{bInterfaceSubClass}=="01", ATTR{bInterfaceProtocol}=="02", ATTRS{bDeviceClass}=="00", ATTRS{idVendor}=="413c", ATTRS{bmAttributes}=="e0", \
RUN+="hid2hci --method dell -v $attr{idVendor} -p $attr{idProduct} --mode hci"
+# When a Dell device recovers from S3, the mouse child needs to be repoked
+# Unfortunately the only event seen is the BT device disappearing, so the mouse
+# device needs to be chased down on the USB bus.
+ATTR{bDeviceClass}=="e0", ATTR{bDeviceSubClass}=="01", ATTR{bDeviceProtocol}=="01", ATTR{idVendor}=="413c", ATTR{bmAttributes}=="e0", IMPORT{parent}="ID_*", ENV{REMOVE_CMD}="hid2hci --method dell -v $env{ID_VENDOR_ID} -p $env{ID_MODEL_ID} --mode hci -s 02"
+
ENV{DEVTYPE}!="usb_device", GOTO="hid2hci_end"
# Logitech devices
=== modified file 'extras/hid2hci/hid2hci.c'
--- extras/hid2hci/hid2hci.c 2009-06-16 17:30:22 +0000
+++ extras/hid2hci/hid2hci.c 2009-07-15 22:51:01 +0000
@@ -271,6 +271,36 @@
return 0;
}
+static int find_resuscitated_device(struct device_info* devinfo, uint8_t bInterfaceProtocol)
+{
+ int i,j,k,l;
+ struct usb_device *dev, *child;
+ struct usb_config_descriptor config;
+ struct usb_interface interface;
+ struct usb_interface_descriptor altsetting;
+
+ /* Using the base device, attempt to find the child with the
+ * matching bInterfaceProtocol */
+ dev = devinfo->dev;
+ for (i = 0; i < dev->num_children; i++) {
+ child = dev->children[i];
+ for (j = 0; j < child->descriptor.bNumConfigurations; j++) {
+ config = child->config[j];
+ for (k = 0; k < config.bNumInterfaces; k++) {
+ interface = config.interface[k];
+ for (l = 0; l < interface.num_altsetting; l++) {
+ altsetting = interface.altsetting[l];
+ if (altsetting.bInterfaceProtocol == bInterfaceProtocol) {
+ devinfo->dev = child;
+ return 1;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+}
+
static void usage(char* error)
{
if (error)
@@ -289,6 +319,7 @@
"\t-v, --vendor= Vendor ID to act upon\n"
"\t-p, --product= Product ID to act upon\n"
"\t-m, --method= Method to use to switch [csr, logitech, dell]\n"
+ "\t-s, --resuscitate= Find the child device with this bInterfaceProtocol to run on \n"
"\n");
if (error)
exit(1);
@@ -301,6 +332,7 @@
{ "vendor", required_argument, 0, 'v' },
{ "product", required_argument, 0, 'p' },
{ "method", required_argument, 0, 'm' },
+ { "resuscitate",required_argument, 0, 's' },
{ 0, 0, 0, 0 }
};
@@ -309,8 +341,9 @@
struct device_info dev = { NULL, HCI, 0, 0 };
int opt, quiet = 0;
int (*method)(struct device_info *dev) = NULL;
+ uint8_t resuscitate = 0;
- while ((opt = getopt_long(argc, argv, "+r:v:p:m:qh", main_options, NULL)) != -1) {
+ while ((opt = getopt_long(argc, argv, "+s:r:v:p:m:qh", main_options, NULL)) != -1) {
switch (opt) {
case 'r':
if (optarg && !strcmp(optarg, "hid"))
@@ -339,6 +372,9 @@
case 'q':
quiet = 1;
break;
+ case 's':
+ sscanf(optarg, "%2hx", (short unsigned int*) &resuscitate);
+ break;
case 'h':
usage(NULL);
default:
@@ -362,6 +398,13 @@
exit(1);
}
+ if (resuscitate && !find_resuscitated_device(&dev, resuscitate)) {
+ if (!quiet)
+ fprintf(stderr, "Device %04x:%04x was unable to resucitate any child devices.\n",
+ dev.vendor,dev.product);
+ exit(1);
+ }
+
if (!quiet)
printf("Attempting to switch device %04x:%04x to %s mode ",
dev.vendor, dev.product, dev.mode ? "HID" : "HCI");
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] Add support to hid2hci for recovering Dell BT devices
2009-07-16 21:37 [PATCH 1/2] Add support to hid2hci for recovering Dell BT devices Mario Limonciello
@ 2009-07-24 16:27 ` Kay Sievers
2009-07-27 21:19 ` Mario Limonciello
1 sibling, 0 replies; 3+ messages in thread
From: Kay Sievers @ 2009-07-24 16:27 UTC (permalink / raw)
To: linux-hotplug
On Thu, Jul 16, 2009 at 23:37, Mario
Limonciello<mario_limonciello@dell.com> wrote:
> Attached is the first of two follow up patches to the original thread
> titled "Explicitly disable BT radio using rfkill interface on suspend".
> This patch adds support for finding the child device to poke. Â It
> addresses previous feedback that more pointers needed to be added to
> find_resuscitated_device for readability.
I replaced all the conceptually wrong things, with, i guess,
*actually* broken rules and code. :)
Details are in the git log:
http://git.kernel.org/?p=linux/hotplug/udev.git;a=commitdiff;hK6769f61206e90850aff8a30e8e93fbfcc18673
I don't have the hardware to test. Please check the new logic, and fix
it that it works again. If we can not get it running this way, we need
to fix it even more - or if we don't get it fixed before the next
release, we need to remove it from udev until we have a properly
working version.
Sorry for all the inconvenience, but we have to get it right, the
stuff we ship with udev itself. People will copy things from here to
start their own projects, and they have to work properly for that
reason.
Thanks,
Kay
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 1/2] Add support to hid2hci for recovering Dell BT devices
2009-07-16 21:37 [PATCH 1/2] Add support to hid2hci for recovering Dell BT devices Mario Limonciello
2009-07-24 16:27 ` Kay Sievers
@ 2009-07-27 21:19 ` Mario Limonciello
1 sibling, 0 replies; 3+ messages in thread
From: Mario Limonciello @ 2009-07-27 21:19 UTC (permalink / raw)
To: linux-hotplug
[-- Attachment #1: Type: text/plain, Size: 1281 bytes --]
Hi Kay:
Kay Sievers wrote:
> On Thu, Jul 16, 2009 at 23:37, Mario
> Limonciello<mario_limonciello@dell.com> wrote:
>
>
> I replaced all the conceptually wrong things, with, i guess,
> *actually* broken rules and code. :)
> Details are in the git log:
> http://git.kernel.org/?p=linux/hotplug/udev.git;a=commitdiff;h=4b6769f61206e90850aff8a30e8e93fbfcc18673
>
>
Thanks for cleaning that up.
> I don't have the hardware to test. Please check the new logic, and fix
> it that it works again. If we can not get it running this way, we need
> to fix it even more - or if we don't get it fixed before the next
> release, we need to remove it from udev until we have a properly
> working version.
>
From testing this, there are two things that needed to be fixed. I'll
follow up with two patches in separate threads so that discussions can
pursue from there.
> Sorry for all the inconvenience, but we have to get it right, the
> stuff we ship with udev itself. People will copy things from here to
> start their own projects, and they have to work properly for that
> reason.
>
I understand, and I'd much like to make sure everyone involved here is
happy.
--
Mario Limonciello
*Dell | Linux Engineering*
mario_limonciello@dell.com
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2009-07-27 21:19 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-07-16 21:37 [PATCH 1/2] Add support to hid2hci for recovering Dell BT devices Mario Limonciello
2009-07-24 16:27 ` Kay Sievers
2009-07-27 21:19 ` Mario Limonciello
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).