]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blobdiff - src/patches/suse-2.6.27.25/patches.arch/acpi-dock-fix-for-bay-in-a-dock-station.patch
Updated xen patches taken from suse.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.25 / patches.arch / acpi-dock-fix-for-bay-in-a-dock-station.patch
diff --git a/src/patches/suse-2.6.27.25/patches.arch/acpi-dock-fix-for-bay-in-a-dock-station.patch b/src/patches/suse-2.6.27.25/patches.arch/acpi-dock-fix-for-bay-in-a-dock-station.patch
new file mode 100644 (file)
index 0000000..7e8244b
--- /dev/null
@@ -0,0 +1,61 @@
+From: Shaohua Li <shaohua.li@intel.com>
+Subject: fix for bay in a dock station
+Patch-mainline: submitted 2008-08-28
+References: fate#304731,bnc#401740
+
+an ATA bay can be in a dock and itself can be ejected separately. The
+patch handles such eject bay. Found by Holger.
+
+Signed-off-by: Shaohua Li <shaohua.li@intel.com>
+Signed-off-by: Holger Macht <hmacht@suse.de>
+---
+
+---
+ drivers/acpi/dock.c |   14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+--- a/drivers/acpi/dock.c
++++ b/drivers/acpi/dock.c
+@@ -609,6 +609,7 @@ register_hotplug_dock_device(acpi_handle
+ {
+       struct dock_dependent_device *dd;
+       struct dock_station *dock_station;
++      int ret = -EINVAL;
+       if (!dock_station_count)
+               return -ENODEV;
+@@ -618,16 +619,21 @@ register_hotplug_dock_device(acpi_handle
+        * this would include the dock station itself
+        */
+       list_for_each_entry(dock_station, &dock_stations, sibiling) {
++              /*
++               * An ATA bay can be in a dock and itself can be ejected
++               * seperately, so there are two 'dock stations' which need the
++               * ops
++               */
+               dd = find_dock_dependent_device(dock_station, handle);
+               if (dd) {
+                       dd->ops = ops;
+                       dd->context = context;
+                       dock_add_hotplug_device(dock_station, dd);
+-                      return 0;
++                      ret = 0;
+               }
+       }
+-      return -EINVAL;
++      return ret;
+ }
+ EXPORT_SYMBOL_GPL(register_hotplug_dock_device);
+@@ -1076,8 +1082,8 @@ find_dock(acpi_handle handle, u32 lvl, v
+ static acpi_status
+ find_bay(acpi_handle handle, u32 lvl, void *context, void **rv)
+ {
+-      /* If bay is in a dock, it's already handled */
+-      if (is_ejectable_bay(handle) && !is_dock_device(handle))
++      /* If bay is a dock, it's already handled */
++      if (is_ejectable_bay(handle) && !is_dock(handle))
+               dock_add(handle);
+       return AE_OK;
+ }