--- /dev/null
+From: Shaohua Li <shaohua.li@intel.com>
+Subject: add 'type' sysfs file for dock
+Patch-mainline: submitted 2008-08-28
+References: fate#304731,bnc#401740
+
+add a sysfs file to present dock type. Suggested by Holger.
+
+Signed-off-by: Shaohua Li <shaohua.li@intel.com>
+Signed-off-by: Holger Macht <hmacht@suse.de>
+---
+
+---
+ drivers/acpi/dock.c | 25 +++++++++++++++++++++++++
+ 1 file changed, 25 insertions(+)
+
+--- a/drivers/acpi/dock.c
++++ b/drivers/acpi/dock.c
+@@ -909,6 +909,26 @@ static ssize_t show_dock_uid(struct devi
+ }
+ static DEVICE_ATTR(uid, S_IRUGO, show_dock_uid, NULL);
+
++static ssize_t show_dock_type(struct device *dev,
++ struct device_attribute *attr, char *buf)
++{
++ struct dock_station *dock_station = *((struct dock_station **)
++ dev->platform_data);
++ char *type;
++
++ if (dock_station->flags & DOCK_IS_DOCK)
++ type = "dock_station";
++ else if (dock_station->flags & DOCK_IS_ATA)
++ type = "ata_bay";
++ else if (dock_station->flags & DOCK_IS_BAT)
++ type = "battery_bay";
++ else
++ type = "unknown";
++
++ return snprintf(buf, PAGE_SIZE, "%s\n", type);
++}
++static DEVICE_ATTR(type, S_IRUGO, show_dock_type, NULL);
++
+ /**
+ * dock_add - add a new dock station
+ * @handle: the dock station handle
+@@ -997,6 +1017,9 @@ static int dock_add(acpi_handle handle)
+ dock_station = NULL;
+ return ret;
+ }
++ ret = device_create_file(&dock_device->dev, &dev_attr_type);
++ if (ret)
++ printk(KERN_ERR"Error %d adding sysfs file\n", ret);
+
+ /* Find dependent devices */
+ acpi_walk_namespace(ACPI_TYPE_DEVICE, ACPI_ROOT_OBJECT,
+@@ -1018,6 +1041,7 @@ static int dock_add(acpi_handle handle)
+ return 0;
+
+ dock_add_err_unregister:
++ device_remove_file(&dock_device->dev, &dev_attr_type);
+ device_remove_file(&dock_device->dev, &dev_attr_docked);
+ device_remove_file(&dock_device->dev, &dev_attr_undock);
+ device_remove_file(&dock_device->dev, &dev_attr_uid);
+@@ -1045,6 +1069,7 @@ static int dock_remove(struct dock_stati
+ kfree(dd);
+
+ /* cleanup sysfs */
++ device_remove_file(&dock_device->dev, &dev_attr_type);
+ device_remove_file(&dock_device->dev, &dev_attr_docked);
+ device_remove_file(&dock_device->dev, &dev_attr_undock);
+ device_remove_file(&dock_device->dev, &dev_attr_uid);