Lines Matching +full:sync +full:- +full:on +full:- +full:green
1 // SPDX-License-Identifier: GPL-2.0-only
8 * Driver layout based loosely on tgafb.c, see that file for credits.
117 u16 hss; /* Hor Sync Start */
118 u16 hsc; /* Hor Sync Clear */
119 u16 csc; /* Composite Sync Clear */
122 u16 vss; /* Vert Sync Start */
123 u16 vsc; /* Vert Sync Clear */
177 * go to John Stone (johns@umr.edu) from OpenBSD), red, green and blue
209 struct cg14_regs __iomem *regs = par->regs; in __cg14_reset()
212 val = sbus_readb(®s->mcr); in __cg14_reset()
214 sbus_writeb(val, ®s->mcr); in __cg14_reset()
219 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_pan_display()
225 spin_lock_irqsave(&par->lock, flags); in cg14_pan_display()
227 spin_unlock_irqrestore(&par->lock, flags); in cg14_pan_display()
229 if (var->xoffset || var->yoffset || var->vmode) in cg14_pan_display()
230 return -EINVAL; in cg14_pan_display()
235 * cg14_setcolreg - Optional function. Sets a color register.
238 * @green: The green value which can be up to 16 bits wide
244 unsigned red, unsigned green, unsigned blue, in cg14_setcolreg() argument
247 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_setcolreg()
248 struct cg14_clut __iomem *clut = par->clut; in cg14_setcolreg()
256 green >>= 8; in cg14_setcolreg()
258 val = (red | (green << 8) | (blue << 16)); in cg14_setcolreg()
260 spin_lock_irqsave(&par->lock, flags); in cg14_setcolreg()
261 sbus_writel(val, &clut->c_clut[regno]); in cg14_setcolreg()
262 spin_unlock_irqrestore(&par->lock, flags); in cg14_setcolreg()
269 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_mmap()
271 return sbusfb_mmap_helper(par->mmap_map, in cg14_mmap()
272 info->fix.smem_start, info->fix.smem_len, in cg14_mmap()
273 par->iospace, vma); in cg14_mmap()
278 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_ioctl()
279 struct cg14_regs __iomem *regs = par->regs; in cg14_ioctl()
286 spin_lock_irqsave(&par->lock, flags); in cg14_ioctl()
288 spin_unlock_irqrestore(&par->lock, flags); in cg14_ioctl()
294 spin_lock_irqsave(&par->lock, flags); in cg14_ioctl()
296 kmdi.mdi_height = info->var.yres; in cg14_ioctl()
297 kmdi.mdi_width = info->var.xres; in cg14_ioctl()
298 kmdi.mdi_mode = par->mode; in cg14_ioctl()
300 kmdi.mdi_size = par->ramsize; in cg14_ioctl()
301 spin_unlock_irqrestore(&par->lock, flags); in cg14_ioctl()
305 ret = -EFAULT; in cg14_ioctl()
310 ret = -EFAULT; in cg14_ioctl()
314 spin_lock_irqsave(&par->lock, flags); in cg14_ioctl()
315 cur_mode = sbus_readb(®s->mcr); in cg14_ioctl()
332 ret = -ENOSYS; in cg14_ioctl()
336 sbus_writeb(cur_mode, ®s->mcr); in cg14_ioctl()
337 par->mode = mode; in cg14_ioctl()
339 spin_unlock_irqrestore(&par->lock, flags); in cg14_ioctl()
345 info->fix.smem_len); in cg14_ioctl()
359 snprintf(info->fix.id, sizeof(info->fix.id), "%pOFn", dp); in cg14_init_fix()
361 info->fix.type = FB_TYPE_PACKED_PIXELS; in cg14_init_fix()
362 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in cg14_init_fix()
364 info->fix.line_length = linebytes; in cg14_init_fix()
366 info->fix.accel = FB_ACCEL_SUN_CG14; in cg14_init_fix()
396 .voff = CG3_MMAP_OFFSET - 0x7000,
451 if (par->regs) in cg14_unmap_regs()
452 of_iounmap(&op->resource[0], in cg14_unmap_regs()
453 par->regs, sizeof(struct cg14_regs)); in cg14_unmap_regs()
454 if (par->clut) in cg14_unmap_regs()
455 of_iounmap(&op->resource[0], in cg14_unmap_regs()
456 par->clut, sizeof(struct cg14_clut)); in cg14_unmap_regs()
457 if (par->cursor) in cg14_unmap_regs()
458 of_iounmap(&op->resource[0], in cg14_unmap_regs()
459 par->cursor, sizeof(struct cg14_cursor)); in cg14_unmap_regs()
460 if (info->screen_base) in cg14_unmap_regs()
461 of_iounmap(&op->resource[1], in cg14_unmap_regs()
462 info->screen_base, info->fix.smem_len); in cg14_unmap_regs()
467 struct device_node *dp = op->dev.of_node; in cg14_probe()
472 info = framebuffer_alloc(sizeof(struct cg14_par), &op->dev); in cg14_probe()
474 err = -ENOMEM; in cg14_probe()
477 par = info->par; in cg14_probe()
479 spin_lock_init(&par->lock); in cg14_probe()
481 sbusfb_fill_var(&info->var, dp, 8); in cg14_probe()
482 info->var.red.length = 8; in cg14_probe()
483 info->var.green.length = 8; in cg14_probe()
484 info->var.blue.length = 8; in cg14_probe()
487 info->var.xres); in cg14_probe()
488 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); in cg14_probe()
490 if (of_node_name_eq(dp->parent, "sbus") || in cg14_probe()
491 of_node_name_eq(dp->parent, "sbi")) { in cg14_probe()
492 info->fix.smem_start = op->resource[0].start; in cg14_probe()
493 par->iospace = op->resource[0].flags & IORESOURCE_BITS; in cg14_probe()
495 info->fix.smem_start = op->resource[1].start; in cg14_probe()
496 par->iospace = op->resource[0].flags & IORESOURCE_BITS; in cg14_probe()
499 par->regs = of_ioremap(&op->resource[0], 0, in cg14_probe()
501 par->clut = of_ioremap(&op->resource[0], CG14_CLUT1, in cg14_probe()
503 par->cursor = of_ioremap(&op->resource[0], CG14_CURSORREGS, in cg14_probe()
506 info->screen_base = of_ioremap(&op->resource[1], 0, in cg14_probe()
507 info->fix.smem_len, "cg14 ram"); in cg14_probe()
509 if (!par->regs || !par->clut || !par->cursor || !info->screen_base) in cg14_probe()
512 is_8mb = (resource_size(&op->resource[1]) == (8 * 1024 * 1024)); in cg14_probe()
514 BUILD_BUG_ON(sizeof(par->mmap_map) != sizeof(__cg14_mmap_map)); in cg14_probe()
516 memcpy(&par->mmap_map, &__cg14_mmap_map, sizeof(par->mmap_map)); in cg14_probe()
519 struct sbus_mmap_map *map = &par->mmap_map[i]; in cg14_probe()
521 if (!map->size) in cg14_probe()
523 if (map->poff & 0x80000000) in cg14_probe()
524 map->poff = (map->poff & 0x7fffffff) + in cg14_probe()
525 (op->resource[0].start - in cg14_probe()
526 op->resource[1].start); in cg14_probe()
528 map->size >= 0x100000 && in cg14_probe()
529 map->size <= 0x400000) in cg14_probe()
530 map->size *= 2; in cg14_probe()
533 par->mode = MDI_8_PIX; in cg14_probe()
534 par->ramsize = (is_8mb ? 0x800000 : 0x400000); in cg14_probe()
536 info->flags = FBINFO_DEFAULT | FBINFO_HWACCEL_YPAN; in cg14_probe()
537 info->fbops = &cg14_ops; in cg14_probe()
541 if (fb_alloc_cmap(&info->cmap, 256, 0)) in cg14_probe()
544 fb_set_cmap(&info->cmap, info); in cg14_probe()
552 dev_set_drvdata(&op->dev, info); in cg14_probe()
556 par->iospace, info->fix.smem_start, in cg14_probe()
557 par->ramsize >> 20); in cg14_probe()
562 fb_dealloc_cmap(&info->cmap); in cg14_probe()
574 struct fb_info *info = dev_get_drvdata(&op->dev); in cg14_remove()
575 struct cg14_par *par = info->par; in cg14_remove()
578 fb_dealloc_cmap(&info->cmap); in cg14_remove()
607 return -ENODEV; in cg14_init()