#define PS711X_PADR 0x000
#define PS711X_PBDR 0x001
#define PS711X_PCDR 0x002
#define PS711X_PDDR 0x003
#define PS711X_PADDR 0x040
#define PS711X_PBDDR 0x041
#define PS711X_PCDDR 0x042
#define PS711X_PDDDR 0x043
#define PS711X_PEDR 0x080
#define PS711X_PEDDR 0x0c0
#define PS711X_SYSCON 0x100
#define SYSCON_IRTXM (1 << 20)
#define SYSCON_WAKEDIS (1 << 19)
#define SYSCON_EXCKEN (1 << 18)
#define SYSCON_ADCKSEL (0x3 << 16)
#define SYSCON_SIREN (1 << 15)
#define SYSCON_CDENRX (1 << 14)
#define SYSCON_CDENTX (1 << 13)
#define SYSCON_LCDEN (1 << 12)
#define SYSCON_DBGEN (1 << 11)
#define SYSCON_BZMOD (1 << 10)
#define SYSCON_BZTOG (1 << 9)
#define SYSCON_UARTEN (1 << 8)
#define SYSCON_TC2S (1 << 7)
#define SYSCON_TC2M (1 << 6)
#define SYSCON_TC1S (1 << 5)
#define SYSCON_TC1M (1 << 4)
#define SYSCON_KBDSCAN_MASK (0xf << 0)
#define PS711X_SYSFLG 0x140
#define SYSFLG_VERID(x) (((x) >> 30) & 0x3)
#define SYSFLG_BOOT8BIT (1 << 27)
#define SYSFLG_SSIBUSY (1 << 26)
#define SYSFLG_CTXFF (1 << 25)
#define SYSFLG_CRXFE (1 << 24)
#define SYSFLG_UTXFF (1 << 23)
#define SYSFLG_URXFE (1 << 22)
#define SYSFLG_RTCDIV (0x3f << 16)
#define SYSFLG_CLDFLG (1 << 15)
#define SYSFLG_PFFLG (1 << 14)
#define SYSFLG_RSTFLG (1 << 13)
#define SYSFLG_NBFLG (1 << 12)
#define SYSFLG_UBUSY (1 << 11)
#define SYSFLG_DCD (1 << 10)
#define SYSFLG_DSR (1 << 9)
#define SYSFLG_CTS (1 << 8)
#define SYSFLG_DID (1 << 7)
#define SYSFLG_WUON (1 << 3)
#define SYSFLG_WUDR (1 << 2)
#define SYSFLG_DCDET (1 << 1)
#define SYSFLG_MCDR (1 << 0)
#define PS711X_MEMCFG1 0x180
#define MEMCFG1_NCSCFG(n, x) ((x) << ((n) << 3))
#define PS711X_MEMCFG2 0x1c0
#define MEMCFG2_CSCFG(n, x) ((x) << ((n) << 3))
#define CSCFG_CLKEN (1 << 7)
#define CSCFG_SQAEN (1 << 6)
#define CSCFG_SAWS_MASK (0x3 << 4)
#define CSCFG_RAWS_MASK (0x3 << 2)
#define CSCFG_BUSWIDTH_MASK (0x3 << 0)
#define PS711X_DRFPR 0x200
#define DRFPR_RFSHEN (1 << 7)
#define DRFPR_RFDIV_MASK (0x7f << 0)
#define PS711X_INTSR 0x240
#define PS711X_INTMR 0x280
#define PS711X_LCDCON 0x2c0
#define LCDCON_GSMD (1 << 31)
#define LCDCON_GSEN (1 << 30)
#define LCDCON_ACP_SFT 25
#define LCDCON_ACP_MSK 0x1f
#define LCDCON_ACP(b) ((((b) + 1) & LCDCON_ACP_MSK) << LCDCON_ACP_SFT)
#define LCDCON_PP_SFT 19
#define LCDCON_PP_MSK 0x3f
#define LCDCON_PP(b) (((526628 / (b) - 1) & LCDCON_PP_MSK) << LCDCON_PP_SFT)
#define LCDCON_LL_SFT 13
#define LCDCON_LL_MSK 0x3f
#define LCDCON_LL(b) ((((b) / 16 - 1) & LCDCON_LL_MSK) << LCDCON_LL_SFT)
#define LCDCON_VBS_SFT 0
#define LCDCON_VBS_MSK 0x1fff
#define LCDCON_VBS(b) ((((b) / 128 - 1) & LCDCON_VBS_MSK) << LCDCON_VBS_SFT)
#define PS711X_TC1D 0x300
#define PS711X_TC2D 0x340
#define PS711X_RTCDR 0x380
#define PS711X_RTCMR 0x3c0
#define PS711X_PMPCON 0x400
#define PS711X_CODR 0x440
#define PS711X_UARTDR 0x480
#define UARTDR_OVERR (1 << 10)
#define UARTDR_PARERR (1 << 9)
#define UARTDR_FRMERR (1 << 8)
#define UARTDR_RXDATA_MASK 0xff
#define PS711X_UBRLCR 0x4c0
#define UBRLCR_WRDLEN_MASK (0x3 << 17)
#define UBRLCR_WRDLEN_8B (0x3 << 17)
#define UBRLCR_WRDLEN_7B (0x2 << 17)
#define UBRLCR_WRDLEN_6B (0x1 << 17)
#define UBRLCR_WRDLEN_5B (0x0 << 17)
#define UBRLCR_FIFOEN (1 << 16)
#define UBRLCR_XSTOP (1 << 15)
#define UBRLCR_EVENPRT (1 << 14)
#define UBRLCR_PRTEN (1 << 13)
#define UBRLCR_BREAK (1 << 12)
#define UBRLCR_BRD_MASK (0xfff << 0)
#define PS711X_SYNCIO 0x500
#define PS711X_PALLSW 0x540
#define PS711X_PALMSW 0x580
#define PS711X_STFCLR 0x5c0
#define PS711X_BLEOI 0x600
#define PS711X_MCEOI 0x640
#define PS711X_TEOI 0x680
#define PS711X_TC1EOI 0x6c0
#define PS711X_TC2EOI 0x700
#define PS711X_RTCEOI 0x740
#define PS711X_UMSEOI 0x780
#define PS711X_COEOI 0x7c0
#define PS711X_HALT 0x800
#define PS711X_STDBY 0x840
#define IRQ_EXTFIQ 0
#define IRQ_BLINT 1
#define IRQ_WEINT 2
#define IRQ_MCINT 3
#define IRQ_CSINT 4
#define IRQ_EINT1 5
#define IRQ_EINT2 6
#define IRQ_EINT3 7
#define IRQ_TC1DI 8
#define IRQ_TC2DI 9
#define IRQ_RTCMI 10
#define IRQ_TINT 11
#define IRQ_UTXINT 12
#define IRQ_URXINT 13
#define IRQ_UMSINT 14
#define IRQ_SSEOTI 15