
This change brings msm display driver including sde, dp, dsi, rotator, dsi pll and dp pll from base 4.19 kernel project. It is first source code snapshot from base kernel project. Change-Id: Iec864c064ce5ea04e170f24414c728684002f284 Signed-off-by: Narendra Muppalla <NarendraM@codeaurora.org>
226 строки
8.2 KiB
C
226 строки
8.2 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
|
|
*/
|
|
|
|
#define pr_fmt(fmt) "dsi-hw:" fmt
|
|
#include <linux/delay.h>
|
|
#include <linux/iopoll.h>
|
|
|
|
#include "dsi_ctrl_hw.h"
|
|
#include "dsi_ctrl_reg.h"
|
|
#include "dsi_hw.h"
|
|
|
|
void dsi_ctrl_hw_20_setup_lane_map(struct dsi_ctrl_hw *ctrl,
|
|
struct dsi_lane_map *lane_map)
|
|
{
|
|
u32 reg_value = lane_map->lane_map_v2[DSI_LOGICAL_LANE_0] |
|
|
(lane_map->lane_map_v2[DSI_LOGICAL_LANE_1] << 4) |
|
|
(lane_map->lane_map_v2[DSI_LOGICAL_LANE_2] << 8) |
|
|
(lane_map->lane_map_v2[DSI_LOGICAL_LANE_3] << 12);
|
|
|
|
DSI_W32(ctrl, DSI_LANE_SWAP_CTRL, reg_value);
|
|
|
|
pr_debug("[DSI_%d] Lane swap setup complete\n", ctrl->index);
|
|
}
|
|
|
|
int dsi_ctrl_hw_20_wait_for_lane_idle(struct dsi_ctrl_hw *ctrl,
|
|
u32 lanes)
|
|
{
|
|
int rc = 0, val = 0;
|
|
u32 fifo_empty_mask = 0;
|
|
u32 const sleep_us = 10;
|
|
u32 const timeout_us = 100;
|
|
|
|
if (lanes & DSI_DATA_LANE_0)
|
|
fifo_empty_mask |= (BIT(12) | BIT(16));
|
|
|
|
if (lanes & DSI_DATA_LANE_1)
|
|
fifo_empty_mask |= BIT(20);
|
|
|
|
if (lanes & DSI_DATA_LANE_2)
|
|
fifo_empty_mask |= BIT(24);
|
|
|
|
if (lanes & DSI_DATA_LANE_3)
|
|
fifo_empty_mask |= BIT(28);
|
|
|
|
pr_debug("%s: polling for fifo empty, mask=0x%08x\n", __func__,
|
|
fifo_empty_mask);
|
|
rc = readl_poll_timeout(ctrl->base + DSI_FIFO_STATUS, val,
|
|
(val & fifo_empty_mask), sleep_us, timeout_us);
|
|
if (rc) {
|
|
pr_err("%s: fifo not empty, FIFO_STATUS=0x%08x\n",
|
|
__func__, val);
|
|
goto error;
|
|
}
|
|
|
|
error:
|
|
return rc;
|
|
}
|
|
|
|
#define DUMP_REG_VALUE(off) "\t%-30s: 0x%08x\n", #off, DSI_R32(ctrl, off)
|
|
ssize_t dsi_ctrl_hw_20_reg_dump_to_buffer(struct dsi_ctrl_hw *ctrl,
|
|
char *buf,
|
|
u32 size)
|
|
{
|
|
u32 len = 0;
|
|
|
|
len += snprintf((buf + len), (size - len), "CONFIGURATION REGS:\n");
|
|
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_HW_VERSION));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_STATUS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_FIFO_STATUS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_SYNC_DATATYPE));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_PIXEL_DATATYPE));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_BLANKING_DATATYPE));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_DATA_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_ACTIVE_H));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_ACTIVE_V));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_TOTAL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_HSYNC));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_VSYNC));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VIDEO_MODE_VSYNC_VPOS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_DMA_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_DCS_CMD_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_DMA_CMD_OFFSET));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_DMA_CMD_LENGTH));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_DMA_FIFO_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_DMA_NULL_PACKET_DATA));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_STREAM0_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_STREAM0_TOTAL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_STREAM1_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_STREAM1_TOTAL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_ACK_ERR_STATUS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RDBK_DATA0));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RDBK_DATA1));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RDBK_DATA2));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RDBK_DATA3));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RDBK_DATATYPE0));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RDBK_DATATYPE1));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_TRIG_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_EXT_MUX));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_EXT_MUX_TE_PULSE_DETECT_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_CMD_MODE_DMA_SW_TRIGGER));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_CMD_MODE_MDP_SW_TRIGGER));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_CMD_MODE_BTA_SW_TRIGGER));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RESET_SW_TRIGGER));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_MISR_CMD_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_MISR_VIDEO_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_LANE_STATUS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_LANE_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_LANE_SWAP_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_DLN0_PHY_ERR));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_LP_TIMER_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_HS_TIMER_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_TIMEOUT_STATUS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_CLKOUT_TIMING_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_EOT_PACKET));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_EOT_PACKET_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_GENERIC_ESC_TX_TRIGGER));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_ERR_INT_MASK0));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_INT_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_SOFT_RESET));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_CLK_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_CLK_STATUS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_PHY_SW_RESET));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_AXI2AHB_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_MISR_CMD_MDP0_32BIT));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_MISR_CMD_MDP1_32BIT));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_MISR_VIDEO_32BIT));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_CTRL2));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_STREAM2_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_COMMAND_MODE_MDP_STREAM2_TOTAL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VBIF_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_AES_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_RDBK_DATA_CTRL));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_TEST_PATTERN_GEN_CMD_DMA_INIT_VAL2));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_TPG_DMA_FIFO_STATUS));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_TPG_DMA_FIFO_WRITE_TRIGGER));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_DSI_TIMING_FLUSH));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_DSI_TIMING_DB_MODE));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_TPG_DMA_FIFO_RESET));
|
|
len += snprintf((buf + len), (size - len),
|
|
DUMP_REG_VALUE(DSI_VERSION));
|
|
|
|
pr_err("LLENGTH = %d\n", len);
|
|
return len;
|
|
}
|