summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrzej Hajda <a.hajda@samsung.com>2016-10-17 14:21:37 +0200
committerSeung-Woo Kim <sw0312.kim@samsung.com>2016-12-14 13:53:52 +0900
commitcb6a312e3c935117fe2eb36684bd2dfbf9e5a749 (patch)
treea6079fa893b67b9a47ab7cccb064871a2d0574ab
parentf1092e1260ff8cfac51f0c9aac72c4d03b297894 (diff)
drm/bridge/sii8620: add message queue cleanup
Queue should be cleaned up on disconnect, otherwise we risk misbehavior. Change-Id: I4f212e1c36ac75f6f72102b24a1c5b14a932aeca Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
-rw-r--r--drivers/gpu/drm/bridge/sii8620.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/gpu/drm/bridge/sii8620.c b/drivers/gpu/drm/bridge/sii8620.c
index dcc08c02191d..56d310de6959 100644
--- a/drivers/gpu/drm/bridge/sii8620.c
+++ b/drivers/gpu/drm/bridge/sii8620.c
@@ -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)