Lines Matching +full:bias +full:- +full:ctrl +full:- +full:value
1 // SPDX-License-Identifier: GPL-2.0+
3 * Copyright (C) 2013-2018 Hannes Schmelzer <oe5hpm@oevsv.at>
4 * B&R Industrial Automation GmbH - http://www.br-automation.com
7 * Wolfgang Denk's LCD-Framework (CONFIG_LCD, common/lcd.c)
9 * - supporting 16/24/32bit RGB/TFT raster Mode (not using palette)
10 * - sets up LCD controller as in 'am335x_lcdpanel' struct given
11 * - starts output DMA from gd->fb_base buffer
20 #include "am335x-fb.h"
23 #error "hw-base address of LCD-Controller (LCD_CNTL_BASE) not defined!"
43 #define LCD_HBPLSB(x) ((((x)-1) & 0xFF) << 24)
44 #define LCD_HFPLSB(x) ((((x)-1) & 0xFF) << 16)
45 #define LCD_HSWLSB(x) ((((x)-1) & 0x3F) << 10)
46 #define LCD_HORLSB(x) (((((x) >> 4)-1) & 0x3F) << 4)
47 #define LCD_HORMSB(x) (((((x) >> 4)-1) & 0x40) >> 4)
51 #define LCD_VSW(x) (((x)-1) << 10)
52 #define LCD_VERLSB(x) (((x)-1) & 0x3FF)
54 #define LCD_HSWMSB(x) ((((x)-1) & 0x3C0) << 21)
55 #define LCD_VERMSB(x) ((((x)-1) & 0x400) << 16)
56 #define LCD_HBPMSB(x) ((((x)-1) & 0x300) >> 4)
57 #define LCD_HFPMSB(x) ((((x)-1) & 0x300) >> 8)
59 /* LCD Raster Ctrl Register */
68 #define FBSIZE(x) ((x->hactive * x->vactive * x->bpp) >> 3)
72 unsigned int ctrl; /* 0x04 */ member
117 struct dpll_params dpll_disp = { 1, 0, 1, -1, -1, -1, -1 }; in am335xfb_init()
121 if (gd->fb_base == 0) { in am335xfb_init()
123 return -1; in am335xfb_init()
127 return -1; in am335xfb_init()
131 switch (panel->bpp) { in am335xfb_init()
141 pr_err("am335x-fb: invalid bpp value: %d\n", panel->bpp); in am335xfb_init()
142 return -1; in am335xfb_init()
145 /* check given clock-frequency */ in am335xfb_init()
146 if (panel->pxl_clk > (LCDC_FMAX / 2)) { in am335xfb_init()
147 pr_err("am335x-fb: requested pxl-clk: %d not supported!\n", in am335xfb_init()
148 panel->pxl_clk); in am335xfb_init()
149 return -1; in am335xfb_init()
152 debug("setting up LCD-Controller for %dx%dx%d (hfp=%d,hbp=%d,hsw=%d / ", in am335xfb_init()
153 panel->hactive, panel->vactive, panel->bpp, in am335xfb_init()
154 panel->hfp, panel->hbp, panel->hsw); in am335xfb_init()
156 panel->vfp, panel->vfp, panel->vsw, panel->pxl_clk); in am335xfb_init()
158 (unsigned int)gd->fb_base, FBSIZE(panel)); in am335xfb_init()
161 err = panel->pxl_clk; in am335xfb_init()
166 if ((V_OSCK * m) < (panel->pxl_clk * d)) in am335xfb_init()
168 n = (V_OSCK * m) / (panel->pxl_clk * d); in am335xfb_init()
174 err = abs((V_OSCK * m) / n / d - panel->pxl_clk); in am335xfb_init()
188 writel(0x0, &cmdpll->clklcdcpixelclk); in am335xfb_init()
191 memset((void *)gd->fb_base, 0, 0x20); in am335xfb_init()
192 *(unsigned int *)gd->fb_base = 0x4000; in am335xfb_init()
194 gd->fb_base += 0x20; in am335xfb_init()
197 if (panel->panel_power_ctrl != NULL) in am335xfb_init()
198 panel->panel_power_ctrl(1); in am335xfb_init()
200 debug("am335x-fb: wait for stable power ...\n"); in am335xfb_init()
201 mdelay(panel->pup_delay); in am335xfb_init()
202 lcdhw->clkc_enable = LCD_CORECLKEN | LCD_LIDDCLKEN | LCD_DMACLKEN; in am335xfb_init()
203 lcdhw->raster_ctrl = 0; in am335xfb_init()
204 lcdhw->ctrl = LCD_CLK_DIVISOR(best_d) | LCD_RASTER_MODE; in am335xfb_init()
205 lcdhw->lcddma_fb0_base = gd->fb_base; in am335xfb_init()
206 lcdhw->lcddma_fb0_ceiling = gd->fb_base + FBSIZE(panel); in am335xfb_init()
207 lcdhw->lcddma_fb1_base = gd->fb_base; in am335xfb_init()
208 lcdhw->lcddma_fb1_ceiling = gd->fb_base + FBSIZE(panel); in am335xfb_init()
209 lcdhw->lcddma_ctrl = LCD_DMA_BURST_SIZE(LCD_DMA_BURST_16); in am335xfb_init()
211 lcdhw->raster_timing0 = LCD_HORLSB(panel->hactive) | in am335xfb_init()
212 LCD_HORMSB(panel->hactive) | in am335xfb_init()
213 LCD_HFPLSB(panel->hfp) | in am335xfb_init()
214 LCD_HBPLSB(panel->hbp) | in am335xfb_init()
215 LCD_HSWLSB(panel->hsw); in am335xfb_init()
216 lcdhw->raster_timing1 = LCD_VBP(panel->vbp) | in am335xfb_init()
217 LCD_VFP(panel->vfp) | in am335xfb_init()
218 LCD_VSW(panel->vsw) | in am335xfb_init()
219 LCD_VERLSB(panel->vactive); in am335xfb_init()
220 lcdhw->raster_timing2 = LCD_HSWMSB(panel->hsw) | in am335xfb_init()
221 LCD_VERMSB(panel->vactive) | in am335xfb_init()
222 LCD_INVMASK(panel->pol) | in am335xfb_init()
223 LCD_HBPMSB(panel->hbp) | in am335xfb_init()
224 LCD_HFPMSB(panel->hfp) | in am335xfb_init()
225 0x0000FF00; /* clk cycles for ac-bias */ in am335xfb_init()
226 lcdhw->raster_ctrl = raster_ctrl | in am335xfb_init()
231 debug("am335x-fb: waiting picture to be stable.\n."); in am335xfb_init()
232 mdelay(panel->pon_delay); in am335xfb_init()