| 305 | } |
| 306 | |
| 307 | static 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; |
no test coverage detected