summaryrefslogtreecommitdiffstats
path: root/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
diff options
context:
space:
mode:
authorNicolas Saenz Julienne <nsaenzjulienne@suse.de>2020-06-29 17:09:26 +0200
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-07-01 15:47:06 +0200
commit3c5da06f9969959f5cd85e8baaef9d96059b3924 (patch)
tree2ceeb778b5ced64cab7d5d07e1c57d7316d4dc57 /drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
parentb79134e9de28dd6ca7627a9bae2fa4bfb382ad64 (diff)
downloadlinux-stable-3c5da06f9969959f5cd85e8baaef9d96059b3924.tar.gz
linux-stable-3c5da06f9969959f5cd85e8baaef9d96059b3924.tar.bz2
linux-stable-3c5da06f9969959f5cd85e8baaef9d96059b3924.zip
staging: vchi: Get rid of vchiq_shim's message callback
As vchiq_shim's callback does nothing aside from pushing messages into the service's queue, let's bypass it and jump directly to the service's callbacks, letting them choose whether to use the message queue. It turns out most services don't need to use the message queue, which makes for simpler code in the end. Signed-off-by: Nicolas Saenz Julienne <nsaenzjulienne@suse.de> Link: https://lore.kernel.org/r/20200629150945.10720-29-nsaenzjulienne@suse.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c')
-rw-r--r--drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c20
1 files changed, 8 insertions, 12 deletions
diff --git a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
index 0f97eda4ec90..71750ef891dd 100644
--- a/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-audio/bcm2835-vchiq.c
@@ -89,22 +89,17 @@ static int bcm2835_audio_send_simple(struct bcm2835_audio_instance *instance,
return bcm2835_audio_send_msg(instance, &m, wait);
}
-static void audio_vchi_callback(void *param, const enum vchiq_reason reason,
- void *msg_handle)
+static enum vchiq_status audio_vchi_callback(enum vchiq_reason reason,
+ struct vchiq_header *header,
+ unsigned handle, void *userdata)
{
- struct bcm2835_audio_instance *instance = param;
- struct vchi_held_msg handle;
+ struct bcm2835_audio_instance *instance = vchiq_get_service_userdata(handle);
struct vc_audio_msg *m;
- unsigned size;
- int status;
if (reason != VCHIQ_MESSAGE_AVAILABLE)
- return;
-
- status = vchi_msg_hold(instance->service, (void **)&m, &size, &handle);
- if (status)
- return;
+ return VCHIQ_SUCCESS;
+ m = (void *)header->data;
if (m->type == VC_AUDIO_MSG_TYPE_RESULT) {
instance->result = m->result.success;
complete(&instance->msg_avail_comp);
@@ -119,7 +114,8 @@ static void audio_vchi_callback(void *param, const enum vchiq_reason reason,
dev_err(instance->dev, "unexpected callback type=%d\n", m->type);
}
- vchi_held_msg_release(&handle);
+ vchiq_release_message(handle, header);
+ return VCHIQ_SUCCESS;
}
static int