mirror of
https://github.com/suyu-emu/horinux.git
synced 2026-09-21 14:15:21 -07:00
Merge branch 'platforms' of git://git.linaro.org/people/rmk/linux-arm
Pull ARM platform updates from Russell King:
"This covers platform stuff for platforms I have a direct interest in
(iow, I have the hardware). Essentially:
- as we no longer support any other Acorn platforms other than RiscPC
anymore, we can collect all that code into mach-rpc.
- convert Acorn expansion card stuff to use IRQ allocation functions,
and get rid of NO_IRQ from there.
- cleanups to the ebsa110 platform to move some private stuff out of
its header files.
- large amount of SA11x0 updates:
- conversion of private DMA implementation to DMA engine support
(this actually gives us greater flexibility in drivers over the old
API.)
- re-worked ucb1x00 updates - convert to genirq, remove sa11x0
dependencies, fix various minor issues
- move platform specific sa11x0 framebuffer data into platform files
in arch/arm instead of keeping this in the driver itself
- update sa11x0 IrDA driver for DMA engine, and allow it to use DMA
for SIR transmissions as well as FIR
- rework sa1111 support for genirq, and irq allocation
- fix sa1111 IRQ support so it works again
- use sparse IRQ support
After this, I have one more pull request remaining from my current
set, which I think is going to be the most problematical as it
generates 8 conflicts."
Fixed up the trivial conflict in arch/arm/mach-rpc/Makefile as per
Russell.
* 'platforms' of git://git.linaro.org/people/rmk/linux-arm: (125 commits)
ARM: 7343/1: sa11x0: convert to sparse IRQ
ARM: 7342/2: sa1100: prepare for sparse irq conversion
ARM: 7341/1: input: prepare jornada720 keyboard and ts for sa11x0 sparse irq
ARM: 7340/1: rtc: sa1100: include mach/irqs.h instead of asm/irq.h
ARM: sa11x0: remove unused DMA controller definitions
ARM: sa11x0: remove old SoC private DMA driver
USB: sa1111: add hcd .reset method
USB: sa1111: add OHCI shutdown methods
USB: sa1111: reorganize ohci-sa1111.c
USB: sa1111: get rid of nasty printk(KERN_DEBUG "%s: ...", __FILE__)
USB: sa1111: sparse and checkpatch cleanups
ARM: sa11x0: don't static map sa1111
ARM: sa1111: use dev_err() rather than printk()
ARM: sa1111: cleanup sub-device registration and unregistration
ARM: sa1111: only setup DMA for DMA capable devices
ARM: sa1111: register sa1111 devices with dmabounce in bus notifier
ARM: sa1111: move USB interface register definitions to ohci-sa1111.c
ARM: sa1111: move PCMCIA interface register definitions to sa1111_generic.c
ARM: sa1111: move PS/2 interface register definitions to sa1111p2.c
ARM: sa1111: delete unused physical GPIO register definitions
...
This commit is contained in:
+1
-1
@@ -738,7 +738,6 @@ config ARCH_RPC
|
||||
bool "RiscPC"
|
||||
select ARCH_ACORN
|
||||
select FIQ
|
||||
select TIMER_ACORN
|
||||
select ARCH_MAY_HAVE_PC_FDC
|
||||
select HAVE_PATA_PLATFORM
|
||||
select ISA_DMA_API
|
||||
@@ -767,6 +766,7 @@ config ARCH_SA1100
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select HAVE_IDE
|
||||
select NEED_MACH_MEMORY_H
|
||||
select SPARSE_IRQ
|
||||
help
|
||||
Support for StrongARM 11x0 based boards.
|
||||
|
||||
|
||||
@@ -35,9 +35,6 @@ config DMABOUNCE
|
||||
bool
|
||||
select ZONE_DMA
|
||||
|
||||
config TIMER_ACORN
|
||||
bool
|
||||
|
||||
config SHARP_LOCOMO
|
||||
bool
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@ obj-$(CONFIG_PL330) += pl330.o
|
||||
obj-$(CONFIG_SA1111) += sa1111.o
|
||||
obj-$(CONFIG_PCI_HOST_VIA82C505) += via82c505.o
|
||||
obj-$(CONFIG_DMABOUNCE) += dmabounce.o
|
||||
obj-$(CONFIG_TIMER_ACORN) += time-acorn.o
|
||||
obj-$(CONFIG_SHARP_LOCOMO) += locomo.o
|
||||
obj-$(CONFIG_SHARP_PARAM) += sharpsl_param.o
|
||||
obj-$(CONFIG_SHARP_SCOOP) += scoop.o
|
||||
|
||||
+187
-98
File diff suppressed because it is too large
Load Diff
@@ -132,33 +132,9 @@
|
||||
#define SKPCR_DCLKEN (1<<7)
|
||||
#define SKPCR_PWMCLKEN (1<<8)
|
||||
|
||||
/*
|
||||
* USB Host controller
|
||||
*/
|
||||
/* USB Host controller */
|
||||
#define SA1111_USB 0x0400
|
||||
|
||||
/*
|
||||
* Offsets from SA1111_USB_BASE
|
||||
*/
|
||||
#define SA1111_USB_STATUS 0x0118
|
||||
#define SA1111_USB_RESET 0x011c
|
||||
#define SA1111_USB_IRQTEST 0x0120
|
||||
|
||||
#define USB_RESET_FORCEIFRESET (1 << 0)
|
||||
#define USB_RESET_FORCEHCRESET (1 << 1)
|
||||
#define USB_RESET_CLKGENRESET (1 << 2)
|
||||
#define USB_RESET_SIMSCALEDOWN (1 << 3)
|
||||
#define USB_RESET_USBINTTEST (1 << 4)
|
||||
#define USB_RESET_SLEEPSTBYEN (1 << 5)
|
||||
#define USB_RESET_PWRSENSELOW (1 << 6)
|
||||
#define USB_RESET_PWRCTRLLOW (1 << 7)
|
||||
|
||||
#define USB_STATUS_IRQHCIRMTWKUP (1 << 7)
|
||||
#define USB_STATUS_IRQHCIBUFFACC (1 << 8)
|
||||
#define USB_STATUS_NIRQHCIM (1 << 9)
|
||||
#define USB_STATUS_NHCIMFCLR (1 << 10)
|
||||
#define USB_STATUS_USBPWRSENSE (1 << 11)
|
||||
|
||||
/*
|
||||
* Serial Audio Controller
|
||||
*
|
||||
@@ -327,22 +303,6 @@
|
||||
* PC_SSR GPIO Block C Sleep State
|
||||
*/
|
||||
|
||||
#define _PA_DDR _SA1111( 0x1000 )
|
||||
#define _PA_DRR _SA1111( 0x1004 )
|
||||
#define _PA_DWR _SA1111( 0x1004 )
|
||||
#define _PA_SDR _SA1111( 0x1008 )
|
||||
#define _PA_SSR _SA1111( 0x100c )
|
||||
#define _PB_DDR _SA1111( 0x1010 )
|
||||
#define _PB_DRR _SA1111( 0x1014 )
|
||||
#define _PB_DWR _SA1111( 0x1014 )
|
||||
#define _PB_SDR _SA1111( 0x1018 )
|
||||
#define _PB_SSR _SA1111( 0x101c )
|
||||
#define _PC_DDR _SA1111( 0x1020 )
|
||||
#define _PC_DRR _SA1111( 0x1024 )
|
||||
#define _PC_DWR _SA1111( 0x1024 )
|
||||
#define _PC_SDR _SA1111( 0x1028 )
|
||||
#define _PC_SSR _SA1111( 0x102c )
|
||||
|
||||
#define SA1111_GPIO 0x1000
|
||||
|
||||
#define SA1111_GPIO_PADDR (0x000)
|
||||
@@ -425,106 +385,30 @@
|
||||
#define SA1111_WAKEPOL0 0x0034
|
||||
#define SA1111_WAKEPOL1 0x0038
|
||||
|
||||
/*
|
||||
* PS/2 Trackpad and Mouse Interfaces
|
||||
*
|
||||
* Registers
|
||||
* PS2CR Control Register
|
||||
* PS2STAT Status Register
|
||||
* PS2DATA Transmit/Receive Data register
|
||||
* PS2CLKDIV Clock Division Register
|
||||
* PS2PRECNT Clock Precount Register
|
||||
* PS2TEST1 Test register 1
|
||||
* PS2TEST2 Test register 2
|
||||
* PS2TEST3 Test register 3
|
||||
* PS2TEST4 Test register 4
|
||||
*/
|
||||
|
||||
/* PS/2 Trackpad and Mouse Interfaces */
|
||||
#define SA1111_KBD 0x0a00
|
||||
#define SA1111_MSE 0x0c00
|
||||
|
||||
/*
|
||||
* These are offsets from the above bases.
|
||||
*/
|
||||
#define SA1111_PS2CR 0x0000
|
||||
#define SA1111_PS2STAT 0x0004
|
||||
#define SA1111_PS2DATA 0x0008
|
||||
#define SA1111_PS2CLKDIV 0x000c
|
||||
#define SA1111_PS2PRECNT 0x0010
|
||||
/* PCMCIA Interface */
|
||||
#define SA1111_PCMCIA 0x1600
|
||||
|
||||
#define PS2CR_ENA 0x08
|
||||
#define PS2CR_FKD 0x02
|
||||
#define PS2CR_FKC 0x01
|
||||
|
||||
#define PS2STAT_STP 0x0100
|
||||
#define PS2STAT_TXE 0x0080
|
||||
#define PS2STAT_TXB 0x0040
|
||||
#define PS2STAT_RXF 0x0020
|
||||
#define PS2STAT_RXB 0x0010
|
||||
#define PS2STAT_ENA 0x0008
|
||||
#define PS2STAT_RXP 0x0004
|
||||
#define PS2STAT_KBD 0x0002
|
||||
#define PS2STAT_KBC 0x0001
|
||||
|
||||
/*
|
||||
* PCMCIA Interface
|
||||
*
|
||||
* Registers
|
||||
* PCSR Status Register
|
||||
* PCCR Control Register
|
||||
* PCSSR Sleep State Register
|
||||
*/
|
||||
|
||||
#define SA1111_PCMCIA 0x1600
|
||||
|
||||
/*
|
||||
* These are offsets from the above base.
|
||||
*/
|
||||
#define SA1111_PCCR 0x0000
|
||||
#define SA1111_PCSSR 0x0004
|
||||
#define SA1111_PCSR 0x0008
|
||||
|
||||
#define PCSR_S0_READY (1<<0)
|
||||
#define PCSR_S1_READY (1<<1)
|
||||
#define PCSR_S0_DETECT (1<<2)
|
||||
#define PCSR_S1_DETECT (1<<3)
|
||||
#define PCSR_S0_VS1 (1<<4)
|
||||
#define PCSR_S0_VS2 (1<<5)
|
||||
#define PCSR_S1_VS1 (1<<6)
|
||||
#define PCSR_S1_VS2 (1<<7)
|
||||
#define PCSR_S0_WP (1<<8)
|
||||
#define PCSR_S1_WP (1<<9)
|
||||
#define PCSR_S0_BVD1 (1<<10)
|
||||
#define PCSR_S0_BVD2 (1<<11)
|
||||
#define PCSR_S1_BVD1 (1<<12)
|
||||
#define PCSR_S1_BVD2 (1<<13)
|
||||
|
||||
#define PCCR_S0_RST (1<<0)
|
||||
#define PCCR_S1_RST (1<<1)
|
||||
#define PCCR_S0_FLT (1<<2)
|
||||
#define PCCR_S1_FLT (1<<3)
|
||||
#define PCCR_S0_PWAITEN (1<<4)
|
||||
#define PCCR_S1_PWAITEN (1<<5)
|
||||
#define PCCR_S0_PSE (1<<6)
|
||||
#define PCCR_S1_PSE (1<<7)
|
||||
|
||||
#define PCSSR_S0_SLEEP (1<<0)
|
||||
#define PCSSR_S1_SLEEP (1<<1)
|
||||
|
||||
|
||||
|
||||
|
||||
extern struct bus_type sa1111_bus_type;
|
||||
|
||||
#define SA1111_DEVID_SBI 0
|
||||
#define SA1111_DEVID_SK 1
|
||||
#define SA1111_DEVID_USB 2
|
||||
#define SA1111_DEVID_SAC 3
|
||||
#define SA1111_DEVID_SSP 4
|
||||
#define SA1111_DEVID_PS2 5
|
||||
#define SA1111_DEVID_GPIO 6
|
||||
#define SA1111_DEVID_INT 7
|
||||
#define SA1111_DEVID_PCMCIA 8
|
||||
#define SA1111_DEVID_SBI (1 << 0)
|
||||
#define SA1111_DEVID_SK (1 << 1)
|
||||
#define SA1111_DEVID_USB (1 << 2)
|
||||
#define SA1111_DEVID_SAC (1 << 3)
|
||||
#define SA1111_DEVID_SSP (1 << 4)
|
||||
#define SA1111_DEVID_PS2 (3 << 5)
|
||||
#define SA1111_DEVID_PS2_KBD (1 << 5)
|
||||
#define SA1111_DEVID_PS2_MSE (1 << 6)
|
||||
#define SA1111_DEVID_GPIO (1 << 7)
|
||||
#define SA1111_DEVID_INT (1 << 8)
|
||||
#define SA1111_DEVID_PCMCIA (1 << 9)
|
||||
|
||||
struct sa1111_dev {
|
||||
struct device dev;
|
||||
@@ -548,6 +432,7 @@ struct sa1111_driver {
|
||||
int (*remove)(struct sa1111_dev *);
|
||||
int (*suspend)(struct sa1111_dev *, pm_message_t);
|
||||
int (*resume)(struct sa1111_dev *);
|
||||
void (*shutdown)(struct sa1111_dev *);
|
||||
};
|
||||
|
||||
#define SA1111_DRV(_d) container_of((_d), struct sa1111_driver, drv)
|
||||
@@ -555,9 +440,10 @@ struct sa1111_driver {
|
||||
#define SA1111_DRIVER_NAME(_sadev) ((_sadev)->dev.driver->name)
|
||||
|
||||
/*
|
||||
* These frob the SKPCR register.
|
||||
* These frob the SKPCR register, and call platform specific
|
||||
* enable/disable functions.
|
||||
*/
|
||||
void sa1111_enable_device(struct sa1111_dev *);
|
||||
int sa1111_enable_device(struct sa1111_dev *);
|
||||
void sa1111_disable_device(struct sa1111_dev *);
|
||||
|
||||
unsigned int sa1111_pll_clock(struct sa1111_dev *);
|
||||
@@ -580,6 +466,10 @@ void sa1111_set_sleep_io(struct sa1111_dev *sadev, unsigned int bits, unsigned i
|
||||
|
||||
struct sa1111_platform_data {
|
||||
int irq_base; /* base for cascaded on-chip IRQs */
|
||||
unsigned disable_devs;
|
||||
void *data;
|
||||
int (*enable)(void *, unsigned);
|
||||
void (*disable)(void *, unsigned);
|
||||
};
|
||||
|
||||
#endif /* _ASM_ARCH_SA1111 */
|
||||
|
||||
@@ -23,7 +23,6 @@ obj-$(CONFIG_LEDS) += leds.o
|
||||
obj-$(CONFIG_OC_ETM) += etm.o
|
||||
|
||||
obj-$(CONFIG_ISA_DMA_API) += dma.o
|
||||
obj-$(CONFIG_ARCH_ACORN) += ecard.o
|
||||
obj-$(CONFIG_FIQ) += fiq.o fiqasm.o
|
||||
obj-$(CONFIG_MODULES) += armksyms.o module.o
|
||||
obj-$(CONFIG_ARTHUR) += arthur.o
|
||||
|
||||
@@ -30,10 +30,7 @@
|
||||
|
||||
#include <asm/mach/time.h>
|
||||
|
||||
#define IRQ_MASK 0xfe000000 /* read */
|
||||
#define IRQ_MSET 0xfe000000 /* write */
|
||||
#define IRQ_STAT 0xff000000 /* read */
|
||||
#define IRQ_MCLR 0xff000000 /* write */
|
||||
#include "core.h"
|
||||
|
||||
static void ebsa110_mask_irq(struct irq_data *d)
|
||||
{
|
||||
@@ -79,22 +76,22 @@ static struct map_desc ebsa110_io_desc[] __initdata = {
|
||||
{ /* IRQ_STAT/IRQ_MCLR */
|
||||
.virtual = IRQ_STAT,
|
||||
.pfn = __phys_to_pfn(TRICK4_PHYS),
|
||||
.length = PGDIR_SIZE,
|
||||
.length = TRICK4_SIZE,
|
||||
.type = MT_DEVICE
|
||||
}, { /* IRQ_MASK/IRQ_MSET */
|
||||
.virtual = IRQ_MASK,
|
||||
.pfn = __phys_to_pfn(TRICK3_PHYS),
|
||||
.length = PGDIR_SIZE,
|
||||
.length = TRICK3_SIZE,
|
||||
.type = MT_DEVICE
|
||||
}, { /* SOFT_BASE */
|
||||
.virtual = SOFT_BASE,
|
||||
.pfn = __phys_to_pfn(TRICK1_PHYS),
|
||||
.length = PGDIR_SIZE,
|
||||
.length = TRICK1_SIZE,
|
||||
.type = MT_DEVICE
|
||||
}, { /* PIT_BASE */
|
||||
.virtual = PIT_BASE,
|
||||
.pfn = __phys_to_pfn(TRICK0_PHYS),
|
||||
.length = PGDIR_SIZE,
|
||||
.length = TRICK0_SIZE,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
/*
|
||||
* Copyright (C) 1996-2000 Russell King.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
* This file contains the core hardware definitions of the EBSA-110.
|
||||
*/
|
||||
#ifndef CORE_H
|
||||
#define CORE_H
|
||||
|
||||
/* Physical addresses/sizes */
|
||||
#define ISAMEM_PHYS 0xe0000000
|
||||
#define ISAMEM_SIZE 0x10000000
|
||||
|
||||
#define ISAIO_PHYS 0xf0000000
|
||||
#define ISAIO_SIZE PGDIR_SIZE
|
||||
|
||||
#define TRICK0_PHYS 0xf2000000
|
||||
#define TRICK0_SIZE PGDIR_SIZE
|
||||
#define TRICK1_PHYS 0xf2400000
|
||||
#define TRICK1_SIZE PGDIR_SIZE
|
||||
#define TRICK2_PHYS 0xf2800000
|
||||
#define TRICK3_PHYS 0xf2c00000
|
||||
#define TRICK3_SIZE PGDIR_SIZE
|
||||
#define TRICK4_PHYS 0xf3000000
|
||||
#define TRICK4_SIZE PGDIR_SIZE
|
||||
#define TRICK5_PHYS 0xf3400000
|
||||
#define TRICK6_PHYS 0xf3800000
|
||||
#define TRICK7_PHYS 0xf3c00000
|
||||
|
||||
/* Virtual addresses */
|
||||
#define PIT_BASE 0xfc000000 /* trick 0 */
|
||||
#define SOFT_BASE 0xfd000000 /* trick 1 */
|
||||
#define IRQ_MASK 0xfe000000 /* trick 3 - read */
|
||||
#define IRQ_MSET 0xfe000000 /* trick 3 - write */
|
||||
#define IRQ_STAT 0xff000000 /* trick 4 - read */
|
||||
#define IRQ_MCLR 0xff000000 /* trick 4 - write */
|
||||
|
||||
#endif
|
||||
@@ -12,48 +12,9 @@
|
||||
#ifndef __ASM_ARCH_HARDWARE_H
|
||||
#define __ASM_ARCH_HARDWARE_H
|
||||
|
||||
/*
|
||||
* The EBSA110 has a weird "ISA IO" region:
|
||||
*
|
||||
* Region 0 (addr = 0xf0000000 + io << 2)
|
||||
* --------------------------------------------------------
|
||||
* Physical region IO region
|
||||
* f0000fe0 - f0000ffc 3f8 - 3ff ttyS0
|
||||
* f0000e60 - f0000e64 398 - 399
|
||||
* f0000de0 - f0000dfc 378 - 37f lp0
|
||||
* f0000be0 - f0000bfc 2f8 - 2ff ttyS1
|
||||
*
|
||||
* Region 1 (addr = 0xf0000000 + (io & ~1) << 1 + (io & 1))
|
||||
* --------------------------------------------------------
|
||||
* Physical region IO region
|
||||
* f00014f1 a79 pnp write data
|
||||
* f00007c0 - f00007c1 3e0 - 3e1 pcmcia
|
||||
* f00004f1 279 pnp address
|
||||
* f0000440 - f000046c 220 - 236 eth0
|
||||
* f0000405 203 pnp read data
|
||||
*/
|
||||
|
||||
#define ISAMEM_PHYS 0xe0000000
|
||||
#define ISAMEM_SIZE 0x10000000
|
||||
|
||||
#define ISAIO_PHYS 0xf0000000
|
||||
#define ISAIO_SIZE PGDIR_SIZE
|
||||
|
||||
#define TRICK0_PHYS 0xf2000000
|
||||
#define TRICK1_PHYS 0xf2400000
|
||||
#define TRICK2_PHYS 0xf2800000
|
||||
#define TRICK3_PHYS 0xf2c00000
|
||||
#define TRICK4_PHYS 0xf3000000
|
||||
#define TRICK5_PHYS 0xf3400000
|
||||
#define TRICK6_PHYS 0xf3800000
|
||||
#define TRICK7_PHYS 0xf3c00000
|
||||
|
||||
#define ISAMEM_BASE 0xe0000000
|
||||
#define ISAIO_BASE 0xf0000000
|
||||
|
||||
#define PIT_BASE 0xfc000000
|
||||
#define SOFT_BASE 0xfd000000
|
||||
|
||||
/*
|
||||
* RAM definitions
|
||||
*/
|
||||
|
||||
@@ -177,6 +177,26 @@ void writesl(void __iomem *addr, const void *data, int len)
|
||||
}
|
||||
EXPORT_SYMBOL(writesl);
|
||||
|
||||
/*
|
||||
* The EBSA110 has a weird "ISA IO" region:
|
||||
*
|
||||
* Region 0 (addr = 0xf0000000 + io << 2)
|
||||
* --------------------------------------------------------
|
||||
* Physical region IO region
|
||||
* f0000fe0 - f0000ffc 3f8 - 3ff ttyS0
|
||||
* f0000e60 - f0000e64 398 - 399
|
||||
* f0000de0 - f0000dfc 378 - 37f lp0
|
||||
* f0000be0 - f0000bfc 2f8 - 2ff ttyS1
|
||||
*
|
||||
* Region 1 (addr = 0xf0000000 + (io & ~1) << 1 + (io & 1))
|
||||
* --------------------------------------------------------
|
||||
* Physical region IO region
|
||||
* f00014f1 a79 pnp write data
|
||||
* f00007c0 - f00007c1 3e0 - 3e1 pcmcia
|
||||
* f00004f1 279 pnp address
|
||||
* f0000440 - f000046c 220 - 236 eth0
|
||||
* f0000405 203 pnp read data
|
||||
*/
|
||||
#define SUPERIO_PORT(p) \
|
||||
(((p) >> 3) == (0x3f8 >> 3) || \
|
||||
((p) >> 3) == (0x2f8 >> 3) || \
|
||||
|
||||
@@ -20,6 +20,8 @@
|
||||
#include <asm/system.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include "core.h"
|
||||
|
||||
static spinlock_t leds_lock;
|
||||
|
||||
static void ebsa110_leds_event(led_event_t ledevt)
|
||||
|
||||
@@ -223,6 +223,7 @@ static struct resource sa1111_resources[] = {
|
||||
|
||||
static struct sa1111_platform_data sa1111_info = {
|
||||
.irq_base = LUBBOCK_SA1111_IRQ_BASE,
|
||||
.disable_devs = SA1111_DEVID_SAC,
|
||||
};
|
||||
|
||||
static struct platform_device sa1111_device = {
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
# Object file lists.
|
||||
|
||||
obj-y := dma.o fiq.o irq.o riscpc.o
|
||||
obj-y := dma.o ecard.o fiq.o irq.o riscpc.o time.o
|
||||
obj-m :=
|
||||
obj-n :=
|
||||
obj- :=
|
||||
|
||||
@@ -42,6 +42,7 @@
|
||||
#include <linux/init.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/kthread.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/dma.h>
|
||||
@@ -54,10 +55,6 @@
|
||||
|
||||
#include "ecard.h"
|
||||
|
||||
#ifndef CONFIG_ARCH_RPC
|
||||
#define HAVE_EXPMASK
|
||||
#endif
|
||||
|
||||
struct ecard_request {
|
||||
void (*fn)(struct ecard_request *);
|
||||
ecard_t *ec;
|
||||
@@ -77,9 +74,6 @@ struct expcard_blacklist {
|
||||
static ecard_t *cards;
|
||||
static ecard_t *slot_to_expcard[MAX_ECARDS];
|
||||
static unsigned int ectcr;
|
||||
#ifdef HAS_EXPMASK
|
||||
static unsigned int have_expmask;
|
||||
#endif
|
||||
|
||||
/* List of descriptions of cards which don't have an extended
|
||||
* identification, or chunk directories containing a description.
|
||||
@@ -391,22 +385,10 @@ int ecard_readchunk(struct in_chunk_dir *cd, ecard_t *ec, int id, int num)
|
||||
|
||||
static void ecard_def_irq_enable(ecard_t *ec, int irqnr)
|
||||
{
|
||||
#ifdef HAS_EXPMASK
|
||||
if (irqnr < 4 && have_expmask) {
|
||||
have_expmask |= 1 << irqnr;
|
||||
__raw_writeb(have_expmask, EXPMASK_ENABLE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static void ecard_def_irq_disable(ecard_t *ec, int irqnr)
|
||||
{
|
||||
#ifdef HAS_EXPMASK
|
||||
if (irqnr < 4 && have_expmask) {
|
||||
have_expmask &= ~(1 << irqnr);
|
||||
__raw_writeb(have_expmask, EXPMASK_ENABLE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
static int ecard_def_irq_pending(ecard_t *ec)
|
||||
@@ -446,7 +428,7 @@ static expansioncard_ops_t ecard_default_ops = {
|
||||
*/
|
||||
static void ecard_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
ecard_t *ec = slot_to_ecard(d->irq - 32);
|
||||
ecard_t *ec = irq_data_get_irq_chip_data(d);
|
||||
|
||||
if (ec) {
|
||||
if (!ec->ops)
|
||||
@@ -462,7 +444,7 @@ static void ecard_irq_unmask(struct irq_data *d)
|
||||
|
||||
static void ecard_irq_mask(struct irq_data *d)
|
||||
{
|
||||
ecard_t *ec = slot_to_ecard(d->irq - 32);
|
||||
ecard_t *ec = irq_data_get_irq_chip_data(d);
|
||||
|
||||
if (ec) {
|
||||
if (!ec->ops)
|
||||
@@ -579,7 +561,7 @@ ecard_irq_handler(unsigned int irq, struct irq_desc *desc)
|
||||
for (ec = cards; ec; ec = ec->next) {
|
||||
int pending;
|
||||
|
||||
if (!ec->claimed || ec->irq == NO_IRQ || ec->slot_no == 8)
|
||||
if (!ec->claimed || !ec->irq || ec->slot_no == 8)
|
||||
continue;
|
||||
|
||||
if (ec->ops && ec->ops->irqpending)
|
||||
@@ -598,83 +580,6 @@ ecard_irq_handler(unsigned int irq, struct irq_desc *desc)
|
||||
ecard_check_lockup(desc);
|
||||
}
|
||||
|
||||
#ifdef HAS_EXPMASK
|
||||
static unsigned char priority_masks[] =
|
||||
{
|
||||
0xf0, 0xf1, 0xf3, 0xf7, 0xff, 0xff, 0xff, 0xff
|
||||
};
|
||||
|
||||
static unsigned char first_set[] =
|
||||
{
|
||||
0x00, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00,
|
||||
0x03, 0x00, 0x01, 0x00, 0x02, 0x00, 0x01, 0x00
|
||||
};
|
||||
|
||||
static void
|
||||
ecard_irqexp_handler(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
const unsigned int statusmask = 15;
|
||||
unsigned int status;
|
||||
|
||||
status = __raw_readb(EXPMASK_STATUS) & statusmask;
|
||||
if (status) {
|
||||
unsigned int slot = first_set[status];
|
||||
ecard_t *ec = slot_to_ecard(slot);
|
||||
|
||||
if (ec->claimed) {
|
||||
/*
|
||||
* this ugly code is so that we can operate a
|
||||
* prioritorising system:
|
||||
*
|
||||
* Card 0 highest priority
|
||||
* Card 1
|
||||
* Card 2
|
||||
* Card 3 lowest priority
|
||||
*
|
||||
* Serial cards should go in 0/1, ethernet/scsi in 2/3
|
||||
* otherwise you will lose serial data at high speeds!
|
||||
*/
|
||||
generic_handle_irq(ec->irq);
|
||||
} else {
|
||||
printk(KERN_WARNING "card%d: interrupt from unclaimed "
|
||||
"card???\n", slot);
|
||||
have_expmask &= ~(1 << slot);
|
||||
__raw_writeb(have_expmask, EXPMASK_ENABLE);
|
||||
}
|
||||
} else
|
||||
printk(KERN_WARNING "Wild interrupt from backplane (masks)\n");
|
||||
}
|
||||
|
||||
static int __init ecard_probeirqhw(void)
|
||||
{
|
||||
ecard_t *ec;
|
||||
int found;
|
||||
|
||||
__raw_writeb(0x00, EXPMASK_ENABLE);
|
||||
__raw_writeb(0xff, EXPMASK_STATUS);
|
||||
found = (__raw_readb(EXPMASK_STATUS) & 15) == 0;
|
||||
__raw_writeb(0xff, EXPMASK_ENABLE);
|
||||
|
||||
if (found) {
|
||||
printk(KERN_DEBUG "Expansion card interrupt "
|
||||
"management hardware found\n");
|
||||
|
||||
/* for each card present, set a bit to '1' */
|
||||
have_expmask = 0x80000000;
|
||||
|
||||
for (ec = cards; ec; ec = ec->next)
|
||||
have_expmask |= 1 << ec->slot_no;
|
||||
|
||||
__raw_writeb(have_expmask, EXPMASK_ENABLE);
|
||||
}
|
||||
|
||||
return found;
|
||||
}
|
||||
#else
|
||||
#define ecard_irqexp_handler NULL
|
||||
#define ecard_probeirqhw() (0)
|
||||
#endif
|
||||
|
||||
static void __iomem *__ecard_address(ecard_t *ec, card_type_t type, card_speed_t speed)
|
||||
{
|
||||
void __iomem *address = NULL;
|
||||
@@ -806,8 +711,8 @@ static struct expansion_card *__init ecard_alloc_card(int type, int slot)
|
||||
|
||||
ec->slot_no = slot;
|
||||
ec->easi = type == ECARD_EASI;
|
||||
ec->irq = NO_IRQ;
|
||||
ec->fiq = NO_IRQ;
|
||||
ec->irq = 0;
|
||||
ec->fiq = 0;
|
||||
ec->dma = NO_DMA;
|
||||
ec->ops = &ecard_default_ops;
|
||||
|
||||
@@ -978,8 +883,7 @@ EXPORT_SYMBOL(ecardm_iomap);
|
||||
* If bit 1 of the first byte of the card is set, then the
|
||||
* card does not exist.
|
||||
*/
|
||||
static int __init
|
||||
ecard_probe(int slot, card_type_t type)
|
||||
static int __init ecard_probe(int slot, unsigned irq, card_type_t type)
|
||||
{
|
||||
ecard_t **ecp;
|
||||
ecard_t *ec;
|
||||
@@ -1033,18 +937,18 @@ ecard_probe(int slot, card_type_t type)
|
||||
break;
|
||||
}
|
||||
|
||||
ec->irq = irq;
|
||||
|
||||
/*
|
||||
* hook the interrupt handlers
|
||||
*/
|
||||
if (slot < 8) {
|
||||
ec->irq = 32 + slot;
|
||||
irq_set_chip_and_handler(ec->irq, &ecard_chip,
|
||||
handle_level_irq);
|
||||
irq_set_chip_data(ec->irq, ec);
|
||||
set_irq_flags(ec->irq, IRQF_VALID);
|
||||
}
|
||||
|
||||
if (slot == 8)
|
||||
ec->irq = 11;
|
||||
#ifdef CONFIG_ARCH_RPC
|
||||
/* On RiscPC, only first two slots have DMA capability */
|
||||
if (slot < 2)
|
||||
@@ -1074,28 +978,30 @@ ecard_probe(int slot, card_type_t type)
|
||||
static int __init ecard_init(void)
|
||||
{
|
||||
struct task_struct *task;
|
||||
int slot, irqhw;
|
||||
int slot, irqbase;
|
||||
|
||||
irqbase = irq_alloc_descs(-1, 0, 8, -1);
|
||||
if (irqbase < 0)
|
||||
return irqbase;
|
||||
|
||||
task = kthread_run(ecard_task, NULL, "kecardd");
|
||||
if (IS_ERR(task)) {
|
||||
printk(KERN_ERR "Ecard: unable to create kernel thread: %ld\n",
|
||||
PTR_ERR(task));
|
||||
irq_free_descs(irqbase, 8);
|
||||
return PTR_ERR(task);
|
||||
}
|
||||
|
||||
printk("Probing expansion cards\n");
|
||||
|
||||
for (slot = 0; slot < 8; slot ++) {
|
||||
if (ecard_probe(slot, ECARD_EASI) == -ENODEV)
|
||||
ecard_probe(slot, ECARD_IOC);
|
||||
if (ecard_probe(slot, irqbase + slot, ECARD_EASI) == -ENODEV)
|
||||
ecard_probe(slot, irqbase + slot, ECARD_IOC);
|
||||
}
|
||||
|
||||
ecard_probe(8, ECARD_IOC);
|
||||
ecard_probe(8, 11, ECARD_IOC);
|
||||
|
||||
irqhw = ecard_probeirqhw();
|
||||
|
||||
irq_set_chained_handler(IRQ_EXPANSIONCARD,
|
||||
irqhw ? ecard_irqexp_handler : ecard_irq_handler);
|
||||
irq_set_chained_handler(IRQ_EXPANSIONCARD, ecard_irq_handler);
|
||||
|
||||
ecard_proc_init();
|
||||
|
||||
@@ -42,6 +42,4 @@
|
||||
*/
|
||||
#define FIQ_START 64
|
||||
|
||||
#define IRQ_TIMER IRQ_TIMER0
|
||||
|
||||
#define NR_IRQS 128
|
||||
|
||||
+15
-30
@@ -98,15 +98,9 @@ static void __init rpc_map_io(void)
|
||||
}
|
||||
|
||||
static struct resource acornfb_resources[] = {
|
||||
{ /* VIDC */
|
||||
.start = 0x03400000,
|
||||
.end = 0x035fffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = IRQ_VSYNCPULSE,
|
||||
.end = IRQ_VSYNCPULSE,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
/* VIDC */
|
||||
DEFINE_RES_MEM(0x03400000, 0x00200000),
|
||||
DEFINE_RES_IRQ(IRQ_VSYNCPULSE),
|
||||
};
|
||||
|
||||
static struct platform_device acornfb_device = {
|
||||
@@ -120,11 +114,7 @@ static struct platform_device acornfb_device = {
|
||||
};
|
||||
|
||||
static struct resource iomd_resources[] = {
|
||||
{
|
||||
.start = 0x03200000,
|
||||
.end = 0x0320ffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
DEFINE_RES_MEM(0x03200000, 0x10000),
|
||||
};
|
||||
|
||||
static struct platform_device iomd_device = {
|
||||
@@ -134,18 +124,25 @@ static struct platform_device iomd_device = {
|
||||
.resource = iomd_resources,
|
||||
};
|
||||
|
||||
static struct resource iomd_kart_resources[] = {
|
||||
DEFINE_RES_IRQ(IRQ_KEYBOARDRX),
|
||||
DEFINE_RES_IRQ(IRQ_KEYBOARDTX),
|
||||
};
|
||||
|
||||
static struct platform_device kbd_device = {
|
||||
.name = "kart",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.parent = &iomd_device.dev,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(iomd_kart_resources),
|
||||
.resource = iomd_kart_resources,
|
||||
};
|
||||
|
||||
static struct plat_serial8250_port serial_platform_data[] = {
|
||||
{
|
||||
.mapbase = 0x03010fe0,
|
||||
.irq = 10,
|
||||
.irq = IRQ_SERIALPORT,
|
||||
.uartclk = 1843200,
|
||||
.regshift = 2,
|
||||
.iotype = UPIO_MEM,
|
||||
@@ -167,21 +164,9 @@ static struct pata_platform_info pata_platform_data = {
|
||||
};
|
||||
|
||||
static struct resource pata_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x030107c0,
|
||||
.end = 0x030107df,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = 0x03010fd8,
|
||||
.end = 0x03010fdb,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = IRQ_HARDDISK,
|
||||
.end = IRQ_HARDDISK,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
DEFINE_RES_MEM(0x030107c0, 0x20),
|
||||
DEFINE_RES_MEM(0x03010fd8, 0x04),
|
||||
DEFINE_RES_IRQ(IRQ_HARDDISK),
|
||||
};
|
||||
|
||||
static struct platform_device pata_device = {
|
||||
|
||||
@@ -85,7 +85,7 @@ static struct irqaction ioc_timer_irq = {
|
||||
static void __init ioc_timer_init(void)
|
||||
{
|
||||
ioctime_init();
|
||||
setup_irq(IRQ_TIMER, &ioc_timer_irq);
|
||||
setup_irq(IRQ_TIMER0, &ioc_timer_irq);
|
||||
}
|
||||
|
||||
struct sys_timer ioc_timer = {
|
||||
@@ -3,7 +3,7 @@
|
||||
#
|
||||
|
||||
# Common support
|
||||
obj-y := clock.o generic.o irq.o dma.o time.o #nmi-oopser.o
|
||||
obj-y := clock.o generic.o irq.o time.o #nmi-oopser.o
|
||||
obj-m :=
|
||||
obj-n :=
|
||||
obj- :=
|
||||
|
||||
+140
-54
@@ -15,14 +15,16 @@
|
||||
#include <linux/errno.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/mfd/ucb1x00.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mm.h>
|
||||
|
||||
#include <video/sa1100fb.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/setup.h>
|
||||
#include <asm/page.h>
|
||||
#include <asm/pgtable-hwdef.h>
|
||||
@@ -36,17 +38,18 @@
|
||||
#include <asm/mach/serial_sa1100.h>
|
||||
#include <mach/assabet.h>
|
||||
#include <mach/mcp.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include "generic.h"
|
||||
|
||||
#define ASSABET_BCR_DB1110 \
|
||||
(ASSABET_BCR_SPK_OFF | ASSABET_BCR_QMUTE | \
|
||||
(ASSABET_BCR_SPK_OFF | \
|
||||
ASSABET_BCR_LED_GREEN | ASSABET_BCR_LED_RED | \
|
||||
ASSABET_BCR_RS232EN | ASSABET_BCR_LCD_12RGB | \
|
||||
ASSABET_BCR_IRDA_MD0)
|
||||
|
||||
#define ASSABET_BCR_DB1111 \
|
||||
(ASSABET_BCR_SPK_OFF | ASSABET_BCR_QMUTE | \
|
||||
(ASSABET_BCR_SPK_OFF | \
|
||||
ASSABET_BCR_LED_GREEN | ASSABET_BCR_LED_RED | \
|
||||
ASSABET_BCR_RS232EN | ASSABET_BCR_LCD_12RGB | \
|
||||
ASSABET_BCR_CF_BUS_OFF | ASSABET_BCR_STEREO_LB | \
|
||||
@@ -69,31 +72,10 @@ void ASSABET_BCR_frob(unsigned int mask, unsigned int val)
|
||||
|
||||
EXPORT_SYMBOL(ASSABET_BCR_frob);
|
||||
|
||||
static void assabet_backlight_power(int on)
|
||||
static void assabet_ucb1x00_reset(enum ucb1x00_reset state)
|
||||
{
|
||||
#ifndef ASSABET_PAL_VIDEO
|
||||
if (on)
|
||||
ASSABET_BCR_set(ASSABET_BCR_LIGHT_ON);
|
||||
else
|
||||
#endif
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
|
||||
}
|
||||
|
||||
/*
|
||||
* Turn on/off the backlight. When turning the backlight on,
|
||||
* we wait 500us after turning it on so we don't cause the
|
||||
* supplies to droop when we enable the LCD controller (and
|
||||
* cause a hard reset.)
|
||||
*/
|
||||
static void assabet_lcd_power(int on)
|
||||
{
|
||||
#ifndef ASSABET_PAL_VIDEO
|
||||
if (on) {
|
||||
ASSABET_BCR_set(ASSABET_BCR_LCD_ON);
|
||||
udelay(500);
|
||||
} else
|
||||
#endif
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
|
||||
if (state == UCB_RST_PROBE)
|
||||
ASSABET_BCR_set(ASSABET_BCR_CODEC_RST);
|
||||
}
|
||||
|
||||
|
||||
@@ -152,15 +134,8 @@ static struct flash_platform_data assabet_flash_data = {
|
||||
};
|
||||
|
||||
static struct resource assabet_flash_resources[] = {
|
||||
{
|
||||
.start = SA1100_CS0_PHYS,
|
||||
.end = SA1100_CS0_PHYS + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = SA1100_CS1_PHYS,
|
||||
.end = SA1100_CS1_PHYS + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}
|
||||
DEFINE_RES_MEM(SA1100_CS0_PHYS, SZ_32M),
|
||||
DEFINE_RES_MEM(SA1100_CS1_PHYS, SZ_32M),
|
||||
};
|
||||
|
||||
|
||||
@@ -199,18 +174,126 @@ static struct irda_platform_data assabet_irda_data = {
|
||||
.set_speed = assabet_irda_set_speed,
|
||||
};
|
||||
|
||||
static struct ucb1x00_plat_data assabet_ucb1x00_data = {
|
||||
.reset = assabet_ucb1x00_reset,
|
||||
.gpio_base = -1,
|
||||
};
|
||||
|
||||
static struct mcp_plat_data assabet_mcp_data = {
|
||||
.mccr0 = MCCR0_ADM,
|
||||
.sclk_rate = 11981000,
|
||||
.codec_pdata = &assabet_ucb1x00_data,
|
||||
};
|
||||
|
||||
static void assabet_lcd_set_visual(u32 visual)
|
||||
{
|
||||
u_int is_true_color = visual == FB_VISUAL_TRUECOLOR;
|
||||
|
||||
if (machine_is_assabet()) {
|
||||
#if 1 // phase 4 or newer Assabet's
|
||||
if (is_true_color)
|
||||
ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
|
||||
else
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
|
||||
#else
|
||||
// older Assabet's
|
||||
if (is_true_color)
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LCD_12RGB);
|
||||
else
|
||||
ASSABET_BCR_set(ASSABET_BCR_LCD_12RGB);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
#ifndef ASSABET_PAL_VIDEO
|
||||
static void assabet_lcd_backlight_power(int on)
|
||||
{
|
||||
if (on)
|
||||
ASSABET_BCR_set(ASSABET_BCR_LIGHT_ON);
|
||||
else
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
|
||||
}
|
||||
|
||||
/*
|
||||
* Turn on/off the backlight. When turning the backlight on, we wait
|
||||
* 500us after turning it on so we don't cause the supplies to droop
|
||||
* when we enable the LCD controller (and cause a hard reset.)
|
||||
*/
|
||||
static void assabet_lcd_power(int on)
|
||||
{
|
||||
if (on) {
|
||||
ASSABET_BCR_set(ASSABET_BCR_LCD_ON);
|
||||
udelay(500);
|
||||
} else
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
|
||||
}
|
||||
|
||||
/*
|
||||
* The assabet uses a sharp LQ039Q2DS54 LCD module. It is actually
|
||||
* takes an RGB666 signal, but we provide it with an RGB565 signal
|
||||
* instead (def_rgb_16).
|
||||
*/
|
||||
static struct sa1100fb_mach_info lq039q2ds54_info = {
|
||||
.pixclock = 171521, .bpp = 16,
|
||||
.xres = 320, .yres = 240,
|
||||
|
||||
.hsync_len = 5, .vsync_len = 1,
|
||||
.left_margin = 61, .upper_margin = 3,
|
||||
.right_margin = 9, .lower_margin = 0,
|
||||
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
||||
|
||||
.lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
|
||||
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
|
||||
|
||||
.backlight_power = assabet_lcd_backlight_power,
|
||||
.lcd_power = assabet_lcd_power,
|
||||
.set_visual = assabet_lcd_set_visual,
|
||||
};
|
||||
#else
|
||||
static void assabet_pal_backlight_power(int on)
|
||||
{
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LIGHT_ON);
|
||||
}
|
||||
|
||||
static void assabet_pal_power(int on)
|
||||
{
|
||||
ASSABET_BCR_clear(ASSABET_BCR_LCD_ON);
|
||||
}
|
||||
|
||||
static struct sa1100fb_mach_info pal_info = {
|
||||
.pixclock = 67797, .bpp = 16,
|
||||
.xres = 640, .yres = 512,
|
||||
|
||||
.hsync_len = 64, .vsync_len = 6,
|
||||
.left_margin = 125, .upper_margin = 70,
|
||||
.right_margin = 115, .lower_margin = 36,
|
||||
|
||||
.lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
|
||||
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(512),
|
||||
|
||||
.backlight_power = assabet_pal_backlight_power,
|
||||
.lcd_power = assabet_pal_power,
|
||||
.set_visual = assabet_lcd_set_visual,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ASSABET_NEPONSET
|
||||
static struct resource neponset_resources[] = {
|
||||
DEFINE_RES_MEM(0x10000000, 0x08000000),
|
||||
DEFINE_RES_MEM(0x18000000, 0x04000000),
|
||||
DEFINE_RES_MEM(0x40000000, SZ_8K),
|
||||
DEFINE_RES_IRQ(IRQ_GPIO25),
|
||||
};
|
||||
#endif
|
||||
|
||||
static void __init assabet_init(void)
|
||||
{
|
||||
/*
|
||||
* Ensure that the power supply is in "high power" mode.
|
||||
*/
|
||||
GPDR |= GPIO_GPIO16;
|
||||
GPSR = GPIO_GPIO16;
|
||||
GPDR |= GPIO_GPIO16;
|
||||
|
||||
/*
|
||||
* Ensure that these pins are set as outputs and are driving
|
||||
@@ -218,8 +301,16 @@ static void __init assabet_init(void)
|
||||
* the WS latch in the CPLD, and we don't float causing
|
||||
* excessive power drain. --rmk
|
||||
*/
|
||||
GPDR |= GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM;
|
||||
GPCR = GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM;
|
||||
GPDR |= GPIO_SSP_TXD | GPIO_SSP_SCLK | GPIO_SSP_SFRM;
|
||||
|
||||
/*
|
||||
* Also set GPIO27 as an output; this is used to clock UART3
|
||||
* via the FPGA and as otherwise has no pullups or pulldowns,
|
||||
* so stop it floating.
|
||||
*/
|
||||
GPCR = GPIO_GPIO27;
|
||||
GPDR |= GPIO_GPIO27;
|
||||
|
||||
/*
|
||||
* Set up registers for sleep mode.
|
||||
@@ -231,8 +322,7 @@ static void __init assabet_init(void)
|
||||
PPDR |= PPC_TXD3 | PPC_TXD1;
|
||||
PPSR |= PPC_TXD3 | PPC_TXD1;
|
||||
|
||||
sa1100fb_lcd_power = assabet_lcd_power;
|
||||
sa1100fb_backlight_power = assabet_backlight_power;
|
||||
sa11x0_ppc_configure_mcp();
|
||||
|
||||
if (machine_has_neponset()) {
|
||||
/*
|
||||
@@ -246,9 +336,17 @@ static void __init assabet_init(void)
|
||||
#ifndef CONFIG_ASSABET_NEPONSET
|
||||
printk( "Warning: Neponset detected but full support "
|
||||
"hasn't been configured in the kernel\n" );
|
||||
#else
|
||||
platform_device_register_simple("neponset", 0,
|
||||
neponset_resources, ARRAY_SIZE(neponset_resources));
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef ASSABET_PAL_VIDEO
|
||||
sa11x0_register_lcd(&lq039q2ds54_info);
|
||||
#else
|
||||
sa11x0_register_lcd(&pal_video);
|
||||
#endif
|
||||
sa11x0_register_mtd(&assabet_flash_data, assabet_flash_resources,
|
||||
ARRAY_SIZE(assabet_flash_resources));
|
||||
sa11x0_register_irda(&assabet_irda_data);
|
||||
@@ -412,21 +510,8 @@ static void __init assabet_map_io(void)
|
||||
*/
|
||||
Ser1SDCR0 |= SDCR0_SUS;
|
||||
|
||||
if (machine_has_neponset()) {
|
||||
#ifdef CONFIG_ASSABET_NEPONSET
|
||||
extern void neponset_map_io(void);
|
||||
|
||||
/*
|
||||
* We map Neponset registers even if it isn't present since
|
||||
* many drivers will try to probe their stuff (and fail).
|
||||
* This is still more friendly than a kernel paging request
|
||||
* crash.
|
||||
*/
|
||||
neponset_map_io();
|
||||
#endif
|
||||
} else {
|
||||
if (!machine_has_neponset())
|
||||
sa1100_register_uart_fns(&assabet_port_fns);
|
||||
}
|
||||
|
||||
/*
|
||||
* When Neponset is attached, the first UART should be
|
||||
@@ -449,6 +534,7 @@ MACHINE_START(ASSABET, "Intel-Assabet")
|
||||
.atag_offset = 0x100,
|
||||
.fixup = fixup_assabet,
|
||||
.map_io = assabet_map_io,
|
||||
.nr_irqs = SA1100_NR_IRQS,
|
||||
.init_irq = sa1100_init_irq,
|
||||
.timer = &sa1100_timer,
|
||||
.init_machine = assabet_init,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user