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"
|
prompt "ARM system type"
|
||||||
default ARCH_VERSATILE
|
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
|
config ARCH_INTEGRATOR
|
||||||
bool "ARM Ltd. Integrator family"
|
bool "ARM Ltd. Integrator family"
|
||||||
select ARM_AMBA
|
select ARM_AMBA
|
||||||
@@ -811,17 +802,6 @@ config ARCH_TCC_926
|
|||||||
help
|
help
|
||||||
Support for Telechips TCC ARM926-based systems.
|
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
|
config ARCH_U300
|
||||||
bool "ST-Ericsson U300 Series"
|
bool "ST-Ericsson U300 Series"
|
||||||
depends on MMU
|
depends on MMU
|
||||||
@@ -908,8 +888,6 @@ endchoice
|
|||||||
# Kconfigs may be included either alphabetically (according to the
|
# Kconfigs may be included either alphabetically (according to the
|
||||||
# plat- suffix) or along side the corresponding mach-* source.
|
# 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-at91/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-bcmring/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-ks8695/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-lh7a40x/Kconfig"
|
|
||||||
|
|
||||||
source "arch/arm/mach-loki/Kconfig"
|
source "arch/arm/mach-loki/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-lpc32xx/Kconfig"
|
source "arch/arm/mach-lpc32xx/Kconfig"
|
||||||
|
|||||||
@@ -131,7 +131,6 @@ endif
|
|||||||
|
|
||||||
# Machine directory name. This list is sorted alphanumerically
|
# Machine directory name. This list is sorted alphanumerically
|
||||||
# by CONFIG_* macro name.
|
# by CONFIG_* macro name.
|
||||||
machine-$(CONFIG_ARCH_AAEC2000) := aaec2000
|
|
||||||
machine-$(CONFIG_ARCH_AT91) := at91
|
machine-$(CONFIG_ARCH_AT91) := at91
|
||||||
machine-$(CONFIG_ARCH_BCMRING) := bcmring
|
machine-$(CONFIG_ARCH_BCMRING) := bcmring
|
||||||
machine-$(CONFIG_ARCH_CLPS711X) := clps711x
|
machine-$(CONFIG_ARCH_CLPS711X) := clps711x
|
||||||
@@ -151,7 +150,6 @@ machine-$(CONFIG_ARCH_IXP23XX) := ixp23xx
|
|||||||
machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx
|
machine-$(CONFIG_ARCH_IXP4XX) := ixp4xx
|
||||||
machine-$(CONFIG_ARCH_KIRKWOOD) := kirkwood
|
machine-$(CONFIG_ARCH_KIRKWOOD) := kirkwood
|
||||||
machine-$(CONFIG_ARCH_KS8695) := ks8695
|
machine-$(CONFIG_ARCH_KS8695) := ks8695
|
||||||
machine-$(CONFIG_ARCH_LH7A40X) := lh7a40x
|
|
||||||
machine-$(CONFIG_ARCH_LOKI) := loki
|
machine-$(CONFIG_ARCH_LOKI) := loki
|
||||||
machine-$(CONFIG_ARCH_LPC32XX) := lpc32xx
|
machine-$(CONFIG_ARCH_LPC32XX) := lpc32xx
|
||||||
machine-$(CONFIG_ARCH_MMP) := mmp
|
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
|
* Memory map description
|
||||||
*/
|
*/
|
||||||
#ifdef CONFIG_ARCH_LH7A40X
|
#define NR_BANKS 8
|
||||||
# define NR_BANKS 16
|
|
||||||
#else
|
|
||||||
# define NR_BANKS 8
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct membank {
|
struct membank {
|
||||||
unsigned long start;
|
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