Lines Matching refs:win
63 #define OSD_BASE(win, variant) ((variant).osd + ((win) * (variant).osd_stride)) argument
64 #define VIDOSD_A(win, variant) (OSD_BASE(win, variant) + 0x00) argument
65 #define VIDOSD_B(win, variant) (OSD_BASE(win, variant) + 0x04) argument
66 #define VIDOSD_C(win, variant) (OSD_BASE(win, variant) + 0x08) argument
67 #define VIDOSD_D(win, variant) (OSD_BASE(win, variant) + 0x0C) argument
139 struct s3c_fb_win_variant *win[S3C_FB_MAX_WIN]; member
229 static bool s3c_fb_validate_win_bpp(struct s3c_fb_win *win, unsigned int bpp) in s3c_fb_validate_win_bpp() argument
231 return win->variant.valid_bpp & VALID_BPP(bpp); in s3c_fb_validate_win_bpp()
245 struct s3c_fb_win *win = info->par; in s3c_fb_check_var() local
246 struct s3c_fb *sfb = win->parent; in s3c_fb_check_var()
253 if (!s3c_fb_validate_win_bpp(win, var->bits_per_pixel)) { in s3c_fb_check_var()
255 win->index, var->bits_per_pixel); in s3c_fb_check_var()
268 if (sfb->variant.palette[win->index] != 0) { in s3c_fb_check_var()
395 static void vidosd_set_size(struct s3c_fb_win *win, u32 size) in vidosd_set_size() argument
397 struct s3c_fb *sfb = win->parent; in vidosd_set_size()
400 if (win->variant.osd_size_off) in vidosd_set_size()
401 writel(size, sfb->regs + OSD_BASE(win->index, sfb->variant) in vidosd_set_size()
402 + win->variant.osd_size_off); in vidosd_set_size()
411 static void vidosd_set_alpha(struct s3c_fb_win *win, u32 alpha) in vidosd_set_alpha() argument
413 struct s3c_fb *sfb = win->parent; in vidosd_set_alpha()
415 if (win->variant.has_osd_alpha) in vidosd_set_alpha()
416 writel(alpha, sfb->regs + VIDOSD_C(win->index, sfb->variant)); in vidosd_set_alpha()
425 static void shadow_protect_win(struct s3c_fb_win *win, bool protect) in shadow_protect_win() argument
427 struct s3c_fb *sfb = win->parent; in shadow_protect_win()
435 writel(reg | SHADOWCON_WINx_PROTECT(win->index), in shadow_protect_win()
443 writel(reg & ~SHADOWCON_WINx_PROTECT(win->index), in shadow_protect_win()
491 struct s3c_fb_win *win = info->par; in s3c_fb_set_par() local
492 struct s3c_fb *sfb = win->parent; in s3c_fb_set_par()
495 int win_no = win->index; in s3c_fb_set_par()
504 shadow_protect_win(win, 1); in s3c_fb_set_par()
514 if (win->variant.palette_sz >= 256) in s3c_fb_set_par()
576 vidosd_set_alpha(win, alpha); in s3c_fb_set_par()
577 vidosd_set_size(win, data); in s3c_fb_set_par()
587 sfb->enabled |= (1 << win->index); in s3c_fb_set_par()
678 shadow_protect_win(win, 0); in s3c_fb_set_par()
700 struct s3c_fb_win *win, in s3c_fb_update_palette() argument
707 palreg = sfb->regs + sfb->variant.palette[win->index]; in s3c_fb_update_palette()
710 __func__, win->index, reg, palreg, value); in s3c_fb_update_palette()
712 win->palette_buffer[reg] = value; in s3c_fb_update_palette()
717 if (win->variant.palette_16bpp) in s3c_fb_update_palette()
746 struct s3c_fb_win *win = info->par; in s3c_fb_setcolreg() local
747 struct s3c_fb *sfb = win->parent; in s3c_fb_setcolreg()
751 __func__, win->index, regno, red, green, blue); in s3c_fb_setcolreg()
771 if (regno < win->variant.palette_sz) { in s3c_fb_setcolreg()
772 val = chan_to_field(red, &win->palette.r); in s3c_fb_setcolreg()
773 val |= chan_to_field(green, &win->palette.g); in s3c_fb_setcolreg()
774 val |= chan_to_field(blue, &win->palette.b); in s3c_fb_setcolreg()
776 s3c_fb_update_palette(sfb, win, regno, val); in s3c_fb_setcolreg()
799 struct s3c_fb_win *win = info->par; in s3c_fb_blank() local
800 struct s3c_fb *sfb = win->parent; in s3c_fb_blank()
801 unsigned int index = win->index; in s3c_fb_blank()
819 shadow_protect_win(win, 1); in s3c_fb_blank()
822 shadow_protect_win(win, 0); in s3c_fb_blank()
826 shadow_protect_win(win, 1); in s3c_fb_blank()
828 shadow_protect_win(win, 0); in s3c_fb_blank()
840 shadow_protect_win(win, 1); in s3c_fb_blank()
849 shadow_protect_win(win, 0); in s3c_fb_blank()
870 struct s3c_fb_win *win = info->par; in s3c_fb_pan_display() local
871 struct s3c_fb *sfb = win->parent; in s3c_fb_pan_display()
872 void __iomem *buf = sfb->regs + win->index * 8; in s3c_fb_pan_display()
904 shadow_protect_win(win, 1); in s3c_fb_pan_display()
909 shadow_protect_win(win, 0); in s3c_fb_pan_display()
1020 struct s3c_fb_win *win = info->par; in s3c_fb_ioctl() local
1021 struct s3c_fb *sfb = win->parent; in s3c_fb_ioctl()
1083 static int s3c_fb_alloc_memory(struct s3c_fb *sfb, struct s3c_fb_win *win) in s3c_fb_alloc_memory() argument
1085 struct s3c_fb_pd_win *windata = win->windata; in s3c_fb_alloc_memory()
1087 struct fb_info *fbi = win->fbinfo; in s3c_fb_alloc_memory()
1128 static void s3c_fb_free_memory(struct s3c_fb *sfb, struct s3c_fb_win *win) in s3c_fb_free_memory() argument
1130 struct fb_info *fbi = win->fbinfo; in s3c_fb_free_memory()
1144 static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win) in s3c_fb_release_win() argument
1148 if (win->fbinfo) { in s3c_fb_release_win()
1151 data &= ~SHADOWCON_CHx_ENABLE(win->index); in s3c_fb_release_win()
1152 data &= ~SHADOWCON_CHx_LOCAL_ENABLE(win->index); in s3c_fb_release_win()
1155 unregister_framebuffer(win->fbinfo); in s3c_fb_release_win()
1156 if (win->fbinfo->cmap.len) in s3c_fb_release_win()
1157 fb_dealloc_cmap(&win->fbinfo->cmap); in s3c_fb_release_win()
1158 s3c_fb_free_memory(sfb, win); in s3c_fb_release_win()
1159 framebuffer_release(win->fbinfo); in s3c_fb_release_win()
1179 struct s3c_fb_win *win; in s3c_fb_probe_win() local
1197 windata = sfb->pdata->win[win_no]; in s3c_fb_probe_win()
1204 win = fbinfo->par; in s3c_fb_probe_win()
1205 *res = win; in s3c_fb_probe_win()
1207 win->variant = *variant; in s3c_fb_probe_win()
1208 win->fbinfo = fbinfo; in s3c_fb_probe_win()
1209 win->parent = sfb; in s3c_fb_probe_win()
1210 win->windata = windata; in s3c_fb_probe_win()
1211 win->index = win_no; in s3c_fb_probe_win()
1212 win->palette_buffer = (u32 *)(win + 1); in s3c_fb_probe_win()
1214 ret = s3c_fb_alloc_memory(sfb, win); in s3c_fb_probe_win()
1221 if (win->variant.palette_16bpp) { in s3c_fb_probe_win()
1223 win->palette.r.offset = 11; in s3c_fb_probe_win()
1224 win->palette.r.length = 5; in s3c_fb_probe_win()
1225 win->palette.g.offset = 5; in s3c_fb_probe_win()
1226 win->palette.g.length = 6; in s3c_fb_probe_win()
1227 win->palette.b.offset = 0; in s3c_fb_probe_win()
1228 win->palette.b.length = 5; in s3c_fb_probe_win()
1232 win->palette.r.offset = 16; in s3c_fb_probe_win()
1233 win->palette.r.length = 8; in s3c_fb_probe_win()
1234 win->palette.g.offset = 8; in s3c_fb_probe_win()
1235 win->palette.g.length = 8; in s3c_fb_probe_win()
1236 win->palette.b.offset = 0; in s3c_fb_probe_win()
1237 win->palette.b.length = 8; in s3c_fb_probe_win()
1252 fbinfo->pseudo_palette = &win->pseudo_palette; in s3c_fb_probe_win()
1264 ret = fb_alloc_cmap(&fbinfo->cmap, win->variant.palette_sz, 1); in s3c_fb_probe_win()
1341 static void s3c_fb_clear_win(struct s3c_fb *sfb, int win) in s3c_fb_clear_win() argument
1346 writel(0, regs + sfb->variant.wincon + (win * 4)); in s3c_fb_clear_win()
1347 writel(0, regs + VIDOSD_A(win, sfb->variant)); in s3c_fb_clear_win()
1348 writel(0, regs + VIDOSD_B(win, sfb->variant)); in s3c_fb_clear_win()
1349 writel(0, regs + VIDOSD_C(win, sfb->variant)); in s3c_fb_clear_win()
1353 reg &= ~(SHADOWCON_WINx_PROTECT(win) | in s3c_fb_clear_win()
1354 SHADOWCON_CHx_ENABLE(win) | in s3c_fb_clear_win()
1355 SHADOWCON_CHx_LOCAL_ENABLE(win)); in s3c_fb_clear_win()
1368 int win; in s3c_fb_probe() local
1461 for (win = 0; win < fbdrv->variant.nr_windows; win++) in s3c_fb_probe()
1462 s3c_fb_clear_win(sfb, win); in s3c_fb_probe()
1465 for (win = 0; win < (fbdrv->variant.nr_windows - 1); win++) { in s3c_fb_probe()
1468 regs += (win * 8); in s3c_fb_probe()
1477 for (win = 0; win < fbdrv->variant.nr_windows; win++) { in s3c_fb_probe()
1478 if (!pd->win[win]) in s3c_fb_probe()
1481 ret = s3c_fb_probe_win(sfb, win, fbdrv->win[win], in s3c_fb_probe()
1482 &sfb->windows[win]); in s3c_fb_probe()
1484 dev_err(dev, "failed to create window %d\n", win); in s3c_fb_probe()
1485 for (; win >= 0; win--) in s3c_fb_probe()
1486 s3c_fb_release_win(sfb, sfb->windows[win]); in s3c_fb_probe()
1521 int win; in s3c_fb_remove() local
1525 for (win = 0; win < S3C_FB_MAX_WIN; win++) in s3c_fb_remove()
1526 if (sfb->windows[win]) in s3c_fb_remove()
1527 s3c_fb_release_win(sfb, sfb->windows[win]); in s3c_fb_remove()
1544 struct s3c_fb_win *win; in s3c_fb_suspend() local
1550 win = sfb->windows[win_no]; in s3c_fb_suspend()
1551 if (!win) in s3c_fb_suspend()
1555 s3c_fb_blank(FB_BLANK_POWERDOWN, win->fbinfo); in s3c_fb_suspend()
1572 struct s3c_fb_win *win; in s3c_fb_resume() local
1601 win = sfb->windows[win_no]; in s3c_fb_resume()
1602 if (!win) in s3c_fb_resume()
1605 shadow_protect_win(win, 1); in s3c_fb_resume()
1609 shadow_protect_win(win, 0); in s3c_fb_resume()
1616 win = sfb->windows[win_no]; in s3c_fb_resume()
1617 if (!win) in s3c_fb_resume()
1621 s3c_fb_set_par(win->fbinfo); in s3c_fb_resume()
1741 .win[0] = &s3c_fb_data_64xx_wins[0],
1742 .win[1] = &s3c_fb_data_64xx_wins[1],
1743 .win[2] = &s3c_fb_data_64xx_wins[2],
1744 .win[3] = &s3c_fb_data_64xx_wins[3],
1745 .win[4] = &s3c_fb_data_64xx_wins[4],
1770 .win[0] = &(struct s3c_fb_win_variant) {
1774 .win[1] = &(struct s3c_fb_win_variant) {