[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