blob: 09b1732d7eeaf4e86d16e61a7683784f7188b3df [file] [log] [blame]
/*
* Copyright (c) 2016, Intel Corporation. All rights reserved.
*
* Author: Archana Vohra <archana.vohra@intel.com>
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* Neither the name of Intel nor the names of its contributors may be used
* to endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <linux/errno.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/string.h>
#include "mipicsi_device.h"
#include "mipicsi_util.h"
#include "mipicsi_debug.h"
#include "mipicsi_rx_dphy.h"
#include "mipicsi_tx_dphy.h"
#include <soc/mnh/mnh-hwio-mipi-rx.h>
#include <soc/mnh/mnh-hwio-mipi-tx.h>
uint16_t valid_rx_ctl_offsets[] = {
HWIO_MIPI_RX_VERSION_REGOFF,
HWIO_MIPI_RX_N_LANES_REGOFF,
HWIO_MIPI_RX_CSI2_RESETN_REGOFF,
HWIO_MIPI_RX_INT_ST_MAIN_REGOFF,
HWIO_MIPI_RX_DATA_IDS_1_REGOFF,
HWIO_MIPI_RX_DATA_IDS_2_REGOFF,
HWIO_MIPI_RX_PHY_SHUTDOWNZ_REGOFF,
HWIO_MIPI_RX_DPHY_RSTZ_REGOFF,
HWIO_MIPI_RX_PHY_RX_REGOFF,
HWIO_MIPI_RX_PHY_STOPSTATE_REGOFF,
HWIO_MIPI_RX_PHY_TEST_CTRL0_REGOFF,
HWIO_MIPI_RX_PHY_TEST_CTRL1_REGOFF,
HWIO_MIPI_RX_PHY_CAL_REGOFF,
HWIO_MIPI_RX_INT_ST_PHY_FATAL_REGOFF,
HWIO_MIPI_RX_INT_MSK_PHY_FATAL_REGOFF,
HWIO_MIPI_RX_INT_FORCE_PHY_FATAL_REGOFF,
HWIO_MIPI_RX_INT_ST_PKT_FATAL_REGOFF,
HWIO_MIPI_RX_INT_MSK_PKT_FATAL_REGOFF,
HWIO_MIPI_RX_INT_FORCE_PKT_FATAL_REGOFF,
HWIO_MIPI_RX_INT_ST_FRAME_FATAL_REGOFF,
HWIO_MIPI_RX_INT_MSK_FRAME_FATAL_REGOFF,
HWIO_MIPI_RX_INT_FORCE_FRAME_FATAL_REGOFF,
HWIO_MIPI_RX_INT_ST_PHY_REGOFF,
HWIO_MIPI_RX_INT_MSK_PHY_REGOFF,
HWIO_MIPI_RX_INT_FORCE_PHY_REGOFF,
HWIO_MIPI_RX_INT_ST_PKT_REGOFF,
HWIO_MIPI_RX_INT_MSK_PKT_REGOFF,
HWIO_MIPI_RX_INT_FORCE_PKT_REGOFF,
HWIO_MIPI_RX_INT_ST_LINE_REGOFF,
HWIO_MIPI_RX_INT_MSK_LINE_REGOFF,
HWIO_MIPI_RX_INT_FORCE_LINE_REGOFF
};
uint16_t valid_tx_ctl_offsets[] = {
HWIO_MIPI_TX_VERSION_REGOFF,
HWIO_MIPI_TX_CSI2_RESETN_REGOFF,
HWIO_MIPI_TX_INT_ST_MAIN_REGOFF,
HWIO_MIPI_TX_INT_ST_VPG_REGOFF,
HWIO_MIPI_TX_INT_ST_IDI_REGOFF,
HWIO_MIPI_TX_INT_ST_PHY_REGOFF,
HWIO_MIPI_TX_INT_MASK_N_VPG_REGOFF,
HWIO_MIPI_TX_INT_FORCE_VPG_REGOFF,
HWIO_MIPI_TX_INT_MASK_N_IDI_REGOFF,
HWIO_MIPI_TX_INT_FORCE_IDI_REGOFF,
HWIO_MIPI_TX_INT_MASK_N_PHY_REGOFF,
HWIO_MIPI_TX_INT_FORCE_PHY_REGOFF,
HWIO_MIPI_TX_VPG_CTRL_REGOFF,
HWIO_MIPI_TX_VPG_STATUS_REGOFF,
HWIO_MIPI_TX_VPG_MODE_CFG_REGOFF,
HWIO_MIPI_TX_VPG_PKT_CFG_REGOFF,
HWIO_MIPI_TX_VPG_PKT_SIZE_REGOFF,
HWIO_MIPI_TX_VPG_HSA_TIME_REGOFF,
HWIO_MIPI_TX_VPG_HBP_TIME_REGOFF,
HWIO_MIPI_TX_VPG_HLINE_TIME_REGOFF,
HWIO_MIPI_TX_VPG_VSA_LINES_REGOFF,
HWIO_MIPI_TX_VPG_VBP_LINES_REGOFF,
HWIO_MIPI_TX_VPG_VFP_LINES_REGOFF,
HWIO_MIPI_TX_VPG_ACT_LINES_REGOFF,
HWIO_MIPI_TX_VPG_MAX_FRAME_NUM_REGOFF,
HWIO_MIPI_TX_VPG_START_LINE_NUM_REGOFF,
HWIO_MIPI_TX_VPG_STEP_LINE_NUM_REGOFF,
HWIO_MIPI_TX_PHY_RSTZ_REGOFF,
HWIO_MIPI_TX_PHY_IF_CFG_REGOFF,
HWIO_MIPI_TX_LPCLK_CTRL_REGOFF,
HWIO_MIPI_TX_PHY_ULPS_CTRL_REGOFF,
HWIO_MIPI_TX_CLKMGR_CFG_REGOFF,
HWIO_MIPI_TX_PHY_TX_TRIGGERS_REGOFF,
HWIO_MIPI_TX_PHY_CAL_REGOFF,
HWIO_MIPI_TX_TO_CNT_CFG_REGOFF,
HWIO_MIPI_TX_PHY_STATUS_REGOFF,
HWIO_MIPI_TX_PHY0_TST_CTRL0_REGOFF,
HWIO_MIPI_TX_PHY0_TST_CTRL1_REGOFF
};
uint16_t valid_rx_g3dphy_offsets[] = {
R_DPHY_TESTCODE_X_REG,
R_DPHY_RDWR_RX_SYS_0,
R_DPHY_RDWR_RX_SYS_1,
R_DPHY_RDWR_RX_SYS_2,
R_DPHY_RDWR_RX_SYS_3,
R_DPHY_RDWR_RX_SYS_4,
R_DPHY_RDWR_RX_SYS_5,
R_DPHY_RDWR_RX_SYS_6,
R_DPHY_RDWR_RX_SYS_7,
R_DPHY_RDWR_RX_SYS_8,
R_DPHY_RDWR_RX_SYS_9,
R_DPHY_RD_RX_SYS_0,
R_DPHY_RD_RX_SYS_1,
R_DPHY_RD_RX_SYS_2,
R_DPHY_RD_RX_SYS_3,
R_DPHY_RD_CONT_DATA_0,
R_DPHY_RD_CONT_DATA_1,
R_DPHY_RD_RX_SYS_4,
R_DPHY_RDWR_RX_SYS_DDL_0,
R_DPHY_RDWR_RX_SYS_DDL_1,
R_DPHY_RDWR_RX_SYS_DDL_2,
R_DPHY_RDWR_RX_SYSTIMERS_0,
R_DPHY_RDWR_RX_SYSTIMERS_1,
R_DPHY_RDWR_RX_SYSTIMERS_2,
R_DPHY_RDWR_RX_SYSTIMERS_3,
R_DPHY_RDWR_RX_SYSTIMERS_4,
R_DPHY_RDWR_RX_SYSTIMERS_5,
R_DPHY_RDWR_RX_SYSTIMERS_6,
R_DPHY_RDWR_RX_SYSTIMERS_7,
R_DPHY_RDWR_RX_SYSTIMERS_8,
R_DPHY_RDWR_RX_SYSTIMERS_9,
R_DPHY_RDWR_RX_SYSTIMERS_10,
R_DPHY_RDWR_RX_SYSTIMERS_11,
R_DPHY_RD_RX_SYSTIMERS_0,
R_DPHY_RD_RX_RX_STARTUP_OBS_0,
R_DPHY_RD_RX_RX_STARTUP_OBS_1,
R_DPHY_RD_RX_RX_STARTUP_OBS_2,
R_DPHY_RD_RX_RX_STARTUP_OBS_3,
R_DPHY_RD_RX_RX_STARTUP_OBS_4,
R_DPHY_RDWR_RX_RX_STARTUP_OVR_0,
R_DPHY_RDWR_RX_RX_STARTUP_OVR_1,
R_DPHY_RDWR_RX_RX_STARTUP_OVR_2,
R_DPHY_RDWR_RX_RX_STARTUP_OVR_3,
R_DPHY_RDWR_RX_RX_STARTUP_OVR_4,
R_DPHY_RDWR_RX_RX_STARTUP_OVR_5,
R_DPHY_RDWR_RX_RX_STARTUP_OVR_17,
R_DPHY_RDWR_RX_BIST_0,
R_DPHY_RDWR_RX_BIST_1,
R_DPHY_RDWR_RX_BIST_2,
R_DPHY_RDWR_RX_BIST_3,
R_DPHY_RDWR_RX_BIST_4,
R_DPHY_RDWR_RX_BIST_OVR_0,
R_DPHY_RDWR_RX_BIST_OVR_1,
R_DPHY_RDWR_RX_BIST_OVR_2,
R_DPHY_RDWR_RX_BIST_OVR_3,
R_DPHY_RDWR_RX_BIST_PIPE_TIMER,
R_DPHY_RD_RX_BIST_0,
R_DPHY_RD_RX_BIST_1,
R_DPHY_RD_RX_BIST_2,
R_DPHY_RD_RX_BIST_3,
R_DPHY_RD_RX_BIST_13,
R_DPHY_RDWR_RX_RX_DUAL_PHY_0,
R_DPHY_RD_RX_DUAL_PHY_0,
R_DPHY_RD_RX_DUAL_PHY_1,
R_DPHY_RD_RX_DUAL_PHY_2,
R_DPHY_RDWR_RX_PLL_0,
R_DPHY_RDWR_RX_PLL_1,
R_DPHY_RDWR_RX_PLL_2,
R_DPHY_RDWR_RX_PLL_3,
R_DPHY_RDWR_RX_PLL_4,
R_DPHY_RDWR_RX_PLL_5,
R_DPHY_RDWR_RX_PLL_6,
R_DPHY_RDWR_RX_PLL_7,
R_DPHY_RDWR_RX_PLL_8,
R_DPHY_RDWR_RX_PLL_9,
R_DPHY_RDWR_RX_PLL_10,
R_DPHY_RDWR_RX_PLL_11,
R_DPHY_RDWR_RX_PLL_12,
R_DPHY_RDWR_RX_PLL_13,
R_DPHY_RDWR_RX_PLL_14,
R_DPHY_RDWR_RX_PLL_15,
R_DPHY_RDWR_RX_PLL_16,
R_DPHY_RDWR_RX_PLL_17,
R_DPHY_RDWR_RX_PLL_18,
R_DPHY_RDWR_RX_PLL_19,
R_DPHY_RDWR_RX_PLL_20,
R_DPHY_RDWR_RX_PLL_21,
R_DPHY_RDWR_RX_PLL_22,
R_DPHY_RDWR_RX_PLL_23,
R_DPHY_RDWR_RX_PLL_24,
R_DPHY_RDWR_RX_PLL_25,
R_DPHY_RDWR_RX_PLL_26,
R_DPHY_RDWR_RX_PLL_27,
R_DPHY_RDWR_RX_PLL_28,
R_DPHY_RDWR_RX_PLL_29,
R_DPHY_RDWR_RX_PLL_30,
R_DPHY_RDWR_RX_PLL_31,
R_DPHY_RD_RX_PLL_0,
R_DPHY_RD_RX_PLL_1,
R_DPHY_RD_RX_PLL_2,
R_DPHY_RD_RX_PLL_3,
R_DPHY_RD_RX_PLL_4,
R_DPHY_RDWR_RX_CB_0,
R_DPHY_RDWR_RX_CB_1,
R_DPHY_RDWR_RX_CB_2,
R_DPHY_RDWR_RX_CB_3,
R_DPHY_RDWR_RX_CB_4,
R_DPHY_RDWR_RX_CB_5,
R_DPHY_RDWR_RX_CB_6,
R_DPHY_RD_RX_ANA_CB_0,
R_DPHY_RDWR_RX_DAC_0,
R_DPHY_RDWR_RX_DAC_1,
R_DPHY_RDWR_RX_DAC_2,
R_DPHY_RDWR_RX_DAC_3,
R_DPHY_RD_RX_DAC_0,
R_DPHY_RD_RX_DAC_1,
R_DPHY_RD_RX_DAC_2,
R_DPHY_RDWR_RX_TERM_CAL_0,
R_DPHY_RDWR_RX_TERM_CAL_1,
R_DPHY_RDWR_RX_TERM_CAL_2,
R_DPHY_RD_RX_TERM_CAL_0,
R_DPHY_RD_RX_TERM_CAL_1,
R_DPHY_RD_RX_TERM_CAL_2,
R_DPHY_RDWR_RX_NOREXTTUNE_0,
R_DPHY_RDWR_RX_NOREXTTUNE_1,
R_DPHY_RDWR_RX_NOREXTTUNE_2,
R_DPHY_RDWR_RX_NOREXTTUNE_3,
R_DPHY_RDWR_RX_NOREXTTUNE_4,
R_DPHY_RDWR_RX_NOREXTTUNE_5,
R_DPHY_RDWR_RX_NOREXTTUNE_6,
R_DPHY_RD_RX_NOREXTTUNE_0,
R_DPHY_RD_RX_NOREXTTUNE_1,
R_DPHY_RD_RX_NOREXTTUNE_2,
R_DPHY_RD_RX_NOREXTTUNE_3,
R_DPHY_RD_RX_NOREXTTUNE_4,
R_DPHY_RDWR_RX_CLKLANE_LANE_0,
R_DPHY_RDWR_RX_CLKLANE_LANE_1,
R_DPHY_RDWR_RX_CLKLANE_LANE_3,
R_DPHY_RDWR_RX_CLKLANE_LANE_4,
R_DPHY_RDWR_RX_CLKLANE_LANE_6,
R_DPHY_RDWR_RX_CLKLANE_LANE_7,
R_DPHY_RDWR_RX_CLKLANE_LANE_8,
R_DPHY_RD_RX_CLKLANE_LANE_0,
R_DPHY_RD_RX_CLKLANE_LANE_1,
R_DPHY_RD_RX_CLKLANE_LANE_2,
R_DPHY_RD_RX_CLKLANE_LANE_3,
R_DPHY_RDWR_RX_CLKLANE_OFFSET_CAL_0,
R_DPHY_RDWR_RX_CLKLANE_OFFSET_CAL_1,
R_DPHY_RD_RX_CLKLANE_OFFSET_CAL_0,
R_DPHY_RD_RX_CLKLANE_OFFSET_CAL_1,
R_DPHY_RD_RX_CLKLANE_OFFSET_CAL_2,
R_DPHY_RDWR_RX_LANE0_LANE_0,
R_DPHY_RDWR_RX_LANE0_LANE_1,
R_DPHY_RDWR_RX_LANE0_LANE_3,
R_DPHY_RDWR_RX_LANE0_LANE_4,
R_DPHY_RDWR_RX_LANE0_LANE_5,
R_DPHY_RDWR_RX_LANE0_LANE_6,
R_DPHY_RDWR_RX_LANE0_LANE_7,
R_DPHY_RDWR_RX_LANE0_LANE_8,
R_DPHY_RDWR_RX_LANE0_LANE_9,
R_DPHY_RDWR_RX_LANE0_LANE_12,
R_DPHY_RD_RX_LANE0_LANE_0,
R_DPHY_RD_RX_LANE0_LANE_1,
R_DPHY_RD_RX_LANE0_LANE_2,
R_DPHY_RD_RX_LANE0_LANE_3,
R_DPHY_RD_RX_LANE0_LANE_4,
R_DPHY_RD_RX_LANE0_LANE_5,
R_DPHY_RD_RX_LANE0_LANE_6,
R_DPHY_RD_RX_LANE0_LANE_7,
R_DPHY_RD_RX_LANE0_LANE_8,
R_DPHY_RD_RX_LANE0_LANE_9,
R_DPHY_RD_RX_LANE0_AFE_OBS_2,
R_DPHY_RD_TX_LANE0_AFE_OBS_3,
R_DPHY_RDWR_RX_LANE0_OFFSET_CAL_0,
R_DPHY_RDWR_RX_LANE0_OFFSET_CAL_1,
R_DPHY_RDWR_RX_LANE0_OFFSET_CAL_2,
R_DPHY_RDWR_RX_LANE0_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE0_OFFSET_CAL_0,
R_DPHY_RD_RX_LANE0_OFFSET_CAL_1,
R_DPHY_RD_RX_LANE0_OFFSET_CAL_2,
R_DPHY_RD_RX_LANE0_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE0_DDL_0,
R_DPHY_RD_RX_LANE0_DDL_1,
R_DPHY_RD_RX_LANE0_DDL_2,
R_DPHY_RD_RX_LANE0_DDL_3,
R_DPHY_RD_RX_LANE0_DDL_4,
R_DPHY_RD_RX_LANE0_DDL_5,
R_DPHY_RD_RX_LANE0_DDL_6,
R_DPHY_RD_RX_LANE0_DDL_7,
R_DPHY_RDWR_RX_LANE0_DDL_0,
R_DPHY_RDWR_RX_LANE0_DDL_1,
R_DPHY_RDWR_RX_LANE0_DDL_2,
R_DPHY_RDWR_RX_LANE0_DDL_3,
R_DPHY_RDWR_RX_LANE0_DDL_4,
R_DPHY_RDWR_RX_LANE0_DDL_5,
R_DPHY_RDWR_RX_LANE0_DDL_6,
R_DPHY_RDWR_RX_LANE1_LANE_0,
R_DPHY_RDWR_RX_LANE1_LANE_1,
R_DPHY_RDWR_RX_LANE1_LANE_3,
R_DPHY_RDWR_RX_LANE1_LANE_4,
R_DPHY_RDWR_RX_LANE1_LANE_6,
R_DPHY_RDWR_RX_LANE1_LANE_7,
R_DPHY_RDWR_RX_LANE1_LANE_8,
R_DPHY_RDWR_RX_LANE1_LANE_9,
R_DPHY_RDWR_RX_LANE1_LANE_10,
R_DPHY_RDWR_RX_LANE1_LANE_11,
R_DPHY_RDWR_RX_LANE1_LANE_12,
R_DPHY_RD_RX_LANE1_LANE_0,
R_DPHY_RD_RX_LANE1_LANE_2,
R_DPHY_RD_RX_LANE1_LANE_3,
R_DPHY_RD_RX_LANE1_LANE_4,
R_DPHY_RD_RX_LANE1_LANE_5,
R_DPHY_RD_RX_LANE1_LANE_6,
R_DPHY_RD_RX_LANE1_LANE_7,
R_DPHY_RD_RX_LANE1_LANE_8,
R_DPHY_RD_RX_LANE1_LANE_9,
R_DPHY_RD_RX_LANE1_LANE_10,
R_DPHY_RDWR_RX_LANE1_OFFSET_CAL_0,
R_DPHY_RDWR_RX_LANE1_OFFSET_CAL_1,
R_DPHY_RDWR_RX_LANE1_OFFSET_CAL_2,
R_DPHY_RDWR_RX_LANE1_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE1_OFFSET_CAL_0,
R_DPHY_RD_RX_LANE1_OFFSET_CAL_1,
R_DPHY_RD_RX_LANE1_OFFSET_CAL_2,
R_DPHY_RD_RX_LANE1_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE1_DDL_0,
R_DPHY_RD_RX_LANE1_DDL_1,
R_DPHY_RD_RX_LANE1_DDL_2,
R_DPHY_RD_RX_LANE1_DDL_3,
R_DPHY_RD_RX_LANE1_DDL_4,
R_DPHY_RD_RX_LANE1_DDL_5,
R_DPHY_RDWR_RX_LANE1_DDL_0,
R_DPHY_RDWR_RX_LANE1_DDL_1,
R_DPHY_RDWR_RX_LANE1_DDL_4,
R_DPHY_RDWR_RX_LANE1_DDL_5,
R_DPHY_RDWR_RX_LANE1_DDL_6,
R_DPHY_RDWR_RX_LANE2_LANE_0,
R_DPHY_RDWR_RX_LANE2_LANE_1,
R_DPHY_RDWR_RX_LANE2_LANE_3,
R_DPHY_RDWR_RX_LANE2_LANE_4,
R_DPHY_RDWR_RX_LANE2_LANE_6,
R_DPHY_RDWR_RX_LANE2_LANE_7,
R_DPHY_RDWR_RX_LANE2_LANE_8,
R_DPHY_RDWR_RX_LANE2_LANE_9,
R_DPHY_RDWR_RX_LANE2_LANE_10,
R_DPHY_RDWR_RX_LANE2_LANE_11,
R_DPHY_RDWR_RX_LANE2_LANE_12,
R_DPHY_RD_RX_LANE2_LANE_0,
R_DPHY_RD_RX_LANE2_LANE_2,
R_DPHY_RD_RX_LANE2_LANE_3,
R_DPHY_RD_RX_LANE2_LANE_4,
R_DPHY_RD_RX_LANE2_LANE_5,
R_DPHY_RD_RX_LANE2_LANE_6,
R_DPHY_RD_RX_LANE2_LANE_7,
R_DPHY_RD_RX_LANE2_LANE_8,
R_DPHY_RD_RX_LANE2_LANE_9,
R_DPHY_RD_RX_LANE2_LANE_10,
R_DPHY_RDWR_RX_LANE2_OFFSET_CAL_0,
R_DPHY_RDWR_RX_LANE2_OFFSET_CAL_1,
R_DPHY_RDWR_RX_LANE2_OFFSET_CAL_2,
R_DPHY_RDWR_RX_LANE2_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE2_OFFSET_CAL_0,
R_DPHY_RD_RX_LANE2_OFFSET_CAL_1,
R_DPHY_RD_RX_LANE2_OFFSET_CAL_2,
R_DPHY_RD_RX_LANE2_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE2_DDL_0,
R_DPHY_RD_RX_LANE2_DDL_1,
R_DPHY_RD_RX_LANE2_DDL_2,
R_DPHY_RD_RX_LANE2_DDL_3,
R_DPHY_RD_RX_LANE2_DDL_4,
R_DPHY_RD_RX_LANE2_DDL_5,
R_DPHY_RDWR_RX_LANE2_DDL_0,
R_DPHY_RDWR_RX_LANE2_DDL_1,
R_DPHY_RDWR_RX_LANE2_DDL_4,
R_DPHY_RDWR_RX_LANE2_DDL_5,
R_DPHY_RDWR_RX_LANE2_DDL_6,
R_DPHY_RDWR_RX_LANE3_LANE_0,
R_DPHY_RDWR_RX_LANE3_LANE_1,
R_DPHY_RDWR_RX_LANE3_LANE_3,
R_DPHY_RDWR_RX_LANE3_LANE_4,
R_DPHY_RDWR_RX_LANE3_LANE_6,
R_DPHY_RDWR_RX_LANE3_LANE_7,
R_DPHY_RDWR_RX_LANE3_LANE_8,
R_DPHY_RDWR_RX_LANE3_LANE_9,
R_DPHY_RDWR_RX_LANE3_LANE_10,
R_DPHY_RDWR_RX_LANE3_LANE_11,
R_DPHY_RDWR_RX_LANE3_LANE_12,
R_DPHY_RD_RX_LANE3_LANE_0,
R_DPHY_RD_RX_LANE3_LANE_2,
R_DPHY_RD_RX_LANE3_LANE_3,
R_DPHY_RD_RX_LANE3_LANE_4,
R_DPHY_RD_RX_LANE3_LANE_5,
R_DPHY_RD_RX_LANE3_LANE_6,
R_DPHY_RD_RX_LANE3_LANE_7,
R_DPHY_RD_RX_LANE3_LANE_8,
R_DPHY_RD_RX_LANE3_LANE_9,
R_DPHY_RD_RX_LANE3_LANE_10,
R_DPHY_RDWR_RX_LANE3_OFFSET_CAL_0,
R_DPHY_RDWR_RX_LANE3_OFFSET_CAL_1,
R_DPHY_RDWR_RX_LANE3_OFFSET_CAL_2,
R_DPHY_RDWR_RX_LANE3_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE3_OFFSET_CAL_0,
R_DPHY_RD_RX_LANE3_OFFSET_CAL_1,
R_DPHY_RD_RX_LANE3_OFFSET_CAL_2,
R_DPHY_RD_RX_LANE3_OFFSET_CAL_3,
R_DPHY_RD_RX_LANE3_DDL_0,
R_DPHY_RD_RX_LANE3_DDL_1,
R_DPHY_RD_RX_LANE3_DDL_2,
R_DPHY_RD_RX_LANE3_DDL_3,
R_DPHY_RD_RX_LANE3_DDL_4,
R_DPHY_RD_RX_LANE3_DDL_5,
R_DPHY_RDWR_RX_LANE3_DDL_0,
R_DPHY_RDWR_RX_LANE3_DDL_1,
R_DPHY_RDWR_RX_LANE3_DDL_4,
R_DPHY_RDWR_RX_LANE3_DDL_5,
R_DPHY_RDWR_RX_LANE3_DDL_6,
};
uint16_t valid_tx_g3dphy_offsets[] = {
R_DPHY_TESTCODE_X_REG,
R_DPHY_RDWR_TX_SYS_0,
R_DPHY_RDWR_TX_SYS_1,
R_DPHY_RDWR_TX_SYS_2,
R_DPHY_RDWR_TX_SYS_3,
R_DPHY_RDWR_TX_SYS_8,
R_DPHY_RD_TX_SYS_0,
R_DPHY_RD_TX_SYS_1,
R_DPHY_RD_TX_SYS_2,
R_DPHY_RD_TX_SYS_3,
R_DPHY_RD_TX_SYS_4,
R_DPHY_RD_CONT_DATA_0,
R_DPHY_RD_CONT_DATA_1,
R_DPHY_RDWR_TX_SYSTIMERS_0,
R_DPHY_RDWR_TX_SYSTIMERS_1,
R_DPHY_RDWR_TX_SYSTIMERS_2,
R_DPHY_RDWR_TX_SYSTIMERS_3,
R_DPHY_RDWR_TX_SYSTIMERS_4,
R_DPHY_RDWR_TX_SYSTIMERS_5,
R_DPHY_RDWR_TX_SYSTIMERS_6,
R_DPHY_RDWR_TX_SYSTIMERS_7,
R_DPHY_RDWR_TX_SYSTIMERS_8,
R_DPHY_RDWR_TX_SYSTIMERS_9,
R_DPHY_RDWR_TX_SYSTIMERS_10,
R_DPHY_RDWR_TX_SYSTIMERS_11,
R_DPHY_RDWR_TX_SYSTIMERS_12,
R_DPHY_RDWR_TX_SYSTIMERS_13,
R_DPHY_RDWR_TX_SYSTIMERS_14,
R_DPHY_RDWR_TX_SYSTIMERS_15,
R_DPHY_RDWR_TX_SYSTIMERS_16,
R_DPHY_RDWR_TX_SYSTIMERS_17,
R_DPHY_RDWR_TX_SYSTIMERS_18,
R_DPHY_RDWR_TX_SYSTIMERS_19,
R_DPHY_RDWR_TX_SYSTIMERS_20,
R_DPHY_RDWR_TX_SYSTIMERS_21,
R_DPHY_RDWR_TX_SYSTIMERS_22,
R_DPHY_RDWR_TX_SYSTIMERS_23,
R_DPHY_RD_TX_SYSTIMERS_0,
R_DPHY_RD_TX_SYSTIMERS_1,
R_DPHY_RD_TX_SYSTIMERS_2,
R_DPHY_RD_TX_SYSTIMERS_3,
R_DPHY_RD_TX_SYSTIMERS_4,
R_DPHY_RD_TX_SYSTIMERS_5,
R_DPHY_RD_TX_SYSTIMERS_6,
R_DPHY_RD_TX_SYSTIMERS_7,
R_DPHY_RD_TX_SYSTIMERS_8,
R_DPHY_RD_TX_SYSTIMERS_9,
R_DPHY_RD_TX_SYSTIMERS_10,
R_DPHY_RD_TX_SYSTIMERS_11,
R_DPHY_RD_TX_SYSTIMERS_12,
R_DPHY_RD_TX_TX_STARTUP_OBS_0,
R_DPHY_RDWR_TX_TX_STARTUP_OVR_0,
R_DPHY_RDWR_TX_TX_STARTUP_OVR_1,
R_DPHY_RDWR_TX_DEEMPHASIS_0,
R_DPHY_RDWR_TX_DEEMPHASIS_1,
R_DPHY_RDWR_TX_DEEMPHASIS_2,
R_DPHY_RDWR_TX_DEEMPHASIS_3,
R_DPHY_RDWR_TX_DEEMPHASIS_4,
R_DPHY_RDWR_TX_DEEMPHASIS_5,
R_DPHY_RDWR_TX_DEEMPHASIS_6,
R_DPHY_RDWR_TX_DEEMPHASIS_7,
R_DPHY_RDWR_TX_DEEMPHASIS_8,
R_DPHY_RDWR_TX_DEEMPHASIS_9,
R_DPHY_RDWR_TX_DEEMPHASIS_10,
R_DPHY_RDWR_TX_DEEMPHASIS_11,
R_DPHY_RDWR_TX_DEEMPHASIS_12,
R_DPHY_RDWR_TX_DEEMPHASIS_13,
R_DPHY_RDWR_TX_DEEMPHASIS_14,
R_DPHY_RDWR_TX_DEEMPHASIS_15,
R_DPHY_RDWR_TX_DEEMPHASIS_CONST_0,
R_DPHY_RDWR_TX_DEEMPHASIS_CONST_1,
R_DPHY_RDWR_TX_DEEMPHASIS_CONST_2,
R_DPHY_RDWR_TX_DEEMPHASIS_CONST_3,
R_DPHY_RDWR_TX_DEEMPHASIS_OFF_CONTROL_0,
R_DPHY_RDWR_TX_DEEMPHASIS_OFF_CONTROL_1,
R_DPHY_RDWR_TX_DEEMPHASIS_OFF_CONTROL_2,
R_DPHY_RDWR_TX_BIST_PM_CONTROL,
R_DPHY_RD_TX_DEEMPHASIS_OBS_0,
R_DPHY_RD_TX_DEEMPHASIS_OBS_1,
R_DPHY_RDWR_TX_BIST_3,
R_DPHY_RDWR_TX_BIST_4,
R_DPHY_RDWR_TX_BIST_OVR_2,
R_DPHY_RDWR_TX_BIST_OVR_3,
R_DPHY_RDWR_TX_BIST_PIPE_TIMER,
R_DPHY_RDWR_TX_CHECK_ERROR_TIMER,
R_DPHY_RD_TX_BIST_0,
R_DPHY_RD_TX_BIST_1,
R_DPHY_RD_TX_BIST_2,
R_DPHY_RD_TX_BIST_3,
R_DPHY_RD_TX_BIST_4,
R_DPHY_RD_TX_BIST_5,
R_DPHY_RD_TX_BIST_6,
R_DPHY_RD_TX_BIST_7,
R_DPHY_RD_TX_BIST_8,
R_DPHY_RD_TX_BIST_9,
R_DPHY_RD_TX_BIST_10,
R_DPHY_RD_TX_BIST_11,
R_DPHY_RD_TX_BIST_12,
R_DPHY_RD_TX_BIST_13,
R_DPHY_RDWR_TX_TX_DUAL_PHY_0,
R_DPHY_RD_TX_TX_DUAL_PHY_0,
R_DPHY_RDWR_TX_PLL_0,
R_DPHY_RDWR_TX_PLL_1,
R_DPHY_RDWR_TX_PLL_2,
R_DPHY_RDWR_TX_PLL_3,
R_DPHY_RDWR_TX_PLL_4,
R_DPHY_RDWR_TX_PLL_5,
R_DPHY_RDWR_TX_PLL_6,
R_DPHY_RDWR_TX_PLL_7,
R_DPHY_RDWR_TX_PLL_8,
R_DPHY_RDWR_TX_PLL_9,
R_DPHY_RDWR_TX_PLL_10,
R_DPHY_RDWR_TX_PLL_11,
R_DPHY_RDWR_TX_PLL_12,
R_DPHY_RDWR_TX_PLL_13,
R_DPHY_RDWR_TX_PLL_14,
R_DPHY_RDWR_TX_PLL_15,
R_DPHY_RDWR_TX_PLL_16,
R_DPHY_RDWR_TX_PLL_17,
R_DPHY_RDWR_TX_PLL_18,
R_DPHY_RDWR_TX_PLL_19,
R_DPHY_RDWR_TX_PLL_20,
R_DPHY_RDWR_TX_PLL_21,
R_DPHY_RDWR_TX_PLL_22,
R_DPHY_RDWR_TX_PLL_23,
R_DPHY_RDWR_TX_PLL_24,
R_DPHY_RDWR_TX_PLL_25,
R_DPHY_RDWR_TX_PLL_26,
R_DPHY_RDWR_TX_PLL_27,
R_DPHY_RDWR_TX_PLL_28,
R_DPHY_RDWR_TX_PLL_29,
R_DPHY_RDWR_TX_PLL_30,
R_DPHY_RDWR_TX_PLL_31,
R_DPHY_RD_TX_PLL_0,
R_DPHY_RD_TX_PLL_1,
R_DPHY_RD_TX_PLL_2,
R_DPHY_RD_TX_PLL_3,
R_DPHY_RD_TX_PLL_4,
R_DPHY_RDWR_TX_CB_0,
R_DPHY_RDWR_TX_CB_1,
R_DPHY_RDWR_TX_CB_2,
R_DPHY_RDWR_TX_CB_3,
R_DPHY_RDWR_TX_CB_4,
R_DPHY_RDWR_TX_CB_5,
R_DPHY_RDWR_TX_CB_6,
R_DPHY_RD_TX_ANA_CB_0,
R_DPHY_RD_TX_ANA_CB_1,
R_DPHY_RD_TX_ANA_CB_2,
R_DPHY_RDWR_TX_ANA_CB_3,
R_DPHY_RDWR_TX_DAC_0,
R_DPHY_RDWR_TX_DAC_1,
R_DPHY_RDWR_TX_DAC_2,
R_DPHY_RDWR_TX_DAC_3,
R_DPHY_RD_TX_DAC_0,
R_DPHY_RD_TX_DAC_1,
R_DPHY_RD_TX_DAC_2,
R_DPHY_RDWR_TX_TERM_CAL_0,
R_DPHY_RDWR_TX_TERM_CAL_1,
R_DPHY_RDWR_TX_TERM_CAL_2,
R_DPHY_RD_TX_TERM_CAL_0,
R_DPHY_RD_TX_TERM_CAL_1,
R_DPHY_RD_TX_TERM_CAL_2,
R_DPHY_RDWR_TX_SLEW_0,
R_DPHY_RDWR_TX_SLEW_1,
R_DPHY_RDWR_TX_SLEW_2,
R_DPHY_RDWR_TX_SLEW_3,
R_DPHY_RDWR_TX_SLEW_4,
R_DPHY_RDWR_TX_SLEW_5,
R_DPHY_RDWR_TX_SLEW_6,
R_DPHY_RDWR_TX_SLEW_7,
R_DPHY_RD_TX_SLEW_0,
R_DPHY_RDWR_TX_CLKLANE_LANE_0,
R_DPHY_RDWR_TX_CLKLANE_LANE_1,
R_DPHY_RDWR_TX_CLKLANE_LANE_2,
R_DPHY_RDWR_TX_CLKLANE_LANE_3,
R_DPHY_RDWR_TX_CLKLANE_LANE_4,
R_DPHY_RDWR_TX_CLKLANE_LANE_5,
R_DPHY_RDWR_TX_CLKLANE_LANE_6,
R_DPHY_RDWR_TX_CLKLANE_LANE_SLEWRATE_0,
R_DPHY_RDWR_TX_CLKLANE_LANE_SLEWRATE_1,
R_DPHY_RDWR_TX_CLKLANE_LANE_SLEWRATE_2,
R_DPHY_RDWR_TX_CLKLANE_LANE_SLEWRATE_3,
R_DPHY_RD_TX_CLKLANE_LANE_SLEWRATE_0,
R_DPHY_RD_TX_CLKLANE_LANE_SLEWRATE_1,
R_DPHY_RD_TX_CLKLANE_LANE_SLEWRATE_2,
R_DPHY_RD_TX_CLKLANE_LANE_SLEWRATE_3,
R_DPHY_RD_TX_CLKLANE_LANE_0,
R_DPHY_RD_TX_CLKLANE_LANE_1,
R_DPHY_RD_TX_CLKLANE_AFE_OBS_0,
R_DPHY_RD_TX_CLKLANE_AFE_OBS_1,
R_DPHY_RD_TX_CLKLANE_AFE_OBS_2,
R_DPHY_RD_TX_CLKLANE_AFE_OBS_3,
R_DPHY_RDWR_TX_CLKLANE_BIST_0,
R_DPHY_RD_TX_CLKLANE_BIST_0,
R_DPHY_RDWR_TX_LANE0_LANE_0,
R_DPHY_RDWR_TX_LANE0_LANE_1,
R_DPHY_RDWR_TX_LANE0_LANE_2,
R_DPHY_RDWR_TX_LANE0_LANE_3,
R_DPHY_RDWR_TX_LANE0_LANE_4,
R_DPHY_RDWR_TX_LANE0_LANE_5,
R_DPHY_RDWR_TX_LANE0_LANE_6,
R_DPHY_RDWR_TX_LANE0_LANE_7,
R_DPHY_RDWR_TX_LANE0_LANE_8,
R_DPHY_RDWR_TX_LANE0_LANE_9,
R_DPHY_RDWR_TX_LANE0_SLEWRATE_0,
R_DPHY_RDWR_TX_LANE0_SLEWRATE_1,
R_DPHY_RDWR_TX_LANE0_SLEWRATE_2,
R_DPHY_RDWR_TX_LANE0_SLEWRATE_3,
R_DPHY_RD_TX_LANE0_SLEWRATE_0,
R_DPHY_RD_TX_LANE0_SLEWRATE_1,
R_DPHY_RD_TX_LANE0_SLEWRATE_2,
R_DPHY_RD_TX_LANE0_SLEWRATE_3,
R_DPHY_RD_TX_LANE0_LANE_0,
R_DPHY_RD_TX_LANE0_LANE_1,
R_DPHY_RD_TX_LANE0_LANE_3,
R_DPHY_RD_TX_LANE0_LANE_4,
R_DPHY_RDWR_TX_LANE0_BIST_0,
R_DPHY_RD_TX_LANE0_BIST_0,
R_DPHY_RD_TX_LANE0_AFE_OBS_0,
R_DPHY_RD_TX_LANE0_AFE_OBS_1,
R_DPHY_RD_TX_LANE0_AFE_OBS_2,
R_DPHY_RD_TX_LANE0_AFE_OBS_3,
R_DPHY_RDWR_TX_LANE1_LANE_0,
R_DPHY_RDWR_TX_LANE1_LANE_1,
R_DPHY_RDWR_TX_LANE1_LANE_2,
R_DPHY_RDWR_TX_LANE1_LANE_3,
R_DPHY_RDWR_TX_LANE1_LANE_4,
R_DPHY_RDWR_TX_LANE1_LANE_5,
R_DPHY_RDWR_TX_LANE1_LANE_6,
R_DPHY_RDWR_TX_LANE1_LANE_7,
R_DPHY_RDWR_TX_LANE1_LANE_8,
R_DPHY_RDWR_TX_LANE1_SLEWRATE_0,
R_DPHY_RDWR_TX_LANE1_SLEWRATE_1,
R_DPHY_RDWR_TX_LANE1_SLEWRATE_2,
R_DPHY_RDWR_TX_LANE1_SLEWRATE_3,
R_DPHY_RD_TX_LANE1_SLEWRATE_0,
R_DPHY_RD_TX_LANE1_SLEWRATE_1,
R_DPHY_RD_TX_LANE1_SLEWRATE_2,
R_DPHY_RD_TX_LANE1_SLEWRATE_3,
R_DPHY_RD_TX_LANE1_LANE_0,
R_DPHY_RD_TX_LANE1_LANE_1,
R_DPHY_RD_TX_LANE1_LANE_4,
R_DPHY_RDWR_TX_LANE1_BIST_0,
R_DPHY_RD_TX_LANE1_BIST_0,
R_DPHY_RD_TX_LANE1_AFE_OBS_4,
R_DPHY_RD_TX_LANE1_AFE_OBS_5,
R_DPHY_RD_TX_LANE1_AFE_OBS_6,
R_DPHY_RD_TX_LANE1_AFE_OBS_7,
R_DPHY_RDWR_TX_LANE2_LANE_0,
R_DPHY_RDWR_TX_LANE2_LANE_1,
R_DPHY_RDWR_TX_LANE2_LANE_2,
R_DPHY_RDWR_TX_LANE2_LANE_3,
R_DPHY_RDWR_TX_LANE2_LANE_4,
R_DPHY_RDWR_TX_LANE2_LANE_5,
R_DPHY_RDWR_TX_LANE2_LANE_6,
R_DPHY_RDWR_TX_LANE2_LANE_7,
R_DPHY_RDWR_TX_LANE2_LANE_8,
R_DPHY_RDWR_TX_LANE2_SLEWRATE_0,
R_DPHY_RDWR_TX_LANE2_SLEWRATE_1,
R_DPHY_RDWR_TX_LANE2_SLEWRATE_2,
R_DPHY_RDWR_TX_LANE2_SLEWRATE_3,
R_DPHY_RD_TX_LANE2_SLEWRATE_0,
R_DPHY_RD_TX_LANE2_SLEWRATE_1,
R_DPHY_RD_TX_LANE2_SLEWRATE_2,
R_DPHY_RD_TX_LANE2_SLEWRATE_3,
R_DPHY_RD_TX_LANE2_LANE_0,
R_DPHY_RD_TX_LANE2_LANE_1,
R_DPHY_RD_TX_LANE2_LANE_4,
R_DPHY_RDWR_TX_LANE2_BIST_0,
R_DPHY_RD_TX_LANE2_BIST_0,
R_DPHY_RD_TX_LANE2_AFE_OBS_4,
R_DPHY_RD_TX_LANE2_AFE_OBS_5,
R_DPHY_RD_TX_LANE2_AFE_OBS_6,
R_DPHY_RD_TX_LANE2_AFE_OBS_7,
R_DPHY_RDWR_TX_LANE3_LANE_0,
R_DPHY_RDWR_TX_LANE3_LANE_1,
R_DPHY_RDWR_TX_LANE3_LANE_2,
R_DPHY_RDWR_TX_LANE3_LANE_3,
R_DPHY_RDWR_TX_LANE3_LANE_4,
R_DPHY_RDWR_TX_LANE3_LANE_5,
R_DPHY_RDWR_TX_LANE3_LANE_6,
R_DPHY_RDWR_TX_LANE3_LANE_7,
R_DPHY_RDWR_TX_LANE3_LANE_8,
R_DPHY_RDWR_TX_LANE3_SLEWRATE_0,
R_DPHY_RDWR_TX_LANE3_SLEWRATE_1,
R_DPHY_RDWR_TX_LANE3_SLEWRATE_2,
R_DPHY_RDWR_TX_LANE3_SLEWRATE_3,
R_DPHY_RD_TX_LANE3_SLEWRATE_0,
R_DPHY_RD_TX_LANE3_SLEWRATE_1,
R_DPHY_RD_TX_LANE3_SLEWRATE_2,
R_DPHY_RD_TX_LANE3_SLEWRATE_3,
R_DPHY_RD_TX_LANE3_LANE_0,
R_DPHY_RD_TX_LANE3_LANE_1,
R_DPHY_RD_TX_LANE3_LANE_4,
R_DPHY_RDWR_TX_LANE3_BIST_0,
R_DPHY_RD_TX_LANE3_BIST_0,
R_DPHY_RD_TX_LANE3_AFE_OBS_4,
R_DPHY_RD_TX_LANE3_AFE_OBS_5,
R_DPHY_RD_TX_LANE3_AFE_OBS_6,
R_DPHY_RD_TX_LANE3_AFE_OBS_7
};
int mipicsi_debug_vpg_preset(struct mipicsi_top_vpg *vpg,
enum mipicsi_debug_vpg_res res)
{
int ret;
/* NOTE Device must be populated in vpg struct before calling this */
pr_info("%s: E\n", __func__);
/* Frame and line numbers increment by 1 */
vpg->pkt_cfg = (0x1<<11) | (0x01<<9) | CSI2_RAW10;
pr_info("%s: VPG pkt=0x%x", __func__, vpg->pkt_cfg);
if (res == VPG_VGA) {
/* VGA Settings */
pr_info("%s: VGA ", __func__);
vpg->mode_cfg = 1;
vpg->pkt_size = 640;
vpg->hsa_time = 120;
vpg->hbp_time = 40;
vpg->hline_time = 800;
vpg->vsa_lines = 80;
vpg->vbp_lines = 20;
vpg->vfp_lines = 20;
vpg->act_lines = 480;
vpg->max_frame = 5;
vpg->start_line = 0;
vpg->step_line = 0;
} else if (res == VPG_1080P) {
/* 1080P Settings */
pr_info("%s: 1080P", __func__);
vpg->mode_cfg = 0;
vpg->pkt_size = 1920;
vpg->hsa_time = 53;
vpg->hbp_time = 10;
vpg->hline_time = 2200;
vpg->vsa_lines = 80;
vpg->vbp_lines = 20;
vpg->vfp_lines = 20;
vpg->act_lines = 1080;
vpg->max_frame = 5;
vpg->start_line = 0;
vpg->step_line = 0;
} else if (res == VPG_12MP) {
/* 12MP Settings */
pr_info("%s: 12MP", __func__);
vpg->mode_cfg = 0;
vpg->pkt_size = 4320;
vpg->hsa_time = 50;
vpg->hbp_time = 20;
vpg->hline_time = 4600;
vpg->vsa_lines = 80;
vpg->vbp_lines = 20;
vpg->vfp_lines = 20;
vpg->act_lines = 2880;
vpg->max_frame = 5;
vpg->start_line = 0;
vpg->step_line = 0;
}
ret = mipicsi_device_vpg(vpg);
pr_info("%s: X\n", __func__);
return ret;
}
int mipicsi_debug_dump(enum mipicsi_top_dev device)
{
uint16_t i, ctl_sz, dphy_sz;
struct mipicsi_top_reg reg;
uint16_t *ctl, *dphy;
reg.dev = device;
if ((device == MIPI_RX0) || (device == MIPI_RX1) ||
(device == MIPI_RX2)) {
ctl = valid_rx_ctl_offsets;
ctl_sz = sizeof(valid_rx_ctl_offsets)/sizeof(uint16_t);
dphy = valid_rx_g3dphy_offsets;
dphy_sz = sizeof(valid_rx_g3dphy_offsets)/sizeof(uint16_t);
} else if ((device == MIPI_TX0) || (device == MIPI_TX1)) {
ctl = valid_tx_ctl_offsets;
ctl_sz = sizeof(valid_tx_ctl_offsets)/sizeof(uint16_t);
dphy = valid_tx_g3dphy_offsets;
dphy_sz = sizeof(valid_tx_g3dphy_offsets)/sizeof(uint16_t);
} else
return -ENODEV;
for (i = 0; i < ctl_sz; i++) {
reg.offset = ctl[i];
mipicsi_top_read(&reg);
pr_err("Controller Reg Read: Offset 0x%x, Value 0x%x\n",
reg.offset, reg.value);
}
if (mipicsi_util_is_emulation()) {
pr_err("\nDaughtercard DPhy Reads\n");
for (i = 0; i <= 0xF4; i++) {
reg.offset = i;
mipicsi_top_dphy_read(&reg);
}
} else {
pr_err("\nGen3 DPhy Reads\n");
for (i = 0; i <= dphy_sz; i++) {
reg.offset = dphy[i];
mipicsi_top_dphy_read(&reg);
}
}
/* Take the device out of shutdown */
if ((reg.dev == MIPI_TX0) ||
(reg.dev == MIPI_TX1)) {
reg.offset = HWIO_MIPI_TX_PHY_RSTZ_REGOFF;
reg.value = 0x07;
mipicsi_top_write(&reg);
} else {
reg.offset = HWIO_MIPI_RX_PHY_SHUTDOWNZ_REGOFF;
reg.value = 1;
mipicsi_top_write(&reg);
reg.offset = HWIO_MIPI_RX_DPHY_RSTZ_REGOFF;
reg.value = 1;
mipicsi_top_write(&reg);
}
return 0;
}