zephyr/drivers/display/uc81xx_regs.h
Andreas Sandberg d571b3136d drivers: uc81xx: Add support for overriding LUTs
Add support for overriding display LUTs in the UC81xx driver. This
makes it possible to use different LUTs for the full and partial
refresh profiles.

Signed-off-by: Andreas Sandberg <andreas@sandberg.uk>
2022-09-02 11:21:08 +02:00

135 lines
3.2 KiB
C

/*
* Copyright (c) 2020 PHYTEC Messtechnik GmbH
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef ZEPHYR_DRIVERS_DISPLAY_UC81XX_REGS_H_
#define ZEPHYR_DRIVERS_DISPLAY_UC81XX_REGS_H_
/* UC8176/UC8179 */
#define UC81XX_CMD_PSR 0x00
#define UC81XX_CMD_PWR 0x01
#define UC81XX_CMD_POF 0x02
#define UC81XX_CMD_PFS 0x03
#define UC81XX_CMD_PON 0x04
#define UC81XX_CMD_PMES 0x05
#define UC81XX_CMD_BTST 0x06
#define UC81XX_CMD_DSLP 0x07
#define UC81XX_CMD_DTM1 0x10
#define UC81XX_CMD_DSP 0x11
#define UC81XX_CMD_DRF 0x12
/* UC8179 only */
#define UC81XX_CMD_DTM2 0x13
#define UC81XX_CMD_DUSPI 0x15
#define UC81XX_CMD_AUTO 0x17
#define UC81XX_CMD_LUTOPT 0x2A
#define UC81XX_CMD_KWOPT 0x2B
#define UC81XX_CMD_LUTC 0x20
#define UC81XX_CMD_LUTWW 0x21
#define UC81XX_CMD_LUTKW 0x22
#define UC81XX_CMD_LUTWK 0x23
#define UC81XX_CMD_LUTKK 0x24
#define UC81XX_CMD_LUTBD 0x25
/* UC8176/UC8179 */
#define UC81XX_CMD_PLL 0x30
#define UC81XX_CMD_TSC 0x40
#define UC81XX_CMD_TSE 0x41
#define UC81XX_CMD_TSW 0x42
#define UC81XX_CMD_TSR 0x43
/* UC8179 */
#define UC81XX_CMD_PBC 0x44
/* UC8176/UC8179 - different register layouts */
#define UC81XX_CMD_CDI 0x50
/* UC8176/UC8179 */
#define UC81XX_CMD_LPD 0x51
/* UC8179 */
#define UC81XX_CMD_EVS 0x52
/* UC8176/UC8179 */
#define UC81XX_CMD_TCON 0x60
#define UC81XX_CMD_TRES 0x61
#define UC81XX_CMD_GSST 0x65
#define UC81XX_CMD_REV 0x70
#define UC81XX_CMD_FLG 0x71
#define UC81XX_CMD_AMV 0x80
#define UC81XX_CMD_VV 0x81
#define UC81XX_CMD_VDCS 0x82
#define UC81XX_CMD_PTL 0x90
#define UC81XX_CMD_PTIN 0x91
#define UC81XX_CMD_PTOUT 0x92
#define UC81XX_CMD_PGM 0xA0
#define UC81XX_CMD_APG 0xA1
#define UC81XX_CMD_ROTP 0xA2
#define UC81XX_CMD_CCSET 0xE0
#define UC81XX_CMD_PWS 0xE3
/* UC8179 */
#define UC81XX_CMD_LVSEL 0xE4
/* UC8176/UC8179 */
#define UC81XX_CMD_TSSET 0xE5
/* UC8179 */
#define UC81XX_CMD_TSBDRY 0xE7
#define UC81XX_PSR_REG BIT(5)
#define UC81XX_PSR_KW_R BIT(4)
#define UC81XX_PSR_UD BIT(3)
#define UC81XX_PSR_SHL BIT(2)
#define UC81XX_PSR_SHD BIT(1)
#define UC81XX_PSR_RST BIT(0)
#define UC81XX_AUTO_PON_DRF_POF 0xA5
#define UC81XX_AUTO_PON_DRF_POF_DSLP 0xA7
#define UC8176_CDI_VBD_MASK 0xc0
#define UC8176_CDI_VBD0 BIT(6)
#define UC8176_CDI_VBD1 BIT(7)
#define UC8176_CDI_DDX1 BIT(5)
#define UC8176_CDI_DDX0 BIT(4)
#define UC8176_CDI_CDI_MASK 0x0f
#define UC8179_CDI_REG_LENGTH 2U
#define UC8179_CDI_BDZ_DDX_IDX 0
#define UC8179_CDI_CDI_IDX 1
#define UC8179_CDI_BDZ BIT(7)
#define UC8179_CDI_BDV1 BIT(5)
#define UC8179_CDI_BDV0 BIT(4)
#define UC8179_CDI_N2OCP BIT(3)
#define UC8179_CDI_DDX1 BIT(1)
#define UC8179_CDI_DDX0 BIT(0)
struct uc81xx_tres {
uint16_t hres;
uint16_t vres;
} __packed;
BUILD_ASSERT(sizeof(struct uc81xx_tres) == 4);
struct uc81xx_ptl {
uint16_t hrst;
uint16_t hred;
uint16_t vrst;
uint16_t vred;
uint8_t flags;
} __packed;
BUILD_ASSERT(sizeof(struct uc81xx_ptl) == 9);
#define UC81XX_PTL_FLAG_PT_SCAN BIT(0)
/* Time constants in ms */
#define UC81XX_RESET_DELAY 10U
#define UC81XX_PON_DELAY 100U
#define UC81XX_BUSY_DELAY 1U
#endif /* ZEPHYR_DRIVERS_DISPLAY_UC81XX_REGS_H_ */