• Home
  • Raw
  • Download

Lines Matching full:ovl

310 static void lcdc_write_overlay(struct sh_mobile_lcdc_overlay *ovl,  in lcdc_write_overlay()  argument
313 iowrite32(data, ovl->channel->lcdc->base + reg); in lcdc_write_overlay()
314 iowrite32(data, ovl->channel->lcdc->base + reg + SIDE_B_OFFSET); in lcdc_write_overlay()
780 static void sh_mobile_lcdc_overlay_setup(struct sh_mobile_lcdc_overlay *ovl) in sh_mobile_lcdc_overlay_setup() argument
784 if (!ovl->enabled) { in sh_mobile_lcdc_overlay_setup()
785 lcdc_write(ovl->channel->lcdc, LDBCR, LDBCR_UPC(ovl->index)); in sh_mobile_lcdc_overlay_setup()
786 lcdc_write_overlay(ovl, LDBnBSIFR(ovl->index), 0); in sh_mobile_lcdc_overlay_setup()
787 lcdc_write(ovl->channel->lcdc, LDBCR, in sh_mobile_lcdc_overlay_setup()
788 LDBCR_UPF(ovl->index) | LDBCR_UPD(ovl->index)); in sh_mobile_lcdc_overlay_setup()
792 ovl->base_addr_y = ovl->dma_handle; in sh_mobile_lcdc_overlay_setup()
793 ovl->base_addr_c = ovl->dma_handle in sh_mobile_lcdc_overlay_setup()
794 + ovl->xres_virtual * ovl->yres_virtual; in sh_mobile_lcdc_overlay_setup()
796 switch (ovl->mode) { in sh_mobile_lcdc_overlay_setup()
798 format = LDBBSIFR_EN | (ovl->alpha << LDBBSIFR_LAY_SHIFT); in sh_mobile_lcdc_overlay_setup()
803 | (ovl->rop3 << LDBBSIFR_ROP3_SHIFT); in sh_mobile_lcdc_overlay_setup()
807 switch (ovl->format->fourcc) { in sh_mobile_lcdc_overlay_setup()
826 switch (ovl->format->fourcc) { in sh_mobile_lcdc_overlay_setup()
850 lcdc_write(ovl->channel->lcdc, LDBCR, LDBCR_UPC(ovl->index)); in sh_mobile_lcdc_overlay_setup()
852 lcdc_write_overlay(ovl, LDBnBSIFR(ovl->index), format); in sh_mobile_lcdc_overlay_setup()
854 lcdc_write_overlay(ovl, LDBnBSSZR(ovl->index), in sh_mobile_lcdc_overlay_setup()
855 (ovl->yres << LDBBSSZR_BVSS_SHIFT) | in sh_mobile_lcdc_overlay_setup()
856 (ovl->xres << LDBBSSZR_BHSS_SHIFT)); in sh_mobile_lcdc_overlay_setup()
857 lcdc_write_overlay(ovl, LDBnBLOCR(ovl->index), in sh_mobile_lcdc_overlay_setup()
858 (ovl->pos_y << LDBBLOCR_CVLC_SHIFT) | in sh_mobile_lcdc_overlay_setup()
859 (ovl->pos_x << LDBBLOCR_CHLC_SHIFT)); in sh_mobile_lcdc_overlay_setup()
860 lcdc_write_overlay(ovl, LDBnBSMWR(ovl->index), in sh_mobile_lcdc_overlay_setup()
861 ovl->pitch << LDBBSMWR_BSMW_SHIFT); in sh_mobile_lcdc_overlay_setup()
863 lcdc_write_overlay(ovl, LDBnBSAYR(ovl->index), ovl->base_addr_y); in sh_mobile_lcdc_overlay_setup()
864 lcdc_write_overlay(ovl, LDBnBSACR(ovl->index), ovl->base_addr_c); in sh_mobile_lcdc_overlay_setup()
866 lcdc_write(ovl->channel->lcdc, LDBCR, in sh_mobile_lcdc_overlay_setup()
867 LDBCR_UPF(ovl->index) | LDBCR_UPD(ovl->index)); in sh_mobile_lcdc_overlay_setup()
1033 struct sh_mobile_lcdc_overlay *ovl = &priv->overlays[k]; in sh_mobile_lcdc_start() local
1034 sh_mobile_lcdc_overlay_setup(ovl); in sh_mobile_lcdc_start()
1196 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_alpha_show() local
1198 return scnprintf(buf, PAGE_SIZE, "%u\n", ovl->alpha); in overlay_alpha_show()
1206 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_alpha_store() local
1220 if (ovl->alpha != alpha) { in overlay_alpha_store()
1221 ovl->alpha = alpha; in overlay_alpha_store()
1223 if (ovl->mode == LCDC_OVERLAY_BLEND && ovl->enabled) in overlay_alpha_store()
1224 sh_mobile_lcdc_overlay_setup(ovl); in overlay_alpha_store()
1234 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_mode_show() local
1236 return scnprintf(buf, PAGE_SIZE, "%u\n", ovl->mode); in overlay_mode_show()
1244 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_mode_store() local
1258 if (ovl->mode != mode) { in overlay_mode_store()
1259 ovl->mode = mode; in overlay_mode_store()
1261 if (ovl->enabled) in overlay_mode_store()
1262 sh_mobile_lcdc_overlay_setup(ovl); in overlay_mode_store()
1273 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_position_show() local
1275 return scnprintf(buf, PAGE_SIZE, "%d,%d\n", ovl->pos_x, ovl->pos_y); in overlay_position_show()
1283 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_position_store() local
1299 if (ovl->pos_x != pos_x || ovl->pos_y != pos_y) { in overlay_position_store()
1300 ovl->pos_x = pos_x; in overlay_position_store()
1301 ovl->pos_y = pos_y; in overlay_position_store()
1303 if (ovl->enabled) in overlay_position_store()
1304 sh_mobile_lcdc_overlay_setup(ovl); in overlay_position_store()
1314 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_rop3_show() local
1316 return scnprintf(buf, PAGE_SIZE, "%u\n", ovl->rop3); in overlay_rop3_show()
1324 struct sh_mobile_lcdc_overlay *ovl = info->par; in overlay_rop3_store() local
1338 if (ovl->rop3 != rop3) { in overlay_rop3_store()
1339 ovl->rop3 = rop3; in overlay_rop3_store()
1341 if (ovl->mode == LCDC_OVERLAY_ROP3 && ovl->enabled) in overlay_rop3_store()
1342 sh_mobile_lcdc_overlay_setup(ovl); in overlay_rop3_store()
1373 struct sh_mobile_lcdc_overlay *ovl = info->par; in sh_mobile_lcdc_overlay_pan() local
1379 if (!ovl->format->yuv) { in sh_mobile_lcdc_overlay_pan()
1380 y_offset = (var->yoffset * ovl->xres_virtual + var->xoffset) in sh_mobile_lcdc_overlay_pan()
1381 * ovl->format->bpp / 8; in sh_mobile_lcdc_overlay_pan()
1384 unsigned int xsub = ovl->format->bpp < 24 ? 2 : 1; in sh_mobile_lcdc_overlay_pan()
1385 unsigned int ysub = ovl->format->bpp < 16 ? 2 : 1; in sh_mobile_lcdc_overlay_pan()
1387 y_offset = var->yoffset * ovl->xres_virtual + var->xoffset; in sh_mobile_lcdc_overlay_pan()
1388 c_offset = var->yoffset / ysub * ovl->xres_virtual * 2 / xsub in sh_mobile_lcdc_overlay_pan()
1395 if (y_offset == ovl->pan_y_offset) in sh_mobile_lcdc_overlay_pan()
1399 base_addr_y = ovl->dma_handle + y_offset; in sh_mobile_lcdc_overlay_pan()
1400 base_addr_c = ovl->dma_handle + ovl->xres_virtual * ovl->yres_virtual in sh_mobile_lcdc_overlay_pan()
1403 ovl->base_addr_y = base_addr_y; in sh_mobile_lcdc_overlay_pan()
1404 ovl->base_addr_c = base_addr_c; in sh_mobile_lcdc_overlay_pan()
1405 ovl->pan_y_offset = y_offset; in sh_mobile_lcdc_overlay_pan()
1407 lcdc_write(ovl->channel->lcdc, LDBCR, LDBCR_UPC(ovl->index)); in sh_mobile_lcdc_overlay_pan()
1409 lcdc_write_overlay(ovl, LDBnBSAYR(ovl->index), ovl->base_addr_y); in sh_mobile_lcdc_overlay_pan()
1410 lcdc_write_overlay(ovl, LDBnBSACR(ovl->index), ovl->base_addr_c); in sh_mobile_lcdc_overlay_pan()
1412 lcdc_write(ovl->channel->lcdc, LDBCR, in sh_mobile_lcdc_overlay_pan()
1413 LDBCR_UPF(ovl->index) | LDBCR_UPD(ovl->index)); in sh_mobile_lcdc_overlay_pan()
1421 struct sh_mobile_lcdc_overlay *ovl = info->par; in sh_mobile_lcdc_overlay_ioctl() local
1425 return sh_mobile_lcdc_wait_for_vsync(ovl->channel); in sh_mobile_lcdc_overlay_ioctl()
1440 struct sh_mobile_lcdc_overlay *ovl = info->par; in sh_mobile_lcdc_overlay_set_par() local
1442 ovl->format = in sh_mobile_lcdc_overlay_set_par()
1445 ovl->xres = info->var.xres; in sh_mobile_lcdc_overlay_set_par()
1446 ovl->xres_virtual = info->var.xres_virtual; in sh_mobile_lcdc_overlay_set_par()
1447 ovl->yres = info->var.yres; in sh_mobile_lcdc_overlay_set_par()
1448 ovl->yres_virtual = info->var.yres_virtual; in sh_mobile_lcdc_overlay_set_par()
1450 if (ovl->format->yuv) in sh_mobile_lcdc_overlay_set_par()
1451 ovl->pitch = info->var.xres_virtual; in sh_mobile_lcdc_overlay_set_par()
1453 ovl->pitch = info->var.xres_virtual * ovl->format->bpp / 8; in sh_mobile_lcdc_overlay_set_par()
1455 sh_mobile_lcdc_overlay_setup(ovl); in sh_mobile_lcdc_overlay_set_par()
1457 info->fix.line_length = ovl->pitch; in sh_mobile_lcdc_overlay_set_par()
1473 struct sh_mobile_lcdc_overlay *ovl = info->par; in sh_mobile_lcdc_overlay_blank() local
1475 ovl->enabled = !blank; in sh_mobile_lcdc_overlay_blank()
1476 sh_mobile_lcdc_overlay_setup(ovl); in sh_mobile_lcdc_overlay_blank()
1487 struct sh_mobile_lcdc_overlay *ovl = info->par; in sh_mobile_lcdc_overlay_mmap() local
1489 return dma_mmap_coherent(ovl->channel->lcdc->dev, vma, ovl->fb_mem, in sh_mobile_lcdc_overlay_mmap()
1490 ovl->dma_handle, ovl->fb_size); in sh_mobile_lcdc_overlay_mmap()
1509 sh_mobile_lcdc_overlay_fb_unregister(struct sh_mobile_lcdc_overlay *ovl) in sh_mobile_lcdc_overlay_fb_unregister() argument
1511 struct fb_info *info = ovl->info; in sh_mobile_lcdc_overlay_fb_unregister()
1516 unregister_framebuffer(ovl->info); in sh_mobile_lcdc_overlay_fb_unregister()
1520 sh_mobile_lcdc_overlay_fb_register(struct sh_mobile_lcdc_overlay *ovl) in sh_mobile_lcdc_overlay_fb_register() argument
1522 struct sh_mobile_lcdc_priv *lcdc = ovl->channel->lcdc; in sh_mobile_lcdc_overlay_fb_register()
1523 struct fb_info *info = ovl->info; in sh_mobile_lcdc_overlay_fb_register()
1535 dev_name(lcdc->dev), ovl->index, info->var.xres, in sh_mobile_lcdc_overlay_fb_register()
1548 sh_mobile_lcdc_overlay_fb_cleanup(struct sh_mobile_lcdc_overlay *ovl) in sh_mobile_lcdc_overlay_fb_cleanup() argument
1550 struct fb_info *info = ovl->info; in sh_mobile_lcdc_overlay_fb_cleanup()
1559 sh_mobile_lcdc_overlay_fb_init(struct sh_mobile_lcdc_overlay *ovl) in sh_mobile_lcdc_overlay_fb_init() argument
1561 struct sh_mobile_lcdc_priv *priv = ovl->channel->lcdc; in sh_mobile_lcdc_overlay_fb_init()
1570 ovl->info = info; in sh_mobile_lcdc_overlay_fb_init()
1575 info->screen_buffer = ovl->fb_mem; in sh_mobile_lcdc_overlay_fb_init()
1576 info->par = ovl; in sh_mobile_lcdc_overlay_fb_init()
1583 "SH Mobile LCDC Overlay %u", ovl->index); in sh_mobile_lcdc_overlay_fb_init()
1584 info->fix.smem_start = ovl->dma_handle; in sh_mobile_lcdc_overlay_fb_init()
1585 info->fix.smem_len = ovl->fb_size; in sh_mobile_lcdc_overlay_fb_init()
1586 info->fix.line_length = ovl->pitch; in sh_mobile_lcdc_overlay_fb_init()
1588 if (ovl->format->yuv) in sh_mobile_lcdc_overlay_fb_init()
1593 switch (ovl->format->fourcc) { in sh_mobile_lcdc_overlay_fb_init()
1606 var->xres = ovl->xres; in sh_mobile_lcdc_overlay_fb_init()
1607 var->yres = ovl->yres; in sh_mobile_lcdc_overlay_fb_init()
1608 var->xres_virtual = ovl->xres_virtual; in sh_mobile_lcdc_overlay_fb_init()
1609 var->yres_virtual = ovl->yres_virtual; in sh_mobile_lcdc_overlay_fb_init()
1615 if (!ovl->format->yuv) in sh_mobile_lcdc_overlay_fb_init()
1616 var->bits_per_pixel = ovl->format->bpp; in sh_mobile_lcdc_overlay_fb_init()
1618 var->grayscale = ovl->format->fourcc; in sh_mobile_lcdc_overlay_fb_init()
2266 struct sh_mobile_lcdc_overlay *ovl = &priv->overlays[i]; in sh_mobile_lcdc_remove() local
2268 sh_mobile_lcdc_overlay_fb_cleanup(ovl); in sh_mobile_lcdc_remove()
2270 if (ovl->fb_mem) in sh_mobile_lcdc_remove()
2271 dma_free_coherent(&pdev->dev, ovl->fb_size, in sh_mobile_lcdc_remove()
2272 ovl->fb_mem, ovl->dma_handle); in sh_mobile_lcdc_remove()
2353 sh_mobile_lcdc_overlay_init(struct sh_mobile_lcdc_overlay *ovl) in sh_mobile_lcdc_overlay_init() argument
2356 struct device *dev = ovl->channel->lcdc->dev; in sh_mobile_lcdc_overlay_init()
2359 if (ovl->cfg->fourcc == 0) in sh_mobile_lcdc_overlay_init()
2363 format = sh_mobile_format_info(ovl->cfg->fourcc); in sh_mobile_lcdc_overlay_init()
2365 dev_err(dev, "Invalid FOURCC %08x\n", ovl->cfg->fourcc); in sh_mobile_lcdc_overlay_init()
2369 ovl->enabled = false; in sh_mobile_lcdc_overlay_init()
2370 ovl->mode = LCDC_OVERLAY_BLEND; in sh_mobile_lcdc_overlay_init()
2371 ovl->alpha = 255; in sh_mobile_lcdc_overlay_init()
2372 ovl->rop3 = 0; in sh_mobile_lcdc_overlay_init()
2373 ovl->pos_x = 0; in sh_mobile_lcdc_overlay_init()
2374 ovl->pos_y = 0; in sh_mobile_lcdc_overlay_init()
2379 ovl->format = format; in sh_mobile_lcdc_overlay_init()
2380 ovl->xres = ovl->cfg->max_xres; in sh_mobile_lcdc_overlay_init()
2381 ovl->xres_virtual = ovl->xres; in sh_mobile_lcdc_overlay_init()
2382 ovl->yres = ovl->cfg->max_yres; in sh_mobile_lcdc_overlay_init()
2383 ovl->yres_virtual = ovl->yres * 2; in sh_mobile_lcdc_overlay_init()
2386 ovl->pitch = ovl->xres_virtual * format->bpp / 8; in sh_mobile_lcdc_overlay_init()
2388 ovl->pitch = ovl->xres_virtual; in sh_mobile_lcdc_overlay_init()
2391 ovl->fb_size = ovl->cfg->max_xres * ovl->cfg->max_yres in sh_mobile_lcdc_overlay_init()
2393 ovl->fb_mem = dma_alloc_coherent(dev, ovl->fb_size, &ovl->dma_handle, in sh_mobile_lcdc_overlay_init()
2395 if (!ovl->fb_mem) { in sh_mobile_lcdc_overlay_init()
2400 ret = sh_mobile_lcdc_overlay_fb_init(ovl); in sh_mobile_lcdc_overlay_init()
2615 struct sh_mobile_lcdc_overlay *ovl = &priv->overlays[i]; in sh_mobile_lcdc_probe() local
2617 ovl->cfg = &pdata->overlays[i]; in sh_mobile_lcdc_probe()
2618 ovl->channel = &priv->ch[0]; in sh_mobile_lcdc_probe()
2620 error = sh_mobile_lcdc_overlay_init(ovl); in sh_mobile_lcdc_probe()
2640 struct sh_mobile_lcdc_overlay *ovl = &priv->overlays[i]; in sh_mobile_lcdc_probe() local
2642 error = sh_mobile_lcdc_overlay_fb_register(ovl); in sh_mobile_lcdc_probe()