MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / _lcd_layer_init

Function _lcd_layer_init

bsp/allwinner/libraries/drivers/drv_lcd.c:307–383  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

305}
306
307static int _lcd_layer_init(lcd_device_t lcd_drv)
308{
309 int format;
310 int ret;
311 unsigned long arg[6] = {0};
312
313 format = _lcd_format_get(lcd_drv->lcd_info.pixel_format);
314 if (format < 0)
315 {
316 rt_kprintf("lcd init faile pixel_format:%d\n", lcd_drv->lcd_info.pixel_format);
317 return -RT_ERROR;
318 }
319
320 // config layer info
321 memset(&layer_cfg, 0, sizeof(layer_cfg));
322 layer_cfg.info.b_trd_out = 0;
323 layer_cfg.channel = de_feat_get_num_vi_chns(lcd_drv->use_screen); // skip vi channel
324 layer_cfg.layer_id = 0;
325 layer_cfg.info.fb.format = format;
326 layer_cfg.info.fb.crop.x = 0;
327 layer_cfg.info.fb.crop.y = 0;
328 layer_cfg.info.fb.crop.width = lcd_drv->lcd_info.width;
329 layer_cfg.info.fb.crop.height = lcd_drv->lcd_info.height;
330 layer_cfg.info.fb.crop.width = layer_cfg.info.fb.crop.width << 32;
331 layer_cfg.info.fb.crop.height = layer_cfg.info.fb.crop.height << 32;
332 layer_cfg.info.fb.align[0] = 4;
333 layer_cfg.info.mode = 0; // LAYER_MODE_BUFFER
334 layer_cfg.info.alpha_mode = 1;
335 layer_cfg.info.alpha_value = 255;
336 layer_cfg.info.zorder = 0;
337 layer_cfg.info.screen_win.x = 0;
338 layer_cfg.info.screen_win.y = 0;
339 layer_cfg.info.screen_win.width = lcd_drv->lcd_info.width;
340 layer_cfg.info.screen_win.height = lcd_drv->lcd_info.height;
341
342 layer_cfg.info.fb.size[0].width = lcd_drv->lcd_info.width;
343 layer_cfg.info.fb.size[0].height = lcd_drv->lcd_info.height;
344 layer_cfg.info.fb.size[1].width = lcd_drv->lcd_info.width;
345 layer_cfg.info.fb.size[1].height = lcd_drv->lcd_info.height;
346 layer_cfg.info.fb.size[2].width = lcd_drv->lcd_info.width;
347 layer_cfg.info.fb.size[2].height = lcd_drv->lcd_info.height;
348
349 layer_cfg.info.fb.addr[0] = (size_t)lcd_drv->front_buf_info.buff_phy;
350
351 /* INTERLEAVED */
352 layer_cfg.info.fb.addr[0] = (unsigned long long)(layer_cfg.info.fb.addr[0] + lcd_drv->lcd_info.width * lcd_drv->lcd_info.height / 3 * 0);
353 layer_cfg.info.fb.addr[1] = (unsigned long long)(layer_cfg.info.fb.addr[0] + lcd_drv->lcd_info.width * lcd_drv->lcd_info.height / 3 * 1);
354 layer_cfg.info.fb.addr[2] = (unsigned long long)(layer_cfg.info.fb.addr[0] + lcd_drv->lcd_info.width * lcd_drv->lcd_info.height / 3 * 2);
355 layer_cfg.info.fb.trd_right_addr[0] = (unsigned int)(layer_cfg.info.fb.addr[0] + lcd_drv->lcd_info.width * lcd_drv->lcd_info.height * 3 / 2);
356 layer_cfg.info.fb.trd_right_addr[1] = (unsigned int)(layer_cfg.info.fb.trd_right_addr[0] + lcd_drv->lcd_info.width * lcd_drv->lcd_info.height);
357 layer_cfg.info.fb.trd_right_addr[2] = (unsigned int)(layer_cfg.info.fb.trd_right_addr[0] + lcd_drv->lcd_info.width * lcd_drv->lcd_info.height * 3 / 2);
358
359 layer_cfg.enable = 1;
360
361 arg[0] = lcd_drv->use_screen;
362 arg[1] = (unsigned long)&layer_cfg;
363 arg[2] = 1;
364 arg[3] = 0;

Callers 1

rt_lcd_initFunction · 0.85

Calls 4

_lcd_format_getFunction · 0.85
rt_kprintfFunction · 0.85
de_feat_get_num_vi_chnsFunction · 0.85
disp_ioctlFunction · 0.85

Tested by

no test coverage detected