drm/bridge/sii8620: add message queue cleanup 08/92608/1
authorAndrzej Hajda <a.hajda@samsung.com>
Mon, 17 Oct 2016 12:21:37 +0000 (14:21 +0200)
committerAndrzej Hajda <a.hajda@samsung.com>
Mon, 17 Oct 2016 13:26:35 +0000 (15:26 +0200)
Queue should be cleaned up on disconnect, otherwise we risk misbehavior.

Change-Id: I4f212e1c36ac75f6f72102b24a1c5b14a932aeca
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
drivers/gpu/drm/bridge/sii8620.c

index dcc08c02191d9a49c97980c6da44b10d06bd923e..56d310de69595ac9a2b8f80114a6de6fd20383df 100644 (file)
@@ -229,6 +229,17 @@ static void sii8620_setbits(struct sii8620 *ctx, u16 addr, u8 mask, u8 val)
        sii8620_write(ctx, addr, val);
 }
 
+static void sii8620_mt_cleanup(struct sii8620 *ctx)
+{
+       struct sii8620_mt_msg *msg, *n;
+
+       list_for_each_entry_safe(msg, n, &ctx->mt_queue, node) {
+               list_del(&msg->node);
+               kfree(msg);
+       }
+       ctx->mt_state = MT_STATE_READY;
+}
+
 static void sii8620_mt_work(struct sii8620 *ctx)
 {
        struct sii8620_mt_msg *msg;
@@ -1085,6 +1096,7 @@ static void sii8620_disconnect(struct sii8620 *ctx)
        ctx->sink_type = SINK_NONE;
        kfree(ctx->edid);
        ctx->edid = NULL;
+       sii8620_mt_cleanup(ctx);
 }
 
 static void sii8620_mhl_disconnected(struct sii8620 *ctx)