1ab42b818SMauro Carvalho Chehab================================ 2ab42b818SMauro Carvalho ChehabDriver for EP93xx LCD controller 3ab42b818SMauro Carvalho Chehab================================ 4ab42b818SMauro Carvalho Chehab 5ab42b818SMauro Carvalho ChehabThe EP93xx LCD controller can drive both standard desktop monitors and 6ab42b818SMauro Carvalho Chehabembedded LCD displays. If you have a standard desktop monitor then you 7ab42b818SMauro Carvalho Chehabcan use the standard Linux video mode database. In your board file:: 8ab42b818SMauro Carvalho Chehab 9ab42b818SMauro Carvalho Chehab static struct ep93xxfb_mach_info some_board_fb_info = { 10ab42b818SMauro Carvalho Chehab .num_modes = EP93XXFB_USE_MODEDB, 11ab42b818SMauro Carvalho Chehab .bpp = 16, 12ab42b818SMauro Carvalho Chehab }; 13ab42b818SMauro Carvalho Chehab 14ab42b818SMauro Carvalho ChehabIf you have an embedded LCD display then you need to define a video 15ab42b818SMauro Carvalho Chehabmode for it as follows:: 16ab42b818SMauro Carvalho Chehab 17ab42b818SMauro Carvalho Chehab static struct fb_videomode some_board_video_modes[] = { 18ab42b818SMauro Carvalho Chehab { 19ab42b818SMauro Carvalho Chehab .name = "some_lcd_name", 20ab42b818SMauro Carvalho Chehab /* Pixel clock, porches, etc */ 21ab42b818SMauro Carvalho Chehab }, 22ab42b818SMauro Carvalho Chehab }; 23ab42b818SMauro Carvalho Chehab 24ab42b818SMauro Carvalho ChehabNote that the pixel clock value is in pico-seconds. You can use the 25ab42b818SMauro Carvalho ChehabKHZ2PICOS macro to convert the pixel clock value. Most other values 26ab42b818SMauro Carvalho Chehabare in pixel clocks. See Documentation/fb/framebuffer.rst for further 27ab42b818SMauro Carvalho Chehabdetails. 28ab42b818SMauro Carvalho Chehab 29ab42b818SMauro Carvalho ChehabThe ep93xxfb_mach_info structure for your board should look like the 30ab42b818SMauro Carvalho Chehabfollowing:: 31ab42b818SMauro Carvalho Chehab 32ab42b818SMauro Carvalho Chehab static struct ep93xxfb_mach_info some_board_fb_info = { 33ab42b818SMauro Carvalho Chehab .num_modes = ARRAY_SIZE(some_board_video_modes), 34ab42b818SMauro Carvalho Chehab .modes = some_board_video_modes, 35ab42b818SMauro Carvalho Chehab .default_mode = &some_board_video_modes[0], 36ab42b818SMauro Carvalho Chehab .bpp = 16, 37ab42b818SMauro Carvalho Chehab }; 38ab42b818SMauro Carvalho Chehab 39ab42b818SMauro Carvalho ChehabThe framebuffer device can be registered by adding the following to 40ab42b818SMauro Carvalho Chehabyour board initialisation function:: 41ab42b818SMauro Carvalho Chehab 42ab42b818SMauro Carvalho Chehab ep93xx_register_fb(&some_board_fb_info); 43ab42b818SMauro Carvalho Chehab 44ab42b818SMauro Carvalho Chehab===================== 45ab42b818SMauro Carvalho ChehabVideo Attribute Flags 46ab42b818SMauro Carvalho Chehab===================== 47ab42b818SMauro Carvalho Chehab 48ab42b818SMauro Carvalho ChehabThe ep93xxfb_mach_info structure has a flags field which can be used 49ab42b818SMauro Carvalho Chehabto configure the controller. The video attributes flags are fully 50ab42b818SMauro Carvalho Chehabdocumented in section 7 of the EP93xx users' guide. The following 51ab42b818SMauro Carvalho Chehabflags are available: 52ab42b818SMauro Carvalho Chehab 53ab42b818SMauro Carvalho Chehab=============================== ========================================== 54ab42b818SMauro Carvalho ChehabEP93XXFB_PCLK_FALLING Clock data on the falling edge of the 55ab42b818SMauro Carvalho Chehab pixel clock. The default is to clock 56ab42b818SMauro Carvalho Chehab data on the rising edge. 57ab42b818SMauro Carvalho Chehab 58ab42b818SMauro Carvalho ChehabEP93XXFB_SYNC_BLANK_HIGH Blank signal is active high. By 59ab42b818SMauro Carvalho Chehab default the blank signal is active low. 60ab42b818SMauro Carvalho Chehab 61ab42b818SMauro Carvalho ChehabEP93XXFB_SYNC_HORIZ_HIGH Horizontal sync is active high. By 62ab42b818SMauro Carvalho Chehab default the horizontal sync is active low. 63ab42b818SMauro Carvalho Chehab 64ab42b818SMauro Carvalho ChehabEP93XXFB_SYNC_VERT_HIGH Vertical sync is active high. By 65ab42b818SMauro Carvalho Chehab default the vertical sync is active high. 66ab42b818SMauro Carvalho Chehab=============================== ========================================== 67ab42b818SMauro Carvalho Chehab 68ab42b818SMauro Carvalho ChehabThe physical address of the framebuffer can be controlled using the 69ab42b818SMauro Carvalho Chehabfollowing flags: 70ab42b818SMauro Carvalho Chehab 71ab42b818SMauro Carvalho Chehab=============================== ====================================== 72ab42b818SMauro Carvalho ChehabEP93XXFB_USE_SDCSN0 Use SDCSn[0] for the framebuffer. This 73ab42b818SMauro Carvalho Chehab is the default setting. 74ab42b818SMauro Carvalho Chehab 75ab42b818SMauro Carvalho ChehabEP93XXFB_USE_SDCSN1 Use SDCSn[1] for the framebuffer. 76ab42b818SMauro Carvalho Chehab 77ab42b818SMauro Carvalho ChehabEP93XXFB_USE_SDCSN2 Use SDCSn[2] for the framebuffer. 78ab42b818SMauro Carvalho Chehab 79ab42b818SMauro Carvalho ChehabEP93XXFB_USE_SDCSN3 Use SDCSn[3] for the framebuffer. 80ab42b818SMauro Carvalho Chehab=============================== ====================================== 81ab42b818SMauro Carvalho Chehab 82ab42b818SMauro Carvalho Chehab================== 83ab42b818SMauro Carvalho ChehabPlatform callbacks 84ab42b818SMauro Carvalho Chehab================== 85ab42b818SMauro Carvalho Chehab 86ab42b818SMauro Carvalho ChehabThe EP93xx framebuffer driver supports three optional platform 87ab42b818SMauro Carvalho Chehabcallbacks: setup, teardown and blank. The setup and teardown functions 88ab42b818SMauro Carvalho Chehabare called when the framebuffer driver is installed and removed 89ab42b818SMauro Carvalho Chehabrespectively. The blank function is called whenever the display is 90ab42b818SMauro Carvalho Chehabblanked or unblanked. 91ab42b818SMauro Carvalho Chehab 92ab42b818SMauro Carvalho ChehabThe setup and teardown devices pass the platform_device structure as 93ab42b818SMauro Carvalho Chehaban argument. The fb_info and ep93xxfb_mach_info structures can be 94ab42b818SMauro Carvalho Chehabobtained as follows:: 95ab42b818SMauro Carvalho Chehab 96ab42b818SMauro Carvalho Chehab static int some_board_fb_setup(struct platform_device *pdev) 97ab42b818SMauro Carvalho Chehab { 98ab42b818SMauro Carvalho Chehab struct ep93xxfb_mach_info *mach_info = pdev->dev.platform_data; 99ab42b818SMauro Carvalho Chehab struct fb_info *fb_info = platform_get_drvdata(pdev); 100ab42b818SMauro Carvalho Chehab 101ab42b818SMauro Carvalho Chehab /* Board specific framebuffer setup */ 102ab42b818SMauro Carvalho Chehab } 103ab42b818SMauro Carvalho Chehab 104ab42b818SMauro Carvalho Chehab====================== 105ab42b818SMauro Carvalho ChehabSetting the video mode 106ab42b818SMauro Carvalho Chehab====================== 107ab42b818SMauro Carvalho Chehab 108ab42b818SMauro Carvalho ChehabThe video mode is set using the following syntax:: 109ab42b818SMauro Carvalho Chehab 110ab42b818SMauro Carvalho Chehab video=XRESxYRES[-BPP][@REFRESH] 111ab42b818SMauro Carvalho Chehab 112ab42b818SMauro Carvalho ChehabIf the EP93xx video driver is built-in then the video mode is set on 113ab42b818SMauro Carvalho Chehabthe Linux kernel command line, for example:: 114ab42b818SMauro Carvalho Chehab 115ab42b818SMauro Carvalho Chehab video=ep93xx-fb:800x600-16@60 116ab42b818SMauro Carvalho Chehab 117ab42b818SMauro Carvalho ChehabIf the EP93xx video driver is built as a module then the video mode is 118ab42b818SMauro Carvalho Chehabset when the module is installed:: 119ab42b818SMauro Carvalho Chehab 120ab42b818SMauro Carvalho Chehab modprobe ep93xx-fb video=320x240 121ab42b818SMauro Carvalho Chehab 122ab42b818SMauro Carvalho Chehab============== 123ab42b818SMauro Carvalho ChehabScreenpage bug 124ab42b818SMauro Carvalho Chehab============== 125ab42b818SMauro Carvalho Chehab 126ab42b818SMauro Carvalho ChehabAt least on the EP9315 there is a silicon bug which causes bit 27 of 127ab42b818SMauro Carvalho Chehabthe VIDSCRNPAGE (framebuffer physical offset) to be tied low. There is 128ab42b818SMauro Carvalho Chehaban unofficial errata for this bug at:: 129ab42b818SMauro Carvalho Chehab 130*7c7b2a35SAlexander A. Klimov https://marc.info/?l=linux-arm-kernel&m=110061245502000&w=2 131ab42b818SMauro Carvalho Chehab 132ab42b818SMauro Carvalho ChehabBy default the EP93xx framebuffer driver checks if the allocated physical 133ab42b818SMauro Carvalho Chehabaddress has bit 27 set. If it does, then the memory is freed and an 134ab42b818SMauro Carvalho Chehaberror is returned. The check can be disabled by adding the following 135ab42b818SMauro Carvalho Chehaboption when loading the driver:: 136ab42b818SMauro Carvalho Chehab 137ab42b818SMauro Carvalho Chehab ep93xx-fb.check_screenpage_bug=0 138ab42b818SMauro Carvalho Chehab 139ab42b818SMauro Carvalho ChehabIn some cases it may be possible to reconfigure your SDRAM layout to 140ab42b818SMauro Carvalho Chehabavoid this bug. See section 13 of the EP93xx users' guide for details. 141