1*4882a593Smuzhiyun /* 2*4882a593Smuzhiyun * Header file for AT91/AT32 MULTI LAYER LCD Controller 3*4882a593Smuzhiyun * 4*4882a593Smuzhiyun * Data structure and register user interface 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Copyright (C) 2012 Atmel Corporation 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 9*4882a593Smuzhiyun */ 10*4882a593Smuzhiyun #ifndef __ATMEL_HLCDC_H__ 11*4882a593Smuzhiyun #define __ATMEL_HLCDC_H__ 12*4882a593Smuzhiyun 13*4882a593Smuzhiyun /* Atmel multi layer lcdc hardware registers */ 14*4882a593Smuzhiyun struct atmel_hlcd_regs { 15*4882a593Smuzhiyun u32 lcdc_lcdcfg0; 16*4882a593Smuzhiyun u32 lcdc_lcdcfg1; 17*4882a593Smuzhiyun u32 lcdc_lcdcfg2; 18*4882a593Smuzhiyun u32 lcdc_lcdcfg3; 19*4882a593Smuzhiyun u32 lcdc_lcdcfg4; 20*4882a593Smuzhiyun u32 lcdc_lcdcfg5; 21*4882a593Smuzhiyun u32 lcdc_lcdcfg6; 22*4882a593Smuzhiyun u32 res1; 23*4882a593Smuzhiyun u32 lcdc_lcden; 24*4882a593Smuzhiyun u32 lcdc_lcddis; 25*4882a593Smuzhiyun u32 lcdc_lcdsr; 26*4882a593Smuzhiyun u32 res2; 27*4882a593Smuzhiyun u32 lcdc_lcdidr; 28*4882a593Smuzhiyun u32 res3[3]; 29*4882a593Smuzhiyun u32 lcdc_basecher; 30*4882a593Smuzhiyun u32 res4[3]; 31*4882a593Smuzhiyun u32 lcdc_baseidr; 32*4882a593Smuzhiyun u32 res5[3]; 33*4882a593Smuzhiyun u32 lcdc_baseaddr; 34*4882a593Smuzhiyun u32 lcdc_basectrl; 35*4882a593Smuzhiyun u32 lcdc_basenext; 36*4882a593Smuzhiyun u32 lcdc_basecfg0; 37*4882a593Smuzhiyun u32 lcdc_basecfg1; 38*4882a593Smuzhiyun u32 lcdc_basecfg2; 39*4882a593Smuzhiyun u32 lcdc_basecfg3; 40*4882a593Smuzhiyun u32 lcdc_basecfg4; 41*4882a593Smuzhiyun }; 42*4882a593Smuzhiyun 43*4882a593Smuzhiyun #define LCDC_LCDCFG0_CLKPOL (0x1 << 0) 44*4882a593Smuzhiyun #define LCDC_LCDCFG0_CLKSEL (0x1 << 2) 45*4882a593Smuzhiyun #define LCDC_LCDCFG0_CLKPWMSEL (0x1 << 3) 46*4882a593Smuzhiyun #define LCDC_LCDCFG0_CGDISBASE (0x1 << 8) 47*4882a593Smuzhiyun #define LCDC_LCDCFG0_CGDISOVR1 (0x1 << 9) 48*4882a593Smuzhiyun #define LCDC_LCDCFG0_CGDISHEO (0x1 << 11) 49*4882a593Smuzhiyun #define LCDC_LCDCFG0_CGDISHCR (0x1 << 12) 50*4882a593Smuzhiyun #define LCDC_LCDCFG0_CLKDIV_Pos 16 51*4882a593Smuzhiyun #define LCDC_LCDCFG0_CLKDIV_Msk (0xff << LCDC_LCDCFG0_CLKDIV_Pos) 52*4882a593Smuzhiyun #define LCDC_LCDCFG0_CLKDIV(value) \ 53*4882a593Smuzhiyun ((LCDC_LCDCFG0_CLKDIV_Msk & ((value) << LCDC_LCDCFG0_CLKDIV_Pos))) 54*4882a593Smuzhiyun 55*4882a593Smuzhiyun #define LCDC_LCDCFG1_HSPW_Pos 0 56*4882a593Smuzhiyun #define LCDC_LCDCFG1_HSPW_Msk (0x3f << LCDC_LCDCFG1_HSPW_Pos) 57*4882a593Smuzhiyun #define LCDC_LCDCFG1_HSPW(value) \ 58*4882a593Smuzhiyun ((LCDC_LCDCFG1_HSPW_Msk & ((value) << LCDC_LCDCFG1_HSPW_Pos))) 59*4882a593Smuzhiyun #define LCDC_LCDCFG1_VSPW_Pos 16 60*4882a593Smuzhiyun #define LCDC_LCDCFG1_VSPW_Msk (0x3f << LCDC_LCDCFG1_VSPW_Pos) 61*4882a593Smuzhiyun #define LCDC_LCDCFG1_VSPW(value) \ 62*4882a593Smuzhiyun ((LCDC_LCDCFG1_VSPW_Msk & ((value) << LCDC_LCDCFG1_VSPW_Pos))) 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun #define LCDC_LCDCFG2_VFPW_Pos 0 65*4882a593Smuzhiyun #define LCDC_LCDCFG2_VFPW_Msk (0x3f << LCDC_LCDCFG2_VFPW_Pos) 66*4882a593Smuzhiyun #define LCDC_LCDCFG2_VFPW(value) \ 67*4882a593Smuzhiyun ((LCDC_LCDCFG2_VFPW_Msk & ((value) << LCDC_LCDCFG2_VFPW_Pos))) 68*4882a593Smuzhiyun #define LCDC_LCDCFG2_VBPW_Pos 16 69*4882a593Smuzhiyun #define LCDC_LCDCFG2_VBPW_Msk (0x3f << LCDC_LCDCFG2_VBPW_Pos) 70*4882a593Smuzhiyun #define LCDC_LCDCFG2_VBPW(value) \ 71*4882a593Smuzhiyun ((LCDC_LCDCFG2_VBPW_Msk & ((value) << LCDC_LCDCFG2_VBPW_Pos))) 72*4882a593Smuzhiyun 73*4882a593Smuzhiyun #define LCDC_LCDCFG3_HFPW_Pos 0 74*4882a593Smuzhiyun #define LCDC_LCDCFG3_HFPW_Msk (0xff << LCDC_LCDCFG3_HFPW_Pos) 75*4882a593Smuzhiyun #define LCDC_LCDCFG3_HFPW(value) \ 76*4882a593Smuzhiyun ((LCDC_LCDCFG3_HFPW_Msk & ((value) << LCDC_LCDCFG3_HFPW_Pos))) 77*4882a593Smuzhiyun #define LCDC_LCDCFG3_HBPW_Pos 16 78*4882a593Smuzhiyun #define LCDC_LCDCFG3_HBPW_Msk (0xff << LCDC_LCDCFG3_HBPW_Pos) 79*4882a593Smuzhiyun #define LCDC_LCDCFG3_HBPW(value) \ 80*4882a593Smuzhiyun ((LCDC_LCDCFG3_HBPW_Msk & ((value) << LCDC_LCDCFG3_HBPW_Pos))) 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun #define LCDC_LCDCFG4_PPL_Pos 0 83*4882a593Smuzhiyun #define LCDC_LCDCFG4_PPL_Msk (0x7ff << LCDC_LCDCFG4_PPL_Pos) 84*4882a593Smuzhiyun #define LCDC_LCDCFG4_PPL(value) \ 85*4882a593Smuzhiyun ((LCDC_LCDCFG4_PPL_Msk & ((value) << LCDC_LCDCFG4_PPL_Pos))) 86*4882a593Smuzhiyun #define LCDC_LCDCFG4_RPF_Pos 16 87*4882a593Smuzhiyun #define LCDC_LCDCFG4_RPF_Msk (0x7ff << LCDC_LCDCFG4_RPF_Pos) 88*4882a593Smuzhiyun #define LCDC_LCDCFG4_RPF(value) \ 89*4882a593Smuzhiyun ((LCDC_LCDCFG4_RPF_Msk & ((value) << LCDC_LCDCFG4_RPF_Pos))) 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun #define LCDC_LCDCFG5_HSPOL (0x1 << 0) 92*4882a593Smuzhiyun #define LCDC_LCDCFG5_VSPOL (0x1 << 1) 93*4882a593Smuzhiyun #define LCDC_LCDCFG5_VSPDLYS (0x1 << 2) 94*4882a593Smuzhiyun #define LCDC_LCDCFG5_VSPDLYE (0x1 << 3) 95*4882a593Smuzhiyun #define LCDC_LCDCFG5_DISPPOL (0x1 << 4) 96*4882a593Smuzhiyun #define LCDC_LCDCFG5_SERIAL (0x1 << 5) 97*4882a593Smuzhiyun #define LCDC_LCDCFG5_DITHER (0x1 << 6) 98*4882a593Smuzhiyun #define LCDC_LCDCFG5_DISPDLY (0x1 << 7) 99*4882a593Smuzhiyun #define LCDC_LCDCFG5_MODE_Pos 8 100*4882a593Smuzhiyun #define LCDC_LCDCFG5_MODE_Msk (0x3 << LCDC_LCDCFG5_MODE_Pos) 101*4882a593Smuzhiyun #define LCDC_LCDCFG5_MODE_OUTPUT_12BPP (0x0 << 8) 102*4882a593Smuzhiyun #define LCDC_LCDCFG5_MODE_OUTPUT_16BPP (0x1 << 8) 103*4882a593Smuzhiyun #define LCDC_LCDCFG5_MODE_OUTPUT_18BPP (0x2 << 8) 104*4882a593Smuzhiyun #define LCDC_LCDCFG5_MODE_OUTPUT_24BPP (0x3 << 8) 105*4882a593Smuzhiyun #define LCDC_LCDCFG5_VSPSU (0x1 << 12) 106*4882a593Smuzhiyun #define LCDC_LCDCFG5_VSPHO (0x1 << 13) 107*4882a593Smuzhiyun #define LCDC_LCDCFG5_GUARDTIME_Pos 16 108*4882a593Smuzhiyun #define LCDC_LCDCFG5_GUARDTIME_Msk (0x1f << LCDC_LCDCFG5_GUARDTIME_Pos) 109*4882a593Smuzhiyun #define LCDC_LCDCFG5_GUARDTIME(value) \ 110*4882a593Smuzhiyun ((LCDC_LCDCFG5_GUARDTIME_Msk & ((value) << LCDC_LCDCFG5_GUARDTIME_Pos))) 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun #define LCDC_LCDCFG6_PWMPS_Pos 0 113*4882a593Smuzhiyun #define LCDC_LCDCFG6_PWMPS_Msk (0x7 << LCDC_LCDCFG6_PWMPS_Pos) 114*4882a593Smuzhiyun #define LCDC_LCDCFG6_PWMPS(value) \ 115*4882a593Smuzhiyun ((LCDC_LCDCFG6_PWMPS_Msk & ((value) << LCDC_LCDCFG6_PWMPS_Pos))) 116*4882a593Smuzhiyun #define LCDC_LCDCFG6_PWMPOL (0x1 << 4) 117*4882a593Smuzhiyun #define LCDC_LCDCFG6_PWMCVAL_Pos 8 118*4882a593Smuzhiyun #define LCDC_LCDCFG6_PWMCVAL_Msk (0xff << LCDC_LCDCFG6_PWMCVAL_Pos) 119*4882a593Smuzhiyun #define LCDC_LCDCFG6_PWMCVAL(value) \ 120*4882a593Smuzhiyun ((LCDC_LCDCFG6_PWMCVAL_Msk & ((value) << LCDC_LCDCFG6_PWMCVAL_Pos))) 121*4882a593Smuzhiyun 122*4882a593Smuzhiyun #define LCDC_LCDEN_CLKEN (0x1 << 0) 123*4882a593Smuzhiyun #define LCDC_LCDEN_SYNCEN (0x1 << 1) 124*4882a593Smuzhiyun #define LCDC_LCDEN_DISPEN (0x1 << 2) 125*4882a593Smuzhiyun #define LCDC_LCDEN_PWMEN (0x1 << 3) 126*4882a593Smuzhiyun 127*4882a593Smuzhiyun #define LCDC_LCDDIS_CLKDIS (0x1 << 0) 128*4882a593Smuzhiyun #define LCDC_LCDDIS_SYNCDIS (0x1 << 1) 129*4882a593Smuzhiyun #define LCDC_LCDDIS_DISPDIS (0x1 << 2) 130*4882a593Smuzhiyun #define LCDC_LCDDIS_PWMDIS (0x1 << 3) 131*4882a593Smuzhiyun #define LCDC_LCDDIS_CLKRST (0x1 << 8) 132*4882a593Smuzhiyun #define LCDC_LCDDIS_SYNCRST (0x1 << 9) 133*4882a593Smuzhiyun #define LCDC_LCDDIS_DISPRST (0x1 << 10) 134*4882a593Smuzhiyun #define LCDC_LCDDIS_PWMRST (0x1 << 11) 135*4882a593Smuzhiyun 136*4882a593Smuzhiyun #define LCDC_LCDSR_CLKSTS (0x1 << 0) 137*4882a593Smuzhiyun #define LCDC_LCDSR_LCDSTS (0x1 << 1) 138*4882a593Smuzhiyun #define LCDC_LCDSR_DISPSTS (0x1 << 2) 139*4882a593Smuzhiyun #define LCDC_LCDSR_PWMSTS (0x1 << 3) 140*4882a593Smuzhiyun #define LCDC_LCDSR_SIPSTS (0x1 << 4) 141*4882a593Smuzhiyun 142*4882a593Smuzhiyun #define LCDC_LCDIDR_SOFID (0x1 << 0) 143*4882a593Smuzhiyun #define LCDC_LCDIDR_DISID (0x1 << 1) 144*4882a593Smuzhiyun #define LCDC_LCDIDR_DISPID (0x1 << 2) 145*4882a593Smuzhiyun #define LCDC_LCDIDR_FIFOERRID (0x1 << 4) 146*4882a593Smuzhiyun #define LCDC_LCDIDR_BASEID (0x1 << 8) 147*4882a593Smuzhiyun #define LCDC_LCDIDR_OVR1ID (0x1 << 9) 148*4882a593Smuzhiyun #define LCDC_LCDIDR_HEOID (0x1 << 11) 149*4882a593Smuzhiyun #define LCDC_LCDIDR_HCRID (0x1 << 12) 150*4882a593Smuzhiyun 151*4882a593Smuzhiyun #define LCDC_BASECHER_CHEN (0x1 << 0) 152*4882a593Smuzhiyun #define LCDC_BASECHER_UPDATEEN (0x1 << 1) 153*4882a593Smuzhiyun #define LCDC_BASECHER_A2QEN (0x1 << 2) 154*4882a593Smuzhiyun 155*4882a593Smuzhiyun #define LCDC_BASEIDR_DMA (0x1 << 2) 156*4882a593Smuzhiyun #define LCDC_BASEIDR_DSCR (0x1 << 3) 157*4882a593Smuzhiyun #define LCDC_BASEIDR_ADD (0x1 << 4) 158*4882a593Smuzhiyun #define LCDC_BASEIDR_DONE (0x1 << 5) 159*4882a593Smuzhiyun #define LCDC_BASEIDR_OVR (0x1 << 6) 160*4882a593Smuzhiyun 161*4882a593Smuzhiyun #define LCDC_BASECTRL_DFETCH (0x1 << 0) 162*4882a593Smuzhiyun #define LCDC_BASECTRL_LFETCH (0x1 << 1) 163*4882a593Smuzhiyun #define LCDC_BASECTRL_DMAIEN (0x1 << 2) 164*4882a593Smuzhiyun #define LCDC_BASECTRL_DSCRIEN (0x1 << 3) 165*4882a593Smuzhiyun #define LCDC_BASECTRL_ADDIEN (0x1 << 4) 166*4882a593Smuzhiyun #define LCDC_BASECTRL_DONEIEN (0x1 << 5) 167*4882a593Smuzhiyun 168*4882a593Smuzhiyun #define LCDC_BASECFG0_BLEN_Pos 4 169*4882a593Smuzhiyun #define LCDC_BASECFG0_BLEN_AHB_SINGLE (0x0 << 4) 170*4882a593Smuzhiyun #define LCDC_BASECFG0_BLEN_AHB_INCR4 (0x1 << 4) 171*4882a593Smuzhiyun #define LCDC_BASECFG0_BLEN_AHB_INCR8 (0x2 << 4) 172*4882a593Smuzhiyun #define LCDC_BASECFG0_BLEN_AHB_INCR16 (0x3 << 4) 173*4882a593Smuzhiyun #define LCDC_BASECFG0_DLBO (0x1 << 8) 174*4882a593Smuzhiyun 175*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_12BPP_RGB_444 (0x0 << 4) 176*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_16BPP_ARGB_4444 (0x1 << 4) 177*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_16BPP_RGBA_4444 (0x2 << 4) 178*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_16BPP_RGB_565 (0x3 << 4) 179*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_16BPP_TRGB_1555 (0x4 << 4) 180*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_18BPP_RGB_666 (0x5 << 4) 181*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_18BPP_RGB_666_PACKED (0x6 << 4) 182*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_19BPP_TRGB_1666 (0x7 << 4) 183*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_19BPP_TRGB_PACKED (0x8 << 4) 184*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_24BPP_RGB_888 (0x9 << 4) 185*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_24BPP_RGB_888_PACKED (0xA << 4) 186*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_25BPP_TRGB_1888 (0xB << 4) 187*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_32BPP_ARGB_8888 (0xC << 4) 188*4882a593Smuzhiyun #define LCDC_BASECFG1_RGBMODE_32BPP_RGBA_8888 (0xD << 4) 189*4882a593Smuzhiyun 190*4882a593Smuzhiyun #define LCDC_BASECFG2_XSTRIDE_Pos 0 191*4882a593Smuzhiyun #define LCDC_BASECFG2_XSTRIDE_Msk (0xffffffff << LCDC_BASECFG2_XSTRIDE_Pos) 192*4882a593Smuzhiyun #define LCDC_BASECFG2_XSTRIDE(value) \ 193*4882a593Smuzhiyun ((LCDC_BASECFG2_XSTRIDE_Msk & ((value) << LCDC_BASECFG2_XSTRIDE_Pos))) 194*4882a593Smuzhiyun 195*4882a593Smuzhiyun #define LCDC_BASECFG3_BDEF_Pos 0 196*4882a593Smuzhiyun #define LCDC_BASECFG3_BDEF_Msk (0xff << LCDC_BASECFG3_BDEF_Pos) 197*4882a593Smuzhiyun #define LCDC_BASECFG3_BDEF(value) \ 198*4882a593Smuzhiyun ((LCDC_BASECFG3_BDEF_Msk & ((value) << LCDC_BASECFG3_BDEF_Pos))) 199*4882a593Smuzhiyun #define LCDC_BASECFG3_GDEF_Pos 8 200*4882a593Smuzhiyun #define LCDC_BASECFG3_GDEF_Msk (0xff << LCDC_BASECFG3_GDEF_Pos) 201*4882a593Smuzhiyun #define LCDC_BASECFG3_GDEF(value) \ 202*4882a593Smuzhiyun ((LCDC_BASECFG3_GDEF_Msk & ((value) << LCDC_BASECFG3_GDEF_Pos))) 203*4882a593Smuzhiyun #define LCDC_BASECFG3_RDEF_Pos 16 204*4882a593Smuzhiyun #define LCDC_BASECFG3_RDEF_Msk (0xff << LCDC_BASECFG3_RDEF_Pos) 205*4882a593Smuzhiyun #define LCDC_BASECFG3_RDEF(value) \ 206*4882a593Smuzhiyun ((LCDC_BASECFG3_RDEF_Msk & ((value) << LCDC_BASECFG3_RDEF_Pos))) 207*4882a593Smuzhiyun 208*4882a593Smuzhiyun #define LCDC_BASECLUT_BCLUT_Pos 0 209*4882a593Smuzhiyun #define LCDC_BASECLUT_BCLUT_Msk (0xff << LCDC_BASECLUT_BCLUT_Pos) 210*4882a593Smuzhiyun #define LCDC_BASECLUT_GCLUT_Pos 8 211*4882a593Smuzhiyun #define LCDC_BASECLUT_GCLUT_Msk (0xff << LCDC_BASECLUT_GCLUT_Pos) 212*4882a593Smuzhiyun #define LCDC_BASECLUT_RCLUT_Pos 16 213*4882a593Smuzhiyun #define LCDC_BASECLUT_RCLUT_Msk (0xff << LCDC_BASECLUT_RCLUT_Pos) 214*4882a593Smuzhiyun 215*4882a593Smuzhiyun #define LCDC_BASECFG4_DMA (0x1 << 8) 216*4882a593Smuzhiyun #define LCDC_BASECFG4_REP (0x1 << 9) 217*4882a593Smuzhiyun 218*4882a593Smuzhiyun struct lcd_dma_desc { 219*4882a593Smuzhiyun u32 address; 220*4882a593Smuzhiyun u32 control; 221*4882a593Smuzhiyun u32 next; 222*4882a593Smuzhiyun }; 223*4882a593Smuzhiyun 224*4882a593Smuzhiyun #define ATMEL_LCDC_LUT(n) (0x0400 + ((n)*4)) 225*4882a593Smuzhiyun 226*4882a593Smuzhiyun #endif /* __ATMEL_HLCDC_H__ */ 227