* [patch 2/3] acpiphp: identify more removable slots
@ 2008-12-01 22:12 akpm
2008-12-01 22:14 ` Matthew Garrett
0 siblings, 1 reply; 4+ messages in thread
From: akpm @ 2008-12-01 22:12 UTC (permalink / raw)
To: lenb; +Cc: linux-acpi, akpm, mjg59, gregkh, kristen.c.accardi, len.brown,
mjg
From: Matthew Garrett <mjg59@srcf.ucam.org>
According to section 6.3.6 of the ACPI spec, the presence of an _RMV
method that evaluates to 1 is sufficient to indicate that a slot is
removable without needing an eject method. This patch refactors the
ejectable slot detection code a little in order to flag these slots as
ejectable and register them. Acpihp then binds to the expresscard slot on
my HP test machine.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
Cc: Len Brown <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
drivers/pci/hotplug/acpiphp_glue.c | 32 ++++++++++++++-------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff -puN drivers/pci/hotplug/acpiphp_glue.c~acpiphp-identify-more-removable-slots drivers/pci/hotplug/acpiphp_glue.c
--- a/drivers/pci/hotplug/acpiphp_glue.c~acpiphp-identify-more-removable-slots
+++ a/drivers/pci/hotplug/acpiphp_glue.c
@@ -74,7 +74,7 @@ static void handle_hotplug_event_func(ac
* Ejectable slot should satisfy at least these conditions:
*
* 1. has _ADR method
- * 2. has _EJ0 method
+ * 2. has _EJ0 method or _RMV method
*
* optionally
*
@@ -87,18 +87,25 @@ static int is_ejectable(acpi_handle hand
{
acpi_status status;
acpi_handle tmp;
+ unsigned long long removable;
status = acpi_get_handle(handle, "_ADR", &tmp);
- if (ACPI_FAILURE(status)) {
+ if (ACPI_FAILURE(status))
return 0;
- }
status = acpi_get_handle(handle, "_EJ0", &tmp);
- if (ACPI_FAILURE(status)) {
- return 0;
+ if (ACPI_SUCCESS(status))
+ return 1;
+
+ status = acpi_get_handle(handle, "_RMV", &tmp);
+ if (ACPI_SUCCESS(status)) {
+ status = acpi_evaluate_integer(handle, "_RMV", NULL,
+ &removable);
+ if (ACPI_SUCCESS(status) && removable)
+ return 1;
}
- return 1;
+ return 0;
}
@@ -185,16 +192,10 @@ register_slot(acpi_handle handle, u32 lv
unsigned long long adr, sun;
int device, function, retval;
- status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
-
- if (ACPI_FAILURE(status))
- return AE_OK;
-
- status = acpi_get_handle(handle, "_EJ0", &tmp);
-
- if (ACPI_FAILURE(status) && !(is_dock_device(handle)))
+ if (!is_ejectable(handle) && !is_dock_device(handle))
return AE_OK;
+ acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
device = (adr >> 16) & 0xffff;
function = adr & 0xffff;
@@ -205,7 +206,8 @@ register_slot(acpi_handle handle, u32 lv
INIT_LIST_HEAD(&newfunc->sibling);
newfunc->handle = handle;
newfunc->function = function;
- if (ACPI_SUCCESS(status))
+
+ if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
newfunc->flags = FUNC_HAS_EJ0;
if (ACPI_SUCCESS(acpi_get_handle(handle, "_STA", &tmp)))
_
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [patch 2/3] acpiphp: identify more removable slots
2008-12-01 22:12 [patch 2/3] acpiphp: identify more removable slots akpm
@ 2008-12-01 22:14 ` Matthew Garrett
2008-12-01 22:39 ` Andrew Morton
0 siblings, 1 reply; 4+ messages in thread
From: Matthew Garrett @ 2008-12-01 22:14 UTC (permalink / raw)
To: akpm; +Cc: lenb, linux-acpi, gregkh, kristen.c.accardi, len.brown
This has been picked up by Jesse for the PCI tree.
--
Matthew Garrett | mjg59@srcf.ucam.org
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch 2/3] acpiphp: identify more removable slots
2008-12-01 22:14 ` Matthew Garrett
@ 2008-12-01 22:39 ` Andrew Morton
2008-12-01 22:43 ` Matthew Garrett
0 siblings, 1 reply; 4+ messages in thread
From: Andrew Morton @ 2008-12-01 22:39 UTC (permalink / raw)
To: Matthew Garrett
Cc: lenb, linux-acpi, gregkh, kristen.c.accardi, len.brown,
Jesse Barnes
On Mon, 1 Dec 2008 22:14:55 +0000
Matthew Garrett <mjg59@srcf.ucam.org> wrote:
> This has been picked up by Jesse for the PCI tree.
It isn't in today's linux-next?
From: Matthew Garrett <mjg59@srcf.ucam.org>
According to section 6.3.6 of the ACPI spec, the presence of an _RMV
method that evaluates to 1 is sufficient to indicate that a slot is
removable without needing an eject method. This patch refactors the
ejectable slot detection code a little in order to flag these slots as
ejectable and register them. Acpihp then binds to the expresscard slot on
my HP test machine.
Signed-off-by: Matthew Garrett <mjg@redhat.com>
Cc: Greg Kroah-Hartman <gregkh@suse.de>
Cc: Kristen Carlson Accardi <kristen.c.accardi@intel.com>
Cc: Len Brown <len.brown@intel.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
---
drivers/pci/hotplug/acpiphp_glue.c | 32 ++++++++++++++-------------
1 file changed, 17 insertions(+), 15 deletions(-)
diff -puN drivers/pci/hotplug/acpiphp_glue.c~acpiphp-identify-more-removable-slots drivers/pci/hotplug/acpiphp_glue.c
--- a/drivers/pci/hotplug/acpiphp_glue.c~acpiphp-identify-more-removable-slots
+++ a/drivers/pci/hotplug/acpiphp_glue.c
@@ -74,7 +74,7 @@ static void handle_hotplug_event_func(ac
* Ejectable slot should satisfy at least these conditions:
*
* 1. has _ADR method
- * 2. has _EJ0 method
+ * 2. has _EJ0 method or _RMV method
*
* optionally
*
@@ -87,18 +87,25 @@ static int is_ejectable(acpi_handle hand
{
acpi_status status;
acpi_handle tmp;
+ unsigned long long removable;
status = acpi_get_handle(handle, "_ADR", &tmp);
- if (ACPI_FAILURE(status)) {
+ if (ACPI_FAILURE(status))
return 0;
- }
status = acpi_get_handle(handle, "_EJ0", &tmp);
- if (ACPI_FAILURE(status)) {
- return 0;
+ if (ACPI_SUCCESS(status))
+ return 1;
+
+ status = acpi_get_handle(handle, "_RMV", &tmp);
+ if (ACPI_SUCCESS(status)) {
+ status = acpi_evaluate_integer(handle, "_RMV", NULL,
+ &removable);
+ if (ACPI_SUCCESS(status) && removable)
+ return 1;
}
- return 1;
+ return 0;
}
@@ -185,16 +192,10 @@ register_slot(acpi_handle handle, u32 lv
unsigned long long adr, sun;
int device, function, retval;
- status = acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
-
- if (ACPI_FAILURE(status))
- return AE_OK;
-
- status = acpi_get_handle(handle, "_EJ0", &tmp);
-
- if (ACPI_FAILURE(status) && !(is_dock_device(handle)))
+ if (!is_ejectable(handle) && !is_dock_device(handle))
return AE_OK;
+ acpi_evaluate_integer(handle, "_ADR", NULL, &adr);
device = (adr >> 16) & 0xffff;
function = adr & 0xffff;
@@ -205,7 +206,8 @@ register_slot(acpi_handle handle, u32 lv
INIT_LIST_HEAD(&newfunc->sibling);
newfunc->handle = handle;
newfunc->function = function;
- if (ACPI_SUCCESS(status))
+
+ if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
newfunc->flags = FUNC_HAS_EJ0;
if (ACPI_SUCCESS(acpi_get_handle(handle, "_STA", &tmp)))
_
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [patch 2/3] acpiphp: identify more removable slots
2008-12-01 22:39 ` Andrew Morton
@ 2008-12-01 22:43 ` Matthew Garrett
0 siblings, 0 replies; 4+ messages in thread
From: Matthew Garrett @ 2008-12-01 22:43 UTC (permalink / raw)
To: Andrew Morton
Cc: lenb, linux-acpi, gregkh, kristen.c.accardi, len.brown,
Jesse Barnes
On Mon, Dec 01, 2008 at 02:39:06PM -0800, Andrew Morton wrote:
> On Mon, 1 Dec 2008 22:14:55 +0000
> Matthew Garrett <mjg59@srcf.ucam.org> wrote:
>
> > This has been picked up by Jesse for the PCI tree.
>
> It isn't in today's linux-next?
Tomorrow, possibly?
--
Matthew Garrett | mjg59@srcf.ucam.org
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2008-12-01 22:43 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-12-01 22:12 [patch 2/3] acpiphp: identify more removable slots akpm
2008-12-01 22:14 ` Matthew Garrett
2008-12-01 22:39 ` Andrew Morton
2008-12-01 22:43 ` Matthew Garrett
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox