| .. | .. |
|---|
| 236 | 236 | |
|---|
| 237 | 237 | led_dev = class_find_device_by_of_node(leds_class, led_node); |
|---|
| 238 | 238 | of_node_put(led_node); |
|---|
| 239 | + put_device(led_dev); |
|---|
| 239 | 240 | |
|---|
| 240 | 241 | if (!led_dev) |
|---|
| 241 | 242 | return ERR_PTR(-EPROBE_DEFER); |
|---|
| 242 | 243 | |
|---|
| 243 | 244 | led_cdev = dev_get_drvdata(led_dev); |
|---|
| 244 | 245 | |
|---|
| 245 | | - if (!try_module_get(led_cdev->dev->parent->driver->owner)) |
|---|
| 246 | + if (!try_module_get(led_cdev->dev->parent->driver->owner)) { |
|---|
| 247 | + put_device(led_cdev->dev); |
|---|
| 246 | 248 | return ERR_PTR(-ENODEV); |
|---|
| 249 | + } |
|---|
| 247 | 250 | |
|---|
| 248 | 251 | return led_cdev; |
|---|
| 249 | 252 | } |
|---|
| .. | .. |
|---|
| 256 | 259 | void led_put(struct led_classdev *led_cdev) |
|---|
| 257 | 260 | { |
|---|
| 258 | 261 | module_put(led_cdev->dev->parent->driver->owner); |
|---|
| 262 | + put_device(led_cdev->dev); |
|---|
| 259 | 263 | } |
|---|
| 260 | 264 | EXPORT_SYMBOL_GPL(led_put); |
|---|
| 261 | 265 | |
|---|