Home Home > GIT Browse
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@home.transmeta.com>2003-01-16 02:07:33 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2003-01-16 02:07:33 -0800
commit6a48e1caac534b58c44437df59a94ce449994104 (patch)
tree2822ef1aa2bbe57c40072e946943096d1e967cfd
parent7f5ea7bc27aa4ff23ba3adc2bf481ba49b2e5d9d (diff)
parent5c1574154c5f8f327e08d5c4ca0a1177d366dda4 (diff)
Merge bk://bk.arm.linux.org.uk
into home.transmeta.com:/home/torvalds/v2.5/linux
-rw-r--r--arch/arm/kernel/bios32.c2
-rw-r--r--arch/arm/kernel/process.c3
-rw-r--r--arch/arm/tools/mach-types12
-rw-r--r--drivers/acorn/block/fd1772.c38
-rw-r--r--drivers/ide/Kconfig2
-rw-r--r--drivers/video/Makefile4
-rw-r--r--drivers/video/acornfb.c594
-rw-r--r--drivers/video/sa1100fb.h4
-rw-r--r--include/asm-arm/arch-integrator/memory.h6
9 files changed, 195 insertions, 470 deletions
diff --git a/arch/arm/kernel/bios32.c b/arch/arm/kernel/bios32.c
index 198558dd920e..ccc4be1e64e7 100644
--- a/arch/arm/kernel/bios32.c
+++ b/arch/arm/kernel/bios32.c
@@ -11,7 +11,7 @@
#include <linux/slab.h>
#include <linux/init.h>
-#include <asm/page.h> /* for BUG() */
+#include <asm/bug.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/mach-types.h>
diff --git a/arch/arm/kernel/process.c b/arch/arm/kernel/process.c
index b5bcb9e52755..6f482ff3936f 100644
--- a/arch/arm/kernel/process.c
+++ b/arch/arm/kernel/process.c
@@ -91,15 +91,16 @@ void default_idle(void)
void cpu_idle(void)
{
/* endless idle loop with no priority at all */
- preempt_disable();
while (1) {
void (*idle)(void) = pm_idle;
if (!idle)
idle = default_idle;
+ preempt_disable();
leds_event(led_idle_start);
while (!need_resched())
idle();
leds_event(led_idle_end);
+ preempt_enable();
schedule();
}
}
diff --git a/arch/arm/tools/mach-types b/arch/arm/tools/mach-types
index 22b0d6a1d196..3c38df1ee888 100644
--- a/arch/arm/tools/mach-types
+++ b/arch/arm/tools/mach-types
@@ -6,7 +6,7 @@
# To add an entry into this database, please see Documentation/arm/README,
# or contact rmk@arm.linux.org.uk
#
-# Last update: Mon Dec 23 18:49:04 2002
+# Last update: Mon Jan 13 22:55:16 2003
#
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
#
@@ -198,7 +198,7 @@ omaha ARCH_OMAHA OMAHA 186
ta7 ARCH_TA7 TA7 187
nova SA1100_NOVA NOVA 188
hmk ARCH_HMK HMK 189
-inphinity ARCH_INPHINITY INPHINITY 190
+karo ARCH_KARO KARO 190
fester SA1100_FESTER FESTER 191
gpi ARCH_GPI GPI 192
smdk2410 ARCH_SMDK2410 SMDK2410 193
@@ -273,3 +273,11 @@ prpmc1100 ARCH_PRPMC1100 PRPMC1100 261
at91rm9200dk ARCH_AT91RM9200DK AT91RM9200DK 262
armstick ARCH_ARMSTICK ARMSTICK 263
armonie ARCH_ARMONIE ARMONIE 264
+mport1 ARCH_MPORT1 MPORT1 265
+s3c5410 ARCH_S3C5410 S3C5410 266
+zcp320a ARCH_ZCP320A ZCP320A 267
+i_box ARCH_I_BOX I_BOX 268
+stlc1502 ARCH_STLC1502 STLC1502 269
+siren ARCH_SIREN SIREN 270
+greenlake ARCH_GREENLAKE GREENLAKE 271
+argus ARCH_ARGUS ARGUS 272
diff --git a/drivers/acorn/block/fd1772.c b/drivers/acorn/block/fd1772.c
index 99dfe8131e63..9fbd6d828da8 100644
--- a/drivers/acorn/block/fd1772.c
+++ b/drivers/acorn/block/fd1772.c
@@ -1528,7 +1528,7 @@ static struct gendisk *floppy_find(dev_t dev, int *part, void *data)
int fd1772_init(void)
{
static spinlock_t lock = SPIN_LOCK_UNLOCKED;
- int i;
+ int i, err = -ENOMEM;
if (!machine_is_archimedes())
return 0;
@@ -1536,27 +1536,25 @@ int fd1772_init(void)
for (i = 0; i < FD_MAX_UNITS; i++) {
disks[i] = alloc_disk(1);
if (!disks[i])
- goto out;
+ goto err_disk;
}
- if (register_blkdev(MAJOR_NR, "fd", &floppy_fops)) {
+ err = register_blkdev(MAJOR_NR, "fd", &floppy_fops);
+ if (err) {
printk("Unable to get major %d for floppy\n", MAJOR_NR);
- goto out;
+ goto err_disk;
}
+ err = -EBUSY;
if (request_dma(FLOPPY_DMA, "fd1772")) {
printk("Unable to grab DMA%d for the floppy (1772) driver\n", FLOPPY_DMA);
- unregister_blkdev(MAJOR_NR, "fd");
- goto out;
+ goto err_blkdev;
};
if (request_dma(FIQ_FD1772, "fd1772 end")) {
printk("Unable to grab DMA%d for the floppy (1772) driver\n", FIQ_FD1772);
- unregister_blkdev(MAJOR_NR, "fd");
- free_dma(FLOPPY_DMA);
- goto out;
+ goto err_dma1;
};
- enable_dma(FIQ_FD1772); /* This inserts a call to our command end routine */
/* initialize variables */
SelectedDrive = -1;
@@ -1570,6 +1568,12 @@ int fd1772_init(void)
out of some special memory... */
DMABuffer = (char *) kmalloc(2048); /* Copes with pretty large sectors */
#endif
+ err = -ENOMEM;
+ if (!DMAbuffer)
+ goto err_dma2;
+
+ enable_dma(FIQ_FD1772); /* This inserts a call to our command end routine */
+
blk_init_queue(&floppy_queue, do_fd_request, &lock);
for (i = 0; i < FD_MAX_UNITS; i++) {
unit[i].track = -1;
@@ -1590,8 +1594,18 @@ int fd1772_init(void)
config_types();
return 0;
-out:
+
+ err_dma2:
+ free_dma(FIQ_FD1772);
+
+ err_dma1:
+ free_dma(FLOPPY_DMA);
+
+ err_blkdev:
+ unregister_blkdev(MAJOR_NR, "fd");
+
+ err_disk:
while (i--)
put_disk(disks[i]);
- return 1;
+ return err;
}
diff --git a/drivers/ide/Kconfig b/drivers/ide/Kconfig
index 7d33f3b0712d..2216b5a89e56 100644
--- a/drivers/ide/Kconfig
+++ b/drivers/ide/Kconfig
@@ -376,7 +376,7 @@ config IDEDMA_ONLYDISK
config BLK_DEV_IDEDMA
bool
depends on BLK_DEV_IDE
- default BLK_DEV_IDEDMA_ICS if ARM
+ default BLK_DEV_IDEDMA_ICS if ARCH_ACORN
default BLK_DEV_IDEDMA_PMAC if ALL_PPC && BLK_DEV_IDE_PMAC
default BLK_DEV_IDEDMA_PCI if PCI && BLK_DEV_IDEPCI
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index ac39ebe9b114..6be5d0698a5e 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -18,7 +18,7 @@ ifeq ($(CONFIG_FB),y)
obj-$(CONFIG_PPC) += macmodes.o
endif
-obj-$(CONFIG_FB_ACORN) += acornfb.o
+obj-$(CONFIG_FB_ACORN) += acornfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_AMIGA) += amifb.o
obj-$(CONFIG_FB_PM2) += pm2fb.o
obj-$(CONFIG_FB_PM3) += pm3fb.o
@@ -77,7 +77,7 @@ obj-$(CONFIG_FB_I810) += i810/ cfbfillrect.o cfbcopyarea.o \
obj-$(CONFIG_FB_SUN3) += sun3fb.o
obj-$(CONFIG_FB_HGA) += hgafb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
-obj-$(CONFIG_FB_SA1100) += sa1100fb.o
+obj-$(CONFIG_FB_SA1100) += sa1100fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_VIRTUAL) += vfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_HIT) += hitfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_E1355) += epson1355fb.o
diff --git a/drivers/video/acornfb.c b/drivers/video/acornfb.c
index 8271d0bbcbb1..5ae50460c392 100644
--- a/drivers/video/acornfb.c
+++ b/drivers/video/acornfb.c
@@ -12,6 +12,9 @@
* NOTE: Most of the modes with X!=640 will disappear shortly.
* NOTE: Startup setting of HS & VS polarity not supported.
* (do we need to support it if we're coming up in 640x480?)
+ *
+ * FIXME: (things broken by the "new improved" FBCON API)
+ * - Blanking 8bpp displays with VIDC
*/
#include <linux/config.h>
@@ -33,14 +36,6 @@
#include <asm/mach-types.h>
#include <asm/uaccess.h>
-#include <video/fbcon.h>
-#include <video/fbcon-mfb.h>
-#include <video/fbcon-cfb2.h>
-#include <video/fbcon-cfb4.h>
-#include <video/fbcon-cfb8.h>
-#include <video/fbcon-cfb16.h>
-#include <video/fbcon-cfb32.h>
-
#include "acornfb.h"
/*
@@ -58,25 +53,7 @@
*/
#define DEFAULT_XRES 640
#define DEFAULT_YRES 480
-/*
- * The order here defines which BPP we
- * pick depending on which resolutions
- * we have configured.
- */
-#if defined(FBCON_HAS_CFB4)
-# define DEFAULT_BPP 4
-#elif defined(FBCON_HAS_CFB8)
-# define DEFAULT_BPP 8
-#elif defined(FBCON_HAS_CFB16)
-# define DEFAULT_BPP 16
-#elif defined(FBCON_HAS_CFB2)
-# define DEFAULT_BPP 2
-#elif defined(FBCON_HAS_MFB)
-# define DEFAULT_BPP 1
-#else
-#error No suitable framebuffers configured
-#endif
-
+#define DEFAULT_BPP 4
/*
* define this to debug the video mode selection
@@ -99,13 +76,10 @@ static struct fb_monspecs monspecs[NR_MONTYPES] __initdata = {
{ 30000, 70000, 60, 60, 0 }
};
-static struct display global_disp;
static struct fb_info fb_info;
static struct acornfb_par current_par;
static struct vidc_timing current_vidc;
-static struct fb_var_screeninfo __initdata init_var = {};
-extern int acornfb_depth; /* set by setup.c */
extern unsigned int vram_size; /* set by setup.c */
#ifdef HAS_VIDC
@@ -333,34 +307,26 @@ acornfb_set_timing(struct fb_var_screeninfo *var)
#endif
}
-static inline void
-acornfb_palette_write(u_int regno, union palette pal)
-{
- vidc_writel(pal.p);
-}
-
-static inline union palette
-acornfb_palette_encode(u_int regno, u_int red, u_int green, u_int blue,
- u_int trans)
+static int
+acornfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+ u_int trans, struct fb_info *info)
{
union palette pal;
+ if (regno >= current_par.palette_size)
+ return 1;
+
pal.p = 0;
pal.vidc.reg = regno;
pal.vidc.red = red >> 12;
pal.vidc.green = green >> 12;
pal.vidc.blue = blue >> 12;
- return pal;
-}
-static void
-acornfb_palette_decode(u_int regno, u_int *red, u_int *green, u_int *blue,
- u_int *trans)
-{
- *red = EXTEND4(current_par.palette[regno].vidc.red);
- *green = EXTEND4(current_par.palette[regno].vidc.green);
- *blue = EXTEND4(current_par.palette[regno].vidc.blue);
- *trans = current_par.palette[regno].vidc.trans ? -1 : 0;
+ current_par.palette[regno] = pal;
+
+ vidc_writel(pal.p);
+
+ return 0;
}
#endif
@@ -513,34 +479,66 @@ acornfb_set_timing(struct fb_info *info, struct fb_var_screeninfo *var)
#endif
}
-static inline void
-acornfb_palette_write(u_int regno, union palette pal)
-{
- vidc_writel(0x10000000 | regno);
- vidc_writel(pal.p);
-}
-
-static inline union palette
-acornfb_palette_encode(u_int regno, u_int red, u_int green, u_int blue,
- u_int trans)
+/*
+ * We have to take note of the VIDC20's 16-bit palette here.
+ * The VIDC20 looks up a 16 bit pixel as follows:
+ *
+ * bits 111111
+ * 5432109876543210
+ * red ++++++++ (8 bits, 7 to 0)
+ * green ++++++++ (8 bits, 11 to 4)
+ * blue ++++++++ (8 bits, 15 to 8)
+ *
+ * We use a pixel which looks like:
+ *
+ * bits 111111
+ * 5432109876543210
+ * red +++++ (5 bits, 4 to 0)
+ * green +++++ (5 bits, 9 to 5)
+ * blue +++++ (5 bits, 14 to 10)
+ */
+static int
+acornfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
+ u_int trans, struct fb_info *info)
{
union palette pal;
+ int bpp = info->var.bits_per_pixel;
+
+ if (regno >= current_par.palette_size)
+ return 1;
pal.p = 0;
pal.vidc20.red = red >> 8;
pal.vidc20.green = green >> 8;
pal.vidc20.blue = blue >> 8;
- return pal;
-}
-static void
-acornfb_palette_decode(u_int regno, u_int *red, u_int *green, u_int *blue,
- u_int *trans)
-{
- *red = EXTEND8(current_par.palette[regno].vidc20.red);
- *green = EXTEND8(current_par.palette[regno].vidc20.green);
- *blue = EXTEND8(current_par.palette[regno].vidc20.blue);
- *trans = EXTEND4(current_par.palette[regno].vidc20.ext);
+ current_par.palette[regno] = pal;
+
+ if (bpp == 32 && regno < 16) {
+ current_par.cmap.cfb32[regno] =
+ regno | regno << 8 | regno << 16;
+ }
+ if (bpp == 16 && regno < 16) {
+ int i;
+
+ current_par.cmap.cfb16[regno] =
+ regno | regno << 5 | regno << 10;
+
+ pal.p = 0;
+ vidc_writel(0x10000000);
+ for (i = 0; i < 256; i += 1) {
+ pal.vidc20.red = current_par.palette[ i & 31].vidc20.red;
+ pal.vidc20.green = current_par.palette[(i >> 1) & 31].vidc20.green;
+ pal.vidc20.blue = current_par.palette[(i >> 2) & 31].vidc20.blue;
+ vidc_writel(pal.p);
+ /* Palette register pointer auto-increments */
+ }
+ } else {
+ vidc_writel(0x10000000 | regno);
+ vidc_writel(pal.p);
+ }
+
+ return 0;
}
#endif
@@ -549,12 +547,9 @@ acornfb_palette_decode(u_int regno, u_int *red, u_int *green, u_int *blue,
* the resolution to fit the rules.
*/
static int
-acornfb_adjust_timing(struct fb_info *info, struct fb_var_screeninfo *var, int con)
+acornfb_adjust_timing(struct fb_info *info, struct fb_var_screeninfo *var, u_int fontht)
{
- u_int font_line_len;
- u_int fontht;
- u_int sam_size, min_size, size;
- u_int nr_y;
+ u_int font_line_len, sam_size, min_size, size, nr_y;
/* xres must be even */
var->xres = (var->xres + 1) & ~1;
@@ -565,17 +560,6 @@ acornfb_adjust_timing(struct fb_info *info, struct fb_var_screeninfo *var, int c
var->xres_virtual = var->xres;
var->xoffset = 0;
- /*
- * Find the font height
- */
- if (con == -1)
- fontht = fontheight(&global_disp);
- else
- fontht = fontheight(fb_display + con);
-
- if (fontht == 0)
- fontht = 8;
-
if (current_par.using_vram)
sam_size = current_par.vram_half_sam * 2;
else
@@ -693,8 +677,8 @@ acornfb_validate_timing(struct fb_var_screeninfo *var,
static inline void
acornfb_update_dma(struct fb_info *info, struct fb_var_screeninfo *var)
{
- int off = (var->yoffset * var->xres_virtual *
- var->bits_per_pixel) >> 3;
+ u_int off = (var->yoffset * var->xres_virtual *
+ var->bits_per_pixel) >> 3;
#if defined(HAS_MEMC)
memc_write(VDMA_INIT, off >> 2);
@@ -704,130 +688,27 @@ acornfb_update_dma(struct fb_info *info, struct fb_var_screeninfo *var)
}
static int
-acornfb_getcolreg(u_int regno, u_int *red, u_int *green, u_int *blue,
- u_int *trans, struct fb_info *info)
-{
- if (regno >= current_par.palette_size)
- return 1;
-
- acornfb_palette_decode(regno, red, green, blue, trans);
-
- return 0;
-}
-
-/*
- * We have to take note of the VIDC20's 16-bit palette here.
- * The VIDC20 looks up a 16 bit pixel as follows:
- *
- * bits 111111
- * 5432109876543210
- * red ++++++++ (8 bits, 7 to 0)
- * green ++++++++ (8 bits, 11 to 4)
- * blue ++++++++ (8 bits, 15 to 8)
- *
- * We use a pixel which looks like:
- *
- * bits 111111
- * 5432109876543210
- * red +++++ (5 bits, 4 to 0)
- * green +++++ (5 bits, 9 to 5)
- * blue +++++ (5 bits, 14 to 10)
- */
-static int
-acornfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
- u_int trans, struct fb_info *info)
-{
- union palette pal;
- int bpp = fb_display[info->currcon].var.bits_per_pixel;
-
- if (regno >= current_par.palette_size)
- return 1;
-
- pal = acornfb_palette_encode(regno, red, green, blue, trans);
- current_par.palette[regno] = pal;
-
-#ifdef FBCON_HAS_CFB32
- if (bpp == 32 && regno < 16) {
- current_par.cmap.cfb32[regno] =
- regno | regno << 8 | regno << 16;
- }
-#endif
-#ifdef FBCON_HAS_CFB16
- if (bpp == 16 && regno < 16) {
- int i;
-
- current_par.cmap.cfb16[regno] =
- regno | regno << 5 | regno << 10;
-
- pal.p = 0;
- vidc_writel(0x10000000);
- for (i = 0; i < 256; i += 1) {
- pal.vidc20.red = current_par.palette[ i & 31].vidc20.red;
- pal.vidc20.green = current_par.palette[(i >> 1) & 31].vidc20.green;
- pal.vidc20.blue = current_par.palette[(i >> 2) & 31].vidc20.blue;
- vidc_writel(pal.p);
- /* Palette register pointer auto-increments */
- }
- } else
-#endif
- acornfb_palette_write(regno, pal);
-
- return 0;
-}
-
-static int
-acornfb_get_cmap(struct fb_cmap *cmap, int kspc, int con,
- struct fb_info *info)
-{
- int err = 0;
-
- if (con == info->currcon)
- err = fb_get_cmap(cmap, kspc, acornfb_getcolreg, info);
- else if (fb_display[con].cmap.len)
- fb_copy_cmap(&fb_display[con].cmap, cmap, kspc ? 0 : 2);
- else
- fb_copy_cmap(fb_default_cmap(current_par.palette_size),
- cmap, kspc ? 0 : 2);
- return err;
-}
-
-static int
-acornfb_decode_var(struct fb_info *info, struct fb_var_screeninfo *var, int con)
+acornfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
{
+ u_int fontht;
int err;
-#if defined(HAS_VIDC20)
- var->red.offset = 0;
- var->red.length = 8;
- var->green = var->red;
- var->blue = var->red;
- var->transp.offset = 0;
- var->transp.length = 4;
-#elif defined(HAS_VIDC)
- var->red.length = 4;
- var->green = var->red;
- var->blue = var->red;
- var->transp.length = 1;
-#endif
+ /*
+ * FIXME: Find the font height
+ */
+ fontht = 8;
switch (var->bits_per_pixel) {
-#ifdef FBCON_HAS_MFB
- case 1:
- break;
-#endif
-#ifdef FBCON_HAS_CFB2
- case 2:
- break;
-#endif
-#ifdef FBCON_HAS_CFB4
- case 4:
- break;
-#endif
-#ifdef FBCON_HAS_CFB8
- case 8:
+ case 1: case 2: case 4: case 8:
+ var->red.offset = 0;
+ var->red.length = var->bits_per_pixel;
+ var->green = var->red;
+ var->blue = var->red;
+ var->transp.offset = 0;
+ var->transp.length = 0;
break;
-#endif
-#ifdef FBCON_HAS_CFB16
+
+#ifdef HAS_VIDC20
case 16:
var->red.offset = 0;
var->red.length = 5;
@@ -838,8 +719,7 @@ acornfb_decode_var(struct fb_info *info, struct fb_var_screeninfo *var, int con)
var->transp.offset = 15;
var->transp.length = 1;
break;
-#endif
-#ifdef FBCON_HAS_CFB32
+
case 32:
var->red.offset = 0;
var->red.length = 8;
@@ -865,7 +745,7 @@ acornfb_decode_var(struct fb_info *info, struct fb_var_screeninfo *var, int con)
* Validate and adjust the resolution to
* match the video generator hardware.
*/
- err = acornfb_adjust_timing(info, var, con);
+ err = acornfb_adjust_timing(info, var, fontht);
if (err)
return err;
@@ -873,137 +753,61 @@ acornfb_decode_var(struct fb_info *info, struct fb_var_screeninfo *var, int con)
* Validate the timing against the
* monitor hardware.
*/
- return acornfb_validate_timing(var, &fb_info.monspecs);
+ return acornfb_validate_timing(var, &info->monspecs);
}
-static int
-acornfb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
+static int acornfb_set_par(struct fb_info *info)
{
- struct display *display;
- unsigned int visual, chgvar = 0;
- int err;
-
- if (con >= 0)
- display = fb_display + con;
- else
- display = &global_disp;
-
- err = acornfb_decode_var(info, var, con);
- if (err)
- return err;
-
- switch (var->activate & FB_ACTIVATE_MASK) {
- case FB_ACTIVATE_TEST:
- return 0;
-
- case FB_ACTIVATE_NXTOPEN:
- case FB_ACTIVATE_NOW:
- break;
-
- default:
- return -EINVAL;
- }
-
- if (con >= 0) {
- if (display->var.xres != var->xres)
- chgvar = 1;
- if (display->var.yres != var->yres)
- chgvar = 1;
- if (display->var.xres_virtual != var->xres_virtual)
- chgvar = 1;
- if (display->var.yres_virtual != var->yres_virtual)
- chgvar = 1;
- if (memcmp(&display->var.red, &var->red, sizeof(var->red)))
- chgvar = 1;
- if (memcmp(&display->var.green, &var->green, sizeof(var->green)))
- chgvar = 1;
- if (memcmp(&display->var.blue, &var->blue, sizeof(var->blue)))
- chgvar = 1;
- }
-
- display->var = *var;
- display->var.activate &= ~FB_ACTIVATE_ALL;
-
- if (var->activate & FB_ACTIVATE_ALL)
- global_disp.var = display->var;
-
- switch (display->var.bits_per_pixel) {
-#ifdef FBCON_HAS_MFB
+ switch (info->var.bits_per_pixel) {
case 1:
current_par.palette_size = 2;
- display->dispsw = &fbcon_mfb;
- visual = FB_VISUAL_MONO10;
+ info->fix.visual = FB_VISUAL_MONO10;
break;
-#endif
-#ifdef FBCON_HAS_CFB2
case 2:
current_par.palette_size = 4;
- display->dispsw = &fbcon_cfb2;
- visual = FB_VISUAL_PSEUDOCOLOR;
+ info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
break;
-#endif
-#ifdef FBCON_HAS_CFB4
case 4:
current_par.palette_size = 16;
- display->dispsw = &fbcon_cfb4;
- visual = FB_VISUAL_PSEUDOCOLOR;
+ info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
break;
-#endif
-#ifdef FBCON_HAS_CFB8
case 8:
current_par.palette_size = VIDC_PALETTE_SIZE;
- display->dispsw = &fbcon_cfb8;
#ifdef HAS_VIDC
- visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
+ info->fix.visual = FB_VISUAL_STATIC_PSEUDOCOLOR;
#else
- visual = FB_VISUAL_PSEUDOCOLOR;
+ info->fix.visual = FB_VISUAL_PSEUDOCOLOR;
#endif
break;
-#endif
-#ifdef FBCON_HAS_CFB16
+#ifdef HAS_VIDC20
case 16:
current_par.palette_size = 32;
- display->dispsw = &fbcon_cfb16;
- display->dispsw_data = current_par.cmap.cfb16;
- visual = FB_VISUAL_DIRECTCOLOR;
+ info->pseudo_palette = current_par.cmap.cfb16;
+ info->fix.visual = FB_VISUAL_DIRECTCOLOR;
break;
-#endif
-#ifdef FBCON_HAS_CFB32
case 32:
current_par.palette_size = VIDC_PALETTE_SIZE;
- display->dispsw = &fbcon_cfb32;
- display->dispsw_data = current_par.cmap.cfb32;
- visual = FB_VISUAL_TRUECOLOR;
+ info->pseudo_palette = current_par.cmap.cfb32;
+ info->fix.visual = FB_VISUAL_TRUECOLOR;
break;
#endif
default:
- display->dispsw = &fbcon_dummy;
- visual = FB_VISUAL_MONO10;
- break;
+ BUG();
}
- display->next_line = (var->xres * var->bits_per_pixel) / 8;
- display->can_soft_blank = visual == FB_VISUAL_PSEUDOCOLOR ? 1 : 0;
- display->inverse = 0;
-
- if (chgvar && info && info->changevar)
- info->changevar(con);
-
- if (con == info->currcon) {
- struct fb_cmap *cmap;
- unsigned long start, size;
- int control;
-
- info->fix.visual = visual;
+ info->fix.line_length = (info->var.xres * info->var.bits_per_pixel) / 8;
#if defined(HAS_MEMC)
- start = 0;
- size = info->fix.smem_len - VDMA_XFERSIZE;
- control = 0;
+ {
+ unsigned long size = info->fix.smem_len - VDMA_XFERSIZE;
- memc_write(VDMA_START, start);
+ memc_write(VDMA_START, 0);
memc_write(VDMA_END, size >> 2);
+ }
#elif defined(HAS_IOMD)
+ {
+ unsigned long start, size;
+ u_int control;
start = info->fix.smem_start;
size = current_par.screen_end;
@@ -1019,80 +823,27 @@ acornfb_set_var(struct fb_var_screeninfo *var, int con, struct fb_info *info)
iomd_writel(start, IOMD_VIDSTART);
iomd_writel(size, IOMD_VIDEND);
iomd_writel(control, IOMD_VIDCR);
+ }
#endif
- acornfb_update_dma(info, var);
- acornfb_set_timing(info, var);
- if (display->cmap.len)
- cmap = &display->cmap;
- else
- cmap = fb_default_cmap(current_par.palette_size);
+ acornfb_update_dma(info, &info->var);
+ acornfb_set_timing(info, &info->var);
- fb_set_cmap(cmap, 1, info);
- }
return 0;
}
static int
-acornfb_pan_display(struct fb_var_screeninfo *var, int con,
- struct fb_info *info)
+acornfb_pan_display(struct fb_var_screeninfo *var, struct fb_info *info)
{
- u_int y_bottom;
-
- if (var->xoffset)
- return -EINVAL;
-
- y_bottom = var->yoffset;
+ u_int y_bottom = var->yoffset;
if (!(var->vmode & FB_VMODE_YWRAP))
y_bottom += var->yres;
- if (y_bottom > fb_display[con].var.yres_virtual)
- return -EINVAL;
+ BUG_ON(y_bottom > var->yres_virtual);
acornfb_update_dma(info, var);
- fb_display[con].var.yoffset = var->yoffset;
- if (var->vmode & FB_VMODE_YWRAP)
- fb_display[con].var.vmode |= FB_VMODE_YWRAP;
- else
- fb_display[con].var.vmode &= ~FB_VMODE_YWRAP;
-
- return 0;
-}
-
-static int
-acornfb_blank(int blank, struct fb_info *info)
-{
- union palette p;
- int i, bpp = fb_display[info->currcon].var.bits_per_pixel;
-
-#ifdef FBCON_HAS_CFB16
- if (bpp == 16) {
- p.p = 0;
-
- for (i = 0; i < 256; i++) {
- if (blank)
- p = acornfb_palette_encode(i, 0, 0, 0, 0);
- else {
- p.vidc20.red = current_par.palette[ i & 31].vidc20.red;
- p.vidc20.green = current_par.palette[(i >> 1) & 31].vidc20.green;
- p.vidc20.blue = current_par.palette[(i >> 2) & 31].vidc20.blue;
- }
- acornfb_palette_write(i, current_par.palette[i]);
- }
- } else
-#endif
- {
- for (i = 0; i < current_par.palette_size; i++) {
- if (blank)
- p = acornfb_palette_encode(i, 0, 0, 0, 0);
- else
- p = current_par.palette[i];
-
- acornfb_palette_write(i, p);
- }
- }
return 0;
}
@@ -1137,45 +888,16 @@ acornfb_mmap(struct fb_info *info, struct file *file, struct vm_area_struct *vma
static struct fb_ops acornfb_ops = {
.owner = THIS_MODULE,
- .fb_set_var = acornfb_set_var,
- .fb_get_cmap = acornfb_get_cmap,
- .fb_set_cmap = gen_set_cmap,
+ .fb_check_var = acornfb_check_var,
+ .fb_set_par = acornfb_set_par,
.fb_setcolreg = acornfb_setcolreg,
.fb_pan_display = acornfb_pan_display,
- .fb_blank = acornfb_blank,
+ .fb_fillrect = cfb_fillrect,
+ .fb_copyarea = cfb_copyarea,
+ .fb_imageblit = cfb_imageblit,
.fb_mmap = acornfb_mmap,
};
-static int
-acornfb_updatevar(int con, struct fb_info *info)
-{
- if (con == info->currcon)
- acornfb_update_dma(info, &fb_display[con].var);
-
- return 0;
-}
-
-static int
-acornfb_switch(int con, struct fb_info *info)
-{
- struct fb_cmap *cmap;
-
- if (info->currcon >= 0) {
- cmap = &fb_display[info->currcon].cmap;
-
- if (cmap->len)
- fb_get_cmap(cmap, 1, acornfb_getcolreg, info);
- }
-
- info->currcon = con;
-
- fb_display[con].var.activate = FB_ACTIVATE_NOW;
-
- acornfb_set_var(&fb_display[con].var, con, info);
-
- return 0;
-}
-
/*
* Everything after here is initialisation!!!
*/
@@ -1248,8 +970,7 @@ acornfb_default_mode = {
.vmode = FB_VMODE_NONINTERLACED
};
-static void __init
-acornfb_init_fbinfo(void)
+static void __init acornfb_init_fbinfo(void)
{
static int first = 1;
@@ -1257,15 +978,8 @@ acornfb_init_fbinfo(void)
return;
first = 0;
- strcpy(fb_info.modename, "Acorn");
- strcpy(fb_info.fontname, "Acorn8x8");
-
fb_info.node = NODEV;
fb_info.fbops = &acornfb_ops;
- fb_info.disp = &global_disp;
- fb_info.changevar = NULL;
- fb_info.switch_con = acornfb_switch;
- fb_info.updatevar = acornfb_updatevar;
fb_info.flags = FBINFO_FLAG_DEFAULT;
strcpy(fb_info.fix.id, "Acorn");
@@ -1277,28 +991,26 @@ acornfb_init_fbinfo(void)
fb_info.fix.line_length = 0;
fb_info.fix.accel = FB_ACCEL_NONE;
- global_disp.dispsw = &fbcon_dummy;
-
/*
* setup initial parameters
*/
- memset(&init_var, 0, sizeof(init_var));
+ memset(&fb_info.var, 0, sizeof(fb_info.var));
#if defined(HAS_VIDC20)
- init_var.red.length = 8;
- init_var.transp.length = 4;
+ fb_info.var.red.length = 8;
+ fb_info.var.transp.length = 4;
#elif defined(HAS_VIDC)
- init_var.red.length = 4;
- init_var.transp.length = 1;
+ fb_info.var.red.length = 4;
+ fb_info.var.transp.length = 1;
#endif
- init_var.green = init_var.red;
- init_var.blue = init_var.red;
- init_var.nonstd = 0;
- init_var.activate = FB_ACTIVATE_NOW;
- init_var.height = -1;
- init_var.width = -1;
- init_var.vmode = FB_VMODE_NONINTERLACED;
- init_var.accel_flags = FB_ACCELF_TEXT;
+ fb_info.var.green = fb_info.var.red;
+ fb_info.var.blue = fb_info.var.red;
+ fb_info.var.nonstd = 0;
+ fb_info.var.activate = FB_ACTIVATE_NOW;
+ fb_info.var.height = -1;
+ fb_info.var.width = -1;
+ fb_info.var.vmode = FB_VMODE_NONINTERLACED;
+ fb_info.var.accel_flags = FB_ACCELF_TEXT;
current_par.dram_size = 0;
current_par.montype = -1;
@@ -1308,9 +1020,6 @@ acornfb_init_fbinfo(void)
/*
* setup acornfb options:
*
- * font:fontname
- * Set fontname
- *
* mon:hmin-hmax:vmin-vmax:dpms:width:height
* Set monitor parameters:
* hmin = horizontal minimum frequency (Hz)
@@ -1338,12 +1047,6 @@ acornfb_init_fbinfo(void)
* MB or KB respectively.
*/
static void __init
-acornfb_parse_font(char *opt)
-{
- strcpy(fb_info.fontname, opt);
-}
-
-static void __init
acornfb_parse_mon(char *opt)
{
char *p = opt;
@@ -1373,12 +1076,12 @@ acornfb_parse_mon(char *opt)
if (*p != ':')
goto check_values;
- init_var.width = simple_strtoul(p + 1, &p, 0);
+ fb_info.var.width = simple_strtoul(p + 1, &p, 0);
if (*p != ':')
goto check_values;
- init_var.height = simple_strtoul(p + 1, NULL, 0);
+ fb_info.var.height = simple_strtoul(p + 1, NULL, 0);
check_values:
if (fb_info.monspecs.hfmax < fb_info.monspecs.hfmin ||
@@ -1460,7 +1163,6 @@ static struct options {
char *name;
void (*parse)(char *opt);
} opt_table[] __initdata = {
- { "font", acornfb_parse_font },
{ "mon", acornfb_parse_mon },
{ "montype", acornfb_parse_montype },
{ "dram", acornfb_parse_dram },
@@ -1658,7 +1360,7 @@ acornfb_init(void)
* the resolution, so we disable this feature.
*/
do {
- rc = fb_find_mode(&init_var, &fb_info, NULL, modedb,
+ rc = fb_find_mode(&fb_info.var, &fb_info, NULL, modedb,
sizeof(modedb) / sizeof(*modedb),
&acornfb_default_mode, DEFAULT_BPP);
/*
@@ -1667,7 +1369,7 @@ acornfb_init(void)
if (rc == 1)
break;
- rc = fb_find_mode(&init_var, &fb_info, NULL, NULL, 0,
+ rc = fb_find_mode(&fb_info.var, &fb_info, NULL, NULL, 0,
&acornfb_default_mode, DEFAULT_BPP);
/*
* If we found an exact match, all ok.
@@ -1675,13 +1377,13 @@ acornfb_init(void)
if (rc == 1)
break;
- rc = fb_find_mode(&init_var, &fb_info, NULL, modedb,
+ rc = fb_find_mode(&fb_info.var, &fb_info, NULL, modedb,
sizeof(modedb) / sizeof(*modedb),
&acornfb_default_mode, DEFAULT_BPP);
if (rc)
break;
- rc = fb_find_mode(&init_var, &fb_info, NULL, NULL, 0,
+ rc = fb_find_mode(&fb_info.var, &fb_info, NULL, NULL, 0,
&acornfb_default_mode, DEFAULT_BPP);
} while (0);
@@ -1694,17 +1396,17 @@ acornfb_init(void)
return -EINVAL;
}
- h_sync = 1953125000 / init_var.pixclock;
- h_sync = h_sync * 512 / (init_var.xres + init_var.left_margin +
- init_var.right_margin + init_var.hsync_len);
- v_sync = h_sync / (init_var.yres + init_var.upper_margin +
- init_var.lower_margin + init_var.vsync_len);
+ h_sync = 1953125000 / fb_info.var.pixclock;
+ h_sync = h_sync * 512 / (fb_info.var.xres + fb_info.var.left_margin +
+ fb_info.var.right_margin + fb_info.var.hsync_len);
+ v_sync = h_sync / (fb_info.var.yres + fb_info.var.upper_margin +
+ fb_info.var.lower_margin + fb_info.var.vsync_len);
printk(KERN_INFO "Acornfb: %dkB %cRAM, %s, using %dx%d, "
"%d.%03dkHz, %dHz\n",
fb_info.fix.smem_len / 1024,
current_par.using_vram ? 'V' : 'D',
- VIDC_NAME, init_var.xres, init_var.yres,
+ VIDC_NAME, fb_info.var.xres, fb_info.var.yres,
h_sync / 1000, h_sync % 1000, v_sync);
printk(KERN_INFO "Acornfb: Monitor: %d.%03d-%d.%03dkHz, %d-%dHz%s\n",
@@ -1713,7 +1415,7 @@ acornfb_init(void)
fb_info.monspecs.vfmin, fb_info.monspecs.vfmax,
fb_info.monspecs.dpms ? ", DPMS" : "");
- if (acornfb_set_var(&init_var, -1, &fb_info))
+ if (fb_set_var(&fb_info.var, &fb_info))
printk(KERN_ERR "Acornfb: unable to set display parameters\n");
if (register_framebuffer(&fb_info) < 0)
diff --git a/drivers/video/sa1100fb.h b/drivers/video/sa1100fb.h
index f0891b4fd45b..f60a32fac414 100644
--- a/drivers/video/sa1100fb.h
+++ b/drivers/video/sa1100fb.h
@@ -103,9 +103,6 @@ struct sa1100fb_info {
wait_queue_head_t ctrlr_wait;
struct work_struct task;
-#ifdef CONFIG_PM
- struct pm_dev *pm;
-#endif
#ifdef CONFIG_CPU_FREQ
struct notifier_block freq_transition;
struct notifier_block freq_policy;
@@ -128,6 +125,7 @@ struct sa1100fb_info {
#define C_REENABLE (4)
#define C_DISABLE_PM (5)
#define C_ENABLE_PM (6)
+#define C_STARTUP (7)
#define SA1100_NAME "SA1100"
diff --git a/include/asm-arm/arch-integrator/memory.h b/include/asm-arm/arch-integrator/memory.h
index 25df3f54107a..ab033040533f 100644
--- a/include/asm-arm/arch-integrator/memory.h
+++ b/include/asm-arm/arch-integrator/memory.h
@@ -46,6 +46,8 @@
#define __phys_to_virt__is_a_macro
#define __phys_to_virt(ppage) ((ppage) + PAGE_OFFSET)
+#define BUS_OFFSET (0x80000000UL)
+
/*
* Virtual view <-> DMA view memory address translations
* virt_to_bus: Used to translate the virtual address to an
@@ -54,8 +56,8 @@
* to an address that the kernel can use.
*/
#define __virt_to_bus__is_a_macro
-#define __virt_to_bus(x) (x - PAGE_OFFSET + INTEGRATOR_HDR0_SDRAM_BASE)
+#define __virt_to_bus(x) (x - PAGE_OFFSET + BUS_OFFSET)
#define __bus_to_virt__is_a_macro
-#define __bus_to_virt(x) (x - INTEGRATOR_HDR0_SDRAM_BASE + PAGE_OFFSET)
+#define __bus_to_virt(x) (x - BUS_OFFSET + PAGE_OFFSET)
#endif