All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers
@ 2013-06-28 16:24 Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 01/10] ACPI, DOCK: avoid initializing acpi_dock_notifier_list multiple times Jiang Liu
                   ` (10 more replies)
  0 siblings, 11 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel

From: Jiang Liu <jiang.liu@huawei.com>

This is an following up patchset of "[PATCH 0/3] ACPI / dock / PCI: Fix
problems with dock and PCI hotplug" with minor code cleanups and
refinements. It applies to
git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next

Due to hardware resource limitation, I have only done compilation and
boot tests.

V2->V3:
    The first four patches are the same as previous version and rework
    all other patches according to review comments.

Jiang Liu (10):
  ACPI, DOCK: avoid initializing acpi_dock_notifier_list multiple times
  ACPI, DOCK: kill redundant spin lock in dock station object
  ACPI, DOCK: mark initialization functions with __init
  ACPI, DOCK: simplify implementation of dock_create_acpi_device()
  ACPI: introduce helper function acpi_has_method()
  ACPI: introduce helper function acpi_execute_simple_method()
  ACPI: introduce two helper functions to simplify code
  ACPI: change acpi_[bay|dock]_match() in scan.c as global functions
  ACPI: simplify dock driver with new helper functions
  ACPI: simplify acpiphp driver with new helper functions

 drivers/acpi/battery.c             |  19 +---
 drivers/acpi/bus.c                 |   6 +-
 drivers/acpi/dock.c                | 152 ++++-------------------------
 drivers/acpi/ec.c                  |   4 +-
 drivers/acpi/power.c               |   4 +-
 drivers/acpi/processor_perflib.c   |  22 ++---
 drivers/acpi/resource.c            |   4 +-
 drivers/acpi/scan.c                | 189 +++++++++++++------------------------
 drivers/acpi/sleep.c               |   7 +-
 drivers/acpi/thermal.c             |  18 +---
 drivers/acpi/utils.c               |  70 ++++++++++++++
 drivers/acpi/video.c               |  56 ++++-------
 drivers/acpi/video_detect.c        |  19 ++--
 drivers/pci/hotplug/acpiphp_glue.c |  30 ++----
 include/acpi/acpi_bus.h            |  10 ++
 15 files changed, 218 insertions(+), 392 deletions(-)

-- 
1.8.1.2


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

* [PATCH v3 01/10] ACPI, DOCK: avoid initializing acpi_dock_notifier_list multiple times
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 02/10] ACPI, DOCK: kill redundant spin lock in dock station object Jiang Liu
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel, Len Brown

From: Jiang Liu <jiang.liu@huawei.com>

Function dock_add() will be called multiple times if there are multiple
dock stations, which causes acpi_dock_notifier_list being initialized
multiple times. So move initialization of acpi_dock_notifier_list from
dock_add() to acpi_dock_init().

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/dock.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index 14de9f4..e944e39 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -1007,7 +1007,6 @@ static int __init dock_add(acpi_handle handle)
 	mutex_init(&dock_station->hp_lock);
 	spin_lock_init(&dock_station->dd_lock);
 	INIT_LIST_HEAD(&dock_station->sibling);
-	ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list);
 	INIT_LIST_HEAD(&dock_station->dependent_devices);
 
 	/* we want the dock device to send uevents */
@@ -1078,6 +1077,7 @@ int __init acpi_dock_init(void)
 		return 0;
 	}
 
+	ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list);
 	register_acpi_bus_notifier(&dock_acpi_notifier);
 	pr_info(PREFIX "%s: %d docks/bays found\n",
 		ACPI_DOCK_DRIVER_DESCRIPTION, dock_station_count);
-- 
1.8.1.2

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

* [PATCH v3 02/10] ACPI, DOCK: kill redundant spin lock in dock station object
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 01/10] ACPI, DOCK: avoid initializing acpi_dock_notifier_list multiple times Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 03/10] ACPI, DOCK: mark initialization functions with __init Jiang Liu
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel, Len Brown

From: Jiang Liu <jiang.liu@huawei.com>

All dock station objects are created during initialization and don't
change at runtime, so kill the redundant spin lock in dock station
object.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/dock.c | 15 +++------------
 1 file changed, 3 insertions(+), 12 deletions(-)

diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index e944e39..a73571f 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -63,7 +63,6 @@ struct dock_station {
 	acpi_handle handle;
 	unsigned long last_dock_time;
 	u32 flags;
-	spinlock_t dd_lock;
 	struct mutex hp_lock;
 	struct list_head dependent_devices;
 
@@ -112,10 +111,7 @@ add_dock_dependent_device(struct dock_station *ds, acpi_handle handle)
 
 	dd->handle = handle;
 	INIT_LIST_HEAD(&dd->list);
-
-	spin_lock(&ds->dd_lock);
 	list_add_tail(&dd->list, &ds->dependent_devices);
-	spin_unlock(&ds->dd_lock);
 
 	return 0;
 }
@@ -220,14 +216,10 @@ find_dock_dependent_device(struct dock_station *ds, acpi_handle handle)
 {
 	struct dock_dependent_device *dd;
 
-	spin_lock(&ds->dd_lock);
-	list_for_each_entry(dd, &ds->dependent_devices, list) {
-		if (handle == dd->handle) {
-			spin_unlock(&ds->dd_lock);
+	list_for_each_entry(dd, &ds->dependent_devices, list)
+		if (handle == dd->handle)
 			return dd;
-		}
-	}
-	spin_unlock(&ds->dd_lock);
+
 	return NULL;
 }
 
@@ -1005,7 +997,6 @@ static int __init dock_add(acpi_handle handle)
 	dock_station->last_dock_time = jiffies - HZ;
 
 	mutex_init(&dock_station->hp_lock);
-	spin_lock_init(&dock_station->dd_lock);
 	INIT_LIST_HEAD(&dock_station->sibling);
 	INIT_LIST_HEAD(&dock_station->dependent_devices);
 
-- 
1.8.1.2

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

* [PATCH v3 03/10] ACPI, DOCK: mark initialization functions with __init
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 01/10] ACPI, DOCK: avoid initializing acpi_dock_notifier_list multiple times Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 02/10] ACPI, DOCK: kill redundant spin lock in dock station object Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 04/10] ACPI, DOCK: simplify implementation of dock_create_acpi_device() Jiang Liu
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel, Len Brown

From: Jiang Liu <jiang.liu@huawei.com>

Mark all initialization functions with __init to reduce runtime memory
consumption.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/dock.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index a73571f..8c4214d 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -100,7 +100,7 @@ struct dock_dependent_device {
  *
  * Add the dependent device to the dock's dependent device list.
  */
-static int
+static int __init
 add_dock_dependent_device(struct dock_station *ds, acpi_handle handle)
 {
 	struct dock_dependent_device *dd;
@@ -244,7 +244,7 @@ static int is_dock(acpi_handle handle)
 	return 1;
 }
 
-static int is_ejectable(acpi_handle handle)
+static int __init is_ejectable(acpi_handle handle)
 {
 	acpi_status status;
 	acpi_handle tmp;
@@ -255,7 +255,7 @@ static int is_ejectable(acpi_handle handle)
 	return 1;
 }
 
-static int is_ata(acpi_handle handle)
+static int __init is_ata(acpi_handle handle)
 {
 	acpi_handle tmp;
 
@@ -268,7 +268,7 @@ static int is_ata(acpi_handle handle)
 	return 0;
 }
 
-static int is_battery(acpi_handle handle)
+static int __init is_battery(acpi_handle handle)
 {
 	struct acpi_device_info *info;
 	int ret = 1;
@@ -284,7 +284,7 @@ static int is_battery(acpi_handle handle)
 	return ret;
 }
 
-static int is_ejectable_bay(acpi_handle handle)
+static int __init is_ejectable_bay(acpi_handle handle)
 {
 	acpi_handle phandle;
 
@@ -848,7 +848,7 @@ static struct notifier_block dock_acpi_notifier = {
  * check to see if an object has an _EJD method.  If it does, then it
  * will see if it is dependent on the dock station.
  */
-static acpi_status
+static acpi_status __init
 find_dock_devices(acpi_handle handle, u32 lvl, void *context, void **rv)
 {
 	acpi_status status;
-- 
1.8.1.2

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

* [PATCH v3 04/10] ACPI, DOCK: simplify implementation of dock_create_acpi_device()
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (2 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 03/10] ACPI, DOCK: mark initialization functions with __init Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 05/10] ACPI: introduce helper function acpi_has_method() Jiang Liu
                   ` (6 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel, Len Brown

From: Jiang Liu <jiang.liu@huawei.com>

The return value of dock_create_acpi_device() is not used at all,
so change the signature to return void and simplify implementation.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/dock.c | 7 +------
 1 file changed, 1 insertion(+), 6 deletions(-)

diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index 8c4214d..22183c4 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -351,10 +351,8 @@ static int dock_present(struct dock_station *ds)
  *  handle if one does not exist already.  This should cause
  *  acpi to scan for drivers for the given devices, and call
  *  matching driver's add routine.
- *
- *  Returns a pointer to the acpi_device corresponding to the handle.
  */
-static struct acpi_device * dock_create_acpi_device(acpi_handle handle)
+static void dock_create_acpi_device(acpi_handle handle)
 {
 	struct acpi_device *device;
 	int ret;
@@ -367,10 +365,7 @@ static struct acpi_device * dock_create_acpi_device(acpi_handle handle)
 		ret = acpi_bus_scan(handle);
 		if (ret)
 			pr_debug("error adding bus, %x\n", -ret);
-
-		acpi_bus_get_device(handle, &device);
 	}
-	return device;
 }
 
 /**
-- 
1.8.1.2

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

* [PATCH v3 05/10] ACPI: introduce helper function acpi_has_method()
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (3 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 04/10] ACPI, DOCK: simplify implementation of dock_create_acpi_device() Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 06/10] ACPI: introduce helper function acpi_execute_simple_method() Jiang Liu
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel,
	Len Brown, Zhang Rui

From: Jiang Liu <jiang.liu@huawei.com>

Introduce helper function acpi_has_method() to simplify code.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Jiang Liu <liuj97@gmail.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/battery.c           | 11 ++---
 drivers/acpi/ec.c                |  4 +-
 drivers/acpi/processor_perflib.c | 22 +++------
 drivers/acpi/resource.c          |  4 +-
 drivers/acpi/scan.c              | 99 ++++++++++++----------------------------
 drivers/acpi/utils.c             | 15 ++++++
 drivers/acpi/video.c             | 39 +++++-----------
 drivers/acpi/video_detect.c      | 19 ++++----
 include/acpi/acpi_bus.h          |  3 ++
 9 files changed, 80 insertions(+), 136 deletions(-)

diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index 082b4dd..a762716 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -548,12 +548,8 @@ static int acpi_battery_set_alarm(struct acpi_battery *battery)
 
 static int acpi_battery_init_alarm(struct acpi_battery *battery)
 {
-	acpi_status status = AE_OK;
-	acpi_handle handle = NULL;
-
 	/* See if alarms are supported, and if so, set default */
-	status = acpi_get_handle(battery->device->handle, "_BTP", &handle);
-	if (ACPI_FAILURE(status)) {
+	if (!acpi_has_method(battery->device->handle, "_BTP")) {
 		clear_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags);
 		return 0;
 	}
@@ -1066,7 +1062,7 @@ static int acpi_battery_add(struct acpi_device *device)
 {
 	int result = 0;
 	struct acpi_battery *battery = NULL;
-	acpi_handle handle;
+
 	if (!device)
 		return -EINVAL;
 	battery = kzalloc(sizeof(struct acpi_battery), GFP_KERNEL);
@@ -1078,8 +1074,7 @@ static int acpi_battery_add(struct acpi_device *device)
 	device->driver_data = battery;
 	mutex_init(&battery->lock);
 	mutex_init(&battery->sysfs_lock);
-	if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle,
-			"_BIX", &handle)))
+	if (acpi_has_method(battery->device->handle, "_BIX"))
 		set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
 	result = acpi_battery_update(battery);
 	if (result)
diff --git a/drivers/acpi/ec.c b/drivers/acpi/ec.c
index 80403c1..84bf06c 100644
--- a/drivers/acpi/ec.c
+++ b/drivers/acpi/ec.c
@@ -1049,10 +1049,8 @@ int __init acpi_ec_ecdt_probe(void)
 		* which needs it, has fake EC._INI method, so use it as flag.
 		* Keep boot_ec struct as it will be needed soon.
 		*/
-		acpi_handle dummy;
 		if (!dmi_name_in_vendors("ASUS") ||
-		    ACPI_FAILURE(acpi_get_handle(boot_ec->handle, "_INI",
-							&dummy)))
+		    !acpi_has_method(boot_ec->handle, "_INI"))
 			return -ENODEV;
 	}
 install:
diff --git a/drivers/acpi/processor_perflib.c b/drivers/acpi/processor_perflib.c
index 1e9732d..51d7948 100644
--- a/drivers/acpi/processor_perflib.c
+++ b/drivers/acpi/processor_perflib.c
@@ -164,17 +164,12 @@ static void acpi_processor_ppc_ost(acpi_handle handle, int status)
 		{.type = ACPI_TYPE_INTEGER,},
 	};
 	struct acpi_object_list arg_list = {2, params};
-	acpi_handle temp;
 
-	params[0].integer.value = ACPI_PROCESSOR_NOTIFY_PERFORMANCE;
-	params[1].integer.value =  status;
-
-	/* when there is no _OST , skip it */
-	if (ACPI_FAILURE(acpi_get_handle(handle, "_OST", &temp)))
-		return;
-
-	acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
-	return;
+	if (acpi_has_method(handle, "_OST")) {
+		params[0].integer.value = ACPI_PROCESSOR_NOTIFY_PERFORMANCE;
+		params[1].integer.value =  status;
+		acpi_evaluate_object(handle, "_OST", &arg_list, NULL);
+	}
 }
 
 int acpi_processor_ppc_has_changed(struct acpi_processor *pr, int event_flag)
@@ -468,14 +463,11 @@ static int acpi_processor_get_performance_states(struct acpi_processor *pr)
 int acpi_processor_get_performance_info(struct acpi_processor *pr)
 {
 	int result = 0;
-	acpi_status status = AE_OK;
-	acpi_handle handle = NULL;
 
 	if (!pr || !pr->performance || !pr->handle)
 		return -EINVAL;
 
-	status = acpi_get_handle(pr->handle, "_PCT", &handle);
-	if (ACPI_FAILURE(status)) {
+	if (!acpi_has_method(pr->handle, "_PCT")) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO,
 				  "ACPI-based processor performance control unavailable\n"));
 		return -ENODEV;
@@ -501,7 +493,7 @@ int acpi_processor_get_performance_info(struct acpi_processor *pr)
 	 */
  update_bios:
 #ifdef CONFIG_X86
-	if (ACPI_SUCCESS(acpi_get_handle(pr->handle, "_PPC", &handle))){
+	if (acpi_has_method(pr->handle, "_PPC")) {
 		if(boot_cpu_has(X86_FEATURE_EST))
 			printk(KERN_WARNING FW_BUG "BIOS needs update for CPU "
 			       "frequency support\n");
diff --git a/drivers/acpi/resource.c b/drivers/acpi/resource.c
index 3322b47..b7201fc 100644
--- a/drivers/acpi/resource.c
+++ b/drivers/acpi/resource.c
@@ -505,14 +505,12 @@ int acpi_dev_get_resources(struct acpi_device *adev, struct list_head *list,
 			   void *preproc_data)
 {
 	struct res_proc_context c;
-	acpi_handle not_used;
 	acpi_status status;
 
 	if (!adev || !adev->handle || !list_empty(list))
 		return -EINVAL;
 
-	status = acpi_get_handle(adev->handle, METHOD_NAME__CRS, &not_used);
-	if (ACPI_FAILURE(status))
+	if (!acpi_has_method(adev->handle, METHOD_NAME__CRS))
 		return 0;
 
 	c.list = list;
diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index dfe76f1..84d88a0 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -194,7 +194,6 @@ static acpi_status acpi_bus_online_companions(acpi_handle handle, u32 lvl,
 static int acpi_scan_hot_remove(struct acpi_device *device)
 {
 	acpi_handle handle = device->handle;
-	acpi_handle not_used;
 	struct acpi_object_list arg_list;
 	union acpi_object arg;
 	struct device *errdev;
@@ -259,7 +258,7 @@ static int acpi_scan_hot_remove(struct acpi_device *device)
 	put_device(&device->dev);
 	device = NULL;
 
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_LCK", &not_used))) {
+	if (acpi_has_method(handle, "_LCK")) {
 		arg_list.count = 1;
 		arg_list.pointer = &arg;
 		arg.type = ACPI_TYPE_INTEGER;
@@ -653,7 +652,6 @@ static int acpi_device_setup_files(struct acpi_device *dev)
 {
 	struct acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
 	acpi_status status;
-	acpi_handle temp;
 	unsigned long long sun;
 	int result = 0;
 
@@ -679,8 +677,7 @@ static int acpi_device_setup_files(struct acpi_device *dev)
 	/*
 	 * If device has _STR, 'description' file is created
 	 */
-	status = acpi_get_handle(dev->handle, "_STR", &temp);
-	if (ACPI_SUCCESS(status)) {
+	if (acpi_has_method(dev->handle, "_STR")) {
 		status = acpi_evaluate_object(dev->handle, "_STR",
 					NULL, &buffer);
 		if (ACPI_FAILURE(status))
@@ -710,8 +707,7 @@ static int acpi_device_setup_files(struct acpi_device *dev)
          * If device has _EJ0, 'eject' file is created that is used to trigger
          * hot-removal function from userland.
          */
-	status = acpi_get_handle(dev->handle, "_EJ0", &temp);
-	if (ACPI_SUCCESS(status)) {
+	if (acpi_has_method(dev->handle, "_EJ0")) {
 		result = device_create_file(&dev->dev, &dev_attr_eject);
 		if (result)
 			return result;
@@ -733,9 +729,6 @@ end:
 
 static void acpi_device_remove_files(struct acpi_device *dev)
 {
-	acpi_status status;
-	acpi_handle temp;
-
 	if (dev->flags.power_manageable) {
 		device_remove_file(&dev->dev, &dev_attr_power_state);
 		if (dev->power.flags.power_resources)
@@ -746,20 +739,17 @@ static void acpi_device_remove_files(struct acpi_device *dev)
 	/*
 	 * If device has _STR, remove 'description' file
 	 */
-	status = acpi_get_handle(dev->handle, "_STR", &temp);
-	if (ACPI_SUCCESS(status)) {
+	if (acpi_has_method(dev->handle, "_STR")) {
 		kfree(dev->pnp.str_obj);
 		device_remove_file(&dev->dev, &dev_attr_description);
 	}
 	/*
 	 * If device has _EJ0, remove 'eject' file.
 	 */
-	status = acpi_get_handle(dev->handle, "_EJ0", &temp);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(dev->handle, "_EJ0"))
 		device_remove_file(&dev->dev, &dev_attr_eject);
 
-	status = acpi_get_handle(dev->handle, "_SUN", &temp);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(dev->handle, "_SUN"))
 		device_remove_file(&dev->dev, &dev_attr_sun);
 
 	if (dev->pnp.unique_id)
@@ -1335,13 +1325,10 @@ static void acpi_bus_set_run_wake_flags(struct acpi_device *device)
 
 static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
 {
-	acpi_handle temp;
-	acpi_status status = 0;
 	int err;
 
 	/* Presence of _PRW indicates wake capable */
-	status = acpi_get_handle(device->handle, "_PRW", &temp);
-	if (ACPI_FAILURE(status))
+	if (!acpi_has_method(device->handle, "_PRW"))
 		return;
 
 	err = acpi_bus_extract_wakeup_device_power_package(device->handle,
@@ -1371,7 +1358,6 @@ static void acpi_bus_init_power_state(struct acpi_device *device, int state)
 	struct acpi_device_power_state *ps = &device->power.states[state];
 	char pathname[5] = { '_', 'P', 'R', '0' + state, '\0' };
 	struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
-	acpi_handle handle;
 	acpi_status status;
 
 	INIT_LIST_HEAD(&ps->resources);
@@ -1394,8 +1380,7 @@ static void acpi_bus_init_power_state(struct acpi_device *device, int state)
 
 	/* Evaluate "_PSx" to see if we can do explicit sets */
 	pathname[2] = 'S';
-	status = acpi_get_handle(device->handle, pathname, &handle);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(device->handle, pathname))
 		ps->flags.explicit_set = 1;
 
 	/*
@@ -1414,28 +1399,21 @@ static void acpi_bus_init_power_state(struct acpi_device *device, int state)
 
 static void acpi_bus_get_power_flags(struct acpi_device *device)
 {
-	acpi_status status;
-	acpi_handle handle;
 	u32 i;
 
 	/* Presence of _PS0|_PR0 indicates 'power manageable' */
-	status = acpi_get_handle(device->handle, "_PS0", &handle);
-	if (ACPI_FAILURE(status)) {
-		status = acpi_get_handle(device->handle, "_PR0", &handle);
-		if (ACPI_FAILURE(status))
-			return;
-	}
+	if (!acpi_has_method(device->handle, "_PS0") &&
+	    !acpi_has_method(device->handle, "_PR0"))
+		return;
 
 	device->flags.power_manageable = 1;
 
 	/*
 	 * Power Management Flags
 	 */
-	status = acpi_get_handle(device->handle, "_PSC", &handle);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(device->handle, "_PSC"))
 		device->power.flags.explicit_get = 1;
-	status = acpi_get_handle(device->handle, "_IRC", &handle);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(device->handle, "_IRC"))
 		device->power.flags.inrush_current = 1;
 
 	/*
@@ -1469,28 +1447,18 @@ static void acpi_bus_get_power_flags(struct acpi_device *device)
 
 static void acpi_bus_get_flags(struct acpi_device *device)
 {
-	acpi_status status = AE_OK;
-	acpi_handle temp = NULL;
-
 	/* Presence of _STA indicates 'dynamic_status' */
-	status = acpi_get_handle(device->handle, "_STA", &temp);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(device->handle, "_STA"))
 		device->flags.dynamic_status = 1;
 
 	/* Presence of _RMV indicates 'removable' */
-	status = acpi_get_handle(device->handle, "_RMV", &temp);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(device->handle, "_RMV"))
 		device->flags.removable = 1;
 
 	/* Presence of _EJD|_EJ0 indicates 'ejectable' */
-	status = acpi_get_handle(device->handle, "_EJD", &temp);
-	if (ACPI_SUCCESS(status))
+	if (acpi_has_method(device->handle, "_EJD") ||
+	    acpi_has_method(device->handle, "_EJ0"))
 		device->flags.ejectable = 1;
-	else {
-		status = acpi_get_handle(device->handle, "_EJ0", &temp);
-		if (ACPI_SUCCESS(status))
-			device->flags.ejectable = 1;
-	}
 }
 
 static void acpi_device_get_busid(struct acpi_device *device)
@@ -1539,27 +1507,24 @@ static void acpi_device_get_busid(struct acpi_device *device)
  */
 static int acpi_bay_match(acpi_handle handle)
 {
-	acpi_status status;
-	acpi_handle tmp;
 	acpi_handle phandle;
 
-	status = acpi_get_handle(handle, "_EJ0", &tmp);
-	if (ACPI_FAILURE(status))
+	if (!acpi_has_method(handle, "_EJ0"))
 		return -ENODEV;
 
-	if ((ACPI_SUCCESS(acpi_get_handle(handle, "_GTF", &tmp))) ||
-		(ACPI_SUCCESS(acpi_get_handle(handle, "_GTM", &tmp))) ||
-		(ACPI_SUCCESS(acpi_get_handle(handle, "_STM", &tmp))) ||
-		(ACPI_SUCCESS(acpi_get_handle(handle, "_SDD", &tmp))))
+	if (acpi_has_method(handle, "_GTF") ||
+	    acpi_has_method(handle, "_GTM") ||
+	    acpi_has_method(handle, "_STM") ||
+	    acpi_has_method(handle, "_SDD"))
 		return 0;
 
 	if (acpi_get_parent(handle, &phandle))
 		return -ENODEV;
 
-        if ((ACPI_SUCCESS(acpi_get_handle(phandle, "_GTF", &tmp))) ||
-                (ACPI_SUCCESS(acpi_get_handle(phandle, "_GTM", &tmp))) ||
-                (ACPI_SUCCESS(acpi_get_handle(phandle, "_STM", &tmp))) ||
-                (ACPI_SUCCESS(acpi_get_handle(phandle, "_SDD", &tmp))))
+	if (acpi_has_method(phandle, "_GTF") ||
+	    acpi_has_method(phandle, "_GTM") ||
+	    acpi_has_method(phandle, "_STM") ||
+	    acpi_has_method(phandle, "_SDD"))
                 return 0;
 
 	return -ENODEV;
@@ -1611,7 +1576,6 @@ static void acpi_add_id(struct acpi_device_pnp *pnp, const char *dev_id)
  */
 static int acpi_ibm_smbus_match(acpi_handle handle)
 {
-	acpi_handle h_dummy;
 	struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL};
 	int result;
 
@@ -1630,9 +1594,9 @@ static int acpi_ibm_smbus_match(acpi_handle handle)
 
 	/* Does it have the necessary (but misnamed) methods? */
 	result = -ENODEV;
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "SBI", &h_dummy)) &&
-	    ACPI_SUCCESS(acpi_get_handle(handle, "SBR", &h_dummy)) &&
-	    ACPI_SUCCESS(acpi_get_handle(handle, "SBW", &h_dummy)))
+	if (acpi_has_method(handle, "SBI") &&
+	    acpi_has_method(handle, "SBR") &&
+	    acpi_has_method(handle, "SBW"))
 		result = 0;
 out:
 	kfree(path.pointer);
@@ -1899,7 +1863,6 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used,
 	struct acpi_device *device = NULL;
 	int type;
 	unsigned long long sta;
-	acpi_status status;
 	int result;
 
 	acpi_bus_get_device(handle, &device);
@@ -1920,10 +1883,8 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl_not_used,
 	if (!(sta & ACPI_STA_DEVICE_PRESENT) &&
 	    !(sta & ACPI_STA_DEVICE_FUNCTIONING)) {
 		struct acpi_device_wakeup wakeup;
-		acpi_handle temp;
 
-		status = acpi_get_handle(handle, "_PRW", &temp);
-		if (ACPI_SUCCESS(status)) {
+		if (acpi_has_method(handle, "_PRW")) {
 			acpi_bus_extract_wakeup_device_power_package(handle,
 								     &wakeup);
 			acpi_power_resources_list_free(&wakeup.resources);
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 74437130..b08d973 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -495,3 +495,18 @@ acpi_handle_printk(const char *level, acpi_handle handle, const char *fmt, ...)
 	kfree(buffer.pointer);
 }
 EXPORT_SYMBOL(acpi_handle_printk);
+
+/**
+ * acpi_has_method: Check whether @handle has a method named @name
+ * @handle: ACPI device handle
+ * @name: name of object or method
+ *
+ * Check whether @handle has a method named @name.
+ */
+bool acpi_has_method(acpi_handle handle, char *name)
+{
+	acpi_handle tmp;
+
+	return ACPI_SUCCESS(acpi_get_handle(handle, name, &tmp));
+}
+EXPORT_SYMBOL(acpi_has_method);
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index 5d7075d..a84533e 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -875,28 +875,21 @@ out:
 
 static void acpi_video_device_find_cap(struct acpi_video_device *device)
 {
-	acpi_handle h_dummy1;
-
-	if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_ADR", &h_dummy1))) {
+	if (acpi_has_method(device->dev->handle, "_ADR"))
 		device->cap._ADR = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_BCL", &h_dummy1))) {
+	if (acpi_has_method(device->dev->handle, "_BCL"))
 		device->cap._BCL = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_BCM", &h_dummy1))) {
+	if (acpi_has_method(device->dev->handle, "_BCM"))
 		device->cap._BCM = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle,"_BQC",&h_dummy1)))
+	if (acpi_has_method(device->dev->handle, "_BQC")) {
 		device->cap._BQC = 1;
-	else if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_BCQ",
-				&h_dummy1))) {
+	} else if (acpi_has_method(device->dev->handle, "_BCQ")) {
 		printk(KERN_WARNING FW_BUG "_BCQ is used instead of _BQC\n");
 		device->cap._BCQ = 1;
 	}
 
-	if (ACPI_SUCCESS(acpi_get_handle(device->dev->handle, "_DDC", &h_dummy1))) {
+	if (acpi_has_method(device->dev->handle, "_DDC"))
 		device->cap._DDC = 1;
-	}
 
 	if (acpi_video_backlight_support()) {
 		struct backlight_properties props;
@@ -984,26 +977,18 @@ static void acpi_video_device_find_cap(struct acpi_video_device *device)
 
 static void acpi_video_bus_find_cap(struct acpi_video_bus *video)
 {
-	acpi_handle h_dummy1;
-
-	if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_DOS", &h_dummy1))) {
+	if (acpi_has_method(video->device->handle, "_DOS"))
 		video->cap._DOS = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_DOD", &h_dummy1))) {
+	if (acpi_has_method(video->device->handle, "_DOD"))
 		video->cap._DOD = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_ROM", &h_dummy1))) {
+	if (acpi_has_method(video->device->handle, "_ROM"))
 		video->cap._ROM = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_GPD", &h_dummy1))) {
+	if (acpi_has_method(video->device->handle, "_GPD"))
 		video->cap._GPD = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_SPD", &h_dummy1))) {
+	if (acpi_has_method(video->device->handle, "_SPD"))
 		video->cap._SPD = 1;
-	}
-	if (ACPI_SUCCESS(acpi_get_handle(video->device->handle, "_VPO", &h_dummy1))) {
+	if (acpi_has_method(video->device->handle, "_VPO"))
 		video->cap._VPO = 1;
-	}
 }
 
 /*
diff --git a/drivers/acpi/video_detect.c b/drivers/acpi/video_detect.c
index e6bd910..ddefa5f 100644
--- a/drivers/acpi/video_detect.c
+++ b/drivers/acpi/video_detect.c
@@ -51,14 +51,13 @@ acpi_backlight_cap_match(acpi_handle handle, u32 level, void *context,
 			  void **retyurn_value)
 {
 	long *cap = context;
-	acpi_handle h_dummy;
 
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_BCM", &h_dummy)) &&
-	    ACPI_SUCCESS(acpi_get_handle(handle, "_BCL", &h_dummy))) {
+	if (acpi_has_method(handle, "_BCM") &&
+	    acpi_has_method(handle, "_BCL")) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "Found generic backlight "
 				  "support\n"));
 		*cap |= ACPI_VIDEO_BACKLIGHT;
-		if (ACPI_FAILURE(acpi_get_handle(handle, "_BQC", &h_dummy)))
+		if (!acpi_has_method(handle, "_BQC"))
 			printk(KERN_WARNING FW_BUG PREFIX "No _BQC method, "
 				"cannot determine initial brightness\n");
 		/* We have backlight support, no need to scan further */
@@ -77,22 +76,20 @@ acpi_backlight_cap_match(acpi_handle handle, u32 level, void *context,
  */
 long acpi_is_video_device(acpi_handle handle)
 {
-	acpi_handle h_dummy;
 	long video_caps = 0;
 
 	/* Is this device able to support video switching ? */
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_DOD", &h_dummy)) ||
-	    ACPI_SUCCESS(acpi_get_handle(handle, "_DOS", &h_dummy)))
+	if (acpi_has_method(handle, "_DOD") || acpi_has_method(handle, "_DOS"))
 		video_caps |= ACPI_VIDEO_OUTPUT_SWITCHING;
 
 	/* Is this device able to retrieve a video ROM ? */
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_ROM", &h_dummy)))
+	if (acpi_has_method(handle, "_ROM"))
 		video_caps |= ACPI_VIDEO_ROM_AVAILABLE;
 
 	/* Is this device able to configure which video head to be POSTed ? */
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_VPO", &h_dummy)) &&
-	    ACPI_SUCCESS(acpi_get_handle(handle, "_GPD", &h_dummy)) &&
-	    ACPI_SUCCESS(acpi_get_handle(handle, "_SPD", &h_dummy)))
+	if (acpi_has_method(handle, "_VPO") &&
+	    acpi_has_method(handle, "_GPD") &&
+	    acpi_has_method(handle, "_SPD"))
 		video_caps |= ACPI_VIDEO_DEVICE_POSTING;
 
 	/* Only check for backlight functionality if one of the above hit. */
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index ca081ac..503b1b7 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -56,6 +56,9 @@ acpi_evaluate_hotplug_ost(acpi_handle handle, u32 source_event,
 
 acpi_status
 acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld);
+
+bool acpi_has_method(acpi_handle handle, char *name);
+
 #ifdef CONFIG_ACPI
 
 #include <linux/proc_fs.h>
-- 
1.8.1.2

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

* [PATCH v3 06/10] ACPI: introduce helper function acpi_execute_simple_method()
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (4 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 05/10] ACPI: introduce helper function acpi_has_method() Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 07/10] ACPI: introduce two helper functions to simplify code Jiang Liu
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel,
	Len Brown, Zhang Rui

From: Jiang Liu <jiang.liu@huawei.com>

Introduce helper function acpi_execute_simple_method() to simplify code.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Jiang Liu <jiang.liu@huawei.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Zhang Rui <rui.zhang@intel.com>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/battery.c  |  8 ++------
 drivers/acpi/bus.c      |  6 +-----
 drivers/acpi/power.c    |  4 +---
 drivers/acpi/sleep.c    |  7 ++-----
 drivers/acpi/thermal.c  | 18 ++++--------------
 drivers/acpi/utils.c    | 12 ++++++++++++
 drivers/acpi/video.c    | 17 +++++------------
 include/acpi/acpi_bus.h |  2 ++
 8 files changed, 29 insertions(+), 45 deletions(-)

diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
index a762716..74669ac 100644
--- a/drivers/acpi/battery.c
+++ b/drivers/acpi/battery.c
@@ -525,18 +525,14 @@ static int acpi_battery_get_state(struct acpi_battery *battery)
 static int acpi_battery_set_alarm(struct acpi_battery *battery)
 {
 	acpi_status status = 0;
-	union acpi_object arg0 = { .type = ACPI_TYPE_INTEGER };
-	struct acpi_object_list arg_list = { 1, &arg0 };
 
 	if (!acpi_battery_present(battery) ||
 	    !test_bit(ACPI_BATTERY_ALARM_PRESENT, &battery->flags))
 		return -ENODEV;
 
-	arg0.integer.value = battery->alarm;
-
 	mutex_lock(&battery->lock);
-	status = acpi_evaluate_object(battery->device->handle, "_BTP",
-				 &arg_list, NULL);
+	status = acpi_execute_simple_method(battery->device->handle, "_BTP",
+					    battery->alarm);
 	mutex_unlock(&battery->lock);
 
 	if (ACPI_FAILURE(status))
diff --git a/drivers/acpi/bus.c b/drivers/acpi/bus.c
index a5bb33b..a5a032e 100644
--- a/drivers/acpi/bus.c
+++ b/drivers/acpi/bus.c
@@ -593,8 +593,6 @@ static void acpi_bus_notify(acpi_handle handle, u32 type, void *data)
 static int __init acpi_bus_init_irq(void)
 {
 	acpi_status status;
-	union acpi_object arg = { ACPI_TYPE_INTEGER };
-	struct acpi_object_list arg_list = { 1, &arg };
 	char *message = NULL;
 
 
@@ -623,9 +621,7 @@ static int __init acpi_bus_init_irq(void)
 
 	printk(KERN_INFO PREFIX "Using %s for interrupt routing\n", message);
 
-	arg.integer.value = acpi_irq_model;
-
-	status = acpi_evaluate_object(NULL, "\\_PIC", &arg_list, NULL);
+	status = acpi_execute_simple_method(NULL, "\\_PIC", acpi_irq_model);
 	if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
 		ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PIC"));
 		return -ENODEV;
diff --git a/drivers/acpi/power.c b/drivers/acpi/power.c
index 288bb27..e59ad13 100644
--- a/drivers/acpi/power.c
+++ b/drivers/acpi/power.c
@@ -637,9 +637,7 @@ int acpi_device_sleep_wake(struct acpi_device *dev,
 	}
 
 	/* Execute _PSW */
-	arg_list.count = 1;
-	in_arg[0].integer.value = enable;
-	status = acpi_evaluate_object(dev->handle, "_PSW", &arg_list, NULL);
+	status = acpi_execute_simple_method(dev->handle, "_PSW", enable);
 	if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
 		printk(KERN_ERR PREFIX "_PSW execution failed\n");
 		dev->wakeup.flags.valid = 0;
diff --git a/drivers/acpi/sleep.c b/drivers/acpi/sleep.c
index 187ab61..81b0f03 100644
--- a/drivers/acpi/sleep.c
+++ b/drivers/acpi/sleep.c
@@ -31,12 +31,9 @@ static u8 sleep_states[ACPI_S_STATE_COUNT];
 
 static void acpi_sleep_tts_switch(u32 acpi_state)
 {
-	union acpi_object in_arg = { ACPI_TYPE_INTEGER };
-	struct acpi_object_list arg_list = { 1, &in_arg };
-	acpi_status status = AE_OK;
+	acpi_status status;
 
-	in_arg.integer.value = acpi_state;
-	status = acpi_evaluate_object(NULL, "\\_TTS", &arg_list, NULL);
+	status = acpi_execute_simple_method(NULL, "\\_TTS", acpi_state);
 	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
 		/*
 		 * OS can't evaluate the _TTS object correctly. Some warning
diff --git a/drivers/acpi/thermal.c b/drivers/acpi/thermal.c
index a33821c..94523c7 100644
--- a/drivers/acpi/thermal.c
+++ b/drivers/acpi/thermal.c
@@ -239,26 +239,16 @@ static int acpi_thermal_get_polling_frequency(struct acpi_thermal *tz)
 
 static int acpi_thermal_set_cooling_mode(struct acpi_thermal *tz, int mode)
 {
-	acpi_status status = AE_OK;
-	union acpi_object arg0 = { ACPI_TYPE_INTEGER };
-	struct acpi_object_list arg_list = { 1, &arg0 };
-	acpi_handle handle = NULL;
-
-
 	if (!tz)
 		return -EINVAL;
 
-	status = acpi_get_handle(tz->device->handle, "_SCP", &handle);
-	if (ACPI_FAILURE(status)) {
+	if (!acpi_has_method(tz->device->handle, "_SCP")) {
 		ACPI_DEBUG_PRINT((ACPI_DB_INFO, "_SCP not present\n"));
 		return -ENODEV;
-	}
-
-	arg0.integer.value = mode;
-
-	status = acpi_evaluate_object(handle, NULL, &arg_list, NULL);
-	if (ACPI_FAILURE(status))
+	} else if (ACPI_FAILURE(acpi_execute_simple_method(tz->device->handle,
+							   "_SCP", mode))) {
 		return -ENODEV;
+	}
 
 	return 0;
 }
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index b08d973..87b8588 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -510,3 +510,15 @@ bool acpi_has_method(acpi_handle handle, char *name)
 	return ACPI_SUCCESS(acpi_get_handle(handle, name, &tmp));
 }
 EXPORT_SYMBOL(acpi_has_method);
+
+acpi_status acpi_execute_simple_method(acpi_handle handle, char *method,
+				       u64 arg)
+{
+	union acpi_object obj = { .type = ACPI_TYPE_INTEGER };
+	struct acpi_object_list arg_list = { .count = 1, .pointer = &obj, };
+
+	obj.integer.value = arg;
+
+	return acpi_evaluate_object(handle, method, &arg_list, NULL);
+}
+EXPORT_SYMBOL(acpi_execute_simple_method);
diff --git a/drivers/acpi/video.c b/drivers/acpi/video.c
index a84533e..b862c7f 100644
--- a/drivers/acpi/video.c
+++ b/drivers/acpi/video.c
@@ -353,14 +353,10 @@ static int
 acpi_video_device_lcd_set_level(struct acpi_video_device *device, int level)
 {
 	int status;
-	union acpi_object arg0 = { ACPI_TYPE_INTEGER };
-	struct acpi_object_list args = { 1, &arg0 };
 	int state;
 
-	arg0.integer.value = level;
-
-	status = acpi_evaluate_object(device->dev->handle, "_BCM",
-				      &args, NULL);
+	status = acpi_execute_simple_method(device->dev->handle,
+					    "_BCM", level);
 	if (ACPI_FAILURE(status)) {
 		ACPI_ERROR((AE_INFO, "Evaluating _BCM failed"));
 		return -EIO;
@@ -628,18 +624,15 @@ static int
 acpi_video_bus_DOS(struct acpi_video_bus *video, int bios_flag, int lcd_flag)
 {
 	acpi_status status;
-	union acpi_object arg0 = { ACPI_TYPE_INTEGER };
-	struct acpi_object_list args = { 1, &arg0 };
 
 	if (!video->cap._DOS)
 		return 0;
 
 	if (bios_flag < 0 || bios_flag > 3 || lcd_flag < 0 || lcd_flag > 1)
 		return -EINVAL;
-	arg0.integer.value = (lcd_flag << 2) | bios_flag;
-	video->dos_setting = arg0.integer.value;
-	status = acpi_evaluate_object(video->device->handle, "_DOS",
-		&args, NULL);
+	video->dos_setting = (lcd_flag << 2) | bios_flag;
+	status = acpi_execute_simple_method(video->device->handle, "_DOS",
+					    (lcd_flag << 2) | bios_flag);
 	if (ACPI_FAILURE(status))
 		return -EIO;
 
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 503b1b7..d3d5fc1 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -58,6 +58,8 @@ acpi_status
 acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld);
 
 bool acpi_has_method(acpi_handle handle, char *name);
+acpi_status acpi_execute_simple_method(acpi_handle handle, char *method,
+				       u64 arg);
 
 #ifdef CONFIG_ACPI
 
-- 
1.8.1.2

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

* [PATCH v3 07/10] ACPI: introduce two helper functions to simplify code
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (5 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 06/10] ACPI: introduce helper function acpi_execute_simple_method() Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 08/10] ACPI: change acpi_[bay|dock]_match() in scan.c as global functions Jiang Liu
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel, Len Brown

From: Jiang Liu <jiang.liu@huawei.com>

Introduce two helper functions, acpi_evaluate_ej0() and acpi_evaluate_lck()
to simplify code.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Jiang Liu <liuj97@gmail.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/scan.c     | 31 ++++++-------------------------
 drivers/acpi/utils.c    | 43 +++++++++++++++++++++++++++++++++++++++++++
 include/acpi/acpi_bus.h |  2 ++
 3 files changed, 51 insertions(+), 25 deletions(-)

diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 84d88a0..101a267 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -194,8 +194,6 @@ static acpi_status acpi_bus_online_companions(acpi_handle handle, u32 lvl,
 static int acpi_scan_hot_remove(struct acpi_device *device)
 {
 	acpi_handle handle = device->handle;
-	struct acpi_object_list arg_list;
-	union acpi_object arg;
 	struct device *errdev;
 	acpi_status status;
 	unsigned long long sta;
@@ -258,32 +256,15 @@ static int acpi_scan_hot_remove(struct acpi_device *device)
 	put_device(&device->dev);
 	device = NULL;
 
-	if (acpi_has_method(handle, "_LCK")) {
-		arg_list.count = 1;
-		arg_list.pointer = &arg;
-		arg.type = ACPI_TYPE_INTEGER;
-		arg.integer.value = 0;
-		acpi_evaluate_object(handle, "_LCK", &arg_list, NULL);
-	}
-
-	arg_list.count = 1;
-	arg_list.pointer = &arg;
-	arg.type = ACPI_TYPE_INTEGER;
-	arg.integer.value = 1;
-
+	acpi_evaluate_lck(handle, 0);
 	/*
 	 * TBD: _EJD support.
 	 */
-	status = acpi_evaluate_object(handle, "_EJ0", &arg_list, NULL);
-	if (ACPI_FAILURE(status)) {
-		if (status == AE_NOT_FOUND) {
-			return -ENODEV;
-		} else {
-			acpi_handle_warn(handle, "Eject failed (0x%x)\n",
-								status);
-			return -EIO;
-		}
-	}
+	status = acpi_evaluate_ej0(handle);
+	if (status == AE_NOT_FOUND)
+		return -ENODEV;
+	else if (ACPI_FAILURE(status))
+		return -EIO;
 
 	/*
 	 * Verify if eject was indeed successful.  If not, log an error
diff --git a/drivers/acpi/utils.c b/drivers/acpi/utils.c
index 87b8588..552248b 100644
--- a/drivers/acpi/utils.c
+++ b/drivers/acpi/utils.c
@@ -522,3 +522,46 @@ acpi_status acpi_execute_simple_method(acpi_handle handle, char *method,
 	return acpi_evaluate_object(handle, method, &arg_list, NULL);
 }
 EXPORT_SYMBOL(acpi_execute_simple_method);
+
+/**
+ * acpi_evaluate_ej0: Evaluate _EJ0 method for hotplug operations
+ * @handle: ACPI device handle
+ *
+ * Evaluate device's _EJ0 method for hotplug operations.
+ */
+acpi_status acpi_evaluate_ej0(acpi_handle handle)
+{
+	acpi_status status;
+
+	status = acpi_execute_simple_method(handle, "_EJ0", 1);
+	if (status == AE_NOT_FOUND)
+		acpi_handle_warn(handle, "No _EJ0 support for device\n");
+	else if (ACPI_FAILURE(status))
+		acpi_handle_warn(handle, "Eject failed (0x%x)\n", status);
+
+	return status;
+}
+
+/**
+ * acpi_evaluate_lck: Evaluate _LCK method to lock/unlock device
+ * @handle: ACPI device handle
+ * @lock: lock device if non-zero, otherwise unlock device
+ *
+ * Evaluate device's _LCK method if present to lock/unlock device
+ */
+acpi_status acpi_evaluate_lck(acpi_handle handle, int lock)
+{
+	acpi_status status;
+
+	status = acpi_execute_simple_method(handle, "_LCK", !!lock);
+	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
+		if (lock)
+			acpi_handle_warn(handle,
+				"Locking device failed (0x%x)\n", status);
+		else
+			acpi_handle_warn(handle,
+				"Unlocking device failed (0x%x)\n", status);
+	}
+
+	return status;
+}
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index d3d5fc1..6c378d9 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -60,6 +60,8 @@ acpi_get_physical_device_location(acpi_handle handle, struct acpi_pld_info **pld
 bool acpi_has_method(acpi_handle handle, char *name);
 acpi_status acpi_execute_simple_method(acpi_handle handle, char *method,
 				       u64 arg);
+acpi_status acpi_evaluate_ej0(acpi_handle handle);
+acpi_status acpi_evaluate_lck(acpi_handle handle, int lock);
 
 #ifdef CONFIG_ACPI
 
-- 
1.8.1.2


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

* [PATCH v3 08/10] ACPI: change acpi_[bay|dock]_match() in scan.c as global functions
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (6 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 07/10] ACPI: introduce two helper functions to simplify code Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 09/10] ACPI: simplify dock driver with new helper functions Jiang Liu
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel, Len Brown

From: Jiang Liu <jiang.liu@huawei.com>

Function acpi_[bay|dock]_match() in scan.c could be shared with dock.c
to reduce duplicated code, so refine and change them as global functions.
Also add a new function acpi_ata_match() to check whether an ACPI object
device is an ATA device.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Jiang Liu <liuj97@gmail.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/scan.c     | 77 +++++++++++++++++++++++--------------------------
 include/acpi/acpi_bus.h |  3 ++
 2 files changed, 39 insertions(+), 41 deletions(-)

diff --git a/drivers/acpi/scan.c b/drivers/acpi/scan.c
index 101a267..e7fd101 100644
--- a/drivers/acpi/scan.c
+++ b/drivers/acpi/scan.c
@@ -1481,43 +1481,45 @@ static void acpi_device_get_busid(struct acpi_device *device)
 }
 
 /*
+ * acpi_ata_match - see if an acpi object is an ATA device
+ *
+ * If an acpi object has one of the ACPI ATA methods defined,
+ * then we can safely call it an ATA device.
+ */
+bool acpi_ata_match(acpi_handle handle)
+{
+	return acpi_has_method(handle, "_GTF") ||
+	       acpi_has_method(handle, "_GTM") ||
+	       acpi_has_method(handle, "_STM") ||
+	       acpi_has_method(handle, "_SDD");
+}
+
+/*
  * acpi_bay_match - see if an acpi object is an ejectable driver bay
  *
  * If an acpi object is ejectable and has one of the ACPI ATA methods defined,
  * then we can safely call it an ejectable drive bay
  */
-static int acpi_bay_match(acpi_handle handle)
+bool acpi_bay_match(acpi_handle handle)
 {
 	acpi_handle phandle;
 
 	if (!acpi_has_method(handle, "_EJ0"))
-		return -ENODEV;
+		return false;
+	if (acpi_ata_match(handle))
+		return true;
+	if (ACPI_FAILURE(acpi_get_parent(handle, &phandle)))
+		return false;
 
-	if (acpi_has_method(handle, "_GTF") ||
-	    acpi_has_method(handle, "_GTM") ||
-	    acpi_has_method(handle, "_STM") ||
-	    acpi_has_method(handle, "_SDD"))
-		return 0;
-
-	if (acpi_get_parent(handle, &phandle))
-		return -ENODEV;
-
-	if (acpi_has_method(phandle, "_GTF") ||
-	    acpi_has_method(phandle, "_GTM") ||
-	    acpi_has_method(phandle, "_STM") ||
-	    acpi_has_method(phandle, "_SDD"))
-                return 0;
-
-	return -ENODEV;
+	return acpi_ata_match(phandle);
 }
 
 /*
  * acpi_dock_match - see if an acpi object has a _DCK method
  */
-static int acpi_dock_match(acpi_handle handle)
+bool acpi_dock_match(acpi_handle handle)
 {
-	acpi_handle tmp;
-	return acpi_get_handle(handle, "_DCK", &tmp);
+	return acpi_has_method(handle, "_DCK");
 }
 
 const char *acpi_device_hid(struct acpi_device *device)
@@ -1555,33 +1557,26 @@ static void acpi_add_id(struct acpi_device_pnp *pnp, const char *dev_id)
  * lacks the SMBUS01 HID and the methods do not have the necessary "_"
  * prefix.  Work around this.
  */
-static int acpi_ibm_smbus_match(acpi_handle handle)
+static bool acpi_ibm_smbus_match(acpi_handle handle)
 {
-	struct acpi_buffer path = {ACPI_ALLOCATE_BUFFER, NULL};
-	int result;
+	char node_name[ACPI_PATH_SEGMENT_LENGTH];
+	struct acpi_buffer path = { sizeof(node_name), node_name };
 
 	if (!dmi_name_in_vendors("IBM"))
-		return -ENODEV;
+		return false;
 
 	/* Look for SMBS object */
-	result = acpi_get_name(handle, ACPI_SINGLE_NAME, &path);
-	if (result)
-		return result;
-
-	if (strcmp("SMBS", path.pointer)) {
-		result = -ENODEV;
-		goto out;
-	}
+	if (ACPI_FAILURE(acpi_get_name(handle, ACPI_SINGLE_NAME, &path)) ||
+	    strcmp("SMBS", path.pointer))
+		return false;
 
 	/* Does it have the necessary (but misnamed) methods? */
-	result = -ENODEV;
 	if (acpi_has_method(handle, "SBI") &&
 	    acpi_has_method(handle, "SBR") &&
 	    acpi_has_method(handle, "SBW"))
-		result = 0;
-out:
-	kfree(path.pointer);
-	return result;
+		return true;
+
+	return false;
 }
 
 static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
@@ -1629,11 +1624,11 @@ static void acpi_set_pnp_ids(acpi_handle handle, struct acpi_device_pnp *pnp,
 		 */
 		if (acpi_is_video_device(handle))
 			acpi_add_id(pnp, ACPI_VIDEO_HID);
-		else if (ACPI_SUCCESS(acpi_bay_match(handle)))
+		else if (acpi_bay_match(handle))
 			acpi_add_id(pnp, ACPI_BAY_HID);
-		else if (ACPI_SUCCESS(acpi_dock_match(handle)))
+		else if (acpi_dock_match(handle))
 			acpi_add_id(pnp, ACPI_DOCK_HID);
-		else if (!acpi_ibm_smbus_match(handle))
+		else if (acpi_ibm_smbus_match(handle))
 			acpi_add_id(pnp, ACPI_SMBUS_IBM_HID);
 		else if (list_empty(&pnp->ids) && handle == ACPI_ROOT_OBJECT) {
 			acpi_add_id(pnp, ACPI_BUS_HID); /* \_SB, LNXSYBUS */
diff --git a/include/acpi/acpi_bus.h b/include/acpi/acpi_bus.h
index 6c378d9..60fff75 100644
--- a/include/acpi/acpi_bus.h
+++ b/include/acpi/acpi_bus.h
@@ -62,6 +62,9 @@ acpi_status acpi_execute_simple_method(acpi_handle handle, char *method,
 				       u64 arg);
 acpi_status acpi_evaluate_ej0(acpi_handle handle);
 acpi_status acpi_evaluate_lck(acpi_handle handle, int lock);
+bool acpi_ata_match(acpi_handle handle);
+bool acpi_bay_match(acpi_handle handle);
+bool acpi_dock_match(acpi_handle handle);
 
 #ifdef CONFIG_ACPI
 
-- 
1.8.1.2

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

* [PATCH v3 09/10] ACPI: simplify dock driver with new helper functions
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (7 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 08/10] ACPI: change acpi_[bay|dock]_match() in scan.c as global functions Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 16:24 ` [PATCH v3 10/10] ACPI: simplify acpiphp " Jiang Liu
  2013-06-28 18:42 ` [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Rafael J. Wysocki
  10 siblings, 0 replies; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel, Len Brown

From: Jiang Liu <jiang.liu@huawei.com>

Use new helper functions to simplify ACPI dock driver.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Jiang Liu <liuj97@gmail.com>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: linux-acpi@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/acpi/dock.c | 122 ++++++----------------------------------------------
 1 file changed, 12 insertions(+), 110 deletions(-)

diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index 22183c4..31ab001 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -226,48 +226,6 @@ find_dock_dependent_device(struct dock_station *ds, acpi_handle handle)
 /*****************************************************************************
  *                         Dock functions                                    *
  *****************************************************************************/
-/**
- * is_dock - see if a device is a dock station
- * @handle: acpi handle of the device
- *
- * If an acpi object has a _DCK method, then it is by definition a dock
- * station, so return true.
- */
-static int is_dock(acpi_handle handle)
-{
-	acpi_status status;
-	acpi_handle tmp;
-
-	status = acpi_get_handle(handle, "_DCK", &tmp);
-	if (ACPI_FAILURE(status))
-		return 0;
-	return 1;
-}
-
-static int __init is_ejectable(acpi_handle handle)
-{
-	acpi_status status;
-	acpi_handle tmp;
-
-	status = acpi_get_handle(handle, "_EJ0", &tmp);
-	if (ACPI_FAILURE(status))
-		return 0;
-	return 1;
-}
-
-static int __init is_ata(acpi_handle handle)
-{
-	acpi_handle tmp;
-
-	if ((ACPI_SUCCESS(acpi_get_handle(handle, "_GTF", &tmp))) ||
-	   (ACPI_SUCCESS(acpi_get_handle(handle, "_GTM", &tmp))) ||
-	   (ACPI_SUCCESS(acpi_get_handle(handle, "_STM", &tmp))) ||
-	   (ACPI_SUCCESS(acpi_get_handle(handle, "_SDD", &tmp))))
-		return 1;
-
-	return 0;
-}
-
 static int __init is_battery(acpi_handle handle)
 {
 	struct acpi_device_info *info;
@@ -284,17 +242,13 @@ static int __init is_battery(acpi_handle handle)
 	return ret;
 }
 
-static int __init is_ejectable_bay(acpi_handle handle)
+/* Check whether ACPI object is an ejectable battery or disk bay */
+static bool __init is_ejectable_bay(acpi_handle handle)
 {
-	acpi_handle phandle;
+	if (acpi_has_method(handle, "_EJ0") && is_battery(handle))
+		return true;
 
-	if (!is_ejectable(handle))
-		return 0;
-	if (is_battery(handle) || is_ata(handle))
-		return 1;
-	if (!acpi_get_parent(handle, &phandle) && is_ata(phandle))
-		return 1;
-	return 0;
+	return acpi_bay_match(handle);
 }
 
 /**
@@ -312,7 +266,7 @@ int is_dock_device(acpi_handle handle)
 	if (!dock_station_count)
 		return 0;
 
-	if (is_dock(handle))
+	if (acpi_dock_match(handle))
 		return 1;
 
 	list_for_each_entry(dock_station, &dock_stations, sibling)
@@ -447,37 +401,6 @@ static void dock_event(struct dock_station *ds, u32 event, int num)
 }
 
 /**
- * eject_dock - respond to a dock eject request
- * @ds: the dock station
- *
- * This is called after _DCK is called, to execute the dock station's
- * _EJ0 method.
- */
-static void eject_dock(struct dock_station *ds)
-{
-	struct acpi_object_list arg_list;
-	union acpi_object arg;
-	acpi_status status;
-	acpi_handle tmp;
-
-	/* all dock devices should have _EJ0, but check anyway */
-	status = acpi_get_handle(ds->handle, "_EJ0", &tmp);
-	if (ACPI_FAILURE(status)) {
-		pr_debug("No _EJ0 support for dock device\n");
-		return;
-	}
-
-	arg_list.count = 1;
-	arg_list.pointer = &arg;
-	arg.type = ACPI_TYPE_INTEGER;
-	arg.integer.value = 1;
-
-	status = acpi_evaluate_object(ds->handle, "_EJ0", &arg_list, NULL);
-	if (ACPI_FAILURE(status))
-		pr_debug("Failed to evaluate _EJ0!\n");
-}
-
-/**
  * handle_dock - handle a dock event
  * @ds: the dock station
  * @dock: to dock, or undock - that is the question
@@ -537,27 +460,6 @@ static inline void complete_undock(struct dock_station *ds)
 	ds->flags &= ~(DOCK_UNDOCKING);
 }
 
-static void dock_lock(struct dock_station *ds, int lock)
-{
-	struct acpi_object_list arg_list;
-	union acpi_object arg;
-	acpi_status status;
-
-	arg_list.count = 1;
-	arg_list.pointer = &arg;
-	arg.type = ACPI_TYPE_INTEGER;
-	arg.integer.value = !!lock;
-	status = acpi_evaluate_object(ds->handle, "_LCK", &arg_list, NULL);
-	if (ACPI_FAILURE(status) && status != AE_NOT_FOUND) {
-		if (lock)
-			acpi_handle_warn(ds->handle,
-				"Locking device failed (0x%x)\n", status);
-		else
-			acpi_handle_warn(ds->handle,
-				"Unlocking device failed (0x%x)\n", status);
-	}
-}
-
 /**
  * dock_in_progress - see if we are in the middle of handling a dock event
  * @ds: the dock station
@@ -692,8 +594,8 @@ static int handle_eject_request(struct dock_station *ds, u32 event)
 
 	hotplug_dock_devices(ds, ACPI_NOTIFY_EJECT_REQUEST);
 	undock(ds);
-	dock_lock(ds, 0);
-	eject_dock(ds);
+	acpi_evaluate_lck(ds->handle, 0);
+	acpi_evaluate_ej0(ds->handle);
 	if (dock_present(ds)) {
 		acpi_handle_err(ds->handle, "Unable to undock!\n");
 		return -EBUSY;
@@ -752,7 +654,7 @@ static void dock_notify(acpi_handle handle, u32 event, void *data)
 			hotplug_dock_devices(ds, event);
 			complete_dock(ds);
 			dock_event(ds, event, DOCK_EVENT);
-			dock_lock(ds, 1);
+			acpi_evaluate_lck(ds->handle, 1);
 			acpi_update_all_gpes();
 			break;
 		}
@@ -998,9 +900,9 @@ static int __init dock_add(acpi_handle handle)
 	/* we want the dock device to send uevents */
 	dev_set_uevent_suppress(&dd->dev, 0);
 
-	if (is_dock(handle))
+	if (acpi_dock_match(handle))
 		dock_station->flags |= DOCK_IS_DOCK;
-	if (is_ata(handle))
+	if (acpi_ata_match(handle))
 		dock_station->flags |= DOCK_IS_ATA;
 	if (is_battery(handle))
 		dock_station->flags |= DOCK_IS_BAT;
@@ -1043,7 +945,7 @@ err_unregister:
 static __init acpi_status
 find_dock_and_bay(acpi_handle handle, u32 lvl, void *context, void **rv)
 {
-	if (is_dock(handle) || is_ejectable_bay(handle))
+	if (acpi_dock_match(handle) || is_ejectable_bay(handle))
 		dock_add(handle);
 
 	return AE_OK;
-- 
1.8.1.2


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

* [PATCH v3 10/10] ACPI: simplify acpiphp driver with new helper functions
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (8 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 09/10] ACPI: simplify dock driver with new helper functions Jiang Liu
@ 2013-06-28 16:24 ` Jiang Liu
  2013-06-28 17:20   ` Bjorn Helgaas
  2013-06-28 18:42 ` [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Rafael J. Wysocki
  10 siblings, 1 reply; 14+ messages in thread
From: Jiang Liu @ 2013-06-28 16:24 UTC (permalink / raw)
  To: Rafael J . Wysocki
  Cc: liuj97, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel,
	Bjorn Helgaas, Yinghai Lu, Len Brown, linux-pci

From: Jiang Liu <jiang.liu@huawei.com>

Use new helper functions to simplify acpiphp driver.

Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Cc: Jiang Liu <liuj97@gmail.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: Len Brown <lenb@kernel.org>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Cc: Yijing Wang <wangyijing@huawei.com>
Cc: linux-acpi@vger.kernel.org
Cc: linux-pci@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 drivers/pci/hotplug/acpiphp_glue.c | 30 ++++++++----------------------
 1 file changed, 8 insertions(+), 22 deletions(-)

diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
index 59df857..a0a7133 100644
--- a/drivers/pci/hotplug/acpiphp_glue.c
+++ b/drivers/pci/hotplug/acpiphp_glue.c
@@ -201,7 +201,6 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
 	struct acpiphp_bridge *bridge = (struct acpiphp_bridge *)context;
 	struct acpiphp_slot *slot;
 	struct acpiphp_func *newfunc;
-	acpi_handle tmp;
 	acpi_status status = AE_OK;
 	unsigned long long adr, sun;
 	int device, function, retval, found = 0;
@@ -232,19 +231,19 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
 	newfunc->handle = handle;
 	newfunc->function = function;
 
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
+	if (acpi_has_method(handle, "_EJ0"))
 		newfunc->flags = FUNC_HAS_EJ0;
 
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_STA", &tmp)))
+	if (acpi_has_method(handle, "_STA"))
 		newfunc->flags |= FUNC_HAS_STA;
 
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS0", &tmp)))
+	if (acpi_has_method(handle, "_PS0"))
 		newfunc->flags |= FUNC_HAS_PS0;
 
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS3", &tmp)))
+	if (acpi_has_method(handle, "_PS3"))
 		newfunc->flags |= FUNC_HAS_PS3;
 
-	if (ACPI_SUCCESS(acpi_get_handle(handle, "_DCK", &tmp)))
+	if (acpi_has_method(handle, "_DCK"))
 		newfunc->flags |= FUNC_HAS_DCK;
 
 	status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun);
@@ -843,25 +842,14 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)
  */
 int acpiphp_eject_slot(struct acpiphp_slot *slot)
 {
-	acpi_status status;
 	struct acpiphp_func *func;
-	struct acpi_object_list arg_list;
-	union acpi_object arg;
 
 	list_for_each_entry(func, &slot->funcs, sibling) {
 		/* We don't want to call _EJ0 on non-existing functions. */
 		if ((func->flags & FUNC_HAS_EJ0)) {
-			/* _EJ0 method take one argument */
-			arg_list.count = 1;
-			arg_list.pointer = &arg;
-			arg.type = ACPI_TYPE_INTEGER;
-			arg.integer.value = 1;
-
-			status = acpi_evaluate_object(func->handle, "_EJ0", &arg_list, NULL);
-			if (ACPI_FAILURE(status)) {
-				warn("%s: _EJ0 failed\n", __func__);
+			if (ACPI_FAILURE(acpi_evaluate_ej0(func->handle)))
 				return -1;
-			} else
+			else
 				break;
 		}
 	}
@@ -1171,7 +1159,6 @@ static void handle_hotplug_event_func(acpi_handle handle, u32 type,
  */
 void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle)
 {
-	acpi_handle dummy_handle;
 	struct acpiphp_bridge *bridge;
 
 	if (acpiphp_disabled)
@@ -1200,8 +1187,7 @@ void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle)
 	get_device(&bus->dev);
 
 	if (!pci_is_root_bus(bridge->pci_bus) &&
-	    ACPI_SUCCESS(acpi_get_handle(bridge->handle,
-					"_EJ0", &dummy_handle))) {
+	    acpi_has_method(bridge->handle, "_EJ0")) {
 		dbg("found ejectable p2p bridge\n");
 		bridge->flags |= BRIDGE_HAS_EJ0;
 		bridge->func = acpiphp_bridge_handle_to_function(handle);
-- 
1.8.1.2

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

* Re: [PATCH v3 10/10] ACPI: simplify acpiphp driver with new helper functions
  2013-06-28 16:24 ` [PATCH v3 10/10] ACPI: simplify acpiphp " Jiang Liu
@ 2013-06-28 17:20   ` Bjorn Helgaas
  2013-06-28 18:42     ` Rafael J. Wysocki
  0 siblings, 1 reply; 14+ messages in thread
From: Bjorn Helgaas @ 2013-06-28 17:20 UTC (permalink / raw)
  To: Jiang Liu
  Cc: Rafael J . Wysocki, Jiang Liu, Yijing Wang, linux-acpi,
	linux-kernel, Yinghai Lu, Len Brown, linux-pci

On Fri, Jun 28, 2013 at 10:24 AM, Jiang Liu <liuj97@gmail.com> wrote:
> From: Jiang Liu <jiang.liu@huawei.com>
>
> Use new helper functions to simplify acpiphp driver.
>
> Signed-off-by: Jiang Liu <jiang.liu@huawei.com>

Acked-by: Bjorn Helgaas <bhelgaas@google.com>

I assume this will be merged via linux-pm with the rest of the series.

> Cc: Jiang Liu <liuj97@gmail.com>
> Cc: Bjorn Helgaas <bhelgaas@google.com>
> Cc: Yinghai Lu <yinghai@kernel.org>
> Cc: Len Brown <lenb@kernel.org>
> Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
> Cc: Yijing Wang <wangyijing@huawei.com>
> Cc: linux-acpi@vger.kernel.org
> Cc: linux-pci@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> ---
>  drivers/pci/hotplug/acpiphp_glue.c | 30 ++++++++----------------------
>  1 file changed, 8 insertions(+), 22 deletions(-)
>
> diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
> index 59df857..a0a7133 100644
> --- a/drivers/pci/hotplug/acpiphp_glue.c
> +++ b/drivers/pci/hotplug/acpiphp_glue.c
> @@ -201,7 +201,6 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
>         struct acpiphp_bridge *bridge = (struct acpiphp_bridge *)context;
>         struct acpiphp_slot *slot;
>         struct acpiphp_func *newfunc;
> -       acpi_handle tmp;
>         acpi_status status = AE_OK;
>         unsigned long long adr, sun;
>         int device, function, retval, found = 0;
> @@ -232,19 +231,19 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
>         newfunc->handle = handle;
>         newfunc->function = function;
>
> -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
> +       if (acpi_has_method(handle, "_EJ0"))
>                 newfunc->flags = FUNC_HAS_EJ0;
>
> -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_STA", &tmp)))
> +       if (acpi_has_method(handle, "_STA"))
>                 newfunc->flags |= FUNC_HAS_STA;
>
> -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS0", &tmp)))
> +       if (acpi_has_method(handle, "_PS0"))
>                 newfunc->flags |= FUNC_HAS_PS0;
>
> -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS3", &tmp)))
> +       if (acpi_has_method(handle, "_PS3"))
>                 newfunc->flags |= FUNC_HAS_PS3;
>
> -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_DCK", &tmp)))
> +       if (acpi_has_method(handle, "_DCK"))
>                 newfunc->flags |= FUNC_HAS_DCK;
>
>         status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun);
> @@ -843,25 +842,14 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)
>   */
>  int acpiphp_eject_slot(struct acpiphp_slot *slot)
>  {
> -       acpi_status status;
>         struct acpiphp_func *func;
> -       struct acpi_object_list arg_list;
> -       union acpi_object arg;
>
>         list_for_each_entry(func, &slot->funcs, sibling) {
>                 /* We don't want to call _EJ0 on non-existing functions. */
>                 if ((func->flags & FUNC_HAS_EJ0)) {
> -                       /* _EJ0 method take one argument */
> -                       arg_list.count = 1;
> -                       arg_list.pointer = &arg;
> -                       arg.type = ACPI_TYPE_INTEGER;
> -                       arg.integer.value = 1;
> -
> -                       status = acpi_evaluate_object(func->handle, "_EJ0", &arg_list, NULL);
> -                       if (ACPI_FAILURE(status)) {
> -                               warn("%s: _EJ0 failed\n", __func__);
> +                       if (ACPI_FAILURE(acpi_evaluate_ej0(func->handle)))
>                                 return -1;
> -                       } else
> +                       else
>                                 break;
>                 }
>         }
> @@ -1171,7 +1159,6 @@ static void handle_hotplug_event_func(acpi_handle handle, u32 type,
>   */
>  void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle)
>  {
> -       acpi_handle dummy_handle;
>         struct acpiphp_bridge *bridge;
>
>         if (acpiphp_disabled)
> @@ -1200,8 +1187,7 @@ void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle)
>         get_device(&bus->dev);
>
>         if (!pci_is_root_bus(bridge->pci_bus) &&
> -           ACPI_SUCCESS(acpi_get_handle(bridge->handle,
> -                                       "_EJ0", &dummy_handle))) {
> +           acpi_has_method(bridge->handle, "_EJ0")) {
>                 dbg("found ejectable p2p bridge\n");
>                 bridge->flags |= BRIDGE_HAS_EJ0;
>                 bridge->func = acpiphp_bridge_handle_to_function(handle);
> --
> 1.8.1.2
>

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

* Re: [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers
  2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
                   ` (9 preceding siblings ...)
  2013-06-28 16:24 ` [PATCH v3 10/10] ACPI: simplify acpiphp " Jiang Liu
@ 2013-06-28 18:42 ` Rafael J. Wysocki
  10 siblings, 0 replies; 14+ messages in thread
From: Rafael J. Wysocki @ 2013-06-28 18:42 UTC (permalink / raw)
  To: Jiang Liu; +Cc: Jiang Liu, Yijing Wang, linux-acpi, linux-kernel

On Saturday, June 29, 2013 12:24:33 AM Jiang Liu wrote:
> From: Jiang Liu <jiang.liu@huawei.com>
> 
> This is an following up patchset of "[PATCH 0/3] ACPI / dock / PCI: Fix
> problems with dock and PCI hotplug" with minor code cleanups and
> refinements. It applies to
> git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git linux-next
> 
> Due to hardware resource limitation, I have only done compilation and
> boot tests.
> 
> V2->V3:
>     The first four patches are the same as previous version and rework
>     all other patches according to review comments.
> 
> Jiang Liu (10):
>   ACPI, DOCK: avoid initializing acpi_dock_notifier_list multiple times
>   ACPI, DOCK: kill redundant spin lock in dock station object
>   ACPI, DOCK: mark initialization functions with __init
>   ACPI, DOCK: simplify implementation of dock_create_acpi_device()
>   ACPI: introduce helper function acpi_has_method()
>   ACPI: introduce helper function acpi_execute_simple_method()
>   ACPI: introduce two helper functions to simplify code
>   ACPI: change acpi_[bay|dock]_match() in scan.c as global functions
>   ACPI: simplify dock driver with new helper functions
>   ACPI: simplify acpiphp driver with new helper functions
> 
>  drivers/acpi/battery.c             |  19 +---
>  drivers/acpi/bus.c                 |   6 +-
>  drivers/acpi/dock.c                | 152 ++++-------------------------
>  drivers/acpi/ec.c                  |   4 +-
>  drivers/acpi/power.c               |   4 +-
>  drivers/acpi/processor_perflib.c   |  22 ++---
>  drivers/acpi/resource.c            |   4 +-
>  drivers/acpi/scan.c                | 189 +++++++++++++------------------------
>  drivers/acpi/sleep.c               |   7 +-
>  drivers/acpi/thermal.c             |  18 +---
>  drivers/acpi/utils.c               |  70 ++++++++++++++
>  drivers/acpi/video.c               |  56 ++++-------
>  drivers/acpi/video_detect.c        |  19 ++--
>  drivers/pci/hotplug/acpiphp_glue.c |  30 ++----
>  include/acpi/acpi_bus.h            |  10 ++
>  15 files changed, 218 insertions(+), 392 deletions(-)

Looks good, thanks!

I'll queue all 10 up for 3.12.

Rafael


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

* Re: [PATCH v3 10/10] ACPI: simplify acpiphp driver with new helper functions
  2013-06-28 17:20   ` Bjorn Helgaas
@ 2013-06-28 18:42     ` Rafael J. Wysocki
  0 siblings, 0 replies; 14+ messages in thread
From: Rafael J. Wysocki @ 2013-06-28 18:42 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Jiang Liu, Jiang Liu, Yijing Wang, linux-acpi, linux-kernel,
	Yinghai Lu, Len Brown, linux-pci

On Friday, June 28, 2013 11:20:21 AM Bjorn Helgaas wrote:
> On Fri, Jun 28, 2013 at 10:24 AM, Jiang Liu <liuj97@gmail.com> wrote:
> > From: Jiang Liu <jiang.liu@huawei.com>
> >
> > Use new helper functions to simplify acpiphp driver.
> >
> > Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
> 
> Acked-by: Bjorn Helgaas <bhelgaas@google.com>
> 
> I assume this will be merged via linux-pm with the rest of the series.

Yup, into 3.12.

Thanks,
Rafael


> > Cc: Jiang Liu <liuj97@gmail.com>
> > Cc: Bjorn Helgaas <bhelgaas@google.com>
> > Cc: Yinghai Lu <yinghai@kernel.org>
> > Cc: Len Brown <lenb@kernel.org>
> > Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
> > Cc: Yijing Wang <wangyijing@huawei.com>
> > Cc: linux-acpi@vger.kernel.org
> > Cc: linux-pci@vger.kernel.org
> > Cc: linux-kernel@vger.kernel.org
> > ---
> >  drivers/pci/hotplug/acpiphp_glue.c | 30 ++++++++----------------------
> >  1 file changed, 8 insertions(+), 22 deletions(-)
> >
> > diff --git a/drivers/pci/hotplug/acpiphp_glue.c b/drivers/pci/hotplug/acpiphp_glue.c
> > index 59df857..a0a7133 100644
> > --- a/drivers/pci/hotplug/acpiphp_glue.c
> > +++ b/drivers/pci/hotplug/acpiphp_glue.c
> > @@ -201,7 +201,6 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
> >         struct acpiphp_bridge *bridge = (struct acpiphp_bridge *)context;
> >         struct acpiphp_slot *slot;
> >         struct acpiphp_func *newfunc;
> > -       acpi_handle tmp;
> >         acpi_status status = AE_OK;
> >         unsigned long long adr, sun;
> >         int device, function, retval, found = 0;
> > @@ -232,19 +231,19 @@ register_slot(acpi_handle handle, u32 lvl, void *context, void **rv)
> >         newfunc->handle = handle;
> >         newfunc->function = function;
> >
> > -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_EJ0", &tmp)))
> > +       if (acpi_has_method(handle, "_EJ0"))
> >                 newfunc->flags = FUNC_HAS_EJ0;
> >
> > -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_STA", &tmp)))
> > +       if (acpi_has_method(handle, "_STA"))
> >                 newfunc->flags |= FUNC_HAS_STA;
> >
> > -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS0", &tmp)))
> > +       if (acpi_has_method(handle, "_PS0"))
> >                 newfunc->flags |= FUNC_HAS_PS0;
> >
> > -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_PS3", &tmp)))
> > +       if (acpi_has_method(handle, "_PS3"))
> >                 newfunc->flags |= FUNC_HAS_PS3;
> >
> > -       if (ACPI_SUCCESS(acpi_get_handle(handle, "_DCK", &tmp)))
> > +       if (acpi_has_method(handle, "_DCK"))
> >                 newfunc->flags |= FUNC_HAS_DCK;
> >
> >         status = acpi_evaluate_integer(handle, "_SUN", NULL, &sun);
> > @@ -843,25 +842,14 @@ static unsigned int get_slot_status(struct acpiphp_slot *slot)
> >   */
> >  int acpiphp_eject_slot(struct acpiphp_slot *slot)
> >  {
> > -       acpi_status status;
> >         struct acpiphp_func *func;
> > -       struct acpi_object_list arg_list;
> > -       union acpi_object arg;
> >
> >         list_for_each_entry(func, &slot->funcs, sibling) {
> >                 /* We don't want to call _EJ0 on non-existing functions. */
> >                 if ((func->flags & FUNC_HAS_EJ0)) {
> > -                       /* _EJ0 method take one argument */
> > -                       arg_list.count = 1;
> > -                       arg_list.pointer = &arg;
> > -                       arg.type = ACPI_TYPE_INTEGER;
> > -                       arg.integer.value = 1;
> > -
> > -                       status = acpi_evaluate_object(func->handle, "_EJ0", &arg_list, NULL);
> > -                       if (ACPI_FAILURE(status)) {
> > -                               warn("%s: _EJ0 failed\n", __func__);
> > +                       if (ACPI_FAILURE(acpi_evaluate_ej0(func->handle)))
> >                                 return -1;
> > -                       } else
> > +                       else
> >                                 break;
> >                 }
> >         }
> > @@ -1171,7 +1159,6 @@ static void handle_hotplug_event_func(acpi_handle handle, u32 type,
> >   */
> >  void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle)
> >  {
> > -       acpi_handle dummy_handle;
> >         struct acpiphp_bridge *bridge;
> >
> >         if (acpiphp_disabled)
> > @@ -1200,8 +1187,7 @@ void acpiphp_enumerate_slots(struct pci_bus *bus, acpi_handle handle)
> >         get_device(&bus->dev);
> >
> >         if (!pci_is_root_bus(bridge->pci_bus) &&
> > -           ACPI_SUCCESS(acpi_get_handle(bridge->handle,
> > -                                       "_EJ0", &dummy_handle))) {
> > +           acpi_has_method(bridge->handle, "_EJ0")) {
> >                 dbg("found ejectable p2p bridge\n");
> >                 bridge->flags |= BRIDGE_HAS_EJ0;
> >                 bridge->func = acpiphp_bridge_handle_to_function(handle);
> > --
> > 1.8.1.2
> >
-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.

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

end of thread, other threads:[~2013-06-28 18:42 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-06-28 16:24 [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Jiang Liu
2013-06-28 16:24 ` [PATCH v3 01/10] ACPI, DOCK: avoid initializing acpi_dock_notifier_list multiple times Jiang Liu
2013-06-28 16:24 ` [PATCH v3 02/10] ACPI, DOCK: kill redundant spin lock in dock station object Jiang Liu
2013-06-28 16:24 ` [PATCH v3 03/10] ACPI, DOCK: mark initialization functions with __init Jiang Liu
2013-06-28 16:24 ` [PATCH v3 04/10] ACPI, DOCK: simplify implementation of dock_create_acpi_device() Jiang Liu
2013-06-28 16:24 ` [PATCH v3 05/10] ACPI: introduce helper function acpi_has_method() Jiang Liu
2013-06-28 16:24 ` [PATCH v3 06/10] ACPI: introduce helper function acpi_execute_simple_method() Jiang Liu
2013-06-28 16:24 ` [PATCH v3 07/10] ACPI: introduce two helper functions to simplify code Jiang Liu
2013-06-28 16:24 ` [PATCH v3 08/10] ACPI: change acpi_[bay|dock]_match() in scan.c as global functions Jiang Liu
2013-06-28 16:24 ` [PATCH v3 09/10] ACPI: simplify dock driver with new helper functions Jiang Liu
2013-06-28 16:24 ` [PATCH v3 10/10] ACPI: simplify acpiphp " Jiang Liu
2013-06-28 17:20   ` Bjorn Helgaas
2013-06-28 18:42     ` Rafael J. Wysocki
2013-06-28 18:42 ` [PATCH v3 00/10] minor improvements for ACPI dock and acpiphp drivers Rafael J. Wysocki

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.