|
@@ -911,6 +911,26 @@ static ssize_t show_dock_uid(struct device *dev,
|
|
|
}
|
|
|
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
|
|
@@ -999,6 +1019,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,
|
|
@@ -1020,6 +1043,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);
|
|
@@ -1047,6 +1071,7 @@ static int dock_remove(struct dock_station *dock_station)
|
|
|
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);
|