159 lines
5.2 KiB
C
159 lines
5.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Copyright (c) 2020 Rockchip Electronics Co. Ltd.
|
|
*
|
|
* Author: Guochun Huang <hero.huang@rock-chips.com>
|
|
*/
|
|
|
|
#ifndef RK628_DSI_H
|
|
#define RK628_DSI_H
|
|
#include "rk628.h"
|
|
|
|
#define DSI0_BASE 0x50000
|
|
#define DSI1_BASE 0x60000
|
|
|
|
#define DSI_VERSION 0x0000
|
|
#define DSI_PWR_UP 0x0004
|
|
#define RESET 0
|
|
#define POWER_UP BIT(0)
|
|
#define DSI_CLKMGR_CFG 0x0008
|
|
#define TO_CLK_DIVISION(x) UPDATE(x, 15, 8)
|
|
#define TX_ESC_CLK_DIVISION(x) UPDATE(x, 7, 0)
|
|
#define DSI_DPI_VCID 0x000c
|
|
#define DPI_VID(x) UPDATE(x, 1, 0)
|
|
#define DSI_DPI_COLOR_CODING 0x0010
|
|
#define LOOSELY18_EN BIT(8)
|
|
#define DPI_COLOR_CODING(x) UPDATE(x, 3, 0)
|
|
#define DSI_DPI_CFG_POL 0x0014
|
|
#define COLORM_ACTIVE_LOW BIT(4)
|
|
#define SHUTD_ACTIVE_LOW BIT(3)
|
|
#define HSYNC_ACTIVE_LOW BIT(2)
|
|
#define VSYNC_ACTIVE_LOW BIT(1)
|
|
#define DATAEN_ACTIVE_LOW BIT(0)
|
|
#define DSI_DPI_LP_CMD_TIM 0x0018
|
|
#define OUTVACT_LPCMD_TIME(x) UPDATE(x, 23, 16)
|
|
#define INVACT_LPCMD_TIME(x) UPDATE(x, 7, 0)
|
|
#define DSI_PCKHDL_CFG 0x002c
|
|
#define CRC_RX_EN BIT(4)
|
|
#define ECC_RX_EN BIT(3)
|
|
#define BTA_EN BIT(2)
|
|
#define EOTP_RX_EN BIT(1)
|
|
#define EOTP_TX_EN BIT(0)
|
|
#define DSI_GEN_VCID 0x0030
|
|
#define DSI_MODE_CFG 0x0034
|
|
#define CMD_VIDEO_MODE(x) UPDATE(x, 0, 0)
|
|
#define DSI_VID_MODE_CFG 0x0038
|
|
#define VPG_EN BIT(16)
|
|
#define LP_CMD_EN BIT(15)
|
|
#define FRAME_BTA_ACK_EN BIT(14)
|
|
#define LP_HFP_EN BIT(13)
|
|
#define LP_HBP_EN BIT(12)
|
|
#define LP_VACT_EN BIT(11)
|
|
#define LP_VFP_EN BIT(10)
|
|
#define LP_VBP_EN BIT(9)
|
|
#define LP_VSA_EN BIT(8)
|
|
#define VID_MODE_TYPE(x) UPDATE(x, 1, 0)
|
|
#define DSI_VID_PKT_SIZE 0x003c
|
|
#define VID_PKT_SIZE(x) UPDATE(x, 13, 0)
|
|
#define DSI_VID_NUM_CHUNKS 0x0040
|
|
#define DSI_VID_NULL_SIZE 0x0044
|
|
#define DSI_VID_HSA_TIME 0x0048
|
|
#define VID_HSA_TIME(x) UPDATE(x, 11, 0)
|
|
#define DSI_VID_HBP_TIME 0x004c
|
|
#define VID_HBP_TIME(x) UPDATE(x, 11, 0)
|
|
#define DSI_VID_HLINE_TIME 0x0050
|
|
#define VID_HLINE_TIME(x) UPDATE(x, 14, 0)
|
|
#define DSI_VID_VSA_LINES 0x0054
|
|
#define VSA_LINES(x) UPDATE(x, 9, 0)
|
|
#define DSI_VID_VBP_LINES 0x0058
|
|
#define VBP_LINES(x) UPDATE(x, 9, 0)
|
|
#define DSI_VID_VFP_LINES 0x005c
|
|
#define VFP_LINES(x) UPDATE(x, 9, 0)
|
|
#define DSI_VID_VACTIVE_LINES 0x0060
|
|
#define V_ACTIVE_LINES(x) UPDATE(x, 13, 0)
|
|
#define DSI_EDPI_CMD_SIZE 0x0064
|
|
#define EDPI_ALLOWED_CMD_SIZE(x) UPDATE(x, 15, 0)
|
|
#define DSI_CMD_MODE_CFG 0x0068
|
|
#define MAX_RD_PKT_SIZE BIT(24)
|
|
#define DCS_LW_TX BIT(19)
|
|
#define DCS_SR_0P_TX BIT(18)
|
|
#define DCS_SW_1P_TX BIT(17)
|
|
#define DCS_SW_0P_TX BIT(16)
|
|
#define GEN_LW_TX BIT(14)
|
|
#define GEN_SR_2P_TX BIT(13)
|
|
#define GEN_SR_1P_TX BIT(12)
|
|
#define GEN_SR_0P_TX BIT(11)
|
|
#define GEN_SW_2P_TX BIT(10)
|
|
#define GEN_SW_1P_TX BIT(9)
|
|
#define GEN_SW_0P_TX BIT(8)
|
|
#define ACK_RQST_EN BIT(1)
|
|
#define TEAR_FX_EN BIT(0)
|
|
#define DSI_GEN_HDR 0x006c
|
|
#define GEN_WC_MSBYTE(x) UPDATE(x, 23, 16)
|
|
#define GEN_WC_LSBYTE(x) UPDATE(x, 15, 8)
|
|
#define GEN_VC(x) UPDATE(x, 7, 6)
|
|
#define GEN_DT(x) UPDATE(x, 5, 0)
|
|
#define DSI_GEN_PLD_DATA 0x0070
|
|
#define DSI_CMD_PKT_STATUS 0x0074
|
|
#define GEN_RD_CMD_BUSY BIT(6)
|
|
#define GEN_PLD_R_FULL BIT(5)
|
|
#define GEN_PLD_R_EMPTY BIT(4)
|
|
#define GEN_PLD_W_FULL BIT(3)
|
|
#define GEN_PLD_W_EMPTY BIT(2)
|
|
#define GEN_CMD_FULL BIT(1)
|
|
#define GEN_CMD_EMPTY BIT(0)
|
|
#define DSI_TO_CNT_CFG 0x0078
|
|
#define HSTX_TO_CNT(x) UPDATE(x, 31, 16)
|
|
#define LPRX_TO_CNT(x) UPDATE(x, 15, 0)
|
|
#define DSI_HS_RD_TO_CNT 0x007c
|
|
#define HS_RD_TO_CNT(x) UPDATE(x, 15, 0)
|
|
#define DSI_LP_RD_TO_CNT 0x0080
|
|
#define LP_RD_TO_CNT(x) UPDATE(x, 15, 0)
|
|
#define DSI_HS_WR_TO_CNT 0x0084
|
|
#define HS_WR_TO_CNT(x) UPDATE(x, 15, 0)
|
|
#define DSI_LP_WR_TO_CNT 0x0088
|
|
#define LP_WR_TO_CNT(x) UPDATE(x, 15, 0)
|
|
#define DSI_BTA_TO_CNT 0x008c
|
|
#define BTA_TO_CNT(x) UPDATE(x, 15, 0)
|
|
#define DSI_SDF_3D 0x0090
|
|
#define DSI_LPCLK_CTRL 0x0094
|
|
#define AUTO_CLKLANE_CTRL BIT(1)
|
|
#define PHY_TXREQUESTCLKHS BIT(0)
|
|
#define DSI_PHY_TMR_LPCLK_CFG 0x0098
|
|
#define PHY_CLKHS2LP_TIME(x) UPDATE(x, 25, 16)
|
|
#define PHY_CLKLP2HS_TIME(x) UPDATE(x, 9, 0)
|
|
#define DSI_PHY_TMR_CFG 0x009c
|
|
#define PHY_HS2LP_TIME(x) UPDATE(x, 31, 24)
|
|
#define PHY_LP2HS_TIME(x) UPDATE(x, 23, 16)
|
|
#define MAX_RD_TIME(x) UPDATE(x, 14, 0)
|
|
#define DSI_PHY_RSTZ 0x00a0
|
|
#define PHY_FORCEPLL BIT(3)
|
|
#define PHY_ENABLECLK BIT(2)
|
|
#define PHY_RSTZ BIT(1)
|
|
#define PHY_SHUTDOWNZ BIT(0)
|
|
#define DSI_PHY_IF_CFG 0x00a4
|
|
#define PHY_STOP_WAIT_TIME(x) UPDATE(x, 15, 8)
|
|
#define N_LANES(x) UPDATE(x, 1, 0)
|
|
#define DSI_PHY_STATUS 0x00b0
|
|
#define PHY_STOPSTATE3LANE BIT(11)
|
|
#define PHY_STOPSTATE2LANE BIT(9)
|
|
#define PHY_STOPSTATE1LANE BIT(7)
|
|
#define PHY_STOPSTATE0LANE BIT(4)
|
|
#define PHY_STOPSTATECLKLANE BIT(2)
|
|
#define PHY_LOCK BIT(0)
|
|
#define PHY_STOPSTATELANE (PHY_STOPSTATE0LANE | \
|
|
PHY_STOPSTATECLKLANE)
|
|
#define DSI_INT_ST0 0x00bc
|
|
#define DSI_INT_ST1 0x00c0
|
|
#define DSI_INT_MSK0 0x00c4
|
|
#define DSI_INT_MSK1 0x00c8
|
|
#define DSI_INT_FORCE0 0x00d8
|
|
#define DSI_INT_FORCE1 0x00dc
|
|
#define DSI_MAX_REGISTER DSI_INT_FORCE1
|
|
|
|
int rk628_dsi_parse(struct rk628 *rk628, struct device_node *dsi_np);
|
|
void rk628_mipi_dsi_pre_enable(struct rk628 *rk628);
|
|
void rk628_mipi_dsi_enable(struct rk628 *rk628);
|
|
void rk628_dsi_disable(struct rk628 *rk628);
|
|
#endif
|