Lines Matching refs:win
60 #define OSD_BASE(win, variant) ((variant).osd + ((win) * (variant).osd_stride)) argument
61 #define VIDOSD_A(win, variant) (OSD_BASE(win, variant) + 0x00) argument
62 #define VIDOSD_B(win, variant) (OSD_BASE(win, variant) + 0x04) argument
63 #define VIDOSD_C(win, variant) (OSD_BASE(win, variant) + 0x08) argument
64 #define VIDOSD_D(win, variant) (OSD_BASE(win, variant) + 0x0C) argument
136 struct s3c_fb_win_variant *win[S3C_FB_MAX_WIN]; member
226 static bool s3c_fb_validate_win_bpp(struct s3c_fb_win *win, unsigned int bpp) in s3c_fb_validate_win_bpp() argument
228 return win->variant.valid_bpp & VALID_BPP(bpp); in s3c_fb_validate_win_bpp()
242 struct s3c_fb_win *win = info->par; in s3c_fb_check_var() local
243 struct s3c_fb *sfb = win->parent; in s3c_fb_check_var()
250 if (!s3c_fb_validate_win_bpp(win, var->bits_per_pixel)) { in s3c_fb_check_var()
252 win->index, var->bits_per_pixel); in s3c_fb_check_var()
265 if (sfb->variant.palette[win->index] != 0) { in s3c_fb_check_var()
392 static void vidosd_set_size(struct s3c_fb_win *win, u32 size) in vidosd_set_size() argument
394 struct s3c_fb *sfb = win->parent; in vidosd_set_size()
397 if (win->variant.osd_size_off) in vidosd_set_size()
398 writel(size, sfb->regs + OSD_BASE(win->index, sfb->variant) in vidosd_set_size()
399 + win->variant.osd_size_off); in vidosd_set_size()
408 static void vidosd_set_alpha(struct s3c_fb_win *win, u32 alpha) in vidosd_set_alpha() argument
410 struct s3c_fb *sfb = win->parent; in vidosd_set_alpha()
412 if (win->variant.has_osd_alpha) in vidosd_set_alpha()
413 writel(alpha, sfb->regs + VIDOSD_C(win->index, sfb->variant)); in vidosd_set_alpha()
422 static void shadow_protect_win(struct s3c_fb_win *win, bool protect) in shadow_protect_win() argument
424 struct s3c_fb *sfb = win->parent; in shadow_protect_win()
432 writel(reg | SHADOWCON_WINx_PROTECT(win->index), in shadow_protect_win()
440 writel(reg & ~SHADOWCON_WINx_PROTECT(win->index), in shadow_protect_win()
488 struct s3c_fb_win *win = info->par; in s3c_fb_set_par() local
489 struct s3c_fb *sfb = win->parent; in s3c_fb_set_par()
492 int win_no = win->index; in s3c_fb_set_par()
501 shadow_protect_win(win, 1); in s3c_fb_set_par()
511 if (win->variant.palette_sz >= 256) in s3c_fb_set_par()
573 vidosd_set_alpha(win, alpha); in s3c_fb_set_par()
574 vidosd_set_size(win, data); in s3c_fb_set_par()
584 sfb->enabled |= (1 << win->index); in s3c_fb_set_par()
675 shadow_protect_win(win, 0); in s3c_fb_set_par()
697 struct s3c_fb_win *win, in s3c_fb_update_palette() argument
704 palreg = sfb->regs + sfb->variant.palette[win->index]; in s3c_fb_update_palette()
707 __func__, win->index, reg, palreg, value); in s3c_fb_update_palette()
709 win->palette_buffer[reg] = value; in s3c_fb_update_palette()
714 if (win->variant.palette_16bpp) in s3c_fb_update_palette()
743 struct s3c_fb_win *win = info->par; in s3c_fb_setcolreg() local
744 struct s3c_fb *sfb = win->parent; in s3c_fb_setcolreg()
748 __func__, win->index, regno, red, green, blue); in s3c_fb_setcolreg()
768 if (regno < win->variant.palette_sz) { in s3c_fb_setcolreg()
769 val = chan_to_field(red, &win->palette.r); in s3c_fb_setcolreg()
770 val |= chan_to_field(green, &win->palette.g); in s3c_fb_setcolreg()
771 val |= chan_to_field(blue, &win->palette.b); in s3c_fb_setcolreg()
773 s3c_fb_update_palette(sfb, win, regno, val); in s3c_fb_setcolreg()
796 struct s3c_fb_win *win = info->par; in s3c_fb_blank() local
797 struct s3c_fb *sfb = win->parent; in s3c_fb_blank()
798 unsigned int index = win->index; in s3c_fb_blank()
816 shadow_protect_win(win, 1); in s3c_fb_blank()
819 shadow_protect_win(win, 0); in s3c_fb_blank()
823 shadow_protect_win(win, 1); in s3c_fb_blank()
825 shadow_protect_win(win, 0); in s3c_fb_blank()
837 shadow_protect_win(win, 1); in s3c_fb_blank()
846 shadow_protect_win(win, 0); in s3c_fb_blank()
867 struct s3c_fb_win *win = info->par; in s3c_fb_pan_display() local
868 struct s3c_fb *sfb = win->parent; in s3c_fb_pan_display()
869 void __iomem *buf = sfb->regs + win->index * 8; in s3c_fb_pan_display()
901 shadow_protect_win(win, 1); in s3c_fb_pan_display()
906 shadow_protect_win(win, 0); in s3c_fb_pan_display()
1017 struct s3c_fb_win *win = info->par; in s3c_fb_ioctl() local
1018 struct s3c_fb *sfb = win->parent; in s3c_fb_ioctl()
1080 static int s3c_fb_alloc_memory(struct s3c_fb *sfb, struct s3c_fb_win *win) in s3c_fb_alloc_memory() argument
1082 struct s3c_fb_pd_win *windata = win->windata; in s3c_fb_alloc_memory()
1084 struct fb_info *fbi = win->fbinfo; in s3c_fb_alloc_memory()
1125 static void s3c_fb_free_memory(struct s3c_fb *sfb, struct s3c_fb_win *win) in s3c_fb_free_memory() argument
1127 struct fb_info *fbi = win->fbinfo; in s3c_fb_free_memory()
1141 static void s3c_fb_release_win(struct s3c_fb *sfb, struct s3c_fb_win *win) in s3c_fb_release_win() argument
1145 if (win->fbinfo) { in s3c_fb_release_win()
1148 data &= ~SHADOWCON_CHx_ENABLE(win->index); in s3c_fb_release_win()
1149 data &= ~SHADOWCON_CHx_LOCAL_ENABLE(win->index); in s3c_fb_release_win()
1152 unregister_framebuffer(win->fbinfo); in s3c_fb_release_win()
1153 if (win->fbinfo->cmap.len) in s3c_fb_release_win()
1154 fb_dealloc_cmap(&win->fbinfo->cmap); in s3c_fb_release_win()
1155 s3c_fb_free_memory(sfb, win); in s3c_fb_release_win()
1156 framebuffer_release(win->fbinfo); in s3c_fb_release_win()
1176 struct s3c_fb_win *win; in s3c_fb_probe_win() local
1192 windata = sfb->pdata->win[win_no]; in s3c_fb_probe_win()
1199 win = fbinfo->par; in s3c_fb_probe_win()
1200 *res = win; in s3c_fb_probe_win()
1202 win->variant = *variant; in s3c_fb_probe_win()
1203 win->fbinfo = fbinfo; in s3c_fb_probe_win()
1204 win->parent = sfb; in s3c_fb_probe_win()
1205 win->windata = windata; in s3c_fb_probe_win()
1206 win->index = win_no; in s3c_fb_probe_win()
1207 win->palette_buffer = (u32 *)(win + 1); in s3c_fb_probe_win()
1209 ret = s3c_fb_alloc_memory(sfb, win); in s3c_fb_probe_win()
1216 if (win->variant.palette_16bpp) { in s3c_fb_probe_win()
1218 win->palette.r.offset = 11; in s3c_fb_probe_win()
1219 win->palette.r.length = 5; in s3c_fb_probe_win()
1220 win->palette.g.offset = 5; in s3c_fb_probe_win()
1221 win->palette.g.length = 6; in s3c_fb_probe_win()
1222 win->palette.b.offset = 0; in s3c_fb_probe_win()
1223 win->palette.b.length = 5; in s3c_fb_probe_win()
1227 win->palette.r.offset = 16; in s3c_fb_probe_win()
1228 win->palette.r.length = 8; in s3c_fb_probe_win()
1229 win->palette.g.offset = 8; in s3c_fb_probe_win()
1230 win->palette.g.length = 8; in s3c_fb_probe_win()
1231 win->palette.b.offset = 0; in s3c_fb_probe_win()
1232 win->palette.b.length = 8; in s3c_fb_probe_win()
1247 fbinfo->pseudo_palette = &win->pseudo_palette; in s3c_fb_probe_win()
1259 ret = fb_alloc_cmap(&fbinfo->cmap, win->variant.palette_sz, 1); in s3c_fb_probe_win()
1336 static void s3c_fb_clear_win(struct s3c_fb *sfb, int win) in s3c_fb_clear_win() argument
1341 writel(0, regs + sfb->variant.wincon + (win * 4)); in s3c_fb_clear_win()
1342 writel(0, regs + VIDOSD_A(win, sfb->variant)); in s3c_fb_clear_win()
1343 writel(0, regs + VIDOSD_B(win, sfb->variant)); in s3c_fb_clear_win()
1344 writel(0, regs + VIDOSD_C(win, sfb->variant)); in s3c_fb_clear_win()
1348 reg &= ~(SHADOWCON_WINx_PROTECT(win) | in s3c_fb_clear_win()
1349 SHADOWCON_CHx_ENABLE(win) | in s3c_fb_clear_win()
1350 SHADOWCON_CHx_LOCAL_ENABLE(win)); in s3c_fb_clear_win()
1363 int win; in s3c_fb_probe() local
1455 for (win = 0; win < fbdrv->variant.nr_windows; win++) in s3c_fb_probe()
1456 s3c_fb_clear_win(sfb, win); in s3c_fb_probe()
1459 for (win = 0; win < (fbdrv->variant.nr_windows - 1); win++) { in s3c_fb_probe()
1462 regs += (win * 8); in s3c_fb_probe()
1471 for (win = 0; win < fbdrv->variant.nr_windows; win++) { in s3c_fb_probe()
1472 if (!pd->win[win]) in s3c_fb_probe()
1475 ret = s3c_fb_probe_win(sfb, win, fbdrv->win[win], in s3c_fb_probe()
1476 &sfb->windows[win]); in s3c_fb_probe()
1478 dev_err(dev, "failed to create window %d\n", win); in s3c_fb_probe()
1479 for (; win >= 0; win--) in s3c_fb_probe()
1480 s3c_fb_release_win(sfb, sfb->windows[win]); in s3c_fb_probe()
1515 int win; in s3c_fb_remove() local
1519 for (win = 0; win < S3C_FB_MAX_WIN; win++) in s3c_fb_remove()
1520 if (sfb->windows[win]) in s3c_fb_remove()
1521 s3c_fb_release_win(sfb, sfb->windows[win]); in s3c_fb_remove()
1538 struct s3c_fb_win *win; in s3c_fb_suspend() local
1544 win = sfb->windows[win_no]; in s3c_fb_suspend()
1545 if (!win) in s3c_fb_suspend()
1549 s3c_fb_blank(FB_BLANK_POWERDOWN, win->fbinfo); in s3c_fb_suspend()
1566 struct s3c_fb_win *win; in s3c_fb_resume() local
1595 win = sfb->windows[win_no]; in s3c_fb_resume()
1596 if (!win) in s3c_fb_resume()
1599 shadow_protect_win(win, 1); in s3c_fb_resume()
1603 shadow_protect_win(win, 0); in s3c_fb_resume()
1610 win = sfb->windows[win_no]; in s3c_fb_resume()
1611 if (!win) in s3c_fb_resume()
1615 s3c_fb_set_par(win->fbinfo); in s3c_fb_resume()
1735 .win[0] = &s3c_fb_data_64xx_wins[0],
1736 .win[1] = &s3c_fb_data_64xx_wins[1],
1737 .win[2] = &s3c_fb_data_64xx_wins[2],
1738 .win[3] = &s3c_fb_data_64xx_wins[3],
1739 .win[4] = &s3c_fb_data_64xx_wins[4],
1764 .win[0] = &(struct s3c_fb_win_variant) {
1768 .win[1] = &(struct s3c_fb_win_variant) {