]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
drm/i2c: tda998x: always disable and clear interrupts at probe
authorRussell King <rmk+kernel@armlinux.org.uk>
Sat, 11 Mar 2017 11:12:22 +0000 (11:12 +0000)
committerRussell King <rmk+kernel@armlinux.org.uk>
Tue, 3 Apr 2018 11:21:54 +0000 (12:21 +0100)
Always disable and clear interrupts at probe time to ensure that the
TDA998x is in a sane state.  This ensures that the interrupt line,
which is also the CEC clock calibration signal, is always deasserted.

Acked-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
drivers/gpu/drm/i2c/tda998x_drv.c

index 7f2762fab5c96f26b8f9826a2b2dea30826dd2a8..16e0439cad446f005f6995d7f26c0d162da84938 100644 (file)
@@ -1546,6 +1546,15 @@ static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
        cec_write(priv, REG_CEC_FRO_IM_CLK_CTRL,
                        CEC_FRO_IM_CLK_CTRL_GHOST_DIS | CEC_FRO_IM_CLK_CTRL_IMCLK_SEL);
 
+       /* ensure interrupts are disabled */
+       cec_write(priv, REG_CEC_RXSHPDINTENA, 0);
+
+       /* clear pending interrupts */
+       cec_read(priv, REG_CEC_RXSHPDINT);
+       reg_read(priv, REG_INT_FLAGS_0);
+       reg_read(priv, REG_INT_FLAGS_1);
+       reg_read(priv, REG_INT_FLAGS_2);
+
        /* initialize the optional IRQ */
        if (client->irq) {
                unsigned long irq_flags;
@@ -1553,11 +1562,6 @@ static int tda998x_create(struct i2c_client *client, struct tda998x_priv *priv)
                /* init read EDID waitqueue and HDP work */
                init_waitqueue_head(&priv->wq_edid);
 
-               /* clear pending interrupts */
-               reg_read(priv, REG_INT_FLAGS_0);
-               reg_read(priv, REG_INT_FLAGS_1);
-               reg_read(priv, REG_INT_FLAGS_2);
-
                irq_flags =
                        irqd_get_trigger_type(irq_get_irq_data(client->irq));
                irq_flags |= IRQF_SHARED | IRQF_ONESHOT;