From: Rajat Jain <rajatja@google.com> To: Marcel Holtmann <marcel@holtmann.org>, Johan Hedberg <johan.hedberg@gmail.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, "David S. Miller" <davem@davemloft.net>, Dmitry Torokhov <dtor@chromium.org>, Rajat Jain <rajatja@google.com>, Alex Hung <alex.hung@canonical.com>, linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, netdev@vger.kernel.org Cc: rajatxjain@gmail.com, dtor@google.com, raghuram.hegde@intel.com, chethan.tumkur.narayan@intel.com, sukumar.ghorai@intel.com Subject: [PATCH v5 2/4] usb: assign ACPI companions for embedded USB devices Date: Wed, 23 Jan 2019 12:57:23 -0800 [thread overview] Message-ID: <20190123205725.239661-2-rajatja@google.com> (raw) In-Reply-To: <20190123205725.239661-1-rajatja@google.com> From: Dmitry Torokhov <dtor@chromium.org> USB devices permanently connected to USB ports may be described in ACPI tables and share ACPI devices with ports they are connected to. See [1] for details. This will allow us to describe sideband resources for devices, such as, for example, hard reset line for BT USB controllers. [1] https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/other-acpi-namespace-objects#acpi-namespace-hierarchy-and-adr-for-embedded-usb-devices Signed-off-by: Dmitry Torokhov <dtor@chromium.org> Signed-off-by: Rajat Jain <rajatja@google.com> (changed how we get the usb_port) Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Tested-by: Sukumar Ghorai <sukumar.ghorai@intel.com> --- v5: same as v4 v4: Add Acked-by and Tested-by in signatures. v3: same as v1 v2: same as v1 drivers/usb/core/usb-acpi.c | 44 +++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c index 8ff73c83e8e8..9043d7242d67 100644 --- a/drivers/usb/core/usb-acpi.c +++ b/drivers/usb/core/usb-acpi.c @@ -200,30 +200,56 @@ static struct acpi_device * usb_acpi_find_companion_for_device(struct usb_device *udev) { struct acpi_device *adev; + struct usb_port *port_dev; + struct usb_hub *hub; + + if (!udev->parent) { + /* root hub is only child (_ADR=0) under its parent, the HC */ + adev = ACPI_COMPANION(udev->dev.parent); + return acpi_find_child_device(adev, 0, false); + } - if (!udev->parent) + hub = usb_hub_to_struct_hub(udev->parent); + if (!hub) return NULL; - /* root hub is only child (_ADR=0) under its parent, the HC */ - adev = ACPI_COMPANION(udev->dev.parent); - return acpi_find_child_device(adev, 0, false); + /* + * This is an embedded USB device connected to a port and such + * devices share port's ACPI companion. + */ + port_dev = hub->ports[udev->portnum - 1]; + return usb_acpi_get_companion_for_port(port_dev); } - static struct acpi_device *usb_acpi_find_companion(struct device *dev) { /* - * In the ACPI DSDT table, only usb root hub and usb ports are - * acpi device nodes. The hierarchy like following. + * The USB hierarchy like following: + * * Device (EHC1) * Device (HUBN) * Device (PR01) * Device (PR11) * Device (PR12) + * Device (FN12) + * Device (FN13) * Device (PR13) * ... - * So all binding process is divided into two parts. binding - * root hub and usb ports. + * where HUBN is root hub, and PRNN are USB ports and devices + * connected to them, and FNNN are individualk functions for + * connected composite USB devices. PRNN and FNNN may contain + * _CRS and other methods describing sideband resources for + * the connected device. + * + * On the kernel side both root hub and embedded USB devices are + * represented as instances of usb_device structure, and ports + * are represented as usb_port structures, so the whole process + * is split into 2 parts: finding companions for devices and + * finding companions for ports. + * + * Note that we do not handle individual functions of composite + * devices yet, for that we would need to assign companions to + * devices corresponding to USB interfaces. */ if (is_usb_device(dev)) return usb_acpi_find_companion_for_device(to_usb_device(dev)); -- 2.20.1.321.g9e740568ce-goog
WARNING: multiple messages have this Message-ID (diff)
From: Rajat Jain <rajatja@google.com> To: Marcel Holtmann <marcel@holtmann.org>, Johan Hedberg <johan.hedberg@gmail.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, "David S. Miller" <davem@davemloft.net>, Dmitry Torokhov <dtor@chromium.org>, Rajat Jain <rajatja@google.com>, Alex Hung <alex.hung@canonical.com>, linux-bluetooth@vger.kernel.org, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org, netdev@vger.kernel.org Cc: rajatxjain@gmail.com, dtor@google.com, raghuram.hegde@intel.com, chethan.tumkur.narayan@intel.com, sukumar.ghorai@intel.com Subject: [v5,2/4] usb: assign ACPI companions for embedded USB devices Date: Wed, 23 Jan 2019 12:57:23 -0800 [thread overview] Message-ID: <20190123205725.239661-2-rajatja@google.com> (raw) From: Dmitry Torokhov <dtor@chromium.org> USB devices permanently connected to USB ports may be described in ACPI tables and share ACPI devices with ports they are connected to. See [1] for details. This will allow us to describe sideband resources for devices, such as, for example, hard reset line for BT USB controllers. [1] https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/other-acpi-namespace-objects#acpi-namespace-hierarchy-and-adr-for-embedded-usb-devices Signed-off-by: Dmitry Torokhov <dtor@chromium.org> Signed-off-by: Rajat Jain <rajatja@google.com> (changed how we get the usb_port) Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Tested-by: Sukumar Ghorai <sukumar.ghorai@intel.com> --- v5: same as v4 v4: Add Acked-by and Tested-by in signatures. v3: same as v1 v2: same as v1 drivers/usb/core/usb-acpi.c | 44 +++++++++++++++++++++++++++++-------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c index 8ff73c83e8e8..9043d7242d67 100644 --- a/drivers/usb/core/usb-acpi.c +++ b/drivers/usb/core/usb-acpi.c @@ -200,30 +200,56 @@ static struct acpi_device * usb_acpi_find_companion_for_device(struct usb_device *udev) { struct acpi_device *adev; + struct usb_port *port_dev; + struct usb_hub *hub; + + if (!udev->parent) { + /* root hub is only child (_ADR=0) under its parent, the HC */ + adev = ACPI_COMPANION(udev->dev.parent); + return acpi_find_child_device(adev, 0, false); + } - if (!udev->parent) + hub = usb_hub_to_struct_hub(udev->parent); + if (!hub) return NULL; - /* root hub is only child (_ADR=0) under its parent, the HC */ - adev = ACPI_COMPANION(udev->dev.parent); - return acpi_find_child_device(adev, 0, false); + /* + * This is an embedded USB device connected to a port and such + * devices share port's ACPI companion. + */ + port_dev = hub->ports[udev->portnum - 1]; + return usb_acpi_get_companion_for_port(port_dev); } - static struct acpi_device *usb_acpi_find_companion(struct device *dev) { /* - * In the ACPI DSDT table, only usb root hub and usb ports are - * acpi device nodes. The hierarchy like following. + * The USB hierarchy like following: + * * Device (EHC1) * Device (HUBN) * Device (PR01) * Device (PR11) * Device (PR12) + * Device (FN12) + * Device (FN13) * Device (PR13) * ... - * So all binding process is divided into two parts. binding - * root hub and usb ports. + * where HUBN is root hub, and PRNN are USB ports and devices + * connected to them, and FNNN are individualk functions for + * connected composite USB devices. PRNN and FNNN may contain + * _CRS and other methods describing sideband resources for + * the connected device. + * + * On the kernel side both root hub and embedded USB devices are + * represented as instances of usb_device structure, and ports + * are represented as usb_port structures, so the whole process + * is split into 2 parts: finding companions for devices and + * finding companions for ports. + * + * Note that we do not handle individual functions of composite + * devices yet, for that we would need to assign companions to + * devices corresponding to USB interfaces. */ if (is_usb_device(dev)) return usb_acpi_find_companion_for_device(to_usb_device(dev));
next prev parent reply other threads:[~2019-01-23 20:57 UTC|newest] Thread overview: 111+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-11-17 1:07 [PATCH 0/5] Reset Intel BT controller if it gets stuck Rajat Jain 2018-11-17 1:07 ` [PATCH 1/5] usb: split code locating ACPI companion into port and device Rajat Jain 2018-11-17 1:07 ` [1/5] " Rajat Jain 2018-11-17 1:07 ` [PATCH 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain 2018-11-17 1:07 ` [2/5] " Rajat Jain 2018-11-17 1:07 ` [PATCH 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain 2018-11-17 1:07 ` [3/5] " Rajat Jain 2018-11-17 1:07 ` [PATCH 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain 2018-11-17 1:07 ` [4/5] " Rajat Jain 2018-11-17 1:07 ` [PATCH 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain 2018-11-17 1:07 ` [5/5] " Rajat Jain 2018-11-19 23:04 ` [PATCH v2 1/5] usb: split code locating ACPI companion into port and device Rajat Jain 2018-11-19 23:04 ` [v2,1/5] " Rajat Jain 2018-11-19 23:04 ` [PATCH v2 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain 2018-11-19 23:04 ` [v2,2/5] " Rajat Jain 2018-11-19 23:04 ` [PATCH v2 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain 2018-11-19 23:04 ` [v2,3/5] " Rajat Jain 2018-11-19 23:04 ` [PATCH v2 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain 2018-11-19 23:04 ` [v2,4/5] " Rajat Jain 2018-11-19 23:04 ` [PATCH v2 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain 2018-11-19 23:04 ` [v2,5/5] " Rajat Jain 2018-11-21 23:50 ` [PATCH v3 1/5] usb: split code locating ACPI companion into port and device Rajat Jain 2018-11-21 23:50 ` [v3,1/5] " Rajat Jain 2018-11-21 23:50 ` [PATCH v3 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain 2018-11-21 23:50 ` [v3,2/5] " Rajat Jain 2018-12-05 9:32 ` [PATCH v3 2/5] " Greg Kroah-Hartman 2018-12-05 9:32 ` [v3,2/5] " Greg Kroah-Hartman 2018-12-05 17:19 ` [PATCH v3 2/5] " Ghorai, Sukumar 2018-12-05 17:19 ` [v3,2/5] " Ghorai, Sukumar 2018-11-21 23:50 ` [PATCH v3 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain 2018-11-21 23:50 ` [v3,3/5] " Rajat Jain 2018-11-21 23:50 ` [PATCH v3 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain 2018-11-21 23:50 ` [v3,4/5] " Rajat Jain 2018-11-21 23:50 ` [PATCH v3 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain 2018-11-21 23:50 ` [v3,5/5] " Rajat Jain 2018-12-20 8:46 ` [PATCH v3 5/5] " Rajat Jain 2018-12-20 8:46 ` [v3,5/5] " Rajat Jain 2019-01-18 11:04 ` [PATCH v3 5/5] " Marcel Holtmann 2019-01-18 11:04 ` [v3,5/5] " Marcel Holtmann 2019-01-18 20:51 ` [PATCH v3 5/5] " Rajat Jain 2019-01-18 20:51 ` [v3,5/5] " Rajat Jain 2018-12-05 9:32 ` [PATCH v3 1/5] usb: split code locating ACPI companion into port and device Greg Kroah-Hartman 2018-12-05 9:32 ` [v3,1/5] " Greg Kroah-Hartman 2018-12-05 17:41 ` [PATCH v3 1/5] " Ghorai, Sukumar 2018-12-05 17:41 ` [v3,1/5] " Ghorai, Sukumar 2019-01-18 22:34 ` [PATCH v4 1/5] " Rajat Jain 2019-01-18 22:34 ` [v4,1/5] " Rajat Jain 2019-01-18 22:34 ` [PATCH v4 2/5] usb: assign ACPI companions for embedded USB devices Rajat Jain 2019-01-18 22:34 ` [v4,2/5] " Rajat Jain 2019-01-19 19:51 ` [PATCH v4 2/5] " Marcel Holtmann 2019-01-19 19:51 ` [v4,2/5] " Marcel Holtmann 2019-01-22 22:29 ` [PATCH v4 2/5] " Rajat Jain 2019-01-22 22:29 ` [v4,2/5] " Rajat Jain 2019-01-18 22:34 ` [PATCH v4 3/5] Bluetooth: Reset Bluetooth chip after multiple command timeouts Rajat Jain 2019-01-18 22:34 ` [v4,3/5] " Rajat Jain 2019-01-19 19:51 ` [PATCH v4 3/5] " Marcel Holtmann 2019-01-19 19:51 ` [v4,3/5] " Marcel Holtmann 2019-01-22 22:34 ` [PATCH v4 3/5] " Rajat Jain 2019-01-22 22:34 ` [v4,3/5] " Rajat Jain 2019-01-18 22:34 ` [PATCH v4 4/5] Bluetooth: btusb: Collect the common Intel assignments together Rajat Jain 2019-01-18 22:34 ` [v4,4/5] " Rajat Jain 2019-01-19 19:51 ` [PATCH v4 4/5] " Marcel Holtmann 2019-01-19 19:51 ` [v4,4/5] " Marcel Holtmann 2019-01-22 22:35 ` [PATCH v4 4/5] " Rajat Jain 2019-01-22 22:35 ` [v4,4/5] " Rajat Jain 2019-01-18 22:34 ` [PATCH v4 5/5] Bluetooth: btusb: Use the hw_reset method to allow resetting the BT chip Rajat Jain 2019-01-18 22:34 ` [v4,5/5] " Rajat Jain 2019-01-19 19:51 ` [PATCH v4 5/5] " Marcel Holtmann 2019-01-19 19:51 ` [v4,5/5] " Marcel Holtmann 2019-01-22 22:36 ` [PATCH v4 5/5] " Rajat Jain 2019-01-22 22:36 ` [v4,5/5] " Rajat Jain 2019-01-19 19:51 ` [PATCH v4 1/5] usb: split code locating ACPI companion into port and device Marcel Holtmann 2019-01-19 19:51 ` [v4,1/5] " Marcel Holtmann 2019-01-22 22:28 ` [PATCH v4 1/5] " Rajat Jain 2019-01-22 22:28 ` [v4,1/5] " Rajat Jain 2019-01-22 22:42 ` [PATCH v4 1/5] " Dmitry Torokhov 2019-01-22 22:42 ` [v4,1/5] " Dmitry Torokhov 2019-01-23 6:36 ` [PATCH v4 1/5] " Greg Kroah-Hartman 2019-01-23 6:36 ` [v4,1/5] " Greg Kroah-Hartman 2019-01-23 20:57 ` [PATCH v5 1/4] " Rajat Jain 2019-01-23 20:57 ` [v5,1/4] " Rajat Jain 2019-01-23 20:57 ` Rajat Jain [this message] 2019-01-23 20:57 ` [v5,2/4] usb: assign ACPI companions for embedded USB devices Rajat Jain 2019-01-23 20:57 ` [PATCH v5 3/4] Bluetooth: Allow driver specific cmd timeout handling Rajat Jain 2019-01-23 20:57 ` [v5,3/4] " Rajat Jain 2019-01-24 9:36 ` [PATCH v5 3/4] " Marcel Holtmann 2019-01-24 9:36 ` [v5,3/4] " Marcel Holtmann 2019-01-24 20:10 ` [PATCH v5 3/4] " Rajat Jain 2019-01-24 20:10 ` [v5,3/4] " Rajat Jain 2019-01-23 20:57 ` [PATCH v5 4/4] Bluetooth: btusb: Use the cmd_timeout method to reset the Intel BT chip Rajat Jain 2019-01-23 20:57 ` [v5,4/4] " Rajat Jain 2019-01-24 9:46 ` [PATCH v5 4/4] " Marcel Holtmann 2019-01-24 9:46 ` [v5,4/4] " Marcel Holtmann 2019-01-24 20:05 ` [PATCH v5 4/4] " Rajat Jain 2019-01-24 20:05 ` [v5,4/4] " Rajat Jain 2019-01-24 23:28 ` [PATCH v6 1/4] usb: split code locating ACPI companion into port and device Rajat Jain 2019-01-24 23:28 ` [v6,1/4] " Rajat Jain 2019-01-24 23:28 ` [PATCH v6 2/4] usb: assign ACPI companions for embedded USB devices Rajat Jain 2019-01-24 23:28 ` [v6,2/4] " Rajat Jain 2019-01-25 7:51 ` [PATCH v6 2/4] " Marcel Holtmann 2019-01-25 7:51 ` [v6,2/4] " Marcel Holtmann 2019-01-24 23:28 ` [PATCH v6 3/4] Bluetooth: Allow driver specific cmd timeout handling Rajat Jain 2019-01-24 23:28 ` [v6,3/4] " Rajat Jain 2019-01-25 7:51 ` [PATCH v6 3/4] " Marcel Holtmann 2019-01-25 7:51 ` [v6,3/4] " Marcel Holtmann 2019-01-24 23:28 ` [PATCH v6 4/4] Bluetooth: btusb: Use the cmd_timeout method to reset the Intel BT chip Rajat Jain 2019-01-24 23:28 ` [v6,4/4] " Rajat Jain 2019-01-25 7:51 ` [PATCH v6 4/4] " Marcel Holtmann 2019-01-25 7:51 ` [v6,4/4] " Marcel Holtmann 2019-01-25 7:51 ` [PATCH v6 1/4] usb: split code locating ACPI companion into port and device Marcel Holtmann 2019-01-25 7:51 ` [v6,1/4] " Marcel Holtmann
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=20190123205725.239661-2-rajatja@google.com \ --to=rajatja@google.com \ --cc=alex.hung@canonical.com \ --cc=chethan.tumkur.narayan@intel.com \ --cc=davem@davemloft.net \ --cc=dtor@chromium.org \ --cc=dtor@google.com \ --cc=gregkh@linuxfoundation.org \ --cc=johan.hedberg@gmail.com \ --cc=linux-bluetooth@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-usb@vger.kernel.org \ --cc=marcel@holtmann.org \ --cc=netdev@vger.kernel.org \ --cc=raghuram.hegde@intel.com \ --cc=rajatxjain@gmail.com \ --cc=sukumar.ghorai@intel.com \ /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: linkBe 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.