Lines Matching defs:win

60 #define OSD_BASE(win, variant) ((variant).osd + ((win) * (variant).osd_stride))
61 #define VIDOSD_A(win, variant) (OSD_BASE(win, variant) + 0x00)
62 #define VIDOSD_B(win, variant) (OSD_BASE(win, variant) + 0x04)
63 #define VIDOSD_C(win, variant) (OSD_BASE(win, variant) + 0x08)
64 #define VIDOSD_D(win, variant) (OSD_BASE(win, variant) + 0x0C)
133 * @win: The window information for each window.
137 struct s3c_fb_win_variant *win[S3C_FB_MAX_WIN];
224 * @win: The device window.
227 static bool s3c_fb_validate_win_bpp(struct s3c_fb_win *win, unsigned int bpp)
229 return win->variant.valid_bpp & VALID_BPP(bpp);
243 struct s3c_fb_win *win = info->par;
244 struct s3c_fb *sfb = win->parent;
251 if (!s3c_fb_validate_win_bpp(win, var->bits_per_pixel)) {
252 dev_dbg(sfb->dev, "win %d: unsupported bpp %d\n",
253 win->index, var->bits_per_pixel);
266 if (sfb->variant.palette[win->index] != 0) {
390 * @win: the window to set OSD size for
393 static void vidosd_set_size(struct s3c_fb_win *win, u32 size)
395 struct s3c_fb *sfb = win->parent;
398 if (win->variant.osd_size_off)
399 writel(size, sfb->regs + OSD_BASE(win->index, sfb->variant)
400 + win->variant.osd_size_off);
406 * @win: the window to set OSD size for
409 static void vidosd_set_alpha(struct s3c_fb_win *win, u32 alpha)
411 struct s3c_fb *sfb = win->parent;
413 if (win->variant.has_osd_alpha)
414 writel(alpha, sfb->regs + VIDOSD_C(win->index, sfb->variant));
420 * @win: window to protect registers for
423 static void shadow_protect_win(struct s3c_fb_win *win, bool protect)
425 struct s3c_fb *sfb = win->parent;
433 writel(reg | SHADOWCON_WINx_PROTECT(win->index),
441 writel(reg & ~SHADOWCON_WINx_PROTECT(win->index),
489 struct s3c_fb_win *win = info->par;
490 struct s3c_fb *sfb = win->parent;
493 int win_no = win->index;
502 shadow_protect_win(win, 1);
512 if (win->variant.palette_sz >= 256)
574 vidosd_set_alpha(win, alpha);
575 vidosd_set_size(win, data);
585 sfb->enabled |= (1 << win->index);
676 shadow_protect_win(win, 0);
686 * @win: The window being updated.
698 struct s3c_fb_win *win,
705 palreg = sfb->regs + sfb->variant.palette[win->index];
707 dev_dbg(sfb->dev, "%s: win %d, reg %d (%p): %08x\n",
708 __func__, win->index, reg, palreg, value);
710 win->palette_buffer[reg] = value;
715 if (win->variant.palette_16bpp)
744 struct s3c_fb_win *win = info->par;
745 struct s3c_fb *sfb = win->parent;
748 dev_dbg(sfb->dev, "%s: win %d: %d => rgb=%d/%d/%d\n",
749 __func__, win->index, regno, red, green, blue);
769 if (regno < win->variant.palette_sz) {
770 val = chan_to_field(red, &win->palette.r);
771 val |= chan_to_field(green, &win->palette.g);
772 val |= chan_to_field(blue, &win->palette.b);
774 s3c_fb_update_palette(sfb, win, regno, val);
797 struct s3c_fb_win *win = info->par;
798 struct s3c_fb *sfb = win->parent;
799 unsigned int index = win->index;
817 shadow_protect_win(win, 1);
820 shadow_protect_win(win, 0);
824 shadow_protect_win(win, 1);
826 shadow_protect_win(win, 0);
838 shadow_protect_win(win, 1);
847 shadow_protect_win(win, 0);
868 struct s3c_fb_win *win = info->par;
869 struct s3c_fb *sfb = win->parent;
870 void __iomem *buf = sfb->regs + win->index * 8;
902 shadow_protect_win(win, 1);
907 shadow_protect_win(win, 0);
1018 struct s3c_fb_win *win = info->par;
1019 struct s3c_fb *sfb = win->parent;
1075 * @win: The window to initialise memory for.
1079 static int s3c_fb_alloc_memory(struct s3c_fb *sfb, struct s3c_fb_win *win)
1081 struct s3c_fb_pd_win *windata = win->windata;
1083 struct fb_info *fbi = win->fbinfo;
1120 * @win: The window to free the display memory for.
1124 static void s3c_fb_free_memory(struct s3c_fb *sfb, struct s3c_fb_win *win)
1126 struct fb_info *fbi = win->fbinfo;
1136 * @win: The window to cleanup the resources for.
1141 static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win)
1145 if (win->fbinfo) {
1148 data &= ~SHADOWCON_CHx_ENABLE(win->index);
1149 data &= ~SHADOWCON_CHx_LOCAL_ENABLE(win->index);
1152 unregister_framebuffer(win->fbinfo);
1153 if (win->fbinfo->cmap.len)
1154 fb_dealloc_cmap(&win->fbinfo->cmap);
1155 s3c_fb_free_memory(sfb, win);
1156 framebuffer_release(win->fbinfo);
1176 struct s3c_fb_win *win;
1192 windata = sfb->pdata->win[win_no];
1199 win = fbinfo->par;
1200 *res = win;
1201 win->variant = *variant;
1202 win->fbinfo = fbinfo;
1203 win->parent = sfb;
1204 win->windata = windata;
1205 win->index = win_no;
1206 win->palette_buffer = (u32 *)(win + 1);
1208 ret = s3c_fb_alloc_memory(sfb, win);
1215 if (win->variant.palette_16bpp) {
1217 win->palette.r.offset = 11;
1218 win->palette.r.length = 5;
1219 win->palette.g.offset = 5;
1220 win->palette.g.length = 6;
1221 win->palette.b.offset = 0;
1222 win->palette.b.length = 5;
1226 win->palette.r.offset = 16;
1227 win->palette.r.length = 8;
1228 win->palette.g.offset = 8;
1229 win->palette.g.length = 8;
1230 win->palette.b.offset = 0;
1231 win->palette.b.length = 8;
1245 fbinfo->pseudo_palette = &win->pseudo_palette;
1257 ret = fb_alloc_cmap(&fbinfo->cmap, win->variant.palette_sz, 1);
1330 * @win: The window to process.
1334 static void s3c_fb_clear_win(struct s3c_fb *sfb, int win)
1339 writel(0, regs + sfb->variant.wincon + (win * 4));
1340 writel(0, regs + VIDOSD_A(win, sfb->variant));
1341 writel(0, regs + VIDOSD_B(win, sfb->variant));
1342 writel(0, regs + VIDOSD_C(win, sfb->variant));
1346 reg &= ~(SHADOWCON_WINx_PROTECT(win) |
1347 SHADOWCON_CHx_ENABLE(win) |
1348 SHADOWCON_CHx_LOCAL_ENABLE(win));
1360 int win;
1450 for (win = 0; win < fbdrv->variant.nr_windows; win++)
1451 s3c_fb_clear_win(sfb, win);
1454 for (win = 0; win < (fbdrv->variant.nr_windows - 1); win++) {
1457 regs += (win * 8);
1466 for (win = 0; win < fbdrv->variant.nr_windows; win++) {
1467 if (!pd->win[win])
1470 ret = s3c_fb_probe_win(sfb, win, fbdrv->win[win],
1471 &sfb->windows[win]);
1473 dev_err(dev, "failed to create window %d\n", win);
1474 for (; win >= 0; win--)
1475 s3c_fb_release_win(sfb, sfb->windows[win]);
1510 int win;
1514 for (win = 0; win < S3C_FB_MAX_WIN; win++)
1515 if (sfb->windows[win])
1516 s3c_fb_release_win(sfb, sfb->windows[win]);
1531 struct s3c_fb_win *win;
1537 win = sfb->windows[win_no];
1538 if (!win)
1542 s3c_fb_blank(FB_BLANK_POWERDOWN, win->fbinfo);
1559 struct s3c_fb_win *win;
1588 win = sfb->windows[win_no];
1589 if (!win)
1592 shadow_protect_win(win, 1);
1596 shadow_protect_win(win, 0);
1603 win = sfb->windows[win_no];
1604 if (!win)
1608 s3c_fb_set_par(win->fbinfo);
1728 .win[0] = &s3c_fb_data_64xx_wins[0],
1729 .win[1] = &s3c_fb_data_64xx_wins[1],
1730 .win[2] = &s3c_fb_data_64xx_wins[2],
1731 .win[3] = &s3c_fb_data_64xx_wins[3],
1732 .win[4] = &s3c_fb_data_64xx_wins[4],
1757 .win[0] = &(struct s3c_fb_win_variant) {
1761 .win[1] = &(struct s3c_fb_win_variant) {