| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * MEN Chameleon Bus. |
|---|
| 3 | 4 | * |
|---|
| 4 | 5 | * Copyright (C) 2013 MEN Mikroelektronik GmbH (www.men.de) |
|---|
| 5 | 6 | * Author: Johannes Thumshirn <johannes.thumshirn@men.de> |
|---|
| 6 | | - * |
|---|
| 7 | | - * This program is free software; you can redistribute it and/or modify it |
|---|
| 8 | | - * under the terms of the GNU General Public License as published by the Free |
|---|
| 9 | | - * Software Foundation; version 2 of the License. |
|---|
| 10 | 7 | */ |
|---|
| 11 | 8 | #include <linux/kernel.h> |
|---|
| 12 | 9 | #include <linux/module.h> |
|---|
| .. | .. |
|---|
| 74 | 71 | |
|---|
| 75 | 72 | get_device(dev); |
|---|
| 76 | 73 | ret = mdrv->probe(mdev, found_id); |
|---|
| 77 | | - if (ret) |
|---|
| 74 | + if (ret) { |
|---|
| 78 | 75 | module_put(carrier_mod); |
|---|
| 76 | + put_device(dev); |
|---|
| 77 | + } |
|---|
| 79 | 78 | |
|---|
| 80 | 79 | return ret; |
|---|
| 81 | 80 | } |
|---|
| .. | .. |
|---|
| 194 | 193 | |
|---|
| 195 | 194 | return driver_register(&drv->driver); |
|---|
| 196 | 195 | } |
|---|
| 197 | | -EXPORT_SYMBOL_GPL(__mcb_register_driver); |
|---|
| 196 | +EXPORT_SYMBOL_NS_GPL(__mcb_register_driver, MCB); |
|---|
| 198 | 197 | |
|---|
| 199 | 198 | /** |
|---|
| 200 | 199 | * mcb_unregister_driver() - Unregister a @mcb_driver from the system |
|---|
| .. | .. |
|---|
| 206 | 205 | { |
|---|
| 207 | 206 | driver_unregister(&drv->driver); |
|---|
| 208 | 207 | } |
|---|
| 209 | | -EXPORT_SYMBOL_GPL(mcb_unregister_driver); |
|---|
| 208 | +EXPORT_SYMBOL_NS_GPL(mcb_unregister_driver, MCB); |
|---|
| 210 | 209 | |
|---|
| 211 | 210 | static void mcb_release_dev(struct device *dev) |
|---|
| 212 | 211 | { |
|---|
| .. | .. |
|---|
| 252 | 251 | |
|---|
| 253 | 252 | return ret; |
|---|
| 254 | 253 | } |
|---|
| 255 | | -EXPORT_SYMBOL_GPL(mcb_device_register); |
|---|
| 254 | +EXPORT_SYMBOL_NS_GPL(mcb_device_register, MCB); |
|---|
| 256 | 255 | |
|---|
| 257 | 256 | static void mcb_free_bus(struct device *dev) |
|---|
| 258 | 257 | { |
|---|
| .. | .. |
|---|
| 304 | 303 | put_device(&bus->dev); |
|---|
| 305 | 304 | return ERR_PTR(rc); |
|---|
| 306 | 305 | } |
|---|
| 307 | | -EXPORT_SYMBOL_GPL(mcb_alloc_bus); |
|---|
| 306 | +EXPORT_SYMBOL_NS_GPL(mcb_alloc_bus, MCB); |
|---|
| 308 | 307 | |
|---|
| 309 | 308 | static int __mcb_devices_unregister(struct device *dev, void *data) |
|---|
| 310 | 309 | { |
|---|
| .. | .. |
|---|
| 326 | 325 | { |
|---|
| 327 | 326 | mcb_devices_unregister(bus); |
|---|
| 328 | 327 | } |
|---|
| 329 | | -EXPORT_SYMBOL_GPL(mcb_release_bus); |
|---|
| 328 | +EXPORT_SYMBOL_NS_GPL(mcb_release_bus, MCB); |
|---|
| 330 | 329 | |
|---|
| 331 | 330 | /** |
|---|
| 332 | 331 | * mcb_bus_put() - Increment refcnt |
|---|
| .. | .. |
|---|
| 341 | 340 | |
|---|
| 342 | 341 | return bus; |
|---|
| 343 | 342 | } |
|---|
| 344 | | -EXPORT_SYMBOL_GPL(mcb_bus_get); |
|---|
| 343 | +EXPORT_SYMBOL_NS_GPL(mcb_bus_get, MCB); |
|---|
| 345 | 344 | |
|---|
| 346 | 345 | /** |
|---|
| 347 | 346 | * mcb_bus_put() - Decrement refcnt |
|---|
| .. | .. |
|---|
| 354 | 353 | if (bus) |
|---|
| 355 | 354 | put_device(&bus->dev); |
|---|
| 356 | 355 | } |
|---|
| 357 | | -EXPORT_SYMBOL_GPL(mcb_bus_put); |
|---|
| 356 | +EXPORT_SYMBOL_NS_GPL(mcb_bus_put, MCB); |
|---|
| 358 | 357 | |
|---|
| 359 | 358 | /** |
|---|
| 360 | 359 | * mcb_alloc_dev() - Allocate a device |
|---|
| .. | .. |
|---|
| 374 | 373 | |
|---|
| 375 | 374 | return dev; |
|---|
| 376 | 375 | } |
|---|
| 377 | | -EXPORT_SYMBOL_GPL(mcb_alloc_dev); |
|---|
| 376 | +EXPORT_SYMBOL_NS_GPL(mcb_alloc_dev, MCB); |
|---|
| 378 | 377 | |
|---|
| 379 | 378 | /** |
|---|
| 380 | 379 | * mcb_free_dev() - Free @mcb_device |
|---|
| .. | .. |
|---|
| 386 | 385 | { |
|---|
| 387 | 386 | kfree(dev); |
|---|
| 388 | 387 | } |
|---|
| 389 | | -EXPORT_SYMBOL_GPL(mcb_free_dev); |
|---|
| 388 | +EXPORT_SYMBOL_NS_GPL(mcb_free_dev, MCB); |
|---|
| 390 | 389 | |
|---|
| 391 | 390 | static int __mcb_bus_add_devices(struct device *dev, void *data) |
|---|
| 392 | 391 | { |
|---|
| .. | .. |
|---|
| 415 | 414 | { |
|---|
| 416 | 415 | bus_for_each_dev(&mcb_bus_type, NULL, NULL, __mcb_bus_add_devices); |
|---|
| 417 | 416 | } |
|---|
| 418 | | -EXPORT_SYMBOL_GPL(mcb_bus_add_devices); |
|---|
| 417 | +EXPORT_SYMBOL_NS_GPL(mcb_bus_add_devices, MCB); |
|---|
| 419 | 418 | |
|---|
| 420 | 419 | /** |
|---|
| 421 | 420 | * mcb_get_resource() - get a resource for a mcb device |
|---|
| .. | .. |
|---|
| 431 | 430 | else |
|---|
| 432 | 431 | return NULL; |
|---|
| 433 | 432 | } |
|---|
| 434 | | -EXPORT_SYMBOL_GPL(mcb_get_resource); |
|---|
| 433 | +EXPORT_SYMBOL_NS_GPL(mcb_get_resource, MCB); |
|---|
| 435 | 434 | |
|---|
| 436 | 435 | /** |
|---|
| 437 | 436 | * mcb_request_mem() - Request memory |
|---|
| .. | .. |
|---|
| 457 | 456 | |
|---|
| 458 | 457 | return mem; |
|---|
| 459 | 458 | } |
|---|
| 460 | | -EXPORT_SYMBOL_GPL(mcb_request_mem); |
|---|
| 459 | +EXPORT_SYMBOL_NS_GPL(mcb_request_mem, MCB); |
|---|
| 461 | 460 | |
|---|
| 462 | 461 | /** |
|---|
| 463 | 462 | * mcb_release_mem() - Release memory requested by device |
|---|
| .. | .. |
|---|
| 472 | 471 | size = resource_size(mem); |
|---|
| 473 | 472 | release_mem_region(mem->start, size); |
|---|
| 474 | 473 | } |
|---|
| 475 | | -EXPORT_SYMBOL_GPL(mcb_release_mem); |
|---|
| 474 | +EXPORT_SYMBOL_NS_GPL(mcb_release_mem, MCB); |
|---|
| 476 | 475 | |
|---|
| 477 | 476 | static int __mcb_get_irq(struct mcb_device *dev) |
|---|
| 478 | 477 | { |
|---|
| .. | .. |
|---|
| 498 | 497 | |
|---|
| 499 | 498 | return __mcb_get_irq(dev); |
|---|
| 500 | 499 | } |
|---|
| 501 | | -EXPORT_SYMBOL_GPL(mcb_get_irq); |
|---|
| 500 | +EXPORT_SYMBOL_NS_GPL(mcb_get_irq, MCB); |
|---|
| 502 | 501 | |
|---|
| 503 | 502 | static int mcb_init(void) |
|---|
| 504 | 503 | { |
|---|