blob: 8dc4359881c4e2c886795d1689fa0287a7ded31c [file] [log] [blame]
/*
*
**************************************************************************
** STMicroelectronics **
**************************************************************************
** marco.cali@st.com **
**************************************************************************
* *
* HW related data *
* *
**************************************************************************
**************************************************************************
*
*/
/*!
* \file ftsHardware.h
* \brief Contains all the definitions and information related to the IC
* from an hardware point of view
*/
#ifndef FTS_HARDWARE_H
#define FTS_HARDWARE_H
/* DIGITAL CHIP INFO */
#define ALIX
#ifdef ALIX
#define DCHIP_ID_0 0x36 /* /< LSB chip ID for FTM5 */
#define DCHIP_ID_1 0x48 /* /< MSB chip ID for FTM5 */
#else
#define DCHIP_ID_0 0x36 /* /< LSB chip ID for FTM5 */
#define DCHIP_ID_1 0x39 /* /< MSB chip ID for FTM5 */
#endif
#define DCHIP_FW_VER_BYTE 2 /* /< number of bytes of the fw
* versions */
/* CHUNKS */
#define READ_CHUNK 1024 /* /< chunk dimension of
* a single i2c read,
* max allowed value is 2kB */
#define WRITE_CHUNK 1024 /* /< chunk dimension of
* a single i2c write,
* max allowed value is 2kB */
#define MEMORY_CHUNK 1024 /* /< chunk dimenasion of
* a single i2c write on mem,
* max allowed value is 2kB */
#define READ_FILTERED_RAW /* /< To understand
* which type of RAW data to read
* OCTA panel needs to read Filtered RAW */
/* PROTOCOL INFO */
#define I2C_INTERFACE
#ifdef I2C_INTERFACE
#define I2C_SAD 0x49 /* /< slave address of the IC */
#else
#define SPI_DELAY_CS 10 /* /< time in usec to wait
* before rising the CS */
#endif
#define IER_ENABLE 0x41 /* /< value to write in IER_ADDR
* to enable the interrupts */
#define IER_DISABLE 0x00 /* /< value to write in IER_ADDR
* to disable the interrupts
**/
/* FLASH COMMAND */
/** @defgroup flash_command Flash Commands
* All the commands that works with the flash of the IC
* @{
*/
#define FLASH_CMD_UNLOCK 0xF7
#define FLASH_CMD_READ_REGISTER 0xFA
#define FLASH_CMD_WRITE_REGISTER 0xFA
/* FLASH UNLOCK PARAMETER */
#define FLASH_UNLOCK_CODE0 0x25
#define FLASH_UNLOCK_CODE1 0x20
#define FLASH_UNLOCK_CODE2 0x6B
#define FLASH_UNLOCK_CODE3 0x00
/* FLASH UVLO ENABLE PARAMETER */
#define FLASH_UVLO_ENABLE_CODE0 0x1B
#define FLASH_UVLO_ENABLE_CODE1 0x66
/* FLASH AUTOPOWERDOWN ENABLE PARAMETER */
#define FLASH_AUTOPOWERDOWN_ENABLE_CODE0 0x68
#define FLASH_AUTOPOWERDOWN_ENABLE_CODE1 0x13
#define INFO_BLOCK_SIZE 16384
#define INFO_BLOCK_LOCKDOWN 0x1800
#define INFO_BLOCK_IOFF 0x19E8
#define INFO_BLOCK_OSC 0x1EAC
#define INFO_BLOCK_AOFFSET 0x1D48
#define INFO_BLOCK_CG 0x1E08
/* FLASH ERASE and DMA PARAMETER */
#define FLASH_ERASE_START 0x80
#define FLASH_ERASE_CODE1 0xC0
#define FLASH_DMA_CODE1 0xC0
#define FLASH_ERASE_UNLOCK_CODE0 0xDE
#define FLASH_ERASE_UNLOCK_CODE1 0x03
#define FLASH_ERASE_CODE0 0x6A
#define FLASH_DMA_CODE0 0x71
#define FLASH_DMA_CONFIG 0x72
#define FLASH_NUM_PAGE 32 /* /< number of pages in main
* flash */
#define FLASH_CX_PAGE_START 28 /* /< starting page which
* contain Cx data */
#define FLASH_CX_PAGE_END 30 /* /< last page which contain Cx
* data */
#define FLASH_PANEL_PAGE_START 26 /* /< starting page which
* contain Panel Init data */
#define FLASH_PANEL_PAGE_END 27 /* /< last page which contain
* Panel Init data */
/** @} */
/* FLASH ADDRESS */
#define FLASH_ADDR_CODE 0x00000000 /* /< address of code in
* FTI */
#define FLASH_ADDR_CONFIG 0x00007C00 /* /< address of config
* in FTI */
#define FLASH_ADDR_CX 0x00007000 /* /< address of Init
* data in FTI */
/* SIZES FW, CODE, CONFIG, MEMH */
/** @defgroup fw_file FW file info
* All the info related to the fw file
* @{
*/
#define FW_HEADER_SIZE 64 /* /< dimension of the header in
* .fts file */
#define FW_HEADER_SIGNATURE 0xAA55AA55 /* /< header signature
* */
#define FW_FTB_VER 0x00000001 /* /< .ftb version */
#define FW_BYTES_ALIGN 4 /* /< allignment of the info */
#define FW_BIN_VER_OFFSET 16 /* /< offset of the fw version
* in the .ftb file */
#define FW_BIN_CONFIG_ID_OFFSET 20 /* /< offset of the config id in
* the .ftb file */
#define FW_CX_VERSION (16 + 4)/* CX version offset in sec2 of
* FW */
/** @} */
/* FIFO */
#define FIFO_EVENT_SIZE 8 /* /< number of bytes of one
* event */
#define FIFO_DEPTH 32 /* /< max number of events that
* the FIFO can collect before
* going in overflow in FTM5 */
#ifdef I2C_INTERFACE
#define FIFO_CMD_READALL 0x86 /* /< command to read all
* the events in the FIFO */
#else
#define FIFO_CMD_READALL 0x87 /* /< command to read all
* the events in the FIFO */
#endif
#define FIFO_CMD_READONE FIFO_CMD_READALL/* /< commad to read
* one event from FIFO
**/
/* OP CODES FOR MEMORY (based on protocol) */
#ifdef I2C_INTERFACE
#define FTS_CMD_HW_REG_R 0xFA /* /< command to read an hw register if
* FTI */
#define FTS_CMD_HW_REG_W 0xFA /* /< command to write an hw register if
* FTI */
#define FTS_CMD_FRAMEBUFFER_W 0xA6 /* /< command to write the framebuffer
* if FTI
*/
#define FTS_CMD_FRAMEBUFFER_R 0xA6 /* /< command to read the framebuffer if
* FTI */
#define FTS_CMD_CONFIG_R 0xA8 /* /< command to read the config memory
* if FTI */
#define FTS_CMD_CONFIG_W 0xA8 /* /< command to write the config memory
* if FTI */
#else
#define FTS_CMD_HW_REG_R 0xFB /* /< command to read an hw register if
* FTI */
#define FTS_CMD_HW_REG_W 0xFA /* /< command to write an hw register if
* FTI */
#define FTS_CMD_FRAMEBUFFER_W 0xA6 /* /< command to write the framebuffer
* if FTI
*/
#define FTS_CMD_FRAMEBUFFER_R 0xA7 /* /< command to read the framebuffer if
* FTI */
#define FTS_CMD_CONFIG_R 0xA9 /* /< command to read the config memory
* if FTI */
#define FTS_CMD_CONFIG_W 0xA8 /* /< command to write the config memory
* if FTI */
#endif
/* DUMMY BYTES DATA */
#ifndef I2C_INTERFACE
#define DUMMY_HW_REG 1 /* /< 1 if the first byte read from HW
* register is dummy */
#define DUMMY_FRAMEBUFFER 1 /* /< 1 if the first byte read from
* Frame buffer is dummy */
#define DUMMY_CONFIG 1 /* /< 1 if the first byte read from
* Config Memory is dummy */
#define DUMMY_FIFO 1 /* /< 1 if the first byte read from FIFO
* is dummy */
#else
#define DUMMY_HW_REG 0 /* /< 1 if the first byte read from HW
* register is dummy */
#define DUMMY_FRAMEBUFFER 0 /* /< 1 if the first byte read from
* Frame buffer is dummy */
#define DUMMY_CONFIG 0 /* /< 1 if the first byte read from
* Config Memory is dummy */
#define DUMMY_FIFO 0 /* /< 1 if the first byte read from FIFO
* is dummy */
#endif
/** @defgroup hw_adr HW Address
* @ingroup address
* Important addresses of hardware registers (and sometimes their important
* values)
* @{
*/
/* IMPORTANT HW ADDRESSES (u64) */
#define ADDR_FRAMEBUFFER ((u64)0x0000000000000000) /* /< frame
* buffer
* address in
* memory */
#define ADDR_ERROR_DUMP ((u64)0x000000000000EF80) /* /< start
* address dump
* error log */
/* SYSTEM RESET INFO */
#define ADDR_SYSTEM_RESET ((u64)0x0000000020000024) /* /< address of
* System
* control
* register in
* FTI */
/* value to write in SYSTEM_RESET_ADDRESS to perform a system reset in FTM5 */
#define SYSTEM_RESET_VALUE 0x81
/* REMAP REGISTER */
#define ADDR_BOOT_OPTION ((u64)0x0000000020000025) /* /< address of
* Boot option
* register */
/* INTERRUPT INFO */
#define ADDR_IER ((u64)0x0000000020000029) /* /< address of
* the Interrupt
* enable
* register in
* FTMI */
/* Chip ID/Fw Version */
#define ADDR_DCHIP_ID ((u64)0x0000000020000000) /* /< chip id
* address for
* FTI */
#define ADDR_DCHIP_FW_VER ((u64)0x0000000020000004) /* /< fw version
* address for
* FTI */
/* INTERFACE REGISTER */
#define ADDR_ICR ((u64)0x000000002000002D) /* /< address of
* Device
* control
* register
* to set the
* communication
* protocol
* (SPI/I2C) */
#define SPI4_MASK 0x02 /* /< bit to set spi4 */
#define ADDR_FLASH_STATUS ((u64)0x0000000020000068)
#define ADDR_INFOBLOCK ((u64)0x0000000000040000)
/* CRC ADDR */
#define ADDR_CRC ((u64)0x0000000020000078) /* /< address of
* the CRC
* control
* register in
* FTI */
#define CRC_MASK 0x03 /* /< bitmask which reveal if
* there is a CRC error in the flash */
#define ADDR_CONFIG_OFFSET ((u64)0x0000000000000000) /* /< config
* address in
* memory if FTI
* */
#define ADDR_GPIO_INPUT ((u64)0x0000000020000030) /* /< address of
* GPIO input
* register */
#define ADDR_GPIO_DIRECTION ((u64)0x0000000020000032) /* /< address of
* GPIO
* direction
* register */
#define ADDR_GPIO_PULLUP ((u64)0x0000000020000034) /* /< address of
* GPIO pullup
* register */
#define ADDR_GPIO_CONFIG_REG0 ((u64)0x000000002000003D) /* /< address of
* GPIO config
* register */
#define ADDR_GPIO_CONFIG_REG2 ((u64)0x000000002000003F) /* /< address of
* GPIO config
* register */
#define ADDR_GPIO_CONFIG_REG3 ((u64)0x000000002000003E) /* /< address of
* GPIO config
* register */
/**@}*/
#endif