You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branch 'remove' of master.kernel.org:/home/rmk/linux-2.6-arm
* 'remove' of master.kernel.org:/home/rmk/linux-2.6-arm:
ARM: 6629/2: aaec2000: remove support for mach-aaec2000
ARM: lh7a40x: remove unmaintained platform support
Fix up trivial conflicts in
- arch/arm/mach-{aaec2000,lh7a40x}/include/mach/memory.h (removed)
- drivers/usb/gadget/Kconfig (USB_[GADGET_]LH7A40X removed, others added)
This commit is contained in:
@@ -1,61 +0,0 @@
|
||||
README on the ADC/Touchscreen Controller
|
||||
========================================
|
||||
|
||||
The LH79524 and LH7A404 include a built-in Analog to Digital
|
||||
controller (ADC) that is used to process input from a touchscreen.
|
||||
The driver only implements a four-wire touch panel protocol.
|
||||
|
||||
The touchscreen driver is maintenance free except for the pen-down or
|
||||
touch threshold. Some resistive displays and board combinations may
|
||||
require tuning of this threshold. The driver exposes some of its
|
||||
internal state in the sys filesystem. If the kernel is configured
|
||||
with it, CONFIG_SYSFS, and sysfs is mounted at /sys, there will be a
|
||||
directory
|
||||
|
||||
/sys/devices/platform/adc-lh7.0
|
||||
|
||||
containing these files.
|
||||
|
||||
-r--r--r-- 1 root root 4096 Jan 1 00:00 samples
|
||||
-rw-r--r-- 1 root root 4096 Jan 1 00:00 threshold
|
||||
-r--r--r-- 1 root root 4096 Jan 1 00:00 threshold_range
|
||||
|
||||
The threshold is the current touch threshold. It defaults to 750 on
|
||||
most targets.
|
||||
|
||||
# cat threshold
|
||||
750
|
||||
|
||||
The threshold_range contains the range of valid values for the
|
||||
threshold. Values outside of this range will be silently ignored.
|
||||
|
||||
# cat threshold_range
|
||||
0 1023
|
||||
|
||||
To change the threshold, write a value to the threshold file.
|
||||
|
||||
# echo 500 > threshold
|
||||
# cat threshold
|
||||
500
|
||||
|
||||
The samples file contains the most recently sampled values from the
|
||||
ADC. There are 12. Below are typical of the last sampled values when
|
||||
the pen has been released. The first two and last two samples are for
|
||||
detecting whether or not the pen is down. The third through sixth are
|
||||
X coordinate samples. The seventh through tenth are Y coordinate
|
||||
samples.
|
||||
|
||||
# cat samples
|
||||
1023 1023 0 0 0 0 530 529 530 529 1023 1023
|
||||
|
||||
To determine a reasonable threshold, press on the touch panel with an
|
||||
appropriate stylus and read the values from samples.
|
||||
|
||||
# cat samples
|
||||
1023 676 92 103 101 102 855 919 922 922 1023 679
|
||||
|
||||
The first and eleventh samples are discarded. Thus, the important
|
||||
values are the second and twelfth which are used to determine if the
|
||||
pen is down. When both are below the threshold, the driver registers
|
||||
that the pen is down. When either is above the threshold, it
|
||||
registers then pen is up.
|
||||
@@ -1,32 +0,0 @@
|
||||
README on the Compact Flash for Card Engines
|
||||
============================================
|
||||
|
||||
There are three challenges in supporting the CF interface of the Card
|
||||
Engines. First, every IO operation must be followed with IO to
|
||||
another memory region. Second, the slot is wired for one-to-one
|
||||
address mapping *and* it is wired for 16 bit access only. Second, the
|
||||
interrupt request line from the CF device isn't wired.
|
||||
|
||||
The IOBARRIER issue is covered in README.IOBARRIER. This isn't an
|
||||
onerous problem. Enough said here.
|
||||
|
||||
The addressing issue is solved in the
|
||||
arch/arm/mach-lh7a40x/ide-lpd7a40x.c file with some awkward
|
||||
work-arounds. We implement a special SELECT_DRIVE routine that is
|
||||
called before the IDE driver performs its own SELECT_DRIVE. Our code
|
||||
recognizes that the SELECT register cannot be modified without also
|
||||
writing a command. It send an IDLE_IMMEDIATE command on selecting a
|
||||
drive. The function also prevents drive select to the slave drive
|
||||
since there can be only one. The awkward part is that the IDE driver,
|
||||
even though we have a select procedure, also attempts to change the
|
||||
drive by writing directly the SELECT register. This attempt is
|
||||
explicitly blocked by the OUTB function--not pretty, but effective.
|
||||
|
||||
The lack of interrupts is a more serious problem. Even though the CF
|
||||
card is fast when compared to a normal IDE device, we don't know that
|
||||
the CF is really flash. A user could use one of the very small hard
|
||||
drives being shipped with a CF interface. The IDE code includes a
|
||||
check for interfaces that lack an IRQ. In these cases, submitting a
|
||||
command to the IDE controller is followed by a call to poll for
|
||||
completion. If the device isn't immediately ready, it schedules a
|
||||
timer to poll again later.
|
||||
@@ -1,45 +0,0 @@
|
||||
README on the IOBARRIER for CardEngine IO
|
||||
=========================================
|
||||
|
||||
Due to an unfortunate oversight when the Card Engines were designed,
|
||||
the signals that control access to some peripherals, most notably the
|
||||
SMC91C9111 ethernet controller, are not properly handled.
|
||||
|
||||
The symptom is that some back to back IO with the peripheral returns
|
||||
unreliable data. With the SMC chip, you'll see errors about the bank
|
||||
register being 'screwed'.
|
||||
|
||||
The cause is that the AEN signal to the SMC chip does not transition
|
||||
for every memory access. It is driven through the CPLD from the CS7
|
||||
line of the CPU's static memory controller which is optimized to
|
||||
eliminate unnecessary transitions. Yet, the SMC requires a transition
|
||||
for every write access. The Sharp website has more information about
|
||||
the effect this power-conserving feature has on peripheral
|
||||
interfacing.
|
||||
|
||||
The solution is to follow every write access to the SMC chip with an
|
||||
access to another memory region that will force the CPU to release the
|
||||
chip select line. It is important to guarantee that this access
|
||||
forces the CPU off-chip. We map a page of SDRAM as if it were an
|
||||
uncacheable IO device and read from it after every SMC IO write
|
||||
operation.
|
||||
|
||||
SMC IO
|
||||
BARRIER IO
|
||||
|
||||
Only this sequence is important. It does not matter that there is no
|
||||
BARRIER IO before the access to the SMC chip because the AEN latch
|
||||
only needs occurs after the SMC IO write cycle. The routines that
|
||||
implement this work-around make an additional concession which is to
|
||||
disable interrupts during the IO sequence. Other hardware devices
|
||||
(the LogicPD CPLD) have registers in the same physical memory
|
||||
region as the SMC chip. An interrupt might allow an access to one of
|
||||
those registers while SMC IO is being performed.
|
||||
|
||||
You might be tempted to think that we have to access another device
|
||||
attached to the static memory controller, but the empirical evidence
|
||||
indicates that this is not so. Mapping 0x00000000 (flash) and
|
||||
0xc0000000 (SDRAM) appear to have the same effect. Using SDRAM seems
|
||||
to be faster. Choosing to access an undecoded memory region is not
|
||||
desirable as there is no way to know how that chip select will be used
|
||||
in the future.
|
||||
@@ -1,8 +0,0 @@
|
||||
README on Implementing Linux for Sharp's KEV7a400
|
||||
=================================================
|
||||
|
||||
This product has been discontinued by Sharp. For the time being, the
|
||||
partially implemented code remains in the kernel. At some point in
|
||||
the future, either the code will be finished or it will be removed
|
||||
completely. This depends primarily on how many of the development
|
||||
boards are in the field.
|
||||
@@ -1,59 +0,0 @@
|
||||
README on the LCD Panels
|
||||
========================
|
||||
|
||||
Configuration options for several LCD panels, available from Logic PD,
|
||||
are included in the kernel source. This README will help you
|
||||
understand the configuration data and give you some guidance for
|
||||
adding support for other panels if you wish.
|
||||
|
||||
|
||||
lcd-panels.h
|
||||
------------
|
||||
|
||||
There is no way, at present, to detect which panel is attached to the
|
||||
system at runtime. Thus the kernel configuration is static. The file
|
||||
arch/arm/mach-ld7a40x/lcd-panels.h (or similar) defines all of the
|
||||
panel specific parameters.
|
||||
|
||||
It should be possible for this data to be shared among several device
|
||||
families. The current layout may be insufficiently general, but it is
|
||||
amenable to improvement.
|
||||
|
||||
|
||||
PIXEL_CLOCK
|
||||
-----------
|
||||
|
||||
The panel data sheets will give a range of acceptable pixel clocks.
|
||||
The fundamental LCDCLK input frequency is divided down by a PCD
|
||||
constant in field '.tim2'. It may happen that it is impossible to set
|
||||
the pixel clock within this range. A clock which is too slow will
|
||||
tend to flicker. For the highest quality image, set the clock as high
|
||||
as possible.
|
||||
|
||||
|
||||
MARGINS
|
||||
-------
|
||||
|
||||
These values may be difficult to glean from the panel data sheet. In
|
||||
the case of the Sharp panels, the upper margin is explicitly called
|
||||
out as a specific number of lines from the top of the frame. The
|
||||
other values may not matter as much as the panels tend to
|
||||
automatically center the image.
|
||||
|
||||
|
||||
Sync Sense
|
||||
----------
|
||||
|
||||
The sense of the hsync and vsync pulses may be called out in the data
|
||||
sheet. On one panel, the sense of these pulses determine the height
|
||||
of the visible region on the panel. Most of the Sharp panels use
|
||||
negative sense sync pulses set by the TIM2_IHS and TIM2_IVS bits in
|
||||
'.tim2'.
|
||||
|
||||
|
||||
Pel Layout
|
||||
----------
|
||||
|
||||
The Sharp color TFT panels are all configured for 16 bit direct color
|
||||
modes. The amba-lcd driver sets the pel mode to 565 for 5 bits of
|
||||
each red and blue and 6 bits of green.
|
||||
@@ -1,15 +0,0 @@
|
||||
README on Implementing Linux for the Logic PD LPD7A400-10
|
||||
=========================================================
|
||||
|
||||
- CPLD memory mapping
|
||||
|
||||
The board designers chose to use high address lines for controlling
|
||||
access to the CPLD registers. It turns out to be a big waste
|
||||
because we're using an MMU and must map IO space into virtual
|
||||
memory. The result is that we have to make a mapping for every
|
||||
register.
|
||||
|
||||
- Serial Console
|
||||
|
||||
It may be OK not to use the serial console option if the user passes
|
||||
the console device name to the kernel. This deserves some exploration.
|
||||
@@ -1,16 +0,0 @@
|
||||
README on Implementing Linux for the Logic PD LPD7A40X-10
|
||||
=========================================================
|
||||
|
||||
- CPLD memory mapping
|
||||
|
||||
The board designers chose to use high address lines for controlling
|
||||
access to the CPLD registers. It turns out to be a big waste
|
||||
because we're using an MMU and must map IO space into virtual
|
||||
memory. The result is that we have to make a mapping for every
|
||||
register.
|
||||
|
||||
- Serial Console
|
||||
|
||||
It may be OK not to use the serial console option if the user passes
|
||||
the console device name to the kernel. This deserves some exploration.
|
||||
|
||||
@@ -1,51 +0,0 @@
|
||||
README on the SDRAM Controller for the LH7a40X
|
||||
==============================================
|
||||
|
||||
The standard configuration for the SDRAM controller generates a sparse
|
||||
memory array. The precise layout is determined by the SDRAM chips. A
|
||||
default kernel configuration assembles the discontiguous memory
|
||||
regions into separate memory nodes via the NUMA (Non-Uniform Memory
|
||||
Architecture) facilities. In this default configuration, the kernel
|
||||
is forgiving about the precise layout. As long as it is given an
|
||||
accurate picture of available memory by the bootloader the kernel will
|
||||
execute correctly.
|
||||
|
||||
The SDRC supports a mode where some of the chip select lines are
|
||||
swapped in order to make SDRAM look like a synchronous ROM. Setting
|
||||
this bit means that the RAM will present as a contiguous array. Some
|
||||
programmers prefer this to the discontiguous layout. Be aware that
|
||||
may be a penalty for this feature where some some configurations of
|
||||
memory are significantly reduced; i.e. 64MiB of RAM appears as only 32
|
||||
MiB.
|
||||
|
||||
There are a couple of configuration options to override the default
|
||||
behavior. When the SROMLL bit is set and memory appears as a
|
||||
contiguous array, there is no reason to support NUMA.
|
||||
CONFIG_LH7A40X_CONTIGMEM disables NUMA support. When physical memory
|
||||
is discontiguous, the memory tables are organized such that there are
|
||||
two banks per nodes with a small gap between them. This layout wastes
|
||||
some kernel memory for page tables representing non-existent memory.
|
||||
CONFIG_LH7A40X_ONE_BANK_PER_NODE optimizes the node tables such that
|
||||
there are no gaps. These options control the low level organization
|
||||
of the memory management tables in ways that may prevent the kernel
|
||||
from booting or may cause the kernel to allocated excessively large
|
||||
page tables. Be warned. Only change these options if you know what
|
||||
you are doing. The default behavior is a reasonable compromise that
|
||||
will suit all users.
|
||||
|
||||
--
|
||||
|
||||
A typical 32MiB system with the default configuration options will
|
||||
find physical memory managed as follows.
|
||||
|
||||
node 0: 0xc0000000 4MiB
|
||||
0xc1000000 4MiB
|
||||
node 1: 0xc4000000 4MiB
|
||||
0xc5000000 4MiB
|
||||
node 2: 0xc8000000 4MiB
|
||||
0xc9000000 4MiB
|
||||
node 3: 0xcc000000 4MiB
|
||||
0xcd000000 4MiB
|
||||
|
||||
Setting CONFIG_LH7A40X_ONE_BANK_PER_NODE will put each bank into a
|
||||
separate node.
|
||||
@@ -1,80 +0,0 @@
|
||||
README on the Vectored Interrupt Controller of the LH7A404
|
||||
==========================================================
|
||||
|
||||
The 404 revision of the LH7A40X series comes with two vectored
|
||||
interrupts controllers. While the kernel does use some of the
|
||||
features of these devices, it is far from the purpose for which they
|
||||
were designed.
|
||||
|
||||
When this README was written, the implementation of the VICs was in
|
||||
flux. It is possible that some details, especially with priorities,
|
||||
will change.
|
||||
|
||||
The VIC support code is inspired by routines written by Sharp.
|
||||
|
||||
|
||||
Priority Control
|
||||
----------------
|
||||
|
||||
The significant reason for using the VIC's vectoring is to control
|
||||
interrupt priorities. There are two tables in
|
||||
arch/arm/mach-lh7a40x/irq-lh7a404.c that look something like this.
|
||||
|
||||
static unsigned char irq_pri_vic1[] = { IRQ_GPIO3INTR, };
|
||||
static unsigned char irq_pri_vic2[] = {
|
||||
IRQ_T3UI, IRQ_GPIO7INTR,
|
||||
IRQ_UART1INTR, IRQ_UART2INTR, IRQ_UART3INTR, };
|
||||
|
||||
The initialization code reads these tables and inserts a vector
|
||||
address and enable for each indicated IRQ. Vectored interrupts have
|
||||
higher priority than non-vectored interrupts. So, on VIC1,
|
||||
IRQ_GPIO3INTR will be served before any other non-FIQ interrupt. Due
|
||||
to the way that the vectoring works, IRQ_T3UI is the next highest
|
||||
priority followed by the other vectored interrupts on VIC2. After
|
||||
that, the non-vectored interrupts are scanned in VIC1 then in VIC2.
|
||||
|
||||
|
||||
ISR
|
||||
---
|
||||
|
||||
The interrupt service routine macro get_irqnr() in
|
||||
arch/arm/kernel/entry-armv.S scans the VICs for the next active
|
||||
interrupt. The vectoring makes this code somewhat larger than it was
|
||||
before using vectoring (refer to the LH7A400 implementation). In the
|
||||
case where an interrupt is vectored, the implementation will tend to
|
||||
be faster than the non-vectored version. However, the worst-case path
|
||||
is longer.
|
||||
|
||||
It is worth noting that at present, there is no need to read
|
||||
VIC2_VECTADDR because the register appears to be shared between the
|
||||
controllers. The code is written such that if this changes, it ought
|
||||
to still work properly.
|
||||
|
||||
|
||||
Vector Addresses
|
||||
----------------
|
||||
|
||||
The proper use of the vectoring hardware would jump to the ISR
|
||||
specified by the vectoring address. Linux isn't structured to take
|
||||
advantage of this feature, though it might be possible to change
|
||||
things to support it.
|
||||
|
||||
In this implementation, the vectoring address is used to speed the
|
||||
search for the active IRQ. The address is coded such that the lowest
|
||||
6 bits store the IRQ number for vectored interrupts. These numbers
|
||||
correspond to the bits in the interrupt status registers. IRQ zero is
|
||||
the lowest interrupt bit in VIC1. IRQ 32 is the lowest interrupt bit
|
||||
in VIC2. Because zero is a valid IRQ number and because we cannot
|
||||
detect whether or not there is a valid vectoring address if that
|
||||
address is zero, the eigth bit (0x100) is set for vectored interrupts.
|
||||
The address for IRQ 0x18 (VIC2) is 0x118. Only the ninth bit is set
|
||||
for the default handler on VIC1 and only the tenth bit is set for the
|
||||
default handler on VIC2.
|
||||
|
||||
In other words.
|
||||
|
||||
0x000 - no active interrupt
|
||||
0x1ii - vectored interrupt 0xii
|
||||
0x2xx - unvectored interrupt on VIC1 (xx is don't care)
|
||||
0x4xx - unvectored interrupt on VIC2 (xx is don't care)
|
||||
|
||||
@@ -227,15 +227,6 @@ choice
|
||||
prompt "ARM system type"
|
||||
default ARCH_VERSATILE
|
||||
|
||||
config ARCH_AAEC2000
|
||||
bool "Agilent AAEC-2000 based"
|
||||
select CPU_ARM920T
|
||||
select ARM_AMBA
|
||||
select HAVE_CLK
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
help
|
||||
This enables support for systems based on the Agilent AAEC-2000
|
||||
|
||||
config ARCH_INTEGRATOR
|
||||
bool "ARM Ltd. Integrator family"
|
||||
select ARM_AMBA
|
||||
@@ -811,17 +802,6 @@ config ARCH_TCC_926
|
||||
help
|
||||
Support for Telechips TCC ARM926-based systems.
|
||||
|
||||
config ARCH_LH7A40X
|
||||
bool "Sharp LH7A40X"
|
||||
select CPU_ARM922T
|
||||
select ARCH_SPARSEMEM_ENABLE if !LH7A40X_CONTIGMEM
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
help
|
||||
Say Y here for systems based on one of the Sharp LH7A40X
|
||||
System on a Chip processors. These CPUs include an ARM922T
|
||||
core with a wide array of integrated devices for
|
||||
hand-held and low-power applications.
|
||||
|
||||
config ARCH_U300
|
||||
bool "ST-Ericsson U300 Series"
|
||||
depends on MMU
|
||||
@@ -908,8 +888,6 @@ endchoice
|
||||
# Kconfigs may be included either alphabetically (according to the
|
||||
# plat- suffix) or along side the corresponding mach-* source.
|
||||
#
|
||||
source "arch/arm/mach-aaec2000/Kconfig"
|
||||
|
||||
source "arch/arm/mach-at91/Kconfig"
|
||||
|
||||
source "arch/arm/mach-bcmring/Kconfig"
|
||||
@@ -948,8 +926,6 @@ source "arch/arm/mach-kirkwood/Kconfig"
|
||||
|
||||
source "arch/arm/mach-ks8695/Kconfig"
|
||||
|
||||
source "arch/arm/mach-lh7a40x/Kconfig"
|
||||
|
||||
source "arch/arm/mach-loki/Kconfig"
|
||||
|
||||
source "arch/arm/mach-lpc32xx/Kconfig"
|
||||
|
||||
@@ -131,7 +131,6 @@ endif
|
||||
|
||||
# Machine directory name. This list is sorted alphanumerically
|
||||
# by CONFIG_* macro name.
|
||||
machine-$(CONFIG_ARCH_AAEC2000) := aaec2000
|
||||
machine-$(CONFIG_ARCH_AT91) := at91
|
||||
machine-$(CONFIG_ARCH_BCMRING) := bcmring
|
||||
machine-$(CONFIG_ARCH_CLPS711X) := clps711x
|
||||
@@ -151,7 +150,6 @@ machine-$(CONFIG_ARCH_IXP23XX) := ixp23xx
|
||||
machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx
|
||||
machine-$(CONFIG_ARCH_KIRKWOOD) := kirkwood
|
||||
machine-$(CONFIG_ARCH_KS8695) := ks8695
|
||||
machine-$(CONFIG_ARCH_LH7A40X) := lh7a40x
|
||||
machine-$(CONFIG_ARCH_LOKI) := loki
|
||||
machine-$(CONFIG_ARCH_LPC32XX) := lpc32xx
|
||||
machine-$(CONFIG_ARCH_MMP) := mmp
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
CONFIG_ARCH_LH7A40X=y
|
||||
CONFIG_MACH_LPD7A400=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_IDE=y
|
||||
CONFIG_SCSI=y
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SERIAL_LH7A40X=y
|
||||
CONFIG_SERIAL_LH7A40X_CONSOLE=y
|
||||
CONFIG_FB=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
@@ -1,81 +0,0 @@
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_SWAP is not set
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_LOG_BUF_SHIFT=16
|
||||
CONFIG_EXPERT=y
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_EPOLL is not set
|
||||
CONFIG_SLAB=y
|
||||
# CONFIG_IOSCHED_DEADLINE is not set
|
||||
CONFIG_ARCH_LH7A40X=y
|
||||
CONFIG_MACH_LPD7A404=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_DISCONTIGMEM_MANUAL=y
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_FPE_NWFPE=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
CONFIG_IP_PNP_BOOTP=y
|
||||
CONFIG_IP_PNP_RARP=y
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_CFI=y
|
||||
CONFIG_MTD_CFI_INTELEXT=y
|
||||
CONFIG_MTD_PHYSMAP=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_IDE=y
|
||||
CONFIG_SCSI=y
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_SMC91X=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_SERIO is not set
|
||||
CONFIG_SERIAL_LH7A40X=y
|
||||
CONFIG_SERIAL_LH7A40X_CONSOLE=y
|
||||
CONFIG_FB=y
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_MIXER_OSS=y
|
||||
CONFIG_SND_PCM_OSS=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEVICEFS=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_OHCI_HCD=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_STORAGE_DEBUG=y
|
||||
CONFIG_USB_STORAGE_DATAFAB=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_ZERO=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT3_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_JFFS2_FS=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
CONFIG_ROOT_NFS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
@@ -192,11 +192,7 @@ static struct tagtable __tagtable_##fn __tag = { tag, fn }
|
||||
/*
|
||||
* Memory map description
|
||||
*/
|
||||
#ifdef CONFIG_ARCH_LH7A40X
|
||||
# define NR_BANKS 16
|
||||
#else
|
||||
# define NR_BANKS 8
|
||||
#endif
|
||||
#define NR_BANKS 8
|
||||
|
||||
struct membank {
|
||||
unsigned long start;
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
if ARCH_AAEC2000
|
||||
|
||||
menu "Agilent AAEC-2000 Implementations"
|
||||
|
||||
config MACH_AAED2000
|
||||
bool "Agilent AAED-2000 Development Platform"
|
||||
select CPU_ARM920T
|
||||
|
||||
endmenu
|
||||
|
||||
endif
|
||||
@@ -1,9 +0,0 @@
|
||||
#
|
||||
# Makefile for the linux kernel.
|
||||
#
|
||||
|
||||
# Common support (must be linked before board specific support)
|
||||
obj-y += core.o
|
||||
|
||||
# Specific board support
|
||||
obj-$(CONFIG_MACH_AAED2000) += aaed2000.o
|
||||
@@ -1 +0,0 @@
|
||||
zreladdr-y := 0xf0008000
|
||||
@@ -1,102 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-aaec2000/aaed2000.c
|
||||
*
|
||||
* Support for the Agilent AAED-2000 Development Platform.
|
||||
*
|
||||
* Copyright (c) 2005 Nicolas Bellido Y Ortega
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/memory.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#include <mach/aaed2000.h>
|
||||
|
||||
#include "core.h"
|
||||
|
||||
static void aaed2000_clcd_disable(struct clcd_fb *fb)
|
||||
{
|
||||
AAED_EXT_GPIO &= ~AAED_EGPIO_LCD_PWR_EN;
|
||||
}
|
||||
|
||||
static void aaed2000_clcd_enable(struct clcd_fb *fb)
|
||||
{
|
||||
AAED_EXT_GPIO |= AAED_EGPIO_LCD_PWR_EN;
|
||||
}
|
||||
|
||||
struct aaec2000_clcd_info clcd_info = {
|
||||
.enable = aaed2000_clcd_enable,
|
||||
.disable = aaed2000_clcd_disable,
|
||||
.panel = {
|
||||
.mode = {
|
||||
.name = "Sharp",
|
||||
.refresh = 60,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.pixclock = 39721,
|
||||
.left_margin = 20,
|
||||
.right_margin = 44,
|
||||
.upper_margin = 21,
|
||||
.lower_margin = 34,
|
||||
.hsync_len = 96,
|
||||
.vsync_len = 2,
|
||||
.sync = 0,
|
||||
.vmode = FB_VMODE_NONINTERLACED,
|
||||
},
|
||||
.width = -1,
|
||||
.height = -1,
|
||||
.tim2 = TIM2_IVS | TIM2_IHS,
|
||||
.cntl = CNTL_LCDTFT,
|
||||
.bpp = 16,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init aaed2000_init_irq(void)
|
||||
{
|
||||
aaec2000_init_irq();
|
||||
}
|
||||
|
||||
static void __init aaed2000_init(void)
|
||||
{
|
||||
aaec2000_set_clcd_plat_data(&clcd_info);
|
||||
}
|
||||
|
||||
static struct map_desc aaed2000_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = EXT_GPIO_VBASE,
|
||||
.pfn = __phys_to_pfn(EXT_GPIO_PBASE),
|
||||
.length = EXT_GPIO_LENGTH,
|
||||
.type = MT_DEVICE
|
||||
},
|
||||
};
|
||||
|
||||
static void __init aaed2000_map_io(void)
|
||||
{
|
||||
aaec2000_map_io();
|
||||
iotable_init(aaed2000_io_desc, ARRAY_SIZE(aaed2000_io_desc));
|
||||
}
|
||||
|
||||
MACHINE_START(AAED2000, "Agilent AAED-2000 Development Platform")
|
||||
/* Maintainer: Nicolas Bellido Y Ortega */
|
||||
.map_io = aaed2000_map_io,
|
||||
.init_irq = aaed2000_init_irq,
|
||||
.timer = &aaec2000_timer,
|
||||
.init_machine = aaed2000_init,
|
||||
MACHINE_END
|
||||
@@ -1,298 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-aaec2000/core.c
|
||||
*
|
||||
* Code common to all AAEC-2000 machines
|
||||
*
|
||||
* Copyright (c) 2005 Nicolas Bellido Y Ortega
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/timex.h>
|
||||
#include <linux/signal.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/gfp.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
|
||||
#include <asm/mach/flash.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include "core.h"
|
||||
|
||||
/*
|
||||
* Common I/O mapping:
|
||||
*
|
||||
* Static virtual address mappings are as follow:
|
||||
*
|
||||
* 0xf8000000-0xf8001ffff: Devices connected to APB bus
|
||||
* 0xf8002000-0xf8003ffff: Devices connected to AHB bus
|
||||
*
|
||||
* Below 0xe8000000 is reserved for vm allocation.
|
||||
*
|
||||
* The machine specific code must provide the extra mapping beside the
|
||||
* default mapping provided here.
|
||||
*/
|
||||
static struct map_desc standard_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = VIO_APB_BASE,
|
||||
.pfn = __phys_to_pfn(PIO_APB_BASE),
|
||||
.length = IO_APB_LENGTH,
|
||||
.type = MT_DEVICE
|
||||
}, {
|
||||
.virtual = VIO_AHB_BASE,
|
||||
.pfn = __phys_to_pfn(PIO_AHB_BASE),
|
||||
.length = IO_AHB_LENGTH,
|
||||
.type = MT_DEVICE
|
||||
}
|
||||
};
|
||||
|
||||
void __init aaec2000_map_io(void)
|
||||
{
|
||||
iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
|
||||
}
|
||||
|
||||
/*
|
||||
* Interrupt handling routines
|
||||
*/
|
||||
static void aaec2000_int_ack(struct irq_data *d)
|
||||
{
|
||||
IRQ_INTSR = 1 << d->irq;
|
||||
}
|
||||
|
||||
static void aaec2000_int_mask(struct irq_data *d)
|
||||
{
|
||||
IRQ_INTENC |= (1 << d->irq);
|
||||
}
|
||||
|
||||
static void aaec2000_int_unmask(struct irq_data *d)
|
||||
{
|
||||
IRQ_INTENS |= (1 << d->irq);
|
||||
}
|
||||
|
||||
static struct irq_chip aaec2000_irq_chip = {
|
||||
.irq_ack = aaec2000_int_ack,
|
||||
.irq_mask = aaec2000_int_mask,
|
||||
.irq_unmask = aaec2000_int_unmask,
|
||||
};
|
||||
|
||||
void __init aaec2000_init_irq(void)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
for (i = 0; i < NR_IRQS; i++) {
|
||||
set_irq_handler(i, handle_level_irq);
|
||||
set_irq_chip(i, &aaec2000_irq_chip);
|
||||
set_irq_flags(i, IRQF_VALID);
|
||||
}
|
||||
|
||||
/* Disable all interrupts */
|
||||
IRQ_INTENC = 0xffffffff;
|
||||
|
||||
/* Clear any pending interrupts */
|
||||
IRQ_INTSR = IRQ_INTSR;
|
||||
}
|
||||
|
||||
/*
|
||||
* Time keeping
|
||||
*/
|
||||
/* IRQs are disabled before entering here from do_gettimeofday() */
|
||||
static unsigned long aaec2000_gettimeoffset(void)
|
||||
{
|
||||
unsigned long ticks_to_match, elapsed, usec;
|
||||
|
||||
/* Get ticks before next timer match */
|
||||
ticks_to_match = TIMER1_LOAD - TIMER1_VAL;
|
||||
|
||||
/* We need elapsed ticks since last match */
|
||||
elapsed = LATCH - ticks_to_match;
|
||||
|
||||
/* Now, convert them to usec */
|
||||
usec = (unsigned long)(elapsed * (tick_nsec / 1000))/LATCH;
|
||||
|
||||
return usec;
|
||||
}
|
||||
|
||||
/* We enter here with IRQs enabled */
|
||||
static irqreturn_t
|
||||
aaec2000_timer_interrupt(int irq, void *dev_id)
|
||||
{
|
||||
/* TODO: Check timer accuracy */
|
||||
timer_tick();
|
||||
TIMER1_CLEAR = 1;
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static struct irqaction aaec2000_timer_irq = {
|
||||
.name = "AAEC-2000 Timer Tick",
|
||||
.flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
|
||||
.handler = aaec2000_timer_interrupt,
|
||||
};
|
||||
|
||||
static void __init aaec2000_timer_init(void)
|
||||
{
|
||||
/* Disable timer 1 */
|
||||
TIMER1_CTRL = 0;
|
||||
|
||||
/* We have somehow to generate a 100Hz clock.
|
||||
* We then use the 508KHz timer in periodic mode.
|
||||
*/
|
||||
TIMER1_LOAD = LATCH;
|
||||
TIMER1_CLEAR = 1; /* Clear interrupt */
|
||||
|
||||
setup_irq(INT_TMR1_OFL, &aaec2000_timer_irq);
|
||||
|
||||
TIMER1_CTRL = TIMER_CTRL_ENABLE |
|
||||
TIMER_CTRL_PERIODIC |
|
||||
TIMER_CTRL_CLKSEL_508K;
|
||||
}
|
||||
|
||||
struct sys_timer aaec2000_timer = {
|
||||
.init = aaec2000_timer_init,
|
||||
.offset = aaec2000_gettimeoffset,
|
||||
};
|
||||
|
||||
static struct clcd_panel mach_clcd_panel;
|
||||
|
||||
static int aaec2000_clcd_setup(struct clcd_fb *fb)
|
||||
{
|
||||
dma_addr_t dma;
|
||||
|
||||
fb->panel = &mach_clcd_panel;
|
||||
|
||||
fb->fb.screen_base = dma_alloc_writecombine(&fb->dev->dev, SZ_1M,
|
||||
&dma, GFP_KERNEL);
|
||||
|
||||
if (!fb->fb.screen_base) {
|
||||
printk(KERN_ERR "CLCD: unable to map framebuffer\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
fb->fb.fix.smem_start = dma;
|
||||
fb->fb.fix.smem_len = SZ_1M;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int aaec2000_clcd_mmap(struct clcd_fb *fb, struct vm_area_struct *vma)
|
||||
{
|
||||
return dma_mmap_writecombine(&fb->dev->dev, vma,
|
||||
fb->fb.screen_base,
|
||||
fb->fb.fix.smem_start,
|
||||
fb->fb.fix.smem_len);
|
||||
}
|
||||
|
||||
static void aaec2000_clcd_remove(struct clcd_fb *fb)
|
||||
{
|
||||
dma_free_writecombine(&fb->dev->dev, fb->fb.fix.smem_len,
|
||||
fb->fb.screen_base, fb->fb.fix.smem_start);
|
||||
}
|
||||
|
||||
static struct clcd_board clcd_plat_data = {
|
||||
.name = "AAEC-2000",
|
||||
.check = clcdfb_check,
|
||||
.decode = clcdfb_decode,
|
||||
.setup = aaec2000_clcd_setup,
|
||||
.mmap = aaec2000_clcd_mmap,
|
||||
.remove = aaec2000_clcd_remove,
|
||||
};
|
||||
|
||||
static struct amba_device clcd_device = {
|
||||
.dev = {
|
||||
.init_name = "mb:16",
|
||||
.coherent_dma_mask = ~0,
|
||||
.platform_data = &clcd_plat_data,
|
||||
},
|
||||
.res = {
|
||||
.start = AAEC_CLCD_PHYS,
|
||||
.end = AAEC_CLCD_PHYS + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
.irq = { INT_LCD, NO_IRQ },
|
||||
.periphid = 0x41110,
|
||||
};
|
||||
|
||||
static struct amba_device *amba_devs[] __initdata = {
|
||||
&clcd_device,
|
||||
};
|
||||
|
||||
void clk_disable(struct clk *clk)
|
||||
{
|
||||
}
|
||||
|
||||
int clk_set_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int clk_enable(struct clk *clk)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
struct clk *clk_get(struct device *dev, const char *id)
|
||||
{
|
||||
return dev && strcmp(dev_name(dev), "mb:16") == 0 ? NULL : ERR_PTR(-ENOENT);
|
||||
}
|
||||
|
||||
void clk_put(struct clk *clk)
|
||||
{
|
||||
}
|
||||
|
||||
void __init aaec2000_set_clcd_plat_data(struct aaec2000_clcd_info *clcd)
|
||||
{
|
||||
clcd_plat_data.enable = clcd->enable;
|
||||
clcd_plat_data.disable = clcd->disable;
|
||||
memcpy(&mach_clcd_panel, &clcd->panel, sizeof(struct clcd_panel));
|
||||
}
|
||||
|
||||
static struct flash_platform_data aaec2000_flash_data = {
|
||||
.map_name = "cfi_probe",
|
||||
.width = 4,
|
||||
};
|
||||
|
||||
static struct resource aaec2000_flash_resource = {
|
||||
.start = AAEC_FLASH_BASE,
|
||||
.end = AAEC_FLASH_BASE + AAEC_FLASH_SIZE,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device aaec2000_flash_device = {
|
||||
.name = "armflash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &aaec2000_flash_data,
|
||||
},
|
||||
.num_resources = 1,
|
||||
.resource = &aaec2000_flash_resource,
|
||||
};
|
||||
|
||||
static int __init aaec2000_init(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(amba_devs); i++) {
|
||||
struct amba_device *d = amba_devs[i];
|
||||
amba_device_register(d, &iomem_resource);
|
||||
}
|
||||
|
||||
platform_device_register(&aaec2000_flash_device);
|
||||
|
||||
return 0;
|
||||
};
|
||||
arch_initcall(aaec2000_init);
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-aaec2000/core.h
|
||||
*
|
||||
* Copyright (c) 2005 Nicolas Bellido Y Ortega
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/amba/bus.h>
|
||||
#include <linux/amba/clcd.h>
|
||||
|
||||
struct sys_timer;
|
||||
|
||||
extern struct sys_timer aaec2000_timer;
|
||||
extern void __init aaec2000_map_io(void);
|
||||
extern void __init aaec2000_init_irq(void);
|
||||
|
||||
struct aaec2000_clcd_info {
|
||||
struct clcd_panel panel;
|
||||
void (*disable)(struct clcd_fb *);
|
||||
void (*enable)(struct clcd_fb *);
|
||||
};
|
||||
|
||||
extern void __init aaec2000_set_clcd_plat_data(struct aaec2000_clcd_info *);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user