Commit 5b257571 authored by Alexandre Belloni's avatar Alexandre Belloni

rtc: test: allow registering many devices

Use a loop to register RTC devices
Signed-off-by: default avatarAlexandre Belloni <alexandre.belloni@bootlin.com>
parent 9394270e
...@@ -13,7 +13,9 @@ ...@@ -13,7 +13,9 @@
#include <linux/rtc.h> #include <linux/rtc.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
static struct platform_device *test0 = NULL, *test1 = NULL; #define MAX_RTC_TEST 3
struct platform_device *pdev[MAX_RTC_TEST];
static int test_rtc_read_alarm(struct device *dev, static int test_rtc_read_alarm(struct device *dev,
struct rtc_wkalrm *alrm) struct rtc_wkalrm *alrm)
...@@ -122,47 +124,45 @@ static struct platform_driver test_driver = { ...@@ -122,47 +124,45 @@ static struct platform_driver test_driver = {
static int __init test_init(void) static int __init test_init(void)
{ {
int err; int i, err;
if ((err = platform_driver_register(&test_driver))) if ((err = platform_driver_register(&test_driver)))
return err; return err;
if ((test0 = platform_device_alloc("rtc-test", 0)) == NULL) {
err = -ENOMEM; err = -ENOMEM;
goto exit_driver_unregister; for (i = 0; i < MAX_RTC_TEST; i++) {
pdev[i] = platform_device_alloc("rtc-test", i);
if (!pdev[i])
goto exit_free_mem;
} }
if ((test1 = platform_device_alloc("rtc-test", 1)) == NULL) { for (i = 0; i < MAX_RTC_TEST; i++) {
err = -ENOMEM; err = platform_device_add(pdev[i]);
goto exit_put_test0; if (err)
goto exit_device_del;
} }
if ((err = platform_device_add(test0)))
goto exit_put_test1;
if ((err = platform_device_add(test1)))
goto exit_del_test0;
return 0; return 0;
exit_del_test0: exit_device_del:
platform_device_del(test0); for (; i > 0; i--)
platform_device_del(pdev[i - 1]);
exit_put_test1:
platform_device_put(test1);
exit_put_test0: exit_free_mem:
platform_device_put(test0); for (i = 0; i < MAX_RTC_TEST; i++)
platform_device_put(pdev[i]);
exit_driver_unregister:
platform_driver_unregister(&test_driver); platform_driver_unregister(&test_driver);
return err; return err;
} }
static void __exit test_exit(void) static void __exit test_exit(void)
{ {
platform_device_unregister(test0); int i;
platform_device_unregister(test1);
for (i = 0; i < MAX_RTC_TEST; i++)
platform_device_unregister(pdev[i]);
platform_driver_unregister(&test_driver); platform_driver_unregister(&test_driver);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment