aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/acpi/dock.c
diff options
context:
space:
mode:
authorAlex Chiang <achiang@hp.com>2009-10-19 17:14:45 -0400
committerLen Brown <len.brown@intel.com>2009-12-16 03:03:11 -0500
commitfe06fba292af5ed5c1c6ad9af3a9ef68da7a5088 (patch)
tree2ec8f7576d9f53ff22fff467f1f838262c4ca28d /drivers/acpi/dock.c
parent9751cb721ef650729e981c7b39abb7676cd646e1 (diff)
ACPI: dock: add struct dock_station * directly to platform device data
Instead of adding a (struct dock_station **) to our dock device's platform data, we can add the (struct dock_station *) directly. This change saves us some ugly casting and improves readability. The cost of making this change is an extra 290 bytes of stack usage, but this is an infrequently called code-path and unlikely to cause the kernel to blow up. Signed-off-by: Alex Chiang <achiang@hp.com> Acked-by: Shaohua Li <shaohua.li@intel.com> Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/dock.c')
-rw-r--r--drivers/acpi/dock.c40
1 files changed, 13 insertions, 27 deletions
diff --git a/drivers/acpi/dock.c b/drivers/acpi/dock.c
index 3bd89823402a..cfcd8eeb3b2a 100644
--- a/drivers/acpi/dock.c
+++ b/drivers/acpi/dock.c
@@ -843,8 +843,7 @@ static ssize_t show_docked(struct device *dev,
843{ 843{
844 struct acpi_device *tmp; 844 struct acpi_device *tmp;
845 845
846 struct dock_station *dock_station = *((struct dock_station **) 846 struct dock_station *dock_station = dev->platform_data;
847 dev->platform_data);
848 847
849 if (ACPI_SUCCESS(acpi_bus_get_device(dock_station->handle, &tmp))) 848 if (ACPI_SUCCESS(acpi_bus_get_device(dock_station->handle, &tmp)))
850 return snprintf(buf, PAGE_SIZE, "1\n"); 849 return snprintf(buf, PAGE_SIZE, "1\n");
@@ -858,8 +857,7 @@ static DEVICE_ATTR(docked, S_IRUGO, show_docked, NULL);
858static ssize_t show_flags(struct device *dev, 857static ssize_t show_flags(struct device *dev,
859 struct device_attribute *attr, char *buf) 858 struct device_attribute *attr, char *buf)
860{ 859{
861 struct dock_station *dock_station = *((struct dock_station **) 860 struct dock_station *dock_station = dev->platform_data;
862 dev->platform_data);
863 return snprintf(buf, PAGE_SIZE, "%d\n", dock_station->flags); 861 return snprintf(buf, PAGE_SIZE, "%d\n", dock_station->flags);
864 862
865} 863}
@@ -872,8 +870,7 @@ static ssize_t write_undock(struct device *dev, struct device_attribute *attr,
872 const char *buf, size_t count) 870 const char *buf, size_t count)
873{ 871{
874 int ret; 872 int ret;
875 struct dock_station *dock_station = *((struct dock_station **) 873 struct dock_station *dock_station = dev->platform_data;
876 dev->platform_data);
877 874
878 if (!count) 875 if (!count)
879 return -EINVAL; 876 return -EINVAL;
@@ -891,8 +888,7 @@ static ssize_t show_dock_uid(struct device *dev,
891 struct device_attribute *attr, char *buf) 888 struct device_attribute *attr, char *buf)
892{ 889{
893 unsigned long long lbuf; 890 unsigned long long lbuf;
894 struct dock_station *dock_station = *((struct dock_station **) 891 struct dock_station *dock_station = dev->platform_data;
895 dev->platform_data);
896 acpi_status status = acpi_evaluate_integer(dock_station->handle, 892 acpi_status status = acpi_evaluate_integer(dock_station->handle,
897 "_UID", NULL, &lbuf); 893 "_UID", NULL, &lbuf);
898 if (ACPI_FAILURE(status)) 894 if (ACPI_FAILURE(status))
@@ -905,8 +901,7 @@ static DEVICE_ATTR(uid, S_IRUGO, show_dock_uid, NULL);
905static ssize_t show_dock_type(struct device *dev, 901static ssize_t show_dock_type(struct device *dev,
906 struct device_attribute *attr, char *buf) 902 struct device_attribute *attr, char *buf)
907{ 903{
908 struct dock_station *dock_station = *((struct dock_station **) 904 struct dock_station *dock_station = dev->platform_data;
909 dev->platform_data);
910 char *type; 905 char *type;
911 906
912 if (dock_station->flags & DOCK_IS_DOCK) 907 if (dock_station->flags & DOCK_IS_DOCK)
@@ -944,20 +939,18 @@ static struct attribute_group dock_attribute_group = {
944 */ 939 */
945static int dock_add(acpi_handle handle) 940static int dock_add(acpi_handle handle)
946{ 941{
947 int ret; 942 int ret, id;
948 struct dock_station *dock_station; 943 struct dock_station ds, *dock_station;
949 struct platform_device *dock_device; 944 struct platform_device *dock_device;
950 945
946 id = dock_station_count;
951 dock_device = 947 dock_device =
952 platform_device_register_simple("dock", 948 platform_device_register_data(NULL, "dock",
953 dock_station_count, NULL, 0); 949 id, &ds, sizeof(ds));
954 if (IS_ERR(dock_device)) 950 if (IS_ERR(dock_device))
955 return PTR_ERR(dock_device); 951 return PTR_ERR(dock_device);
956 952
957 /* allocate & initialize the dock_station private data */ 953 dock_station = dock_device->dev.platform_data;
958 dock_station = kzalloc(sizeof(*dock_station), GFP_KERNEL);
959 if (!dock_station)
960 return -ENOMEM;
961 dock_station->handle = handle; 954 dock_station->handle = handle;
962 dock_station->dock_device = dock_device; 955 dock_station->dock_device = dock_device;
963 dock_station->last_dock_time = jiffies - HZ; 956 dock_station->last_dock_time = jiffies - HZ;
@@ -968,9 +961,6 @@ static int dock_add(acpi_handle handle)
968 mutex_init(&dock_station->hp_lock); 961 mutex_init(&dock_station->hp_lock);
969 ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list); 962 ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list);
970 963
971 platform_device_add_data(dock_device, &dock_station,
972 sizeof(struct dock_station *));
973
974 /* we want the dock device to send uevents */ 964 /* we want the dock device to send uevents */
975 dev_set_uevent_suppress(&dock_device->dev, 0); 965 dev_set_uevent_suppress(&dock_device->dev, 0);
976 966
@@ -1003,9 +993,6 @@ err_rmgroup:
1003 sysfs_remove_group(&dock_device->dev.kobj, &dock_attribute_group); 993 sysfs_remove_group(&dock_device->dev.kobj, &dock_attribute_group);
1004err_unregister: 994err_unregister:
1005 platform_device_unregister(dock_device); 995 platform_device_unregister(dock_device);
1006out:
1007 kfree(dock_station);
1008 dock_station = NULL;
1009 printk(KERN_ERR "%s encountered error %d\n", __func__, ret); 996 printk(KERN_ERR "%s encountered error %d\n", __func__, ret);
1010 return ret; 997 return ret;
1011} 998}
@@ -1026,13 +1013,12 @@ static int dock_remove(struct dock_station *dock_station)
1026 list) 1013 list)
1027 kfree(dd); 1014 kfree(dd);
1028 1015
1016 list_del(&dock_station->sibling);
1017
1029 /* cleanup sysfs */ 1018 /* cleanup sysfs */
1030 sysfs_remove_group(&dock_device->dev.kobj, &dock_attribute_group); 1019 sysfs_remove_group(&dock_device->dev.kobj, &dock_attribute_group);
1031 platform_device_unregister(dock_device); 1020 platform_device_unregister(dock_device);
1032 1021
1033 /* free dock station memory */
1034 kfree(dock_station);
1035 dock_station = NULL;
1036 return 0; 1022 return 0;
1037} 1023}
1038 1024