summaryrefslogtreecommitdiffstats
path: root/drivers/mailbox/mailbox.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mailbox/mailbox.c')
-rw-r--r--drivers/mailbox/mailbox.c29
1 files changed, 29 insertions, 0 deletions
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c
index c3c42d42d017..c7fdb57fd166 100644
--- a/drivers/mailbox/mailbox.c
+++ b/drivers/mailbox/mailbox.c
@@ -362,6 +362,35 @@ struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index)
362} 362}
363EXPORT_SYMBOL_GPL(mbox_request_channel); 363EXPORT_SYMBOL_GPL(mbox_request_channel);
364 364
365struct mbox_chan *mbox_request_channel_byname(struct mbox_client *cl,
366 const char *name)
367{
368 struct device_node *np = cl->dev->of_node;
369 struct property *prop;
370 const char *mbox_name;
371 int index = 0;
372
373 if (!np) {
374 dev_err(cl->dev, "%s() currently only supports DT\n", __func__);
375 return ERR_PTR(-ENOSYS);
376 }
377
378 if (!of_get_property(np, "mbox-names", NULL)) {
379 dev_err(cl->dev,
380 "%s() requires an \"mbox-names\" property\n", __func__);
381 return ERR_PTR(-ENOSYS);
382 }
383
384 of_property_for_each_string(np, "mbox-names", prop, mbox_name) {
385 if (!strncmp(name, mbox_name, strlen(name)))
386 break;
387 index++;
388 }
389
390 return mbox_request_channel(cl, index);
391}
392EXPORT_SYMBOL_GPL(mbox_request_channel_byname);
393
365/** 394/**
366 * mbox_free_channel - The client relinquishes control of a mailbox 395 * mbox_free_channel - The client relinquishes control of a mailbox
367 * channel by this call. 396 * channel by this call.