valkyriefb: various fixes
Valkyriefb and macfb will adopt the same card if they get the chance, so remove valkyrie support from macfb. Also fix the "valkyriefb: can't do 832x624x8" problem reported by Raylynn Knight some time ago, by adding vmode 13 support for CONFIG_MAC. Also add vmode 11 since that works too. Make use of the monitor sense lines on 68k Macs too. Also some cleanups. Signed-off-by: Finn Thain <fthain@telegraphics.com.au> Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
This commit is contained in:
committed by
Geert Uytterhoeven
parent
d876c11a0f
commit
11e8faca2e
@@ -55,9 +55,6 @@
|
|||||||
static int (*macfb_setpalette) (unsigned int regno, unsigned int red,
|
static int (*macfb_setpalette) (unsigned int regno, unsigned int red,
|
||||||
unsigned int green, unsigned int blue,
|
unsigned int green, unsigned int blue,
|
||||||
struct fb_info *info) = NULL;
|
struct fb_info *info) = NULL;
|
||||||
static int valkyrie_setpalette (unsigned int regno, unsigned int red,
|
|
||||||
unsigned int green, unsigned int blue,
|
|
||||||
struct fb_info *info);
|
|
||||||
static int dafb_setpalette (unsigned int regno, unsigned int red,
|
static int dafb_setpalette (unsigned int regno, unsigned int red,
|
||||||
unsigned int green, unsigned int blue,
|
unsigned int green, unsigned int blue,
|
||||||
struct fb_info *fb_info);
|
struct fb_info *fb_info);
|
||||||
@@ -77,13 +74,6 @@ static int csc_setpalette (unsigned int regno, unsigned int red,
|
|||||||
unsigned int green, unsigned int blue,
|
unsigned int green, unsigned int blue,
|
||||||
struct fb_info *fb_info);
|
struct fb_info *fb_info);
|
||||||
|
|
||||||
static struct {
|
|
||||||
unsigned char addr;
|
|
||||||
/* Note: word-aligned */
|
|
||||||
char pad[3];
|
|
||||||
unsigned char lut;
|
|
||||||
} __iomem *valkyrie_cmap_regs;
|
|
||||||
|
|
||||||
static struct {
|
static struct {
|
||||||
unsigned char addr;
|
unsigned char addr;
|
||||||
unsigned char lut;
|
unsigned char lut;
|
||||||
@@ -172,33 +162,6 @@ static u32 pseudo_palette[16];
|
|||||||
static int inverse = 0;
|
static int inverse = 0;
|
||||||
static int vidtest = 0;
|
static int vidtest = 0;
|
||||||
|
|
||||||
static int valkyrie_setpalette (unsigned int regno, unsigned int red,
|
|
||||||
unsigned int green, unsigned int blue,
|
|
||||||
struct fb_info *info)
|
|
||||||
{
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
red >>= 8;
|
|
||||||
green >>= 8;
|
|
||||||
blue >>= 8;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
|
||||||
|
|
||||||
/* tell clut which address to fill */
|
|
||||||
nubus_writeb(regno, &valkyrie_cmap_regs->addr);
|
|
||||||
nop();
|
|
||||||
|
|
||||||
/* send one color channel at a time */
|
|
||||||
nubus_writeb(red, &valkyrie_cmap_regs->lut);
|
|
||||||
nop();
|
|
||||||
nubus_writeb(green, &valkyrie_cmap_regs->lut);
|
|
||||||
nop();
|
|
||||||
nubus_writeb(blue, &valkyrie_cmap_regs->lut);
|
|
||||||
|
|
||||||
local_irq_restore(flags);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Unlike the Valkyrie, the DAFB cannot set individual colormap
|
/* Unlike the Valkyrie, the DAFB cannot set individual colormap
|
||||||
registers. Therefore, we do what the MacOS driver does (no
|
registers. Therefore, we do what the MacOS driver does (no
|
||||||
kidding!) and simply set them one by one until we hit the one we
|
kidding!) and simply set them one by one until we hit the one we
|
||||||
@@ -614,8 +577,6 @@ static void __init macfb_setup(char *options)
|
|||||||
|
|
||||||
static void __init iounmap_macfb(void)
|
static void __init iounmap_macfb(void)
|
||||||
{
|
{
|
||||||
if (valkyrie_cmap_regs)
|
|
||||||
iounmap(valkyrie_cmap_regs);
|
|
||||||
if (dafb_cmap_regs)
|
if (dafb_cmap_regs)
|
||||||
iounmap(dafb_cmap_regs);
|
iounmap(dafb_cmap_regs);
|
||||||
if (v8_brazil_cmap_regs)
|
if (v8_brazil_cmap_regs)
|
||||||
@@ -642,6 +603,10 @@ static int __init macfb_init(void)
|
|||||||
if (!MACH_IS_MAC)
|
if (!MACH_IS_MAC)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
if (mac_bi_data.id == MAC_MODEL_Q630 ||
|
||||||
|
mac_bi_data.id == MAC_MODEL_P588)
|
||||||
|
return -ENODEV; /* See valkyriefb.c */
|
||||||
|
|
||||||
/* There can only be one internal video controller anyway so
|
/* There can only be one internal video controller anyway so
|
||||||
we're not too worried about this */
|
we're not too worried about this */
|
||||||
macfb_defined.xres = mac_bi_data.dimensions & 0xFFFF;
|
macfb_defined.xres = mac_bi_data.dimensions & 0xFFFF;
|
||||||
@@ -784,16 +749,6 @@ static int __init macfb_init(void)
|
|||||||
if (!video_is_nubus)
|
if (!video_is_nubus)
|
||||||
switch( mac_bi_data.id )
|
switch( mac_bi_data.id )
|
||||||
{
|
{
|
||||||
/* Valkyrie Quadras */
|
|
||||||
case MAC_MODEL_Q630:
|
|
||||||
/* I'm not sure about this one */
|
|
||||||
case MAC_MODEL_P588:
|
|
||||||
strcpy(macfb_fix.id, "Valkyrie");
|
|
||||||
macfb_setpalette = valkyrie_setpalette;
|
|
||||||
macfb_defined.activate = FB_ACTIVATE_NOW;
|
|
||||||
valkyrie_cmap_regs = ioremap(DAC_BASE, 0x1000);
|
|
||||||
break;
|
|
||||||
|
|
||||||
/* DAFB Quadras */
|
/* DAFB Quadras */
|
||||||
/* Note: these first four have the v7 DAFB, which is
|
/* Note: these first four have the v7 DAFB, which is
|
||||||
known to be rather unlike the ones used in the
|
known to be rather unlike the ones used in the
|
||||||
|
@@ -69,7 +69,7 @@
|
|||||||
#ifdef CONFIG_MAC
|
#ifdef CONFIG_MAC
|
||||||
/* We don't yet have functions to read the PRAM... perhaps we can
|
/* We don't yet have functions to read the PRAM... perhaps we can
|
||||||
adapt them from the PPC code? */
|
adapt them from the PPC code? */
|
||||||
static int default_vmode = VMODE_640_480_67;
|
static int default_vmode = VMODE_CHOOSE;
|
||||||
static int default_cmode = CMODE_8;
|
static int default_cmode = CMODE_8;
|
||||||
#else
|
#else
|
||||||
static int default_vmode = VMODE_NVRAM;
|
static int default_vmode = VMODE_NVRAM;
|
||||||
@@ -326,11 +326,11 @@ int __init valkyriefb_init(void)
|
|||||||
|
|
||||||
#ifdef CONFIG_MAC
|
#ifdef CONFIG_MAC
|
||||||
if (!MACH_IS_MAC)
|
if (!MACH_IS_MAC)
|
||||||
return 0;
|
return -ENODEV;
|
||||||
if (!(mac_bi_data.id == MAC_MODEL_Q630
|
if (!(mac_bi_data.id == MAC_MODEL_Q630
|
||||||
/* I'm not sure about this one */
|
/* I'm not sure about this one */
|
||||||
|| mac_bi_data.id == MAC_MODEL_P588))
|
|| mac_bi_data.id == MAC_MODEL_P588))
|
||||||
return 0;
|
return -ENODEV;
|
||||||
|
|
||||||
/* Hardcoded addresses... welcome to 68k Macintosh country :-) */
|
/* Hardcoded addresses... welcome to 68k Macintosh country :-) */
|
||||||
frame_buffer_phys = 0xf9000000;
|
frame_buffer_phys = 0xf9000000;
|
||||||
|
@@ -134,15 +134,7 @@ static struct valkyrie_regvals valkyrie_reg_init_14 = {
|
|||||||
{ 1024, 0 },
|
{ 1024, 0 },
|
||||||
1024, 768
|
1024, 768
|
||||||
};
|
};
|
||||||
|
#endif /* !defined CONFIG_MAC */
|
||||||
/* Register values for 800x600, 72Hz mode (11) */
|
|
||||||
static struct valkyrie_regvals valkyrie_reg_init_11 = {
|
|
||||||
13,
|
|
||||||
{ 17, 27, 3 }, /* pixel clock = 49.63MHz for V=71.66Hz */
|
|
||||||
{ 800, 0 },
|
|
||||||
800, 600
|
|
||||||
};
|
|
||||||
#endif /* CONFIG_MAC */
|
|
||||||
|
|
||||||
/* Register values for 832x624, 75Hz mode (13) */
|
/* Register values for 832x624, 75Hz mode (13) */
|
||||||
static struct valkyrie_regvals valkyrie_reg_init_13 = {
|
static struct valkyrie_regvals valkyrie_reg_init_13 = {
|
||||||
@@ -152,6 +144,14 @@ static struct valkyrie_regvals valkyrie_reg_init_13 = {
|
|||||||
832, 624
|
832, 624
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Register values for 800x600, 72Hz mode (11) */
|
||||||
|
static struct valkyrie_regvals valkyrie_reg_init_11 = {
|
||||||
|
13,
|
||||||
|
{ 17, 27, 3 }, /* pixel clock = 49.63MHz for V=71.66Hz */
|
||||||
|
{ 800, 0 },
|
||||||
|
800, 600
|
||||||
|
};
|
||||||
|
|
||||||
/* Register values for 800x600, 60Hz mode (10) */
|
/* Register values for 800x600, 60Hz mode (10) */
|
||||||
static struct valkyrie_regvals valkyrie_reg_init_10 = {
|
static struct valkyrie_regvals valkyrie_reg_init_10 = {
|
||||||
12,
|
12,
|
||||||
@@ -188,24 +188,13 @@ static struct valkyrie_regvals *valkyrie_reg_init[VMODE_MAX] = {
|
|||||||
NULL,
|
NULL,
|
||||||
NULL,
|
NULL,
|
||||||
&valkyrie_reg_init_10,
|
&valkyrie_reg_init_10,
|
||||||
#ifdef CONFIG_MAC
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
&valkyrie_reg_init_13,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
#else
|
|
||||||
&valkyrie_reg_init_11,
|
&valkyrie_reg_init_11,
|
||||||
NULL,
|
NULL,
|
||||||
&valkyrie_reg_init_13,
|
&valkyrie_reg_init_13,
|
||||||
|
#ifndef CONFIG_MAC
|
||||||
&valkyrie_reg_init_14,
|
&valkyrie_reg_init_14,
|
||||||
&valkyrie_reg_init_15,
|
&valkyrie_reg_init_15,
|
||||||
NULL,
|
NULL,
|
||||||
&valkyrie_reg_init_17,
|
&valkyrie_reg_init_17,
|
||||||
#endif
|
#endif
|
||||||
NULL,
|
|
||||||
NULL,
|
|
||||||
NULL
|
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user