From: Hans Verkuil <[email protected]>

Signed-off-by: Hans Verkuil <[email protected]>
---
 drivers/media/i2c/Kconfig         |   2 +-
 drivers/media/i2c/tc358840.c      | 212 +++++++++++++++++++++++++--
 drivers/media/i2c/tc358840_regs.h | 301 ++++++++++++++++++++++++--------------
 3 files changed, 396 insertions(+), 119 deletions(-)

diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig
index 1fd6057..3243218 100644
--- a/drivers/media/i2c/Kconfig
+++ b/drivers/media/i2c/Kconfig
@@ -309,7 +309,7 @@ config VIDEO_TC358743
 
 config VIDEO_TC358840
        tristate "Toshiba TC358840 decoder"
-       depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
+       depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API && MEDIA_CEC
        select HDMI
        ---help---
          Support for the Toshiba TC358840 HDMI to MIPI CSI-2 bridge.
diff --git a/drivers/media/i2c/tc358840.c b/drivers/media/i2c/tc358840.c
index 5ce7155..3d5ff98 100644
--- a/drivers/media/i2c/tc358840.c
+++ b/drivers/media/i2c/tc358840.c
@@ -40,6 +40,7 @@
 #include <media/v4l2-device.h>
 #include <media/v4l2-subdev.h>
 #include <media/v4l2-of.h>
+#include <media/cec.h>
 
 #include <media/i2c/tc358840.h>
 #include "tc358840_regs.h"
@@ -74,6 +75,7 @@ struct tc358840_state {
        struct media_pad pad[2];
        struct v4l2_ctrl_handler hdl;
        struct i2c_client *i2c_client;
+       struct cec_adapter *cec_adap;
        bool enabled;
 
        /* controls */
@@ -694,6 +696,7 @@ static void tc358840_set_ref_clk(struct v4l2_subdev *sd)
 
        u32 sys_freq;
        u32 lock_ref_freq;
+       u32 cec_freq;
        u32 nco;
        u16 csc;
 
@@ -723,6 +726,15 @@ static void tc358840_set_ref_clk(struct v4l2_subdev *sd)
        csc = pdata->refclk_hz / 10000;
        i2c_wr8(sd, SCLK_CSC0, csc & 0xFF);
        i2c_wr8(sd, SCLK_CSC1, (csc >> 8) & 0xFF);
+
+       /*
+        * Trial and error suggests that the default register value
+        * of 656 is for a 42 MHz reference clock. Use that to derive
+        * a new value based on the actual reference clock.
+        */
+       cec_freq = (656 * sys_freq) / 4200;
+       i2c_wr16(sd, CECHCLK, cec_freq);
+       i2c_wr16(sd, CECLCLK, cec_freq);
 }
 
 static void tc358840_set_csi_mbus_config(struct v4l2_subdev *sd)
@@ -1051,6 +1063,99 @@ static void tc358840_initial_setup(struct v4l2_subdev 
*sd)
        i2c_wr8_and_or(sd, VI_MODE, ~MASK_RGB_DVI, 0);
 }
 
+/* --------------- CEC --------------- */
+
+static int tc358840_cec_adap_enable(struct cec_adapter *adap, bool enable)
+{
+       struct tc358840_state *state = adap->priv;
+       struct v4l2_subdev *sd = &state->sd;
+
+       i2c_wr32(sd, CECIMSK, enable ? MASK_CECTIM | MASK_CECRIM : 0);
+       i2c_wr32(sd, CECICLR, MASK_CECTICLR | MASK_CECRICLR);
+       i2c_wr32(sd, CECEN, enable);
+       if (enable)
+               i2c_wr32(sd, CECREN, MASK_CECREN);
+       return 0;
+}
+
+static int tc358840_cec_adap_monitor_all_enable(struct cec_adapter *adap,
+                                               bool enable)
+{
+       struct tc358840_state *state = adap->priv;
+       struct v4l2_subdev *sd = &state->sd;
+       u32 reg;
+
+       reg = i2c_rd32(sd, CECRCTL1);
+       if (enable)
+               reg |= MASK_CECOTH;
+       else
+               reg &= ~MASK_CECOTH;
+       i2c_wr32(sd, CECRCTL1, reg);
+       return 0;
+}
+
+static int tc358840_cec_adap_log_addr(struct cec_adapter *adap, u8 log_addr)
+{
+       struct tc358840_state *state = adap->priv;
+       struct v4l2_subdev *sd = &state->sd;
+       unsigned la = 0;
+
+       if (log_addr != CEC_LOG_ADDR_INVALID) {
+               la = i2c_rd32(sd, CECADD);
+               la |= 1 << log_addr;
+       }
+       i2c_wr32(sd, CECADD, la);
+       return 0;
+}
+
+static int tc358840_cec_adap_transmit(struct cec_adapter *adap, u8 attempts,
+                                  u32 signal_free_time, struct cec_msg *msg)
+{
+       struct tc358840_state *state = adap->priv;
+       struct v4l2_subdev *sd = &state->sd;
+       unsigned i;
+
+       i2c_wr32(sd, CECTCTL,
+                (cec_msg_is_broadcast(msg) ? MASK_CECBRD : 0) |
+                (signal_free_time - 1));
+       for (i = 0; i < msg->len; i++)
+               i2c_wr32(sd, CECTBUF1 + i * 4,
+                        msg->msg[i] | ((i == msg->len - 1) ? MASK_CECTEOM : 
0));
+       i2c_wr32(sd, CECTEN, MASK_CECTEN);
+       return 0;
+}
+
+static int tc358840_received(struct cec_adapter *adap, struct cec_msg *msg)
+{
+       struct cec_msg reply;
+       u16 pa;
+
+       cec_msg_init(&reply, adap->log_addr[0], cec_msg_initiator(msg));
+
+       switch (msg->msg[1]) {
+       case CEC_MSG_SET_STREAM_PATH:
+               if (!adap->is_source)
+                       return -ENOMSG;
+               cec_ops_set_stream_path(msg, &pa);
+               if (pa != adap->phys_addr)
+                       return -ENOMSG;
+               cec_msg_active_source(&reply, adap->phys_addr);
+               cec_transmit_msg(adap, &reply, false);
+               break;
+       default:
+               return -ENOMSG;
+       }
+       return 0;
+}
+
+static const struct cec_adap_ops tc358840_cec_adap_ops = {
+       .adap_enable = tc358840_cec_adap_enable,
+       .adap_log_addr = tc358840_cec_adap_log_addr,
+       .adap_transmit = tc358840_cec_adap_transmit,
+       .adap_monitor_all_enable = tc358840_cec_adap_monitor_all_enable,
+       .received = tc358840_received,
+};
+
 /* --------------- IRQ --------------- */
 
 static void tc358840_format_change(struct v4l2_subdev *sd)
@@ -1321,6 +1426,7 @@ static void tc358840_hdmi_sys_int_handler(struct 
v4l2_subdev *sd, bool *handled)
 
 static int tc358840_isr(struct v4l2_subdev *sd, u32 status, bool *handled)
 {
+       struct tc358840_state *state = to_state(sd);
        u16 intstatus;
        unsigned retry = 10;
 
@@ -1379,6 +1485,53 @@ retry:
                }
        }
 
+       if (intstatus & (MASK_CEC_RINT | MASK_CEC_TINT | MASK_CEC_EINT)) {
+               unsigned cec_rxint, cec_txint;
+
+               cec_rxint = i2c_rd32(sd, CECRSTAT);
+               mdelay(1);
+               cec_txint = i2c_rd32(sd, CECTSTAT);
+               mdelay(1);
+
+               i2c_wr32(sd, CECICLR, MASK_CECTICLR | MASK_CECRICLR);
+               i2c_wr16(sd, INTSTATUS, MASK_CEC_RINT | MASK_CEC_TINT |
+                        MASK_CEC_EINT);
+
+               if ((intstatus & MASK_CEC_RINT) && (cec_rxint & MASK_CECRIEND)) 
{
+                       struct cec_msg msg = {};
+                       unsigned i;
+                       unsigned v;
+
+                       v = i2c_rd32(sd, CECRCTR);
+                       msg.len = v & 0x1f;
+                       for (i = 0; i < msg.len; i++) {
+                               v = i2c_rd32(sd, CECRBUF1 + i * 4);
+                               msg.msg[i] = v & 0xff;
+                       }
+                       cec_received_msg(state->cec_adap, &msg);
+               }
+               if ((intstatus & MASK_CEC_TINT) && cec_txint) {
+                       if (cec_txint & MASK_CECTIEND)
+                               cec_transmit_done(state->cec_adap,
+                                       CEC_TX_STATUS_OK, 0, 0, 0, 0);
+                       else if (cec_txint & MASK_CECTIAL)
+                               cec_transmit_done(state->cec_adap,
+                                       CEC_TX_STATUS_ARB_LOST, 1, 0, 0, 0);
+                       else if (cec_txint & MASK_CECTIACK)
+                               cec_transmit_done(state->cec_adap,
+                                       CEC_TX_STATUS_NACK, 0, 1, 0, 0);
+                       else if (cec_txint & MASK_CECTIUR) {
+                               /*
+                                * Not sure when this bit is set. Treat it as
+                                * an error for now.
+                                */
+                               cec_transmit_done(state->cec_adap,
+                                       CEC_TX_STATUS_ERROR, 0, 0, 0, 1);
+                       }
+               }
+               intstatus &= ~(MASK_CEC_RINT | MASK_CEC_TINT | MASK_CEC_EINT);
+       }
+
        if (intstatus & MASK_CSITX0_INT) {
                v4l2_dbg(3, debug, sd, "%s: MASK_CSITX0_INT\n", __func__);
 
@@ -2130,6 +2283,8 @@ static const struct media_entity_operations 
tc358840_media_ops = {
 static int tc358840_probe(struct i2c_client *client,
                          const struct i2c_device_id *id)
 {
+       const u16 irq_mask = MASK_HDMI_INT | MASK_CEC_RINT | MASK_CEC_TINT |
+                            MASK_CEC_EINT;
        struct tc358840_state *state;
        struct v4l2_subdev *sd;
        int err;
@@ -2200,6 +2355,18 @@ static int tc358840_probe(struct i2c_client *client,
        if (err)
                return err;
 
+       state->cec_adap = cec_create_adapter(&tc358840_cec_adap_ops,
+               state, client->name,
+               CEC_CAP_TRANSMIT | CEC_CAP_LOG_ADDRS | CEC_CAP_PASSTHROUGH |
+               CEC_CAP_VENDOR_ID,
+               1, &client->dev);
+/*     err = PTR_ERR_OR_ZERO(state->cec_adap);*/
+       if (IS_ERR_OR_NULL(state->cec_adap)) {
+               err = state->cec_adap ? PTR_ERR(state->cec_adap) : -ENOMEM;
+               return err;
+       }
+       state->cec_adap->available_log_addrs = CEC_MAX_LOG_ADDRS;
+
        /* Control Handlers */
        v4l2_ctrl_handler_init(&state->hdl, 4);
 
@@ -2257,18 +2424,6 @@ static int tc358840_probe(struct i2c_client *client,
                }
        }
 
-       tc358840_enable_interrupts(sd, tx_5v_power_present(sd));
-
-       /*
-        * FIXME: Don't know what MASK_CSITX0_INT and MASK_CSITX1_INT do.
-        * Thus, disable them for now...
-        */
-#if 0
-       i2c_wr16(sd, INTMASK, ~(MASK_HDMI_INT | MASK_CSITX0_INT |
-               MASK_CSITX1_INT) & 0xFFFF);
-#endif
-       i2c_wr16(sd, INTMASK, ~(MASK_HDMI_INT) & 0xFFFF);
-
        v4l2_ctrl_handler_setup(sd->ctrl_handler);
 
        v4l2_info(sd, "%s found @ 7h%02X (%s)\n", client->name,
@@ -2288,10 +2443,41 @@ static int tc358840_probe(struct i2c_client *client,
        }
 #endif
 
+       err = cec_register_adapter(state->cec_adap);
+       if (err < 0) {
+               pr_err("%s: failed to register the cec device\n", __func__);
+               cec_delete_adapter(state->cec_adap);
+               state->cec_adap = NULL;
+               goto err_hdl;
+       }
+       cec_set_phys_addr(state->cec_adap, 0);
+
+       if (tx_5v_power_present(sd))
+               cec_connected_inputs(state->cec_adap, 1);
+       err = cec_enable(state->cec_adap, true);
+       if (err < 0) {
+               pr_err("%s: failed to enable the cec adapter\n", __func__);
+               goto err_cec;
+       }
+
+       tc358840_enable_interrupts(sd, tx_5v_power_present(sd));
+
+       /*
+        * FIXME: Don't know what MASK_CSITX0_INT and MASK_CSITX1_INT do.
+        * Thus, disable them for now...
+        */
+#if 0
+       i2c_wr16(sd, INTMASK, ~(MASK_HDMI_INT | MASK_CSITX0_INT |
+               MASK_CSITX1_INT) & 0xFFFF);
+#endif
+       i2c_wr16(sd, INTMASK, ~irq_mask & 0xFFFF);
+
        err = v4l2_async_register_subdev(sd);
        if (err == 0)
                return 0;
 
+err_cec:
+       cec_unregister_adapter(state->cec_adap);
 err_hdl:
        v4l2_ctrl_handler_free(&state->hdl);
        return err;
@@ -2300,12 +2486,14 @@ err_hdl:
 static int tc358840_remove(struct i2c_client *client)
 {
        struct v4l2_subdev *sd = i2c_get_clientdata(client);
+       struct tc358840_state *state = to_state(sd);
 
        v4l_dbg(1, debug, client, "%s()\n", __func__);
 
 #if defined(CONFIG_MEDIA_CONTROLLER)
        media_entity_cleanup(&sd->entity);
 #endif
+       cec_unregister_adapter(state->cec_adap);
        return 0;
 }
 
diff --git a/drivers/media/i2c/tc358840_regs.h 
b/drivers/media/i2c/tc358840_regs.h
index b37f6b1..c375c88 100644
--- a/drivers/media/i2c/tc358840_regs.h
+++ b/drivers/media/i2c/tc358840_regs.h
@@ -22,8 +22,8 @@
 
 /* *** General (16 bit) *** */
 #define CHIPID_ADDR                            0x0000
-#define MASK_CHIPID                            0xFF00
-#define MASK_REVID                             0x00FF
+#define MASK_CHIPID                            0xff00
+#define MASK_REVID                             0x00ff
 #define TC358840_CHIPID                                0x4700
 
 #define SYSCTL                                 0x0002
@@ -35,7 +35,7 @@
 #define MASK_IRRST                             (1 << 11)
 #define MASK_SPLRST                            (1 << 12)
 #define MASK_ABRST                             (1 << 14)
-#define MASK_RESET_ALL                         0x5F80
+#define MASK_RESET_ALL                         0x5f80
 
 #define CONFCTL0                               0x0004
 #define MASK_VTX0EN                            (1 << 0)
@@ -81,7 +81,7 @@
 #define MASK_HDMI_INT                          (1 << 9)
 #define MASK_AMUTE_INT                         (1 << 10)
 #define MASK_CSITX1_INT                                (1 << 11)
-#define MASK_INT_STATUS_MASK_ALL               0x0F3F
+#define MASK_INT_STATUS_MASK_ALL               0x0f3f
 
 /* *** Interrupt and MASKs (8 bit) *** */
 #define HDMI_INT0                              0x8500
@@ -184,8 +184,8 @@
 #define MASK_GBD_ACLR                          0x40
 #define MASK_GBD_PKERR                         0x80
 
-#define MISC_INT                               0x850B
-#define MISC_INTM                              0x851B
+#define MISC_INT                               0x850b
+#define MISC_INTM                              0x851b
 #define MASK_AUDIO_MUTE                                0x01
 #define MASK_SYNC_CHG                          0x02
 #define MASK_NO_VS                             0x04
@@ -213,7 +213,7 @@
 #define MASK_S_V_INTERLACE                     0x01
 
 #define VI_STATUS3                             0x8528
-#define MASK_S_V_COLOR                         0x1F
+#define MASK_S_V_COLOR                         0x1f
 #define MASK_RGB_FULL                          0x00
 #define MASK_RGB_LIMITED                       0x01
 #define MASK_YCBCR601_FULL                     0x02
@@ -222,14 +222,14 @@
 #define MASK_ADOBE_RGB_LIMITED                 0x05
 #define MASK_YCBCR709_FULL                     0x06
 #define MASK_YCBCR709_LIMITED                  0x07
-#define MASK_XVYCC601_FULL                     0x0A
-#define MASK_XVYCC601_LIMITED                  0x0B
-#define MASK_XVYCC709_FULL                     0x0E
-#define MASK_XVYCC709_LIMITED                  0x0F
+#define MASK_XVYCC601_FULL                     0x0a
+#define MASK_XVYCC601_LIMITED                  0x0b
+#define MASK_XVYCC709_FULL                     0x0e
+#define MASK_XVYCC709_LIMITED                  0x0f
 #define MASK_SYCC601_FULL                      0x12
 #define MASK_SYCC601_LIMITED                   0x13
-#define MASK_ADOBE_YCC601_FULL                 0x1A
-#define MASK_ADOBE_YCC601_LIMITED              0x1B
+#define MASK_ADOBE_YCC601_FULL                 0x1a
+#define MASK_ADOBE_YCC601_LIMITED              0x1b
 #define MASK_LIMITED                            0x01
 
 
@@ -240,7 +240,7 @@
 #define CSITX_CLKEN                            0x0108
 #define MASK_CSITX_EN                          (1 << 0)
 
-#define PPICLKEN                               0x010C
+#define PPICLKEN                               0x010c
 #define MASK_HSTXCLKEN                         0x00000001
 
 #define MODECONF                               0x0110  /* Not in Ref. v1.5 */
@@ -259,7 +259,7 @@
 #define MASK_LANES                             0x00000007
 #define MASK_CLANEEN                           (1 << 4)
 
-#define CSITX_START                            0x011C
+#define CSITX_START                            0x011c
 #define LINEINITCNT                            0x0120
 #define HSTOCNT                                        0x0124
 
@@ -286,12 +286,12 @@
 #define CSI_TATO_COUNT                         0x0130  /* Not in Ref. v1.5 */
 #define CSI_PRESP_BTA_COUNT                    0x0134  /* Not in Ref. v1.5 */
 #define CSI_PRESP_LPR_COUNT                    0x0138  /* Not in Ref. v1.5 */
-#define CSI_PRESP_LPW_COUNT                    0x013C  /* Not in Ref. v1.5 */
+#define CSI_PRESP_LPW_COUNT                    0x013c  /* Not in Ref. v1.5 */
 
 #define HSREADCNT                              0x0140  /* Not in Ref. v1.5 */
 #define HSWRITECNT                             0x0144  /* Not in Ref. v1.5 */
 #define PERIRSTCNT                             0x0148  /* Not in Ref. v1.5 */
-#define LRXHTOCNT                              0x014C  /* Not in Ref. v1.5 */
+#define LRXHTOCNT                              0x014c  /* Not in Ref. v1.5 */
 
 #define FUNCMODE                               0x0150
 #define MASK_CONTCLKMODE                       (1 << 5)
@@ -307,19 +307,19 @@
 
 #define HSYNCSTOPCNT                           0x0168  /* Not in Ref. v1.5 */
 #define VHDELAY                                        0x0170  /* Not in Ref. 
v1.5 */
-#define RX_STATE_INT_MASK                      0x01A4  /* Not in Ref. v1.5 */
-#define LPRX_THRESH_COUNT                      0x010C  /* Not in Ref. v1.5 */
+#define RX_STATE_INT_MASK                      0x01a4  /* Not in Ref. v1.5 */
+#define LPRX_THRESH_COUNT                      0x010c  /* Not in Ref. v1.5 */
 #define APPERRMASK                             0x0214  /* Not in Ref. v1.5 */
-#define RX_ERR_INT_MASK                                0x021C  /* Not in Ref. 
v1.5 */
+#define RX_ERR_INT_MASK                                0x021c  /* Not in Ref. 
v1.5 */
 #define LPTX_INT_MASK                          0x0224  /* Not in Ref. v1.5 */
 
 #define LPTXTIMECNT                            0x0254
 #define TCLK_HEADERCNT                         0x0258
-#define TCLK_TRAILCNT                          0x025C
+#define TCLK_TRAILCNT                          0x025c
 #define THS_HEADERCNT                          0x0260
 #define TWAKEUP                                        0x0264
 #define TCLK_POSTCNT                           0x0268
-#define THS_TRAILCNT                           0x026C
+#define THS_TRAILCNT                           0x026c
 #define HSTXVREGCNT                            0x0270
 
 #define HSTXVREGEN                             0x0274
@@ -330,32 +330,121 @@
 #define MASK_CLM_HSTXVREGEN                    0x0001
 
 #define BTA_COUNT                              0x0278  /* Not in Ref. v1.5 */
-#define DPHY_TX_ADJUST                         0x027C  /* Not in Ref. v1.5 */
+#define DPHY_TX_ADJUST                         0x027c  /* Not in Ref. v1.5 */
 
-#define MIPICLKEN                              0x02A0
+#define MIPICLKEN                              0x02a0
 #define MASK_MP_ENABLE                         0x00000001
 #define MASK_MP_CKEN                           0x00000002
 
-#define PLLCONF                                        0x02AC
+#define PLLCONF                                        0x02ac
 #define MASK_LFBREN                            (1 << 9)
 #define MASK_MPLBW                             0x00030000
 #define MASK_MPLBW_25                          (0 << 16)
 #define MASK_MPLBW_33                          (1 << 16)
 #define MASK_MPLBW_50                          (2 << 16)
 #define MASK_MPLBW_MAX                         (3 << 16)
-#define MASK_PLL_FBD                           0x000000FF
+#define MASK_PLL_FBD                           0x000000ff
 #define SET_PLL_FBD(fbd)                       (((fbd) - 1) & MASK_PLL_FBD)
-#define MASK_PLL_FRS                           0x00000C00
+#define MASK_PLL_FRS                           0x00000c00
 #define SET_PLL_FRS(frs)                       (((frs) << 10) & MASK_PLL_FRS)
-#define MASK_PLL_PRD                           0x0000F000
+#define MASK_PLL_PRD                           0x0000f000
 #define SET_PLL_PRD(prd)                       ((((prd) - 1) << 12) & \
                                                  MASK_PLL_PRD)
 #define MASK_PLL_LBW                           0x00030000
 #define SET_PLL_LBW(lbw)                       ((((lbw) - 1) << 16) & \
                                                  MASK_PLL_LBW)
 
-#define CECEN                                 0x0600
-#define MASK_CECEN                            0x0001
+/* *** CEC (32 bit) *** */
+#define CECHCLK                                        0x0028  /* 16 bits */
+#define MASK_CECHCLK                           (0x7ff << 0)
+
+#define CECLCLK                                        0x002a  /* 16 bits */
+#define MASK_CECLCLK                           (0x7ff << 0)
+
+#define CECEN                                  0x0600
+#define MASK_CECEN                             0x0001
+
+#define CECADD                                 0x0604
+#define CECRST                                 0x0608
+#define MASK_CECRESET                          0x0001
+
+#define CECREN                                 0x060c
+#define MASK_CECREN                            0x0001
+
+#define CECRCTL1                               0x0614
+#define MASK_CECACKDIS                         (1 << 24)
+#define MASK_CECHNC                            (3 << 20)
+#define MASK_CECLNC                            (7 << 16)
+#define MASK_CECMIN                            (7 << 12)
+#define MASK_CECMAX                            (7 << 8)
+#define MASK_CECDAT                            (7 << 4)
+#define MASK_CECTOUT                           (3 << 2)
+#define MASK_CECRIHLD                          (1 << 1)
+#define MASK_CECOTH                            (1 << 0)
+
+#define CECRCTL2                               0x0618
+#define MASK_CECSWAV3                          (7 << 12)
+#define MASK_CECSWAV2                          (7 << 8)
+#define MASK_CECSWAV1                          (7 << 4)
+#define MASK_CECSWAV0                          (7 << 0)
+
+#define CECRCTL3                               0x061c
+#define MASK_CECWAV3                           (7 << 20)
+#define MASK_CECWAV2                           (7 << 16)
+#define MASK_CECWAV1                           (7 << 12)
+#define MASK_CECWAV0                           (7 << 8)
+#define MASK_CECACKEI                          (1 << 4)
+#define MASK_CECMINEI                          (1 << 3)
+#define MASK_CECMAXEI                          (1 << 2)
+#define MASK_CECRSTEI                          (1 << 1)
+#define MASK_CECWAVEI                          (1 << 0)
+
+#define CECTEN                                 0x0620
+#define MASK_CECTBUSY                          (1 << 1)
+#define MASK_CECTEN                            (1 << 0)
+
+#define CECTCTL                                        0x0628
+#define MASK_CECSTRS                           (7 << 20)
+#define MASK_CECSPRD                           (7 << 16)
+#define MASK_CECDTRS                           (7 << 12)
+#define MASK_CECDPRD                           (15 << 8)
+#define MASK_CECBRD                            (1 << 4)
+#define MASK_CECFREE                           (15 << 0)
+
+#define CECRSTAT                               0x062c
+#define MASK_CECRIWA                           (1 << 6)
+#define MASK_CECRIOR                           (1 << 5)
+#define MASK_CECRIACK                          (1 << 4)
+#define MASK_CECRIMIN                          (1 << 3)
+#define MASK_CECRIMAX                          (1 << 2)
+#define MASK_CECRISTA                          (1 << 1)
+#define MASK_CECRIEND                          (1 << 0)
+
+#define CECTSTAT                               0x0630
+#define MASK_CECTIUR                           (1 << 4)
+#define MASK_CECTIACK                          (1 << 3)
+#define MASK_CECTIAL                           (1 << 2)
+#define MASK_CECTIEND                          (1 << 1)
+
+#define CECRBUF1                               0x0634
+#define MASK_CECRACK                           (1 << 9)
+#define MASK_CECEOM                            (1 << 8)
+#define MASK_CECRBYTE                          (0xff << 0)
+
+#define CECTBUF1                               0x0674
+#define MASK_CECTEOM                           (1 << 8)
+#define MASK_CECTBYTE                          (0xff << 0)
+
+#define CECRCTR                                        0x06b4
+#define MASK_CECRCTR                           (0x1f << 0)
+
+#define CECIMSK                                        0x06c0
+#define MASK_CECTIM                            (1 << 1)
+#define MASK_CECRIM                            (1 << 0)
+
+#define CECICLR                                        0x06cc
+#define MASK_CECTICLR                          (1 << 1)
+#define MASK_CECRICLR                          (1 << 0)
 
 /* *** Split Control (16 bit) *** */
 #define SPLITTX0_CTRL                          0x5000
@@ -367,9 +456,9 @@
 #define SPLITTX0_WC                            0x5008  /*Removed in rev. 1.1*/
 #define SPLITTX1_WC                            0x5088  /*Removed in rev. 1.1*/
 
-#define SPLITTX0_SPLIT                         0x500C
-#define SPLITTX1_SPLIT                         0x508C
-#define MASK_FPXV                              0x0FFF
+#define SPLITTX0_SPLIT                         0x500c
+#define SPLITTX1_SPLIT                         0x508c
+#define MASK_FPXV                              0x0fff
 /* NOTE: Only available for TX0 */
 #define MASK_TX1SEL                            0x4000
 /* NOTE: Only available for TX0 */
@@ -388,7 +477,7 @@
 #define PHY_RST                                        0x8414
 #define MASK_RESET_CTRL                                0x01    /* Reset active 
low */
 
-#define APPL_CTL                               0x84F0
+#define APPL_CTL                               0x84f0
 #define MASK_APLL_ON                           0x01
 #define MASK_APLL_CPCTL                                0x30
 #define MASK_APLL_CPCTL_HIZ                    0x00
@@ -396,7 +485,7 @@
 #define MASK_APLL_CPCTL_HFIX                   0x20
 #define MASK_APLL_CPCTL_NORMAL                 0x30
 
-#define DDCIO_CTL                              0x84F4
+#define DDCIO_CTL                              0x84f4
 #define MASK_DDC_PWR_ON                                (1 << 0)
 
 /** *** HDMI Clock (8 bit) *** */
@@ -410,7 +499,7 @@
 #define LOCK_REF_FREQC                         0x8632
 
 #define FS_SET                                 0x8621
-#define MASK_FS                                        0x0F
+#define MASK_FS                                        0x0f
 
 #define NCO_F0_MOD                             0x8670
 #define MASK_NCO_F0_MOD_42MHZ                  0x00
@@ -426,31 +515,31 @@
 #define NCO_44F0C                              0x8677
 #define NCO_44F0D                              0x8678
 
-#define SCLK_CSC0                              0x8A0C
-#define SCLK_CSC1                              0x8A0D
-
-#define HDCP_MODE                             0x8560
-#define MASK_MODE_RST_TN                      0x20
-#define MASK_LINE_REKEY                       0x10
-#define MASK_AUTO_CLR                         0x04
-
-#define HDCP_REG1                             0x8563 /* Not in REF_01 */
-#define MASK_AUTH_UNAUTH_SEL                  0x70
-#define MASK_AUTH_UNAUTH_SEL_12_FRAMES        0x70
-#define MASK_AUTH_UNAUTH_SEL_8_FRAMES         0x60
-#define MASK_AUTH_UNAUTH_SEL_4_FRAMES         0x50
-#define MASK_AUTH_UNAUTH_SEL_2_FRAMES         0x40
-#define MASK_AUTH_UNAUTH_SEL_64_FRAMES        0x30
-#define MASK_AUTH_UNAUTH_SEL_32_FRAMES        0x20
-#define MASK_AUTH_UNAUTH_SEL_16_FRAMES        0x10
-#define MASK_AUTH_UNAUTH_SEL_ONCE             0x00
-#define MASK_AUTH_UNAUTH                      0x01
-#define MASK_AUTH_UNAUTH_AUTO                 0x01
-
-#define HDCP_REG2                             0x8564 /* Not in REF_01 */
-#define MASK_AUTO_P3_RESET                    0x0F
-#define SET_AUTO_P3_RESET_FRAMES(n)          (n & MASK_AUTO_P3_RESET)
-#define MASK_AUTO_P3_RESET_OFF                0x00
+#define SCLK_CSC0                              0x8a0c
+#define SCLK_CSC1                              0x8a0d
+
+#define HDCP_MODE                              0x8560
+#define MASK_MODE_RST_TN                       0x20
+#define MASK_LINE_REKEY                                0x10
+#define MASK_AUTO_CLR                          0x04
+
+#define HDCP_REG1                              0x8563 /* Not in REF_01 */
+#define MASK_AUTH_UNAUTH_SEL                   0x70
+#define MASK_AUTH_UNAUTH_SEL_12_FRAMES         0x70
+#define MASK_AUTH_UNAUTH_SEL_8_FRAMES          0x60
+#define MASK_AUTH_UNAUTH_SEL_4_FRAMES          0x50
+#define MASK_AUTH_UNAUTH_SEL_2_FRAMES          0x40
+#define MASK_AUTH_UNAUTH_SEL_64_FRAMES         0x30
+#define MASK_AUTH_UNAUTH_SEL_32_FRAMES         0x20
+#define MASK_AUTH_UNAUTH_SEL_16_FRAMES         0x10
+#define MASK_AUTH_UNAUTH_SEL_ONCE              0x00
+#define MASK_AUTH_UNAUTH                       0x01
+#define MASK_AUTH_UNAUTH_AUTO                  0x01
+
+#define HDCP_REG2                              0x8564 /* Not in REF_01 */
+#define MASK_AUTO_P3_RESET                     0x0f
+#define SET_AUTO_P3_RESET_FRAMES(n)            (n & MASK_AUTO_P3_RESET)
+#define MASK_AUTO_P3_RESET_OFF                 0x00
 
 
 /* *** VI *** */
@@ -460,58 +549,58 @@
 
 #define DE_HSIZE_LO                            0x8582
 #define DE_HSIZE_HI                            0x8583
-#define DE_VSIZE_LO                            0x858C
-#define DE_VSIZE_HI                            0x858D
+#define DE_VSIZE_LO                            0x858c
+#define DE_VSIZE_HI                            0x858d
 
-#define IN_HSIZE_LO                            0x858E
-#define IN_HSIZE_HI                            0x858F
+#define IN_HSIZE_LO                            0x858e
+#define IN_HSIZE_HI                            0x858f
 
 #define IN_VSIZE_LO                            0x8590
 #define IN_VSIZE_HI                            0x8591
 
-#define FV_CNT_LO                              0x85C1  /* Not in Ref. v1.5 */
-#define FV_CNT_HI                              0x85C2  /* Not in Ref. v1.5 */
+#define FV_CNT_LO                              0x85c1  /* Not in Ref. v1.5 */
+#define FV_CNT_HI                              0x85c2  /* Not in Ref. v1.5 */
 
-#define HDCP_REG3                             0x85D1 /* Not in REF_01 */
-#define KEY_RD_CMD                            0x01
+#define HDCP_REG3                              0x85d1 /* Not in REF_01 */
+#define KEY_RD_CMD                             0x01
 
 /* *** EDID (8 bit) *** */
-#define EDID_MODE                              0x85E0
+#define EDID_MODE                              0x85e0
 #define MASK_DIRECT                            0x00
 #define MASK_RAM_DDC2B                         (1 << 0)
 #define MASK_RAM_EDDC                          (1 << 1)
 #define MASK_EDID_MODE_ALL                     0x03
 
-#define EDID_LEN1                              0x85E3
-#define EDID_LEN2                              0x85E4
+#define EDID_LEN1                              0x85e3
+#define EDID_LEN2                              0x85e4
 
-#define EDID_RAM                               0x8C00
+#define EDID_RAM                               0x8c00
 
 /* *** HDCP *** */
 #define BKSV                                   0x8800
 
-#define BCAPS                                 0x8840
-#define MASK_HDMI_RSVD                        0x80
-#define MASK_REPEATER                         0x40
-#define MASK_READY                            0x20
-#define MASK_FASTI2C                          0x10
-#define MASK_1_1_FEA                          0x02
-#define MASK_FAST_REAU                        0x01
+#define BCAPS                                  0x8840
+#define MASK_HDMI_RSVD                         0x80
+#define MASK_REPEATER                          0x40
+#define MASK_READY                             0x20
+#define MASK_FASTI2C                           0x10
+#define MASK_1_1_FEA                           0x02
+#define MASK_FAST_REAU                         0x01
 
-#define BSTATUS0                              0x8841
-#define BSTATUS1                              0x8842
-#define MASK_HDMI_MODE                        0x10
-#define MASK_MAX_EXCED                        0x08
+#define BSTATUS0                               0x8841
+#define BSTATUS1                               0x8842
+#define MASK_HDMI_MODE                         0x10
+#define MASK_MAX_EXCED                         0x08
 
 /* *** Video Output Format (8 bit) *** */
-#define VOUT_FMT                               0x8A00
+#define VOUT_FMT                               0x8a00
 #define MASK_OUTFMT_444_RGB                    (0 << 0)
 #define MASK_OUTFMT_422                                (1 << 0)
 #define MASK_OUTFMT_THROUGH                    (2 << 0)
 #define MASK_422FMT_NORMAL                     (0 << 4)
 #define MASK_422FMT_HDMITHROUGH                        (1 << 4)
 
-#define VOUT_FIL                               0x8A01
+#define VOUT_FIL                               0x8a01
 #define MASK_422FIL                            0x07
 #define MASK_422FIL_2_TAP                      (0 << 0)
 #define MASK_422FIL_3_TAP                      (1 << 0)
@@ -524,13 +613,13 @@
 #define MASK_444FIL_REPEAT                     (0 << 4)
 #define MASK_444FIL_2_TAP                      (1 << 4)
 
-#define VOUT_SYNC0                             0x8A02
+#define VOUT_SYNC0                             0x8a02
 #define MASK_MODE_2                            (2 << 0)
 #define MASK_MODE_3                            (3 << 0)
 #define MASK_M3_HSIZE                          0x30
-#define MASK_M3_VSIZE                          0xC0
+#define MASK_M3_VSIZE                          0xc0
 
-#define VOUT_CSC                               0x8A08
+#define VOUT_CSC                               0x8a08
 #define MASK_CSC_MODE                          0x03
 #define MASK_CSC_MODE_OFF                      (0 << 0)
 #define MASK_CSC_MODE_BUILTIN                  (1 << 0)
@@ -657,12 +746,12 @@
 #define MASK_HPD_OUT0                          (1 << 0)
 #define MASK_HPD_CTL0                          (1 << 4)
 
-#define INIT_END                               0x854A
+#define INIT_END                               0x854a
 #define MASK_INIT_END                          0x01
 
 /* *** Video Mute *** */
-#define VI_MUTE                                        0x857F
-#define MASK_AUTO_MUTE                         0xC0
+#define VI_MUTE                                        0x857f
+#define MASK_AUTO_MUTE                         0xc0
 #define MASK_VI_MUTE                           0x10
 #define MASK_VI_BLACK                          0x01
 
@@ -677,20 +766,20 @@
 #define MASK_AUD_INT_MODE                      0x02
 #define MASK_AVI_INT_MODE                      0x01
 
-#define NO_PKT_LIMIT                           0x870B
-#define MASK_NO_ACP_LIMIT                      0xF0
+#define NO_PKT_LIMIT                           0x870b
+#define MASK_NO_ACP_LIMIT                      0xf0
 #define SET_NO_ACP_LIMIT_MS(milliseconds)      ((((milliseconds)/80) << 4) & \
                                                  MASK_NO_ACP_LIMIT)
 
-#define NO_PKT_CLR                             0x870C
+#define NO_PKT_CLR                             0x870c
 #define MASK_NO_VS_CLR                         0x40
 #define MASK_NO_SPD_CLR                                0x20
 #define MASK_NO_ACP_CLR                                0x10
 #define MASK_NO_AVI_CLR1                       0x02
 #define MASK_NO_AVI_CLR0                       0x01
 
-#define ERR_PK_LIMIT                           0x870D
-#define NO_PKT_LIMIT2                          0x870E
+#define ERR_PK_LIMIT                           0x870d
+#define NO_PKT_LIMIT2                          0x870e
 #define PK_AVI_0HEAD                           0x8710
 #define PK_AVI_1HEAD                           0x8711
 #define PK_AVI_2HEAD                           0x8712
@@ -701,12 +790,12 @@
 #define PK_AVI_4BYTE                           0x8717
 #define PK_AVI_5BYTE                           0x8718
 #define PK_AVI_6BYTE                           0x8719
-#define PK_AVI_7BYTE                           0x871A
-#define PK_AVI_8BYTE                           0x871B
-#define PK_AVI_9BYTE                           0x871C
-#define PK_AVI_10BYTE                          0x871D
-#define PK_AVI_11BYTE                          0x871E
-#define PK_AVI_12BYTE                          0x871F
+#define PK_AVI_7BYTE                           0x871a
+#define PK_AVI_8BYTE                           0x871b
+#define PK_AVI_9BYTE                           0x871c
+#define PK_AVI_10BYTE                          0x871d
+#define PK_AVI_11BYTE                          0x871e
+#define PK_AVI_12BYTE                          0x871f
 #define PK_AVI_13BYTE                          0x8720
 #define PK_AVI_14BYTE                          0x8721
 #define PK_AVI_15BYTE                          0x8722
@@ -717,9 +806,9 @@
 /* *** Color Bar (16 bit) *** */
 #define CB_CTL                                 0x7000
 #define CB_HSW                                 0x7008
-#define CB_VSW                                 0x700A
-#define CB_HTOTOAL                             0x700C
-#define CB_VTOTOAL                             0x700E
+#define CB_VSW                                 0x700a
+#define CB_HTOTOAL                             0x700c
+#define CB_VTOTOAL                             0x700e
 #define CB_HACT                                        0x7010
 #define CB_VACT                                        0x7012
 #define CB_HSTART                              0x7014
-- 
2.7.0

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to