From: Lan Tianyu <tianyu.lan-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>
To: Matthew Garrett <mjg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org
Subject: Re: [PATCH V2 3/4] usb: Bind devices to ACPI devices when possible
Date: Wed, 14 Mar 2012 09:20:44 +0800 [thread overview]
Message-ID: <4F5FF26C.5040004@intel.com> (raw)
In-Reply-To: <1331588747-1247-3-git-send-email-mjg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
On 2012年03月13日 05:45, Matthew Garrett wrote:
> Built-in USB devices will typically have a representation in the system
> ACPI tables. Add support for binding the two together so the USB code can
> make use of the associated methods.
hi Matthew:
acpi glue framework only can cover situation that the port has been
connected with some device. so without device, no acpi handle can be used to
access "UPC" and "PLD".
Whether the usb port is user-visible or not is also useful when there
is no device. For example, if it is known that the usb port is not user-visible
and connectable. The usb hub port can be power-off.
So usb/acpi binding should consider those usb ports without plugging device.
Does this make sense? :)
>
> Signed-off-by: Matthew Garrett<mjg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> ---
>
> Add a is_usb_device() check to make sure that we're looking at an actual
> USB device rather than an interface.
>
> drivers/usb/core/Makefile | 1 +
> drivers/usb/core/usb-acpi.c | 60 +++++++++++++++++++++++++++++++++++++++++++
> drivers/usb/core/usb.c | 6 +++++
> drivers/usb/core/usb.h | 7 +++++
> 4 files changed, 74 insertions(+)
> create mode 100644 drivers/usb/core/usb-acpi.c
>
> diff --git a/drivers/usb/core/Makefile b/drivers/usb/core/Makefile
> index 507a4e1..9268ddb 100644
> --- a/drivers/usb/core/Makefile
> +++ b/drivers/usb/core/Makefile
> @@ -10,5 +10,6 @@ usbcore-y += devio.o notify.o generic.o quirks.o devices.o
>
> usbcore-$(CONFIG_PCI) += hcd-pci.o
> usbcore-$(CONFIG_USB_DEVICEFS) += inode.o
> +usbcore-$(CONFIG_ACPI) += usb-acpi.o
>
> obj-$(CONFIG_USB) += usbcore.o
> diff --git a/drivers/usb/core/usb-acpi.c b/drivers/usb/core/usb-acpi.c
> new file mode 100644
> index 0000000..cab5cb7
> --- /dev/null
> +++ b/drivers/usb/core/usb-acpi.c
> @@ -0,0 +1,60 @@
> +/*
> + * USB-ACPI glue code
> + *
> + * Copyright 2012 Red Hat<mjg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms of the GNU General Public License as published by the Free
> + * Software Foundation, version 2.
> + *
> + */
> +#include<linux/module.h>
> +#include<linux/usb.h>
> +#include<linux/device.h>
> +#include<linux/errno.h>
> +#include<linux/kernel.h>
> +#include<linux/acpi.h>
> +#include<linux/pci.h>
> +#include<acpi/acpi_bus.h>
> +
> +#include "usb.h"
> +
> +static int usb_acpi_find_device(struct device *dev, acpi_handle *handle)
> +{
> + struct usb_device *udev;
> + struct device *parent;
> + acpi_handle *parent_handle;
> +
> + if (!is_usb_device(dev))
> + return -ENODEV;
> +
> + udev = to_usb_device(dev);
> + parent = dev->parent;
> + parent_handle = DEVICE_ACPI_HANDLE(parent);
> +
> + if (!parent_handle)
> + return -ENODEV;
> +
> + *handle = acpi_get_child(parent_handle, udev->portnum);
> +
> + if (!*handle)
> + return -ENODEV;
> +
> + return 0;
> +}
> +
> +static struct acpi_bus_type usb_acpi_bus = {
> + .bus =&usb_bus_type,
> + .find_bridge = NULL,
> + .find_device = usb_acpi_find_device,
> +};
> +
> +int usb_acpi_register(void)
> +{
> + return register_acpi_bus_type(&usb_acpi_bus);
> +}
> +
> +void usb_acpi_unregister(void)
> +{
> + unregister_acpi_bus_type(&usb_acpi_bus);
> +}
> diff --git a/drivers/usb/core/usb.c b/drivers/usb/core/usb.c
> index 8ca9f99..ce47e3f 100644
> --- a/drivers/usb/core/usb.c
> +++ b/drivers/usb/core/usb.c
> @@ -1015,6 +1015,9 @@ static int __init usb_init(void)
> if (retval)
> goto out;
>
> + retval = usb_acpi_register();
> + if (retval)
> + goto acpi_register_failed;
> retval = bus_register(&usb_bus_type);
> if (retval)
> goto bus_register_failed;
> @@ -1054,6 +1057,8 @@ major_init_failed:
> bus_notifier_failed:
> bus_unregister(&usb_bus_type);
> bus_register_failed:
> + usb_acpi_unregister();
> +acpi_register_failed:
> usb_debugfs_cleanup();
> out:
> return retval;
> @@ -1076,6 +1081,7 @@ static void __exit usb_exit(void)
> usb_hub_cleanup();
> bus_unregister_notifier(&usb_bus_type,&usb_bus_nb);
> bus_unregister(&usb_bus_type);
> + usb_acpi_unregister();
> usb_debugfs_cleanup();
> }
>
> diff --git a/drivers/usb/core/usb.h b/drivers/usb/core/usb.h
> index 45e8479..636d98e 100644
> --- a/drivers/usb/core/usb.h
> +++ b/drivers/usb/core/usb.h
> @@ -155,3 +155,10 @@ extern void usb_notify_remove_device(struct usb_device *udev);
> extern void usb_notify_add_bus(struct usb_bus *ubus);
> extern void usb_notify_remove_bus(struct usb_bus *ubus);
>
> +#ifdef CONFIG_ACPI
> +extern int usb_acpi_register(void);
> +extern void usb_acpi_unregister(void);
> +#else
> +static inline int usb_acpi_register(void) { return 0; };
> +static inline void usb_acpi_unregister(void) { };
> +#endif
--
Best Regards
Tianyu Lan
linux kernel enabling team
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
next prev parent reply other threads:[~2012-03-14 1:20 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-03-12 21:45 [PATCH V2 1/4] ACPI: Fix up _PLD methods Matthew Garrett
2012-03-12 21:45 ` [PATCH V2 2/4] ACPI: Add _PLD support Matthew Garrett
[not found] ` <1331588747-1247-1-git-send-email-mjg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-03-12 21:45 ` [PATCH V2 3/4] usb: Bind devices to ACPI devices when possible Matthew Garrett
[not found] ` <1331588747-1247-3-git-send-email-mjg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2012-03-14 1:20 ` Lan Tianyu [this message]
2012-03-14 12:48 ` Matthew Garrett
2012-03-14 14:29 ` Greg KH
2012-03-14 14:44 ` Alan Stern
2012-03-12 21:45 ` [PATCH V2 4/4] usb: Set device removable state based on ACPI USB data Matthew Garrett
2012-03-13 21:32 ` [PATCH V2 1/4] ACPI: Fix up _PLD methods Greg KH
2012-03-13 21:38 ` Matthew Garrett
2012-03-13 21:49 ` Greg KH
[not found] ` <20120313214941.GA4534-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2012-04-10 7:56 ` Lan, Tianyu
[not found] ` <4CFBC02C07DA244CA19D6815A05BE6EE05C77B-0J0gbvR4kThpB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2012-04-10 13:01 ` Moore, Robert
2012-03-13 11:07 ` Sergei Shtylyov
[not found] ` <4F5F2A64.8030403-Igf4POYTYCDQT0dZR+AlfA@public.gmane.org>
2012-03-13 11:38 ` Matthew Garrett
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=4F5FF26C.5040004@intel.com \
--to=tianyu.lan-ral2jqcrhueavxtiumwx3w@public.gmane.org \
--cc=gregkh-hQyY1W1yCW8ekmWlsbkhG0B+6BGkLq7r@public.gmane.org \
--cc=lenb-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
--cc=linux-acpi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=linux-usb-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=mjg-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox