diff options
author | Bjorn Andersson <bjorn.andersson@linaro.org> | 2017-05-27 19:14:02 -0400 |
---|---|---|
committer | Jassi Brar <jaswinder.singh@linaro.org> | 2017-06-14 08:17:09 -0400 |
commit | b7133d6fcd9a9eb4633357d4a27430d4e0c794ad (patch) | |
tree | a71d681809d8d253baa92b38ede830fda74998f6 | |
parent | 63f700aab4c11d46626de3cd051dae56cf7e9056 (diff) |
mailbox: Make startup and shutdown ops optional
Some mailbox hardware doesn't have to perform any additional operations
on startup of shutdown, so make these optional.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Signed-off-by: Jassi Brar <jaswinder.singh@linaro.org>
-rw-r--r-- | drivers/mailbox/mailbox.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/mailbox/mailbox.c b/drivers/mailbox/mailbox.c index 9dfbf7ea10a2..537f4f6d009b 100644 --- a/drivers/mailbox/mailbox.c +++ b/drivers/mailbox/mailbox.c | |||
@@ -355,11 +355,14 @@ struct mbox_chan *mbox_request_channel(struct mbox_client *cl, int index) | |||
355 | 355 | ||
356 | spin_unlock_irqrestore(&chan->lock, flags); | 356 | spin_unlock_irqrestore(&chan->lock, flags); |
357 | 357 | ||
358 | ret = chan->mbox->ops->startup(chan); | 358 | if (chan->mbox->ops->startup) { |
359 | if (ret) { | 359 | ret = chan->mbox->ops->startup(chan); |
360 | dev_err(dev, "Unable to startup the chan (%d)\n", ret); | 360 | |
361 | mbox_free_channel(chan); | 361 | if (ret) { |
362 | chan = ERR_PTR(ret); | 362 | dev_err(dev, "Unable to startup the chan (%d)\n", ret); |
363 | mbox_free_channel(chan); | ||
364 | chan = ERR_PTR(ret); | ||
365 | } | ||
363 | } | 366 | } |
364 | 367 | ||
365 | mutex_unlock(&con_mutex); | 368 | mutex_unlock(&con_mutex); |
@@ -408,7 +411,8 @@ void mbox_free_channel(struct mbox_chan *chan) | |||
408 | if (!chan || !chan->cl) | 411 | if (!chan || !chan->cl) |
409 | return; | 412 | return; |
410 | 413 | ||
411 | chan->mbox->ops->shutdown(chan); | 414 | if (chan->mbox->ops->shutdown) |
415 | chan->mbox->ops->shutdown(chan); | ||
412 | 416 | ||
413 | /* The queued TX requests are simply aborted, no callbacks are made */ | 417 | /* The queued TX requests are simply aborted, no callbacks are made */ |
414 | spin_lock_irqsave(&chan->lock, flags); | 418 | spin_lock_irqsave(&chan->lock, flags); |