xref: /linux/Documentation/fb/ep93xx-fb.rst (revision 4b4193256c8d3bc3a5397b5cd9494c2ad386317d)
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