M7350/kernel/drivers/video/msm/mdss/mhl3/platform.h

237 lines
6.7 KiB
C
Raw Permalink Normal View History

2024-09-09 08:57:42 +00:00
/*
* SiI8620 Linux Driver
*
* Copyright (C) 2013-2014 Silicon Image, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
* This program is distributed AS-IS WITHOUT ANY WARRANTY of any
* kind, whether express or implied; INCLUDING without the implied warranty
* of MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE or NON-INFRINGEMENT.
* See the GNU General Public License for more details at
* http://www.gnu.org/licenses/gpl-2.0.html.
*/
#if !defined(PLATFORM_H)
#define PLATFORM_H
#define DEVICE_ID_8620 0x8620
#define DEBUG_I2C_WRITE 1
#define DEBUG_I2C_READ 0
#define MAX_DEBUG_TRANSFER_SIZE 32
enum dbg_msg_level {
DBG_MSG_LEVEL_ERR,
DBG_MSG_LEVEL_WARN,
DBG_MSG_LEVEL_INFO,
DBG_MSG_LEVEL_GPIO,
DBG_MSG_LEVEL_EDID_INFO,
DBG_MSG_LEVEL_COMM_INFO
};
enum tx_interface_types {
TX_INTERFACE_TYPE_I2C,
TX_INTERFACE_TYPE_SPI
};
#if defined(DEBUG)
void print_formatted_debug_msg(char *file_spec, const char *func_name,
int line_num, char *fmt, ...);
void dump_transfer(enum tx_interface_types if_type,
u8 page, u8 offset, u16 count, u8 *values, bool write);
#define MHL_TX_PROXY_DBG_PRINT(level, function, iLine, ...) \
{ \
if ((level) <= debug_level) \
print_formatted_debug_msg(NULL, function, iLine, __VA_ARGS__); \
}
#define MHL_TX_GENERIC_DBG_PRINT(level, ...) \
{ \
if ((level) <= debug_level) \
print_formatted_debug_msg(NULL, __func__, __LINE__, \
__VA_ARGS__); \
}
#define MHL_TX_COMM_INFO(...) \
MHL_TX_GENERIC_DBG_PRINT(DBG_MSG_LEVEL_COMM_INFO, __VA_ARGS__)
#define MHL_TX_EDID_INFO(...) \
MHL_TX_GENERIC_DBG_PRINT(DBG_MSG_LEVEL_EDID_INFO, __VA_ARGS__)
#define MHL_TX_DBG_GPIO(...) \
MHL_TX_GENERIC_DBG_PRINT(DBG_MSG_LEVEL_GPIO, __VA_ARGS__)
#define MHL_TX_DBG_INFO(...) \
MHL_TX_GENERIC_DBG_PRINT(DBG_MSG_LEVEL_INFO, __VA_ARGS__)
#define MHL_TX_DBG_WARN(...) \
MHL_TX_GENERIC_DBG_PRINT(DBG_MSG_LEVEL_WARN, __VA_ARGS__)
#define MHL_TX_DBG_ERR(...) \
MHL_TX_GENERIC_DBG_PRINT(DBG_MSG_LEVEL_ERR, __VA_ARGS__)
#define DUMP_I2C_TRANSFER(page, offset, count, values, write_flag) \
dump_transfer(TX_INTERFACE_TYPE_I2C, page, offset, \
count, values, write_flag);
#define DUMP_SPI_TRANSFER(page, offset, count, values, write_flag) \
dump_transfer(TX_INTERFACE_TYPE_SPI, page, offset, \
count, values, write_flag);
#else
#define MHL_TX_PROXY_DBG_PRINT(level, function, iLine, ...)
#define MHL_TX_GENERIC_DBG_PRINT(level, ...)
#define MHL_TX_COMM_INFO(fmt, ...)
#define MHL_TX_EDID_INFO(fmt, ...)
#define MHL_TX_DBG_GPIO(fmt, ...)
#define MHL_TX_DBG_INFO(fmt, ...)
#define MHL_TX_DBG_WARN(fmt, ...)
#define MHL_TX_DBG_ERR(fmt, ...)
#define DUMP_I2C_TRANSFER(page, offset, count, values, write_flag)
#define DUMP_SPI_TRANSFER(page, offset, count, values, write_flag)
#endif
void push_debug_level(int new_verbosity);
void pop_debug_level(void);
enum vbus_power_state {
VBUS_OFF,
VBUS_ON
};
enum hpd_control_mode {
HPD_CTRL_MODE_ERROR = -1,
HPD_CTRL_OPEN_DRAIN,
HPD_CTRL_PUSH_PULL
};
enum hpd_control_mode platform_get_hpd_control_mode(void);
void platform_mhl_tx_hw_reset(uint32_t reset_period, uint32_t reset_delay);
void mhl_tx_vbus_control(enum vbus_power_state power_state);
void mhl_tx_vbus_current_ctl(uint16_t max_current_in_milliamps);
struct platform_reg_pair {
uint8_t slave_addr;
uint8_t offset;
};
struct platform_signals_list {
char *name;
int16_t gpio_number;
struct platform_reg_pair gpio_reg_PCA950x;
uint8_t gpio_mask_PCA950x;
uint8_t *gpio_bank_value;
bool *param;
};
struct block_buffer_info_t {
uint8_t *buffer;
uint8_t payload_offset;
size_t req_size;
};
void si_mhl_tx_platform_get_block_buffer_info(
struct block_buffer_info_t *block_buffer_info);
int mhl_tx_write_block_spi_emsc(void *drv_context, struct block_req *req);
int mhl_tx_read_spi_emsc(void *drv_context, u16 count, u8 *values);
void mhl_tx_clear_emsc_read_err(void *drv_context);
int mhl_tx_write_reg(void *drv_context, u16 address, u8 value);
int mhl_tx_read_reg(void *drv_context, u16 address);
int mhl_tx_write_reg_block(void *drv_context, u16 address, u16 count,
u8 *values);
int mhl_tx_read_reg_block(void *drv_context, u16 address, u16 count,
u8 *values);
int mhl_tx_modify_reg(void *drv_context, u16 address, u8 mask, u8 value);
#ifdef DEBUG
int si_8620_power_control(bool power_up);
#endif
uint32_t platform_get_flags(void);
#define PLATFORM_FLAG_HEARTBEAT_MASK 0x00000030
#define PLATFORM_VALUE_ISSUE_HEARTBEAT 0x00000010
#define PLATFORM_VALUE_DISCONN_HEARTBEAT 0x00000020
#define PLATFORM_FLAG_LINK_SPEED 0x000000C0
#define PLATFORM_FLAG_6GBPS 0x000000C0
#define PLATFORM_FLAG_3GBPS 0x00000080
#define PLATFORM_FLAG_1_5GBPS 0x00000040
int is_interrupt_asserted(void);
int get_config(void *dev_context, int config_idx);
#define GPIO_LED_ON 0
#define GPIO_LED_OFF 1
void set_pin_impl(/*void *dev_context,*/ int pin_idx, int value,
const char *function_name, int line_num);
#define set_pin(/*dev_context,*/ pin_idx, value) \
set_pin_impl(/*dev_context,*/ pin_idx, value, __func__, __LINE__)
extern bool source_vbus_on;
extern bool bpp_on_wb;
extern bool use_spi;
extern bool wait_for_user_intr;
extern int debug_level;
extern bool debug_reg_dump;
extern bool force_ocbus_for_ects;
extern int crystal_khz;
extern int gpio_index;
extern int hdcp_content_type;
extern bool input_dev_rap;
#if (INCLUDE_RBP == 1)
extern bool input_dev_rbp;
#endif
extern bool input_dev_rcp;
extern bool input_dev_ucp;
/* Starter kit board signal control index definitions */
#define TX_HW_RESET 0
#define TX_FW_WAKE 1
#define CHG_DET 2
#define XO3_SINK_VBUS_SENSE 3
#define TWELVE_VOLT_PS_SENSE 4
#define EEPROM_WR_EN 5
#define TX2MHLRX_PWR 6
#define M2U_VBUS_CTRL 7
#define LED_3D 8
#define LED_PACKED_PIXEL 9
#define LED_HDCP 10
#define LED_USB_MODE 11
#define LED_SPARE_2 12
#define LED_SPARE_3 13
#define LED_SPARE_4 14
#define X02_USB_SW_CTRL 15
#define X02_USB_SW_CTRL0 16
#define X02_USB_SW_CTRL1 17
#define X02_USB_LED15_AMBER 18
#define X02_USB_LED15_GREEN 19
#ifdef ANSI_COLORS
#define ANSI_ESC_RESET_TEXT "\x1b[0m"
#define ANSI_ESC_YELLOW_BG "\x1b[43m"
#define ANSI_ESC_WHITE_BG "\x1b[47m"
#define ANSI_ESC_RED_TEXT "\x1b[31m"
#define ANSI_ESC_YELLOW_TEXT "\x1b[33m"
#define ANSI_ESC_GREEN_TEXT "\x1b[32m"
#define ANSI_ESC_BLACK_TEXT "\1b[30m"
#define ANSI_ESC_WHITE_TEXT "\x1b[37m\x1b[1m"
#define ANSI_ESC_MAGENTA_TEXT "\x1b[35m"
#define ANSI_ESC_CYAN_TEXT "\x1b[36m"
#else
#define ANSI_ESC_RESET_TEXT ""
#define ANSI_ESC_WHITE_BG ""
#define ANSI_ESC_RED_TEXT "\n\n"
#define ANSI_ESC_YELLOW_TEXT "\n\n"
#define ANSI_ESC_GREEN_TEXT "\n\n"
#define ANSI_ESC_BLACK_TEXT ""
#define ANSI_ESC_WHITE_TEXT ""
#define ANSI_ESC_MAGENTA_TEXT ""
#define ANSI_ESC_CYAN_TEXT ""
#endif
#endif /* if !defined(PLATFORM_H) */