summaryrefslogtreecommitdiffstats
path: root/drivers/mailbox
diff options
context:
space:
mode:
authorLee Jones <lee.jones@linaro.org>2015-05-11 12:08:50 -0400
committerJassi Brar <jaswinder.singh@linaro.org>2015-06-11 12:49:45 -0400
commitdfabde206aa10ae71a89ba75e68b1f58a6336a05 (patch)
tree830d0e9e2b7ae1a090c02bd9d0293ccb011bdb90 /drivers/mailbox
parent0bae6af6d704f026d4938739786e0a69d50177ca (diff)
mailbox: Add ability for clients to request channels by name
This patch supplies a new framework API; mbox_request_channel_byname(). It works by supplying the usual client pointer as the first argument and a string as the second. The API will search the client's node for a 'mbox-names' property then request a channel in the normal way using the requested string's index as the expected second 'index' argument. Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
Diffstat (limited to 'drivers/mailbox')
-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.