[PATCH 04/24] drm/bridge/sii8620: add continuations to messages
Archit Taneja
architt at codeaurora.org
Mon Jan 23 08:31:26 UTC 2017
On 01/20/2017 01:08 PM, Andrzej Hajda wrote:
> Due to asynchronous nature of MHL flow of execution is dispersed. Logical
> continuation of some actions happens after response of peer, i.e in interrupt
> handler. To simplify coding continuation mechanism has been added - it is now
> possible to provide continuation callback, which will be called after peer
> responds to given action.
Could you wrap this to 75 chars?
>
> Signed-off-by: Andrzej Hajda <a.hajda at samsung.com>
> ---
> drivers/gpu/drm/bridge/sil-sii8620.c | 20 ++++++++++++++++++++
> 1 file changed, 20 insertions(+)
>
> diff --git a/drivers/gpu/drm/bridge/sil-sii8620.c b/drivers/gpu/drm/bridge/sil-sii8620.c
> index 75867c0..cde0074 100644
> --- a/drivers/gpu/drm/bridge/sil-sii8620.c
> +++ b/drivers/gpu/drm/bridge/sil-sii8620.c
> @@ -78,12 +78,15 @@ struct sii8620_mt_msg;
> typedef void (*sii8620_mt_msg_cb)(struct sii8620 *ctx,
> struct sii8620_mt_msg *msg);
>
> +typedef void (*sii8620_cb)(struct sii8620 *ctx, int ret);
> +
> struct sii8620_mt_msg {
> struct list_head node;
> u8 reg[4];
> u8 ret;
> sii8620_mt_msg_cb send;
> sii8620_mt_msg_cb recv;
> + sii8620_cb continuation;
> };
>
> static const u8 sii8620_i2c_page[] = {
> @@ -258,6 +261,8 @@ static void sii8620_mt_work(struct sii8620 *ctx)
> node);
> if (msg->recv)
> msg->recv(ctx, msg);
> + if (msg->continuation)
> + msg->continuation(ctx, msg->ret);
I was wondering if instead of executing the continuation via a callback,
would it make sense to insert them as a new message instead?
I don't have the complete context of this, so feel free to ignore the suggestion
if doesn't make sense.
Thanks,
Archit
> list_del(&msg->node);
> kfree(msg);
> }
> @@ -310,6 +315,21 @@ static struct sii8620_mt_msg *sii8620_mt_msg_new(struct sii8620 *ctx)
> return msg;
> }
>
> +static void sii8620_mt_set_cont(struct sii8620 *ctx, sii8620_cb cont)
> +{
> + struct sii8620_mt_msg *msg;
> +
> + if (ctx->error)
> + return;
> +
> + if (list_empty(&ctx->mt_queue)) {
> + ctx->error = -EINVAL;
> + return;
> + }
> + msg = list_last_entry(&ctx->mt_queue, struct sii8620_mt_msg, node);
> + msg->continuation = cont;
> +}
> +
> static void sii8620_mt_msc_cmd(struct sii8620 *ctx, u8 cmd, u8 arg1, u8 arg2)
> {
> struct sii8620_mt_msg *msg = sii8620_mt_msg_new(ctx);
>
--
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
More information about the dri-devel
mailing list