Lines Matching +full:0 +full:- +full:1152

1 // SPDX-License-Identifier: GPL-2.0-only
52 #define CG3_CR_ENABLE_INTS 0x80
53 #define CG3_CR_ENABLE_VIDEO 0x40
54 #define CG3_CR_ENABLE_TIMING 0x20
55 #define CG3_CR_ENABLE_CURCMP 0x10
56 #define CG3_CR_XTAL_MASK 0x0c
57 #define CG3_CR_DIVISOR_MASK 0x03
60 #define CG3_SR_PENDING_INT 0x80
61 #define CG3_SR_RES_MASK 0x70
62 #define CG3_SR_1152_900_76_A 0x40
63 #define CG3_SR_1152_900_76_B 0x60
64 #define CG3_SR_ID_MASK 0x0f
65 #define CG3_SR_ID_COLOR 0x01
66 #define CG3_SR_ID_MONO 0x02
67 #define CG3_SR_ID_MONO_ECL 0x03
70 CG3_AT_66HZ = 0,
103 #define CG3_REGS_OFFSET 0x400000UL
104 #define CG3_RAM_OFFSET 0x800000UL
112 #define CG3_FLAG_BLANKED 0x00000001
113 #define CG3_FLAG_RDI 0x00000002
119 * cg3_setcolreg - Optional function. Sets a color register.
120 * @regno: boolean, 0 copy local, 1 get_user() function
136 struct cg3_par *par = (struct cg3_par *) info->par; in cg3_setcolreg()
137 struct bt_regs __iomem *bt = &par->regs->cmap; in cg3_setcolreg()
150 spin_lock_irqsave(&par->lock, flags); in cg3_setcolreg()
152 p8 = (u8 *)par->sw_cmap + (regno * 3); in cg3_setcolreg()
153 p8[0] = red; in cg3_setcolreg()
158 #define D4M4(x) ((x)&~0x3) /* (x/4)*4 */ in cg3_setcolreg()
161 p32 = &par->sw_cmap[D4M3(regno)]; in cg3_setcolreg()
162 sbus_writel(D4M4(regno), &bt->addr); in cg3_setcolreg()
163 while (count--) in cg3_setcolreg()
164 sbus_writel(*p32++, &bt->color_map); in cg3_setcolreg()
169 spin_unlock_irqrestore(&par->lock, flags); in cg3_setcolreg()
171 return 0; in cg3_setcolreg()
175 * cg3_blank - Optional function. Blanks the display.
181 struct cg3_par *par = (struct cg3_par *) info->par; in cg3_blank()
182 struct cg3_regs __iomem *regs = par->regs; in cg3_blank()
186 spin_lock_irqsave(&par->lock, flags); in cg3_blank()
190 val = sbus_readb(&regs->control); in cg3_blank()
192 sbus_writeb(val, &regs->control); in cg3_blank()
193 par->flags &= ~CG3_FLAG_BLANKED; in cg3_blank()
200 val = sbus_readb(&regs->control); in cg3_blank()
202 sbus_writeb(val, &regs->control); in cg3_blank()
203 par->flags |= CG3_FLAG_BLANKED; in cg3_blank()
207 spin_unlock_irqrestore(&par->lock, flags); in cg3_blank()
209 return 0; in cg3_blank()
218 { .size = 0 }
223 struct cg3_par *par = (struct cg3_par *)info->par; in cg3_sbusfb_mmap()
226 info->fix.smem_start, info->fix.smem_len, in cg3_sbusfb_mmap()
227 par->which_io, in cg3_sbusfb_mmap()
234 FBTYPE_SUN3COLOR, 8, info->fix.smem_len); in cg3_sbusfb_ioctl()
244 snprintf(info->fix.id, sizeof(info->fix.id), "%pOFn", dp); in cg3_init_fix()
246 info->fix.type = FB_TYPE_PACKED_PIXELS; in cg3_init_fix()
247 info->fix.visual = FB_VISUAL_PSEUDOCOLOR; in cg3_init_fix()
249 info->fix.line_length = linebytes; in cg3_init_fix()
251 info->fix.accel = FB_ACCEL_SUN_CGTHREE; in cg3_init_fix()
266 if (hh && *p == '-') { in cg3_rdi_maybe_fixup_var()
267 if (var->xres != ww || in cg3_rdi_maybe_fixup_var()
268 var->yres != hh) { in cg3_rdi_maybe_fixup_var()
269 var->xres = var->xres_virtual = ww; in cg3_rdi_maybe_fixup_var()
270 var->yres = var->yres_virtual = hh; in cg3_rdi_maybe_fixup_var()
277 static u8 cg3regvals_66hz[] = { /* 1152 x 900, 66 Hz */
278 0x14, 0xbb, 0x15, 0x2b, 0x16, 0x04, 0x17, 0x14,
279 0x18, 0xae, 0x19, 0x03, 0x1a, 0xa8, 0x1b, 0x24,
280 0x1c, 0x01, 0x1d, 0x05, 0x1e, 0xff, 0x1f, 0x01,
281 0x10, 0x20, 0
284 static u8 cg3regvals_76hz[] = { /* 1152 x 900, 76 Hz */
285 0x14, 0xb7, 0x15, 0x27, 0x16, 0x03, 0x17, 0x0f,
286 0x18, 0xae, 0x19, 0x03, 0x1a, 0xae, 0x1b, 0x2a,
287 0x1c, 0x01, 0x1d, 0x09, 0x1e, 0xff, 0x1f, 0x01,
288 0x10, 0x24, 0
292 0x14, 0x70, 0x15, 0x20, 0x16, 0x08, 0x17, 0x10,
293 0x18, 0x06, 0x19, 0x02, 0x1a, 0x31, 0x1b, 0x51,
294 0x1c, 0x06, 0x1d, 0x0c, 0x1e, 0xff, 0x1f, 0x01,
295 0x10, 0x22, 0
303 4, 0xff, 5, 0x00, 6, 0x70, 7, 0x00, 0
311 if (par->flags & CG3_FLAG_RDI) in cg3_do_default_mode()
314 u8 status = sbus_readb(&par->regs->status), mon; in cg3_do_default_mode()
325 return -EINVAL; in cg3_do_default_mode()
330 u8 __iomem *regp = &((u8 __iomem *)par->regs)[p[0]]; in cg3_do_default_mode()
336 regp = (u8 __iomem *)&par->regs->cmap.addr; in cg3_do_default_mode()
337 sbus_writeb(p[0], regp); in cg3_do_default_mode()
338 regp = (u8 __iomem *)&par->regs->cmap.control; in cg3_do_default_mode()
341 return 0; in cg3_do_default_mode()
346 struct device_node *dp = op->dev.of_node; in cg3_probe()
351 info = framebuffer_alloc(sizeof(struct cg3_par), &op->dev); in cg3_probe()
353 err = -ENOMEM; in cg3_probe()
356 par = info->par; in cg3_probe()
358 spin_lock_init(&par->lock); in cg3_probe()
360 info->fix.smem_start = op->resource[0].start; in cg3_probe()
361 par->which_io = op->resource[0].flags & IORESOURCE_BITS; in cg3_probe()
363 sbusfb_fill_var(&info->var, dp, 8); in cg3_probe()
364 info->var.red.length = 8; in cg3_probe()
365 info->var.green.length = 8; in cg3_probe()
366 info->var.blue.length = 8; in cg3_probe()
368 par->flags |= CG3_FLAG_RDI; in cg3_probe()
369 if (par->flags & CG3_FLAG_RDI) in cg3_probe()
370 cg3_rdi_maybe_fixup_var(&info->var, dp); in cg3_probe()
373 info->var.xres); in cg3_probe()
374 info->fix.smem_len = PAGE_ALIGN(linebytes * info->var.yres); in cg3_probe()
376 par->regs = of_ioremap(&op->resource[0], CG3_REGS_OFFSET, in cg3_probe()
378 if (!par->regs) in cg3_probe()
381 info->fbops = &cg3_ops; in cg3_probe()
382 info->screen_base = of_ioremap(&op->resource[0], CG3_RAM_OFFSET, in cg3_probe()
383 info->fix.smem_len, "cg3 ram"); in cg3_probe()
384 if (!info->screen_base) in cg3_probe()
395 err = fb_alloc_cmap(&info->cmap, 256, 0); in cg3_probe()
399 fb_set_cmap(&info->cmap, info); in cg3_probe()
404 if (err < 0) in cg3_probe()
407 dev_set_drvdata(&op->dev, info); in cg3_probe()
410 dp, par->which_io, info->fix.smem_start); in cg3_probe()
412 return 0; in cg3_probe()
415 fb_dealloc_cmap(&info->cmap); in cg3_probe()
418 of_iounmap(&op->resource[0], info->screen_base, info->fix.smem_len); in cg3_probe()
421 of_iounmap(&op->resource[0], par->regs, sizeof(struct cg3_regs)); in cg3_probe()
432 struct fb_info *info = dev_get_drvdata(&op->dev); in cg3_remove()
433 struct cg3_par *par = info->par; in cg3_remove()
436 fb_dealloc_cmap(&info->cmap); in cg3_remove()
438 of_iounmap(&op->resource[0], par->regs, sizeof(struct cg3_regs)); in cg3_remove()
439 of_iounmap(&op->resource[0], info->screen_base, info->fix.smem_len); in cg3_remove()
467 return -ENODEV; in cg3_init()