mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Li Shaohua <shaohua.li@intel.com>
To: ACPI-DEV <acpi-devel@lists.sourceforge.net>,
	lkml <linux-kernel@vger.kernel.org>
Cc: Len Brown <len.brown@intel.com>, Adam Belay <ambx1@neo.rr.com>,
	Matthieu <castet.matthieu@free.fr>,
	Bjorn Helgaas <bjorn.helgaas@hp.com>
Subject: [PATCH 3/5]add .match method for ACPI
Date: Thu, 21 Oct 2004 10:59:57 +0800	[thread overview]
Message-ID: <1098327565.6132.224.camel@sli10-desk.sh.intel.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 2106 bytes --]

Hi,
The idea of the patch is from Bruno Ducrot <ducrot@poupinou.org>'s ACPI
video extension patch. Since the video extension patch hasn't been
merged and the ACPI PNP driver requires it, I attached it here.

Thanks,
Shaohua

--- 2.6/drivers/acpi/scan.c.stg4	2004-10-18 16:49:57.926042680 +0800
+++ 2.6/drivers/acpi/scan.c	2004-10-18 16:57:30.572230000 +0800
@@ -161,7 +161,7 @@ acpi_bus_get_power_flags (
 	return 0;
 }
 
-static int
+int
 acpi_match_ids (
 	struct acpi_device	*device,
 	char			*ids)
@@ -314,6 +314,8 @@ acpi_bus_match (
 	struct acpi_device	*device,
 	struct acpi_driver	*driver)
 {
+	if (driver && driver->ops.match)
+		return driver->ops.match(device, driver);
 	return acpi_match_ids(device, driver->ids);
 }
 
@@ -495,9 +497,6 @@ acpi_bus_find_driver (
 
 	ACPI_FUNCTION_TRACE("acpi_bus_find_driver");
 
-	if (!device->flags.hardware_id && !device->flags.compatible_ids)
-		goto Done;
-
 	spin_lock(&acpi_device_lock);
 	list_for_each_safe(node,next,&acpi_bus_drivers) {
 		struct acpi_driver * driver = container_of(node,struct
acpi_driver,node);
--- 2.6/include/acpi/acpi_bus.h.stg4	2004-10-18 16:50:31.522935176 +0800
+++ 2.6/include/acpi/acpi_bus.h	2004-10-18 16:55:11.474376088 +0800
@@ -104,6 +104,8 @@ typedef int (*acpi_op_suspend)	(struct a
 typedef int (*acpi_op_resume)	(struct acpi_device *device, int state);
 typedef int (*acpi_op_scan)	(struct acpi_device *device);
 typedef int (*acpi_op_bind)	(struct acpi_device *device);
+typedef int (*acpi_op_match)	(struct acpi_device *device,
+	struct acpi_driver *driver);
 
 struct acpi_device_ops {
 	acpi_op_add		add;
@@ -115,6 +117,7 @@ struct acpi_device_ops {
 	acpi_op_resume		resume;
 	acpi_op_scan		scan;
 	acpi_op_bind		bind;
+	acpi_op_match		match;
 };
 
 struct acpi_driver {
@@ -322,6 +325,7 @@ int acpi_bus_receive_event (struct acpi_
 int acpi_bus_register_driver (struct acpi_driver *driver);
 int acpi_bus_unregister_driver (struct acpi_driver *driver);
 
+int acpi_match_ids (struct acpi_device	*device, char	*ids);
 int acpi_create_dir(struct acpi_device *);
 void acpi_remove_dir(struct acpi_device *);
 


[-- Attachment #2: acpi_match.patch --]
[-- Type: text/x-patch, Size: 1880 bytes --]

--- 2.6/drivers/acpi/scan.c.stg4	2004-10-18 16:49:57.926042680 +0800
+++ 2.6/drivers/acpi/scan.c	2004-10-18 16:57:30.572230000 +0800
@@ -161,7 +161,7 @@ acpi_bus_get_power_flags (
 	return 0;
 }
 
-static int
+int
 acpi_match_ids (
 	struct acpi_device	*device,
 	char			*ids)
@@ -314,6 +314,8 @@ acpi_bus_match (
 	struct acpi_device	*device,
 	struct acpi_driver	*driver)
 {
+	if (driver && driver->ops.match)
+		return driver->ops.match(device, driver);
 	return acpi_match_ids(device, driver->ids);
 }
 
@@ -495,9 +497,6 @@ acpi_bus_find_driver (
 
 	ACPI_FUNCTION_TRACE("acpi_bus_find_driver");
 
-	if (!device->flags.hardware_id && !device->flags.compatible_ids)
-		goto Done;
-
 	spin_lock(&acpi_device_lock);
 	list_for_each_safe(node,next,&acpi_bus_drivers) {
 		struct acpi_driver * driver = container_of(node,struct acpi_driver,node);
--- 2.6/include/acpi/acpi_bus.h.stg4	2004-10-18 16:50:31.522935176 +0800
+++ 2.6/include/acpi/acpi_bus.h	2004-10-18 16:55:11.474376088 +0800
@@ -104,6 +104,8 @@ typedef int (*acpi_op_suspend)	(struct a
 typedef int (*acpi_op_resume)	(struct acpi_device *device, int state);
 typedef int (*acpi_op_scan)	(struct acpi_device *device);
 typedef int (*acpi_op_bind)	(struct acpi_device *device);
+typedef int (*acpi_op_match)	(struct acpi_device *device,
+	struct acpi_driver *driver);
 
 struct acpi_device_ops {
 	acpi_op_add		add;
@@ -115,6 +117,7 @@ struct acpi_device_ops {
 	acpi_op_resume		resume;
 	acpi_op_scan		scan;
 	acpi_op_bind		bind;
+	acpi_op_match		match;
 };
 
 struct acpi_driver {
@@ -322,6 +325,7 @@ int acpi_bus_receive_event (struct acpi_
 int acpi_bus_register_driver (struct acpi_driver *driver);
 int acpi_bus_unregister_driver (struct acpi_driver *driver);
 
+int acpi_match_ids (struct acpi_device	*device, char	*ids);
 int acpi_create_dir(struct acpi_device *);
 void acpi_remove_dir(struct acpi_device *);
 

             reply	other threads:[~2004-10-21  3:34 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-10-21  2:59 Li Shaohua [this message]
2004-10-28  6:31 ` Len Brown

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=1098327565.6132.224.camel@sli10-desk.sh.intel.com \
    --to=shaohua.li@intel.com \
    --cc=acpi-devel@lists.sourceforge.net \
    --cc=ambx1@neo.rr.com \
    --cc=bjorn.helgaas@hp.com \
    --cc=castet.matthieu@free.fr \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.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

all inboxes | Powered by JetHome®