On Mon, 9 Sep 2013, oliver@xxxxxxxxxx wrote: > From: Oliver Neukum <oneukum@xxxxxxx> > > Some systems although they have firmware class 'M', which usually > needs a work around to not crash, must not be subjected to the > work around because the work around crashes them. They cannot be > told apart by their own device descriptor, but as they are part > of compound devices can be identified by looking at their siblings. What a mess ... :/ > > Signed-off-by: Oliver Neukum <oneukum@xxxxxxx> > --- > drivers/hid/hid-elo.c | 35 ++++++++++++++++++++++++++++++++++- > 1 file changed, 34 insertions(+), 1 deletion(-) > > diff --git a/drivers/hid/hid-elo.c b/drivers/hid/hid-elo.c > index f042a6c..64ac53e 100644 > --- a/drivers/hid/hid-elo.c > +++ b/drivers/hid/hid-elo.c > @@ -181,7 +181,40 @@ fail: > */ > static bool elo_broken_firmware(struct usb_device *dev) > { > - return use_fw_quirk && le16_to_cpu(dev->descriptor.bcdDevice) == 0x10d; > + struct usb_device *hub = dev->parent; > + struct usb_device *child = NULL; > + u16 fw_lvl = le16_to_cpu(dev->descriptor.bcdDevice); > + u16 child_vid, child_pid; > + int i; > + > + if (!use_fw_quirk) > + return false; > + if (fw_lvl != 0x10d) > + return false; > + > + /*iterate sibling devices of the touch controller*/ Could you please resubmit with comment reformated (spaces before/after asterisk)? > + usb_hub_for_each_child(hub, i, child) { > + child_vid = le16_to_cpu(child->descriptor.idVendor); > + child_pid = le16_to_cpu(child->descriptor.idProduct); > + > + /* > + * If one of the devices below is present attached as a sibling of > + * the touch controller then this is a newer IBM 4820 monitor that > + * does not need the IBM-requested workaround if fw level is > + * 0x010d - aka 'M'. > + * No other HW can have this combination. > + */ > + if (child_vid==0x04b3) { > + switch (child_pid) { > + case 0x4676: /*4820 21x Video*/ > + case 0x4677: /*4820 51x Video*/ > + case 0x4678: /*4820 2Lx Video*/ > + case 0x4679: /*4820 5Lx Video*/ Here as well. Thanks, -- Jiri Kosina SUSE Labs -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html