root/drivers/media/platform/sunxi/sun6i-mipi-csi2/sun6i_mipi_csi2_reg.h
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright 2020-2022 Bootlin
 * Author: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
 */

#ifndef _SUN6I_MIPI_CSI2_REG_H_
#define _SUN6I_MIPI_CSI2_REG_H_

#define SUN6I_MIPI_CSI2_CTL_REG                         0x0
#define SUN6I_MIPI_CSI2_CTL_RESET_N                     BIT(31)
#define SUN6I_MIPI_CSI2_CTL_VERSION_EN                  BIT(30)
#define SUN6I_MIPI_CSI2_CTL_UNPK_EN                     BIT(1)
#define SUN6I_MIPI_CSI2_CTL_EN                          BIT(0)

#define SUN6I_MIPI_CSI2_CFG_REG                         0x4
#define SUN6I_MIPI_CSI2_CFG_CHANNEL_MODE(v)             ((((v) - 1) << 8) & \
                                                         GENMASK(9, 8))
#define SUN6I_MIPI_CSI2_CFG_LANE_COUNT(v)               (((v) - 1) & GENMASK(1, 0))

#define SUN6I_MIPI_CSI2_VCDT_RX_REG                     0x8
#define SUN6I_MIPI_CSI2_VCDT_RX_CH_VC(ch, vc)           (((vc) & GENMASK(1, 0)) << \
                                                         ((ch) * 8 + 6))
#define SUN6I_MIPI_CSI2_VCDT_RX_CH_DT(ch, t)            (((t) & GENMASK(5, 0)) << \
                                                         ((ch) * 8))
#define SUN6I_MIPI_CSI2_RX_PKT_NUM_REG                  0xc

#define SUN6I_MIPI_CSI2_VERSION_REG                     0x3c

#define SUN6I_MIPI_CSI2_CH_CFG_REG                      0x40
#define SUN6I_MIPI_CSI2_CH_INT_EN_REG                   0x50
#define SUN6I_MIPI_CSI2_CH_INT_EN_EOT_ERR               BIT(29)
#define SUN6I_MIPI_CSI2_CH_INT_EN_CHKSUM_ERR            BIT(28)
#define SUN6I_MIPI_CSI2_CH_INT_EN_ECC_WRN               BIT(27)
#define SUN6I_MIPI_CSI2_CH_INT_EN_ECC_ERR               BIT(26)
#define SUN6I_MIPI_CSI2_CH_INT_EN_LINE_SYNC_ERR         BIT(25)
#define SUN6I_MIPI_CSI2_CH_INT_EN_FRAME_SYNC_ERR        BIT(24)
#define SUN6I_MIPI_CSI2_CH_INT_EN_EMB_DATA              BIT(18)
#define SUN6I_MIPI_CSI2_CH_INT_EN_PF                    BIT(17)
#define SUN6I_MIPI_CSI2_CH_INT_EN_PH_UPDATE             BIT(16)
#define SUN6I_MIPI_CSI2_CH_INT_EN_LINE_START_SYNC       BIT(11)
#define SUN6I_MIPI_CSI2_CH_INT_EN_LINE_END_SYNC         BIT(10)
#define SUN6I_MIPI_CSI2_CH_INT_EN_FRAME_START_SYNC      BIT(9)
#define SUN6I_MIPI_CSI2_CH_INT_EN_FRAME_END_SYNC        BIT(8)
#define SUN6I_MIPI_CSI2_CH_INT_EN_FIFO_OVER             BIT(0)

#define SUN6I_MIPI_CSI2_CH_INT_PD_REG                   0x58
#define SUN6I_MIPI_CSI2_CH_INT_PD_CLEAR                 0xff
#define SUN6I_MIPI_CSI2_CH_INT_PD_EOT_ERR               BIT(29)
#define SUN6I_MIPI_CSI2_CH_INT_PD_CHKSUM_ERR            BIT(28)
#define SUN6I_MIPI_CSI2_CH_INT_PD_ECC_WRN               BIT(27)
#define SUN6I_MIPI_CSI2_CH_INT_PD_ECC_ERR               BIT(26)
#define SUN6I_MIPI_CSI2_CH_INT_PD_LINE_SYNC_ERR         BIT(25)
#define SUN6I_MIPI_CSI2_CH_INT_PD_FRAME_SYNC_ERR        BIT(24)
#define SUN6I_MIPI_CSI2_CH_INT_PD_EMB_DATA              BIT(18)
#define SUN6I_MIPI_CSI2_CH_INT_PD_PF                    BIT(17)
#define SUN6I_MIPI_CSI2_CH_INT_PD_PH_UPDATE             BIT(16)
#define SUN6I_MIPI_CSI2_CH_INT_PD_LINE_START_SYNC       BIT(11)
#define SUN6I_MIPI_CSI2_CH_INT_PD_LINE_END_SYNC         BIT(10)
#define SUN6I_MIPI_CSI2_CH_INT_PD_FRAME_START_SYNC      BIT(9)
#define SUN6I_MIPI_CSI2_CH_INT_PD_FRAME_END_SYNC        BIT(8)
#define SUN6I_MIPI_CSI2_CH_INT_PD_FIFO_OVER             BIT(0)

#define SUN6I_MIPI_CSI2_CH_DT_TRIGGER_REG               0x60
#define SUN6I_MIPI_CSI2_CH_CUR_PH_REG                   0x70
#define SUN6I_MIPI_CSI2_CH_ECC_REG                      0x74
#define SUN6I_MIPI_CSI2_CH_CKS_REG                      0x78
#define SUN6I_MIPI_CSI2_CH_FRAME_NUM_REG                0x7c
#define SUN6I_MIPI_CSI2_CH_LINE_NUM_REG                 0x80

#define SUN6I_MIPI_CSI2_CH_OFFSET                       0x100

#define SUN6I_MIPI_CSI2_CH_REG(reg, ch) \
        (SUN6I_MIPI_CSI2_CH_OFFSET * (ch) + (reg))

#endif