You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
kernel_samsung_sm7125/drivers/video/fbdev/msm/mdss_dsi_phy.h

178 lines
5.9 KiB

/* Copyright (c) 2015-2018, 2020, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*/
#ifndef MDSS_DSI_PHY_H
#define MDSS_DSI_PHY_H
#include <linux/types.h>
#include "mdss_panel.h"
#include "mdss_dsi.h"
enum phy_rev {
DSI_PHY_REV_UNKNOWN = 0x00,
DSI_PHY_REV_10 = 0x01, /* REV 1.0 - 20nm, 28nm */
DSI_PHY_REV_20 = 0x02, /* REV 2.0 - 14nm */
DSI_PHY_REV_30 = 0x03, /* REV 3.0 */
DSI_PHY_REV_12NM = 0x04, /* 12nm PHY */
DSI_PHY_REV_MAX,
};
enum phy_mode {
DSI_PHY_MODE_DPHY = 0x00,
DSI_PHY_MODE_CPHY,
DSI_PHY_MODE_MAX,
};
/*
* mdss_dsi_phy_calc_timing_param() - calculates clock timing and hs timing
* parameters for the given phy revision.
*
* @pinfo - structure containing panel specific information which will be
* used in calculating the phy timing parameters.
* @phy_rev - phy revision for which phy timings need to be calculated.
* @frate_hz - Frame rate for which phy timing parameters are to be calculated.
*/
int mdss_dsi_phy_calc_timing_param(struct mdss_panel_info *pinfo, u32 phy_rev,
u64 clk_rate);
/*
* mdss_dsi_phy_v3_init() - initialization sequence for DSI PHY rev v3
*
* @ctrl: pointer to DSI controller structure
* @phy_mode - DSI phy operating mode (CPHY or DPHY)
*
* This function performs a sequence of register writes to initialize DSI
* phy revision 3.0 in either the C-PHY or the D-PHY operating mode. This
* function assumes that the DSI bus clocks are turned on. This function should
* only be called prior to enabling the DSI link clocks.
*/
int mdss_dsi_phy_v3_init(struct mdss_dsi_ctrl_pdata *ctrl,
enum phy_mode phy_mode);
/*
* mdss_dsi_phy_v3_shutdown() - shutdown sequence for DSI PHY rev v3
*
* @ctrl: pointer to DSI controller structure
*
* Perform a sequence of register writes to completely shut down DSI PHY
* revision 3.0. This function assumes that the DSI bus clocks are turned on.
*/
int mdss_dsi_phy_v3_shutdown(struct mdss_dsi_ctrl_pdata *ctrl);
/*
* mdss_dsi_phy_v3_regulator_enable() - enable lane regulators for DSI PHY v3
*
* @ctrl: pointer to DSI controller structure
*/
int mdss_dsi_phy_v3_regulator_enable(struct mdss_dsi_ctrl_pdata *ctrl);
/*
* mdss_dsi_phy_v3_regulator_disable() - disable lane regulators for DSI PHY v3
*
* @ctrl: pointer to DSI controller structure
*/
int mdss_dsi_phy_v3_regulator_disable(struct mdss_dsi_ctrl_pdata *ctrl);
/*
* mdss_dsi_phy_v3_toggle_resync_fifo() - toggle resync re-time FIFO
*
* @ctrl: pointer to DSI controller structure
*
* Resync the re-time FIFO in the DSI PHY by turning it off and turning
* it back on.
*/
void mdss_dsi_phy_v3_toggle_resync_fifo(struct mdss_dsi_ctrl_pdata *ctrl);
/**
* mdss_dsi_phy_v3_wait_for_lanes_stop_state() - Wait for DSI lanes to be in
* stop state
* @ctrl: pointer to DSI controller structure
* @lane_status: value of lane status register at the end of the poll
*
* This function waits for all the active DSI lanes to be in stop state by
* polling the lane status register. This function assumes that the bus clocks
* required to access the registers are already turned on.
*/
int mdss_dsi_phy_v3_wait_for_lanes_stop_state(struct mdss_dsi_ctrl_pdata *ctrl,
u32 *lane_status);
/**
* mdss_dsi_phy_v3_ulps_config() - Program DSI lanes to enter/exit ULPS mode
* @ctrl: pointer to DSI controller structure
* @enable: true to enter ULPS, false to exit ULPS
*
* This function executes the necessary hardware programming sequence to
* enter/exit DSI Ultra-Low Power State (ULPS) for DSI PHY v3. This function
* assumes that the link and core clocks are already on.
*/
int mdss_dsi_phy_v3_ulps_config(struct mdss_dsi_ctrl_pdata *ctrl, bool enable);
/**
* mdss_dsi_phy_v3_idle_pc_exit() - Called after Idle Power Collapse exit
* @ctrl: pointer to DSI controller structure
*
* This function is called after Idle Power Collapse, so driver
* can perform any sequence required after the Idle PC exit.
*/
void mdss_dsi_phy_v3_idle_pc_exit(struct mdss_dsi_ctrl_pdata *ctrl);
/**
* mdss_dsi_12nm_phy_regulator_enable() - enable lane reg for DSI 12nm PHY
*
* @ctrl: pointer to DSI controller structure
*/
int mdss_dsi_12nm_phy_regulator_enable(struct mdss_dsi_ctrl_pdata *ctrl);
/*
* mdss_dsi_12nm_phy_regulator_disable() - disable lane reg for DSI 12nm PHY
*
* @ctrl: pointer to DSI controller structure
*/
int mdss_dsi_12nm_phy_regulator_disable(struct mdss_dsi_ctrl_pdata *ctrl);
/*
* mdss_dsi_12nm_phy_config() - initialization sequence for DSI 12nm PHY
*
* @ctrl: pointer to DSI controller structure
*
* This function performs a sequence of register writes to initialize DSI
* 12nm phy. This function assumes that the DSI bus clocks are turned on.
* This function should only be called prior to enabling the DSI link clocks.
*/
int mdss_dsi_12nm_phy_config(struct mdss_dsi_ctrl_pdata *ctrl);
/*
* mdss_dsi_12nm_phy_shutdown() - shutdown sequence for DSI 12nm PHY
*
* @ctrl: pointer to DSI controller structure
*
* Perform a sequence of register writes to completely shut down DSI 12nm PHY.
* This function assumes that the DSI bus clocks are turned on.
*/
int mdss_dsi_12nm_phy_shutdown(struct mdss_dsi_ctrl_pdata *ctrl);
/*
* mdss_dsi_12nm_phy_hstx_drv_ctrl() - enable/disable HSTX drivers
*
* @ctrl: pointer to DSI controller structure
* @enable: boolean to specify enable/disable the HSTX drivers
*
* Perform a sequence of register writes to enable/disable HSTX drivers.
* This function assumes that the DSI bus clocks are turned on.
*/
void mdss_dsi_12nm_phy_hstx_drv_ctrl(
struct mdss_dsi_ctrl_pdata *ctrl, bool enable);
#endif /* MDSS_DSI_PHY_H */