diff options
author | Andrzej Hajda <a.hajda@samsung.com> | 2016-10-19 13:42:05 +0200 |
---|---|---|
committer | Seung-Woo Kim <sw0312.kim@samsung.com> | 2016-12-14 13:53:57 +0900 |
commit | a348fc8147e20928b1858376769aa427850c018f (patch) | |
tree | 3e4f834dc44a286b40875645b3403f60a1eaf2f8 | |
parent | 2eec2a75d4e69deb9041eee18d122fa9087784c2 (diff) |
drm/bridge/sii8620: add missing error checking
The patch adds error checking during initialization and in irq handler.
Change-Id: I26777455fb5ff86c91455a683b6cf5642fe2ed31
Signed-off-by: Andrzej Hajda <a.hajda@samsung.com>
-rw-r--r-- | drivers/gpu/drm/bridge/sii8620.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/drivers/gpu/drm/bridge/sii8620.c b/drivers/gpu/drm/bridge/sii8620.c index 9c2303fe4b85..f2b6cd52dc30 100644 --- a/drivers/gpu/drm/bridge/sii8620.c +++ b/drivers/gpu/drm/bridge/sii8620.c @@ -1381,7 +1381,7 @@ static irqreturn_t sii8620_irq_thread(int irq, void *data) }; struct sii8620 *ctx = data; u8 stats[LEN_FAST_INTR_STAT]; - int i; + int i, ret; mutex_lock(&ctx->lock); @@ -1392,6 +1392,11 @@ static irqreturn_t sii8620_irq_thread(int irq, void *data) sii8620_mt_work(ctx); + ret = sii8620_clear_error(ctx); + if (ret) { + dev_err(ctx->dev, "Error during IRQ handling, %d.\n", ret); + sii8620_mhl_disconnected(ctx); + } mutex_unlock(&ctx->lock); return IRQ_HANDLED; @@ -1403,7 +1408,11 @@ static void sii8620_cable_in(struct sii8620 *ctx) u8 ver[5]; int ret; - sii8620_hw_on(ctx); + ret = sii8620_hw_on(ctx); + if (ret) { + dev_err(dev, "Error powering on, %d.\n", ret); + return; + } sii8620_hw_reset(ctx); msleep(100); @@ -1437,6 +1446,12 @@ static void sii8620_cable_in(struct sii8620 *ctx) REG_DPD, BIT_DPD_PWRON_PLL | BIT_DPD_PDNTX12 | BIT_DPD_OSC_EN, ); + ret = sii8620_clear_error(ctx); + if (ret) { + dev_err(dev, "Error accessing I2C bus, %d.\n", ret); + return; + } + enable_irq(to_i2c_client(ctx->dev)->irq); } |