diff options
author | Chanwoo Choi <cw00.choi@samsung.com> | 2014-04-24 06:46:49 -0400 |
---|---|---|
committer | Chanwoo Choi <cw00.choi@samsung.com> | 2014-04-28 20:35:15 -0400 |
commit | a9af65223b41cec60cd44fa95a93d10149deb143 (patch) | |
tree | 09abb8e2360d0e092bc57360bba53092ddc48886 /drivers/extcon | |
parent | d88cc36704e7583214220a6284a9923768b01d2d (diff) |
extcon: Add extcon_dev_allocate/free() to control the memory of extcon device
This patch add APIs to control the extcon device on extcon provider driver.
The extcon_dev_allocate() allocates the memory of extcon device and initializes
supported cables. And then extcon_dev_free() decrement the reference of the
device of extcon device and free the memory of the extcon device. This APIs
must need to implement devm_extcon_dev_allocate()/free() APIs.
Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
Reviewed-by: Felipe Balbi <balbi@ti.com>
Diffstat (limited to 'drivers/extcon')
-rw-r--r-- | drivers/extcon/extcon-class.c | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/drivers/extcon/extcon-class.c b/drivers/extcon/extcon-class.c index f6df68989651..654ed52e17c2 100644 --- a/drivers/extcon/extcon-class.c +++ b/drivers/extcon/extcon-class.c | |||
@@ -565,6 +565,42 @@ static void dummy_sysfs_dev_release(struct device *dev) | |||
565 | { | 565 | { |
566 | } | 566 | } |
567 | 567 | ||
568 | /* | ||
569 | * extcon_dev_allocate() - Allocate the memory of extcon device. | ||
570 | * @supported_cable: Array of supported cable names ending with NULL. | ||
571 | * If supported_cable is NULL, cable name related APIs | ||
572 | * are disabled. | ||
573 | * | ||
574 | * This function allocates the memory for extcon device without allocating | ||
575 | * memory in each extcon provider driver and initialize default setting for | ||
576 | * extcon device. | ||
577 | * | ||
578 | * Return the pointer of extcon device if success or ERR_PTR(err) if fail | ||
579 | */ | ||
580 | struct extcon_dev *extcon_dev_allocate(const char **supported_cable) | ||
581 | { | ||
582 | struct extcon_dev *edev; | ||
583 | |||
584 | edev = kzalloc(sizeof(*edev), GFP_KERNEL); | ||
585 | if (!edev) | ||
586 | return ERR_PTR(-ENOMEM); | ||
587 | |||
588 | edev->max_supported = 0; | ||
589 | edev->supported_cable = supported_cable; | ||
590 | |||
591 | return edev; | ||
592 | } | ||
593 | |||
594 | /* | ||
595 | * extcon_dev_free() - Free the memory of extcon device. | ||
596 | * @edev: the extcon device to free | ||
597 | */ | ||
598 | void extcon_dev_free(struct extcon_dev *edev) | ||
599 | { | ||
600 | kfree(edev); | ||
601 | } | ||
602 | EXPORT_SYMBOL_GPL(extcon_dev_free); | ||
603 | |||
568 | /** | 604 | /** |
569 | * extcon_dev_register() - Register a new extcon device | 605 | * extcon_dev_register() - Register a new extcon device |
570 | * @edev : the new extcon device (should be allocated before calling) | 606 | * @edev : the new extcon device (should be allocated before calling) |