Commit 02cae55d authored by Russell King's avatar Russell King

[ARM] Remove Anakin machine support.

Anakin has not been maintained since it was (partially) merged, and
the maintainers appear to ignore mail about it.  No one appears
willing to maintain it either.  However, some unrelated kernel
maintainers have been updating various files while they've been
working in the area - which is wasted work for something which
isn't maintained.

Therefore, this cset removes Anakin completely from the kernel.
parent 5c1589a9
......@@ -75,28 +75,6 @@ choice
config ARCH_ADIFCC
bool "ADIFCC-based"
config ARCH_ANAKIN
bool "Anakin"
---help---
The Anakin is a StrongArm based SA110 - 2 DIN Vehicle Telematics Platform.
64MB SDRAM - 4 Mb Flash - Compact Flash Interface - 1 MB VRAM
On board peripherals:
* Front display: 400x234 16 bit TFT touchscreen
* External independent second screen interface
* CAN controller SJA1000
* USB host controller
* 6 channel video codec with hardware overlay
* Smartcard reader
* IrDa
Modules interfaced over the Multi Media Extension slots:
* A communication card
Wavecom GPRS modem
uBlock GPS
Bosch DAB module
* An audio card ( 4 * 40W, AC97 Codec, I2S)
config ARCH_CLPS7500
bool "Cirrus-CL-PS7500FE"
......
......@@ -96,7 +96,6 @@ endif
textaddr-$(CONFIG_ARCH_CLPS711X) := 0xc0028000
machine-$(CONFIG_ARCH_CLPS711X) := clps711x
textaddr-$(CONFIG_ARCH_FORTUNET) := 0xc0008000
machine-$(CONFIG_ARCH_ANAKIN) := anakin
machine-$(CONFIG_ARCH_IOP3XX) := iop3xx
machine-$(CONFIG_ARCH_ADIFCC) := adifcc
......
......@@ -47,7 +47,6 @@ endif
params_phys-$(CONFIG_ARCH_SA1100) := 0xc0000100
initrd_phys-$(CONFIG_ARCH_SA1100) := 0xc0800000
zreladdr-$(CONFIG_ARCH_PXA) := 0xa0008000
zreladdr-$(CONFIG_ARCH_ANAKIN) := 0x20008000
zreladdr-$(CONFIG_ARCH_IOP3XX) := 0xa0008000
params_phys-$(CONFIG_ARCH_IOP3XX) := 0xa0000100
zreladdr-$(CONFIG_ARCH_ADIFCC) := 0xc0008000
......
......@@ -28,7 +28,6 @@ CONFIG_MODULES=y
# System Type
#
CONFIG_ARCH_ADIFCC=y
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -417,8 +416,6 @@ CONFIG_SERIAL_CONSOLE=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -581,7 +580,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -527,8 +526,6 @@ CONFIG_VT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -773,7 +770,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -654,8 +653,6 @@ CONFIG_SOUND_GAMEPORT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -45,7 +45,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_ARCH_EBSA110=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_ANAKIN is not set
#
# Archimedes/A5000 Implementations
......
......@@ -32,7 +32,6 @@ CONFIG_OBSOLETE_MODPARM=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -513,8 +512,6 @@ CONFIG_VT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -716,7 +713,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -27,7 +27,6 @@ CONFIG_EXPERIMENTAL=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
CONFIG_ARCH_CLPS711X=y
......@@ -343,8 +342,6 @@ CONFIG_UNIX=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
CONFIG_SERIAL_CLPS711X=y
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -687,7 +686,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -662,7 +661,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FBCON_ADVANCED is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -516,8 +515,6 @@ CONFIG_SERIAL=m
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -753,7 +750,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -32,7 +32,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -35,7 +35,6 @@ CONFIG_ARCH_INTEGRATOR=y
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_ANAKIN is not set
#
# Archimedes/A5000 Implementations
......@@ -620,7 +619,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_SA1100 is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_MATROX is not set
# CONFIG_FB_ATY is not set
......
......@@ -39,7 +39,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -39,7 +39,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -27,7 +27,6 @@ CONFIG_KMOD=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -518,8 +517,6 @@ CONFIG_SERIAL=m
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -730,7 +727,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
# CONFIG_FB_SA1100 is not set
CONFIG_FB_EPSON1356=y
......
......@@ -44,7 +44,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_MODULES=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -583,8 +582,6 @@ CONFIG_SERIAL_8250_CONSOLE=y
#
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -314,8 +313,6 @@ CONFIG_SERIAL_NONSTANDARD=y
#
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -31,7 +31,6 @@ CONFIG_MODULES=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -40,7 +40,6 @@ CONFIG_IOSCHED_DEADLINE=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -25,7 +25,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -662,7 +661,6 @@ CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_CYBER2000 is not set
# CONFIG_FB_SA1100 is not set
CONFIG_FB_MQ200=y
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_E1355 is not set
# CONFIG_FB_VIRTUAL is not set
CONFIG_FBCON_ADVANCED=y
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# CONFIG_ARCH_RPC is not set
CONFIG_ARCH_SA1100=y
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_ANAKIN is not set
#
# Archimedes/A5000 Implementations
......
......@@ -31,7 +31,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......
......@@ -46,7 +46,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
# CONFIG_ARCH_CO285 is not set
......
......@@ -28,7 +28,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -514,8 +513,6 @@ CONFIG_SERIAL_CONSOLE=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -753,7 +750,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -27,7 +27,6 @@ CONFIG_MODULES=y
#
# System Type
#
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -532,8 +531,6 @@ CONFIG_VT=y
#
# Serial drivers
#
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......@@ -799,7 +796,6 @@ CONFIG_PC_KEYMAP=y
CONFIG_FB=y
CONFIG_DUMMY_CONSOLE=y
# CONFIG_FB_ACORN is not set
# CONFIG_FB_ANAKIN is not set
# CONFIG_FB_CLPS711X is not set
CONFIG_FB_SA1100=y
# CONFIG_FB_CYBER2000 is not set
......
......@@ -35,7 +35,6 @@ CONFIG_KMOD=y
# System Type
#
# CONFIG_ARCH_ADIFCC is not set
# CONFIG_ARCH_ANAKIN is not set
# CONFIG_ARCH_ARCA5K is not set
# CONFIG_ARCH_CLPS7500 is not set
# CONFIG_ARCH_CLPS711X is not set
......@@ -601,8 +600,6 @@ CONFIG_SOUND_GAMEPORT=y
# CONFIG_SERIAL_8250_MULTIPORT is not set
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_SERIAL_ACORN is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -348,37 +348,6 @@
1002:
.endm
#elif defined(CONFIG_ARCH_ANAKIN)
//#//include <asm/arch/serial_reg.h>
.macro addruart,rx
mrc p15, 0, \rx, c1, c0
tst \rx, #1 @ MMU enabled?
moveq \rx, #IO_START
movne \rx, #IO_BASE
add \rx, \rx, #UART0
.endm
.macro senduart,rd,rx
str \rd, [\rx, #0x14] @ tx
ldr \rd, [\rx, #0x18]
orr \rd, \rd, #SENDREQUEST
str \rd, [\rx, #0x18]
.endm
.macro waituart,rd,rx
1001: ldr \rd, [\rx, #0x10]
tst \rd, #TXEMPTY
beq 1001b
.endm
.macro busyuart,rd,rx
1001: ldr \rd, [\rx, #0x10]
tst \rd, #CTS
bne 1001b
.endm
#elif defined(CONFIG_ARCH_CAMELOT)
#include <asm/arch/excalibur.h>
......
......@@ -530,33 +530,6 @@ ENTRY(soft_irq_mask)
.macro irq_prio_table
.endm
#elif defined(CONFIG_ARCH_ANAKIN)
.macro disable_fiq
.endm
.macro get_irqnr_and_base, irqnr, irqstat, base, tmp
mov \base, #IO_BASE
mov \irqstat, #INTERRUPT_CONTROLLER
ldr \tmp, =anakin_irq_mask
ldr \irqstat, [\base, \irqstat]
ldr \tmp, [\tmp]
ands \irqstat, \irqstat, \tmp
ldrne \tmp, =anakin_active_irqs
strne \irqstat, [\tmp]
movne \irqnr, #IRQ_ANAKIN
.endm
.macro irq_prio_table
.ltorg
.bss
ENTRY(anakin_irq_mask)
.word 0
ENTRY(anakin_active_irqs)
.space 4
.text
.endm
#elif defined(CONFIG_ARCH_IOP310) || defined(CONFIG_ARCH_ADIFCC)
.macro disable_fiq
......
#
# Makefile for the linux kernel.
#
# Object file lists.
obj-y := arch.o irq.o mm.o
obj-m :=
obj-n :=
obj- :=
/*
* linux/arch/arm/mach-anakin/arch.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 09-Apr-2001 W/TTC Created
*/
#include <linux/tty.h>
#include <linux/init.h>
#include <asm/setup.h>
#include <asm/mach-types.h>
#include <asm/mach/arch.h>
extern void anakin_map_io(void);
extern void genarch_init_irq(void);
MACHINE_START(ANAKIN, "Anakin")
MAINTAINER("Wookey/Tak-Shing Chan")
BOOT_MEM(0x20000000, 0x40000000, 0xe0000000)
VIDEO(0x80000000, 0x8002db40)
MAPIO(anakin_map_io)
INITIRQ(genarch_init_irq)
MACHINE_END
/*
* linux/arch/arm/mach-anakin/irq.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#include <linux/ptrace.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <asm/irq.h>
#include <asm/mach/irq.h>
extern unsigned int anakin_irq_mask, anakin_active_irqs;
extern void do_IRQ(int, struct pt_regs *);
static void
anakin_mask_irq(unsigned int irq)
{
anakin_irq_mask &= ~(1 << irq);
}
static void
anakin_unmask_irq(unsigned int irq)
{
anakin_irq_mask |= (1 << irq);
}
/*
* This is a faked interrupt to deal with parallel interrupt requests
* on the Anakin. Make sure that its interrupt number is not in any
* way conflicting with the hardware interrupt numbers! Check
* IRQ_ANAKIN in linux/include/asm-arm/arch-anakin/irqs.h.
*/
static void
anakin_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
for (irq = 0; irq < NR_IRQS; irq++)
if (anakin_active_irqs & (1 << irq))
do_IRQ(irq, regs);
}
static struct irqaction anakin_irq = {
.name = "Anakin IRQ",
.handler = anakin_interrupt,
.flags = SA_INTERRUPT
};
void __init
irq_init_irq(void)
{
unsigned int irq;
for (irq = 0; irq < NR_IRQS; irq++) {
switch (irq) {
case IRQ_UART0:
case IRQ_UART1:
case IRQ_UART2:
case IRQ_TICK:
case IRQ_CODEC:
case IRQ_UART4:
case IRQ_TOUCHSCREEN:
case IRQ_UART3:
case IRQ_FIFO:
case IRQ_CAN:
case IRQ_COMPACTFLASH:
case IRQ_BOSH:
case IRQ_ANAKIN:
irq_desc[irq].valid = 1;
irq_desc[irq].mask_ack = anakin_mask_irq;
irq_desc[irq].mask = anakin_mask_irq;
irq_desc[irq].unmask = anakin_unmask_irq;
}
}
setup_arm_irq(IRQ_ANAKIN, &anakin_irq);
}
/*
* linux/arch/arm/mach-anakin/mm.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 09-Apr-2001 W/TTC Created
*/
#include <linux/kernel.h>
#include <linux/init.h>
#include <asm/io.h>
#include <asm/pgtable.h>
#include <asm/mach/map.h>
static struct map_desc anakin_io_desc[] __initdata = {
{ IO_BASE, IO_START, IO_SIZE, MT_DEVICE },
{ FLASH_BASE, FLASH_START, FLASH_SIZE, MT_DEVICE },
{ VGA_BASE, VGA_START, VGA_SIZE, MT_DEVICE }
};
void __init
anakin_map_io(void)
{
iotable_init(anakin_io_desc, ARRAY_SIZE(anakin_io_desc));
}
......@@ -185,8 +185,8 @@ config CPU_ARM1026
# SA110
config CPU_SA110
bool "Support StrongARM(R) SA-110 processor" if !ARCH_EBSA110 && !FOOTBRIDGE && !ARCH_TBOX && !ARCH_SHARK && !ARCH_NEXUSPCI && !ARCH_ANAKIN && ARCH_RPC
default y if ARCH_EBSA110 || FOOTBRIDGE || ARCH_TBOX || ARCH_SHARK || ARCH_NEXUSPCI || ARCH_ANAKIN
bool "Support StrongARM(R) SA-110 processor" if !ARCH_EBSA110 && !FOOTBRIDGE && !ARCH_TBOX && !ARCH_SHARK && !ARCH_NEXUSPCI && ARCH_RPC
default y if ARCH_EBSA110 || FOOTBRIDGE || ARCH_TBOX || ARCH_SHARK || ARCH_NEXUSPCI
select CPU_32v3 if ARCH_RPC
select CPU_32v4 if !ARCH_RPC
select CPU_ABRT_EV4
......
......@@ -164,8 +164,6 @@ CONFIG_SOUND_GAMEPORT=y
# CONFIG_SERIAL_8250_RSA is not set
# CONFIG_ATOMWIDE_SERIAL is not set
# CONFIG_DUALSP_SERIAL is not set
# CONFIG_SERIAL_ANAKIN is not set
# CONFIG_SERIAL_ANAKIN_CONSOLE is not set
# CONFIG_SERIAL_AMBA is not set
# CONFIG_SERIAL_AMBA_CONSOLE is not set
# CONFIG_SERIAL_CLPS711X is not set
......
......@@ -174,32 +174,6 @@ config SERIAL_8250_ACORN
system, say Y to this option. The driver can handle 1, 2, or 3 port
cards. If unsure, say N.
config SERIAL_ANAKIN
bool "Anakin serial port support"
depends on ARM && ARCH_ANAKIN
select SERIAL_CORE
help
::: To be written :::
config SERIAL_ANAKIN_CONSOLE
bool "Console on Anakin serial port"
depends on SERIAL_ANAKIN
select SERIAL_CORE_CONSOLE
help
Even if you say Y here, the currently visible virtual console
(/dev/tty0) will still be used as the system console by default, but
you can alter that using a kernel command line option such as
"console=ttyAN0". (Try "man bootparam" or see the documentation of
your boot loader (lilo or loadlin) about how to pass options to the
kernel at boot time.)
config ANAKIN_DEFAULT_BAUDRATE
int "Default Anakin serial baudrate"
depends on SERIAL_ANAKIN
default "9600"
help
::: To be written :::
config SERIAL_AMBA
tristate "ARM AMBA serial port support"
depends on ARM_AMBA
......
......@@ -16,7 +16,6 @@ obj-$(CONFIG_SERIAL_21285) += 21285.o
obj-$(CONFIG_SERIAL_8250) += 8250.o $(serial-8250-y)
obj-$(CONFIG_SERIAL_8250_CS) += serial_cs.o
obj-$(CONFIG_SERIAL_8250_ACORN) += 8250_acorn.o
obj-$(CONFIG_SERIAL_ANAKIN) += anakin.o
obj-$(CONFIG_SERIAL_AMBA) += amba.o
obj-$(CONFIG_SERIAL_CLPS711X) += clps711x.o
obj-$(CONFIG_SERIAL_PXA) += pxa.o
......
/*
* linux/drivers/char/anakin.c
*
* Based on driver for AMBA serial ports, by ARM Limited,
* Deep Blue Solutions Ltd., Linus Torvalds and Theodore Ts'o.
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* Copyright (C) 2001 Blue Mug, Inc. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 20-Apr-2001 TTC Created
* 05-May-2001 W/TTC Updated for serial_core.c
* 27-Jun-2001 jonm Minor changes; add mctrl support, switch to
* SA_INTERRUPT. Works reliably now. No longer requires
* changes to the serial_core API.
*
* $Id: anakin.c,v 1.32 2002/07/28 10:03:27 rmk Exp $
*/
#include <linux/config.h>
#include <linux/module.h>
#include <linux/tty.h>
#include <linux/ioport.h>
#include <linux/init.h>
#include <linux/serial.h>
#include <linux/console.h>
#include <linux/sysrq.h>
#include <linux/device.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <linux/serial_core.h>
#include <asm/arch/serial_reg.h>
#define UART_NR 5
#define SERIAL_ANAKIN_NAME "ttyAN"
#define SERIAL_ANAKIN_MAJOR 204
#define SERIAL_ANAKIN_MINOR 32
static unsigned int txenable[NR_IRQS]; /* Software interrupt register */
static inline unsigned int
anakin_in(struct uart_port *port, unsigned int offset)
{
return __raw_readl(port->base + offset);
}
static inline void
anakin_out(struct uart_port *port, unsigned int offset, unsigned int value)
{
__raw_writel(value, port->base + offset);
}
static void
anakin_stop_tx(struct uart_port *port, unsigned int tty_stop)
{
txenable[port->irq] = 0;
}
static inline void
anakin_transmit_buffer(struct uart_port *port)
{
struct circ_buf *xmit = &port->info->xmit;
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
anakin_out(port, 0x14, xmit->buf[xmit->tail]);
anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST);
xmit->tail = (xmit->tail + 1) & (UART_XMIT_SIZE-1);
port->icount.tx++;
if (uart_circ_empty(xmit))
anakin_stop_tx(port, 0);
}
static inline void
anakin_transmit_x_char(struct uart_port *port)
{
anakin_out(port, 0x14, port->x_char);
anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST);
port->icount.tx++;
port->x_char = 0;
}
static void
anakin_start_tx(struct uart_port *port, unsigned int tty_start)
{
// is it this... or below
if (!txenable[port->irq]) {
txenable[port->irq] = TXENABLE;
if ((anakin_in(port, 0x10) & TXEMPTY)) {
anakin_transmit_buffer(port);
}
}
}
static void
anakin_stop_rx(struct uart_port *port)
{
while (anakin_in(port, 0x10) & RXRELEASE)
anakin_in(port, 0x14);
anakin_out(port, 0x18, anakin_in(port, 0x18) | BLOCKRX);
}
static void
anakin_enable_ms(struct uart_port *port)
{
}
static inline void
anakin_rx_chars(struct uart_port *port)
{
unsigned int ch;
struct tty_struct *tty = port->info->tty;
if (!(anakin_in(port, 0x10) & RXRELEASE))
return;
ch = anakin_in(port, 0x14) & 0xff;
if (tty->flip.count < TTY_FLIPBUF_SIZE) {
*tty->flip.char_buf_ptr++ = ch;
*tty->flip.flag_buf_ptr++ = TTY_NORMAL;
port->icount.rx++;
tty->flip.count++;
}
tty_flip_buffer_push(tty);
}
static inline void
anakin_overrun_chars(struct uart_port *port)
{
unsigned int ch;
ch = anakin_in(port, 0x14);
port->icount.overrun++;
}
static inline void
anakin_tx_chars(struct uart_port *port)
{
struct circ_buf *xmit = &port->info->xmit;
if (port->x_char) {
anakin_transmit_x_char(port);
return;
}
if (uart_circ_empty(xmit) || uart_tx_stopped(port)) {
anakin_stop_tx(port, 0);
return;
}
anakin_transmit_buffer(port);
if (uart_circ_chars_pending(xmit) < WAKEUP_CHARS)
uart_write_wakeup(port);
}
static void
anakin_int(int irq, void *dev_id, struct pt_regs *regs)
{
unsigned int status;
struct uart_port *port = dev_id;
status = anakin_in(port, 0x1c);
if (status & RX)
anakin_rx_chars(port);
if (status & OVERRUN)
anakin_overrun_chars(port);
if (txenable[port->irq] && (status & TX))
anakin_tx_chars(port);
}
static unsigned int
anakin_tx_empty(struct uart_port *port)
{
return anakin_in(port, 0x10) & TXEMPTY ? TIOCSER_TEMT : 0;
}
static unsigned int
anakin_get_mctrl(struct uart_port *port)
{
unsigned int status = 0;
status |= (anakin_in(port, 0x10) & CTS ? TIOCM_CTS : 0);
status |= (anakin_in(port, 0x18) & DCD ? TIOCM_CAR : 0);
status |= (anakin_in(port, 0x18) & DTR ? TIOCM_DTR : 0);
status |= (anakin_in(port, 0x18) & RTS ? TIOCM_RTS : 0);
return status;
}
static void
anakin_set_mctrl(struct uart_port *port, unsigned int mctrl)
{
unsigned int status;
status = anakin_in(port, 0x18);
if (mctrl & TIOCM_RTS)
status |= RTS;
else
status &= ~RTS;
if (mctrl & TIOCM_CAR)
status |= DCD;
else
status &= ~DCD;
anakin_out(port, 0x18, status);
}
static void
anakin_break_ctl(struct uart_port *port, int break_state)
{
unsigned long flags;
unsigned int status;
spin_lock_irqsave(&port->lock, flags);
status = anakin_in(port, 0x20);
if (break_state == -1)
status |= SETBREAK;
else
status &= ~SETBREAK;
anakin_out(port, 0x20, status);
spin_unlock_irqrestore(&port->lock, flags);
}
static int anakin_startup(struct uart_port *port)
{
int retval;
unsigned int read,write;
/*
* Allocate the IRQ
*/
retval = request_irq(port->irq, anakin_int, SA_INTERRUPT,
"serial_anakin", port);
if (retval)
return retval;
/*
* initialise the old status of the modem signals
*/
port->old_status = 0;
/*
* Finally, disable IRQ and softIRQs for first byte)
*/
txenable[port->irq] = 0;
read = anakin_in(port, 0x18);
write = (read & ~(RTS | DTR | BLOCKRX)) | IRQENABLE;
anakin_out(port, 0x18, write);
return 0;
}
static void anakin_shutdown(struct uart_port *port)
{
/*
* Free the interrupt
*/
free_irq(port->irq, port);
/*
* disable all interrupts, disable the port
*/
anakin_out(port, 0x18, anakin_in(port, 0x18) & ~IRQENABLE);
}
static void
anakin_set_termios(struct uart_port *port, struct termios *termios,
struct termios *old)
{
unsigned long flags;
unsigned int baud, quot;
/*
* We don't support parity, stop bits, or anything other
* than 8 bits, so clear these termios flags.
*/
termios->c_cflag &= ~(CSIZE | CSTOPB | PARENB | PARODD | CREAD);
termios->c_cflag |= CS8;
/*
* We don't appear to support any error conditions either.
*/
termios->c_iflag &= ~(INPCK | IGNPAR | IGNBRK | BRKINT);
/*
* Ask the core to calculate the divisor for us.
*/
baud = uart_get_baud_rate(port, termios, old, 0, port->uartclk/16);
quot = uart_get_divisor(port, baud);
spin_lock_irqsave(&port->lock, flags);
uart_update_timeout(port, termios->c_cflag, baud);
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
anakin_out(port, 0x10, (anakin_in(port, 0x10) & ~PRESCALER)
| (quot << 3));
//parity always set to none
anakin_out(port, 0x18, anakin_in(port, 0x18) & ~PARITY);
spin_unlock_irqrestore(&port->lock, flags);
}
static const char *anakin_type(struct port *port)
{
return port->type == PORT_ANAKIN ? "ANAKIN" : NULL;
}
static struct uart_ops anakin_pops = {
.tx_empty = anakin_tx_empty,
.set_mctrl = anakin_set_mctrl,
.get_mctrl = anakin_get_mctrl,
.stop_tx = anakin_stop_tx,
.start_tx = anakin_start_tx,
.stop_rx = anakin_stop_rx,
.enable_ms = anakin_enable_ms,
.break_ctl = anakin_break_ctl,
.startup = anakin_startup,
.shutdown = anakin_shutdown,
.set_termios = anakin_set_termios,
.type = anakin_type,
};
static struct uart_port anakin_ports[UART_NR] = {
{
.base = IO_BASE + UART0,
.irq = IRQ_UART0,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 0,
},
{
.base = IO_BASE + UART1,
.irq = IRQ_UART1,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 1,
},
{
.base = IO_BASE + UART2,
.irq = IRQ_UART2,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 2,
},
{
.base = IO_BASE + UART3,
.irq = IRQ_UART3,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 3,
},
{
.base = IO_BASE + UART4,
.irq = IRQ_UART4,
.uartclk = 3686400,
.fifosize = 0,
.ops = &anakin_pops,
.flags = ASYNC_BOOT_AUTOCONF,
.line = 4,
},
};
#ifdef CONFIG_SERIAL_ANAKIN_CONSOLE
static void
anakin_console_write(struct console *co, const char *s, unsigned int count)
{
struct uart_port *port = &anakin_ports[co->index];
unsigned int flags, status, i;
/*
* First save the status then disable the interrupts
*/
local_irq_save(flags);
status = anakin_in(port, 0x18);
anakin_out(port, 0x18, status & ~IRQENABLE);
local_irq_restore(flags);
/*
* Now, do each character
*/
for (i = 0; i < count; i++, s++) {
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
/*
* Send the character out.
* If a LF, also do CR...
*/
anakin_out(port, 0x14, *s);
anakin_out(port, 0x18, anakin_in(port, 0x18) | SENDREQUEST);
if (*s == 10) {
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
anakin_out(port, 0x14, 13);
anakin_out(port, 0x18, anakin_in(port, 0x18)
| SENDREQUEST);
}
}
/*
* Finally, wait for transmitter to become empty
* and restore the interrupts
*/
while (!(anakin_in(port, 0x10) & TXEMPTY))
barrier();
if (status & IRQENABLE) {
local_irq_save(flags);
anakin_out(port, 0x18, anakin_in(port, 0x18) | IRQENABLE);
local_irq_restore(flags);
}
}
/*
* Read the current UART setup.
*/
static void __init
anakin_console_get_options(struct uart_port *port, int *baud, int *parity, int *bits)
{
int paritycode;
*baud = GETBAUD (anakin_in(port, 0x10) & PRESCALER);
paritycode = GETPARITY(anakin_in(port, 0x18) & PARITY);
switch (paritycode) {
case NONEPARITY: *parity = 'n'; break;
case ODDPARITY: *parity = 'o'; break;
case EVENPARITY: *parity = 'e'; break;
}
*bits = 8;
}
static int __init
anakin_console_setup(struct console *co, char *options)
{
struct uart_port *port;
int baud = CONFIG_ANAKIN_DEFAULT_BAUDRATE;
int bits = 8;
int parity = 'n';
/*
* Check whether an invalid uart number has been specified, and
* if so, search for the first available port that does have
* console support.
*/
if (co->index >= UART_NR)
co->index = 0;
port = &anakin_ports[co->index];
if (options)
uart_parse_options(options, &baud, &parity, &bits);
else
anakin_console_get_options(port, &baud, &parity, &bits);
return uart_set_options(port, co, baud, parity, bits);
}
extern struct uart_driver anakin_reg;
static struct console anakin_console = {
.name = SERIAL_ANAKIN_NAME,
.write = anakin_console_write,
.device = uart_console_device,
.setup = anakin_console_setup,
.flags = CON_PRINTBUFFER,
.index = -1,
};
static int __init anakin_console_init(void)
{
register_console(&anakin_console);
return 0;
}
console_initcall(anakin_console_init);
#define ANAKIN_CONSOLE &anakin_console
#else
#define ANAKIN_CONSOLE NULL
#endif
static struct uart_driver anakin_reg = {
.driver_name = SERIAL_ANAKIN_NAME,
.dev_name = SERIAL_ANAKIN_NAME,
.major = SERIAL_ANAKIN_MAJOR,
.minor = SERIAL_ANAKIN_MINOR,
.nr = UART_NR,
.cons = ANAKIN_CONSOLE,
};
static int __init
anakin_init(void)
{
int ret;
printk(KERN_INFO "Serial: Anakin driver $Revision: 1.32 $\n");
ret = uart_register_driver(&anakin_reg);
if (ret == 0) {
int i;
for (i = 0; i < UART_NR; i++)
uart_add_one_port(&anakin_reg, &anakin_ports[i]);
}
return ret;
}
__initcall(anakin_init);
MODULE_DESCRIPTION("Anakin serial driver");
MODULE_AUTHOR("Tak-Shing Chan <chan@aleph1.co.uk>");
MODULE_SUPPORTED_DEVICE("ttyAN");
MODULE_LICENSE("GPL");
MODULE_ALIAS_CHARDEV(SERIAL_ANAKIN_MAJOR, SERIAL_ANAKIN_MINOR);
......@@ -76,10 +76,6 @@ config FB_ACORN
hardware found in Acorn RISC PCs and other ARM-based machines. If
unsure, say N.
config FB_ANAKIN
bool "Anakin LCD support"
depends on FB && ARM && ARCH_ANAKIN
config FB_CLPS711X
bool "CLPS711X LCD support"
depends on FB && ARM && ARCH_CLPS711X
......
......@@ -28,7 +28,6 @@ obj-$(CONFIG_FB_CONTROL) += controlfb.o macmodes.o cfbfillrect.o cfbcop
obj-$(CONFIG_FB_PLATINUM) += platinumfb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_VALKYRIE) += valkyriefb.o macmodes.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_CT65550) += chipsfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_ANAKIN) += anakinfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_CLPS711X) += clps711xfb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
obj-$(CONFIG_FB_CYBER) += cyberfb.o
obj-$(CONFIG_FB_CYBER2000) += cyber2000fb.o cfbfillrect.o cfbcopyarea.o cfbimgblt.o
......
/*
* linux/drivers/video/anakinfb.c
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 23-Apr-2001 TTC Created
*/
#include <linux/types.h>
#include <linux/fb.h>
#include <linux/string.h>
#include <linux/errno.h>
#include <linux/init.h>
#include <linux/module.h>
#include <asm/io.h>
static u32 colreg[17];
static struct fb_info fb_info;
static struct fb_var_screeninfo anakinfb_var = {
.xres = 400,
.yres = 234,
.xres_virtual = 400,
.yres_virtual = 234,
.bits_per_pixel = 16,
.red = { 11, 5, 0 },
.green = { 5, 6, 0 },
.blue = { 0, 5, 0 },
.activate = FB_ACTIVATE_NOW,
.height = -1,
.width = -1,
.vmode = FB_VMODE_NONINTERLACED,
};
static struct fb_fix_screeninfo anakinfb_fix = {
.id = "AnakinFB",
.smem_start = VGA_START,
.smem_len = VGA_SIZE,
.type = FB_TYPE_PACKED_PIXELS,
.visual = FB_VISUAL_TRUECOLOR,
.line_length = 400*2,
.accel = FB_ACCEL_NONE,
};
static int
anakinfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
u_int transp, struct fb_info *info)
{
if (regno > 15)
return 1;
((u16 *)(info->pseudo_palette))[regno] = (red & 0xf800) | (green & 0xfc00 >> 5) | (blue & 0xf800 >> 11);
return 0;
}
static struct fb_ops anakinfb_ops = {
.owner = THIS_MODULE,
.fb_setcolreg = anakinfb_setcolreg,
.fb_fillrect = cfb_fillrect,
.fb_copyarea = cfb_copyarea,
.fb_imageblit = cfb_imageblit,
.fb_cursor = soft_cursor,
};
int __init
anakinfb_init(void)
{
memset(&fb_info, 0, sizeof(struct fb_info));
fb_info.flags = FBINFO_FLAG_DEFAULT;
fb_info.fbops = &anakinfb_ops;
fb_info.var = anakinfb_var;
fb_info.fix = anakinfb_fix;
fb_info.psuedo_palette = colreg;
if (!(request_mem_region(VGA_START, VGA_SIZE, "vga")))
return -ENOMEM;
if (fb_info.screen_base = ioremap(VGA_START, VGA_SIZE)) {
release_mem_region(VGA_START, VGA_SIZE);
return -EIO;
}
fb_alloc_cmap(&fb_info.cmap, 16, 0);
if (register_framebuffer(&fb_info) < 0) {
iounmap(fb_info.screen_base);
release_mem_region(VGA_START, VGA_SIZE);
return -EINVAL;
}
MOD_INC_USE_COUNT;
return 0;
}
MODULE_AUTHOR("Tak-Shing Chan <chan@aleph1.co.uk>");
MODULE_DESCRIPTION("Anakin framebuffer driver");
MODULE_SUPPORTED_DEVICE("fb");
......@@ -55,7 +55,6 @@ extern int acornfb_init(void);
extern int acornfb_setup(char*);
extern int amifb_init(void);
extern int amifb_setup(char*);
extern int anakinfb_init(void);
extern int atafb_init(void);
extern int atafb_setup(char*);
extern int macfb_init(void);
......@@ -180,9 +179,6 @@ static struct {
#ifdef CONFIG_FB_AMIGA
{ "amifb", amifb_init, amifb_setup },
#endif
#ifdef CONFIG_FB_ANAKIN
{ "anakinfb", anakinfb_init, NULL },
#endif
#ifdef CONFIG_FB_CLPS711X
{ "clps711xfb", clps711xfb_init, NULL },
#endif
......
/*
* linux/include/asm-arm/arch-anakin/dma.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 09-Apr-2001 W/TTC Created
*/
#ifndef __ASM_ARCH_DMA_H
#define __ASM_ARCH_DMA_H
#define MAX_DMA_ADDRESS 0xffffffff
#define MAX_DMA_CHANNELS 0
#endif
/*
* linux/include/asm-arm/arch-anakin/hardware.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_HARDWARE_H
#define __ASM_ARCH_HARDWARE_H
/*
* Memory map
*/
#define SRAM_START 0x00000000
#define SRAM_SIZE 0x00100000
#define SRAM_BASE 0xdf000000
#define SDRAM_START 0x20000000
#define SDRAM_SIZE 0x04000000
#define SDRAM_BASE 0xc0000000
#define IO_START 0x40000000
#define IO_SIZE 0x00100000
#define IO_BASE 0xe0000000
#define FLASH_START 0x60000000
#define FLASH_SIZE 0x00080000
#define FLASH_BASE 0xe8000000
#define VGA_START 0x80000000
#define VGA_SIZE 0x0002db40
#define VGA_BASE 0xf0000000
/*
* IO map
*/
#define IO_CONTROLLER 0x00000
#define INTERRUPT_CONTROLLER 0x02000
#define UART0 0x04000
#define UART1 0x06000
#define UART2 0x08000
#define CODEC 0x0a000
#define UART4 0x0c000
#define UART3 0x0e000
#define DISPLAY_CONTROLLER 0x10000
#define DAB 0x12000
#define STATE_CONTROLLER 0x14000
#define CAN 0x23000
#define COMPACTFLASH 0x24000
/*
* Use SRAM for D-cache flush
*/
#define FLUSH_BASE_PHYS SRAM_START
#define FLUSH_BASE SRAM_BASE
#define UNCACHEABLE_ADDR (SRAM_BASE + 0x10000)
/*
* Use SDRAM for memory
*/
#define MEM_SIZE SDRAM_SIZE
#endif
/*
* linux/include/asm-arm/arch-anakin/ide.h
*
* Copyright 2001 Blue Mug Inc. for Acunia N.V.
*
* 08-jun-2001: Initial clone of arch-sa1100/ide.h by Jon McClintock
* (jonm@bluemug.com).
*/
#include <asm/irq.h>
#include <asm/hardware.h>
/*
* Set up a hw structure for a specified data port, control port and IRQ.
* This should follow whatever the default interface uses.
*/
static __inline__ void
ide_init_hwif_ports(hw_regs_t *hw, int data_port, int ctrl_port, int *irq)
{
ide_ioreg_t reg;
int i;
int regincr = 4;
memset(hw, 0, sizeof(*hw));
reg = (ide_ioreg_t)data_port;
for (i = IDE_DATA_OFFSET; i <= IDE_STATUS_OFFSET; i++) {
hw->io_ports[i] = reg;
reg += regincr;
}
hw->io_ports[IDE_CONTROL_OFFSET] = (ide_ioreg_t) ctrl_port;
if (irq)
*irq = 0;
}
/*
* This registers the standard ports for this architecture with the IDE
* driver.
*/
static __inline__ void
ide_init_default_hwifs(void)
{
hw_regs_t hw;
ide_init_hwif_ports(&hw, IO_BASE + COMPACTFLASH,
IO_BASE + COMPACTFLASH + IDE_CONTROL_OFFSET, NULL);
hw.irq = IRQ_COMPACTFLASH;
ide_register_hw(&hw);
}
/*
* linux/include/asm-arm/arch-anakin/io.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARM_ARCH_IO_H
#define __ASM_ARM_ARCH_IO_H
#define IO_SPACE_LIMIT 0xffffffff
#define __io(a) (a)
/*
* We don't support ins[lb]/outs[lb]. Make them fault.
*/
#define __raw_readsb(p,d,l) do { *(int *)0 = 0; } while (0)
#define __raw_readsl(p,d,l) do { *(int *)0 = 0; } while (0)
#define __raw_writesb(p,d,l) do { *(int *)0 = 0; } while (0)
#define __raw_writesl(p,d,l) do { *(int *)0 = 0; } while (0)
#endif
/*
* linux/include/asm-arm/arch-anakin/irqs.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_IRQS_H
#define __ASM_ARCH_IRQS_H
#define NR_IRQS 16
#define IRQ_UART0 0
#define IRQ_UART1 1
#define IRQ_UART2 2
#define IRQ_TICK 3
#define IRQ_CODEC 4
#define IRQ_UART4 5
#define IRQ_TOUCHSCREEN 6
#define IRQ_UART3 7
#define IRQ_FIFO 8
#define IRQ_CAN 9
#define IRQ_COMPACTFLASH 10
#define IRQ_BOSH 12
#define IRQ_ANAKIN 15
#endif
/*
* linux/include/asm-arm/arch-anakin/memory.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_MEMORY_H
#define __ASM_ARCH_MEMORY_H
#define TASK_SIZE (0xbf000000)
#define TASK_SIZE_26 (64u * 1024 * 1024)
#define TASK_UNMAPPED_BASE (0x40000000)
#define PAGE_OFFSET 0xc0000000
#define PHYS_OFFSET 0x20000000
#define __virt_to_phys(a) ((a) - PAGE_OFFSET + PHYS_OFFSET)
#define __phys_to_virt(a) ((a) + PAGE_OFFSET - PHYS_OFFSET)
#define __virt_to_bus(a) __virt_to_phys(a)
#define __bus_to_virt(a) __phys_to_virt(a)
#define __virt_to_phys__is_a_macro
#define __phys_to_virt__is_a_macro
#define __virt_to_bus__is_a_macro
#define __bus_to_virt__is_a_macro
#endif
/*
* linux/include/asm-arm/arch-anakin/param.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 11-Apr-2001 TTC Created
*/
/*
* Reserved for future use
*/
/*
* linux/include/asm-arm/arch-anakin/serial.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 11-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_SERIAL_H
#define __ASM_ARCH_SERIAL_H
#include <asm/io.h>
#include <asm/irq.h>
/*
* UART3 and UART4 are not supported yet
*/
#define STD_SERIAL_PORT_DEFNS \
{ 0, 0, IO_BASE + UART0, IRQ_UART0, 0 }, \
{ 0, 0, IO_BASE + UART1, IRQ_UART1, 0 }, \
{ 0, 0, IO_BASE + UART2, IRQ_UART2, 0 }
#define EXTRA_SERIAL_PORT_DEFNS
#endif
/*
* linux/include/asm-arm/arch-anakin/serial_reg.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef ASM_ARCH_SERIAL_REG_H
#define ASM_ARCH_SERIAL_REG_H
/*
* Serial registers (other than tx/rx)
*/
/*
* [UARTx + 0x10]
*/
#define RXRELEASE (1 << 0)
#define TXEMPTY (1 << 1)
#define CTS (1 << 2)
#define PRESCALER (31 << 3)
#define SETBAUD(baud) ((230400 / (baud) - 1) << 3)
#define GETBAUD(prescaler) (230400 / (((prescaler) >> 3) + 1))
/*
* [UARTx + 0x18]
*/
#define IRQENABLE (1 << 0)
#define SENDREQUEST (1 << 1)
#define RTS (1 << 2)
#define DTR (1 << 3)
#define DCD (1 << 4)
#define BLOCKRX (1 << 5)
#define PARITY (3 << 6)
#define SETPARITY(parity) ((parity) << 6)
#define GETPARITY(parity) ((parity) >> 6)
#define NONEPARITY (0)
#define ODDPARITY (1)
#define EVENPARITY (2)
/*
* [UARTx + 0x1c]
*/
#define TX (1 << 0)
#define RX (1 << 1)
#define OVERRUN (1 << 2)
/*
* [UARTx + 0x20]
*/
#define SETBREAK (1 << 0)
/*
* Software interrupt register
*/
#define TXENABLE (1 << 0)
#endif
/*
* linux/include/asm-arm/arch-anakin/system.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 11-Apr-2001 TTC Created
* 04-May-2001 W/PB Removed cpu_do_idle()
*/
#ifndef __ASM_ARCH_SYSTEM_H
#define __ASM_ARCH_SYSTEM_H
static inline void arch_idle(void)
{
}
static inline void
arch_reset(char mode)
{
cpu_reset(0);
}
#endif
/*
* linux/include/asm-arm/arch-anakin/time.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_TIME_H
#define __ASM_ARCH_TIME_H
static irqreturn_t
anakin_timer_interrupt(int irq, void *dev_id, struct pt_regs *regs)
{
do_timer(regs);
return IRQ_HANDLED;
}
void __init time_init(void)
{
timer_irq.handler = anakin_timer_interrupt;
setup_irq(IRQ_TICK, &timer_irq);
}
#endif
/*
* linux/include/asm-arm/arch-anakin/timex.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_TIMEX_H
#define __ASM_ARCH_TIMEX_H
/*
* Timex specification for Anakin
*/
#define CLOCK_TICK_RATE (1000 / 8)
#endif
/*
* linux/include/asm-arm/arch-anakin/uncompress.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 10-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_UNCOMPRESS_H
#define __ASM_ARCH_UNCOMPRESS_H
#include <linux/config.h>
#include <asm/io.h>
#include <asm/arch/serial_reg.h>
#ifndef CONFIG_ANAKIN_DEFAULT_BAUDRATE
#define CONFIG_ANAKIN_DEFAULT_BAUDRATE 9600
#endif
static inline void
putc(int c)
{
while (!(__raw_readl(IO_START + UART0 + 0x10) & TXEMPTY));
__raw_writel(c, IO_START + UART0 + 0x14);
__raw_writel(__raw_readl(IO_START + UART0 + 0x18)
| SENDREQUEST, IO_START + UART0 + 0x18);
}
static void
puts(const char *s)
{
int c;
while ((c = *s++)) {
putc(c);
if (c == '\n') putc('\r');
}
}
static void
arch_decomp_setup(void)
{
__raw_writel(__raw_readl(IO_START + UART0 + 0x10) & ~PRESCALER
| SETBAUD(CONFIG_ANAKIN_DEFAULT_BAUDRATE),
IO_START + UART0 + 0x10);
__raw_writel(__raw_readl(IO_START + UART0 + 0x18) & ~(IRQENABLE
| RTS | DTR | BLOCKRX | PARITY),
IO_START + UART0 + 0x18);
}
#define arch_decomp_wdog()
#endif
/*
* linux/include/asm-arm/arch-anakin/vmalloc.h
*
* Copyright (C) 2001 Aleph One Ltd. for Acunia N.V.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* Changelog:
* 09-Apr-2001 TTC Created
*/
#ifndef __ASM_ARCH_VMALLOC_H
#define __ASM_ARCH_VMALLOC_H
/*
* VMALLOC_ARCH_OFFSET must be set to VMALLOC_OFFSET (check
* linux/arch/arm/kernel/traps.c)
*/
#define VMALLOC_ARCH_OFFSET (8 * 1024 * 1024)
#define VMALLOC_START (((unsigned long) (high_memory) + VMALLOC_ARCH_OFFSET) & ~(VMALLOC_ARCH_OFFSET - 1))
#define VMALLOC_END (PAGE_OFFSET + 0x10000000)
#define MODULE_START (PAGE_OFFSET - 16*1048576)
#define MODULE_END (PAGE_OFFSET)
#endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment