forked from Minki/linux
d192baeaa7
Add some documentation in Documentation/arm/Samsung for the GPIO code and where to look for the necessary functions. Update the S3C24XX case as well. Signed-off-by: Ben Dooks <ben-linux@fluff.org>
316 lines
8.5 KiB
Plaintext
316 lines
8.5 KiB
Plaintext
S3C24XX ARM Linux Overview
|
|
==========================
|
|
|
|
|
|
|
|
Introduction
|
|
------------
|
|
|
|
The Samsung S3C24XX range of ARM9 System-on-Chip CPUs are supported
|
|
by the 's3c2410' architecture of ARM Linux. Currently the S3C2410,
|
|
S3C2412, S3C2413, S3C2416 S3C2440, S3C2442, S3C2443 and S3C2450 devices
|
|
are supported.
|
|
|
|
Support for the S3C2400 and S3C24A0 series are in progress.
|
|
|
|
The S3C2416 and S3C2450 devices are very similar and S3C2450 support is
|
|
included under the arch/arm/mach-s3c2416 directory. Note, whilst core
|
|
support for these SoCs is in, work on some of the extra peripherals
|
|
and extra interrupts is still ongoing.
|
|
|
|
|
|
Configuration
|
|
-------------
|
|
|
|
A generic S3C2410 configuration is provided, and can be used as the
|
|
default by `make s3c2410_defconfig`. This configuration has support
|
|
for all the machines, and the commonly used features on them.
|
|
|
|
Certain machines may have their own default configurations as well,
|
|
please check the machine specific documentation.
|
|
|
|
|
|
Layout
|
|
------
|
|
|
|
The core support files are located in the platform code contained in
|
|
arch/arm/plat-s3c24xx with headers in include/asm-arm/plat-s3c24xx.
|
|
This directory should be kept to items shared between the platform
|
|
code (arch/arm/plat-s3c24xx) and the arch/arm/mach-s3c24* code.
|
|
|
|
Each cpu has a directory with the support files for it, and the
|
|
machines that carry the device. For example S3C2410 is contained
|
|
in arch/arm/mach-s3c2410 and S3C2440 in arch/arm/mach-s3c2440
|
|
|
|
Register, kernel and platform data definitions are held in the
|
|
arch/arm/mach-s3c2410 directory./include/mach
|
|
|
|
arch/arm/plat-s3c24xx:
|
|
|
|
Files in here are either common to all the s3c24xx family,
|
|
or are common to only some of them with names to indicate this
|
|
status. The files that are not common to all are generally named
|
|
with the initial cpu they support in the series to ensure a short
|
|
name without any possibility of confusion with newer devices.
|
|
|
|
As an example, initially s3c244x would cover s3c2440 and s3c2442, but
|
|
with the s3c2443 which does not share many of the same drivers in
|
|
this directory, the name becomes invalid. We stick to s3c2440-<x>
|
|
to indicate a driver that is s3c2440 and s3c2442 compatible.
|
|
|
|
This does mean that to find the status of any given SoC, a number
|
|
of directories may need to be searched.
|
|
|
|
|
|
Machines
|
|
--------
|
|
|
|
The currently supported machines are as follows:
|
|
|
|
Simtec Electronics EB2410ITX (BAST)
|
|
|
|
A general purpose development board, see EB2410ITX.txt for further
|
|
details
|
|
|
|
Simtec Electronics IM2440D20 (Osiris)
|
|
|
|
CPU Module from Simtec Electronics, with a S3C2440A CPU, nand flash
|
|
and a PCMCIA controller.
|
|
|
|
Samsung SMDK2410
|
|
|
|
Samsung's own development board, geared for PDA work.
|
|
|
|
Samsung/Aiji SMDK2412
|
|
|
|
The S3C2412 version of the SMDK2440.
|
|
|
|
Samsung/Aiji SMDK2413
|
|
|
|
The S3C2412 version of the SMDK2440.
|
|
|
|
Samsung/Meritech SMDK2440
|
|
|
|
The S3C2440 compatible version of the SMDK2440, which has the
|
|
option of an S3C2440 or S3C2442 CPU module.
|
|
|
|
Thorcom VR1000
|
|
|
|
Custom embedded board
|
|
|
|
HP IPAQ 1940
|
|
|
|
Handheld (IPAQ), available in several varieties
|
|
|
|
HP iPAQ rx3715
|
|
|
|
S3C2440 based IPAQ, with a number of variations depending on
|
|
features shipped.
|
|
|
|
Acer N30
|
|
|
|
A S3C2410 based PDA from Acer. There is a Wiki page at
|
|
http://handhelds.org/moin/moin.cgi/AcerN30Documentation .
|
|
|
|
AML M5900
|
|
|
|
American Microsystems' M5900
|
|
|
|
Nex Vision Nexcoder
|
|
Nex Vision Otom
|
|
|
|
Two machines by Nex Vision
|
|
|
|
|
|
Adding New Machines
|
|
-------------------
|
|
|
|
The architecture has been designed to support as many machines as can
|
|
be configured for it in one kernel build, and any future additions
|
|
should keep this in mind before altering items outside of their own
|
|
machine files.
|
|
|
|
Machine definitions should be kept in linux/arch/arm/mach-s3c2410,
|
|
and there are a number of examples that can be looked at.
|
|
|
|
Read the kernel patch submission policies as well as the
|
|
Documentation/arm directory before submitting patches. The
|
|
ARM kernel series is managed by Russell King, and has a patch system
|
|
located at http://www.arm.linux.org.uk/developer/patches/
|
|
as well as mailing lists that can be found from the same site.
|
|
|
|
As a courtesy, please notify <ben-linux@fluff.org> of any new
|
|
machines or other modifications.
|
|
|
|
Any large scale modifications, or new drivers should be discussed
|
|
on the ARM kernel mailing list (linux-arm-kernel) before being
|
|
attempted. See http://www.arm.linux.org.uk/mailinglists/ for the
|
|
mailing list information.
|
|
|
|
|
|
I2C
|
|
---
|
|
|
|
The hardware I2C core in the CPU is supported in single master
|
|
mode, and can be configured via platform data.
|
|
|
|
|
|
RTC
|
|
---
|
|
|
|
Support for the onboard RTC unit, including alarm function.
|
|
|
|
This has recently been upgraded to use the new RTC core,
|
|
and the module has been renamed to rtc-s3c to fit in with
|
|
the new rtc naming scheme.
|
|
|
|
|
|
Watchdog
|
|
--------
|
|
|
|
The onchip watchdog is available via the standard watchdog
|
|
interface.
|
|
|
|
|
|
NAND
|
|
----
|
|
|
|
The current kernels now have support for the s3c2410 NAND
|
|
controller. If there are any problems the latest linux-mtd
|
|
code can be found from http://www.linux-mtd.infradead.org/
|
|
|
|
For more information see Documentation/arm/Samsung-S3C24XX/NAND.txt
|
|
|
|
|
|
SD/MMC
|
|
------
|
|
|
|
The SD/MMC hardware pre S3C2443 is supported in the current
|
|
kernel, the driver is drivers/mmc/host/s3cmci.c and supports
|
|
1 and 4 bit SD or MMC cards.
|
|
|
|
The SDIO behaviour of this driver has not been fully tested. There is no
|
|
current support for hardware SDIO interrupts.
|
|
|
|
|
|
Serial
|
|
------
|
|
|
|
The s3c2410 serial driver provides support for the internal
|
|
serial ports. These devices appear as /dev/ttySAC0 through 3.
|
|
|
|
To create device nodes for these, use the following commands
|
|
|
|
mknod ttySAC0 c 204 64
|
|
mknod ttySAC1 c 204 65
|
|
mknod ttySAC2 c 204 66
|
|
|
|
|
|
GPIO
|
|
----
|
|
|
|
The core contains support for manipulating the GPIO, see the
|
|
documentation in GPIO.txt in the same directory as this file.
|
|
|
|
Newer kernels carry GPIOLIB, and support is being moved towards
|
|
this with some of the older support in line to be removed.
|
|
|
|
As of v2.6.34, the move towards using gpiolib support is almost
|
|
complete, and very little of the old calls are left.
|
|
|
|
See Documentation/arm/Samsung-S3C24XX/GPIO.txt for the S3C24XX specific
|
|
support and Documentation/arm/Samsung/GPIO.txt for the core Samsung
|
|
implementation.
|
|
|
|
|
|
Clock Management
|
|
----------------
|
|
|
|
The core provides the interface defined in the header file
|
|
include/asm-arm/hardware/clock.h, to allow control over the
|
|
various clock units
|
|
|
|
|
|
Suspend to RAM
|
|
--------------
|
|
|
|
For boards that provide support for suspend to RAM, the
|
|
system can be placed into low power suspend.
|
|
|
|
See Suspend.txt for more information.
|
|
|
|
|
|
SPI
|
|
---
|
|
|
|
SPI drivers are available for both the in-built hardware
|
|
(although there is no DMA support yet) and a generic
|
|
GPIO based solution.
|
|
|
|
|
|
LEDs
|
|
----
|
|
|
|
There is support for GPIO based LEDs via a platform driver
|
|
in the LED subsystem.
|
|
|
|
|
|
Platform Data
|
|
-------------
|
|
|
|
Whenever a device has platform specific data that is specified
|
|
on a per-machine basis, care should be taken to ensure the
|
|
following:
|
|
|
|
1) that default data is not left in the device to confuse the
|
|
driver if a machine does not set it at startup
|
|
|
|
2) the data should (if possible) be marked as __initdata,
|
|
to ensure that the data is thrown away if the machine is
|
|
not the one currently in use.
|
|
|
|
The best way of doing this is to make a function that
|
|
kmalloc()s an area of memory, and copies the __initdata
|
|
and then sets the relevant device's platform data. Making
|
|
the function `__init` takes care of ensuring it is discarded
|
|
with the rest of the initialisation code
|
|
|
|
static __init void s3c24xx_xxx_set_platdata(struct xxx_data *pd)
|
|
{
|
|
struct s3c2410_xxx_mach_info *npd;
|
|
|
|
npd = kmalloc(sizeof(struct s3c2410_xxx_mach_info), GFP_KERNEL);
|
|
if (npd) {
|
|
memcpy(npd, pd, sizeof(struct s3c2410_xxx_mach_info));
|
|
s3c_device_xxx.dev.platform_data = npd;
|
|
} else {
|
|
printk(KERN_ERR "no memory for xxx platform data\n");
|
|
}
|
|
}
|
|
|
|
Note, since the code is marked as __init, it should not be
|
|
exported outside arch/arm/mach-s3c2410/, or exported to
|
|
modules via EXPORT_SYMBOL() and related functions.
|
|
|
|
|
|
Port Contributors
|
|
-----------------
|
|
|
|
Ben Dooks (BJD)
|
|
Vincent Sanders
|
|
Herbert Potzl
|
|
Arnaud Patard (RTP)
|
|
Roc Wu
|
|
Klaus Fetscher
|
|
Dimitry Andric
|
|
Shannon Holland
|
|
Guillaume Gourat (NexVision)
|
|
Christer Weinigel (wingel) (Acer N30)
|
|
Lucas Correia Villa Real (S3C2400 port)
|
|
|
|
|
|
Document Author
|
|
---------------
|
|
|
|
Ben Dooks, Copyright 2004-2006 Simtec Electronics
|