aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/rtc/interface.c22
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/rtc/interface.c b/drivers/rtc/interface.c
index f1e00ff54ce8..7e3ad4f3b343 100644
--- a/drivers/rtc/interface.c
+++ b/drivers/rtc/interface.c
@@ -251,20 +251,23 @@ void rtc_update_irq(struct rtc_device *rtc,
251} 251}
252EXPORT_SYMBOL_GPL(rtc_update_irq); 252EXPORT_SYMBOL_GPL(rtc_update_irq);
253 253
254static int __rtc_match(struct device *dev, void *data)
255{
256 char *name = (char *)data;
257
258 if (strncmp(dev->bus_id, name, BUS_ID_SIZE) == 0)
259 return 1;
260 return 0;
261}
262
254struct rtc_device *rtc_class_open(char *name) 263struct rtc_device *rtc_class_open(char *name)
255{ 264{
256 struct device *dev; 265 struct device *dev;
257 struct rtc_device *rtc = NULL; 266 struct rtc_device *rtc = NULL;
258 267
259 down(&rtc_class->sem); 268 dev = class_find_device(rtc_class, name, __rtc_match);
260 list_for_each_entry(dev, &rtc_class->devices, node) { 269 if (dev)
261 if (strncmp(dev->bus_id, name, BUS_ID_SIZE) == 0) { 270 rtc = to_rtc_device(dev);
262 dev = get_device(dev);
263 if (dev)
264 rtc = to_rtc_device(dev);
265 break;
266 }
267 }
268 271
269 if (rtc) { 272 if (rtc) {
270 if (!try_module_get(rtc->owner)) { 273 if (!try_module_get(rtc->owner)) {
@@ -272,7 +275,6 @@ struct rtc_device *rtc_class_open(char *name)
272 rtc = NULL; 275 rtc = NULL;
273 } 276 }
274 } 277 }
275 up(&rtc_class->sem);
276 278
277 return rtc; 279 return rtc;
278} 280}