Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2016 Linaro Limited.
 * Copyright (c) 2014-2016 Hisilicon Limited.
 */

#ifndef __DW_DSI_REG_H__
#define __DW_DSI_REG_H__

#define MASK(x)				(BIT(x) - 1)
#define DEFAULT_MAX_TX_ESC_CLK	(10 * 1000000UL)	//for hikey960
/*
 * regs
 */
#define PWR_UP                  0x04  /* Core power-up */
#define RESET                   0
#define POWERUP                 BIT(0)
#define PHY_IF_CFG              0xA4  /* D-PHY interface configuration */
#define CLKMGR_CFG              0x08  /* the internal clock dividers */
#define PHY_RSTZ                0xA0  /* D-PHY reset control */
#define PHY_ENABLECLK           BIT(2)
#define PHY_UNRSTZ              BIT(1)
#define PHY_UNSHUTDOWNZ         BIT(0)
#define PHY_TST_CTRL0           0xB4  /* D-PHY test interface control 0 */
#define PHY_TST_CTRL1           0xB8  /* D-PHY test interface control 1 */
#define CLK_TLPX                0x10
#define CLK_THS_PREPARE         0x11
#define CLK_THS_ZERO            0x12
#define CLK_THS_TRAIL           0x13
#define CLK_TWAKEUP             0x14
#define DATA_TLPX(x)            (0x20 + ((x) << 4))
#define DATA_THS_PREPARE(x)     (0x21 + ((x) << 4))
#define DATA_THS_ZERO(x)        (0x22 + ((x) << 4))
#define DATA_THS_TRAIL(x)       (0x23 + ((x) << 4))
#define DATA_TTA_GO(x)          (0x24 + ((x) << 4))
#define DATA_TTA_GET(x)         (0x25 + ((x) << 4))
#define DATA_TWAKEUP(x)         (0x26 + ((x) << 4))
#define PHY_CFG_I               0x60
#define PHY_CFG_PLL_I           0x63
#define PHY_CFG_PLL_II          0x64
#define PHY_CFG_PLL_III         0x65
#define PHY_CFG_PLL_IV          0x66
#define PHY_CFG_PLL_V           0x67
#define DPI_COLOR_CODING        0x10  /* DPI color coding */
#define DPI_CFG_POL             0x14  /* DPI polarity configuration */
#define VID_HSA_TIME            0x48  /* Horizontal Sync Active time */
#define VID_HBP_TIME            0x4C  /* Horizontal Back Porch time */
#define VID_HLINE_TIME          0x50  /* Line time */
#define VID_VSA_LINES           0x54  /* Vertical Sync Active period */
#define VID_VBP_LINES           0x58  /* Vertical Back Porch period */
#define VID_VFP_LINES           0x5C  /* Vertical Front Porch period */
#define VID_VACTIVE_LINES       0x60  /* Vertical resolution */
#define VID_PKT_SIZE            0x3C  /* Video packet size */
#define VID_MODE_CFG            0x38  /* Video mode configuration */
/***************************for hikey960***********************************/
#define GEN_HDR			0x6c
#define GEN_HDATA(data)		(((data) & 0xffff) << 8)
#define GEN_HDATA_MASK		(0xffff << 8)
#define GEN_HTYPE(type)		(((type) & 0xff) << 0)
#define GEN_HTYPE_MASK		0xff
#define GEN_PLD_DATA		0x70
#define CMD_PKT_STATUS		0x74
#define GEN_CMD_EMPTY		BIT(0)
#define GEN_CMD_FULL		BIT(1)
#define GEN_PLD_W_EMPTY		BIT(2)
#define GEN_PLD_W_FULL		BIT(3)
#define GEN_PLD_R_EMPTY		BIT(4)
#define GEN_PLD_R_FULL		BIT(5)
#define GEN_RD_CMD_BUSY		BIT(6)
#define CMD_MODE_CFG		0x68
#define MAX_RD_PKT_SIZE_LP	BIT(24)
#define DCS_LW_TX_LP		BIT(19)
#define DCS_SR_0P_TX_LP		BIT(18)
#define DCS_SW_1P_TX_LP		BIT(17)
#define DCS_SW_0P_TX_LP		BIT(16)
#define GEN_LW_TX_LP		BIT(14)
#define GEN_SR_2P_TX_LP		BIT(13)
#define GEN_SR_1P_TX_LP		BIT(12)
#define GEN_SR_0P_TX_LP		BIT(11)
#define GEN_SW_2P_TX_LP		BIT(10)
#define GEN_SW_1P_TX_LP		BIT(9)
#define GEN_SW_0P_TX_LP		BIT(8)
#define EN_ACK_RQST		BIT(1)
#define EN_TEAR_FX		BIT(0)
#define CMD_PKT_STATUS_TIMEOUT_US	20000
#define CMD_MODE_ALL_LP		(MAX_RD_PKT_SIZE_LP | \
				 DCS_LW_TX_LP | \
				 DCS_SR_0P_TX_LP | \
				 DCS_SW_1P_TX_LP | \
				 DCS_SW_0P_TX_LP | \
				 GEN_LW_TX_LP | \
				 GEN_SR_2P_TX_LP | \
				 GEN_SR_1P_TX_LP | \
				 GEN_SR_0P_TX_LP | \
				 GEN_SW_2P_TX_LP | \
				 GEN_SW_1P_TX_LP | \
				 GEN_SW_0P_TX_LP)
/***************************for hikey960***********************************/
#define PHY_TMR_CFG             0x9C  /* Data lanes timing configuration */
#define BTA_TO_CNT              0x8C  /* Response timeout definition */
#define PHY_TMR_LPCLK_CFG       0x98  /* clock lane timing configuration */
#define CLK_DATA_TMR_CFG        0xCC
#define LPCLK_CTRL              0x94  /* Low-power in clock lane */
#define PHY_TXREQUESTCLKHS      BIT(0)
#define MODE_CFG                0x34  /* Video or Command mode selection */
#define PHY_STATUS              0xB0  /* D-PHY PPI status interface */

#define	PHY_STOP_WAIT_TIME      0x30

/*
 * regs relevant enum
 */
enum dpi_color_coding {
	DSI_24BITS_1 = 5,
};

enum dsi_video_mode_type {
	DSI_NON_BURST_SYNC_PULSES = 0,
	DSI_NON_BURST_SYNC_EVENTS,
	DSI_BURST_SYNC_PULSES_1,
	DSI_BURST_SYNC_PULSES_2
};

enum dsi_work_mode {
	DSI_VIDEO_MODE = 0,
	DSI_COMMAND_MODE
};

/*
 * Register Write/Read Helper functions
 */
static inline void dw_update_bits(void __iomem *addr, u32 bit_start,
				  u32 mask, u32 val)
{
	u32 tmp, orig;

	orig = readl(addr);
	tmp = orig & ~(mask << bit_start);
	tmp |= (val & mask) << bit_start;
	writel(tmp, addr);
}

#endif /* __DW_DRM_DSI_H__ */