Lines Matching +full:op +full:- +full:mode

1 // SPDX-License-Identifier: GPL-2.0-only
105 u8 tms[2]; /* Test Mode Status Regs */
110 u32 tmr; /* Test Mode Read Back */
161 u8 mode; /* Mode Register */ member
176 * the screen in four parts, while operating in 24 bits mode. Each
204 int mode; member
210 struct cg14_regs __iomem *regs = par->regs; in __cg14_reset()
213 val = sbus_readb(&regs->mcr); in __cg14_reset()
215 sbus_writeb(val, &regs->mcr); in __cg14_reset()
220 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_pan_display()
224 * graphics mode. in cg14_pan_display()
226 spin_lock_irqsave(&par->lock, flags); in cg14_pan_display()
228 spin_unlock_irqrestore(&par->lock, flags); in cg14_pan_display()
230 if (var->xoffset || var->yoffset || var->vmode) in cg14_pan_display()
231 return -EINVAL; in cg14_pan_display()
236 * cg14_setcolreg - Optional function. Sets a color register.
248 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_setcolreg()
249 struct cg14_clut __iomem *clut = par->clut; in cg14_setcolreg()
261 spin_lock_irqsave(&par->lock, flags); in cg14_setcolreg()
262 sbus_writel(val, &clut->c_clut[regno]); in cg14_setcolreg()
263 spin_unlock_irqrestore(&par->lock, flags); in cg14_setcolreg()
270 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_mmap()
272 return sbusfb_mmap_helper(par->mmap_map, in cg14_mmap()
273 info->fix.smem_start, info->fix.smem_len, in cg14_mmap()
274 par->iospace, vma); in cg14_mmap()
279 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_ioctl()
280 struct cg14_regs __iomem *regs = par->regs; in cg14_ioctl()
283 int cur_mode, mode, ret = 0; in cg14_ioctl() local
287 spin_lock_irqsave(&par->lock, flags); in cg14_ioctl()
289 spin_unlock_irqrestore(&par->lock, flags); in cg14_ioctl()
295 spin_lock_irqsave(&par->lock, flags); in cg14_ioctl()
297 kmdi.mdi_height = info->var.yres; in cg14_ioctl()
298 kmdi.mdi_width = info->var.xres; in cg14_ioctl()
299 kmdi.mdi_mode = par->mode; in cg14_ioctl()
301 kmdi.mdi_size = par->ramsize; in cg14_ioctl()
302 spin_unlock_irqrestore(&par->lock, flags); in cg14_ioctl()
306 ret = -EFAULT; in cg14_ioctl()
310 if (get_user(mode, (int __user *) arg)) { in cg14_ioctl()
311 ret = -EFAULT; in cg14_ioctl()
315 spin_lock_irqsave(&par->lock, flags); in cg14_ioctl()
316 cur_mode = sbus_readb(&regs->mcr); in cg14_ioctl()
318 switch(mode) { in cg14_ioctl()
333 ret = -ENOSYS; in cg14_ioctl()
337 sbus_writeb(cur_mode, &regs->mcr); in cg14_ioctl()
338 par->mode = mode; in cg14_ioctl()
340 spin_unlock_irqrestore(&par->lock, flags); in cg14_ioctl()
346 info->fix.smem_len); in cg14_ioctl()
360 snprintf(info->fix.id, sizeof(info->fix.id), "%pOFn", dp); in cg14_init_fix()
362 info->fix.type = FB_TYPE_PACKED_PIXELS; in cg14_init_fix()
363 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in cg14_init_fix()
365 info->fix.line_length = linebytes; in cg14_init_fix()
367 info->fix.accel = FB_ACCEL_SUN_CG14; in cg14_init_fix()
397 .voff = CG3_MMAP_OFFSET - 0x7000,
449 static void cg14_unmap_regs(struct platform_device *op, struct fb_info *info, in cg14_unmap_regs() argument
452 if (par->regs) in cg14_unmap_regs()
453 of_iounmap(&op->resource[0], in cg14_unmap_regs()
454 par->regs, sizeof(struct cg14_regs)); in cg14_unmap_regs()
455 if (par->clut) in cg14_unmap_regs()
456 of_iounmap(&op->resource[0], in cg14_unmap_regs()
457 par->clut, sizeof(struct cg14_clut)); in cg14_unmap_regs()
458 if (par->cursor) in cg14_unmap_regs()
459 of_iounmap(&op->resource[0], in cg14_unmap_regs()
460 par->cursor, sizeof(struct cg14_cursor)); in cg14_unmap_regs()
461 if (info->screen_base) in cg14_unmap_regs()
462 of_iounmap(&op->resource[1], in cg14_unmap_regs()
463 info->screen_base, info->fix.smem_len); in cg14_unmap_regs()
466 static int cg14_probe(struct platform_device *op) in cg14_probe() argument
468 struct device_node *dp = op->dev.of_node; in cg14_probe()
473 info = framebuffer_alloc(sizeof(struct cg14_par), &op->dev); in cg14_probe()
475 err = -ENOMEM; in cg14_probe()
478 par = info->par; in cg14_probe()
480 spin_lock_init(&par->lock); in cg14_probe()
482 sbusfb_fill_var(&info->var, dp, 8); in cg14_probe()
483 info->var.red.length = 8; in cg14_probe()
484 info->var.green.length = 8; in cg14_probe()
485 info->var.blue.length = 8; in cg14_probe()
488 info->var.xres); in cg14_probe()
489 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); in cg14_probe()
491 if (of_node_name_eq(dp->parent, "sbus") || in cg14_probe()
492 of_node_name_eq(dp->parent, "sbi")) { in cg14_probe()
493 info->fix.smem_start = op->resource[0].start; in cg14_probe()
494 par->iospace = op->resource[0].flags & IORESOURCE_BITS; in cg14_probe()
496 info->fix.smem_start = op->resource[1].start; in cg14_probe()
497 par->iospace = op->resource[0].flags & IORESOURCE_BITS; in cg14_probe()
500 par->regs = of_ioremap(&op->resource[0], 0, in cg14_probe()
502 par->clut = of_ioremap(&op->resource[0], CG14_CLUT1, in cg14_probe()
504 par->cursor = of_ioremap(&op->resource[0], CG14_CURSORREGS, in cg14_probe()
507 info->screen_base = of_ioremap(&op->resource[1], 0, in cg14_probe()
508 info->fix.smem_len, "cg14 ram"); in cg14_probe()
510 if (!par->regs || !par->clut || !par->cursor || !info->screen_base) in cg14_probe()
513 is_8mb = (resource_size(&op->resource[1]) == (8 * 1024 * 1024)); in cg14_probe()
515 BUILD_BUG_ON(sizeof(par->mmap_map) != sizeof(__cg14_mmap_map)); in cg14_probe()
517 memcpy(&par->mmap_map, &__cg14_mmap_map, sizeof(par->mmap_map)); in cg14_probe()
520 struct sbus_mmap_map *map = &par->mmap_map[i]; in cg14_probe()
522 if (!map->size) in cg14_probe()
524 if (map->poff & 0x80000000) in cg14_probe()
525 map->poff = (map->poff & 0x7fffffff) + in cg14_probe()
526 (op->resource[0].start - in cg14_probe()
527 op->resource[1].start); in cg14_probe()
529 map->size >= 0x100000 && in cg14_probe()
530 map->size <= 0x400000) in cg14_probe()
531 map->size *= 2; in cg14_probe()
534 par->mode = MDI_8_PIX; in cg14_probe()
535 par->ramsize = (is_8mb ? 0x800000 : 0x400000); in cg14_probe()
537 info->flags = FBINFO_HWACCEL_YPAN; in cg14_probe()
538 info->fbops = &cg14_ops; in cg14_probe()
542 if (fb_alloc_cmap(&info->cmap, 256, 0)) in cg14_probe()
545 fb_set_cmap(&info->cmap, info); in cg14_probe()
553 dev_set_drvdata(&op->dev, info); in cg14_probe()
557 par->iospace, info->fix.smem_start, in cg14_probe()
558 par->ramsize >> 20); in cg14_probe()
563 fb_dealloc_cmap(&info->cmap); in cg14_probe()
566 cg14_unmap_regs(op, info, par); in cg14_probe()
573 static void cg14_remove(struct platform_device *op) in cg14_remove() argument
575 struct fb_info *info = dev_get_drvdata(&op->dev); in cg14_remove()
576 struct cg14_par *par = info->par; in cg14_remove()
579 fb_dealloc_cmap(&info->cmap); in cg14_remove()
581 cg14_unmap_regs(op, info, par); in cg14_remove()
606 return -ENODEV; in cg14_init()