public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 3/5]add .match method for ACPI
@ 2004-10-21  2:59 Li Shaohua
       [not found] ` <1098327565.6132.224.camel-U5EdaLXB8smDugQYiPIPGdh3ngVCH38I@public.gmane.org>
  0 siblings, 1 reply; 2+ messages in thread
From: Li Shaohua @ 2004-10-21  2:59 UTC (permalink / raw)
  To: ACPI-DEV, lkml; +Cc: Len Brown, Adam Belay, Matthieu, Bjorn Helgaas

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

Hi,
The idea of the patch is from Bruno Ducrot <ducrot-kk6yZipjEM5g9hUCZPvPmw@public.gmane.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 *);
 

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 3/5]add .match method for ACPI
       [not found] ` <1098327565.6132.224.camel-U5EdaLXB8smDugQYiPIPGdh3ngVCH38I@public.gmane.org>
@ 2004-10-28  6:31   ` Len Brown
  0 siblings, 0 replies; 2+ messages in thread
From: Len Brown @ 2004-10-28  6:31 UTC (permalink / raw)
  To: Shaohua Li; +Cc: ACPI Developers, lkml, Adam Belay, Matthieu, Bjorn Helgaas

Applied,

thanks,
-Len

On Wed, 2004-10-20 at 22:59, Li Shaohua wrote:
> Hi,
> The idea of the patch is from Bruno Ducrot <ducrot-kk6yZipjEM5g9hUCZPvPmw@public.gmane.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 *);
> 
> 
> 
> 



-------------------------------------------------------
This SF.Net email is sponsored by:
Sybase ASE Linux Express Edition - download now for FREE
LinuxWorld Reader's Choice Award Winner for best database on Linux.
http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2004-10-28  6:31 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-10-21  2:59 [PATCH 3/5]add .match method for ACPI Li Shaohua
     [not found] ` <1098327565.6132.224.camel-U5EdaLXB8smDugQYiPIPGdh3ngVCH38I@public.gmane.org>
2004-10-28  6:31   ` Len Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox