Hi,
I'm working on a i.MX7Dual SABRE board with X-IMXEBOOKDC4 daughter board, trying to get the 13.3" E-ink display working.
My display model is ES133UT2. I'm connecting the display on J2 header of the daughter board. I received the epdc_ES133UT2.fw from nxp, which I've placed in /lib/firmware/imx /epdc/.
My case:
static struct fb_videomode es133ut2mode = {
.name = "ES133UT2",
.refresh=75,
.xres=1600,
.yres=1200,
.pixclock=80000000,
.left_margin=20,
.right_margin=56,
.upper_margin=4,
.lower_margin=7,
.hsync_len=4,
.vsync_len=1,
.sync=0,
.vmode=FB_VMODE_NONINTERLACED,
.flag=0,
};
static struct imx_epdc_fb_mode panel_modes[] = {
{
&es133ut2mode, /* struct fb_videomode *mode */
4, /* vscan_holdoff */
10, /* sdoed_width */
20, /* sdoed_delay */
10, /* sdoez_width */
20, /* sdoez_delay */
796, /* GDCLK_HP */
481, /* GDSP_OFF */
0, /* GDOE_OFF */
39, /* gdclk_offs */
1, /* num_ce */
},
baudrate=115200
boot_fdt=try
bootcmd=mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootdelay=3
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc0
ethact=FEC0
ethaddr=00:04:9f:04:e6:2a
ethprime=FEC
fdt_addr=0x83000000
fdt_file=imx7d-sdb-epdc.dtb
fdt_high=0xffffffff
image=zImage
initrd_addr=0x83800000
initrd_high=0xffffffff
ip_dyn=yes
loadaddr=0x80800000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
loadm4image=fatload mmc ${mmcdev}:${mmcpart} 0x7F8000 ${m4image}
m4boot=run loadm4image; bootaux 0x7F8000
m4image=m4_qspi.bin
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
mmcdev=0
mmcpart=1
mmcroot=/dev/mmcblk0p2 rootwait rw
netargs=setenv bootargs console=${console},${baudrate} root=/dev/nfs ip=dhcp nfsroot=${serverip}:${nfsroot},v3,tcp
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootz ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootz; else echo WARN: Cannot load the DT; fi; fi; else bootz; fi;
script=boot.scr
Environment size: 2201/8188 bytes
root@imx7dsabresd:~# dmesg | grep epdc
imx_epdc_v2_fb 306f0000.epdc: Direct firmware load for imx/epdc/epdc_ES133UT2.fw failed with error -2
imx_epdc_v2_fb 306f0000.epdc: Falling back to user helper
root@imx7dsabresd:~# ls -l /dev/fb*
lrwxrwxrwx 1 root root 3 Jan 1 1970 /dev/fb -> fb0
crw-rw---- 1 root video 29, 0 Jan 1 1970 /dev/fb0
crw-rw---- 1 root video 29, 1 Jan 1 1970 /dev/fb1
mode "1600x1200-0"
# D: 0.012 MHz, H: 0.007 kHz, V: 0.006 Hz
geometry 1600 1200 1600 2560 16
timings 83333333 20 56 4 7 4 1
rgba 5/11,6/5,5/0,0/0
endmode
I found out about the changes I need to make from the threads
I.MX7Dual - EPDC ED133UT2 - display problem
i.MX7D - EPD ED133UT2 - Display problems
Still the 13.3" is displaying weird things.

Not even the boot splash is coming up.
I tried the epdc unit tests and my own tests with similar results.
I also tried running it on 6" configs and its respective waveform like roberto pozzi did, still no luck.
I'm not sure what's wrong here.
People having similar problems please help asap.
UPDATE:
After turning on the DEBUG flag in epdc driver, here is the full log.
root@imx7dsabresd:~# dmesg | grep epdc
Kernel command line: console=ttymxc0,115200 root=/dev/mmcblk0p2 rootwait rw epdc video=mxcepdcfb:ES133UT2,bpp=16
imx_epdc_v2_fb 306f0000.epdc: resolution 1600x1200, bpp 16
imx_epdc_v2_fb 306f0000.epdc: memory to allocate: 8192000
imx_epdc_v2_fb 306f0000.epdc: allocated at ac100000:0xac100000
imx_epdc_v2_fb 306f0000.epdc: EPDC version = 30
imx_epdc_v2_fb 306f0000.epdc: allocated 2048000 bytes @ 0xA8600000
imx_epdc_v2_fb 306f0000.epdc: allocated 2048000 bytes @ 0xA8800000
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: Direct firmware load for imx/epdc/epdc_ES133UT2.fw failed with error -2
imx_epdc_v2_fb 306f0000.epdc: Falling back to user helper
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: Firmware Header:
imx_epdc_v2_fb 306f0000.epdc: wi0 0xf261fe83
imx_epdc_v2_fb 306f0000.epdc: wi1 0x00016c54
imx_epdc_v2_fb 306f0000.epdc: wi2 0x00001665
imx_epdc_v2_fb 306f0000.epdc: wi3 0x00420011
imx_epdc_v2_fb 306f0000.epdc: wi4 0x4f015923
imx_epdc_v2_fb 306f0000.epdc: wi5 0x00009600
imx_epdc_v2_fb 306f0000.epdc: wi6 0x0000004b
imx_epdc_v2_fb 306f0000.epdc: xwia:24 0x000040
imx_epdc_v2_fb 306f0000.epdc: cs1:8 0xbb
imx_epdc_v2_fb 306f0000.epdc: wmta:24 0x00005f
imx_epdc_v2_fb 306f0000.epdc: fvsn:8 0x01
imx_epdc_v2_fb 306f0000.epdc: luts:8 0x00
imx_epdc_v2_fb 306f0000.epdc: mc:8 0x05
imx_epdc_v2_fb 306f0000.epdc: trc:8 0x0d
imx_epdc_v2_fb 306f0000.epdc: reserved0_0 0x01
imx_epdc_v2_fb 306f0000.epdc: eb:8 0xff
imx_epdc_v2_fb 306f0000.epdc: sb:8 0xfc
imx_epdc_v2_fb 306f0000.epdc: reserved0_1 0x01
imx_epdc_v2_fb 306f0000.epdc: reserved0_2 0x00
imx_epdc_v2_fb 306f0000.epdc: reserved0_3 0x00
imx_epdc_v2_fb 306f0000.epdc: reserved0_4 0x00
imx_epdc_v2_fb 306f0000.epdc: reserved0_5 0x00
imx_epdc_v2_fb 306f0000.epdc: cs2:8 0x6f
imx_epdc_v2_fb 306f0000.epdc: trt entry #0 = 0x0
imx_epdc_v2_fb 306f0000.epdc: trt entry #1 = 0x3
imx_epdc_v2_fb 306f0000.epdc: trt entry #2 = 0x6
imx_epdc_v2_fb 306f0000.epdc: trt entry #3 = 0x9
imx_epdc_v2_fb 306f0000.epdc: trt entry #4 = 0xc
imx_epdc_v2_fb 306f0000.epdc: trt entry #5 = 0xf
imx_epdc_v2_fb 306f0000.epdc: trt entry #6 = 0x12
imx_epdc_v2_fb 306f0000.epdc: trt entry #7 = 0x15
imx_epdc_v2_fb 306f0000.epdc: trt entry #8 = 0x18
imx_epdc_v2_fb 306f0000.epdc: trt entry #9 = 0x1b
imx_epdc_v2_fb 306f0000.epdc: trt entry #10 = 0x1e
imx_epdc_v2_fb 306f0000.epdc: trt entry #11 = 0x21
imx_epdc_v2_fb 306f0000.epdc: trt entry #12 = 0x26
imx_epdc_v2_fb 306f0000.epdc: trt entry #13 = 0x2b
imx_epdc_v2_fb 306f0000.epdc: Using temperature index 6
imx_epdc_v2_fb 306f0000.epdc: Waveform file does not support advanced algorithms
imx_epdc_v2_fb 306f0000.epdc: Using temperature index 6
imx_epdc_v2_fb 306f0000.epdc: EPDC Powerup
imx_epdc_v2_fb 306f0000.epdc: epdc busfreq high request.
imx_epdc_v2_fb 306f0000.epdc: Mode0 update - Waiting for LUT to complete...
imx_epdc_v2_fb 306f0000.epdc: Cleared LUT complete for init update
imx_epdc_v2_fb 306f0000.epdc: Mode0 init complete
imx_epdc_v2_fb 306f0000.epdc: EPDC Powerdown
imx_epdc_v2_fb 306f0000.epdc: epdc busfreq high release.
imx_epdc_v2_fb 306f0000.epdc: Waiting for marker 305419896
imx_epdc_v2_fb 306f0000.epdc: Found a pending update!
imx_epdc_v2_fb 306f0000.epdc: Starting PxP legacy process.
imx_epdc_v2_fb 306f0000.epdc: EPDC Powerup
imx_epdc_v2_fb 306f0000.epdc: epdc busfreq high request.
imx_epdc_v2_fb 306f0000.epdc: TX completed
imx_epdc_v2_fb 306f0000.epdc: Starting PxP WFE_A process.
imx_epdc_v2_fb 306f0000.epdc: TX completed
imx_epdc_v2_fb 306f0000.epdc: hist_stat = 0x18, new waveform = 0x2
imx_epdc_v2_fb 306f0000.epdc:
imx_epdc_v2_fb 306f0000.epdc: EPDC interrupts fired = 0x0, LUTS1 fired = 0x2, LUTS2 fired = 0x0
imx_epdc_v2_fb 306f0000.epdc: LUT 1 completed
imx_epdc_v2_fb 306f0000.epdc: Signaling marker 305419896
imx_epdc_v2_fb 306f0000.epdc: EPDC Powerdown
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: epdc busfreq high release.
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: blank = 1
imx_epdc_v2_fb 306f0000.epdc: mxc_epdc_fb_pan_display: var->yoffset 0, info->var.yoffset 0
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: setcmap
imx_epdc_v2_fb 306f0000.epdc: blank = 0