| .. | .. |
|---|
| 110 | 110 | |
|---|
| 111 | 111 | #endif /* CONFIG_DIO_CONSTANTS */ |
|---|
| 112 | 112 | |
|---|
| 113 | +static void dio_dev_release(struct device *dev) |
|---|
| 114 | +{ |
|---|
| 115 | + struct dio_dev *ddev = container_of(dev, typeof(struct dio_dev), dev); |
|---|
| 116 | + kfree(ddev); |
|---|
| 117 | +} |
|---|
| 118 | + |
|---|
| 113 | 119 | int __init dio_find(int deviceid) |
|---|
| 114 | 120 | { |
|---|
| 115 | 121 | /* Called to find a DIO device before the full bus scan has run. |
|---|
| .. | .. |
|---|
| 224 | 230 | dev->bus = &dio_bus; |
|---|
| 225 | 231 | dev->dev.parent = &dio_bus.dev; |
|---|
| 226 | 232 | dev->dev.bus = &dio_bus_type; |
|---|
| 233 | + dev->dev.release = dio_dev_release; |
|---|
| 227 | 234 | dev->scode = scode; |
|---|
| 228 | 235 | dev->resource.start = pa; |
|---|
| 229 | 236 | dev->resource.end = pa + DIO_SIZE(scode, va); |
|---|
| .. | .. |
|---|
| 251 | 258 | if (error) { |
|---|
| 252 | 259 | pr_err("DIO: Error registering device %s\n", |
|---|
| 253 | 260 | dev->name); |
|---|
| 261 | + put_device(&dev->dev); |
|---|
| 254 | 262 | continue; |
|---|
| 255 | 263 | } |
|---|
| 256 | 264 | error = dio_create_sysfs_dev_files(dev); |
|---|