{
struct acpi_device *tmp;
- struct dock_station *dock_station = *((struct dock_station **)
- dev->platform_data);
+ struct dock_station *dock_station = dev->platform_data;
if (ACPI_SUCCESS(acpi_bus_get_device(dock_station->handle, &tmp)))
return snprintf(buf, PAGE_SIZE, "1\n");
static ssize_t show_flags(struct device *dev,
struct device_attribute *attr, char *buf)
{
- struct dock_station *dock_station = *((struct dock_station **)
- dev->platform_data);
+ struct dock_station *dock_station = dev->platform_data;
return snprintf(buf, PAGE_SIZE, "%d\n", dock_station->flags);
}
const char *buf, size_t count)
{
int ret;
- struct dock_station *dock_station = *((struct dock_station **)
- dev->platform_data);
+ struct dock_station *dock_station = dev->platform_data;
if (!count)
return -EINVAL;
struct device_attribute *attr, char *buf)
{
unsigned long long lbuf;
- struct dock_station *dock_station = *((struct dock_station **)
- dev->platform_data);
+ struct dock_station *dock_station = dev->platform_data;
acpi_status status = acpi_evaluate_integer(dock_station->handle,
"_UID", NULL, &lbuf);
if (ACPI_FAILURE(status))
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);
+ struct dock_station *dock_station = dev->platform_data;
char *type;
if (dock_station->flags & DOCK_IS_DOCK)
*/
static int dock_add(acpi_handle handle)
{
- int ret;
- struct dock_station *dock_station;
+ int ret, id;
+ struct dock_station ds, *dock_station;
struct platform_device *dock_device;
+ id = dock_station_count;
dock_device =
- platform_device_register_simple("dock",
- dock_station_count, NULL, 0);
+ platform_device_register_data(NULL, "dock",
+ id, &ds, sizeof(ds));
if (IS_ERR(dock_device))
return PTR_ERR(dock_device);
- /* allocate & initialize the dock_station private data */
- dock_station = kzalloc(sizeof(*dock_station), GFP_KERNEL);
- if (!dock_station)
- return -ENOMEM;
+ dock_station = dock_device->dev.platform_data;
dock_station->handle = handle;
dock_station->dock_device = dock_device;
dock_station->last_dock_time = jiffies - HZ;
mutex_init(&dock_station->hp_lock);
ATOMIC_INIT_NOTIFIER_HEAD(&dock_notifier_list);
- platform_device_add_data(dock_device, &dock_station,
- sizeof(struct dock_station *));
-
/* we want the dock device to send uevents */
dev_set_uevent_suppress(&dock_device->dev, 0);
sysfs_remove_group(&dock_device->dev.kobj, &dock_attribute_group);
err_unregister:
platform_device_unregister(dock_device);
-out:
- kfree(dock_station);
- dock_station = NULL;
printk(KERN_ERR "%s encountered error %d\n", __func__, ret);
return ret;
}
list)
kfree(dd);
+ list_del(&dock_station->sibling);
+
/* cleanup sysfs */
sysfs_remove_group(&dock_device->dev.kobj, &dock_attribute_group);
platform_device_unregister(dock_device);
- /* free dock station memory */
- kfree(dock_station);
- dock_station = NULL;
return 0;
}