All of lore.kernel.org
 help / color / mirror / Atom feed
From: oliver@neukum.org
To: linux-usb@vger.kernel.org, linux-input@vger.kernel.org,
	jkosina@suse.cz, jslaby@suse.cz
Cc: Oliver Neukum <oneukum@suse.de>
Subject: [PATCH] hid-elo: some systems cannot stomach work around
Date: Mon,  9 Sep 2013 12:16:59 +0200	[thread overview]
Message-ID: <1378721819-26479-1-git-send-email-oliver@neukum.org> (raw)

From: Oliver Neukum <oneukum@suse.de>

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.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
---
 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*/
+	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*/
+				return false;
+			}
+		}
+	}
+	return true;
 }
 
 static int elo_probe(struct hid_device *hdev, const struct hid_device_id *id)
-- 
1.8.3.1


             reply	other threads:[~2013-09-09 10:17 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-09 10:16 oliver [this message]
2013-09-24 10:08 ` [PATCH] hid-elo: some systems cannot stomach work around Jiri Kosina
2013-09-25  7:42 oliver
     [not found] ` <1380094975-4481-1-git-send-email-oliver-GvhC2dPhHPQdnm+yROfE0A@public.gmane.org>
2013-09-25  9:29   ` Jiri Kosina

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=1378721819-26479-1-git-send-email-oliver@neukum.org \
    --to=oliver@neukum.org \
    --cc=jkosina@suse.cz \
    --cc=jslaby@suse.cz \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=oneukum@suse.de \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.