|
@@ -937,6 +937,14 @@ static ssize_t txx9_sram_write(struct file *filp, struct kobject *kobj,
|
|
return size;
|
|
return size;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void txx9_device_release(struct device *dev)
|
|
|
|
+{
|
|
|
|
+ struct txx9_sramc_dev *tdev;
|
|
|
|
+
|
|
|
|
+ tdev = container_of(dev, struct txx9_sramc_dev, dev);
|
|
|
|
+ kfree(tdev);
|
|
|
|
+}
|
|
|
|
+
|
|
void __init txx9_sramc_init(struct resource *r)
|
|
void __init txx9_sramc_init(struct resource *r)
|
|
{
|
|
{
|
|
struct txx9_sramc_dev *dev;
|
|
struct txx9_sramc_dev *dev;
|
|
@@ -951,8 +959,11 @@ void __init txx9_sramc_init(struct resource *r)
|
|
return;
|
|
return;
|
|
size = resource_size(r);
|
|
size = resource_size(r);
|
|
dev->base = ioremap(r->start, size);
|
|
dev->base = ioremap(r->start, size);
|
|
- if (!dev->base)
|
|
|
|
- goto exit;
|
|
|
|
|
|
+ if (!dev->base) {
|
|
|
|
+ kfree(dev);
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ dev->dev.release = &txx9_device_release;
|
|
dev->dev.bus = &txx9_sramc_subsys;
|
|
dev->dev.bus = &txx9_sramc_subsys;
|
|
sysfs_bin_attr_init(&dev->bindata_attr);
|
|
sysfs_bin_attr_init(&dev->bindata_attr);
|
|
dev->bindata_attr.attr.name = "bindata";
|
|
dev->bindata_attr.attr.name = "bindata";
|
|
@@ -963,17 +974,15 @@ void __init txx9_sramc_init(struct resource *r)
|
|
dev->bindata_attr.private = dev;
|
|
dev->bindata_attr.private = dev;
|
|
err = device_register(&dev->dev);
|
|
err = device_register(&dev->dev);
|
|
if (err)
|
|
if (err)
|
|
- goto exit;
|
|
|
|
|
|
+ goto exit_put;
|
|
err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr);
|
|
err = sysfs_create_bin_file(&dev->dev.kobj, &dev->bindata_attr);
|
|
if (err) {
|
|
if (err) {
|
|
device_unregister(&dev->dev);
|
|
device_unregister(&dev->dev);
|
|
- goto exit;
|
|
|
|
- }
|
|
|
|
- return;
|
|
|
|
-exit:
|
|
|
|
- if (dev) {
|
|
|
|
- if (dev->base)
|
|
|
|
- iounmap(dev->base);
|
|
|
|
|
|
+ iounmap(dev->base);
|
|
kfree(dev);
|
|
kfree(dev);
|
|
}
|
|
}
|
|
|
|
+ return;
|
|
|
|
+exit_put:
|
|
|
|
+ put_device(&dev->dev);
|
|
|
|
+ return;
|
|
}
|
|
}
|