All of lore.kernel.org
 help / color / mirror / Atom feed
From: <gregkh@linuxfoundation.org>
To: sumit.semwal@linaro.org, alexander.levin@verizon.com,
	gregkh@linuxfoundation.org, henrik.ingo@avoinelama.fi,
	laurent.pinchart@ideasonboard.com, mchehab@s-opensource.com
Cc: <stable@vger.kernel.org>, <stable-commits@vger.kernel.org>
Subject: Patch "uvcvideo: uvc_scan_fallback() for webcams with broken chain" has been added to the 4.4-stable tree
Date: Tue, 28 Mar 2017 14:13:31 +0200	[thread overview]
Message-ID: <149070321111695@kroah.com> (raw)
In-Reply-To: <1490458699-24484-17-git-send-email-sumit.semwal@linaro.org>


This is a note to let you know that I've just added the patch titled

    uvcvideo: uvc_scan_fallback() for webcams with broken chain

to the 4.4-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     uvcvideo-uvc_scan_fallback-for-webcams-with-broken-chain.patch
and it can be found in the queue-4.4 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@vger.kernel.org> know about it.


>From foo@baz Tue Mar 28 13:59:27 CEST 2017
From: Sumit Semwal <sumit.semwal@linaro.org>
Date: Sat, 25 Mar 2017 21:48:16 +0530
Subject: uvcvideo: uvc_scan_fallback() for webcams with broken chain
To: stable@vger.kernel.org
Cc: Henrik Ingo <henrik.ingo@avoinelama.fi>, Laurent Pinchart <laurent.pinchart@ideasonboard.com>, Mauro Carvalho Chehab <mchehab@s-opensource.com>, Sasha Levin <alexander.levin@verizon.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Sumit Semwal <sumit.semwal@linaro.org>
Message-ID: <1490458699-24484-17-git-send-email-sumit.semwal@linaro.org>

From: Sumit Semwal <sumit.semwal@linaro.org>


From: Henrik Ingo <henrik.ingo@avoinelama.fi>

[ Upstream commit e950267ab802c8558f1100eafd4087fd039ad634 ]

Some devices have invalid baSourceID references, causing uvc_scan_chain()
to fail, but if we just take the entities we can find and put them
together in the most sensible chain we can think of, turns out they do
work anyway. Note: This heuristic assumes there is a single chain.

At the time of writing, devices known to have such a broken chain are
  - Acer Integrated Camera (5986:055a)
  - Realtek rtl157a7 (0bda:57a7)

Signed-off-by: Henrik Ingo <henrik.ingo@avoinelama.fi>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Signed-off-by: Sasha Levin <alexander.levin@verizon.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
---
 drivers/media/usb/uvc/uvc_driver.c |  118 +++++++++++++++++++++++++++++++++++--
 1 file changed, 112 insertions(+), 6 deletions(-)

--- a/drivers/media/usb/uvc/uvc_driver.c
+++ b/drivers/media/usb/uvc/uvc_driver.c
@@ -1595,6 +1595,114 @@ static const char *uvc_print_chain(struc
 	return buffer;
 }
 
+static struct uvc_video_chain *uvc_alloc_chain(struct uvc_device *dev)
+{
+	struct uvc_video_chain *chain;
+
+	chain = kzalloc(sizeof(*chain), GFP_KERNEL);
+	if (chain == NULL)
+		return NULL;
+
+	INIT_LIST_HEAD(&chain->entities);
+	mutex_init(&chain->ctrl_mutex);
+	chain->dev = dev;
+	v4l2_prio_init(&chain->prio);
+
+	return chain;
+}
+
+/*
+ * Fallback heuristic for devices that don't connect units and terminals in a
+ * valid chain.
+ *
+ * Some devices have invalid baSourceID references, causing uvc_scan_chain()
+ * to fail, but if we just take the entities we can find and put them together
+ * in the most sensible chain we can think of, turns out they do work anyway.
+ * Note: This heuristic assumes there is a single chain.
+ *
+ * At the time of writing, devices known to have such a broken chain are
+ *  - Acer Integrated Camera (5986:055a)
+ *  - Realtek rtl157a7 (0bda:57a7)
+ */
+static int uvc_scan_fallback(struct uvc_device *dev)
+{
+	struct uvc_video_chain *chain;
+	struct uvc_entity *iterm = NULL;
+	struct uvc_entity *oterm = NULL;
+	struct uvc_entity *entity;
+	struct uvc_entity *prev;
+
+	/*
+	 * Start by locating the input and output terminals. We only support
+	 * devices with exactly one of each for now.
+	 */
+	list_for_each_entry(entity, &dev->entities, list) {
+		if (UVC_ENTITY_IS_ITERM(entity)) {
+			if (iterm)
+				return -EINVAL;
+			iterm = entity;
+		}
+
+		if (UVC_ENTITY_IS_OTERM(entity)) {
+			if (oterm)
+				return -EINVAL;
+			oterm = entity;
+		}
+	}
+
+	if (iterm == NULL || oterm == NULL)
+		return -EINVAL;
+
+	/* Allocate the chain and fill it. */
+	chain = uvc_alloc_chain(dev);
+	if (chain == NULL)
+		return -ENOMEM;
+
+	if (uvc_scan_chain_entity(chain, oterm) < 0)
+		goto error;
+
+	prev = oterm;
+
+	/*
+	 * Add all Processing and Extension Units with two pads. The order
+	 * doesn't matter much, use reverse list traversal to connect units in
+	 * UVC descriptor order as we build the chain from output to input. This
+	 * leads to units appearing in the order meant by the manufacturer for
+	 * the cameras known to require this heuristic.
+	 */
+	list_for_each_entry_reverse(entity, &dev->entities, list) {
+		if (entity->type != UVC_VC_PROCESSING_UNIT &&
+		    entity->type != UVC_VC_EXTENSION_UNIT)
+			continue;
+
+		if (entity->num_pads != 2)
+			continue;
+
+		if (uvc_scan_chain_entity(chain, entity) < 0)
+			goto error;
+
+		prev->baSourceID[0] = entity->id;
+		prev = entity;
+	}
+
+	if (uvc_scan_chain_entity(chain, iterm) < 0)
+		goto error;
+
+	prev->baSourceID[0] = iterm->id;
+
+	list_add_tail(&chain->list, &dev->chains);
+
+	uvc_trace(UVC_TRACE_PROBE,
+		  "Found a video chain by fallback heuristic (%s).\n",
+		  uvc_print_chain(chain));
+
+	return 0;
+
+error:
+	kfree(chain);
+	return -EINVAL;
+}
+
 /*
  * Scan the device for video chains and register video devices.
  *
@@ -1617,15 +1725,10 @@ static int uvc_scan_device(struct uvc_de
 		if (term->chain.next || term->chain.prev)
 			continue;
 
-		chain = kzalloc(sizeof(*chain), GFP_KERNEL);
+		chain = uvc_alloc_chain(dev);
 		if (chain == NULL)
 			return -ENOMEM;
 
-		INIT_LIST_HEAD(&chain->entities);
-		mutex_init(&chain->ctrl_mutex);
-		chain->dev = dev;
-		v4l2_prio_init(&chain->prio);
-
 		term->flags |= UVC_ENTITY_FLAG_DEFAULT;
 
 		if (uvc_scan_chain(chain, term) < 0) {
@@ -1639,6 +1742,9 @@ static int uvc_scan_device(struct uvc_de
 		list_add_tail(&chain->list, &dev->chains);
 	}
 
+	if (list_empty(&dev->chains))
+		uvc_scan_fallback(dev);
+
 	if (list_empty(&dev->chains)) {
 		uvc_printk(KERN_INFO, "No valid video chain found.\n");
 		return -1;


Patches currently in stable-queue which might be from sumit.semwal@linaro.org are

queue-4.4/pci-add-comments-about-rom-bar-updating.patch
queue-4.4/acpi-blacklist-make-dell-latitude-3350-ethernet-work.patch
queue-4.4/s390-zcrypt-introduce-cex6-toleration.patch
queue-4.4/block-allow-write_same-commands-with-the-sg_io-ioctl.patch
queue-4.4/pci-do-any-vf-bar-updates-before-enabling-the-bars.patch
queue-4.4/x86-hyperv-handle-unknown-nmis-on-one-cpu-when-unknown_nmi_panic.patch
queue-4.4/serial-8250_pci-detach-low-level-driver-during-pci-error-recovery.patch
queue-4.4/xen-do-not-re-use-pirq-number-cached-in-pci-device-msi-msg-data.patch
queue-4.4/pci-separate-vf-bar-updates-from-standard-bar-updates.patch
queue-4.4/pci-ignore-bar-updates-on-virtual-functions.patch
queue-4.4/pci-update-bars-using-property-bits-appropriate-for-type.patch
queue-4.4/vfio-spapr-postpone-allocation-of-userspace-version-of-tce-table.patch
queue-4.4/pci-don-t-update-vf-bars-while-vf-memory-space-is-enabled.patch
queue-4.4/igb-workaround-for-igb-i210-firmware-issue.patch
queue-4.4/pci-remove-pci_resource_bar-and-pci_iov_resource_bar.patch
queue-4.4/pci-decouple-ioresource_rom_enable-and-pci_rom_address_enable.patch
queue-4.4/acpi-blacklist-add-_rev-quirks-for-dell-precision-5520-and-3520.patch
queue-4.4/igb-add-i211-to-i210-phy-workaround.patch
queue-4.4/uvcvideo-uvc_scan_fallback-for-webcams-with-broken-chain.patch

  reply	other threads:[~2017-03-28 12:14 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-03-25 16:18 [PATCH for-4.4 00/19] Stable commits from Ubuntu Yakkety 4.9-lts Sumit Semwal
2017-03-25 16:18 ` [PATCH for-4.4 01/19] xen: do not re-use pirq number cached in pci device msi msg data Sumit Semwal
2017-03-28 12:13   ` Patch "xen: do not re-use pirq number cached in pci device msi msg data" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 02/19] igb: Workaround for igb i210 firmware issue Sumit Semwal
2017-03-28 12:13   ` Patch "igb: Workaround for igb i210 firmware issue" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 03/19] igb: add i211 to i210 PHY workaround Sumit Semwal
2017-03-28 12:13   ` Patch "igb: add i211 to i210 PHY workaround" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 04/19] x86/hyperv: Handle unknown NMIs on one CPU when unknown_nmi_panic Sumit Semwal
2017-03-28 12:13   ` Patch "x86/hyperv: Handle unknown NMIs on one CPU when unknown_nmi_panic" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 05/19] PCI: Separate VF BAR updates from standard BAR updates Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Separate VF BAR updates from standard BAR updates" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 06/19] PCI: Remove pci_resource_bar() and pci_iov_resource_bar() Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Remove pci_resource_bar() and pci_iov_resource_bar()" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 07/19] PCI: Add comments about ROM BAR updating Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Add comments about ROM BAR updating" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 08/19] PCI: Decouple IORESOURCE_ROM_ENABLE and PCI_ROM_ADDRESS_ENABLE Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Decouple IORESOURCE_ROM_ENABLE and PCI_ROM_ADDRESS_ENABLE" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 09/19] PCI: Don't update VF BARs while VF memory space is enabled Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Don't update VF BARs while VF memory space is enabled" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 10/19] PCI: Update BARs using property bits appropriate for type Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Update BARs using property bits appropriate for type" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 11/19] PCI: Ignore BAR updates on virtual functions Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Ignore BAR updates on virtual functions" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 12/19] PCI: Do any VF BAR updates before enabling the BARs Sumit Semwal
2017-03-28 12:13   ` Patch "PCI: Do any VF BAR updates before enabling the BARs" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 13/19] vfio/spapr: Postpone allocation of userspace version of TCE table Sumit Semwal
2017-03-28 12:13   ` Patch "vfio/spapr: Postpone allocation of userspace version of TCE table" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 14/19] block: allow WRITE_SAME commands with the SG_IO ioctl Sumit Semwal
2017-03-28 12:12   ` Patch "block: allow WRITE_SAME commands with the SG_IO ioctl" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 15/19] s390/zcrypt: Introduce CEX6 toleration Sumit Semwal
2017-03-28 12:13   ` Patch "s390/zcrypt: Introduce CEX6 toleration" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 16/19] uvcvideo: uvc_scan_fallback() for webcams with broken chain Sumit Semwal
2017-03-28 12:13   ` gregkh [this message]
2017-03-25 16:18 ` [PATCH for-4.4 17/19] ACPI / blacklist: add _REV quirks for Dell Precision 5520 and 3520 Sumit Semwal
2017-03-28 12:12   ` Patch "ACPI / blacklist: add _REV quirks for Dell Precision 5520 and 3520" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 18/19] ACPI / blacklist: Make Dell Latitude 3350 ethernet work Sumit Semwal
2017-03-28 12:12   ` Patch "ACPI / blacklist: Make Dell Latitude 3350 ethernet work" has been added to the 4.4-stable tree gregkh
2017-03-25 16:18 ` [PATCH for-4.4 19/19] serial: 8250_pci: Detach low-level driver during PCI error recovery Sumit Semwal
2017-03-28 12:13   ` Patch "serial: 8250_pci: Detach low-level driver during PCI error recovery" has been added to the 4.4-stable tree gregkh

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=149070321111695@kroah.com \
    --to=gregkh@linuxfoundation.org \
    --cc=alexander.levin@verizon.com \
    --cc=henrik.ingo@avoinelama.fi \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=mchehab@s-opensource.com \
    --cc=stable-commits@vger.kernel.org \
    --cc=stable@vger.kernel.org \
    --cc=sumit.semwal@linaro.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 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.