Lines Matching +full:op +full:- +full:mode
1 // SPDX-License-Identifier: GPL-2.0-only
98 u8 tms[2]; /* Test Mode Status Regs */
103 u32 tmr; /* Test Mode Read Back */
154 u8 mode; /* Mode Register */ member
169 * the screen in four parts, while operating in 24 bits mode. Each
197 int mode; member
203 struct cg14_regs __iomem *regs = par->regs; in __cg14_reset()
206 val = sbus_readb(®s->mcr); in __cg14_reset()
208 sbus_writeb(val, ®s->mcr); in __cg14_reset()
213 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_pan_display()
217 * graphics mode. in cg14_pan_display()
219 spin_lock_irqsave(&par->lock, flags); in cg14_pan_display()
221 spin_unlock_irqrestore(&par->lock, flags); in cg14_pan_display()
223 if (var->xoffset || var->yoffset || var->vmode) in cg14_pan_display()
224 return -EINVAL; in cg14_pan_display()
229 * cg14_setcolreg - Optional function. Sets a color register.
241 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_setcolreg()
242 struct cg14_clut __iomem *clut = par->clut; in cg14_setcolreg()
254 spin_lock_irqsave(&par->lock, flags); in cg14_setcolreg()
255 sbus_writel(val, &clut->c_clut[regno]); in cg14_setcolreg()
256 spin_unlock_irqrestore(&par->lock, flags); in cg14_setcolreg()
263 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_sbusfb_mmap()
265 return sbusfb_mmap_helper(par->mmap_map, in cg14_sbusfb_mmap()
266 info->fix.smem_start, info->fix.smem_len, in cg14_sbusfb_mmap()
267 par->iospace, vma); in cg14_sbusfb_mmap()
272 struct cg14_par *par = (struct cg14_par *) info->par; in cg14_sbusfb_ioctl()
273 struct cg14_regs __iomem *regs = par->regs; in cg14_sbusfb_ioctl()
276 int cur_mode, mode, ret = 0; in cg14_sbusfb_ioctl() local
280 spin_lock_irqsave(&par->lock, flags); in cg14_sbusfb_ioctl()
282 spin_unlock_irqrestore(&par->lock, flags); in cg14_sbusfb_ioctl()
288 spin_lock_irqsave(&par->lock, flags); in cg14_sbusfb_ioctl()
290 kmdi.mdi_height = info->var.yres; in cg14_sbusfb_ioctl()
291 kmdi.mdi_width = info->var.xres; in cg14_sbusfb_ioctl()
292 kmdi.mdi_mode = par->mode; in cg14_sbusfb_ioctl()
294 kmdi.mdi_size = par->ramsize; in cg14_sbusfb_ioctl()
295 spin_unlock_irqrestore(&par->lock, flags); in cg14_sbusfb_ioctl()
299 ret = -EFAULT; in cg14_sbusfb_ioctl()
303 if (get_user(mode, (int __user *) arg)) { in cg14_sbusfb_ioctl()
304 ret = -EFAULT; in cg14_sbusfb_ioctl()
308 spin_lock_irqsave(&par->lock, flags); in cg14_sbusfb_ioctl()
309 cur_mode = sbus_readb(®s->mcr); in cg14_sbusfb_ioctl()
311 switch(mode) { in cg14_sbusfb_ioctl()
326 ret = -ENOSYS; in cg14_sbusfb_ioctl()
330 sbus_writeb(cur_mode, ®s->mcr); in cg14_sbusfb_ioctl()
331 par->mode = mode; in cg14_sbusfb_ioctl()
333 spin_unlock_irqrestore(&par->lock, flags); in cg14_sbusfb_ioctl()
339 info->fix.smem_len); in cg14_sbusfb_ioctl()
353 snprintf(info->fix.id, sizeof(info->fix.id), "%pOFn", dp); in cg14_init_fix()
355 info->fix.type = FB_TYPE_PACKED_PIXELS; in cg14_init_fix()
356 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in cg14_init_fix()
358 info->fix.line_length = linebytes; in cg14_init_fix()
360 info->fix.accel = FB_ACCEL_SUN_CG14; in cg14_init_fix()
390 .voff = CG3_MMAP_OFFSET - 0x7000,
442 static void cg14_unmap_regs(struct platform_device *op, struct fb_info *info, in cg14_unmap_regs() argument
445 if (par->regs) in cg14_unmap_regs()
446 of_iounmap(&op->resource[0], in cg14_unmap_regs()
447 par->regs, sizeof(struct cg14_regs)); in cg14_unmap_regs()
448 if (par->clut) in cg14_unmap_regs()
449 of_iounmap(&op->resource[0], in cg14_unmap_regs()
450 par->clut, sizeof(struct cg14_clut)); in cg14_unmap_regs()
451 if (par->cursor) in cg14_unmap_regs()
452 of_iounmap(&op->resource[0], in cg14_unmap_regs()
453 par->cursor, sizeof(struct cg14_cursor)); in cg14_unmap_regs()
454 if (info->screen_base) in cg14_unmap_regs()
455 of_iounmap(&op->resource[1], in cg14_unmap_regs()
456 info->screen_base, info->fix.smem_len); in cg14_unmap_regs()
459 static int cg14_probe(struct platform_device *op) in cg14_probe() argument
461 struct device_node *dp = op->dev.of_node; in cg14_probe()
466 info = framebuffer_alloc(sizeof(struct cg14_par), &op->dev); in cg14_probe()
468 err = -ENOMEM; in cg14_probe()
471 par = info->par; in cg14_probe()
473 spin_lock_init(&par->lock); in cg14_probe()
475 sbusfb_fill_var(&info->var, dp, 8); in cg14_probe()
476 info->var.red.length = 8; in cg14_probe()
477 info->var.green.length = 8; in cg14_probe()
478 info->var.blue.length = 8; in cg14_probe()
481 info->var.xres); in cg14_probe()
482 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); in cg14_probe()
484 if (of_node_name_eq(dp->parent, "sbus") || in cg14_probe()
485 of_node_name_eq(dp->parent, "sbi")) { in cg14_probe()
486 info->fix.smem_start = op->resource[0].start; in cg14_probe()
487 par->iospace = op->resource[0].flags & IORESOURCE_BITS; in cg14_probe()
489 info->fix.smem_start = op->resource[1].start; in cg14_probe()
490 par->iospace = op->resource[0].flags & IORESOURCE_BITS; in cg14_probe()
493 par->regs = of_ioremap(&op->resource[0], 0, in cg14_probe()
495 par->clut = of_ioremap(&op->resource[0], CG14_CLUT1, in cg14_probe()
497 par->cursor = of_ioremap(&op->resource[0], CG14_CURSORREGS, in cg14_probe()
500 info->screen_base = of_ioremap(&op->resource[1], 0, in cg14_probe()
501 info->fix.smem_len, "cg14 ram"); in cg14_probe()
503 if (!par->regs || !par->clut || !par->cursor || !info->screen_base) in cg14_probe()
506 is_8mb = (resource_size(&op->resource[1]) == (8 * 1024 * 1024)); in cg14_probe()
508 BUILD_BUG_ON(sizeof(par->mmap_map) != sizeof(__cg14_mmap_map)); in cg14_probe()
510 memcpy(&par->mmap_map, &__cg14_mmap_map, sizeof(par->mmap_map)); in cg14_probe()
513 struct sbus_mmap_map *map = &par->mmap_map[i]; in cg14_probe()
515 if (!map->size) in cg14_probe()
517 if (map->poff & 0x80000000) in cg14_probe()
518 map->poff = (map->poff & 0x7fffffff) + in cg14_probe()
519 (op->resource[0].start - in cg14_probe()
520 op->resource[1].start); in cg14_probe()
522 map->size >= 0x100000 && in cg14_probe()
523 map->size <= 0x400000) in cg14_probe()
524 map->size *= 2; in cg14_probe()
527 par->mode = MDI_8_PIX; in cg14_probe()
528 par->ramsize = (is_8mb ? 0x800000 : 0x400000); in cg14_probe()
530 info->flags = FBINFO_HWACCEL_YPAN; in cg14_probe()
531 info->fbops = &cg14_ops; in cg14_probe()
535 if (fb_alloc_cmap(&info->cmap, 256, 0)) in cg14_probe()
538 fb_set_cmap(&info->cmap, info); in cg14_probe()
546 dev_set_drvdata(&op->dev, info); in cg14_probe()
550 par->iospace, info->fix.smem_start, in cg14_probe()
551 par->ramsize >> 20); in cg14_probe()
556 fb_dealloc_cmap(&info->cmap); in cg14_probe()
559 cg14_unmap_regs(op, info, par); in cg14_probe()
566 static void cg14_remove(struct platform_device *op) in cg14_remove() argument
568 struct fb_info *info = dev_get_drvdata(&op->dev); in cg14_remove()
569 struct cg14_par *par = info->par; in cg14_remove()
572 fb_dealloc_cmap(&info->cmap); in cg14_remove()
574 cg14_unmap_regs(op, info, par); in cg14_remove()
599 return -ENODEV; in cg14_init()