Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
f499cae1e5
1688 changed files with 124201 additions and 66110 deletions
|
@ -136,7 +136,7 @@ exactly why.
|
||||||
The standard 32-bit addressing PCI device would do something like
|
The standard 32-bit addressing PCI device would do something like
|
||||||
this:
|
this:
|
||||||
|
|
||||||
if (pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
|
if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"mydev: No suitable DMA available.\n");
|
"mydev: No suitable DMA available.\n");
|
||||||
goto ignore_this_device;
|
goto ignore_this_device;
|
||||||
|
@ -155,9 +155,9 @@ all 64-bits when accessing streaming DMA:
|
||||||
|
|
||||||
int using_dac;
|
int using_dac;
|
||||||
|
|
||||||
if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
|
if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
|
||||||
using_dac = 1;
|
using_dac = 1;
|
||||||
} else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
|
} else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
|
||||||
using_dac = 0;
|
using_dac = 0;
|
||||||
} else {
|
} else {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
|
@ -170,14 +170,14 @@ the case would look like this:
|
||||||
|
|
||||||
int using_dac, consistent_using_dac;
|
int using_dac, consistent_using_dac;
|
||||||
|
|
||||||
if (!pci_set_dma_mask(pdev, DMA_64BIT_MASK)) {
|
if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
|
||||||
using_dac = 1;
|
using_dac = 1;
|
||||||
consistent_using_dac = 1;
|
consistent_using_dac = 1;
|
||||||
pci_set_consistent_dma_mask(pdev, DMA_64BIT_MASK);
|
pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
|
||||||
} else if (!pci_set_dma_mask(pdev, DMA_32BIT_MASK)) {
|
} else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
|
||||||
using_dac = 0;
|
using_dac = 0;
|
||||||
consistent_using_dac = 0;
|
consistent_using_dac = 0;
|
||||||
pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
|
pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
|
||||||
} else {
|
} else {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"mydev: No suitable DMA available.\n");
|
"mydev: No suitable DMA available.\n");
|
||||||
|
@ -192,7 +192,7 @@ check the return value from pci_set_consistent_dma_mask().
|
||||||
Finally, if your device can only drive the low 24-bits of
|
Finally, if your device can only drive the low 24-bits of
|
||||||
address during PCI bus mastering you might do something like:
|
address during PCI bus mastering you might do something like:
|
||||||
|
|
||||||
if (pci_set_dma_mask(pdev, DMA_24BIT_MASK)) {
|
if (pci_set_dma_mask(pdev, DMA_BIT_MASK(24))) {
|
||||||
printk(KERN_WARNING
|
printk(KERN_WARNING
|
||||||
"mydev: 24-bit DMA addressing not available.\n");
|
"mydev: 24-bit DMA addressing not available.\n");
|
||||||
goto ignore_this_device;
|
goto ignore_this_device;
|
||||||
|
@ -213,7 +213,7 @@ most specific mask.
|
||||||
|
|
||||||
Here is pseudo-code showing how this might be done:
|
Here is pseudo-code showing how this might be done:
|
||||||
|
|
||||||
#define PLAYBACK_ADDRESS_BITS DMA_32BIT_MASK
|
#define PLAYBACK_ADDRESS_BITS DMA_BIT_MASK(32)
|
||||||
#define RECORD_ADDRESS_BITS 0x00ffffff
|
#define RECORD_ADDRESS_BITS 0x00ffffff
|
||||||
|
|
||||||
struct my_sound_card *card;
|
struct my_sound_card *card;
|
||||||
|
|
|
@ -31,7 +31,7 @@ PS_METHOD = $(prefer-db2x)
|
||||||
|
|
||||||
###
|
###
|
||||||
# The targets that may be used.
|
# The targets that may be used.
|
||||||
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs
|
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs
|
||||||
|
|
||||||
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
||||||
xmldocs: $(BOOKS)
|
xmldocs: $(BOOKS)
|
||||||
|
@ -213,11 +213,12 @@ silent_gen_xml = :
|
||||||
dochelp:
|
dochelp:
|
||||||
@echo ' Linux kernel internal documentation in different formats:'
|
@echo ' Linux kernel internal documentation in different formats:'
|
||||||
@echo ' htmldocs - HTML'
|
@echo ' htmldocs - HTML'
|
||||||
@echo ' installmandocs - install man pages generated by mandocs'
|
|
||||||
@echo ' mandocs - man pages'
|
|
||||||
@echo ' pdfdocs - PDF'
|
@echo ' pdfdocs - PDF'
|
||||||
@echo ' psdocs - Postscript'
|
@echo ' psdocs - Postscript'
|
||||||
@echo ' xmldocs - XML DocBook'
|
@echo ' xmldocs - XML DocBook'
|
||||||
|
@echo ' mandocs - man pages'
|
||||||
|
@echo ' installmandocs - install man pages generated by mandocs'
|
||||||
|
@echo ' cleandocs - clean all generated DocBook files'
|
||||||
|
|
||||||
###
|
###
|
||||||
# Temporary files left by various tools
|
# Temporary files left by various tools
|
||||||
|
@ -235,6 +236,10 @@ clean-files := $(DOCBOOKS) \
|
||||||
|
|
||||||
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
clean-dirs := $(patsubst %.xml,%,$(DOCBOOKS)) man
|
||||||
|
|
||||||
|
cleandocs:
|
||||||
|
$(Q)rm -f $(call objectify, $(clean-files))
|
||||||
|
$(Q)rm -rf $(call objectify, $(clean-dirs))
|
||||||
|
|
||||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||||
# information in a variable se we can use it in if_changed and friends.
|
# information in a variable se we can use it in if_changed and friends.
|
||||||
|
|
||||||
|
|
|
@ -259,7 +259,7 @@ X!Earch/x86/kernel/mca_32.c
|
||||||
!Eblock/blk-tag.c
|
!Eblock/blk-tag.c
|
||||||
!Iblock/blk-tag.c
|
!Iblock/blk-tag.c
|
||||||
!Eblock/blk-integrity.c
|
!Eblock/blk-integrity.c
|
||||||
!Iblock/blktrace.c
|
!Ikernel/trace/blktrace.c
|
||||||
!Iblock/genhd.c
|
!Iblock/genhd.c
|
||||||
!Eblock/genhd.c
|
!Eblock/genhd.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
|
@ -1137,8 +1137,8 @@
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
/* check PCI availability (28bit DMA) */
|
/* check PCI availability (28bit DMA) */
|
||||||
if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
|
if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
|
||||||
pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
|
pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
|
||||||
printk(KERN_ERR "error to set 28bit mask DMA\n");
|
printk(KERN_ERR "error to set 28bit mask DMA\n");
|
||||||
pci_disable_device(pci);
|
pci_disable_device(pci);
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
@ -1252,8 +1252,8 @@
|
||||||
err = pci_enable_device(pci);
|
err = pci_enable_device(pci);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
|
if (pci_set_dma_mask(pci, DMA_BIT_MASK(28)) < 0 ||
|
||||||
pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
|
pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(28)) < 0) {
|
||||||
printk(KERN_ERR "error to set 28bit mask DMA\n");
|
printk(KERN_ERR "error to set 28bit mask DMA\n");
|
||||||
pci_disable_device(pci);
|
pci_disable_device(pci);
|
||||||
return -ENXIO;
|
return -ENXIO;
|
||||||
|
|
|
@ -8,6 +8,8 @@ cpqarray.txt
|
||||||
- info on using Compaq's SMART2 Intelligent Disk Array Controllers.
|
- info on using Compaq's SMART2 Intelligent Disk Array Controllers.
|
||||||
floppy.txt
|
floppy.txt
|
||||||
- notes and driver options for the floppy disk driver.
|
- notes and driver options for the floppy disk driver.
|
||||||
|
mflash.txt
|
||||||
|
- info on mGine m(g)flash driver for linux.
|
||||||
nbd.txt
|
nbd.txt
|
||||||
- info on a TCP implementation of a network block device.
|
- info on a TCP implementation of a network block device.
|
||||||
paride.txt
|
paride.txt
|
||||||
|
|
84
Documentation/blockdev/mflash.txt
Normal file
84
Documentation/blockdev/mflash.txt
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
This document describes m[g]flash support in linux.
|
||||||
|
|
||||||
|
Contents
|
||||||
|
1. Overview
|
||||||
|
2. Reserved area configuration
|
||||||
|
3. Example of mflash platform driver registration
|
||||||
|
|
||||||
|
1. Overview
|
||||||
|
|
||||||
|
Mflash and gflash are embedded flash drive. The only difference is mflash is
|
||||||
|
MCP(Multi Chip Package) device. These two device operate exactly same way.
|
||||||
|
So the rest mflash repersents mflash and gflash altogether.
|
||||||
|
|
||||||
|
Internally, mflash has nand flash and other hardware logics and supports
|
||||||
|
2 different operation (ATA, IO) modes. ATA mode doesn't need any new
|
||||||
|
driver and currently works well under standard IDE subsystem. Actually it's
|
||||||
|
one chip SSD. IO mode is ATA-like custom mode for the host that doesn't have
|
||||||
|
IDE interface.
|
||||||
|
|
||||||
|
Followings are brief descriptions about IO mode.
|
||||||
|
A. IO mode based on ATA protocol and uses some custom command. (read confirm,
|
||||||
|
write confirm)
|
||||||
|
B. IO mode uses SRAM bus interface.
|
||||||
|
C. IO mode supports 4kB boot area, so host can boot from mflash.
|
||||||
|
|
||||||
|
2. Reserved area configuration
|
||||||
|
If host boot from mflash, usually needs raw area for boot loader image. All of
|
||||||
|
the mflash's block device operation will be taken this value as start offset.
|
||||||
|
Note that boot loader's size of reserved area and kernel configuration value
|
||||||
|
must be same.
|
||||||
|
|
||||||
|
3. Example of mflash platform driver registration
|
||||||
|
Working mflash is very straight forward. Adding platform device stuff to board
|
||||||
|
configuration file is all. Here is some pseudo example.
|
||||||
|
|
||||||
|
static struct mg_drv_data mflash_drv_data = {
|
||||||
|
/* If you want to polling driver set to 1 */
|
||||||
|
.use_polling = 0,
|
||||||
|
/* device attribution */
|
||||||
|
.dev_attr = MG_BOOT_DEV
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct resource mg_mflash_rsc[] = {
|
||||||
|
/* Base address of mflash */
|
||||||
|
[0] = {
|
||||||
|
.start = 0x08000000,
|
||||||
|
.end = 0x08000000 + SZ_64K - 1,
|
||||||
|
.flags = IORESOURCE_MEM
|
||||||
|
},
|
||||||
|
/* mflash interrupt pin */
|
||||||
|
[1] = {
|
||||||
|
.start = IRQ_GPIO(84),
|
||||||
|
.end = IRQ_GPIO(84),
|
||||||
|
.flags = IORESOURCE_IRQ
|
||||||
|
},
|
||||||
|
/* mflash reset pin */
|
||||||
|
[2] = {
|
||||||
|
.start = 43,
|
||||||
|
.end = 43,
|
||||||
|
.name = MG_RST_PIN,
|
||||||
|
.flags = IORESOURCE_IO
|
||||||
|
},
|
||||||
|
/* mflash reset-out pin
|
||||||
|
* If you use mflash as storage device (i.e. other than MG_BOOT_DEV),
|
||||||
|
* should assign this */
|
||||||
|
[3] = {
|
||||||
|
.start = 51,
|
||||||
|
.end = 51,
|
||||||
|
.name = MG_RSTOUT_PIN,
|
||||||
|
.flags = IORESOURCE_IO
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device mflash_dev = {
|
||||||
|
.name = MG_DEV_NAME,
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &mflash_drv_data,
|
||||||
|
},
|
||||||
|
.num_resources = ARRAY_SIZE(mg_mflash_rsc),
|
||||||
|
.resource = mg_mflash_rsc
|
||||||
|
};
|
||||||
|
|
||||||
|
platform_device_register(&mflash_dev);
|
|
@ -30,3 +30,21 @@ The above steps create a new group g1 and move the current shell
|
||||||
process (bash) into it. CPU time consumed by this bash and its children
|
process (bash) into it. CPU time consumed by this bash and its children
|
||||||
can be obtained from g1/cpuacct.usage and the same is accumulated in
|
can be obtained from g1/cpuacct.usage and the same is accumulated in
|
||||||
/cgroups/cpuacct.usage also.
|
/cgroups/cpuacct.usage also.
|
||||||
|
|
||||||
|
cpuacct.stat file lists a few statistics which further divide the
|
||||||
|
CPU time obtained by the cgroup into user and system times. Currently
|
||||||
|
the following statistics are supported:
|
||||||
|
|
||||||
|
user: Time spent by tasks of the cgroup in user mode.
|
||||||
|
system: Time spent by tasks of the cgroup in kernel mode.
|
||||||
|
|
||||||
|
user and system are in USER_HZ unit.
|
||||||
|
|
||||||
|
cpuacct controller uses percpu_counter interface to collect user and
|
||||||
|
system times. This has two side effects:
|
||||||
|
|
||||||
|
- It is theoretically possible to see wrong values for user and system times.
|
||||||
|
This is because percpu_counter_read() on 32bit systems isn't safe
|
||||||
|
against concurrent writes.
|
||||||
|
- It is possible to see slightly outdated values for user and system times
|
||||||
|
due to the batch processing nature of percpu_counter.
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
|
|
||||||
Maintained by Alan Cox <device@lanana.org>
|
Maintained by Alan Cox <device@lanana.org>
|
||||||
|
|
||||||
Last revised: 29 November 2006
|
Last revised: 6th April 2009
|
||||||
|
|
||||||
This list is the Linux Device List, the official registry of allocated
|
This list is the Linux Device List, the official registry of allocated
|
||||||
device numbers and /dev directory nodes for the Linux operating
|
device numbers and /dev directory nodes for the Linux operating
|
||||||
|
@ -2797,6 +2797,10 @@ Your cooperation is appreciated.
|
||||||
206 = /dev/ttySC1 SC26xx serial port 1
|
206 = /dev/ttySC1 SC26xx serial port 1
|
||||||
207 = /dev/ttySC2 SC26xx serial port 2
|
207 = /dev/ttySC2 SC26xx serial port 2
|
||||||
208 = /dev/ttySC3 SC26xx serial port 3
|
208 = /dev/ttySC3 SC26xx serial port 3
|
||||||
|
209 = /dev/ttyMAX0 MAX3100 serial port 0
|
||||||
|
210 = /dev/ttyMAX1 MAX3100 serial port 1
|
||||||
|
211 = /dev/ttyMAX2 MAX3100 serial port 2
|
||||||
|
212 = /dev/ttyMAX3 MAX3100 serial port 3
|
||||||
|
|
||||||
205 char Low-density serial ports (alternate device)
|
205 char Low-density serial ports (alternate device)
|
||||||
0 = /dev/culu0 Callout device for ttyLU0
|
0 = /dev/culu0 Callout device for ttyLU0
|
||||||
|
|
|
@ -59,7 +59,8 @@ Accepted options:
|
||||||
ypan Enable display panning using the VESA protected mode
|
ypan Enable display panning using the VESA protected mode
|
||||||
interface. The visible screen is just a window of the
|
interface. The visible screen is just a window of the
|
||||||
video memory, console scrolling is done by changing the
|
video memory, console scrolling is done by changing the
|
||||||
start of the window. Available on x86 only.
|
start of the window. This option is available on x86
|
||||||
|
only and is the default option on that architecture.
|
||||||
|
|
||||||
ywrap Same as ypan, but assumes your gfx board can wrap-around
|
ywrap Same as ypan, but assumes your gfx board can wrap-around
|
||||||
the video memory (i.e. starts reading from top if it
|
the video memory (i.e. starts reading from top if it
|
||||||
|
@ -67,7 +68,7 @@ ywrap Same as ypan, but assumes your gfx board can wrap-around
|
||||||
Available on x86 only.
|
Available on x86 only.
|
||||||
|
|
||||||
redraw Scroll by redrawing the affected part of the screen, this
|
redraw Scroll by redrawing the affected part of the screen, this
|
||||||
is the safe (and slow) default.
|
is the default on non-x86.
|
||||||
|
|
||||||
(If you're using uvesafb as a module, the above three options are
|
(If you're using uvesafb as a module, the above three options are
|
||||||
used a parameter of the scroll option, e.g. scroll=ypan.)
|
used a parameter of the scroll option, e.g. scroll=ypan.)
|
||||||
|
@ -182,7 +183,7 @@ from the Video BIOS if you set pixclock to 0 in fb_var_screeninfo.
|
||||||
|
|
||||||
--
|
--
|
||||||
Michal Januszewski <spock@gentoo.org>
|
Michal Januszewski <spock@gentoo.org>
|
||||||
Last updated: 2007-06-16
|
Last updated: 2009-03-30
|
||||||
|
|
||||||
Documentation of the uvesafb options is loosely based on vesafb.txt.
|
Documentation of the uvesafb options is loosely based on vesafb.txt.
|
||||||
|
|
||||||
|
|
|
@ -354,7 +354,8 @@ Who: Krzysztof Piotr Oledzki <ole@ans.pl>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client()
|
What: i2c_attach_client(), i2c_detach_client(), i2c_driver->detach_client(),
|
||||||
|
i2c_adapter->client_register(), i2c_adapter->client_unregister
|
||||||
When: 2.6.30
|
When: 2.6.30
|
||||||
Check: i2c_attach_client i2c_detach_client
|
Check: i2c_attach_client i2c_detach_client
|
||||||
Why: Deprecated by the new (standard) device driver binding model. Use
|
Why: Deprecated by the new (standard) device driver binding model. Use
|
||||||
|
@ -427,3 +428,12 @@ Why: In 2.6.27, the semantics of /sys/bus/pci/slots was redefined to
|
||||||
After a reasonable transition period, we will remove the legacy
|
After a reasonable transition period, we will remove the legacy
|
||||||
fakephp interface.
|
fakephp interface.
|
||||||
Who: Alex Chiang <achiang@hp.com>
|
Who: Alex Chiang <achiang@hp.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
What: i2c-voodoo3 driver
|
||||||
|
When: October 2009
|
||||||
|
Why: Superseded by tdfxfb. I2C/DDC support used to live in a separate
|
||||||
|
driver but this caused driver conflicts.
|
||||||
|
Who: Jean Delvare <khali@linux-fr.org>
|
||||||
|
Krzysztof Helt <krzysztof.h1@wp.pl>
|
||||||
|
|
|
@ -68,6 +68,8 @@ ncpfs.txt
|
||||||
- info on Novell Netware(tm) filesystem using NCP protocol.
|
- info on Novell Netware(tm) filesystem using NCP protocol.
|
||||||
nfsroot.txt
|
nfsroot.txt
|
||||||
- short guide on setting up a diskless box with NFS root filesystem.
|
- short guide on setting up a diskless box with NFS root filesystem.
|
||||||
|
nilfs2.txt
|
||||||
|
- info and mount options for the NILFS2 filesystem.
|
||||||
ntfs.txt
|
ntfs.txt
|
||||||
- info and mount options for the NTFS filesystem (Windows NT).
|
- info and mount options for the NTFS filesystem (Windows NT).
|
||||||
ocfs2.txt
|
ocfs2.txt
|
||||||
|
|
159
Documentation/filesystems/knfsd-stats.txt
Normal file
159
Documentation/filesystems/knfsd-stats.txt
Normal file
|
@ -0,0 +1,159 @@
|
||||||
|
|
||||||
|
Kernel NFS Server Statistics
|
||||||
|
============================
|
||||||
|
|
||||||
|
This document describes the format and semantics of the statistics
|
||||||
|
which the kernel NFS server makes available to userspace. These
|
||||||
|
statistics are available in several text form pseudo files, each of
|
||||||
|
which is described separately below.
|
||||||
|
|
||||||
|
In most cases you don't need to know these formats, as the nfsstat(8)
|
||||||
|
program from the nfs-utils distribution provides a helpful command-line
|
||||||
|
interface for extracting and printing them.
|
||||||
|
|
||||||
|
All the files described here are formatted as a sequence of text lines,
|
||||||
|
separated by newline '\n' characters. Lines beginning with a hash
|
||||||
|
'#' character are comments intended for humans and should be ignored
|
||||||
|
by parsing routines. All other lines contain a sequence of fields
|
||||||
|
separated by whitespace.
|
||||||
|
|
||||||
|
/proc/fs/nfsd/pool_stats
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
This file is available in kernels from 2.6.30 onwards, if the
|
||||||
|
/proc/fs/nfsd filesystem is mounted (it almost always should be).
|
||||||
|
|
||||||
|
The first line is a comment which describes the fields present in
|
||||||
|
all the other lines. The other lines present the following data as
|
||||||
|
a sequence of unsigned decimal numeric fields. One line is shown
|
||||||
|
for each NFS thread pool.
|
||||||
|
|
||||||
|
All counters are 64 bits wide and wrap naturally. There is no way
|
||||||
|
to zero these counters, instead applications should do their own
|
||||||
|
rate conversion.
|
||||||
|
|
||||||
|
pool
|
||||||
|
The id number of the NFS thread pool to which this line applies.
|
||||||
|
This number does not change.
|
||||||
|
|
||||||
|
Thread pool ids are a contiguous set of small integers starting
|
||||||
|
at zero. The maximum value depends on the thread pool mode, but
|
||||||
|
currently cannot be larger than the number of CPUs in the system.
|
||||||
|
Note that in the default case there will be a single thread pool
|
||||||
|
which contains all the nfsd threads and all the CPUs in the system,
|
||||||
|
and thus this file will have a single line with a pool id of "0".
|
||||||
|
|
||||||
|
packets-arrived
|
||||||
|
Counts how many NFS packets have arrived. More precisely, this
|
||||||
|
is the number of times that the network stack has notified the
|
||||||
|
sunrpc server layer that new data may be available on a transport
|
||||||
|
(e.g. an NFS or UDP socket or an NFS/RDMA endpoint).
|
||||||
|
|
||||||
|
Depending on the NFS workload patterns and various network stack
|
||||||
|
effects (such as Large Receive Offload) which can combine packets
|
||||||
|
on the wire, this may be either more or less than the number
|
||||||
|
of NFS calls received (which statistic is available elsewhere).
|
||||||
|
However this is a more accurate and less workload-dependent measure
|
||||||
|
of how much CPU load is being placed on the sunrpc server layer
|
||||||
|
due to NFS network traffic.
|
||||||
|
|
||||||
|
sockets-enqueued
|
||||||
|
Counts how many times an NFS transport is enqueued to wait for
|
||||||
|
an nfsd thread to service it, i.e. no nfsd thread was considered
|
||||||
|
available.
|
||||||
|
|
||||||
|
The circumstance this statistic tracks indicates that there was NFS
|
||||||
|
network-facing work to be done but it couldn't be done immediately,
|
||||||
|
thus introducing a small delay in servicing NFS calls. The ideal
|
||||||
|
rate of change for this counter is zero; significantly non-zero
|
||||||
|
values may indicate a performance limitation.
|
||||||
|
|
||||||
|
This can happen either because there are too few nfsd threads in the
|
||||||
|
thread pool for the NFS workload (the workload is thread-limited),
|
||||||
|
or because the NFS workload needs more CPU time than is available in
|
||||||
|
the thread pool (the workload is CPU-limited). In the former case,
|
||||||
|
configuring more nfsd threads will probably improve the performance
|
||||||
|
of the NFS workload. In the latter case, the sunrpc server layer is
|
||||||
|
already choosing not to wake idle nfsd threads because there are too
|
||||||
|
many nfsd threads which want to run but cannot, so configuring more
|
||||||
|
nfsd threads will make no difference whatsoever. The overloads-avoided
|
||||||
|
statistic (see below) can be used to distinguish these cases.
|
||||||
|
|
||||||
|
threads-woken
|
||||||
|
Counts how many times an idle nfsd thread is woken to try to
|
||||||
|
receive some data from an NFS transport.
|
||||||
|
|
||||||
|
This statistic tracks the circumstance where incoming
|
||||||
|
network-facing NFS work is being handled quickly, which is a good
|
||||||
|
thing. The ideal rate of change for this counter will be close
|
||||||
|
to but less than the rate of change of the packets-arrived counter.
|
||||||
|
|
||||||
|
overloads-avoided
|
||||||
|
Counts how many times the sunrpc server layer chose not to wake an
|
||||||
|
nfsd thread, despite the presence of idle nfsd threads, because
|
||||||
|
too many nfsd threads had been recently woken but could not get
|
||||||
|
enough CPU time to actually run.
|
||||||
|
|
||||||
|
This statistic counts a circumstance where the sunrpc layer
|
||||||
|
heuristically avoids overloading the CPU scheduler with too many
|
||||||
|
runnable nfsd threads. The ideal rate of change for this counter
|
||||||
|
is zero. Significant non-zero values indicate that the workload
|
||||||
|
is CPU limited. Usually this is associated with heavy CPU usage
|
||||||
|
on all the CPUs in the nfsd thread pool.
|
||||||
|
|
||||||
|
If a sustained large overloads-avoided rate is detected on a pool,
|
||||||
|
the top(1) utility should be used to check for the following
|
||||||
|
pattern of CPU usage on all the CPUs associated with the given
|
||||||
|
nfsd thread pool.
|
||||||
|
|
||||||
|
- %us ~= 0 (as you're *NOT* running applications on your NFS server)
|
||||||
|
|
||||||
|
- %wa ~= 0
|
||||||
|
|
||||||
|
- %id ~= 0
|
||||||
|
|
||||||
|
- %sy + %hi + %si ~= 100
|
||||||
|
|
||||||
|
If this pattern is seen, configuring more nfsd threads will *not*
|
||||||
|
improve the performance of the workload. If this patten is not
|
||||||
|
seen, then something more subtle is wrong.
|
||||||
|
|
||||||
|
threads-timedout
|
||||||
|
Counts how many times an nfsd thread triggered an idle timeout,
|
||||||
|
i.e. was not woken to handle any incoming network packets for
|
||||||
|
some time.
|
||||||
|
|
||||||
|
This statistic counts a circumstance where there are more nfsd
|
||||||
|
threads configured than can be used by the NFS workload. This is
|
||||||
|
a clue that the number of nfsd threads can be reduced without
|
||||||
|
affecting performance. Unfortunately, it's only a clue and not
|
||||||
|
a strong indication, for a couple of reasons:
|
||||||
|
|
||||||
|
- Currently the rate at which the counter is incremented is quite
|
||||||
|
slow; the idle timeout is 60 minutes. Unless the NFS workload
|
||||||
|
remains constant for hours at a time, this counter is unlikely
|
||||||
|
to be providing information that is still useful.
|
||||||
|
|
||||||
|
- It is usually a wise policy to provide some slack,
|
||||||
|
i.e. configure a few more nfsds than are currently needed,
|
||||||
|
to allow for future spikes in load.
|
||||||
|
|
||||||
|
|
||||||
|
Note that incoming packets on NFS transports will be dealt with in
|
||||||
|
one of three ways. An nfsd thread can be woken (threads-woken counts
|
||||||
|
this case), or the transport can be enqueued for later attention
|
||||||
|
(sockets-enqueued counts this case), or the packet can be temporarily
|
||||||
|
deferred because the transport is currently being used by an nfsd
|
||||||
|
thread. This last case is not very interesting and is not explicitly
|
||||||
|
counted, but can be inferred from the other counters thus:
|
||||||
|
|
||||||
|
packets-deferred = packets-arrived - ( sockets-enqueued + threads-woken )
|
||||||
|
|
||||||
|
|
||||||
|
More
|
||||||
|
----
|
||||||
|
Descriptions of the other statistics file should go here.
|
||||||
|
|
||||||
|
|
||||||
|
Greg Banks <gnb@sgi.com>
|
||||||
|
26 Mar 2009
|
161
Documentation/filesystems/nfs41-server.txt
Normal file
161
Documentation/filesystems/nfs41-server.txt
Normal file
|
@ -0,0 +1,161 @@
|
||||||
|
NFSv4.1 Server Implementation
|
||||||
|
|
||||||
|
Server support for minorversion 1 can be controlled using the
|
||||||
|
/proc/fs/nfsd/versions control file. The string output returned
|
||||||
|
by reading this file will contain either "+4.1" or "-4.1"
|
||||||
|
correspondingly.
|
||||||
|
|
||||||
|
Currently, server support for minorversion 1 is disabled by default.
|
||||||
|
It can be enabled at run time by writing the string "+4.1" to
|
||||||
|
the /proc/fs/nfsd/versions control file. Note that to write this
|
||||||
|
control file, the nfsd service must be taken down. Use your user-mode
|
||||||
|
nfs-utils to set this up; see rpc.nfsd(8)
|
||||||
|
|
||||||
|
The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based
|
||||||
|
on the latest NFSv4.1 Internet Draft:
|
||||||
|
http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-29
|
||||||
|
|
||||||
|
From the many new features in NFSv4.1 the current implementation
|
||||||
|
focuses on the mandatory-to-implement NFSv4.1 Sessions, providing
|
||||||
|
"exactly once" semantics and better control and throttling of the
|
||||||
|
resources allocated for each client.
|
||||||
|
|
||||||
|
Other NFSv4.1 features, Parallel NFS operations in particular,
|
||||||
|
are still under development out of tree.
|
||||||
|
See http://wiki.linux-nfs.org/wiki/index.php/PNFS_prototype_design
|
||||||
|
for more information.
|
||||||
|
|
||||||
|
The table below, taken from the NFSv4.1 document, lists
|
||||||
|
the operations that are mandatory to implement (REQ), optional
|
||||||
|
(OPT), and NFSv4.0 operations that are required not to implement (MNI)
|
||||||
|
in minor version 1. The first column indicates the operations that
|
||||||
|
are not supported yet by the linux server implementation.
|
||||||
|
|
||||||
|
The OPTIONAL features identified and their abbreviations are as follows:
|
||||||
|
pNFS Parallel NFS
|
||||||
|
FDELG File Delegations
|
||||||
|
DDELG Directory Delegations
|
||||||
|
|
||||||
|
The following abbreviations indicate the linux server implementation status.
|
||||||
|
I Implemented NFSv4.1 operations.
|
||||||
|
NS Not Supported.
|
||||||
|
NS* unimplemented optional feature.
|
||||||
|
P pNFS features implemented out of tree.
|
||||||
|
PNS pNFS features that are not supported yet (out of tree).
|
||||||
|
|
||||||
|
Operations
|
||||||
|
|
||||||
|
+----------------------+------------+--------------+----------------+
|
||||||
|
| Operation | REQ, REC, | Feature | Definition |
|
||||||
|
| | OPT, or | (REQ, REC, | |
|
||||||
|
| | MNI | or OPT) | |
|
||||||
|
+----------------------+------------+--------------+----------------+
|
||||||
|
| ACCESS | REQ | | Section 18.1 |
|
||||||
|
NS | BACKCHANNEL_CTL | REQ | | Section 18.33 |
|
||||||
|
NS | BIND_CONN_TO_SESSION | REQ | | Section 18.34 |
|
||||||
|
| CLOSE | REQ | | Section 18.2 |
|
||||||
|
| COMMIT | REQ | | Section 18.3 |
|
||||||
|
| CREATE | REQ | | Section 18.4 |
|
||||||
|
I | CREATE_SESSION | REQ | | Section 18.36 |
|
||||||
|
NS*| DELEGPURGE | OPT | FDELG (REQ) | Section 18.5 |
|
||||||
|
| DELEGRETURN | OPT | FDELG, | Section 18.6 |
|
||||||
|
| | | DDELG, pNFS | |
|
||||||
|
| | | (REQ) | |
|
||||||
|
NS | DESTROY_CLIENTID | REQ | | Section 18.50 |
|
||||||
|
I | DESTROY_SESSION | REQ | | Section 18.37 |
|
||||||
|
I | EXCHANGE_ID | REQ | | Section 18.35 |
|
||||||
|
NS | FREE_STATEID | REQ | | Section 18.38 |
|
||||||
|
| GETATTR | REQ | | Section 18.7 |
|
||||||
|
P | GETDEVICEINFO | OPT | pNFS (REQ) | Section 18.40 |
|
||||||
|
P | GETDEVICELIST | OPT | pNFS (OPT) | Section 18.41 |
|
||||||
|
| GETFH | REQ | | Section 18.8 |
|
||||||
|
NS*| GET_DIR_DELEGATION | OPT | DDELG (REQ) | Section 18.39 |
|
||||||
|
P | LAYOUTCOMMIT | OPT | pNFS (REQ) | Section 18.42 |
|
||||||
|
P | LAYOUTGET | OPT | pNFS (REQ) | Section 18.43 |
|
||||||
|
P | LAYOUTRETURN | OPT | pNFS (REQ) | Section 18.44 |
|
||||||
|
| LINK | OPT | | Section 18.9 |
|
||||||
|
| LOCK | REQ | | Section 18.10 |
|
||||||
|
| LOCKT | REQ | | Section 18.11 |
|
||||||
|
| LOCKU | REQ | | Section 18.12 |
|
||||||
|
| LOOKUP | REQ | | Section 18.13 |
|
||||||
|
| LOOKUPP | REQ | | Section 18.14 |
|
||||||
|
| NVERIFY | REQ | | Section 18.15 |
|
||||||
|
| OPEN | REQ | | Section 18.16 |
|
||||||
|
NS*| OPENATTR | OPT | | Section 18.17 |
|
||||||
|
| OPEN_CONFIRM | MNI | | N/A |
|
||||||
|
| OPEN_DOWNGRADE | REQ | | Section 18.18 |
|
||||||
|
| PUTFH | REQ | | Section 18.19 |
|
||||||
|
| PUTPUBFH | REQ | | Section 18.20 |
|
||||||
|
| PUTROOTFH | REQ | | Section 18.21 |
|
||||||
|
| READ | REQ | | Section 18.22 |
|
||||||
|
| READDIR | REQ | | Section 18.23 |
|
||||||
|
| READLINK | OPT | | Section 18.24 |
|
||||||
|
NS | RECLAIM_COMPLETE | REQ | | Section 18.51 |
|
||||||
|
| RELEASE_LOCKOWNER | MNI | | N/A |
|
||||||
|
| REMOVE | REQ | | Section 18.25 |
|
||||||
|
| RENAME | REQ | | Section 18.26 |
|
||||||
|
| RENEW | MNI | | N/A |
|
||||||
|
| RESTOREFH | REQ | | Section 18.27 |
|
||||||
|
| SAVEFH | REQ | | Section 18.28 |
|
||||||
|
| SECINFO | REQ | | Section 18.29 |
|
||||||
|
NS | SECINFO_NO_NAME | REC | pNFS files | Section 18.45, |
|
||||||
|
| | | layout (REQ) | Section 13.12 |
|
||||||
|
I | SEQUENCE | REQ | | Section 18.46 |
|
||||||
|
| SETATTR | REQ | | Section 18.30 |
|
||||||
|
| SETCLIENTID | MNI | | N/A |
|
||||||
|
| SETCLIENTID_CONFIRM | MNI | | N/A |
|
||||||
|
NS | SET_SSV | REQ | | Section 18.47 |
|
||||||
|
NS | TEST_STATEID | REQ | | Section 18.48 |
|
||||||
|
| VERIFY | REQ | | Section 18.31 |
|
||||||
|
NS*| WANT_DELEGATION | OPT | FDELG (OPT) | Section 18.49 |
|
||||||
|
| WRITE | REQ | | Section 18.32 |
|
||||||
|
|
||||||
|
Callback Operations
|
||||||
|
|
||||||
|
+-------------------------+-----------+-------------+---------------+
|
||||||
|
| Operation | REQ, REC, | Feature | Definition |
|
||||||
|
| | OPT, or | (REQ, REC, | |
|
||||||
|
| | MNI | or OPT) | |
|
||||||
|
+-------------------------+-----------+-------------+---------------+
|
||||||
|
| CB_GETATTR | OPT | FDELG (REQ) | Section 20.1 |
|
||||||
|
P | CB_LAYOUTRECALL | OPT | pNFS (REQ) | Section 20.3 |
|
||||||
|
NS*| CB_NOTIFY | OPT | DDELG (REQ) | Section 20.4 |
|
||||||
|
P | CB_NOTIFY_DEVICEID | OPT | pNFS (OPT) | Section 20.12 |
|
||||||
|
NS*| CB_NOTIFY_LOCK | OPT | | Section 20.11 |
|
||||||
|
NS*| CB_PUSH_DELEG | OPT | FDELG (OPT) | Section 20.5 |
|
||||||
|
| CB_RECALL | OPT | FDELG, | Section 20.2 |
|
||||||
|
| | | DDELG, pNFS | |
|
||||||
|
| | | (REQ) | |
|
||||||
|
NS*| CB_RECALL_ANY | OPT | FDELG, | Section 20.6 |
|
||||||
|
| | | DDELG, pNFS | |
|
||||||
|
| | | (REQ) | |
|
||||||
|
NS | CB_RECALL_SLOT | REQ | | Section 20.8 |
|
||||||
|
NS*| CB_RECALLABLE_OBJ_AVAIL | OPT | DDELG, pNFS | Section 20.7 |
|
||||||
|
| | | (REQ) | |
|
||||||
|
I | CB_SEQUENCE | OPT | FDELG, | Section 20.9 |
|
||||||
|
| | | DDELG, pNFS | |
|
||||||
|
| | | (REQ) | |
|
||||||
|
NS*| CB_WANTS_CANCELLED | OPT | FDELG, | Section 20.10 |
|
||||||
|
| | | DDELG, pNFS | |
|
||||||
|
| | | (REQ) | |
|
||||||
|
+-------------------------+-----------+-------------+---------------+
|
||||||
|
|
||||||
|
Implementation notes:
|
||||||
|
|
||||||
|
EXCHANGE_ID:
|
||||||
|
* only SP4_NONE state protection supported
|
||||||
|
* implementation ids are ignored
|
||||||
|
|
||||||
|
CREATE_SESSION:
|
||||||
|
* backchannel attributes are ignored
|
||||||
|
* backchannel security parameters are ignored
|
||||||
|
|
||||||
|
SEQUENCE:
|
||||||
|
* no support for dynamic slot table renegotiation (optional)
|
||||||
|
|
||||||
|
nfsv4.1 COMPOUND rules:
|
||||||
|
The following cases aren't supported yet:
|
||||||
|
* Enforcing of NFS4ERR_NOT_ONLY_OP for: BIND_CONN_TO_SESSION, CREATE_SESSION,
|
||||||
|
DESTROY_CLIENTID, DESTROY_SESSION, EXCHANGE_ID.
|
||||||
|
* DESTROY_SESSION MUST be the final operation in the COMPOUND request.
|
||||||
|
|
200
Documentation/filesystems/nilfs2.txt
Normal file
200
Documentation/filesystems/nilfs2.txt
Normal file
|
@ -0,0 +1,200 @@
|
||||||
|
NILFS2
|
||||||
|
------
|
||||||
|
|
||||||
|
NILFS2 is a log-structured file system (LFS) supporting continuous
|
||||||
|
snapshotting. In addition to versioning capability of the entire file
|
||||||
|
system, users can even restore files mistakenly overwritten or
|
||||||
|
destroyed just a few seconds ago. Since NILFS2 can keep consistency
|
||||||
|
like conventional LFS, it achieves quick recovery after system
|
||||||
|
crashes.
|
||||||
|
|
||||||
|
NILFS2 creates a number of checkpoints every few seconds or per
|
||||||
|
synchronous write basis (unless there is no change). Users can select
|
||||||
|
significant versions among continuously created checkpoints, and can
|
||||||
|
change them into snapshots which will be preserved until they are
|
||||||
|
changed back to checkpoints.
|
||||||
|
|
||||||
|
There is no limit on the number of snapshots until the volume gets
|
||||||
|
full. Each snapshot is mountable as a read-only file system
|
||||||
|
concurrently with its writable mount, and this feature is convenient
|
||||||
|
for online backup.
|
||||||
|
|
||||||
|
The userland tools are included in nilfs-utils package, which is
|
||||||
|
available from the following download page. At least "mkfs.nilfs2",
|
||||||
|
"mount.nilfs2", "umount.nilfs2", and "nilfs_cleanerd" (so called
|
||||||
|
cleaner or garbage collector) are required. Details on the tools are
|
||||||
|
described in the man pages included in the package.
|
||||||
|
|
||||||
|
Project web page: http://www.nilfs.org/en/
|
||||||
|
Download page: http://www.nilfs.org/en/download.html
|
||||||
|
Git tree web page: http://www.nilfs.org/git/
|
||||||
|
NILFS mailing lists: http://www.nilfs.org/mailman/listinfo/users
|
||||||
|
|
||||||
|
Caveats
|
||||||
|
=======
|
||||||
|
|
||||||
|
Features which NILFS2 does not support yet:
|
||||||
|
|
||||||
|
- atime
|
||||||
|
- extended attributes
|
||||||
|
- POSIX ACLs
|
||||||
|
- quotas
|
||||||
|
- writable snapshots
|
||||||
|
- remote backup (CDP)
|
||||||
|
- data integrity
|
||||||
|
- defragmentation
|
||||||
|
|
||||||
|
Mount options
|
||||||
|
=============
|
||||||
|
|
||||||
|
NILFS2 supports the following mount options:
|
||||||
|
(*) == default
|
||||||
|
|
||||||
|
barrier=on(*) This enables/disables barriers. barrier=off disables
|
||||||
|
it, barrier=on enables it.
|
||||||
|
errors=continue(*) Keep going on a filesystem error.
|
||||||
|
errors=remount-ro Remount the filesystem read-only on an error.
|
||||||
|
errors=panic Panic and halt the machine if an error occurs.
|
||||||
|
cp=n Specify the checkpoint-number of the snapshot to be
|
||||||
|
mounted. Checkpoints and snapshots are listed by lscp
|
||||||
|
user command. Only the checkpoints marked as snapshot
|
||||||
|
are mountable with this option. Snapshot is read-only,
|
||||||
|
so a read-only mount option must be specified together.
|
||||||
|
order=relaxed(*) Apply relaxed order semantics that allows modified data
|
||||||
|
blocks to be written to disk without making a
|
||||||
|
checkpoint if no metadata update is going. This mode
|
||||||
|
is equivalent to the ordered data mode of the ext3
|
||||||
|
filesystem except for the updates on data blocks still
|
||||||
|
conserve atomicity. This will improve synchronous
|
||||||
|
write performance for overwriting.
|
||||||
|
order=strict Apply strict in-order semantics that preserves sequence
|
||||||
|
of all file operations including overwriting of data
|
||||||
|
blocks. That means, it is guaranteed that no
|
||||||
|
overtaking of events occurs in the recovered file
|
||||||
|
system after a crash.
|
||||||
|
|
||||||
|
NILFS2 usage
|
||||||
|
============
|
||||||
|
|
||||||
|
To use nilfs2 as a local file system, simply:
|
||||||
|
|
||||||
|
# mkfs -t nilfs2 /dev/block_device
|
||||||
|
# mount -t nilfs2 /dev/block_device /dir
|
||||||
|
|
||||||
|
This will also invoke the cleaner through the mount helper program
|
||||||
|
(mount.nilfs2).
|
||||||
|
|
||||||
|
Checkpoints and snapshots are managed by the following commands.
|
||||||
|
Their manpages are included in the nilfs-utils package above.
|
||||||
|
|
||||||
|
lscp list checkpoints or snapshots.
|
||||||
|
mkcp make a checkpoint or a snapshot.
|
||||||
|
chcp change an existing checkpoint to a snapshot or vice versa.
|
||||||
|
rmcp invalidate specified checkpoint(s).
|
||||||
|
|
||||||
|
To mount a snapshot,
|
||||||
|
|
||||||
|
# mount -t nilfs2 -r -o cp=<cno> /dev/block_device /snap_dir
|
||||||
|
|
||||||
|
where <cno> is the checkpoint number of the snapshot.
|
||||||
|
|
||||||
|
To unmount the NILFS2 mount point or snapshot, simply:
|
||||||
|
|
||||||
|
# umount /dir
|
||||||
|
|
||||||
|
Then, the cleaner daemon is automatically shut down by the umount
|
||||||
|
helper program (umount.nilfs2).
|
||||||
|
|
||||||
|
Disk format
|
||||||
|
===========
|
||||||
|
|
||||||
|
A nilfs2 volume is equally divided into a number of segments except
|
||||||
|
for the super block (SB) and segment #0. A segment is the container
|
||||||
|
of logs. Each log is composed of summary information blocks, payload
|
||||||
|
blocks, and an optional super root block (SR):
|
||||||
|
|
||||||
|
______________________________________________________
|
||||||
|
| |SB| | Segment | Segment | Segment | ... | Segment | |
|
||||||
|
|_|__|_|____0____|____1____|____2____|_____|____N____|_|
|
||||||
|
0 +1K +4K +8M +16M +24M +(8MB x N)
|
||||||
|
. . (Typical offsets for 4KB-block)
|
||||||
|
. .
|
||||||
|
.______________________.
|
||||||
|
| log | log |... | log |
|
||||||
|
|__1__|__2__|____|__m__|
|
||||||
|
. .
|
||||||
|
. .
|
||||||
|
. .
|
||||||
|
.______________________________.
|
||||||
|
| Summary | Payload blocks |SR|
|
||||||
|
|_blocks__|_________________|__|
|
||||||
|
|
||||||
|
The payload blocks are organized per file, and each file consists of
|
||||||
|
data blocks and B-tree node blocks:
|
||||||
|
|
||||||
|
|<--- File-A --->|<--- File-B --->|
|
||||||
|
_______________________________________________________________
|
||||||
|
| Data blocks | B-tree blocks | Data blocks | B-tree blocks | ...
|
||||||
|
_|_____________|_______________|_____________|_______________|_
|
||||||
|
|
||||||
|
|
||||||
|
Since only the modified blocks are written in the log, it may have
|
||||||
|
files without data blocks or B-tree node blocks.
|
||||||
|
|
||||||
|
The organization of the blocks is recorded in the summary information
|
||||||
|
blocks, which contains a header structure (nilfs_segment_summary), per
|
||||||
|
file structures (nilfs_finfo), and per block structures (nilfs_binfo):
|
||||||
|
|
||||||
|
_________________________________________________________________________
|
||||||
|
| Summary | finfo | binfo | ... | binfo | finfo | binfo | ... | binfo |...
|
||||||
|
|_blocks__|___A___|_(A,1)_|_____|(A,Na)_|___B___|_(B,1)_|_____|(B,Nb)_|___
|
||||||
|
|
||||||
|
|
||||||
|
The logs include regular files, directory files, symbolic link files
|
||||||
|
and several meta data files. The mata data files are the files used
|
||||||
|
to maintain file system meta data. The current version of NILFS2 uses
|
||||||
|
the following meta data files:
|
||||||
|
|
||||||
|
1) Inode file (ifile) -- Stores on-disk inodes
|
||||||
|
2) Checkpoint file (cpfile) -- Stores checkpoints
|
||||||
|
3) Segment usage file (sufile) -- Stores allocation state of segments
|
||||||
|
4) Data address translation file -- Maps virtual block numbers to usual
|
||||||
|
(DAT) block numbers. This file serves to
|
||||||
|
make on-disk blocks relocatable.
|
||||||
|
|
||||||
|
The following figure shows a typical organization of the logs:
|
||||||
|
|
||||||
|
_________________________________________________________________________
|
||||||
|
| Summary | regular file | file | ... | ifile | cpfile | sufile | DAT |SR|
|
||||||
|
|_blocks__|_or_directory_|_______|_____|_______|________|________|_____|__|
|
||||||
|
|
||||||
|
|
||||||
|
To stride over segment boundaries, this sequence of files may be split
|
||||||
|
into multiple logs. The sequence of logs that should be treated as
|
||||||
|
logically one log, is delimited with flags marked in the segment
|
||||||
|
summary. The recovery code of nilfs2 looks this boundary information
|
||||||
|
to ensure atomicity of updates.
|
||||||
|
|
||||||
|
The super root block is inserted for every checkpoints. It includes
|
||||||
|
three special inodes, inodes for the DAT, cpfile, and sufile. Inodes
|
||||||
|
of regular files, directories, symlinks and other special files, are
|
||||||
|
included in the ifile. The inode of ifile itself is included in the
|
||||||
|
corresponding checkpoint entry in the cpfile. Thus, the hierarchy
|
||||||
|
among NILFS2 files can be depicted as follows:
|
||||||
|
|
||||||
|
Super block (SB)
|
||||||
|
|
|
||||||
|
v
|
||||||
|
Super root block (the latest cno=xx)
|
||||||
|
|-- DAT
|
||||||
|
|-- sufile
|
||||||
|
`-- cpfile
|
||||||
|
|-- ifile (cno=c1)
|
||||||
|
|-- ifile (cno=c2) ---- file (ino=i1)
|
||||||
|
: : |-- file (ino=i2)
|
||||||
|
`-- ifile (cno=xx) |-- file (ino=i3)
|
||||||
|
: :
|
||||||
|
`-- file (ino=yy)
|
||||||
|
( regular file, directory, or symlink )
|
||||||
|
|
||||||
|
For detail on the format of each file, please see include/linux/nilfs2_fs.h.
|
36
Documentation/hwmon/g760a
Normal file
36
Documentation/hwmon/g760a
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
Kernel driver g760a
|
||||||
|
===================
|
||||||
|
|
||||||
|
Supported chips:
|
||||||
|
* Global Mixed-mode Technology Inc. G760A
|
||||||
|
Prefix: 'g760a'
|
||||||
|
Datasheet: Publicly available at the GMT website
|
||||||
|
http://www.gmt.com.tw/datasheet/g760a.pdf
|
||||||
|
|
||||||
|
Author: Herbert Valerio Riedel <hvr@gnu.org>
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The GMT G760A Fan Speed PWM Controller is connected directly to a fan
|
||||||
|
and performs closed-loop control of the fan speed.
|
||||||
|
|
||||||
|
The fan speed is programmed by setting the period via 'pwm1' of two
|
||||||
|
consecutive speed pulses. The period is defined in terms of clock
|
||||||
|
cycle counts of an assumed 32kHz clock source.
|
||||||
|
|
||||||
|
Setting a period of 0 stops the fan; setting the period to 255 sets
|
||||||
|
fan to maximum speed.
|
||||||
|
|
||||||
|
The measured fan rotation speed returned via 'fan1_input' is derived
|
||||||
|
from the measured speed pulse period by assuming again a 32kHz clock
|
||||||
|
source and a 2 pulse-per-revolution fan.
|
||||||
|
|
||||||
|
The 'alarms' file provides access to the two alarm bits provided by
|
||||||
|
the G760A chip's status register: Bit 0 is set when the actual fan
|
||||||
|
speed differs more than 20% with respect to the programmed fan speed;
|
||||||
|
bit 1 is set when fan speed is below 1920 RPM.
|
||||||
|
|
||||||
|
The g760a driver will not update its values more frequently than every
|
||||||
|
other second; reading them more often will do no harm, but will return
|
||||||
|
'old' values.
|
|
@ -24,6 +24,49 @@ Partitions and P_Keys
|
||||||
The P_Key for any interface is given by the "pkey" file, and the
|
The P_Key for any interface is given by the "pkey" file, and the
|
||||||
main interface for a subinterface is in "parent."
|
main interface for a subinterface is in "parent."
|
||||||
|
|
||||||
|
Datagram vs Connected modes
|
||||||
|
|
||||||
|
The IPoIB driver supports two modes of operation: datagram and
|
||||||
|
connected. The mode is set and read through an interface's
|
||||||
|
/sys/class/net/<intf name>/mode file.
|
||||||
|
|
||||||
|
In datagram mode, the IB UD (Unreliable Datagram) transport is used
|
||||||
|
and so the interface MTU has is equal to the IB L2 MTU minus the
|
||||||
|
IPoIB encapsulation header (4 bytes). For example, in a typical IB
|
||||||
|
fabric with a 2K MTU, the IPoIB MTU will be 2048 - 4 = 2044 bytes.
|
||||||
|
|
||||||
|
In connected mode, the IB RC (Reliable Connected) transport is used.
|
||||||
|
Connected mode is to takes advantage of the connected nature of the
|
||||||
|
IB transport and allows an MTU up to the maximal IP packet size of
|
||||||
|
64K, which reduces the number of IP packets needed for handling
|
||||||
|
large UDP datagrams, TCP segments, etc and increases the performance
|
||||||
|
for large messages.
|
||||||
|
|
||||||
|
In connected mode, the interface's UD QP is still used for multicast
|
||||||
|
and communication with peers that don't support connected mode. In
|
||||||
|
this case, RX emulation of ICMP PMTU packets is used to cause the
|
||||||
|
networking stack to use the smaller UD MTU for these neighbours.
|
||||||
|
|
||||||
|
Stateless offloads
|
||||||
|
|
||||||
|
If the IB HW supports IPoIB stateless offloads, IPoIB advertises
|
||||||
|
TCP/IP checksum and/or Large Send (LSO) offloading capability to the
|
||||||
|
network stack.
|
||||||
|
|
||||||
|
Large Receive (LRO) offloading is also implemented and may be turned
|
||||||
|
on/off using ethtool calls. Currently LRO is supported only for
|
||||||
|
checksum offload capable devices.
|
||||||
|
|
||||||
|
Stateless offloads are supported only in datagram mode.
|
||||||
|
|
||||||
|
Interrupt moderation
|
||||||
|
|
||||||
|
If the underlying IB device supports CQ event moderation, one can
|
||||||
|
use ethtool to set interrupt mitigation parameters and thus reduce
|
||||||
|
the overhead incurred by handling interrupts. The main code path of
|
||||||
|
IPoIB doesn't use events for TX completion signaling so only RX
|
||||||
|
moderation is supported.
|
||||||
|
|
||||||
Debugging Information
|
Debugging Information
|
||||||
|
|
||||||
By compiling the IPoIB driver with CONFIG_INFINIBAND_IPOIB_DEBUG set
|
By compiling the IPoIB driver with CONFIG_INFINIBAND_IPOIB_DEBUG set
|
||||||
|
@ -55,3 +98,5 @@ References
|
||||||
http://ietf.org/rfc/rfc4391.txt
|
http://ietf.org/rfc/rfc4391.txt
|
||||||
IP over InfiniBand (IPoIB) Architecture (RFC 4392)
|
IP over InfiniBand (IPoIB) Architecture (RFC 4392)
|
||||||
http://ietf.org/rfc/rfc4392.txt
|
http://ietf.org/rfc/rfc4392.txt
|
||||||
|
IP over InfiniBand: Connected Mode (RFC 4755)
|
||||||
|
http://ietf.org/rfc/rfc4755.txt
|
||||||
|
|
101
Documentation/input/rotary-encoder.txt
Normal file
101
Documentation/input/rotary-encoder.txt
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
rotary-encoder - a generic driver for GPIO connected devices
|
||||||
|
Daniel Mack <daniel@caiaq.de>, Feb 2009
|
||||||
|
|
||||||
|
0. Function
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Rotary encoders are devices which are connected to the CPU or other
|
||||||
|
peripherals with two wires. The outputs are phase-shifted by 90 degrees
|
||||||
|
and by triggering on falling and rising edges, the turn direction can
|
||||||
|
be determined.
|
||||||
|
|
||||||
|
The phase diagram of these two outputs look like this:
|
||||||
|
|
||||||
|
_____ _____ _____
|
||||||
|
| | | | | |
|
||||||
|
Channel A ____| |_____| |_____| |____
|
||||||
|
|
||||||
|
: : : : : : : : : : : :
|
||||||
|
__ _____ _____ _____
|
||||||
|
| | | | | | |
|
||||||
|
Channel B |_____| |_____| |_____| |__
|
||||||
|
|
||||||
|
: : : : : : : : : : : :
|
||||||
|
Event a b c d a b c d a b c d
|
||||||
|
|
||||||
|
|<-------->|
|
||||||
|
one step
|
||||||
|
|
||||||
|
|
||||||
|
For more information, please see
|
||||||
|
http://en.wikipedia.org/wiki/Rotary_encoder
|
||||||
|
|
||||||
|
|
||||||
|
1. Events / state machine
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
a) Rising edge on channel A, channel B in low state
|
||||||
|
This state is used to recognize a clockwise turn
|
||||||
|
|
||||||
|
b) Rising edge on channel B, channel A in high state
|
||||||
|
When entering this state, the encoder is put into 'armed' state,
|
||||||
|
meaning that there it has seen half the way of a one-step transition.
|
||||||
|
|
||||||
|
c) Falling edge on channel A, channel B in high state
|
||||||
|
This state is used to recognize a counter-clockwise turn
|
||||||
|
|
||||||
|
d) Falling edge on channel B, channel A in low state
|
||||||
|
Parking position. If the encoder enters this state, a full transition
|
||||||
|
should have happend, unless it flipped back on half the way. The
|
||||||
|
'armed' state tells us about that.
|
||||||
|
|
||||||
|
2. Platform requirements
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
As there is no hardware dependent call in this driver, the platform it is
|
||||||
|
used with must support gpiolib. Another requirement is that IRQs must be
|
||||||
|
able to fire on both edges.
|
||||||
|
|
||||||
|
|
||||||
|
3. Board integration
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
To use this driver in your system, register a platform_device with the
|
||||||
|
name 'rotary-encoder' and associate the IRQs and some specific platform
|
||||||
|
data with it.
|
||||||
|
|
||||||
|
struct rotary_encoder_platform_data is declared in
|
||||||
|
include/linux/rotary-encoder.h and needs to be filled with the number of
|
||||||
|
steps the encoder has and can carry information about externally inverted
|
||||||
|
signals (because of used invertig buffer or other reasons).
|
||||||
|
|
||||||
|
Because GPIO to IRQ mapping is platform specific, this information must
|
||||||
|
be given in seperately to the driver. See the example below.
|
||||||
|
|
||||||
|
---------<snip>---------
|
||||||
|
|
||||||
|
/* board support file example */
|
||||||
|
|
||||||
|
#include <linux/input.h>
|
||||||
|
#include <linux/rotary_encoder.h>
|
||||||
|
|
||||||
|
#define GPIO_ROTARY_A 1
|
||||||
|
#define GPIO_ROTARY_B 2
|
||||||
|
|
||||||
|
static struct rotary_encoder_platform_data my_rotary_encoder_info = {
|
||||||
|
.steps = 24,
|
||||||
|
.axis = ABS_X,
|
||||||
|
.gpio_a = GPIO_ROTARY_A,
|
||||||
|
.gpio_b = GPIO_ROTARY_B,
|
||||||
|
.inverted_a = 0,
|
||||||
|
.inverted_b = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device rotary_encoder_device = {
|
||||||
|
.name = "rotary-encoder",
|
||||||
|
.id = 0,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &my_rotary_encoder_info,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
|
@ -61,24 +61,28 @@ GigaSet 307x Device Driver
|
||||||
---------------------
|
---------------------
|
||||||
2.1. Modules
|
2.1. Modules
|
||||||
-------
|
-------
|
||||||
To get the device working, you have to load the proper kernel module. You
|
For the devices to work, the proper kernel modules have to be loaded.
|
||||||
can do this using
|
This normally happens automatically when the system detects the USB
|
||||||
modprobe modulename
|
device (base, M105) or when the line discipline is attached (M101). It
|
||||||
where modulename is ser_gigaset (M101), usb_gigaset (M105), or
|
can also be triggered manually using the modprobe(8) command, for example
|
||||||
bas_gigaset (direct USB connection to the base).
|
for troubleshooting or to pass module parameters.
|
||||||
|
|
||||||
The module ser_gigaset provides a serial line discipline N_GIGASET_M101
|
The module ser_gigaset provides a serial line discipline N_GIGASET_M101
|
||||||
which drives the device through the regular serial line driver. To use it,
|
which drives the device through the regular serial line driver. It must
|
||||||
run the Gigaset M101 daemon "gigasetm101d" (also available from
|
be attached to the serial line to which the M101 is connected with the
|
||||||
http://sourceforge.net/projects/gigaset307x/) with the device file of the
|
ldattach(8) command (requires util-linux-ng release 2.14 or later), for
|
||||||
RS232 port to the M101 as an argument, for example:
|
example:
|
||||||
gigasetm101d /dev/ttyS1
|
ldattach GIGASET_M101 /dev/ttyS1
|
||||||
This will open the device file, set its line discipline to N_GIGASET_M101,
|
This will open the device file, attach the line discipline to it, and
|
||||||
and then sleep in the background, keeping the device open so that the
|
then sleep in the background, keeping the device open so that the line
|
||||||
line discipline remains active. To deactivate it, kill the daemon, for
|
discipline remains active. To deactivate it, kill the daemon, for example
|
||||||
example with
|
with
|
||||||
killall gigasetm101d
|
killall ldattach
|
||||||
before disconnecting the device.
|
before disconnecting the device. To have this happen automatically at
|
||||||
|
system startup/shutdown on an LSB compatible system, create and activate
|
||||||
|
an appropriate LSB startup script /etc/init.d/gigaset. (The init name
|
||||||
|
'gigaset' is officially assigned to this project by LANANA.)
|
||||||
|
Alternatively, just add the 'ldattach' command line to /etc/rc.local.
|
||||||
|
|
||||||
2.2. Device nodes for user space programs
|
2.2. Device nodes for user space programs
|
||||||
------------------------------------
|
------------------------------------
|
||||||
|
@ -194,10 +198,11 @@ GigaSet 307x Device Driver
|
||||||
operation (for wireless access to the base), but are needed for access
|
operation (for wireless access to the base), but are needed for access
|
||||||
to the M105's own configuration mode (registration to the base, baudrate
|
to the M105's own configuration mode (registration to the base, baudrate
|
||||||
and line format settings, device status queries) via the gigacontr
|
and line format settings, device status queries) via the gigacontr
|
||||||
utility. Their use is disabled in the driver by default for safety
|
utility. Their use is controlled by the kernel configuration option
|
||||||
reasons but can be enabled by setting the kernel configuration option
|
"Support for undocumented USB requests" (CONFIG_GIGASET_UNDOCREQ). If you
|
||||||
"Support for undocumented USB requests" (GIGASET_UNDOCREQ) to "Y" and
|
encounter error code -ENOTTY when trying to use some features of the
|
||||||
recompiling.
|
M105, try setting that option to "y" via 'make {x,menu}config' and
|
||||||
|
recompiling the driver.
|
||||||
|
|
||||||
|
|
||||||
3. Troubleshooting
|
3. Troubleshooting
|
||||||
|
@ -228,6 +233,13 @@ GigaSet 307x Device Driver
|
||||||
Solution:
|
Solution:
|
||||||
Select Unimodem mode for all DECT data adapters. (see section 2.4.)
|
Select Unimodem mode for all DECT data adapters. (see section 2.4.)
|
||||||
|
|
||||||
|
Problem:
|
||||||
|
You want to configure your USB DECT data adapter (M105) but gigacontr
|
||||||
|
reports an error: "/dev/ttyGU0: Inappropriate ioctl for device".
|
||||||
|
Solution:
|
||||||
|
Recompile the usb_gigaset driver with the kernel configuration option
|
||||||
|
CONFIG_GIGASET_UNDOCREQ set to 'y'. (see section 2.6.)
|
||||||
|
|
||||||
3.2. Telling the driver to provide more information
|
3.2. Telling the driver to provide more information
|
||||||
----------------------------------------------
|
----------------------------------------------
|
||||||
Building the driver with the "Gigaset debugging" kernel configuration
|
Building the driver with the "Gigaset debugging" kernel configuration
|
||||||
|
|
|
@ -40,10 +40,16 @@ This document describes the Linux kernel Makefiles.
|
||||||
--- 6.7 Custom kbuild commands
|
--- 6.7 Custom kbuild commands
|
||||||
--- 6.8 Preprocessing linker scripts
|
--- 6.8 Preprocessing linker scripts
|
||||||
|
|
||||||
=== 7 Kbuild Variables
|
=== 7 Kbuild syntax for exported headers
|
||||||
=== 8 Makefile language
|
--- 7.1 header-y
|
||||||
=== 9 Credits
|
--- 7.2 objhdr-y
|
||||||
=== 10 TODO
|
--- 7.3 destination-y
|
||||||
|
--- 7.4 unifdef-y (deprecated)
|
||||||
|
|
||||||
|
=== 8 Kbuild Variables
|
||||||
|
=== 9 Makefile language
|
||||||
|
=== 10 Credits
|
||||||
|
=== 11 TODO
|
||||||
|
|
||||||
=== 1 Overview
|
=== 1 Overview
|
||||||
|
|
||||||
|
@ -1143,8 +1149,69 @@ When kbuild executes, the following steps are followed (roughly):
|
||||||
The kbuild infrastructure for *lds file are used in several
|
The kbuild infrastructure for *lds file are used in several
|
||||||
architecture-specific files.
|
architecture-specific files.
|
||||||
|
|
||||||
|
=== 7 Kbuild syntax for exported headers
|
||||||
|
|
||||||
=== 7 Kbuild Variables
|
The kernel include a set of headers that is exported to userspace.
|
||||||
|
Many headers can be exported as-is but other headers requires a
|
||||||
|
minimal pre-processing before they are ready for user-space.
|
||||||
|
The pre-processing does:
|
||||||
|
- drop kernel specific annotations
|
||||||
|
- drop include of compiler.h
|
||||||
|
- drop all sections that is kernel internat (guarded by ifdef __KERNEL__)
|
||||||
|
|
||||||
|
Each relevant directory contain a file name "Kbuild" which specify the
|
||||||
|
headers to be exported.
|
||||||
|
See subsequent chapter for the syntax of the Kbuild file.
|
||||||
|
|
||||||
|
--- 7.1 header-y
|
||||||
|
|
||||||
|
header-y specify header files to be exported.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
#include/linux/Kbuild
|
||||||
|
header-y += usb/
|
||||||
|
header-y += aio_abi.h
|
||||||
|
|
||||||
|
The convention is to list one file per line and
|
||||||
|
preferably in alphabetic order.
|
||||||
|
|
||||||
|
header-y also specify which subdirectories to visit.
|
||||||
|
A subdirectory is identified by a trailing '/' which
|
||||||
|
can be seen in the example above for the usb subdirectory.
|
||||||
|
|
||||||
|
Subdirectories are visited before their parent directories.
|
||||||
|
|
||||||
|
--- 7.2 objhdr-y
|
||||||
|
|
||||||
|
objhdr-y specifies generated files to be exported.
|
||||||
|
Generated files are special as they need to be looked
|
||||||
|
up in another directory when doing 'make O=...' builds.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
#include/linux/Kbuild
|
||||||
|
objhdr-y += version.h
|
||||||
|
|
||||||
|
--- 7.3 destination-y
|
||||||
|
|
||||||
|
When an architecture have a set of exported headers that needs to be
|
||||||
|
exported to a different directory destination-y is used.
|
||||||
|
destination-y specify the destination directory for all exported
|
||||||
|
headers in the file where it is present.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
#arch/xtensa/platforms/s6105/include/platform/Kbuild
|
||||||
|
destination-y := include/linux
|
||||||
|
|
||||||
|
In the example above all exported headers in the Kbuild file
|
||||||
|
will be located in the directory "include/linux" when exported.
|
||||||
|
|
||||||
|
|
||||||
|
--- 7.4 unifdef-y (deprecated)
|
||||||
|
|
||||||
|
unifdef-y is deprecated. A direct replacement is header-y.
|
||||||
|
|
||||||
|
|
||||||
|
=== 8 Kbuild Variables
|
||||||
|
|
||||||
The top Makefile exports the following variables:
|
The top Makefile exports the following variables:
|
||||||
|
|
||||||
|
@ -1206,7 +1273,7 @@ The top Makefile exports the following variables:
|
||||||
INSTALL_MOD_STRIP will used as the option(s) to the strip command.
|
INSTALL_MOD_STRIP will used as the option(s) to the strip command.
|
||||||
|
|
||||||
|
|
||||||
=== 8 Makefile language
|
=== 9 Makefile language
|
||||||
|
|
||||||
The kernel Makefiles are designed to be run with GNU Make. The Makefiles
|
The kernel Makefiles are designed to be run with GNU Make. The Makefiles
|
||||||
use only the documented features of GNU Make, but they do use many
|
use only the documented features of GNU Make, but they do use many
|
||||||
|
@ -1225,14 +1292,14 @@ time the left-hand side is used.
|
||||||
There are some cases where "=" is appropriate. Usually, though, ":="
|
There are some cases where "=" is appropriate. Usually, though, ":="
|
||||||
is the right choice.
|
is the right choice.
|
||||||
|
|
||||||
=== 9 Credits
|
=== 10 Credits
|
||||||
|
|
||||||
Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
|
Original version made by Michael Elizabeth Chastain, <mailto:mec@shout.net>
|
||||||
Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
|
Updates by Kai Germaschewski <kai@tp1.ruhr-uni-bochum.de>
|
||||||
Updates by Sam Ravnborg <sam@ravnborg.org>
|
Updates by Sam Ravnborg <sam@ravnborg.org>
|
||||||
Language QA by Jan Engelhardt <jengelh@gmx.de>
|
Language QA by Jan Engelhardt <jengelh@gmx.de>
|
||||||
|
|
||||||
=== 10 TODO
|
=== 11 TODO
|
||||||
|
|
||||||
- Describe how kbuild supports shipped files with _shipped.
|
- Describe how kbuild supports shipped files with _shipped.
|
||||||
- Generating offset header files.
|
- Generating offset header files.
|
||||||
|
|
|
@ -153,60 +153,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
1,0: use 1st APIC table
|
1,0: use 1st APIC table
|
||||||
default: 0
|
default: 0
|
||||||
|
|
||||||
acpi_sleep= [HW,ACPI] Sleep options
|
|
||||||
Format: { s3_bios, s3_mode, s3_beep, s4_nohwsig,
|
|
||||||
old_ordering, s4_nonvs }
|
|
||||||
See Documentation/power/video.txt for information on
|
|
||||||
s3_bios and s3_mode.
|
|
||||||
s3_beep is for debugging; it makes the PC's speaker beep
|
|
||||||
as soon as the kernel's real-mode entry point is called.
|
|
||||||
s4_nohwsig prevents ACPI hardware signature from being
|
|
||||||
used during resume from hibernation.
|
|
||||||
old_ordering causes the ACPI 1.0 ordering of the _PTS
|
|
||||||
control method, with respect to putting devices into
|
|
||||||
low power states, to be enforced (the ACPI 2.0 ordering
|
|
||||||
of _PTS is used by default).
|
|
||||||
s4_nonvs prevents the kernel from saving/restoring the
|
|
||||||
ACPI NVS memory during hibernation.
|
|
||||||
|
|
||||||
acpi_sci= [HW,ACPI] ACPI System Control Interrupt trigger mode
|
|
||||||
Format: { level | edge | high | low }
|
|
||||||
|
|
||||||
acpi_irq_balance [HW,ACPI]
|
|
||||||
ACPI will balance active IRQs
|
|
||||||
default in APIC mode
|
|
||||||
|
|
||||||
acpi_irq_nobalance [HW,ACPI]
|
|
||||||
ACPI will not move active IRQs (default)
|
|
||||||
default in PIC mode
|
|
||||||
|
|
||||||
acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for
|
|
||||||
use by PCI
|
|
||||||
Format: <irq>,<irq>...
|
|
||||||
|
|
||||||
acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
|
|
||||||
Format: <irq>,<irq>...
|
|
||||||
|
|
||||||
acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT
|
|
||||||
|
|
||||||
acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS
|
|
||||||
Format: To spoof as Windows 98: ="Microsoft Windows"
|
|
||||||
|
|
||||||
acpi_osi= [HW,ACPI] Modify list of supported OS interface strings
|
|
||||||
acpi_osi="string1" # add string1 -- only one string
|
|
||||||
acpi_osi="!string2" # remove built-in string2
|
|
||||||
acpi_osi= # disable all strings
|
|
||||||
|
|
||||||
acpi_serialize [HW,ACPI] force serialization of AML methods
|
|
||||||
|
|
||||||
acpi_skip_timer_override [HW,ACPI]
|
|
||||||
Recognize and ignore IRQ0/pin2 Interrupt Override.
|
|
||||||
For broken nForce2 BIOS resulting in XT-PIC timer.
|
|
||||||
acpi_use_timer_override [HW,ACPI]
|
|
||||||
Use timer override. For some broken Nvidia NF5 boards
|
|
||||||
that require a timer override, but don't have
|
|
||||||
HPET
|
|
||||||
|
|
||||||
acpi_backlight= [HW,ACPI]
|
acpi_backlight= [HW,ACPI]
|
||||||
acpi_backlight=vendor
|
acpi_backlight=vendor
|
||||||
acpi_backlight=video
|
acpi_backlight=video
|
||||||
|
@ -214,11 +160,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
(e.g. thinkpad_acpi, sony_acpi, etc.) instead
|
(e.g. thinkpad_acpi, sony_acpi, etc.) instead
|
||||||
of the ACPI video.ko driver.
|
of the ACPI video.ko driver.
|
||||||
|
|
||||||
acpi_display_output= [HW,ACPI]
|
|
||||||
acpi_display_output=vendor
|
|
||||||
acpi_display_output=video
|
|
||||||
See above.
|
|
||||||
|
|
||||||
acpi.debug_layer= [HW,ACPI,ACPI_DEBUG]
|
acpi.debug_layer= [HW,ACPI,ACPI_DEBUG]
|
||||||
acpi.debug_level= [HW,ACPI,ACPI_DEBUG]
|
acpi.debug_level= [HW,ACPI,ACPI_DEBUG]
|
||||||
Format: <int>
|
Format: <int>
|
||||||
|
@ -247,6 +188,41 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
unusable. The "log_buf_len" parameter may be useful
|
unusable. The "log_buf_len" parameter may be useful
|
||||||
if you need to capture more output.
|
if you need to capture more output.
|
||||||
|
|
||||||
|
acpi_display_output= [HW,ACPI]
|
||||||
|
acpi_display_output=vendor
|
||||||
|
acpi_display_output=video
|
||||||
|
See above.
|
||||||
|
|
||||||
|
acpi_irq_balance [HW,ACPI]
|
||||||
|
ACPI will balance active IRQs
|
||||||
|
default in APIC mode
|
||||||
|
|
||||||
|
acpi_irq_nobalance [HW,ACPI]
|
||||||
|
ACPI will not move active IRQs (default)
|
||||||
|
default in PIC mode
|
||||||
|
|
||||||
|
acpi_irq_isa= [HW,ACPI] If irq_balance, mark listed IRQs used by ISA
|
||||||
|
Format: <irq>,<irq>...
|
||||||
|
|
||||||
|
acpi_irq_pci= [HW,ACPI] If irq_balance, clear listed IRQs for
|
||||||
|
use by PCI
|
||||||
|
Format: <irq>,<irq>...
|
||||||
|
|
||||||
|
acpi_no_auto_ssdt [HW,ACPI] Disable automatic loading of SSDT
|
||||||
|
|
||||||
|
acpi_os_name= [HW,ACPI] Tell ACPI BIOS the name of the OS
|
||||||
|
Format: To spoof as Windows 98: ="Microsoft Windows"
|
||||||
|
|
||||||
|
acpi_osi= [HW,ACPI] Modify list of supported OS interface strings
|
||||||
|
acpi_osi="string1" # add string1 -- only one string
|
||||||
|
acpi_osi="!string2" # remove built-in string2
|
||||||
|
acpi_osi= # disable all strings
|
||||||
|
|
||||||
|
acpi_pm_good [X86-32,X86-64]
|
||||||
|
Override the pmtimer bug detection: force the kernel
|
||||||
|
to assume that this machine's pmtimer latches its value
|
||||||
|
and always returns good values.
|
||||||
|
|
||||||
acpi.power_nocheck= [HW,ACPI]
|
acpi.power_nocheck= [HW,ACPI]
|
||||||
Format: 1/0 enable/disable the check of power state.
|
Format: 1/0 enable/disable the check of power state.
|
||||||
On some bogus BIOS the _PSC object/_STA object of
|
On some bogus BIOS the _PSC object/_STA object of
|
||||||
|
@ -255,11 +231,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
power state again in power transition.
|
power state again in power transition.
|
||||||
1 : disable the power state check
|
1 : disable the power state check
|
||||||
|
|
||||||
acpi_pm_good [X86-32,X86-64]
|
|
||||||
Override the pmtimer bug detection: force the kernel
|
|
||||||
to assume that this machine's pmtimer latches its value
|
|
||||||
and always returns good values.
|
|
||||||
|
|
||||||
acpi_enforce_resources= [ACPI]
|
acpi_enforce_resources= [ACPI]
|
||||||
{ strict | lax | no }
|
{ strict | lax | no }
|
||||||
Check for resource conflicts between native drivers
|
Check for resource conflicts between native drivers
|
||||||
|
@ -276,22 +247,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
no: ACPI OperationRegions are not marked as reserved,
|
no: ACPI OperationRegions are not marked as reserved,
|
||||||
no further checks are performed.
|
no further checks are performed.
|
||||||
|
|
||||||
agp= [AGP]
|
|
||||||
{ off | try_unsupported }
|
|
||||||
off: disable AGP support
|
|
||||||
try_unsupported: try to drive unsupported chipsets
|
|
||||||
(may crash computer or cause data corruption)
|
|
||||||
|
|
||||||
enable_timer_pin_1 [i386,x86-64]
|
|
||||||
Enable PIN 1 of APIC timer
|
|
||||||
Can be useful to work around chipset bugs
|
|
||||||
(in particular on some ATI chipsets).
|
|
||||||
The kernel tries to set a reasonable default.
|
|
||||||
|
|
||||||
disable_timer_pin_1 [i386,x86-64]
|
|
||||||
Disable PIN 1 of APIC timer
|
|
||||||
Can be useful to work around chipset bugs.
|
|
||||||
|
|
||||||
ad1848= [HW,OSS]
|
ad1848= [HW,OSS]
|
||||||
Format: <io>,<irq>,<dma>,<dma2>,<type>
|
Format: <io>,<irq>,<dma>,<dma2>,<type>
|
||||||
|
|
||||||
|
@ -305,6 +260,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
||||||
See also header of sound/oss/aedsp16.c.
|
See also header of sound/oss/aedsp16.c.
|
||||||
|
|
||||||
|
agp= [AGP]
|
||||||
|
{ off | try_unsupported }
|
||||||
|
off: disable AGP support
|
||||||
|
try_unsupported: try to drive unsupported chipsets
|
||||||
|
(may crash computer or cause data corruption)
|
||||||
|
|
||||||
aha152x= [HW,SCSI]
|
aha152x= [HW,SCSI]
|
||||||
See Documentation/scsi/aha152x.txt.
|
See Documentation/scsi/aha152x.txt.
|
||||||
|
|
||||||
|
@ -432,12 +393,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
possible to determine what the correct size should be.
|
possible to determine what the correct size should be.
|
||||||
This option provides an override for these situations.
|
This option provides an override for these situations.
|
||||||
|
|
||||||
security= [SECURITY] Choose a security module to enable at boot.
|
|
||||||
If this boot parameter is not specified, only the first
|
|
||||||
security module asking for security registration will be
|
|
||||||
loaded. An invalid security module name will be treated
|
|
||||||
as if no module has been chosen.
|
|
||||||
|
|
||||||
capability.disable=
|
capability.disable=
|
||||||
[SECURITY] Disable capabilities. This would normally
|
[SECURITY] Disable capabilities. This would normally
|
||||||
be used only if an alternative security model is to be
|
be used only if an alternative security model is to be
|
||||||
|
@ -509,24 +464,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Range: 0 - 8192
|
Range: 0 - 8192
|
||||||
Default: 64
|
Default: 64
|
||||||
|
|
||||||
dma_debug=off If the kernel is compiled with DMA_API_DEBUG support
|
|
||||||
this option disables the debugging code at boot.
|
|
||||||
|
|
||||||
dma_debug_entries=<number>
|
|
||||||
This option allows to tune the number of preallocated
|
|
||||||
entries for DMA-API debugging code. One entry is
|
|
||||||
required per DMA-API allocation. Use this if the
|
|
||||||
DMA-API debugging code disables itself because the
|
|
||||||
architectural default is too low.
|
|
||||||
|
|
||||||
hpet= [X86-32,HPET] option to control HPET usage
|
|
||||||
Format: { enable (default) | disable | force |
|
|
||||||
verbose }
|
|
||||||
disable: disable HPET and use PIT instead
|
|
||||||
force: allow force enabled of undocumented chips (ICH4,
|
|
||||||
VIA, nVidia)
|
|
||||||
verbose: show contents of HPET registers during setup
|
|
||||||
|
|
||||||
com20020= [HW,NET] ARCnet - COM20020 chipset
|
com20020= [HW,NET] ARCnet - COM20020 chipset
|
||||||
Format:
|
Format:
|
||||||
<io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
|
<io>[,<irq>[,<nodeID>[,<backplane>[,<ckp>[,<timeout>]]]]]
|
||||||
|
@ -570,23 +507,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
console=brl,ttyS0
|
console=brl,ttyS0
|
||||||
For now, only VisioBraille is supported.
|
For now, only VisioBraille is supported.
|
||||||
|
|
||||||
earlycon= [KNL] Output early console device and options.
|
|
||||||
uart[8250],io,<addr>[,options]
|
|
||||||
uart[8250],mmio,<addr>[,options]
|
|
||||||
Start an early, polled-mode console on the 8250/16550
|
|
||||||
UART at the specified I/O port or MMIO address.
|
|
||||||
The options are the same as for ttyS, above.
|
|
||||||
|
|
||||||
no_console_suspend
|
|
||||||
[HW] Never suspend the console
|
|
||||||
Disable suspending of consoles during suspend and
|
|
||||||
hibernate operations. Once disabled, debugging
|
|
||||||
messages can reach various consoles while the rest
|
|
||||||
of the system is being put to sleep (ie, while
|
|
||||||
debugging driver suspend/resume hooks). This may
|
|
||||||
not work reliably with all consoles, but is known
|
|
||||||
to work with serial and VGA consoles.
|
|
||||||
|
|
||||||
coredump_filter=
|
coredump_filter=
|
||||||
[KNL] Change the default value for
|
[KNL] Change the default value for
|
||||||
/proc/<pid>/coredump_filter.
|
/proc/<pid>/coredump_filter.
|
||||||
|
@ -643,30 +563,13 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Format: <area>[,<node>]
|
Format: <area>[,<node>]
|
||||||
See also Documentation/networking/decnet.txt.
|
See also Documentation/networking/decnet.txt.
|
||||||
|
|
||||||
vt.default_blu= [VT]
|
default_hugepagesz=
|
||||||
Format: <blue0>,<blue1>,<blue2>,...,<blue15>
|
[same as hugepagesz=] The size of the default
|
||||||
Change the default blue palette of the console.
|
HugeTLB page size. This is the size represented by
|
||||||
This is a 16-member array composed of values
|
the legacy /proc/ hugepages APIs, used for SHM, and
|
||||||
ranging from 0-255.
|
default size when mounting hugetlbfs filesystems.
|
||||||
|
Defaults to the default architecture's huge page size
|
||||||
vt.default_grn= [VT]
|
if not specified.
|
||||||
Format: <green0>,<green1>,<green2>,...,<green15>
|
|
||||||
Change the default green palette of the console.
|
|
||||||
This is a 16-member array composed of values
|
|
||||||
ranging from 0-255.
|
|
||||||
|
|
||||||
vt.default_red= [VT]
|
|
||||||
Format: <red0>,<red1>,<red2>,...,<red15>
|
|
||||||
Change the default red palette of the console.
|
|
||||||
This is a 16-member array composed of values
|
|
||||||
ranging from 0-255.
|
|
||||||
|
|
||||||
vt.default_utf8=
|
|
||||||
[VT]
|
|
||||||
Format=<0|1>
|
|
||||||
Set system-wide default UTF-8 mode for all tty's.
|
|
||||||
Default is 1, i.e. UTF-8 mode is enabled for all
|
|
||||||
newly opened terminals.
|
|
||||||
|
|
||||||
dhash_entries= [KNL]
|
dhash_entries= [KNL]
|
||||||
Set number of hash buckets for dentry cache.
|
Set number of hash buckets for dentry cache.
|
||||||
|
@ -679,27 +582,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Documentation/serial/digiepca.txt.
|
Documentation/serial/digiepca.txt.
|
||||||
|
|
||||||
disable_mtrr_cleanup [X86]
|
disable_mtrr_cleanup [X86]
|
||||||
enable_mtrr_cleanup [X86]
|
|
||||||
The kernel tries to adjust MTRR layout from continuous
|
The kernel tries to adjust MTRR layout from continuous
|
||||||
to discrete, to make X server driver able to add WB
|
to discrete, to make X server driver able to add WB
|
||||||
entry later. This parameter enables/disables that.
|
entry later. This parameter disables that.
|
||||||
|
|
||||||
mtrr_chunk_size=nn[KMG] [X86]
|
|
||||||
used for mtrr cleanup. It is largest continous chunk
|
|
||||||
that could hold holes aka. UC entries.
|
|
||||||
|
|
||||||
mtrr_gran_size=nn[KMG] [X86]
|
|
||||||
Used for mtrr cleanup. It is granularity of mtrr block.
|
|
||||||
Default is 1.
|
|
||||||
Large value could prevent small alignment from
|
|
||||||
using up MTRRs.
|
|
||||||
|
|
||||||
mtrr_spare_reg_nr=n [X86]
|
|
||||||
Format: <integer>
|
|
||||||
Range: 0,7 : spare reg number
|
|
||||||
Default : 1
|
|
||||||
Used for mtrr cleanup. It is spare mtrr entries number.
|
|
||||||
Set to 2 or more if your graphical card needs more.
|
|
||||||
|
|
||||||
disable_mtrr_trim [X86, Intel and AMD only]
|
disable_mtrr_trim [X86, Intel and AMD only]
|
||||||
By default the kernel will trim any uncacheable
|
By default the kernel will trim any uncacheable
|
||||||
|
@ -707,12 +592,38 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
MTRR settings. This parameter disables that behavior,
|
MTRR settings. This parameter disables that behavior,
|
||||||
possibly causing your machine to run very slowly.
|
possibly causing your machine to run very slowly.
|
||||||
|
|
||||||
|
disable_timer_pin_1 [i386,x86-64]
|
||||||
|
Disable PIN 1 of APIC timer
|
||||||
|
Can be useful to work around chipset bugs.
|
||||||
|
|
||||||
dmasound= [HW,OSS] Sound subsystem buffers
|
dmasound= [HW,OSS] Sound subsystem buffers
|
||||||
|
|
||||||
|
dma_debug=off If the kernel is compiled with DMA_API_DEBUG support,
|
||||||
|
this option disables the debugging code at boot.
|
||||||
|
|
||||||
|
dma_debug_entries=<number>
|
||||||
|
This option allows to tune the number of preallocated
|
||||||
|
entries for DMA-API debugging code. One entry is
|
||||||
|
required per DMA-API allocation. Use this if the
|
||||||
|
DMA-API debugging code disables itself because the
|
||||||
|
architectural default is too low.
|
||||||
|
|
||||||
dscc4.setup= [NET]
|
dscc4.setup= [NET]
|
||||||
|
|
||||||
dtc3181e= [HW,SCSI]
|
dtc3181e= [HW,SCSI]
|
||||||
|
|
||||||
|
dynamic_printk Enables pr_debug()/dev_dbg() calls if
|
||||||
|
CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
|
||||||
|
These can also be switched on/off via
|
||||||
|
<debugfs>/dynamic_printk/modules
|
||||||
|
|
||||||
|
earlycon= [KNL] Output early console device and options.
|
||||||
|
uart[8250],io,<addr>[,options]
|
||||||
|
uart[8250],mmio,<addr>[,options]
|
||||||
|
Start an early, polled-mode console on the 8250/16550
|
||||||
|
UART at the specified I/O port or MMIO address.
|
||||||
|
The options are the same as for ttyS, above.
|
||||||
|
|
||||||
earlyprintk= [X86-32,X86-64,SH,BLACKFIN]
|
earlyprintk= [X86-32,X86-64,SH,BLACKFIN]
|
||||||
earlyprintk=vga
|
earlyprintk=vga
|
||||||
earlyprintk=serial[,ttySn[,baudrate]]
|
earlyprintk=serial[,ttySn[,baudrate]]
|
||||||
|
@ -754,6 +665,17 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
pass this option to capture kernel.
|
pass this option to capture kernel.
|
||||||
See Documentation/kdump/kdump.txt for details.
|
See Documentation/kdump/kdump.txt for details.
|
||||||
|
|
||||||
|
enable_mtrr_cleanup [X86]
|
||||||
|
The kernel tries to adjust MTRR layout from continuous
|
||||||
|
to discrete, to make X server driver able to add WB
|
||||||
|
entry later. This parameter enables that.
|
||||||
|
|
||||||
|
enable_timer_pin_1 [i386,x86-64]
|
||||||
|
Enable PIN 1 of APIC timer
|
||||||
|
Can be useful to work around chipset bugs
|
||||||
|
(in particular on some ATI chipsets).
|
||||||
|
The kernel tries to set a reasonable default.
|
||||||
|
|
||||||
enforcing [SELINUX] Set initial enforcing status.
|
enforcing [SELINUX] Set initial enforcing status.
|
||||||
Format: {"0" | "1"}
|
Format: {"0" | "1"}
|
||||||
See security/selinux/Kconfig help text.
|
See security/selinux/Kconfig help text.
|
||||||
|
@ -841,6 +763,16 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
hisax= [HW,ISDN]
|
hisax= [HW,ISDN]
|
||||||
See Documentation/isdn/README.HiSax.
|
See Documentation/isdn/README.HiSax.
|
||||||
|
|
||||||
|
hlt [BUGS=ARM,SH]
|
||||||
|
|
||||||
|
hpet= [X86-32,HPET] option to control HPET usage
|
||||||
|
Format: { enable (default) | disable | force |
|
||||||
|
verbose }
|
||||||
|
disable: disable HPET and use PIT instead
|
||||||
|
force: allow force enabled of undocumented chips (ICH4,
|
||||||
|
VIA, nVidia)
|
||||||
|
verbose: show contents of HPET registers during setup
|
||||||
|
|
||||||
hugepages= [HW,X86-32,IA-64] HugeTLB pages to allocate at boot.
|
hugepages= [HW,X86-32,IA-64] HugeTLB pages to allocate at boot.
|
||||||
hugepagesz= [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages.
|
hugepagesz= [HW,IA-64,PPC,X86-64] The size of the HugeTLB pages.
|
||||||
On x86-64 and powerpc, this option can be specified
|
On x86-64 and powerpc, this option can be specified
|
||||||
|
@ -850,15 +782,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
(when the CPU supports the "pdpe1gb" cpuinfo flag)
|
(when the CPU supports the "pdpe1gb" cpuinfo flag)
|
||||||
Note that 1GB pages can only be allocated at boot time
|
Note that 1GB pages can only be allocated at boot time
|
||||||
using hugepages= and not freed afterwards.
|
using hugepages= and not freed afterwards.
|
||||||
default_hugepagesz=
|
|
||||||
[same as hugepagesz=] The size of the default
|
|
||||||
HugeTLB page size. This is the size represented by
|
|
||||||
the legacy /proc/ hugepages APIs, used for SHM, and
|
|
||||||
default size when mounting hugetlbfs filesystems.
|
|
||||||
Defaults to the default architecture's huge page size
|
|
||||||
if not specified.
|
|
||||||
|
|
||||||
hlt [BUGS=ARM,SH]
|
|
||||||
|
|
||||||
hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC)
|
hvc_iucv= [S390] Number of z/VM IUCV hypervisor console (HVC)
|
||||||
terminal devices. Valid values: 0..8
|
terminal devices. Valid values: 0..8
|
||||||
|
@ -919,6 +842,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
|
idebus= [HW] (E)IDE subsystem - VLB/PCI bus speed
|
||||||
See Documentation/ide/ide.txt.
|
See Documentation/ide/ide.txt.
|
||||||
|
|
||||||
|
ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
|
||||||
|
Claim all unknown PCI IDE storage controllers.
|
||||||
|
|
||||||
idle= [X86]
|
idle= [X86]
|
||||||
Format: idle=poll, idle=mwait, idle=halt, idle=nomwait
|
Format: idle=poll, idle=mwait, idle=halt, idle=nomwait
|
||||||
Poll forces a polling idle loop that can slightly
|
Poll forces a polling idle loop that can slightly
|
||||||
|
@ -934,9 +860,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
In such case C2/C3 won't be used again.
|
In such case C2/C3 won't be used again.
|
||||||
idle=nomwait: Disable mwait for CPU C-states
|
idle=nomwait: Disable mwait for CPU C-states
|
||||||
|
|
||||||
ide-pci-generic.all-generic-ide [HW] (E)IDE subsystem
|
|
||||||
Claim all unknown PCI IDE storage controllers.
|
|
||||||
|
|
||||||
ignore_loglevel [KNL]
|
ignore_loglevel [KNL]
|
||||||
Ignore loglevel setting - this will print /all/
|
Ignore loglevel setting - this will print /all/
|
||||||
kernel messages to the console. Useful for debugging.
|
kernel messages to the console. Useful for debugging.
|
||||||
|
@ -970,25 +893,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver
|
inport.irq= [HW] Inport (ATI XL and Microsoft) busmouse driver
|
||||||
Format: <irq>
|
Format: <irq>
|
||||||
|
|
||||||
inttest= [IA64]
|
|
||||||
|
|
||||||
iomem= Disable strict checking of access to MMIO memory
|
|
||||||
strict regions from userspace.
|
|
||||||
relaxed
|
|
||||||
|
|
||||||
iommu= [x86]
|
|
||||||
off
|
|
||||||
force
|
|
||||||
noforce
|
|
||||||
biomerge
|
|
||||||
panic
|
|
||||||
nopanic
|
|
||||||
merge
|
|
||||||
nomerge
|
|
||||||
forcesac
|
|
||||||
soft
|
|
||||||
|
|
||||||
|
|
||||||
intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
|
intel_iommu= [DMAR] Intel IOMMU driver (DMAR) option
|
||||||
on
|
on
|
||||||
Enable intel iommu driver.
|
Enable intel iommu driver.
|
||||||
|
@ -1012,6 +916,28 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
result in a hardware IOTLB flush operation as opposed
|
result in a hardware IOTLB flush operation as opposed
|
||||||
to batching them for performance.
|
to batching them for performance.
|
||||||
|
|
||||||
|
inttest= [IA64]
|
||||||
|
|
||||||
|
iomem= Disable strict checking of access to MMIO memory
|
||||||
|
strict regions from userspace.
|
||||||
|
relaxed
|
||||||
|
|
||||||
|
iommu= [x86]
|
||||||
|
off
|
||||||
|
force
|
||||||
|
noforce
|
||||||
|
biomerge
|
||||||
|
panic
|
||||||
|
nopanic
|
||||||
|
merge
|
||||||
|
nomerge
|
||||||
|
forcesac
|
||||||
|
soft
|
||||||
|
|
||||||
|
io7= [HW] IO7 for Marvel based alpha systems
|
||||||
|
See comment before marvel_specify_io7 in
|
||||||
|
arch/alpha/kernel/core_marvel.c.
|
||||||
|
|
||||||
io_delay= [X86-32,X86-64] I/O delay method
|
io_delay= [X86-32,X86-64] I/O delay method
|
||||||
0x80
|
0x80
|
||||||
Standard port 0x80 based delay
|
Standard port 0x80 based delay
|
||||||
|
@ -1022,10 +948,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
none
|
none
|
||||||
No delay
|
No delay
|
||||||
|
|
||||||
io7= [HW] IO7 for Marvel based alpha systems
|
|
||||||
See comment before marvel_specify_io7 in
|
|
||||||
arch/alpha/kernel/core_marvel.c.
|
|
||||||
|
|
||||||
ip= [IP_PNP]
|
ip= [IP_PNP]
|
||||||
See Documentation/filesystems/nfsroot.txt.
|
See Documentation/filesystems/nfsroot.txt.
|
||||||
|
|
||||||
|
@ -1036,12 +958,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
|
ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
|
||||||
See header of drivers/scsi/ips.c.
|
See header of drivers/scsi/ips.c.
|
||||||
|
|
||||||
ports= [IP_VS_FTP] IPVS ftp helper module
|
|
||||||
Default is 21.
|
|
||||||
Up to 8 (IP_VS_APP_MAX_PORTS) ports
|
|
||||||
may be specified.
|
|
||||||
Format: <port>,<port>....
|
|
||||||
|
|
||||||
irqfixup [HW]
|
irqfixup [HW]
|
||||||
When an interrupt is not handled search all handlers
|
When an interrupt is not handled search all handlers
|
||||||
for it. Intended to get systems with badly broken
|
for it. Intended to get systems with badly broken
|
||||||
|
@ -1082,6 +998,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
js= [HW,JOY] Analog joystick
|
js= [HW,JOY] Analog joystick
|
||||||
See Documentation/input/joystick.txt.
|
See Documentation/input/joystick.txt.
|
||||||
|
|
||||||
|
keepinitrd [HW,ARM]
|
||||||
|
|
||||||
kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
|
kernelcore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
|
||||||
specifies the amount of memory usable by the kernel
|
specifies the amount of memory usable by the kernel
|
||||||
for non-movable allocations. The requested amount is
|
for non-movable allocations. The requested amount is
|
||||||
|
@ -1107,21 +1025,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
higher than default (KMEMTRACE_N_SUBBUFS in code) if
|
higher than default (KMEMTRACE_N_SUBBUFS in code) if
|
||||||
you experience buffer overruns.
|
you experience buffer overruns.
|
||||||
|
|
||||||
movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
|
|
||||||
is similar to kernelcore except it specifies the
|
|
||||||
amount of memory used for migratable allocations.
|
|
||||||
If both kernelcore and movablecore is specified,
|
|
||||||
then kernelcore will be at *least* the specified
|
|
||||||
value but may be more. If movablecore on its own
|
|
||||||
is specified, the administrator must be careful
|
|
||||||
that the amount of memory usable for all allocations
|
|
||||||
is not too small.
|
|
||||||
|
|
||||||
keepinitrd [HW,ARM]
|
|
||||||
|
|
||||||
kstack=N [X86-32,X86-64] Print N words from the kernel stack
|
|
||||||
in oops dumps.
|
|
||||||
|
|
||||||
kgdboc= [HW] kgdb over consoles.
|
kgdboc= [HW] kgdb over consoles.
|
||||||
Requires a tty driver that supports console polling.
|
Requires a tty driver that supports console polling.
|
||||||
(only serial suported for now)
|
(only serial suported for now)
|
||||||
|
@ -1131,6 +1034,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Configure the RouterBoard 532 series on-chip
|
Configure the RouterBoard 532 series on-chip
|
||||||
Ethernet adapter MAC address.
|
Ethernet adapter MAC address.
|
||||||
|
|
||||||
|
kstack=N [X86-32,X86-64] Print N words from the kernel stack
|
||||||
|
in oops dumps.
|
||||||
|
|
||||||
l2cr= [PPC]
|
l2cr= [PPC]
|
||||||
|
|
||||||
l3cr= [PPC]
|
l3cr= [PPC]
|
||||||
|
@ -1276,9 +1182,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
(machvec) in a generic kernel.
|
(machvec) in a generic kernel.
|
||||||
Example: machvec=hpzx1_swiotlb
|
Example: machvec=hpzx1_swiotlb
|
||||||
|
|
||||||
max_loop= [LOOP] Maximum number of loopback devices that can
|
max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater
|
||||||
be mounted
|
than or equal to this physical address is ignored.
|
||||||
Format: <1-256>
|
|
||||||
|
|
||||||
maxcpus= [SMP] Maximum number of processors that an SMP kernel
|
maxcpus= [SMP] Maximum number of processors that an SMP kernel
|
||||||
should make use of. maxcpus=n : n >= 0 limits the
|
should make use of. maxcpus=n : n >= 0 limits the
|
||||||
|
@ -1286,8 +1191,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
it is equivalent to "nosmp", which also disables
|
it is equivalent to "nosmp", which also disables
|
||||||
the IO APIC.
|
the IO APIC.
|
||||||
|
|
||||||
max_addr=nn[KMG] [KNL,BOOT,ia64] All physical memory greater than
|
max_loop= [LOOP] Maximum number of loopback devices that can
|
||||||
or equal to this physical address is ignored.
|
be mounted
|
||||||
|
Format: <1-256>
|
||||||
|
|
||||||
max_luns= [SCSI] Maximum number of LUNs to probe.
|
max_luns= [SCSI] Maximum number of LUNs to probe.
|
||||||
Should be between 1 and 2^32-1.
|
Should be between 1 and 2^32-1.
|
||||||
|
@ -1414,6 +1320,16 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
mousedev.yres= [MOUSE] Vertical screen resolution, used for devices
|
mousedev.yres= [MOUSE] Vertical screen resolution, used for devices
|
||||||
reporting absolute coordinates, such as tablets
|
reporting absolute coordinates, such as tablets
|
||||||
|
|
||||||
|
movablecore=nn[KMG] [KNL,X86-32,IA-64,PPC,X86-64] This parameter
|
||||||
|
is similar to kernelcore except it specifies the
|
||||||
|
amount of memory used for migratable allocations.
|
||||||
|
If both kernelcore and movablecore is specified,
|
||||||
|
then kernelcore will be at *least* the specified
|
||||||
|
value but may be more. If movablecore on its own
|
||||||
|
is specified, the administrator must be careful
|
||||||
|
that the amount of memory usable for all allocations
|
||||||
|
is not too small.
|
||||||
|
|
||||||
mpu401= [HW,OSS]
|
mpu401= [HW,OSS]
|
||||||
Format: <io>,<irq>
|
Format: <io>,<irq>
|
||||||
|
|
||||||
|
@ -1435,6 +1351,23 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
[HW] Make the MicroTouch USB driver use raw coordinates
|
[HW] Make the MicroTouch USB driver use raw coordinates
|
||||||
('y', default) or cooked coordinates ('n')
|
('y', default) or cooked coordinates ('n')
|
||||||
|
|
||||||
|
mtrr_chunk_size=nn[KMG] [X86]
|
||||||
|
used for mtrr cleanup. It is largest continous chunk
|
||||||
|
that could hold holes aka. UC entries.
|
||||||
|
|
||||||
|
mtrr_gran_size=nn[KMG] [X86]
|
||||||
|
Used for mtrr cleanup. It is granularity of mtrr block.
|
||||||
|
Default is 1.
|
||||||
|
Large value could prevent small alignment from
|
||||||
|
using up MTRRs.
|
||||||
|
|
||||||
|
mtrr_spare_reg_nr=n [X86]
|
||||||
|
Format: <integer>
|
||||||
|
Range: 0,7 : spare reg number
|
||||||
|
Default : 1
|
||||||
|
Used for mtrr cleanup. It is spare mtrr entries number.
|
||||||
|
Set to 2 or more if your graphical card needs more.
|
||||||
|
|
||||||
n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
|
n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
|
||||||
|
|
||||||
NCR_D700= [HW,SCSI]
|
NCR_D700= [HW,SCSI]
|
||||||
|
@ -1495,11 +1428,13 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
0 - turn nmi_watchdog off
|
0 - turn nmi_watchdog off
|
||||||
1 - use the IO-APIC timer for the NMI watchdog
|
1 - use the IO-APIC timer for the NMI watchdog
|
||||||
2 - use the local APIC for the NMI watchdog using
|
2 - use the local APIC for the NMI watchdog using
|
||||||
a performance counter. Note: This will use one performance
|
a performance counter. Note: This will use one
|
||||||
counter and the local APIC's performance vector.
|
performance counter and the local APIC's performance
|
||||||
When panic is specified panic when an NMI watchdog timeout occurs.
|
vector.
|
||||||
This is useful when you use a panic=... timeout and need the box
|
When panic is specified, panic when an NMI watchdog
|
||||||
quickly up again.
|
timeout occurs.
|
||||||
|
This is useful when you use a panic=... timeout and
|
||||||
|
need the box quickly up again.
|
||||||
Instead of 1 and 2 it is possible to use the following
|
Instead of 1 and 2 it is possible to use the following
|
||||||
symbolic names: lapic and ioapic
|
symbolic names: lapic and ioapic
|
||||||
Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic
|
Example: nmi_watchdog=2 or nmi_watchdog=panic,lapic
|
||||||
|
@ -1508,6 +1443,16 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
emulation library even if a 387 maths coprocessor
|
emulation library even if a 387 maths coprocessor
|
||||||
is present.
|
is present.
|
||||||
|
|
||||||
|
no_console_suspend
|
||||||
|
[HW] Never suspend the console
|
||||||
|
Disable suspending of consoles during suspend and
|
||||||
|
hibernate operations. Once disabled, debugging
|
||||||
|
messages can reach various consoles while the rest
|
||||||
|
of the system is being put to sleep (ie, while
|
||||||
|
debugging driver suspend/resume hooks). This may
|
||||||
|
not work reliably with all consoles, but is known
|
||||||
|
to work with serial and VGA consoles.
|
||||||
|
|
||||||
noaliencache [MM, NUMA, SLAB] Disables the allocation of alien
|
noaliencache [MM, NUMA, SLAB] Disables the allocation of alien
|
||||||
caches in the slab allocator. Saves per-node memory,
|
caches in the slab allocator. Saves per-node memory,
|
||||||
but will impact performance.
|
but will impact performance.
|
||||||
|
@ -1522,6 +1467,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
nocache [ARM]
|
nocache [ARM]
|
||||||
|
|
||||||
|
noclflush [BUGS=X86] Don't use the CLFLUSH instruction
|
||||||
|
|
||||||
nodelayacct [KNL] Disable per-task delay accounting
|
nodelayacct [KNL] Disable per-task delay accounting
|
||||||
|
|
||||||
nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
|
nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
|
||||||
|
@ -1550,8 +1497,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
register save and restore. The kernel will only save
|
register save and restore. The kernel will only save
|
||||||
legacy floating-point registers on task switch.
|
legacy floating-point registers on task switch.
|
||||||
|
|
||||||
noclflush [BUGS=X86] Don't use the CLFLUSH instruction
|
|
||||||
|
|
||||||
nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
|
nohlt [BUGS=ARM,SH] Tells the kernel that the sleep(SH) or
|
||||||
wfi(ARM) instruction doesn't work correctly and not to
|
wfi(ARM) instruction doesn't work correctly and not to
|
||||||
use it. This is also useful when using JTAG debugger.
|
use it. This is also useful when using JTAG debugger.
|
||||||
|
@ -1596,12 +1541,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
|
|
||||||
nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
|
nolapic_timer [X86-32,APIC] Do not use the local APIC timer.
|
||||||
|
|
||||||
nox2apic [X86-64,APIC] Do not enable x2APIC mode.
|
|
||||||
|
|
||||||
x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
|
|
||||||
default x2apic cluster mode on platforms
|
|
||||||
supporting x2apic.
|
|
||||||
|
|
||||||
noltlbs [PPC] Do not use large page/tlb entries for kernel
|
noltlbs [PPC] Do not use large page/tlb entries for kernel
|
||||||
lowmem mapping on PPC40x.
|
lowmem mapping on PPC40x.
|
||||||
|
|
||||||
|
@ -1612,6 +1551,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
nomfgpt [X86-32] Disable Multi-Function General Purpose
|
nomfgpt [X86-32] Disable Multi-Function General Purpose
|
||||||
Timer usage (for AMD Geode machines).
|
Timer usage (for AMD Geode machines).
|
||||||
|
|
||||||
|
norandmaps Don't use address space randomization. Equivalent to
|
||||||
|
echo 0 > /proc/sys/kernel/randomize_va_space
|
||||||
|
|
||||||
noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops
|
noreplace-paravirt [X86-32,PV_OPS] Don't patch paravirt_ops
|
||||||
|
|
||||||
noreplace-smp [X86-32,SMP] Don't replace SMP instructions
|
noreplace-smp [X86-32,SMP] Don't replace SMP instructions
|
||||||
|
@ -1650,13 +1592,13 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
purges which is reported from either PAL_VM_SUMMARY or
|
purges which is reported from either PAL_VM_SUMMARY or
|
||||||
SAL PALO.
|
SAL PALO.
|
||||||
|
|
||||||
|
nr_uarts= [SERIAL] maximum number of UARTs to be registered.
|
||||||
|
|
||||||
numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
|
numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
|
||||||
one of ['zone', 'node', 'default'] can be specified
|
one of ['zone', 'node', 'default'] can be specified
|
||||||
This can be set from sysctl after boot.
|
This can be set from sysctl after boot.
|
||||||
See Documentation/sysctl/vm.txt for details.
|
See Documentation/sysctl/vm.txt for details.
|
||||||
|
|
||||||
nr_uarts= [SERIAL] maximum number of UARTs to be registered.
|
|
||||||
|
|
||||||
ohci1394_dma=early [HW] enable debugging via the ohci1394 driver.
|
ohci1394_dma=early [HW] enable debugging via the ohci1394 driver.
|
||||||
See Documentation/debugging-via-ohci1394.txt for more
|
See Documentation/debugging-via-ohci1394.txt for more
|
||||||
info.
|
info.
|
||||||
|
@ -1905,6 +1847,14 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
printk.time= Show timing data prefixed to each printk message line
|
printk.time= Show timing data prefixed to each printk message line
|
||||||
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
|
Format: <bool> (1/Y/y=enable, 0/N/n=disable)
|
||||||
|
|
||||||
|
processor.max_cstate= [HW,ACPI]
|
||||||
|
Limit processor to maximum C-state
|
||||||
|
max_cstate=9 overrides any DMI blacklist limit.
|
||||||
|
|
||||||
|
processor.nocst [HW,ACPI]
|
||||||
|
Ignore the _CST method to determine C-states,
|
||||||
|
instead using the legacy FADT method
|
||||||
|
|
||||||
profile= [KNL] Enable kernel profiling via /proc/profile
|
profile= [KNL] Enable kernel profiling via /proc/profile
|
||||||
Format: [schedule,]<number>
|
Format: [schedule,]<number>
|
||||||
Param: "schedule" - profile schedule points.
|
Param: "schedule" - profile schedule points.
|
||||||
|
@ -1914,14 +1864,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Requires CONFIG_SCHEDSTATS
|
Requires CONFIG_SCHEDSTATS
|
||||||
Param: "kvm" - profile VM exits.
|
Param: "kvm" - profile VM exits.
|
||||||
|
|
||||||
processor.max_cstate= [HW,ACPI]
|
|
||||||
Limit processor to maximum C-state
|
|
||||||
max_cstate=9 overrides any DMI blacklist limit.
|
|
||||||
|
|
||||||
processor.nocst [HW,ACPI]
|
|
||||||
Ignore the _CST method to determine C-states,
|
|
||||||
instead using the legacy FADT method
|
|
||||||
|
|
||||||
prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
|
prompt_ramdisk= [RAM] List of RAM disks to prompt for floppy disk
|
||||||
before loading.
|
before loading.
|
||||||
See Documentation/blockdev/ramdisk.txt.
|
See Documentation/blockdev/ramdisk.txt.
|
||||||
|
@ -2075,7 +2017,13 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
allowing boot to proceed. none ignores them, expecting
|
allowing boot to proceed. none ignores them, expecting
|
||||||
user space to do the scan.
|
user space to do the scan.
|
||||||
|
|
||||||
selinux [SELINUX] Disable or enable SELinux at boot time.
|
security= [SECURITY] Choose a security module to enable at boot.
|
||||||
|
If this boot parameter is not specified, only the first
|
||||||
|
security module asking for security registration will be
|
||||||
|
loaded. An invalid security module name will be treated
|
||||||
|
as if no module has been chosen.
|
||||||
|
|
||||||
|
selinux= [SELINUX] Disable or enable SELinux at boot time.
|
||||||
Format: { "0" | "1" }
|
Format: { "0" | "1" }
|
||||||
See security/selinux/Kconfig help text.
|
See security/selinux/Kconfig help text.
|
||||||
0 -- disable.
|
0 -- disable.
|
||||||
|
@ -2499,9 +2447,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
medium is write-protected).
|
medium is write-protected).
|
||||||
Example: quirks=0419:aaf5:rl,0421:0433:rc
|
Example: quirks=0419:aaf5:rl,0421:0433:rc
|
||||||
|
|
||||||
add_efi_memmap [EFI; x86-32,X86-64] Include EFI memory map in
|
|
||||||
kernel's map of available physical RAM.
|
|
||||||
|
|
||||||
vdso= [X86-32,SH,x86-64]
|
vdso= [X86-32,SH,x86-64]
|
||||||
vdso=2: enable compat VDSO (default with COMPAT_VDSO)
|
vdso=2: enable compat VDSO (default with COMPAT_VDSO)
|
||||||
vdso=1: enable VDSO (default)
|
vdso=1: enable VDSO (default)
|
||||||
|
@ -2540,6 +2485,31 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
vmpoff= [KNL,S390] Perform z/VM CP command after power off.
|
vmpoff= [KNL,S390] Perform z/VM CP command after power off.
|
||||||
Format: <command>
|
Format: <command>
|
||||||
|
|
||||||
|
vt.default_blu= [VT]
|
||||||
|
Format: <blue0>,<blue1>,<blue2>,...,<blue15>
|
||||||
|
Change the default blue palette of the console.
|
||||||
|
This is a 16-member array composed of values
|
||||||
|
ranging from 0-255.
|
||||||
|
|
||||||
|
vt.default_grn= [VT]
|
||||||
|
Format: <green0>,<green1>,<green2>,...,<green15>
|
||||||
|
Change the default green palette of the console.
|
||||||
|
This is a 16-member array composed of values
|
||||||
|
ranging from 0-255.
|
||||||
|
|
||||||
|
vt.default_red= [VT]
|
||||||
|
Format: <red0>,<red1>,<red2>,...,<red15>
|
||||||
|
Change the default red palette of the console.
|
||||||
|
This is a 16-member array composed of values
|
||||||
|
ranging from 0-255.
|
||||||
|
|
||||||
|
vt.default_utf8=
|
||||||
|
[VT]
|
||||||
|
Format=<0|1>
|
||||||
|
Set system-wide default UTF-8 mode for all tty's.
|
||||||
|
Default is 1, i.e. UTF-8 mode is enabled for all
|
||||||
|
newly opened terminals.
|
||||||
|
|
||||||
waveartist= [HW,OSS]
|
waveartist= [HW,OSS]
|
||||||
Format: <io>,<irq>,<dma>,<dma2>
|
Format: <io>,<irq>,<dma>,<dma2>
|
||||||
|
|
||||||
|
@ -2552,6 +2522,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
wdt= [WDT] Watchdog
|
wdt= [WDT] Watchdog
|
||||||
See Documentation/watchdog/wdt.txt.
|
See Documentation/watchdog/wdt.txt.
|
||||||
|
|
||||||
|
x2apic_phys [X86-64,APIC] Use x2apic physical mode instead of
|
||||||
|
default x2apic cluster mode on platforms
|
||||||
|
supporting x2apic.
|
||||||
|
|
||||||
xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks.
|
xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks.
|
||||||
xd_geo= See header of drivers/block/xd.c.
|
xd_geo= See header of drivers/block/xd.c.
|
||||||
|
|
||||||
|
@ -2559,9 +2533,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Format:
|
Format:
|
||||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||||
|
|
||||||
norandmaps Don't use address space randomization. Equivalent to
|
|
||||||
echo 0 > /proc/sys/kernel/randomize_va_space
|
|
||||||
|
|
||||||
______________________________________________________________________
|
______________________________________________________________________
|
||||||
|
|
||||||
TODO:
|
TODO:
|
||||||
|
|
|
@ -212,7 +212,9 @@ hit, Kprobes calls kp->pre_handler. After the probed instruction
|
||||||
is single-stepped, Kprobe calls kp->post_handler. If a fault
|
is single-stepped, Kprobe calls kp->post_handler. If a fault
|
||||||
occurs during execution of kp->pre_handler or kp->post_handler,
|
occurs during execution of kp->pre_handler or kp->post_handler,
|
||||||
or during single-stepping of the probed instruction, Kprobes calls
|
or during single-stepping of the probed instruction, Kprobes calls
|
||||||
kp->fault_handler. Any or all handlers can be NULL.
|
kp->fault_handler. Any or all handlers can be NULL. If kp->flags
|
||||||
|
is set KPROBE_FLAG_DISABLED, that kp will be registered but disabled,
|
||||||
|
so, it's handlers aren't hit until calling enable_kprobe(kp).
|
||||||
|
|
||||||
NOTE:
|
NOTE:
|
||||||
1. With the introduction of the "symbol_name" field to struct kprobe,
|
1. With the introduction of the "symbol_name" field to struct kprobe,
|
||||||
|
@ -363,6 +365,26 @@ probes) in the specified array, they clear the addr field of those
|
||||||
incorrect probes. However, other probes in the array are
|
incorrect probes. However, other probes in the array are
|
||||||
unregistered correctly.
|
unregistered correctly.
|
||||||
|
|
||||||
|
4.7 disable_*probe
|
||||||
|
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
int disable_kprobe(struct kprobe *kp);
|
||||||
|
int disable_kretprobe(struct kretprobe *rp);
|
||||||
|
int disable_jprobe(struct jprobe *jp);
|
||||||
|
|
||||||
|
Temporarily disables the specified *probe. You can enable it again by using
|
||||||
|
enable_*probe(). You must specify the probe which has been registered.
|
||||||
|
|
||||||
|
4.8 enable_*probe
|
||||||
|
|
||||||
|
#include <linux/kprobes.h>
|
||||||
|
int enable_kprobe(struct kprobe *kp);
|
||||||
|
int enable_kretprobe(struct kretprobe *rp);
|
||||||
|
int enable_jprobe(struct jprobe *jp);
|
||||||
|
|
||||||
|
Enables *probe which has been disabled by disable_*probe(). You must specify
|
||||||
|
the probe which has been registered.
|
||||||
|
|
||||||
5. Kprobes Features and Limitations
|
5. Kprobes Features and Limitations
|
||||||
|
|
||||||
Kprobes allows multiple probes at the same address. Currently,
|
Kprobes allows multiple probes at the same address. Currently,
|
||||||
|
@ -500,10 +522,14 @@ the probe. If the probed function belongs to a module, the module name
|
||||||
is also specified. Following columns show probe status. If the probe is on
|
is also specified. Following columns show probe status. If the probe is on
|
||||||
a virtual address that is no longer valid (module init sections, module
|
a virtual address that is no longer valid (module init sections, module
|
||||||
virtual addresses that correspond to modules that've been unloaded),
|
virtual addresses that correspond to modules that've been unloaded),
|
||||||
such probes are marked with [GONE].
|
such probes are marked with [GONE]. If the probe is temporarily disabled,
|
||||||
|
such probes are marked with [DISABLED].
|
||||||
|
|
||||||
/debug/kprobes/enabled: Turn kprobes ON/OFF
|
/debug/kprobes/enabled: Turn kprobes ON/OFF forcibly.
|
||||||
|
|
||||||
Provides a knob to globally turn registered kprobes ON or OFF. By default,
|
Provides a knob to globally and forcibly turn registered kprobes ON or OFF.
|
||||||
all kprobes are enabled. By echoing "0" to this file, all registered probes
|
By default, all kprobes are enabled. By echoing "0" to this file, all
|
||||||
will be disarmed, till such time a "1" is echoed to this file.
|
registered probes will be disarmed, till such time a "1" is echoed to this
|
||||||
|
file. Note that this knob just disarms and arms all kprobes and doesn't
|
||||||
|
change each probe's disabling state. This means that disabled kprobes (marked
|
||||||
|
[DISABLED]) will be not enabled if you turn ON all kprobes by this knob.
|
||||||
|
|
|
@ -5,9 +5,21 @@ Required properties:
|
||||||
- reg : should specify localbus chip select and size used for the chip.
|
- reg : should specify localbus chip select and size used for the chip.
|
||||||
- fsl,upm-addr-offset : UPM pattern offset for the address latch.
|
- fsl,upm-addr-offset : UPM pattern offset for the address latch.
|
||||||
- fsl,upm-cmd-offset : UPM pattern offset for the command latch.
|
- fsl,upm-cmd-offset : UPM pattern offset for the command latch.
|
||||||
- gpios : may specify optional GPIO connected to the Ready-Not-Busy pin.
|
|
||||||
|
|
||||||
Example:
|
Optional properties:
|
||||||
|
- fsl,upm-wait-flags : add chip-dependent short delays after running the
|
||||||
|
UPM pattern (0x1), after writing a data byte (0x2) or after
|
||||||
|
writing out a buffer (0x4).
|
||||||
|
- fsl,upm-addr-line-cs-offsets : address offsets for multi-chip support.
|
||||||
|
The corresponding address lines are used to select the chip.
|
||||||
|
- gpios : may specify optional GPIOs connected to the Ready-Not-Busy pins
|
||||||
|
(R/B#). For multi-chip devices, "n" GPIO definitions are required
|
||||||
|
according to the number of chips.
|
||||||
|
- chip-delay : chip dependent delay for transfering data from array to
|
||||||
|
read registers (tR). Required if property "gpios" is not used
|
||||||
|
(R/B# pins not connected).
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
upm@1,0 {
|
upm@1,0 {
|
||||||
compatible = "fsl,upm-nand";
|
compatible = "fsl,upm-nand";
|
||||||
|
@ -26,3 +38,26 @@ upm@1,0 {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
upm@3,0 {
|
||||||
|
#address-cells = <0>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
compatible = "tqc,tqm8548-upm-nand", "fsl,upm-nand";
|
||||||
|
reg = <3 0x0 0x800>;
|
||||||
|
fsl,upm-addr-offset = <0x10>;
|
||||||
|
fsl,upm-cmd-offset = <0x08>;
|
||||||
|
/* Multi-chip NAND device */
|
||||||
|
fsl,upm-addr-line-cs-offsets = <0x0 0x200>;
|
||||||
|
fsl,upm-wait-flags = <0x5>;
|
||||||
|
chip-delay = <25>; // in micro-seconds
|
||||||
|
|
||||||
|
nand@0 {
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <1>;
|
||||||
|
|
||||||
|
partition@0 {
|
||||||
|
label = "fs";
|
||||||
|
reg = <0x00000000 0x10000000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
|
@ -1,15 +1,43 @@
|
||||||
LED connected to GPIO
|
LEDs connected to GPIO lines
|
||||||
|
|
||||||
Required properties:
|
Required properties:
|
||||||
- compatible : should be "gpio-led".
|
- compatible : should be "gpio-leds".
|
||||||
- label : (optional) the label for this LED. If omitted, the label is
|
|
||||||
|
Each LED is represented as a sub-node of the gpio-leds device. Each
|
||||||
|
node's name represents the name of the corresponding LED.
|
||||||
|
|
||||||
|
LED sub-node properties:
|
||||||
|
- gpios : Should specify the LED's GPIO, see "Specifying GPIO information
|
||||||
|
for devices" in Documentation/powerpc/booting-without-of.txt. Active
|
||||||
|
low LEDs should be indicated using flags in the GPIO specifier.
|
||||||
|
- label : (optional) The label for this LED. If omitted, the label is
|
||||||
taken from the node name (excluding the unit address).
|
taken from the node name (excluding the unit address).
|
||||||
- gpios : should specify LED GPIO.
|
- linux,default-trigger : (optional) This parameter, if present, is a
|
||||||
|
string defining the trigger assigned to the LED. Current triggers are:
|
||||||
|
"backlight" - LED will act as a back-light, controlled by the framebuffer
|
||||||
|
system
|
||||||
|
"default-on" - LED will turn on
|
||||||
|
"heartbeat" - LED "double" flashes at a load average based rate
|
||||||
|
"ide-disk" - LED indicates disk activity
|
||||||
|
"timer" - LED flashes at a fixed, configurable rate
|
||||||
|
|
||||||
Example:
|
Examples:
|
||||||
|
|
||||||
led@0 {
|
leds {
|
||||||
compatible = "gpio-led";
|
compatible = "gpio-leds";
|
||||||
label = "hdd";
|
hdd {
|
||||||
gpios = <&mcu_pio 0 1>;
|
label = "IDE Activity";
|
||||||
|
gpios = <&mcu_pio 0 1>; /* Active low */
|
||||||
|
linux,default-trigger = "ide-disk";
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
run-control {
|
||||||
|
compatible = "gpio-leds";
|
||||||
|
red {
|
||||||
|
gpios = <&mpc8572 6 0>;
|
||||||
|
};
|
||||||
|
green {
|
||||||
|
gpios = <&mpc8572 7 0>;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
|
@ -60,17 +60,9 @@ Supported Cards/Chipsets
|
||||||
9005:0285:9005:02d5 Adaptec ASR-2405 (Voodoo40 Lite)
|
9005:0285:9005:02d5 Adaptec ASR-2405 (Voodoo40 Lite)
|
||||||
9005:0285:9005:02d6 Adaptec ASR-2445 (Voodoo44 Lite)
|
9005:0285:9005:02d6 Adaptec ASR-2445 (Voodoo44 Lite)
|
||||||
9005:0285:9005:02d7 Adaptec ASR-2805 (Voodoo80 Lite)
|
9005:0285:9005:02d7 Adaptec ASR-2805 (Voodoo80 Lite)
|
||||||
9005:0285:9005:02d8 Adaptec 5405G (Voodoo40 PM)
|
9005:0285:9005:02d8 Adaptec 5405Z (Voodoo40 BLBU)
|
||||||
9005:0285:9005:02d9 Adaptec 5445G (Voodoo44 PM)
|
9005:0285:9005:02d9 Adaptec 5445Z (Voodoo44 BLBU)
|
||||||
9005:0285:9005:02da Adaptec 5805G (Voodoo80 PM)
|
9005:0285:9005:02da Adaptec 5805Z (Voodoo80 BLBU)
|
||||||
9005:0285:9005:02db Adaptec 5085G (Voodoo08 PM)
|
|
||||||
9005:0285:9005:02dc Adaptec 51245G (Voodoo124 PM)
|
|
||||||
9005:0285:9005:02dd Adaptec 51645G (Voodoo164 PM)
|
|
||||||
9005:0285:9005:02de Adaptec 52445G (Voodoo244 PM)
|
|
||||||
9005:0285:9005:02df Adaptec ASR-2045G (Voodoo04 Lite PM)
|
|
||||||
9005:0285:9005:02e0 Adaptec ASR-2405G (Voodoo40 Lite PM)
|
|
||||||
9005:0285:9005:02e1 Adaptec ASR-2445G (Voodoo44 Lite PM)
|
|
||||||
9005:0285:9005:02e2 Adaptec ASR-2805G (Voodoo80 Lite PM)
|
|
||||||
1011:0046:9005:0364 Adaptec 5400S (Mustang)
|
1011:0046:9005:0364 Adaptec 5400S (Mustang)
|
||||||
1011:0046:9005:0365 Adaptec 5400S (Mustang)
|
1011:0046:9005:0365 Adaptec 5400S (Mustang)
|
||||||
9005:0287:9005:0800 Adaptec Themisto (Jupiter)
|
9005:0287:9005:0800 Adaptec Themisto (Jupiter)
|
||||||
|
@ -140,6 +132,7 @@ Deanna Bonds (non-DASD support, PAE fibs and 64 bit,
|
||||||
where fibs that go to the hardware are consistently called hw_fibs and
|
where fibs that go to the hardware are consistently called hw_fibs and
|
||||||
not just fibs like the name of the driver tracking structure)
|
not just fibs like the name of the driver tracking structure)
|
||||||
Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations.
|
Mark Salyzyn <Mark_Salyzyn@adaptec.com> Fixed panic issues and added some new product ids for upcoming hbas. Performance tuning, card failover and bug mitigations.
|
||||||
|
Achim Leubner <Achim_Leubner@adaptec.com>
|
||||||
|
|
||||||
Original Driver
|
Original Driver
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
71
Documentation/sound/alsa/soc/jack.txt
Normal file
71
Documentation/sound/alsa/soc/jack.txt
Normal file
|
@ -0,0 +1,71 @@
|
||||||
|
ASoC jack detection
|
||||||
|
===================
|
||||||
|
|
||||||
|
ALSA has a standard API for representing physical jacks to user space,
|
||||||
|
the kernel side of which can be seen in include/sound/jack.h. ASoC
|
||||||
|
provides a version of this API adding two additional features:
|
||||||
|
|
||||||
|
- It allows more than one jack detection method to work together on one
|
||||||
|
user visible jack. In embedded systems it is common for multiple
|
||||||
|
to be present on a single jack but handled by separate bits of
|
||||||
|
hardware.
|
||||||
|
|
||||||
|
- Integration with DAPM, allowing DAPM endpoints to be updated
|
||||||
|
automatically based on the detected jack status (eg, turning off the
|
||||||
|
headphone outputs if no headphones are present).
|
||||||
|
|
||||||
|
This is done by splitting the jacks up into three things working
|
||||||
|
together: the jack itself represented by a struct snd_soc_jack, sets of
|
||||||
|
snd_soc_jack_pins representing DAPM endpoints to update and blocks of
|
||||||
|
code providing jack reporting mechanisms.
|
||||||
|
|
||||||
|
For example, a system may have a stereo headset jack with two reporting
|
||||||
|
mechanisms, one for the headphone and one for the microphone. Some
|
||||||
|
systems won't be able to use their speaker output while a headphone is
|
||||||
|
connected and so will want to make sure to update both speaker and
|
||||||
|
headphone when the headphone jack status changes.
|
||||||
|
|
||||||
|
The jack - struct snd_soc_jack
|
||||||
|
==============================
|
||||||
|
|
||||||
|
This represents a physical jack on the system and is what is visible to
|
||||||
|
user space. The jack itself is completely passive, it is set up by the
|
||||||
|
machine driver and updated by jack detection methods.
|
||||||
|
|
||||||
|
Jacks are created by the machine driver calling snd_soc_jack_new().
|
||||||
|
|
||||||
|
snd_soc_jack_pin
|
||||||
|
================
|
||||||
|
|
||||||
|
These represent a DAPM pin to update depending on some of the status
|
||||||
|
bits supported by the jack. Each snd_soc_jack has zero or more of these
|
||||||
|
which are updated automatically. They are created by the machine driver
|
||||||
|
and associated with the jack using snd_soc_jack_add_pins(). The status
|
||||||
|
of the endpoint may configured to be the opposite of the jack status if
|
||||||
|
required (eg, enabling a built in microphone if a microphone is not
|
||||||
|
connected via a jack).
|
||||||
|
|
||||||
|
Jack detection methods
|
||||||
|
======================
|
||||||
|
|
||||||
|
Actual jack detection is done by code which is able to monitor some
|
||||||
|
input to the system and update a jack by calling snd_soc_jack_report(),
|
||||||
|
specifying a subset of bits to update. The jack detection code should
|
||||||
|
be set up by the machine driver, taking configuration for the jack to
|
||||||
|
update and the set of things to report when the jack is connected.
|
||||||
|
|
||||||
|
Often this is done based on the status of a GPIO - a handler for this is
|
||||||
|
provided by the snd_soc_jack_add_gpio() function. Other methods are
|
||||||
|
also available, for example integrated into CODECs. One example of
|
||||||
|
CODEC integrated jack detection can be see in the WM8350 driver.
|
||||||
|
|
||||||
|
Each jack may have multiple reporting mechanisms, though it will need at
|
||||||
|
least one to be useful.
|
||||||
|
|
||||||
|
Machine drivers
|
||||||
|
===============
|
||||||
|
|
||||||
|
These are all hooked together by the machine driver depending on the
|
||||||
|
system hardware. The machine driver will set up the snd_soc_jack and
|
||||||
|
the list of pins to update then set up one or more jack detection
|
||||||
|
mechanisms to update that jack based on their current status.
|
|
@ -42,6 +42,14 @@ sure that bitwise types don't get mixed up (little-endian vs big-endian
|
||||||
vs cpu-endian vs whatever), and there the constant "0" really _is_
|
vs cpu-endian vs whatever), and there the constant "0" really _is_
|
||||||
special.
|
special.
|
||||||
|
|
||||||
|
__bitwise__ - to be used for relatively compact stuff (gfp_t, etc.) that
|
||||||
|
is mostly warning-free and is supposed to stay that way. Warnings will
|
||||||
|
be generated without __CHECK_ENDIAN__.
|
||||||
|
|
||||||
|
__bitwise - noisy stuff; in particular, __le*/__be* are that. We really
|
||||||
|
don't want to drown in noise unless we'd explicitly asked for it.
|
||||||
|
|
||||||
|
|
||||||
Getting sparse
|
Getting sparse
|
||||||
~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
|
|
@ -39,6 +39,8 @@ Currently, these files are in /proc/sys/vm:
|
||||||
- nr_hugepages
|
- nr_hugepages
|
||||||
- nr_overcommit_hugepages
|
- nr_overcommit_hugepages
|
||||||
- nr_pdflush_threads
|
- nr_pdflush_threads
|
||||||
|
- nr_pdflush_threads_min
|
||||||
|
- nr_pdflush_threads_max
|
||||||
- nr_trim_pages (only if CONFIG_MMU=n)
|
- nr_trim_pages (only if CONFIG_MMU=n)
|
||||||
- numa_zonelist_order
|
- numa_zonelist_order
|
||||||
- oom_dump_tasks
|
- oom_dump_tasks
|
||||||
|
@ -463,6 +465,32 @@ The default value is 0.
|
||||||
|
|
||||||
==============================================================
|
==============================================================
|
||||||
|
|
||||||
|
nr_pdflush_threads_min
|
||||||
|
|
||||||
|
This value controls the minimum number of pdflush threads.
|
||||||
|
|
||||||
|
At boot time, the kernel will create and maintain 'nr_pdflush_threads_min'
|
||||||
|
threads for the kernel's lifetime.
|
||||||
|
|
||||||
|
The default value is 2. The minimum value you can specify is 1, and
|
||||||
|
the maximum value is the current setting of 'nr_pdflush_threads_max'.
|
||||||
|
|
||||||
|
See 'nr_pdflush_threads_max' below for more information.
|
||||||
|
|
||||||
|
==============================================================
|
||||||
|
|
||||||
|
nr_pdflush_threads_max
|
||||||
|
|
||||||
|
This value controls the maximum number of pdflush threads that can be
|
||||||
|
created. The pdflush algorithm will create a new pdflush thread (up to
|
||||||
|
this maximum) if no pdflush threads have been available for >= 1 second.
|
||||||
|
|
||||||
|
The default value is 8. The minimum value you can specify is the
|
||||||
|
current value of 'nr_pdflush_threads_min' and the
|
||||||
|
maximum is 1000.
|
||||||
|
|
||||||
|
==============================================================
|
||||||
|
|
||||||
overcommit_memory:
|
overcommit_memory:
|
||||||
|
|
||||||
This value contains a flag that enables memory overcommitment.
|
This value contains a flag that enables memory overcommitment.
|
||||||
|
|
125
Documentation/video4linux/pxa_camera.txt
Normal file
125
Documentation/video4linux/pxa_camera.txt
Normal file
|
@ -0,0 +1,125 @@
|
||||||
|
PXA-Camera Host Driver
|
||||||
|
======================
|
||||||
|
|
||||||
|
Constraints
|
||||||
|
-----------
|
||||||
|
a) Image size for YUV422P format
|
||||||
|
All YUV422P images are enforced to have width x height % 16 = 0.
|
||||||
|
This is due to DMA constraints, which transfers only planes of 8 byte
|
||||||
|
multiples.
|
||||||
|
|
||||||
|
|
||||||
|
Global video workflow
|
||||||
|
---------------------
|
||||||
|
a) QCI stopped
|
||||||
|
Initialy, the QCI interface is stopped.
|
||||||
|
When a buffer is queued (pxa_videobuf_ops->buf_queue), the QCI starts.
|
||||||
|
|
||||||
|
b) QCI started
|
||||||
|
More buffers can be queued while the QCI is started without halting the
|
||||||
|
capture. The new buffers are "appended" at the tail of the DMA chain, and
|
||||||
|
smoothly captured one frame after the other.
|
||||||
|
|
||||||
|
Once a buffer is filled in the QCI interface, it is marked as "DONE" and
|
||||||
|
removed from the active buffers list. It can be then requeud or dequeued by
|
||||||
|
userland application.
|
||||||
|
|
||||||
|
Once the last buffer is filled in, the QCI interface stops.
|
||||||
|
|
||||||
|
|
||||||
|
DMA usage
|
||||||
|
---------
|
||||||
|
a) DMA flow
|
||||||
|
- first buffer queued for capture
|
||||||
|
Once a first buffer is queued for capture, the QCI is started, but data
|
||||||
|
transfer is not started. On "End Of Frame" interrupt, the irq handler
|
||||||
|
starts the DMA chain.
|
||||||
|
- capture of one videobuffer
|
||||||
|
The DMA chain starts transfering data into videobuffer RAM pages.
|
||||||
|
When all pages are transfered, the DMA irq is raised on "ENDINTR" status
|
||||||
|
- finishing one videobuffer
|
||||||
|
The DMA irq handler marks the videobuffer as "done", and removes it from
|
||||||
|
the active running queue
|
||||||
|
Meanwhile, the next videobuffer (if there is one), is transfered by DMA
|
||||||
|
- finishing the last videobuffer
|
||||||
|
On the DMA irq of the last videobuffer, the QCI is stopped.
|
||||||
|
|
||||||
|
b) DMA prepared buffer will have this structure
|
||||||
|
|
||||||
|
+------------+-----+---------------+-----------------+
|
||||||
|
| desc-sg[0] | ... | desc-sg[last] | finisher/linker |
|
||||||
|
+------------+-----+---------------+-----------------+
|
||||||
|
|
||||||
|
This structure is pointed by dma->sg_cpu.
|
||||||
|
The descriptors are used as follows :
|
||||||
|
- desc-sg[i]: i-th descriptor, transfering the i-th sg
|
||||||
|
element to the video buffer scatter gather
|
||||||
|
- finisher: has ddadr=DADDR_STOP, dcmd=ENDIRQEN
|
||||||
|
- linker: has ddadr= desc-sg[0] of next video buffer, dcmd=0
|
||||||
|
|
||||||
|
For the next schema, let's assume d0=desc-sg[0] .. dN=desc-sg[N],
|
||||||
|
"f" stands for finisher and "l" for linker.
|
||||||
|
A typical running chain is :
|
||||||
|
|
||||||
|
Videobuffer 1 Videobuffer 2
|
||||||
|
+---------+----+---+ +----+----+----+---+
|
||||||
|
| d0 | .. | dN | l | | d0 | .. | dN | f |
|
||||||
|
+---------+----+-|-+ ^----+----+----+---+
|
||||||
|
| |
|
||||||
|
+----+
|
||||||
|
|
||||||
|
After the chaining is finished, the chain looks like :
|
||||||
|
|
||||||
|
Videobuffer 1 Videobuffer 2 Videobuffer 3
|
||||||
|
+---------+----+---+ +----+----+----+---+ +----+----+----+---+
|
||||||
|
| d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f |
|
||||||
|
+---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+
|
||||||
|
| | | |
|
||||||
|
+----+ +----+
|
||||||
|
new_link
|
||||||
|
|
||||||
|
c) DMA hot chaining timeslice issue
|
||||||
|
|
||||||
|
As DMA chaining is done while DMA _is_ running, the linking may be done
|
||||||
|
while the DMA jumps from one Videobuffer to another. On the schema, that
|
||||||
|
would be a problem if the following sequence is encountered :
|
||||||
|
|
||||||
|
- DMA chain is Videobuffer1 + Videobuffer2
|
||||||
|
- pxa_videobuf_queue() is called to queue Videobuffer3
|
||||||
|
- DMA controller finishes Videobuffer2, and DMA stops
|
||||||
|
=>
|
||||||
|
Videobuffer 1 Videobuffer 2
|
||||||
|
+---------+----+---+ +----+----+----+---+
|
||||||
|
| d0 | .. | dN | l | | d0 | .. | dN | f |
|
||||||
|
+---------+----+-|-+ ^----+----+----+-^-+
|
||||||
|
| | |
|
||||||
|
+----+ +-- DMA DDADR loads DDADR_STOP
|
||||||
|
|
||||||
|
- pxa_dma_add_tail_buf() is called, the Videobuffer2 "finisher" is
|
||||||
|
replaced by a "linker" to Videobuffer3 (creation of new_link)
|
||||||
|
- pxa_videobuf_queue() finishes
|
||||||
|
- the DMA irq handler is called, which terminates Videobuffer2
|
||||||
|
- Videobuffer3 capture is not scheduled on DMA chain (as it stopped !!!)
|
||||||
|
|
||||||
|
Videobuffer 1 Videobuffer 2 Videobuffer 3
|
||||||
|
+---------+----+---+ +----+----+----+---+ +----+----+----+---+
|
||||||
|
| d0 | .. | dN | l | | d0 | .. | dN | l | | d0 | .. | dN | f |
|
||||||
|
+---------+----+-|-+ ^----+----+----+-|-+ ^----+----+----+---+
|
||||||
|
| | | |
|
||||||
|
+----+ +----+
|
||||||
|
new_link
|
||||||
|
DMA DDADR still is DDADR_STOP
|
||||||
|
|
||||||
|
- pxa_camera_check_link_miss() is called
|
||||||
|
This checks if the DMA is finished and a buffer is still on the
|
||||||
|
pcdev->capture list. If that's the case, the capture will be restarted,
|
||||||
|
and Videobuffer3 is scheduled on DMA chain.
|
||||||
|
- the DMA irq handler finishes
|
||||||
|
|
||||||
|
Note: if DMA stops just after pxa_camera_check_link_miss() reads DDADR()
|
||||||
|
value, we have the guarantee that the DMA irq handler will be called back
|
||||||
|
when the DMA will finish the buffer, and pxa_camera_check_link_miss() will
|
||||||
|
be called again, to reschedule Videobuffer3.
|
||||||
|
|
||||||
|
--
|
||||||
|
Author: Robert Jarzmik <robert.jarzmik@free.fr>
|
|
@ -90,7 +90,7 @@ up before calling v4l2_device_register then it will be untouched. If dev is
|
||||||
NULL, then you *must* setup v4l2_dev->name before calling v4l2_device_register.
|
NULL, then you *must* setup v4l2_dev->name before calling v4l2_device_register.
|
||||||
|
|
||||||
The first 'dev' argument is normally the struct device pointer of a pci_dev,
|
The first 'dev' argument is normally the struct device pointer of a pci_dev,
|
||||||
usb_device or platform_device. It is rare for dev to be NULL, but it happens
|
usb_interface or platform_device. It is rare for dev to be NULL, but it happens
|
||||||
with ISA devices or when one device creates multiple PCI devices, thus making
|
with ISA devices or when one device creates multiple PCI devices, thus making
|
||||||
it impossible to associate v4l2_dev with a particular parent.
|
it impossible to associate v4l2_dev with a particular parent.
|
||||||
|
|
||||||
|
@ -351,17 +351,6 @@ And this to go from an i2c_client to a v4l2_subdev struct:
|
||||||
|
|
||||||
struct v4l2_subdev *sd = i2c_get_clientdata(client);
|
struct v4l2_subdev *sd = i2c_get_clientdata(client);
|
||||||
|
|
||||||
Finally you need to make a command function to make driver->command()
|
|
||||||
call the right subdev_ops functions:
|
|
||||||
|
|
||||||
static int subdev_command(struct i2c_client *client, unsigned cmd, void *arg)
|
|
||||||
{
|
|
||||||
return v4l2_subdev_command(i2c_get_clientdata(client), cmd, arg);
|
|
||||||
}
|
|
||||||
|
|
||||||
If driver->command is never used then you can leave this out. Eventually the
|
|
||||||
driver->command usage should be removed from v4l.
|
|
||||||
|
|
||||||
Make sure to call v4l2_device_unregister_subdev(sd) when the remove() callback
|
Make sure to call v4l2_device_unregister_subdev(sd) when the remove() callback
|
||||||
is called. This will unregister the sub-device from the bridge driver. It is
|
is called. This will unregister the sub-device from the bridge driver. It is
|
||||||
safe to call this even if the sub-device was never registered.
|
safe to call this even if the sub-device was never registered.
|
||||||
|
@ -375,14 +364,12 @@ from the remove() callback ensures that this is always done correctly.
|
||||||
|
|
||||||
The bridge driver also has some helper functions it can use:
|
The bridge driver also has some helper functions it can use:
|
||||||
|
|
||||||
struct v4l2_subdev *sd = v4l2_i2c_new_subdev(adapter, "module_foo", "chipid", 0x36);
|
struct v4l2_subdev *sd = v4l2_i2c_new_subdev(v4l2_dev, adapter,
|
||||||
|
"module_foo", "chipid", 0x36);
|
||||||
|
|
||||||
This loads the given module (can be NULL if no module needs to be loaded) and
|
This loads the given module (can be NULL if no module needs to be loaded) and
|
||||||
calls i2c_new_device() with the given i2c_adapter and chip/address arguments.
|
calls i2c_new_device() with the given i2c_adapter and chip/address arguments.
|
||||||
If all goes well, then it registers the subdev with the v4l2_device. It gets
|
If all goes well, then it registers the subdev with the v4l2_device.
|
||||||
the v4l2_device by calling i2c_get_adapdata(adapter), so you should make sure
|
|
||||||
to call i2c_set_adapdata(adapter, v4l2_device) when you setup the i2c_adapter
|
|
||||||
in your driver.
|
|
||||||
|
|
||||||
You can also use v4l2_i2c_new_probed_subdev() which is very similar to
|
You can also use v4l2_i2c_new_probed_subdev() which is very similar to
|
||||||
v4l2_i2c_new_subdev(), except that it has an array of possible I2C addresses
|
v4l2_i2c_new_subdev(), except that it has an array of possible I2C addresses
|
||||||
|
|
1596
MAINTAINERS
1596
MAINTAINERS
File diff suppressed because it is too large
Load diff
12
Makefile
12
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 29
|
SUBLEVEL = 30
|
||||||
EXTRAVERSION =
|
EXTRAVERSION = -rc1
|
||||||
NAME = Temporary Tasmanian Devil
|
NAME = Temporary Tasmanian Devil
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -572,7 +572,7 @@ KBUILD_CFLAGS += $(call cc-option,-Wdeclaration-after-statement,)
|
||||||
# disable pointer signed / unsigned warnings in gcc 4.0
|
# disable pointer signed / unsigned warnings in gcc 4.0
|
||||||
KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
|
KBUILD_CFLAGS += $(call cc-option,-Wno-pointer-sign,)
|
||||||
|
|
||||||
# disable invalid "can't wrap" optimzations for signed / pointers
|
# disable invalid "can't wrap" optimizations for signed / pointers
|
||||||
KBUILD_CFLAGS += $(call cc-option,-fwrapv)
|
KBUILD_CFLAGS += $(call cc-option,-fwrapv)
|
||||||
|
|
||||||
# revert to pre-gcc-4.4 behaviour of .eh_frame
|
# revert to pre-gcc-4.4 behaviour of .eh_frame
|
||||||
|
@ -602,6 +602,10 @@ LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
|
||||||
LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||||
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
||||||
|
LDFLAGS_vmlinux += -X
|
||||||
|
endif
|
||||||
|
|
||||||
# Default kernel image to build when no specific target is given.
|
# Default kernel image to build when no specific target is given.
|
||||||
# KBUILD_IMAGE may be overruled on the command line or
|
# KBUILD_IMAGE may be overruled on the command line or
|
||||||
# set in the environment
|
# set in the environment
|
||||||
|
@ -1592,5 +1596,5 @@ PHONY += FORCE
|
||||||
FORCE:
|
FORCE:
|
||||||
|
|
||||||
# Declare the contents of the .PHONY variable as phony. We keep that
|
# Declare the contents of the .PHONY variable as phony. We keep that
|
||||||
# information in a variable se we can use it in if_changed and friends.
|
# information in a variable so we can use it in if_changed and friends.
|
||||||
.PHONY: $(PHONY)
|
.PHONY: $(PHONY)
|
||||||
|
|
|
@ -109,3 +109,6 @@ config HAVE_CLK
|
||||||
|
|
||||||
config HAVE_DMA_API_DEBUG
|
config HAVE_DMA_API_DEBUG
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config HAVE_DEFAULT_NO_SPIN_MUTEXES
|
||||||
|
bool
|
||||||
|
|
|
@ -1183,7 +1183,11 @@ CONFIG_RTC_INTF_DEV=y
|
||||||
CONFIG_RTC_DRV_SA1100=y
|
CONFIG_RTC_DRV_SA1100=y
|
||||||
# CONFIG_RTC_DRV_PXA is not set
|
# CONFIG_RTC_DRV_PXA is not set
|
||||||
# CONFIG_DMADEVICES is not set
|
# CONFIG_DMADEVICES is not set
|
||||||
# CONFIG_REGULATOR is not set
|
CONFIG_REGULATOR=y
|
||||||
|
# CONFIG_REGULATOR_DEBUG is not set
|
||||||
|
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||||
|
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
||||||
|
CONFIG_REGULATOR_BQ24022=y
|
||||||
# CONFIG_UIO is not set
|
# CONFIG_UIO is not set
|
||||||
# CONFIG_STAGING is not set
|
# CONFIG_STAGING is not set
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,7 @@
|
||||||
#define SZ_4K 0x00001000
|
#define SZ_4K 0x00001000
|
||||||
#define SZ_8K 0x00002000
|
#define SZ_8K 0x00002000
|
||||||
#define SZ_16K 0x00004000
|
#define SZ_16K 0x00004000
|
||||||
|
#define SZ_32K 0x00008000
|
||||||
#define SZ_64K 0x00010000
|
#define SZ_64K 0x00010000
|
||||||
#define SZ_128K 0x00020000
|
#define SZ_128K 0x00020000
|
||||||
#define SZ_256K 0x00040000
|
#define SZ_256K 0x00040000
|
||||||
|
|
|
@ -87,7 +87,7 @@ extern void __init at91_add_device_eth(struct at91_eth_data *data);
|
||||||
/* USB Host */
|
/* USB Host */
|
||||||
struct at91_usbh_data {
|
struct at91_usbh_data {
|
||||||
u8 ports; /* number of ports on root hub */
|
u8 ports; /* number of ports on root hub */
|
||||||
u8 vbus_pin[]; /* port power-control pin */
|
u8 vbus_pin[2]; /* port power-control pin */
|
||||||
};
|
};
|
||||||
extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
|
extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
|
||||||
|
|
||||||
|
|
|
@ -118,7 +118,7 @@ static struct resource ide_resources[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 ide_dma_mask = DMA_32BIT_MASK;
|
static u64 ide_dma_mask = DMA_BIT_MASK(32);
|
||||||
|
|
||||||
static struct platform_device ide_dev = {
|
static struct platform_device ide_dev = {
|
||||||
.name = "palm_bk3710",
|
.name = "palm_bk3710",
|
||||||
|
@ -127,7 +127,7 @@ static struct platform_device ide_dev = {
|
||||||
.num_resources = ARRAY_SIZE(ide_resources),
|
.num_resources = ARRAY_SIZE(ide_resources),
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &ide_dma_mask,
|
.dma_mask = &ide_dma_mask,
|
||||||
.coherent_dma_mask = DMA_32BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
80
arch/arm/mach-davinci/include/mach/nand.h
Normal file
80
arch/arm/mach-davinci/include/mach/nand.h
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
/*
|
||||||
|
* mach-davinci/nand.h
|
||||||
|
*
|
||||||
|
* Copyright © 2006 Texas Instruments.
|
||||||
|
*
|
||||||
|
* Ported to 2.6.23 Copyright © 2008 by
|
||||||
|
* Sander Huijsen <Shuijsen@optelecom-nkf.com>
|
||||||
|
* Troy Kisky <troy.kisky@boundarydevices.com>
|
||||||
|
* Dirk Behme <Dirk.Behme@gmail.com>
|
||||||
|
*
|
||||||
|
* --------------------------------------------------------------------------
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation; either version 2 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ARCH_ARM_DAVINCI_NAND_H
|
||||||
|
#define __ARCH_ARM_DAVINCI_NAND_H
|
||||||
|
|
||||||
|
#include <linux/mtd/nand.h>
|
||||||
|
|
||||||
|
#define NRCSR_OFFSET 0x00
|
||||||
|
#define AWCCR_OFFSET 0x04
|
||||||
|
#define A1CR_OFFSET 0x10
|
||||||
|
#define NANDFCR_OFFSET 0x60
|
||||||
|
#define NANDFSR_OFFSET 0x64
|
||||||
|
#define NANDF1ECC_OFFSET 0x70
|
||||||
|
|
||||||
|
/* 4-bit ECC syndrome registers */
|
||||||
|
#define NAND_4BIT_ECC_LOAD_OFFSET 0xbc
|
||||||
|
#define NAND_4BIT_ECC1_OFFSET 0xc0
|
||||||
|
#define NAND_4BIT_ECC2_OFFSET 0xc4
|
||||||
|
#define NAND_4BIT_ECC3_OFFSET 0xc8
|
||||||
|
#define NAND_4BIT_ECC4_OFFSET 0xcc
|
||||||
|
#define NAND_ERR_ADD1_OFFSET 0xd0
|
||||||
|
#define NAND_ERR_ADD2_OFFSET 0xd4
|
||||||
|
#define NAND_ERR_ERRVAL1_OFFSET 0xd8
|
||||||
|
#define NAND_ERR_ERRVAL2_OFFSET 0xdc
|
||||||
|
|
||||||
|
/* NOTE: boards don't need to use these address bits
|
||||||
|
* for ALE/CLE unless they support booting from NAND.
|
||||||
|
* They're used unless platform data overrides them.
|
||||||
|
*/
|
||||||
|
#define MASK_ALE 0x08
|
||||||
|
#define MASK_CLE 0x10
|
||||||
|
|
||||||
|
struct davinci_nand_pdata { /* platform_data */
|
||||||
|
uint32_t mask_ale;
|
||||||
|
uint32_t mask_cle;
|
||||||
|
|
||||||
|
/* for packages using two chipselects */
|
||||||
|
uint32_t mask_chipsel;
|
||||||
|
|
||||||
|
/* board's default static partition info */
|
||||||
|
struct mtd_partition *parts;
|
||||||
|
unsigned nr_parts;
|
||||||
|
|
||||||
|
/* none == NAND_ECC_NONE (strongly *not* advised!!)
|
||||||
|
* soft == NAND_ECC_SOFT
|
||||||
|
* 1-bit == NAND_ECC_HW
|
||||||
|
* 4-bit == NAND_ECC_HW_SYNDROME (not on all chips)
|
||||||
|
*/
|
||||||
|
nand_ecc_modes_t ecc_mode;
|
||||||
|
|
||||||
|
/* e.g. NAND_BUSWIDTH_16 or NAND_USE_FLASH_BBT */
|
||||||
|
unsigned options;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ARCH_ARM_DAVINCI_NAND_H */
|
|
@ -64,7 +64,7 @@ static struct resource usb_resources[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 usb_dmamask = DMA_32BIT_MASK;
|
static u64 usb_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
||||||
static struct platform_device usb_dev = {
|
static struct platform_device usb_dev = {
|
||||||
.name = "musb_hdrc",
|
.name = "musb_hdrc",
|
||||||
|
@ -72,7 +72,7 @@ static struct platform_device usb_dev = {
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &usb_data,
|
.platform_data = &usb_data,
|
||||||
.dma_mask = &usb_dmamask,
|
.dma_mask = &usb_dmamask,
|
||||||
.coherent_dma_mask = DMA_32BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
.resource = usb_resources,
|
.resource = usb_resources,
|
||||||
.num_resources = ARRAY_SIZE(usb_resources),
|
.num_resources = ARRAY_SIZE(usb_resources),
|
||||||
|
|
|
@ -307,7 +307,7 @@ static struct resource iop13xx_adma_2_resources[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 iop13xx_adma_dmamask = DMA_64BIT_MASK;
|
static u64 iop13xx_adma_dmamask = DMA_BIT_MASK(64);
|
||||||
static struct iop_adma_platform_data iop13xx_adma_0_data = {
|
static struct iop_adma_platform_data iop13xx_adma_0_data = {
|
||||||
.hw_id = 0,
|
.hw_id = 0,
|
||||||
.pool_size = PAGE_SIZE,
|
.pool_size = PAGE_SIZE,
|
||||||
|
@ -331,7 +331,7 @@ static struct platform_device iop13xx_adma_0_channel = {
|
||||||
.resource = iop13xx_adma_0_resources,
|
.resource = iop13xx_adma_0_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop13xx_adma_dmamask,
|
.dma_mask = &iop13xx_adma_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *) &iop13xx_adma_0_data,
|
.platform_data = (void *) &iop13xx_adma_0_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -343,7 +343,7 @@ static struct platform_device iop13xx_adma_1_channel = {
|
||||||
.resource = iop13xx_adma_1_resources,
|
.resource = iop13xx_adma_1_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop13xx_adma_dmamask,
|
.dma_mask = &iop13xx_adma_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *) &iop13xx_adma_1_data,
|
.platform_data = (void *) &iop13xx_adma_1_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -355,7 +355,7 @@ static struct platform_device iop13xx_adma_2_channel = {
|
||||||
.resource = iop13xx_adma_2_resources,
|
.resource = iop13xx_adma_2_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop13xx_adma_dmamask,
|
.dma_mask = &iop13xx_adma_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *) &iop13xx_adma_2_data,
|
.platform_data = (void *) &iop13xx_adma_2_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -151,7 +151,7 @@ static struct resource iop13xx_tpmi_3_resources[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
u64 iop13xx_tpmi_mask = DMA_64BIT_MASK;
|
u64 iop13xx_tpmi_mask = DMA_BIT_MASK(64);
|
||||||
static struct platform_device iop13xx_tpmi_0_device = {
|
static struct platform_device iop13xx_tpmi_0_device = {
|
||||||
.name = "iop-tpmi",
|
.name = "iop-tpmi",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
|
@ -159,7 +159,7 @@ static struct platform_device iop13xx_tpmi_0_device = {
|
||||||
.resource = iop13xx_tpmi_0_resources,
|
.resource = iop13xx_tpmi_0_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop13xx_tpmi_mask,
|
.dma_mask = &iop13xx_tpmi_mask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -170,7 +170,7 @@ static struct platform_device iop13xx_tpmi_1_device = {
|
||||||
.resource = iop13xx_tpmi_1_resources,
|
.resource = iop13xx_tpmi_1_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop13xx_tpmi_mask,
|
.dma_mask = &iop13xx_tpmi_mask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ static struct platform_device iop13xx_tpmi_2_device = {
|
||||||
.resource = iop13xx_tpmi_2_resources,
|
.resource = iop13xx_tpmi_2_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop13xx_tpmi_mask,
|
.dma_mask = &iop13xx_tpmi_mask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -192,7 +192,7 @@ static struct platform_device iop13xx_tpmi_3_device = {
|
||||||
.resource = iop13xx_tpmi_3_resources,
|
.resource = iop13xx_tpmi_3_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop13xx_tpmi_mask,
|
.dma_mask = &iop13xx_tpmi_mask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -508,7 +508,7 @@ static struct mv_xor_platform_shared_data kirkwood_xor_shared_data = {
|
||||||
.dram = &kirkwood_mbus_dram_info,
|
.dram = &kirkwood_mbus_dram_info,
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 kirkwood_xor_dmamask = DMA_32BIT_MASK;
|
static u64 kirkwood_xor_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
||||||
|
|
||||||
/*****************************************************************************
|
/*****************************************************************************
|
||||||
|
@ -559,7 +559,7 @@ static struct platform_device kirkwood_xor00_channel = {
|
||||||
.resource = kirkwood_xor00_resources,
|
.resource = kirkwood_xor00_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &kirkwood_xor_dmamask,
|
.dma_mask = &kirkwood_xor_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *)&kirkwood_xor00_data,
|
.platform_data = (void *)&kirkwood_xor00_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -585,7 +585,7 @@ static struct platform_device kirkwood_xor01_channel = {
|
||||||
.resource = kirkwood_xor01_resources,
|
.resource = kirkwood_xor01_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &kirkwood_xor_dmamask,
|
.dma_mask = &kirkwood_xor_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *)&kirkwood_xor01_data,
|
.platform_data = (void *)&kirkwood_xor01_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -657,7 +657,7 @@ static struct platform_device kirkwood_xor10_channel = {
|
||||||
.resource = kirkwood_xor10_resources,
|
.resource = kirkwood_xor10_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &kirkwood_xor_dmamask,
|
.dma_mask = &kirkwood_xor_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *)&kirkwood_xor10_data,
|
.platform_data = (void *)&kirkwood_xor10_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -683,7 +683,7 @@ static struct platform_device kirkwood_xor11_channel = {
|
||||||
.resource = kirkwood_xor11_resources,
|
.resource = kirkwood_xor11_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &kirkwood_xor_dmamask,
|
.dma_mask = &kirkwood_xor_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *)&kirkwood_xor11_data,
|
.platform_data = (void *)&kirkwood_xor11_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -6,6 +6,9 @@
|
||||||
|
|
||||||
obj-y += generic.o clock.o devices.o
|
obj-y += generic.o clock.o devices.o
|
||||||
|
|
||||||
|
# Support for CMOS sensor interface
|
||||||
|
obj-$(CONFIG_MX1_VIDEO) += ksym_mx1.o mx1_camera_fiq.o
|
||||||
|
|
||||||
# Specific board support
|
# Specific board support
|
||||||
obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o
|
obj-$(CONFIG_ARCH_MX1ADS) += mx1ads.o
|
||||||
obj-$(CONFIG_MACH_SCB9328) += scb9328.o
|
obj-$(CONFIG_MACH_SCB9328) += scb9328.o
|
|
@ -44,7 +44,7 @@ static struct resource imx_csi_resources[] = {
|
||||||
static u64 imx_csi_dmamask = 0xffffffffUL;
|
static u64 imx_csi_dmamask = 0xffffffffUL;
|
||||||
|
|
||||||
struct platform_device imx_csi_device = {
|
struct platform_device imx_csi_device = {
|
||||||
.name = "imx-csi",
|
.name = "mx1-camera",
|
||||||
.id = 0, /* This is used to put cameras on this interface */
|
.id = 0, /* This is used to put cameras on this interface */
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &imx_csi_dmamask,
|
.dma_mask = &imx_csi_dmamask,
|
||||||
|
|
18
arch/arm/mach-mx1/ksym_mx1.c
Normal file
18
arch/arm/mach-mx1/ksym_mx1.c
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
/*
|
||||||
|
* Exported ksyms of ARCH_MX1
|
||||||
|
*
|
||||||
|
* Copyright (C) 2008, Darius Augulis <augulis.darius@gmail.com>
|
||||||
|
*
|
||||||
|
* 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/platform_device.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
#include <mach/mx1_camera.h>
|
||||||
|
|
||||||
|
/* IMX camera FIQ handler */
|
||||||
|
EXPORT_SYMBOL(mx1_camera_sof_fiq_start);
|
||||||
|
EXPORT_SYMBOL(mx1_camera_sof_fiq_end);
|
35
arch/arm/mach-mx1/mx1_camera_fiq.S
Normal file
35
arch/arm/mach-mx1/mx1_camera_fiq.S
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2008 Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
|
||||||
|
*
|
||||||
|
* Based on linux/arch/arm/lib/floppydma.S
|
||||||
|
* Copyright (C) 1995, 1996 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.
|
||||||
|
*/
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <asm/assembler.h>
|
||||||
|
|
||||||
|
.text
|
||||||
|
.global mx1_camera_sof_fiq_end
|
||||||
|
.global mx1_camera_sof_fiq_start
|
||||||
|
mx1_camera_sof_fiq_start:
|
||||||
|
@ enable dma
|
||||||
|
ldr r12, [r9]
|
||||||
|
orr r12, r12, #0x00000001
|
||||||
|
str r12, [r9]
|
||||||
|
@ unmask DMA interrupt
|
||||||
|
ldr r12, [r8]
|
||||||
|
bic r12, r12, r13
|
||||||
|
str r12, [r8]
|
||||||
|
@ disable SOF interrupt
|
||||||
|
ldr r12, [r10]
|
||||||
|
bic r12, r12, #0x00010000
|
||||||
|
str r12, [r10]
|
||||||
|
@ clear SOF flag
|
||||||
|
mov r12, #0x00010000
|
||||||
|
str r12, [r11]
|
||||||
|
@ return from FIQ
|
||||||
|
subs pc, lr, #4
|
||||||
|
mx1_camera_sof_fiq_end:
|
|
@ -533,7 +533,7 @@ static struct clk_lookup lookups[] __initdata = {
|
||||||
_REGISTER_CLOCK(NULL, "kpp", kpp_clk)
|
_REGISTER_CLOCK(NULL, "kpp", kpp_clk)
|
||||||
_REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1)
|
_REGISTER_CLOCK("fsl-usb2-udc", "usb", usb_clk1)
|
||||||
_REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2)
|
_REGISTER_CLOCK("fsl-usb2-udc", "usb_ahb", usb_clk2)
|
||||||
_REGISTER_CLOCK("mx3-camera.0", "csi", csi_clk)
|
_REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk)
|
||||||
_REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk)
|
_REGISTER_CLOCK("imx-uart.0", NULL, uart1_clk)
|
||||||
_REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk)
|
_REGISTER_CLOCK("imx-uart.1", NULL, uart2_clk)
|
||||||
_REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk)
|
_REGISTER_CLOCK("imx-uart.2", NULL, uart3_clk)
|
||||||
|
|
|
@ -590,27 +590,28 @@ static void omap1_init_ext_clk(struct clk * clk)
|
||||||
static int omap1_clk_enable(struct clk *clk)
|
static int omap1_clk_enable(struct clk *clk)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
if (clk->usecount++ == 0) {
|
|
||||||
if (likely(clk->parent)) {
|
|
||||||
ret = omap1_clk_enable(clk->parent);
|
|
||||||
|
|
||||||
if (unlikely(ret != 0)) {
|
if (clk->usecount++ == 0) {
|
||||||
clk->usecount--;
|
if (clk->parent) {
|
||||||
return ret;
|
ret = omap1_clk_enable(clk->parent);
|
||||||
}
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
|
||||||
if (clk->flags & CLOCK_NO_IDLE_PARENT)
|
if (clk->flags & CLOCK_NO_IDLE_PARENT)
|
||||||
omap1_clk_deny_idle(clk->parent);
|
omap1_clk_deny_idle(clk->parent);
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = clk->ops->enable(clk);
|
ret = clk->ops->enable(clk);
|
||||||
|
if (ret) {
|
||||||
if (unlikely(ret != 0) && clk->parent) {
|
if (clk->parent)
|
||||||
omap1_clk_disable(clk->parent);
|
omap1_clk_disable(clk->parent);
|
||||||
clk->usecount--;
|
goto err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
err:
|
||||||
|
clk->usecount--;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -463,7 +463,7 @@ static struct platform_device orion5x_xor_shared = {
|
||||||
.resource = orion5x_xor_shared_resources,
|
.resource = orion5x_xor_shared_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 orion5x_xor_dmamask = DMA_32BIT_MASK;
|
static u64 orion5x_xor_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
||||||
static struct resource orion5x_xor0_resources[] = {
|
static struct resource orion5x_xor0_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
|
@ -486,7 +486,7 @@ static struct platform_device orion5x_xor0_channel = {
|
||||||
.resource = orion5x_xor0_resources,
|
.resource = orion5x_xor0_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &orion5x_xor_dmamask,
|
.dma_mask = &orion5x_xor_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *)&orion5x_xor0_data,
|
.platform_data = (void *)&orion5x_xor0_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -512,7 +512,7 @@ static struct platform_device orion5x_xor1_channel = {
|
||||||
.resource = orion5x_xor1_resources,
|
.resource = orion5x_xor1_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &orion5x_xor_dmamask,
|
.dma_mask = &orion5x_xor_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *)&orion5x_xor1_data,
|
.platform_data = (void *)&orion5x_xor1_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
@ -343,6 +343,15 @@ config ARCH_PXA_PALM
|
||||||
bool "PXA based Palm PDAs"
|
bool "PXA based Palm PDAs"
|
||||||
select HAVE_PWM
|
select HAVE_PWM
|
||||||
|
|
||||||
|
config MACH_PALMTE2
|
||||||
|
bool "Palm Tungsten|E2"
|
||||||
|
default y
|
||||||
|
depends on ARCH_PXA_PALM
|
||||||
|
select PXA25x
|
||||||
|
help
|
||||||
|
Say Y here if you intend to run this kernel on a Palm Tungsten|E2
|
||||||
|
handheld computer.
|
||||||
|
|
||||||
config MACH_PALMT5
|
config MACH_PALMT5
|
||||||
bool "Palm Tungsten|T5"
|
bool "Palm Tungsten|T5"
|
||||||
default y
|
default y
|
||||||
|
|
|
@ -57,6 +57,7 @@ obj-$(CONFIG_MACH_E740) += e740.o
|
||||||
obj-$(CONFIG_MACH_E750) += e750.o
|
obj-$(CONFIG_MACH_E750) += e750.o
|
||||||
obj-$(CONFIG_MACH_E400) += e400.o
|
obj-$(CONFIG_MACH_E400) += e400.o
|
||||||
obj-$(CONFIG_MACH_E800) += e800.o
|
obj-$(CONFIG_MACH_E800) += e800.o
|
||||||
|
obj-$(CONFIG_MACH_PALMTE2) += palmte2.o
|
||||||
obj-$(CONFIG_MACH_PALMT5) += palmt5.o
|
obj-$(CONFIG_MACH_PALMT5) += palmt5.o
|
||||||
obj-$(CONFIG_MACH_PALMTX) += palmtx.o
|
obj-$(CONFIG_MACH_PALMTX) += palmtx.o
|
||||||
obj-$(CONFIG_MACH_PALMLD) += palmld.o
|
obj-$(CONFIG_MACH_PALMLD) += palmld.o
|
||||||
|
|
|
@ -121,7 +121,7 @@ static inline void cmx2xx_init_dm9000(void) {}
|
||||||
/* UCB1400 touchscreen controller */
|
/* UCB1400 touchscreen controller */
|
||||||
#if defined(CONFIG_TOUCHSCREEN_UCB1400) || defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
|
#if defined(CONFIG_TOUCHSCREEN_UCB1400) || defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
|
||||||
static struct platform_device cmx2xx_ts_device = {
|
static struct platform_device cmx2xx_ts_device = {
|
||||||
.name = "ucb1400_ts",
|
.name = "ucb1400_core",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <net/ax88796.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/sizes.h>
|
#include <asm/sizes.h>
|
||||||
|
@ -32,12 +32,13 @@
|
||||||
|
|
||||||
#if defined(CONFIG_AX88796)
|
#if defined(CONFIG_AX88796)
|
||||||
#define COLIBRI_ETH_IRQ_GPIO mfp_to_gpio(GPIO26_GPIO)
|
#define COLIBRI_ETH_IRQ_GPIO mfp_to_gpio(GPIO26_GPIO)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Asix AX88796 Ethernet
|
* Asix AX88796 Ethernet
|
||||||
*/
|
*/
|
||||||
static struct ax_plat_data colibri_asix_platdata = {
|
static struct ax_plat_data colibri_asix_platdata = {
|
||||||
.flags = AXFLG_MAC_FROMDEV,
|
.flags = 0, /* defined later */
|
||||||
.wordlength = 2
|
.wordlength = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource colibri_asix_resource[] = {
|
static struct resource colibri_asix_resource[] = {
|
||||||
|
@ -49,7 +50,7 @@ static struct resource colibri_asix_resource[] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
.start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||||
.end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
.end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||||
.flags = IORESOURCE_IRQ
|
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -70,8 +71,8 @@ static mfp_cfg_t colibri_pxa300_eth_pin_config[] __initdata = {
|
||||||
|
|
||||||
static void __init colibri_pxa300_init_eth(void)
|
static void __init colibri_pxa300_init_eth(void)
|
||||||
{
|
{
|
||||||
|
colibri_pxa3xx_init_eth(&colibri_asix_platdata);
|
||||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_eth_pin_config));
|
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa300_eth_pin_config));
|
||||||
set_irq_type(gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), IRQ_TYPE_EDGE_FALLING);
|
|
||||||
platform_device_register(&asix_device);
|
platform_device_register(&asix_device);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -15,7 +15,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <net/ax88796.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/sizes.h>
|
#include <asm/sizes.h>
|
||||||
|
@ -38,8 +38,8 @@
|
||||||
* Asix AX88796 Ethernet
|
* Asix AX88796 Ethernet
|
||||||
*/
|
*/
|
||||||
static struct ax_plat_data colibri_asix_platdata = {
|
static struct ax_plat_data colibri_asix_platdata = {
|
||||||
.flags = AXFLG_MAC_FROMDEV,
|
.flags = 0, /* defined later */
|
||||||
.wordlength = 2
|
.wordlength = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct resource colibri_asix_resource[] = {
|
static struct resource colibri_asix_resource[] = {
|
||||||
|
@ -51,7 +51,7 @@ static struct resource colibri_asix_resource[] = {
|
||||||
[1] = {
|
[1] = {
|
||||||
.start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
.start = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||||
.end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
.end = gpio_to_irq(COLIBRI_ETH_IRQ_GPIO),
|
||||||
.flags = IORESOURCE_IRQ
|
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_FALLING,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -72,8 +72,8 @@ static mfp_cfg_t colibri_pxa320_eth_pin_config[] __initdata = {
|
||||||
|
|
||||||
static void __init colibri_pxa320_init_eth(void)
|
static void __init colibri_pxa320_init_eth(void)
|
||||||
{
|
{
|
||||||
|
colibri_pxa3xx_init_eth(&colibri_asix_platdata);
|
||||||
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_eth_pin_config));
|
pxa3xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa320_eth_pin_config));
|
||||||
set_irq_type(gpio_to_irq(COLIBRI_ETH_IRQ_GPIO), IRQ_TYPE_EDGE_FALLING);
|
|
||||||
platform_device_register(&asix_device);
|
platform_device_register(&asix_device);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/etherdevice.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <asm/sizes.h>
|
#include <asm/sizes.h>
|
||||||
|
@ -28,6 +29,40 @@
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
|
|
||||||
|
#if defined(CONFIG_AX88796)
|
||||||
|
#define ETHER_ADDR_LEN 6
|
||||||
|
static u8 ether_mac_addr[ETHER_ADDR_LEN];
|
||||||
|
|
||||||
|
void __init colibri_pxa3xx_init_eth(struct ax_plat_data *plat_data)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
u64 serial = ((u64) system_serial_high << 32) | system_serial_low;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* If the bootloader passed in a serial boot tag, which contains a
|
||||||
|
* valid ethernet MAC, pass it to the interface. Toradex ships the
|
||||||
|
* modules with their own bootloader which provides a valid MAC
|
||||||
|
* this way.
|
||||||
|
*/
|
||||||
|
|
||||||
|
for (i = 0; i < ETHER_ADDR_LEN; i++) {
|
||||||
|
ether_mac_addr[i] = serial & 0xff;
|
||||||
|
serial >>= 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_valid_ether_addr(ether_mac_addr)) {
|
||||||
|
plat_data->flags |= AXFLG_MAC_FROMPLATFORM;
|
||||||
|
plat_data->mac_addr = ether_mac_addr;
|
||||||
|
printk(KERN_INFO "%s(): taking MAC from serial boot tag\n",
|
||||||
|
__func__);
|
||||||
|
} else {
|
||||||
|
plat_data->flags |= AXFLG_MAC_FROMDEV;
|
||||||
|
printk(KERN_INFO "%s(): no valid serial boot tag found, "
|
||||||
|
"taking MAC from device\n", __func__);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||||
static int mmc_detect_pin;
|
static int mmc_detect_pin;
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
|
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
|
||||||
static struct gpio_keys_button csb701_buttons[] = {
|
static struct gpio_keys_button csb701_buttons[] = {
|
||||||
{
|
{
|
||||||
.code = 0x7,
|
.code = 0x7,
|
||||||
|
@ -54,6 +56,9 @@ static struct platform_device *devices[] __initdata = {
|
||||||
|
|
||||||
static int __init csb701_init(void)
|
static int __init csb701_init(void)
|
||||||
{
|
{
|
||||||
|
if (!machine_is_csb726())
|
||||||
|
return -ENODEV;
|
||||||
|
|
||||||
return platform_add_devices(devices, ARRAY_SIZE(devices));
|
return platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/irda.h>
|
#include <mach/irda.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
|
#include <mach/audio.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "eseries.h"
|
#include "eseries.h"
|
||||||
|
@ -197,6 +198,7 @@ static void __init e740_init(void)
|
||||||
eseries_get_tmio_gpios();
|
eseries_get_tmio_gpios();
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||||
|
pxa_set_ac97_info(NULL);
|
||||||
e7xx_irda_init();
|
e7xx_irda_init();
|
||||||
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/irda.h>
|
#include <mach/irda.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
|
#include <mach/audio.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "eseries.h"
|
#include "eseries.h"
|
||||||
|
@ -198,6 +199,7 @@ static void __init e750_init(void)
|
||||||
eseries_get_tmio_gpios();
|
eseries_get_tmio_gpios();
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||||
|
pxa_set_ac97_info(NULL);
|
||||||
e7xx_irda_init();
|
e7xx_irda_init();
|
||||||
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <mach/eseries-gpio.h>
|
#include <mach/eseries-gpio.h>
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
|
#include <mach/audio.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "eseries.h"
|
#include "eseries.h"
|
||||||
|
@ -199,6 +200,7 @@ static void __init e800_init(void)
|
||||||
eseries_get_tmio_gpios();
|
eseries_get_tmio_gpios();
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
pxa_set_udc_info(&e800_udc_mach_info);
|
pxa_set_udc_info(&e800_udc_mach_info);
|
||||||
|
pxa_set_ac97_info(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(E800, "Toshiba e800")
|
MACHINE_START(E800, "Toshiba e800")
|
||||||
|
|
|
@ -25,8 +25,10 @@
|
||||||
#include <linux/regulator/machine.h>
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/tdo24m.h>
|
#include <linux/spi/tdo24m.h>
|
||||||
|
#include <linux/spi/libertas_spi.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/apm-emulation.h>
|
#include <linux/apm-emulation.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
|
||||||
#include <media/soc_camera.h>
|
#include <media/soc_camera.h>
|
||||||
|
|
||||||
|
@ -62,6 +64,8 @@
|
||||||
#define GPIO93_CAM_RESET (93)
|
#define GPIO93_CAM_RESET (93)
|
||||||
#define GPIO41_ETHIRQ (41)
|
#define GPIO41_ETHIRQ (41)
|
||||||
#define EM_X270_ETHIRQ IRQ_GPIO(GPIO41_ETHIRQ)
|
#define EM_X270_ETHIRQ IRQ_GPIO(GPIO41_ETHIRQ)
|
||||||
|
#define GPIO115_WLAN_PWEN (115)
|
||||||
|
#define GPIO19_WLAN_STRAP (19)
|
||||||
|
|
||||||
static int mmc_cd;
|
static int mmc_cd;
|
||||||
static int nand_rb;
|
static int nand_rb;
|
||||||
|
@ -159,8 +163,8 @@ static unsigned long common_pin_config[] = {
|
||||||
GPIO57_SSP1_TXD,
|
GPIO57_SSP1_TXD,
|
||||||
|
|
||||||
/* SSP2 */
|
/* SSP2 */
|
||||||
GPIO19_SSP2_SCLK,
|
GPIO19_GPIO, /* SSP2 clock is used as GPIO for Libertas pin-strap */
|
||||||
GPIO14_SSP2_SFRM,
|
GPIO14_GPIO,
|
||||||
GPIO89_SSP2_TXD,
|
GPIO89_SSP2_TXD,
|
||||||
GPIO88_SSP2_RXD,
|
GPIO88_SSP2_RXD,
|
||||||
|
|
||||||
|
@ -648,20 +652,86 @@ static struct tdo24m_platform_data em_x270_tdo24m_pdata = {
|
||||||
.model = TDO35S,
|
.model = TDO35S,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct pxa2xx_spi_master em_x270_spi_2_info = {
|
||||||
|
.num_chipselect = 1,
|
||||||
|
.enable_dma = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct pxa2xx_spi_chip em_x270_libertas_chip = {
|
||||||
|
.rx_threshold = 1,
|
||||||
|
.tx_threshold = 1,
|
||||||
|
.timeout = 1000,
|
||||||
|
};
|
||||||
|
|
||||||
|
static unsigned long em_x270_libertas_pin_config[] = {
|
||||||
|
/* SSP2 */
|
||||||
|
GPIO19_SSP2_SCLK,
|
||||||
|
GPIO14_GPIO,
|
||||||
|
GPIO89_SSP2_TXD,
|
||||||
|
GPIO88_SSP2_RXD,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int em_x270_libertas_setup(struct spi_device *spi)
|
||||||
|
{
|
||||||
|
int err = gpio_request(GPIO115_WLAN_PWEN, "WLAN PWEN");
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
|
gpio_direction_output(GPIO19_WLAN_STRAP, 1);
|
||||||
|
mdelay(100);
|
||||||
|
|
||||||
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(em_x270_libertas_pin_config));
|
||||||
|
|
||||||
|
gpio_direction_output(GPIO115_WLAN_PWEN, 0);
|
||||||
|
mdelay(100);
|
||||||
|
gpio_set_value(GPIO115_WLAN_PWEN, 1);
|
||||||
|
mdelay(100);
|
||||||
|
|
||||||
|
spi->bits_per_word = 16;
|
||||||
|
spi_setup(spi);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int em_x270_libertas_teardown(struct spi_device *spi)
|
||||||
|
{
|
||||||
|
gpio_set_value(GPIO115_WLAN_PWEN, 0);
|
||||||
|
gpio_free(GPIO115_WLAN_PWEN);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct libertas_spi_platform_data em_x270_libertas_pdata = {
|
||||||
|
.use_dummy_writes = 1,
|
||||||
|
.gpio_cs = 14,
|
||||||
|
.setup = em_x270_libertas_setup,
|
||||||
|
.teardown = em_x270_libertas_teardown,
|
||||||
|
};
|
||||||
|
|
||||||
static struct spi_board_info em_x270_spi_devices[] __initdata = {
|
static struct spi_board_info em_x270_spi_devices[] __initdata = {
|
||||||
{
|
{
|
||||||
.modalias = "tdo24m",
|
.modalias = "tdo24m",
|
||||||
.max_speed_hz = 1000000,
|
.max_speed_hz = 1000000,
|
||||||
.bus_num = 1,
|
.bus_num = 1,
|
||||||
.chip_select = 0,
|
.chip_select = 0,
|
||||||
.controller_data = &em_x270_tdo24m_chip,
|
.controller_data = &em_x270_tdo24m_chip,
|
||||||
.platform_data = &em_x270_tdo24m_pdata,
|
.platform_data = &em_x270_tdo24m_pdata,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.modalias = "libertas_spi",
|
||||||
|
.max_speed_hz = 13000000,
|
||||||
|
.bus_num = 2,
|
||||||
|
.irq = IRQ_GPIO(116),
|
||||||
|
.chip_select = 0,
|
||||||
|
.controller_data = &em_x270_libertas_chip,
|
||||||
|
.platform_data = &em_x270_libertas_pdata,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static void __init em_x270_init_spi(void)
|
static void __init em_x270_init_spi(void)
|
||||||
{
|
{
|
||||||
pxa2xx_set_spi_info(1, &em_x270_spi_info);
|
pxa2xx_set_spi_info(1, &em_x270_spi_info);
|
||||||
|
pxa2xx_set_spi_info(2, &em_x270_spi_2_info);
|
||||||
spi_register_board_info(ARRAY_AND_SIZE(em_x270_spi_devices));
|
spi_register_board_info(ARRAY_AND_SIZE(em_x270_spi_devices));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -1,5 +1,8 @@
|
||||||
#ifndef _COLIBRI_H_
|
#ifndef _COLIBRI_H_
|
||||||
#define _COLIBRI_H_
|
#define _COLIBRI_H_
|
||||||
|
|
||||||
|
#include <net/ax88796.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* common settings for all modules
|
* common settings for all modules
|
||||||
*/
|
*/
|
||||||
|
@ -16,6 +19,10 @@ extern void colibri_pxa3xx_init_lcd(int bl_pin);
|
||||||
static inline void colibri_pxa3xx_init_lcd(int) {}
|
static inline void colibri_pxa3xx_init_lcd(int) {}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_AX88796)
|
||||||
|
extern void colibri_pxa3xx_init_eth(struct ax_plat_data *plat_data);
|
||||||
|
#endif
|
||||||
|
|
||||||
/* physical memory regions */
|
/* physical memory regions */
|
||||||
#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */
|
#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#define GPIO22_MAGICIAN_VIBRA_EN 22
|
#define GPIO22_MAGICIAN_VIBRA_EN 22
|
||||||
#define GPIO26_MAGICIAN_GSM_POWER 26
|
#define GPIO26_MAGICIAN_GSM_POWER 26
|
||||||
#define GPIO27_MAGICIAN_USBC_PUEN 27
|
#define GPIO27_MAGICIAN_USBC_PUEN 27
|
||||||
#define GPIO30_MAGICIAN_nCHARGE_EN 30
|
#define GPIO30_MAGICIAN_BQ24022_nCHARGE_EN 30
|
||||||
#define GPIO37_MAGICIAN_KEY_HANGUP 37
|
#define GPIO37_MAGICIAN_KEY_HANGUP 37
|
||||||
#define GPIO38_MAGICIAN_KEY_CONTACTS 38
|
#define GPIO38_MAGICIAN_KEY_CONTACTS 38
|
||||||
#define GPIO40_MAGICIAN_GSM_OUT2 40
|
#define GPIO40_MAGICIAN_GSM_OUT2 40
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
#define EGPIO_MAGICIAN_UNKNOWN_WAVEDEV_DLL MAGICIAN_EGPIO(2, 2)
|
#define EGPIO_MAGICIAN_UNKNOWN_WAVEDEV_DLL MAGICIAN_EGPIO(2, 2)
|
||||||
#define EGPIO_MAGICIAN_FLASH_VPP MAGICIAN_EGPIO(2, 3)
|
#define EGPIO_MAGICIAN_FLASH_VPP MAGICIAN_EGPIO(2, 3)
|
||||||
#define EGPIO_MAGICIAN_BL_POWER2 MAGICIAN_EGPIO(2, 4)
|
#define EGPIO_MAGICIAN_BL_POWER2 MAGICIAN_EGPIO(2, 4)
|
||||||
#define EGPIO_MAGICIAN_CHARGE_EN MAGICIAN_EGPIO(2, 5)
|
#define EGPIO_MAGICIAN_BQ24022_ISET2 MAGICIAN_EGPIO(2, 5)
|
||||||
#define EGPIO_MAGICIAN_GSM_POWER MAGICIAN_EGPIO(2, 7)
|
#define EGPIO_MAGICIAN_GSM_POWER MAGICIAN_EGPIO(2, 7)
|
||||||
|
|
||||||
/* input */
|
/* input */
|
||||||
|
|
|
@ -87,6 +87,7 @@
|
||||||
#define PALMLD_IDE_SIZE 0x00100000
|
#define PALMLD_IDE_SIZE 0x00100000
|
||||||
|
|
||||||
#define PALMLD_PHYS_IO_START 0x40000000
|
#define PALMLD_PHYS_IO_START 0x40000000
|
||||||
|
#define PALMLD_STR_BASE 0xa0200000
|
||||||
|
|
||||||
/* BATTERY */
|
/* BATTERY */
|
||||||
#define PALMLD_BAT_MAX_VOLTAGE 4000 /* 4.00V maximum voltage */
|
#define PALMLD_BAT_MAX_VOLTAGE 4000 /* 4.00V maximum voltage */
|
||||||
|
|
|
@ -59,6 +59,7 @@
|
||||||
/* Various addresses */
|
/* Various addresses */
|
||||||
#define PALMT5_PHYS_RAM_START 0xa0000000
|
#define PALMT5_PHYS_RAM_START 0xa0000000
|
||||||
#define PALMT5_PHYS_IO_START 0x40000000
|
#define PALMT5_PHYS_IO_START 0x40000000
|
||||||
|
#define PALMT5_STR_BASE 0xa0200000
|
||||||
|
|
||||||
/* TOUCHSCREEN */
|
/* TOUCHSCREEN */
|
||||||
#define AC97_LINK_FRAME 21
|
#define AC97_LINK_FRAME 21
|
||||||
|
|
68
arch/arm/mach-pxa/include/mach/palmte2.h
Normal file
68
arch/arm/mach-pxa/include/mach/palmte2.h
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/*
|
||||||
|
* GPIOs and interrupts for Palm Tungsten|E2 Handheld Computer
|
||||||
|
*
|
||||||
|
* Author:
|
||||||
|
* Carlos Eduardo Medaglia Dyonisio <cadu@nerdfeliz.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _INCLUDE_PALMTE2_H_
|
||||||
|
#define _INCLUDE_PALMTE2_H_
|
||||||
|
|
||||||
|
/** HERE ARE GPIOs **/
|
||||||
|
|
||||||
|
/* GPIOs */
|
||||||
|
#define GPIO_NR_PALMTE2_POWER_DETECT 9
|
||||||
|
#define GPIO_NR_PALMTE2_HOTSYNC_BUTTON_N 4
|
||||||
|
#define GPIO_NR_PALMTE2_EARPHONE_DETECT 15
|
||||||
|
|
||||||
|
/* SD/MMC */
|
||||||
|
#define GPIO_NR_PALMTE2_SD_DETECT_N 10
|
||||||
|
#define GPIO_NR_PALMTE2_SD_POWER 55
|
||||||
|
#define GPIO_NR_PALMTE2_SD_READONLY 51
|
||||||
|
|
||||||
|
/* IRDA - disable GPIO connected to SD pin of tranceiver (TFBS4710?) ? */
|
||||||
|
#define GPIO_NR_PALMTE2_IR_DISABLE 48
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
#define GPIO_NR_PALMTE2_USB_DETECT_N 35
|
||||||
|
#define GPIO_NR_PALMTE2_USB_PULLUP 53
|
||||||
|
|
||||||
|
/* LCD/BACKLIGHT */
|
||||||
|
#define GPIO_NR_PALMTE2_BL_POWER 56
|
||||||
|
#define GPIO_NR_PALMTE2_LCD_POWER 37
|
||||||
|
|
||||||
|
/* KEYS */
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_NOTES 5
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_TASKS 7
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_CALENDAR 11
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_CONTACTS 13
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_CENTER 14
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_LEFT 19
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_RIGHT 20
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_DOWN 21
|
||||||
|
#define GPIO_NR_PALMTE2_KEY_UP 22
|
||||||
|
|
||||||
|
/** HERE ARE INIT VALUES **/
|
||||||
|
|
||||||
|
/* BACKLIGHT */
|
||||||
|
#define PALMTE2_MAX_INTENSITY 0xFE
|
||||||
|
#define PALMTE2_DEFAULT_INTENSITY 0x7E
|
||||||
|
#define PALMTE2_LIMIT_MASK 0x7F
|
||||||
|
#define PALMTE2_PRESCALER 0x3F
|
||||||
|
#define PALMTE2_PERIOD_NS 3500
|
||||||
|
|
||||||
|
/* BATTERY */
|
||||||
|
#define PALMTE2_BAT_MAX_VOLTAGE 4000 /* 4.00v current voltage */
|
||||||
|
#define PALMTE2_BAT_MIN_VOLTAGE 3550 /* 3.55v critical voltage */
|
||||||
|
#define PALMTE2_BAT_MAX_CURRENT 0 /* unknokn */
|
||||||
|
#define PALMTE2_BAT_MIN_CURRENT 0 /* unknown */
|
||||||
|
#define PALMTE2_BAT_MAX_CHARGE 1 /* unknown */
|
||||||
|
#define PALMTE2_BAT_MIN_CHARGE 1 /* unknown */
|
||||||
|
#define PALMTE2_MAX_LIFE_MINS 360 /* on-life in minutes */
|
||||||
|
|
||||||
|
#endif
|
|
@ -78,6 +78,8 @@
|
||||||
#define PALMTX_PHYS_RAM_START 0xa0000000
|
#define PALMTX_PHYS_RAM_START 0xa0000000
|
||||||
#define PALMTX_PHYS_IO_START 0x40000000
|
#define PALMTX_PHYS_IO_START 0x40000000
|
||||||
|
|
||||||
|
#define PALMTX_STR_BASE 0xa0200000
|
||||||
|
|
||||||
#define PALMTX_PHYS_FLASH_START PXA_CS0_PHYS /* ChipSelect 0 */
|
#define PALMTX_PHYS_FLASH_START PXA_CS0_PHYS /* ChipSelect 0 */
|
||||||
#define PALMTX_PHYS_NAND_START PXA_CS1_PHYS /* ChipSelect 1 */
|
#define PALMTX_PHYS_NAND_START PXA_CS1_PHYS /* ChipSelect 1 */
|
||||||
|
|
||||||
|
|
|
@ -38,6 +38,7 @@ struct pxa2xx_spi_chip {
|
||||||
u8 dma_burst_size;
|
u8 dma_burst_size;
|
||||||
u32 timeout;
|
u32 timeout;
|
||||||
u8 enable_loopback;
|
u8 enable_loopback;
|
||||||
|
int gpio_cs;
|
||||||
void (*cs_control)(u32 command);
|
void (*cs_control)(u32 command);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -49,6 +49,9 @@ struct pxa3xx_nand_platform_data {
|
||||||
*/
|
*/
|
||||||
int enable_arbiter;
|
int enable_arbiter;
|
||||||
|
|
||||||
|
/* allow platform code to keep OBM/bootloader defined NFC config */
|
||||||
|
int keep_config;
|
||||||
|
|
||||||
const struct mtd_partition *parts;
|
const struct mtd_partition *parts;
|
||||||
unsigned int nr_parts;
|
unsigned int nr_parts;
|
||||||
|
|
||||||
|
|
|
@ -25,6 +25,8 @@
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/pda_power.h>
|
#include <linux/pda_power.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
|
#include <linux/regulator/bq24022.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
#include <linux/usb/gpio_vbus.h>
|
#include <linux/usb/gpio_vbus.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
@ -552,33 +554,7 @@ static struct platform_device gpio_vbus = {
|
||||||
|
|
||||||
static int power_supply_init(struct device *dev)
|
static int power_supply_init(struct device *dev)
|
||||||
{
|
{
|
||||||
int ret;
|
return gpio_request(EGPIO_MAGICIAN_CABLE_STATE_AC, "CABLE_STATE_AC");
|
||||||
|
|
||||||
ret = gpio_request(EGPIO_MAGICIAN_CABLE_STATE_AC, "CABLE_STATE_AC");
|
|
||||||
if (ret)
|
|
||||||
goto err_cs_ac;
|
|
||||||
ret = gpio_request(EGPIO_MAGICIAN_CABLE_STATE_USB, "CABLE_STATE_USB");
|
|
||||||
if (ret)
|
|
||||||
goto err_cs_usb;
|
|
||||||
ret = gpio_request(EGPIO_MAGICIAN_CHARGE_EN, "CHARGE_EN");
|
|
||||||
if (ret)
|
|
||||||
goto err_chg_en;
|
|
||||||
ret = gpio_request(GPIO30_MAGICIAN_nCHARGE_EN, "nCHARGE_EN");
|
|
||||||
if (!ret)
|
|
||||||
ret = gpio_direction_output(GPIO30_MAGICIAN_nCHARGE_EN, 0);
|
|
||||||
if (ret)
|
|
||||||
goto err_nchg_en;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
err_nchg_en:
|
|
||||||
gpio_free(EGPIO_MAGICIAN_CHARGE_EN);
|
|
||||||
err_chg_en:
|
|
||||||
gpio_free(EGPIO_MAGICIAN_CABLE_STATE_USB);
|
|
||||||
err_cs_usb:
|
|
||||||
gpio_free(EGPIO_MAGICIAN_CABLE_STATE_AC);
|
|
||||||
err_cs_ac:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int magician_is_ac_online(void)
|
static int magician_is_ac_online(void)
|
||||||
|
@ -586,22 +562,8 @@ static int magician_is_ac_online(void)
|
||||||
return gpio_get_value(EGPIO_MAGICIAN_CABLE_STATE_AC);
|
return gpio_get_value(EGPIO_MAGICIAN_CABLE_STATE_AC);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int magician_is_usb_online(void)
|
|
||||||
{
|
|
||||||
return gpio_get_value(EGPIO_MAGICIAN_CABLE_STATE_USB);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void magician_set_charge(int flags)
|
|
||||||
{
|
|
||||||
gpio_set_value(GPIO30_MAGICIAN_nCHARGE_EN, !flags);
|
|
||||||
gpio_set_value(EGPIO_MAGICIAN_CHARGE_EN, flags);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void power_supply_exit(struct device *dev)
|
static void power_supply_exit(struct device *dev)
|
||||||
{
|
{
|
||||||
gpio_free(GPIO30_MAGICIAN_nCHARGE_EN);
|
|
||||||
gpio_free(EGPIO_MAGICIAN_CHARGE_EN);
|
|
||||||
gpio_free(EGPIO_MAGICIAN_CABLE_STATE_USB);
|
|
||||||
gpio_free(EGPIO_MAGICIAN_CABLE_STATE_AC);
|
gpio_free(EGPIO_MAGICIAN_CABLE_STATE_AC);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -612,8 +574,6 @@ static char *magician_supplicants[] = {
|
||||||
static struct pda_power_pdata power_supply_info = {
|
static struct pda_power_pdata power_supply_info = {
|
||||||
.init = power_supply_init,
|
.init = power_supply_init,
|
||||||
.is_ac_online = magician_is_ac_online,
|
.is_ac_online = magician_is_ac_online,
|
||||||
.is_usb_online = magician_is_usb_online,
|
|
||||||
.set_charge = magician_set_charge,
|
|
||||||
.exit = power_supply_exit,
|
.exit = power_supply_exit,
|
||||||
.supplied_to = magician_supplicants,
|
.supplied_to = magician_supplicants,
|
||||||
.num_supplicants = ARRAY_SIZE(magician_supplicants),
|
.num_supplicants = ARRAY_SIZE(magician_supplicants),
|
||||||
|
@ -646,6 +606,43 @@ static struct platform_device power_supply = {
|
||||||
.num_resources = ARRAY_SIZE(power_supply_resources),
|
.num_resources = ARRAY_SIZE(power_supply_resources),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Battery charger
|
||||||
|
*/
|
||||||
|
|
||||||
|
static struct regulator_consumer_supply bq24022_consumers[] = {
|
||||||
|
{
|
||||||
|
.dev = &gpio_vbus.dev,
|
||||||
|
.supply = "vbus_draw",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
.dev = &power_supply.dev,
|
||||||
|
.supply = "ac_draw",
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct regulator_init_data bq24022_init_data = {
|
||||||
|
.constraints = {
|
||||||
|
.max_uA = 500000,
|
||||||
|
.valid_ops_mask = REGULATOR_CHANGE_CURRENT,
|
||||||
|
},
|
||||||
|
.num_consumer_supplies = ARRAY_SIZE(bq24022_consumers),
|
||||||
|
.consumer_supplies = bq24022_consumers,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct bq24022_mach_info bq24022_info = {
|
||||||
|
.gpio_nce = GPIO30_MAGICIAN_BQ24022_nCHARGE_EN,
|
||||||
|
.gpio_iset2 = EGPIO_MAGICIAN_BQ24022_ISET2,
|
||||||
|
.init_data = &bq24022_init_data,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device bq24022 = {
|
||||||
|
.name = "bq24022",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &bq24022_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* MMC/SD
|
* MMC/SD
|
||||||
|
@ -756,6 +753,7 @@ static struct platform_device *devices[] __initdata = {
|
||||||
&egpio,
|
&egpio,
|
||||||
&backlight,
|
&backlight,
|
||||||
&pasic3,
|
&pasic3,
|
||||||
|
&bq24022,
|
||||||
&gpio_vbus,
|
&gpio_vbus,
|
||||||
&power_supply,
|
&power_supply,
|
||||||
&strataflash,
|
&strataflash,
|
||||||
|
|
|
@ -50,6 +50,7 @@
|
||||||
#include <mach/pxa27x-udc.h>
|
#include <mach/pxa27x-udc.h>
|
||||||
#include <mach/i2c.h>
|
#include <mach/i2c.h>
|
||||||
#include <mach/camera.h>
|
#include <mach/camera.h>
|
||||||
|
#include <mach/audio.h>
|
||||||
#include <media/soc_camera.h>
|
#include <media/soc_camera.h>
|
||||||
|
|
||||||
#include <mach/mioa701.h>
|
#include <mach/mioa701.h>
|
||||||
|
@ -763,8 +764,6 @@ MIO_PARENT_DEV(mioa701_backlight, "pwm-backlight", &pxa27x_device_pwm0.dev,
|
||||||
&mioa701_backlight_data);
|
&mioa701_backlight_data);
|
||||||
MIO_SIMPLE_DEV(mioa701_led, "leds-gpio", &gpio_led_info)
|
MIO_SIMPLE_DEV(mioa701_led, "leds-gpio", &gpio_led_info)
|
||||||
MIO_SIMPLE_DEV(pxa2xx_pcm, "pxa2xx-pcm", NULL)
|
MIO_SIMPLE_DEV(pxa2xx_pcm, "pxa2xx-pcm", NULL)
|
||||||
MIO_SIMPLE_DEV(pxa2xx_ac97, "pxa2xx-ac97", NULL)
|
|
||||||
MIO_PARENT_DEV(mio_wm9713_codec, "wm9713-codec", &pxa2xx_ac97.dev, NULL)
|
|
||||||
MIO_SIMPLE_DEV(mioa701_sound, "mioa701-wm9713", NULL)
|
MIO_SIMPLE_DEV(mioa701_sound, "mioa701-wm9713", NULL)
|
||||||
MIO_SIMPLE_DEV(mioa701_board, "mioa701-board", NULL)
|
MIO_SIMPLE_DEV(mioa701_board, "mioa701-board", NULL)
|
||||||
MIO_SIMPLE_DEV(gpio_vbus, "gpio-vbus", &gpio_vbus_data);
|
MIO_SIMPLE_DEV(gpio_vbus, "gpio-vbus", &gpio_vbus_data);
|
||||||
|
@ -774,8 +773,6 @@ static struct platform_device *devices[] __initdata = {
|
||||||
&mioa701_backlight,
|
&mioa701_backlight,
|
||||||
&mioa701_led,
|
&mioa701_led,
|
||||||
&pxa2xx_pcm,
|
&pxa2xx_pcm,
|
||||||
&pxa2xx_ac97,
|
|
||||||
&mio_wm9713_codec,
|
|
||||||
&mioa701_sound,
|
&mioa701_sound,
|
||||||
&power_dev,
|
&power_dev,
|
||||||
&strataflash,
|
&strataflash,
|
||||||
|
@ -818,6 +815,7 @@ static void __init mioa701_machine_init(void)
|
||||||
pxa_set_keypad_info(&mioa701_keypad_info);
|
pxa_set_keypad_info(&mioa701_keypad_info);
|
||||||
wm97xx_bat_set_pdata(&mioa701_battery_data);
|
wm97xx_bat_set_pdata(&mioa701_battery_data);
|
||||||
pxa_set_udc_info(&mioa701_udc_info);
|
pxa_set_udc_info(&mioa701_udc_info);
|
||||||
|
pxa_set_ac97_info(NULL);
|
||||||
pm_power_off = mioa701_poweroff;
|
pm_power_off = mioa701_poweroff;
|
||||||
arm_pm_restart = mioa701_restart;
|
arm_pm_restart = mioa701_restart;
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
#include <linux/wm97xx_batt.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
|
#include <linux/sysdev.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
|
@ -68,10 +69,10 @@ static unsigned long palmld_pin_config[] __initdata = {
|
||||||
GPIO47_FICP_TXD,
|
GPIO47_FICP_TXD,
|
||||||
|
|
||||||
/* MATRIX KEYPAD */
|
/* MATRIX KEYPAD */
|
||||||
GPIO100_KP_MKIN_0,
|
GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO101_KP_MKIN_1,
|
GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO102_KP_MKIN_2,
|
GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO97_KP_MKIN_3,
|
GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO103_KP_MKOUT_0,
|
GPIO103_KP_MKOUT_0,
|
||||||
GPIO104_KP_MKOUT_1,
|
GPIO104_KP_MKOUT_1,
|
||||||
GPIO105_KP_MKOUT_2,
|
GPIO105_KP_MKOUT_2,
|
||||||
|
@ -506,6 +507,33 @@ static struct pxafb_mach_info palmld_lcd_screen = {
|
||||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Power management - standby
|
||||||
|
******************************************************************************/
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
static u32 *addr __initdata;
|
||||||
|
static u32 resume[3] __initdata = {
|
||||||
|
0xe3a00101, /* mov r0, #0x40000000 */
|
||||||
|
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||||
|
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init palmld_pm_init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* this is where the bootloader jumps */
|
||||||
|
addr = phys_to_virt(PALMLD_STR_BASE);
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
addr[i] = resume[i];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(palmld_pm_init);
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine init
|
* Machine init
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
|
@ -75,10 +75,10 @@ static unsigned long palmt5_pin_config[] __initdata = {
|
||||||
GPIO95_GPIO, /* usb power */
|
GPIO95_GPIO, /* usb power */
|
||||||
|
|
||||||
/* MATRIX KEYPAD */
|
/* MATRIX KEYPAD */
|
||||||
GPIO100_KP_MKIN_0,
|
GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO101_KP_MKIN_1,
|
GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO102_KP_MKIN_2,
|
GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO97_KP_MKIN_3,
|
GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO103_KP_MKOUT_0,
|
GPIO103_KP_MKOUT_0,
|
||||||
GPIO104_KP_MKOUT_1,
|
GPIO104_KP_MKOUT_1,
|
||||||
GPIO105_KP_MKOUT_2,
|
GPIO105_KP_MKOUT_2,
|
||||||
|
@ -449,6 +449,33 @@ static struct pxafb_mach_info palmt5_lcd_screen = {
|
||||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Power management - standby
|
||||||
|
******************************************************************************/
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
static u32 *addr __initdata;
|
||||||
|
static u32 resume[3] __initdata = {
|
||||||
|
0xe3a00101, /* mov r0, #0x40000000 */
|
||||||
|
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||||
|
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init palmt5_pm_init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* this is where the bootloader jumps */
|
||||||
|
addr = phys_to_virt(PALMT5_STR_BASE);
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
addr[i] = resume[i];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(palmt5_pm_init);
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine init
|
* Machine init
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
466
arch/arm/mach-pxa/palmte2.c
Normal file
466
arch/arm/mach-pxa/palmte2.c
Normal file
|
@ -0,0 +1,466 @@
|
||||||
|
/*
|
||||||
|
* Hardware definitions for Palm Tungsten|E2
|
||||||
|
*
|
||||||
|
* Author:
|
||||||
|
* Carlos Eduardo Medaglia Dyonisio <cadu@nerdfeliz.com>
|
||||||
|
*
|
||||||
|
* Rewrite for mainline:
|
||||||
|
* Marek Vasut <marek.vasut@gmail.com>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
|
* (find more info at www.hackndev.com)
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/delay.h>
|
||||||
|
#include <linux/irq.h>
|
||||||
|
#include <linux/gpio_keys.h>
|
||||||
|
#include <linux/input.h>
|
||||||
|
#include <linux/pda_power.h>
|
||||||
|
#include <linux/pwm_backlight.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/wm97xx_batt.h>
|
||||||
|
#include <linux/power_supply.h>
|
||||||
|
|
||||||
|
#include <asm/mach-types.h>
|
||||||
|
#include <asm/mach/arch.h>
|
||||||
|
#include <asm/mach/map.h>
|
||||||
|
|
||||||
|
#include <mach/audio.h>
|
||||||
|
#include <mach/palmte2.h>
|
||||||
|
#include <mach/mmc.h>
|
||||||
|
#include <mach/pxafb.h>
|
||||||
|
#include <mach/mfp-pxa25x.h>
|
||||||
|
#include <mach/irda.h>
|
||||||
|
#include <mach/udc.h>
|
||||||
|
|
||||||
|
#include "generic.h"
|
||||||
|
#include "devices.h"
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Pin configuration
|
||||||
|
******************************************************************************/
|
||||||
|
static unsigned long palmte2_pin_config[] __initdata = {
|
||||||
|
/* MMC */
|
||||||
|
GPIO6_MMC_CLK,
|
||||||
|
GPIO8_MMC_CS0,
|
||||||
|
GPIO10_GPIO, /* SD detect */
|
||||||
|
GPIO55_GPIO, /* SD power */
|
||||||
|
GPIO51_GPIO, /* SD r/o switch */
|
||||||
|
|
||||||
|
/* AC97 */
|
||||||
|
GPIO28_AC97_BITCLK,
|
||||||
|
GPIO29_AC97_SDATA_IN_0,
|
||||||
|
GPIO30_AC97_SDATA_OUT,
|
||||||
|
GPIO31_AC97_SYNC,
|
||||||
|
|
||||||
|
/* PWM */
|
||||||
|
GPIO16_PWM0_OUT,
|
||||||
|
|
||||||
|
/* USB */
|
||||||
|
GPIO15_GPIO, /* usb detect */
|
||||||
|
GPIO53_GPIO, /* usb power */
|
||||||
|
|
||||||
|
/* IrDA */
|
||||||
|
GPIO48_GPIO, /* ir disable */
|
||||||
|
GPIO46_FICP_RXD,
|
||||||
|
GPIO47_FICP_TXD,
|
||||||
|
|
||||||
|
/* LCD */
|
||||||
|
GPIO58_LCD_LDD_0,
|
||||||
|
GPIO59_LCD_LDD_1,
|
||||||
|
GPIO60_LCD_LDD_2,
|
||||||
|
GPIO61_LCD_LDD_3,
|
||||||
|
GPIO62_LCD_LDD_4,
|
||||||
|
GPIO63_LCD_LDD_5,
|
||||||
|
GPIO64_LCD_LDD_6,
|
||||||
|
GPIO65_LCD_LDD_7,
|
||||||
|
GPIO66_LCD_LDD_8,
|
||||||
|
GPIO67_LCD_LDD_9,
|
||||||
|
GPIO68_LCD_LDD_10,
|
||||||
|
GPIO69_LCD_LDD_11,
|
||||||
|
GPIO70_LCD_LDD_12,
|
||||||
|
GPIO71_LCD_LDD_13,
|
||||||
|
GPIO72_LCD_LDD_14,
|
||||||
|
GPIO73_LCD_LDD_15,
|
||||||
|
GPIO74_LCD_FCLK,
|
||||||
|
GPIO75_LCD_LCLK,
|
||||||
|
GPIO76_LCD_PCLK,
|
||||||
|
GPIO77_LCD_BIAS,
|
||||||
|
|
||||||
|
/* GPIO KEYS */
|
||||||
|
GPIO5_GPIO, /* notes */
|
||||||
|
GPIO7_GPIO, /* tasks */
|
||||||
|
GPIO11_GPIO, /* calendar */
|
||||||
|
GPIO13_GPIO, /* contacts */
|
||||||
|
GPIO14_GPIO, /* center */
|
||||||
|
GPIO19_GPIO, /* left */
|
||||||
|
GPIO20_GPIO, /* right */
|
||||||
|
GPIO21_GPIO, /* down */
|
||||||
|
GPIO22_GPIO, /* up */
|
||||||
|
|
||||||
|
/* MISC */
|
||||||
|
GPIO1_RST, /* reset */
|
||||||
|
GPIO4_GPIO, /* Hotsync button */
|
||||||
|
GPIO9_GPIO, /* power detect */
|
||||||
|
GPIO37_GPIO, /* LCD power */
|
||||||
|
GPIO56_GPIO, /* Backlight power */
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* SD/MMC card controller
|
||||||
|
******************************************************************************/
|
||||||
|
static int palmte2_mci_init(struct device *dev,
|
||||||
|
irq_handler_t palmte2_detect_int, void *data)
|
||||||
|
{
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
/* Setup an interrupt for detecting card insert/remove events */
|
||||||
|
err = gpio_request(GPIO_NR_PALMTE2_SD_DETECT_N, "SD IRQ");
|
||||||
|
if (err)
|
||||||
|
goto err;
|
||||||
|
err = gpio_direction_input(GPIO_NR_PALMTE2_SD_DETECT_N);
|
||||||
|
if (err)
|
||||||
|
goto err2;
|
||||||
|
err = request_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N),
|
||||||
|
palmte2_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
|
||||||
|
IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
|
||||||
|
"SD/MMC card detect", data);
|
||||||
|
if (err) {
|
||||||
|
printk(KERN_ERR "%s: cannot request SD/MMC card detect IRQ\n",
|
||||||
|
__func__);
|
||||||
|
goto err2;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = gpio_request(GPIO_NR_PALMTE2_SD_POWER, "SD_POWER");
|
||||||
|
if (err)
|
||||||
|
goto err3;
|
||||||
|
err = gpio_direction_output(GPIO_NR_PALMTE2_SD_POWER, 0);
|
||||||
|
if (err)
|
||||||
|
goto err4;
|
||||||
|
|
||||||
|
err = gpio_request(GPIO_NR_PALMTE2_SD_READONLY, "SD_READONLY");
|
||||||
|
if (err)
|
||||||
|
goto err4;
|
||||||
|
err = gpio_direction_input(GPIO_NR_PALMTE2_SD_READONLY);
|
||||||
|
if (err)
|
||||||
|
goto err5;
|
||||||
|
|
||||||
|
printk(KERN_DEBUG "%s: irq registered\n", __func__);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err5:
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_SD_READONLY);
|
||||||
|
err4:
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_SD_POWER);
|
||||||
|
err3:
|
||||||
|
free_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N), data);
|
||||||
|
err2:
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_SD_DETECT_N);
|
||||||
|
err:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void palmte2_mci_exit(struct device *dev, void *data)
|
||||||
|
{
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_SD_READONLY);
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_SD_POWER);
|
||||||
|
free_irq(gpio_to_irq(GPIO_NR_PALMTE2_SD_DETECT_N), data);
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_SD_DETECT_N);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void palmte2_mci_power(struct device *dev, unsigned int vdd)
|
||||||
|
{
|
||||||
|
struct pxamci_platform_data *p_d = dev->platform_data;
|
||||||
|
gpio_set_value(GPIO_NR_PALMTE2_SD_POWER, p_d->ocr_mask & (1 << vdd));
|
||||||
|
}
|
||||||
|
|
||||||
|
static int palmte2_mci_get_ro(struct device *dev)
|
||||||
|
{
|
||||||
|
return gpio_get_value(GPIO_NR_PALMTE2_SD_READONLY);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct pxamci_platform_data palmte2_mci_platform_data = {
|
||||||
|
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||||
|
.setpower = palmte2_mci_power,
|
||||||
|
.get_ro = palmte2_mci_get_ro,
|
||||||
|
.init = palmte2_mci_init,
|
||||||
|
.exit = palmte2_mci_exit,
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* GPIO keys
|
||||||
|
******************************************************************************/
|
||||||
|
static struct gpio_keys_button palmte2_pxa_buttons[] = {
|
||||||
|
{KEY_F1, GPIO_NR_PALMTE2_KEY_CONTACTS, 1, "Contacts" },
|
||||||
|
{KEY_F2, GPIO_NR_PALMTE2_KEY_CALENDAR, 1, "Calendar" },
|
||||||
|
{KEY_F3, GPIO_NR_PALMTE2_KEY_TASKS, 1, "Tasks" },
|
||||||
|
{KEY_F4, GPIO_NR_PALMTE2_KEY_NOTES, 1, "Notes" },
|
||||||
|
{KEY_ENTER, GPIO_NR_PALMTE2_KEY_CENTER, 1, "Center" },
|
||||||
|
{KEY_LEFT, GPIO_NR_PALMTE2_KEY_LEFT, 1, "Left" },
|
||||||
|
{KEY_RIGHT, GPIO_NR_PALMTE2_KEY_RIGHT, 1, "Right" },
|
||||||
|
{KEY_DOWN, GPIO_NR_PALMTE2_KEY_DOWN, 1, "Down" },
|
||||||
|
{KEY_UP, GPIO_NR_PALMTE2_KEY_UP, 1, "Up" },
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_keys_platform_data palmte2_pxa_keys_data = {
|
||||||
|
.buttons = palmte2_pxa_buttons,
|
||||||
|
.nbuttons = ARRAY_SIZE(palmte2_pxa_buttons),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device palmte2_pxa_keys = {
|
||||||
|
.name = "gpio-keys",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &palmte2_pxa_keys_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Backlight
|
||||||
|
******************************************************************************/
|
||||||
|
static int palmte2_backlight_init(struct device *dev)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = gpio_request(GPIO_NR_PALMTE2_BL_POWER, "BL POWER");
|
||||||
|
if (ret)
|
||||||
|
goto err;
|
||||||
|
ret = gpio_direction_output(GPIO_NR_PALMTE2_BL_POWER, 0);
|
||||||
|
if (ret)
|
||||||
|
goto err2;
|
||||||
|
ret = gpio_request(GPIO_NR_PALMTE2_LCD_POWER, "LCD POWER");
|
||||||
|
if (ret)
|
||||||
|
goto err2;
|
||||||
|
ret = gpio_direction_output(GPIO_NR_PALMTE2_LCD_POWER, 0);
|
||||||
|
if (ret)
|
||||||
|
goto err3;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
err3:
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_LCD_POWER);
|
||||||
|
err2:
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_BL_POWER);
|
||||||
|
err:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int palmte2_backlight_notify(int brightness)
|
||||||
|
{
|
||||||
|
gpio_set_value(GPIO_NR_PALMTE2_BL_POWER, brightness);
|
||||||
|
gpio_set_value(GPIO_NR_PALMTE2_LCD_POWER, brightness);
|
||||||
|
return brightness;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void palmte2_backlight_exit(struct device *dev)
|
||||||
|
{
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_BL_POWER);
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_LCD_POWER);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct platform_pwm_backlight_data palmte2_backlight_data = {
|
||||||
|
.pwm_id = 0,
|
||||||
|
.max_brightness = PALMTE2_MAX_INTENSITY,
|
||||||
|
.dft_brightness = PALMTE2_MAX_INTENSITY,
|
||||||
|
.pwm_period_ns = PALMTE2_PERIOD_NS,
|
||||||
|
.init = palmte2_backlight_init,
|
||||||
|
.notify = palmte2_backlight_notify,
|
||||||
|
.exit = palmte2_backlight_exit,
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device palmte2_backlight = {
|
||||||
|
.name = "pwm-backlight",
|
||||||
|
.dev = {
|
||||||
|
.parent = &pxa25x_device_pwm0.dev,
|
||||||
|
.platform_data = &palmte2_backlight_data,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* IrDA
|
||||||
|
******************************************************************************/
|
||||||
|
static int palmte2_irda_startup(struct device *dev)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
err = gpio_request(GPIO_NR_PALMTE2_IR_DISABLE, "IR DISABLE");
|
||||||
|
if (err)
|
||||||
|
goto err;
|
||||||
|
err = gpio_direction_output(GPIO_NR_PALMTE2_IR_DISABLE, 1);
|
||||||
|
if (err)
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_IR_DISABLE);
|
||||||
|
err:
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void palmte2_irda_shutdown(struct device *dev)
|
||||||
|
{
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_IR_DISABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void palmte2_irda_transceiver_mode(struct device *dev, int mode)
|
||||||
|
{
|
||||||
|
gpio_set_value(GPIO_NR_PALMTE2_IR_DISABLE, mode & IR_OFF);
|
||||||
|
pxa2xx_transceiver_mode(dev, mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct pxaficp_platform_data palmte2_ficp_platform_data = {
|
||||||
|
.startup = palmte2_irda_startup,
|
||||||
|
.shutdown = palmte2_irda_shutdown,
|
||||||
|
.transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
|
||||||
|
.transceiver_mode = palmte2_irda_transceiver_mode,
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* UDC
|
||||||
|
******************************************************************************/
|
||||||
|
static struct pxa2xx_udc_mach_info palmte2_udc_info __initdata = {
|
||||||
|
.gpio_vbus = GPIO_NR_PALMTE2_USB_DETECT_N,
|
||||||
|
.gpio_vbus_inverted = 1,
|
||||||
|
.gpio_pullup = GPIO_NR_PALMTE2_USB_PULLUP,
|
||||||
|
.gpio_pullup_inverted = 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Power supply
|
||||||
|
******************************************************************************/
|
||||||
|
static int power_supply_init(struct device *dev)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = gpio_request(GPIO_NR_PALMTE2_POWER_DETECT, "CABLE_STATE_AC");
|
||||||
|
if (ret)
|
||||||
|
goto err1;
|
||||||
|
ret = gpio_direction_input(GPIO_NR_PALMTE2_POWER_DETECT);
|
||||||
|
if (ret)
|
||||||
|
goto err2;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
err2:
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_POWER_DETECT);
|
||||||
|
err1:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int palmte2_is_ac_online(void)
|
||||||
|
{
|
||||||
|
return gpio_get_value(GPIO_NR_PALMTE2_POWER_DETECT);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void power_supply_exit(struct device *dev)
|
||||||
|
{
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_POWER_DETECT);
|
||||||
|
}
|
||||||
|
|
||||||
|
static char *palmte2_supplicants[] = {
|
||||||
|
"main-battery",
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct pda_power_pdata power_supply_info = {
|
||||||
|
.init = power_supply_init,
|
||||||
|
.is_ac_online = palmte2_is_ac_online,
|
||||||
|
.exit = power_supply_exit,
|
||||||
|
.supplied_to = palmte2_supplicants,
|
||||||
|
.num_supplicants = ARRAY_SIZE(palmte2_supplicants),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device power_supply = {
|
||||||
|
.name = "pda-power",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &power_supply_info,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* WM97xx battery
|
||||||
|
******************************************************************************/
|
||||||
|
static struct wm97xx_batt_info wm97xx_batt_pdata = {
|
||||||
|
.batt_aux = WM97XX_AUX_ID3,
|
||||||
|
.temp_aux = WM97XX_AUX_ID2,
|
||||||
|
.charge_gpio = -1,
|
||||||
|
.max_voltage = PALMTE2_BAT_MAX_VOLTAGE,
|
||||||
|
.min_voltage = PALMTE2_BAT_MIN_VOLTAGE,
|
||||||
|
.batt_mult = 1000,
|
||||||
|
.batt_div = 414,
|
||||||
|
.temp_mult = 1,
|
||||||
|
.temp_div = 1,
|
||||||
|
.batt_tech = POWER_SUPPLY_TECHNOLOGY_LIPO,
|
||||||
|
.batt_name = "main-batt",
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Framebuffer
|
||||||
|
******************************************************************************/
|
||||||
|
static struct pxafb_mode_info palmte2_lcd_modes[] = {
|
||||||
|
{
|
||||||
|
.pixclock = 77757,
|
||||||
|
.xres = 320,
|
||||||
|
.yres = 320,
|
||||||
|
.bpp = 16,
|
||||||
|
|
||||||
|
.left_margin = 28,
|
||||||
|
.right_margin = 7,
|
||||||
|
.upper_margin = 7,
|
||||||
|
.lower_margin = 5,
|
||||||
|
|
||||||
|
.hsync_len = 4,
|
||||||
|
.vsync_len = 1,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct pxafb_mach_info palmte2_lcd_screen = {
|
||||||
|
.modes = palmte2_lcd_modes,
|
||||||
|
.num_modes = ARRAY_SIZE(palmte2_lcd_modes),
|
||||||
|
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||||
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Machine init
|
||||||
|
******************************************************************************/
|
||||||
|
static struct platform_device *devices[] __initdata = {
|
||||||
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||||
|
&palmte2_pxa_keys,
|
||||||
|
#endif
|
||||||
|
&palmte2_backlight,
|
||||||
|
&power_supply,
|
||||||
|
};
|
||||||
|
|
||||||
|
/* setup udc GPIOs initial state */
|
||||||
|
static void __init palmte2_udc_init(void)
|
||||||
|
{
|
||||||
|
if (!gpio_request(GPIO_NR_PALMTE2_USB_PULLUP, "UDC Vbus")) {
|
||||||
|
gpio_direction_output(GPIO_NR_PALMTE2_USB_PULLUP, 1);
|
||||||
|
gpio_free(GPIO_NR_PALMTE2_USB_PULLUP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init palmte2_init(void)
|
||||||
|
{
|
||||||
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmte2_pin_config));
|
||||||
|
|
||||||
|
set_pxa_fb_info(&palmte2_lcd_screen);
|
||||||
|
pxa_set_mci_info(&palmte2_mci_platform_data);
|
||||||
|
palmte2_udc_init();
|
||||||
|
pxa_set_udc_info(&palmte2_udc_info);
|
||||||
|
pxa_set_ac97_info(NULL);
|
||||||
|
pxa_set_ficp_info(&palmte2_ficp_platform_data);
|
||||||
|
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
||||||
|
|
||||||
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
|
}
|
||||||
|
|
||||||
|
MACHINE_START(PALMTE2, "Palm Tungsten|E2")
|
||||||
|
.phys_io = 0x40000000,
|
||||||
|
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||||
|
.boot_params = 0xa0000100,
|
||||||
|
.map_io = pxa_map_io,
|
||||||
|
.init_irq = pxa25x_init_irq,
|
||||||
|
.timer = &pxa_timer,
|
||||||
|
.init_machine = palmte2_init
|
||||||
|
MACHINE_END
|
|
@ -93,10 +93,10 @@ static unsigned long palmtx_pin_config[] __initdata = {
|
||||||
GPIO116_GPIO, /* wifi ready */
|
GPIO116_GPIO, /* wifi ready */
|
||||||
|
|
||||||
/* MATRIX KEYPAD */
|
/* MATRIX KEYPAD */
|
||||||
GPIO100_KP_MKIN_0,
|
GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO101_KP_MKIN_1,
|
GPIO101_KP_MKIN_1 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO102_KP_MKIN_2,
|
GPIO102_KP_MKIN_2 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO97_KP_MKIN_3,
|
GPIO97_KP_MKIN_3 | WAKEUP_ON_LEVEL_HIGH,
|
||||||
GPIO103_KP_MKOUT_0,
|
GPIO103_KP_MKOUT_0,
|
||||||
GPIO104_KP_MKOUT_1,
|
GPIO104_KP_MKOUT_1,
|
||||||
GPIO105_KP_MKOUT_2,
|
GPIO105_KP_MKOUT_2,
|
||||||
|
@ -458,6 +458,33 @@ static struct pxafb_mach_info palmtx_lcd_screen = {
|
||||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Power management - standby
|
||||||
|
******************************************************************************/
|
||||||
|
#ifdef CONFIG_PM
|
||||||
|
static u32 *addr __initdata;
|
||||||
|
static u32 resume[3] __initdata = {
|
||||||
|
0xe3a00101, /* mov r0, #0x40000000 */
|
||||||
|
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||||
|
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init palmtx_pm_init(void)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* this is where the bootloader jumps */
|
||||||
|
addr = phys_to_virt(PALMTX_STR_BASE);
|
||||||
|
|
||||||
|
for (i = 0; i < 3; i++)
|
||||||
|
addr[i] = resume[i];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
device_initcall(palmtx_pm_init);
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine init
|
* Machine init
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/tosa_bt.h>
|
#include <mach/tosa_bt.h>
|
||||||
#include <mach/pxa2xx_spi.h>
|
#include <mach/pxa2xx_spi.h>
|
||||||
|
#include <mach/audio.h>
|
||||||
|
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <mach/tosa.h>
|
#include <mach/tosa.h>
|
||||||
|
@ -914,6 +915,7 @@ static void __init tosa_init(void)
|
||||||
pxa_set_udc_info(&udc_info);
|
pxa_set_udc_info(&udc_info);
|
||||||
pxa_set_ficp_info(&tosa_ficp_platform_data);
|
pxa_set_ficp_info(&tosa_ficp_platform_data);
|
||||||
pxa_set_i2c_info(NULL);
|
pxa_set_i2c_info(NULL);
|
||||||
|
pxa_set_ac97_info(NULL);
|
||||||
platform_scoop_config = &tosa_pcmcia_config;
|
platform_scoop_config = &tosa_pcmcia_config;
|
||||||
|
|
||||||
pxa2xx_set_spi_info(2, &pxa_ssp_master_info);
|
pxa2xx_set_spi_info(2, &pxa_ssp_master_info);
|
||||||
|
|
|
@ -409,8 +409,7 @@ static struct platform_device bast_sio = {
|
||||||
static struct s3c2410_platform_i2c __initdata bast_i2c_info = {
|
static struct s3c2410_platform_i2c __initdata bast_i2c_info = {
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.slave_addr = 0x10,
|
.slave_addr = 0x10,
|
||||||
.bus_freq = 100*1000,
|
.frequency = 100*1000,
|
||||||
.max_freq = 130*1000,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Asix AX88796 10/100 ethernet controller */
|
/* Asix AX88796 10/100 ethernet controller */
|
||||||
|
|
|
@ -340,8 +340,7 @@ static struct platform_device *n35_devices[] __initdata = {
|
||||||
static struct s3c2410_platform_i2c n30_i2ccfg = {
|
static struct s3c2410_platform_i2c n30_i2ccfg = {
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.slave_addr = 0x10,
|
.slave_addr = 0x10,
|
||||||
.bus_freq = 10*1000,
|
.frequency = 10*1000,
|
||||||
.max_freq = 10*1000,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Lots of hardcoded stuff, but it sets up the hardware in a useful
|
/* Lots of hardcoded stuff, but it sets up the hardware in a useful
|
||||||
|
|
|
@ -453,8 +453,7 @@ static struct spi_board_info __initdata jive_spi_devs[] = {
|
||||||
/* I2C bus and device configuration. */
|
/* I2C bus and device configuration. */
|
||||||
|
|
||||||
static struct s3c2410_platform_i2c jive_i2c_cfg __initdata = {
|
static struct s3c2410_platform_i2c jive_i2c_cfg __initdata = {
|
||||||
.max_freq = 80 * 1000,
|
.frequency = 80 * 1000,
|
||||||
.bus_freq = 50 * 1000,
|
|
||||||
.flags = S3C_IICFLG_FILTER,
|
.flags = S3C_IICFLG_FILTER,
|
||||||
.sda_delay = 2,
|
.sda_delay = 2,
|
||||||
};
|
};
|
||||||
|
|
|
@ -828,6 +828,17 @@ void __init reserve_node_zero(pg_data_t *pgdat)
|
||||||
BOOTMEM_DEFAULT);
|
BOOTMEM_DEFAULT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (machine_is_palmld() || machine_is_palmtx()) {
|
||||||
|
reserve_bootmem_node(pgdat, 0xa0000000, 0x1000,
|
||||||
|
BOOTMEM_EXCLUSIVE);
|
||||||
|
reserve_bootmem_node(pgdat, 0xa0200000, 0x1000,
|
||||||
|
BOOTMEM_EXCLUSIVE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (machine_is_palmt5())
|
||||||
|
reserve_bootmem_node(pgdat, 0xa0200000, 0x1000,
|
||||||
|
BOOTMEM_EXCLUSIVE);
|
||||||
|
|
||||||
#ifdef CONFIG_SA1111
|
#ifdef CONFIG_SA1111
|
||||||
/*
|
/*
|
||||||
* Because of the SA1111 DMA bug, we want to preserve our
|
* Because of the SA1111 DMA bug, we want to preserve our
|
||||||
|
|
|
@ -119,7 +119,7 @@ static struct resource iop3xx_aau_resources[] = {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 iop3xx_adma_dmamask = DMA_32BIT_MASK;
|
static u64 iop3xx_adma_dmamask = DMA_BIT_MASK(32);
|
||||||
|
|
||||||
static struct iop_adma_platform_data iop3xx_dma_0_data = {
|
static struct iop_adma_platform_data iop3xx_dma_0_data = {
|
||||||
.hw_id = DMA0_ID,
|
.hw_id = DMA0_ID,
|
||||||
|
@ -143,7 +143,7 @@ struct platform_device iop3xx_dma_0_channel = {
|
||||||
.resource = iop3xx_dma_0_resources,
|
.resource = iop3xx_dma_0_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop3xx_adma_dmamask,
|
.dma_mask = &iop3xx_adma_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *) &iop3xx_dma_0_data,
|
.platform_data = (void *) &iop3xx_dma_0_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -155,7 +155,7 @@ struct platform_device iop3xx_dma_1_channel = {
|
||||||
.resource = iop3xx_dma_1_resources,
|
.resource = iop3xx_dma_1_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop3xx_adma_dmamask,
|
.dma_mask = &iop3xx_adma_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *) &iop3xx_dma_1_data,
|
.platform_data = (void *) &iop3xx_dma_1_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
@ -167,7 +167,7 @@ struct platform_device iop3xx_aau_channel = {
|
||||||
.resource = iop3xx_aau_resources,
|
.resource = iop3xx_aau_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &iop3xx_adma_dmamask,
|
.dma_mask = &iop3xx_adma_dmamask,
|
||||||
.coherent_dma_mask = DMA_64BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(64),
|
||||||
.platform_data = (void *) &iop3xx_aau_data,
|
.platform_data = (void *) &iop3xx_aau_data,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
25
arch/arm/plat-mxc/include/mach/i2c.h
Normal file
25
arch/arm/plat-mxc/include/mach/i2c.h
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
/*
|
||||||
|
* i2c.h - i.MX I2C driver header file
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008, Darius Augulis <augulis.darius@gmail.com>
|
||||||
|
*
|
||||||
|
* This file is released under the GPLv2
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_ARCH_I2C_H_
|
||||||
|
#define __ASM_ARCH_I2C_H_
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct imxi2c_platform_data - structure of platform data for MXC I2C driver
|
||||||
|
* @init: Initialise gpio's and other board specific things
|
||||||
|
* @exit: Free everything initialised by @init
|
||||||
|
* @bitrate: Bus speed measured in Hz
|
||||||
|
*
|
||||||
|
**/
|
||||||
|
struct imxi2c_platform_data {
|
||||||
|
int (*init)(struct device *dev);
|
||||||
|
void (*exit)(struct device *dev);
|
||||||
|
int bitrate;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_ARCH_I2C_H_ */
|
|
@ -24,4 +24,12 @@
|
||||||
#define PHYS_OFFSET UL(0x80000000)
|
#define PHYS_OFFSET UL(0x80000000)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_MX1_VIDEO)
|
||||||
|
/*
|
||||||
|
* Increase size of DMA-consistent memory region.
|
||||||
|
* This is required for i.MX camera driver to capture at least four VGA frames.
|
||||||
|
*/
|
||||||
|
#define CONSISTENT_DMA_SIZE SZ_4M
|
||||||
|
#endif /* CONFIG_MX1_VIDEO */
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_MXC_MEMORY_H__ */
|
#endif /* __ASM_ARCH_MXC_MEMORY_H__ */
|
||||||
|
|
35
arch/arm/plat-mxc/include/mach/mx1_camera.h
Normal file
35
arch/arm/plat-mxc/include/mach/mx1_camera.h
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*
|
||||||
|
* mx1_camera.h - i.MX1/i.MXL camera driver header file
|
||||||
|
*
|
||||||
|
* Copyright (c) 2008, Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
|
||||||
|
* Copyright (C) 2009, Darius Augulis <augulis.darius@gmail.com>
|
||||||
|
*
|
||||||
|
* Based on PXA camera.h file:
|
||||||
|
* Copyright (C) 2003, Intel Corporation
|
||||||
|
* Copyright (C) 2008, Guennadi Liakhovetski <kernel@pengutronix.de>
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __ASM_ARCH_CAMERA_H_
|
||||||
|
#define __ASM_ARCH_CAMERA_H_
|
||||||
|
|
||||||
|
#define MX1_CAMERA_DATA_HIGH 1
|
||||||
|
#define MX1_CAMERA_PCLK_RISING 2
|
||||||
|
#define MX1_CAMERA_VSYNC_HIGH 4
|
||||||
|
|
||||||
|
extern unsigned char mx1_camera_sof_fiq_start, mx1_camera_sof_fiq_end;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct mx1_camera_pdata - i.MX1/i.MXL camera platform data
|
||||||
|
* @mclk_10khz: master clock frequency in 10kHz units
|
||||||
|
* @flags: MX1 camera platform flags
|
||||||
|
*/
|
||||||
|
struct mx1_camera_pdata {
|
||||||
|
unsigned long mclk_10khz;
|
||||||
|
unsigned long flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* __ASM_ARCH_CAMERA_H_ */
|
|
@ -1,6 +1,6 @@
|
||||||
/* linux/arch/arm/plat-s3c/dev-i2c0.c
|
/* linux/arch/arm/plat-s3c/dev-i2c0.c
|
||||||
*
|
*
|
||||||
* Copyright 2008 Simtec Electronics
|
* Copyright 2008,2009 Simtec Electronics
|
||||||
* Ben Dooks <ben@simtec.co.uk>
|
* Ben Dooks <ben@simtec.co.uk>
|
||||||
* http://armlinux.simtec.co.uk/
|
* http://armlinux.simtec.co.uk/
|
||||||
*
|
*
|
||||||
|
@ -50,9 +50,8 @@ struct platform_device s3c_device_i2c0 = {
|
||||||
static struct s3c2410_platform_i2c default_i2c_data0 __initdata = {
|
static struct s3c2410_platform_i2c default_i2c_data0 __initdata = {
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.slave_addr = 0x10,
|
.slave_addr = 0x10,
|
||||||
.bus_freq = 100*1000,
|
.frequency = 100*1000,
|
||||||
.max_freq = 400*1000,
|
.sda_delay = 100,
|
||||||
.sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *pd)
|
void __init s3c_i2c0_set_platdata(struct s3c2410_platform_i2c *pd)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* linux/arch/arm/plat-s3c/dev-i2c1.c
|
/* linux/arch/arm/plat-s3c/dev-i2c1.c
|
||||||
*
|
*
|
||||||
* Copyright 2008 Simtec Electronics
|
* Copyright 2008,2009 Simtec Electronics
|
||||||
* Ben Dooks <ben@simtec.co.uk>
|
* Ben Dooks <ben@simtec.co.uk>
|
||||||
* http://armlinux.simtec.co.uk/
|
* http://armlinux.simtec.co.uk/
|
||||||
*
|
*
|
||||||
|
@ -47,9 +47,8 @@ static struct s3c2410_platform_i2c default_i2c_data1 __initdata = {
|
||||||
.flags = 0,
|
.flags = 0,
|
||||||
.bus_num = 1,
|
.bus_num = 1,
|
||||||
.slave_addr = 0x10,
|
.slave_addr = 0x10,
|
||||||
.bus_freq = 100*1000,
|
.frequency = 100*1000,
|
||||||
.max_freq = 400*1000,
|
.sda_delay = 100,
|
||||||
.sda_delay = S3C2410_IICLC_SDA_DELAY5 | S3C2410_IICLC_FILTER_ON,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd)
|
void __init s3c_i2c1_set_platdata(struct s3c2410_platform_i2c *pd)
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
/* arch/arm/mach-s3c2410/include/mach/iic.h
|
/* arch/arm/plat-s3c/include/plat/iic.h
|
||||||
*
|
*
|
||||||
* Copyright (c) 2004 Simtec Electronics
|
* Copyright 2004,2009 Simtec Electronics
|
||||||
* Ben Dooks <ben@simtec.co.uk>
|
* Ben Dooks <ben@simtec.co.uk>
|
||||||
*
|
*
|
||||||
* S3C2410 - I2C Controller platfrom_device info
|
* S3C - I2C Controller platform_device info
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
|
@ -15,19 +15,24 @@
|
||||||
|
|
||||||
#define S3C_IICFLG_FILTER (1<<0) /* enable s3c2440 filter */
|
#define S3C_IICFLG_FILTER (1<<0) /* enable s3c2440 filter */
|
||||||
|
|
||||||
/* Notes:
|
/**
|
||||||
* 1) All frequencies are expressed in Hz
|
* struct s3c2410_platform_i2c - Platform data for s3c I2C.
|
||||||
* 2) A value of zero is `do not care`
|
* @bus_num: The bus number to use (if possible).
|
||||||
*/
|
* @flags: Any flags for the I2C bus (E.g. S3C_IICFLK_FILTER).
|
||||||
|
* @slave_addr: The I2C address for the slave device (if enabled).
|
||||||
|
* @frequency: The desired frequency in Hz of the bus. This is
|
||||||
|
* guaranteed to not be exceeded. If the caller does
|
||||||
|
* not care, use zero and the driver will select a
|
||||||
|
* useful default.
|
||||||
|
* @sda_delay: The delay (in ns) applied to SDA edges.
|
||||||
|
* @cfg_gpio: A callback to configure the pins for I2C operation.
|
||||||
|
*/
|
||||||
struct s3c2410_platform_i2c {
|
struct s3c2410_platform_i2c {
|
||||||
int bus_num; /* bus number to use */
|
int bus_num;
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
unsigned int slave_addr; /* slave address for controller */
|
unsigned int slave_addr;
|
||||||
unsigned long bus_freq; /* standard bus frequency */
|
unsigned long frequency;
|
||||||
unsigned long max_freq; /* max frequency for the bus */
|
unsigned int sda_delay;
|
||||||
unsigned long min_freq; /* min frequency for the bus */
|
|
||||||
unsigned int sda_delay; /* pclks (s3c2440 only) */
|
|
||||||
|
|
||||||
void (*cfg_gpio)(struct platform_device *dev);
|
void (*cfg_gpio)(struct platform_device *dev);
|
||||||
};
|
};
|
||||||
|
|
|
@ -280,13 +280,13 @@ static struct resource hh_fpga0_resource[] = {
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 hh_fpga0_dma_mask = DMA_32BIT_MASK;
|
static u64 hh_fpga0_dma_mask = DMA_BIT_MASK(32);
|
||||||
static struct platform_device hh_fpga0_device = {
|
static struct platform_device hh_fpga0_device = {
|
||||||
.name = "hh_fpga",
|
.name = "hh_fpga",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.dev = {
|
.dev = {
|
||||||
.dma_mask = &hh_fpga0_dma_mask,
|
.dma_mask = &hh_fpga0_dma_mask,
|
||||||
.coherent_dma_mask = DMA_32BIT_MASK,
|
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||||
},
|
},
|
||||||
.resource = hh_fpga0_resource,
|
.resource = hh_fpga0_resource,
|
||||||
.num_resources = ARRAY_SIZE(hh_fpga0_resource),
|
.num_resources = ARRAY_SIZE(hh_fpga0_resource),
|
||||||
|
|
|
@ -60,26 +60,26 @@
|
||||||
* don't ... tc, smc, pio, rtc, watchdog, pwm, ps2, and more.
|
* don't ... tc, smc, pio, rtc, watchdog, pwm, ps2, and more.
|
||||||
*/
|
*/
|
||||||
#define DEFINE_DEV(_name, _id) \
|
#define DEFINE_DEV(_name, _id) \
|
||||||
static u64 _name##_id##_dma_mask = DMA_32BIT_MASK; \
|
static u64 _name##_id##_dma_mask = DMA_BIT_MASK(32); \
|
||||||
static struct platform_device _name##_id##_device = { \
|
static struct platform_device _name##_id##_device = { \
|
||||||
.name = #_name, \
|
.name = #_name, \
|
||||||
.id = _id, \
|
.id = _id, \
|
||||||
.dev = { \
|
.dev = { \
|
||||||
.dma_mask = &_name##_id##_dma_mask, \
|
.dma_mask = &_name##_id##_dma_mask, \
|
||||||
.coherent_dma_mask = DMA_32BIT_MASK, \
|
.coherent_dma_mask = DMA_BIT_MASK(32), \
|
||||||
}, \
|
}, \
|
||||||
.resource = _name##_id##_resource, \
|
.resource = _name##_id##_resource, \
|
||||||
.num_resources = ARRAY_SIZE(_name##_id##_resource), \
|
.num_resources = ARRAY_SIZE(_name##_id##_resource), \
|
||||||
}
|
}
|
||||||
#define DEFINE_DEV_DATA(_name, _id) \
|
#define DEFINE_DEV_DATA(_name, _id) \
|
||||||
static u64 _name##_id##_dma_mask = DMA_32BIT_MASK; \
|
static u64 _name##_id##_dma_mask = DMA_BIT_MASK(32); \
|
||||||
static struct platform_device _name##_id##_device = { \
|
static struct platform_device _name##_id##_device = { \
|
||||||
.name = #_name, \
|
.name = #_name, \
|
||||||
.id = _id, \
|
.id = _id, \
|
||||||
.dev = { \
|
.dev = { \
|
||||||
.dma_mask = &_name##_id##_dma_mask, \
|
.dma_mask = &_name##_id##_dma_mask, \
|
||||||
.platform_data = &_name##_id##_data, \
|
.platform_data = &_name##_id##_data, \
|
||||||
.coherent_dma_mask = DMA_32BIT_MASK, \
|
.coherent_dma_mask = DMA_BIT_MASK(32), \
|
||||||
}, \
|
}, \
|
||||||
.resource = _name##_id##_resource, \
|
.resource = _name##_id##_resource, \
|
||||||
.num_resources = ARRAY_SIZE(_name##_id##_resource), \
|
.num_resources = ARRAY_SIZE(_name##_id##_resource), \
|
||||||
|
|
|
@ -11,6 +11,8 @@
|
||||||
#ifndef _SPI_CHANNEL_H_
|
#ifndef _SPI_CHANNEL_H_
|
||||||
#define _SPI_CHANNEL_H_
|
#define _SPI_CHANNEL_H_
|
||||||
|
|
||||||
|
#define MIN_SPI_BAUD_VAL 2
|
||||||
|
|
||||||
#define SPI_READ 0
|
#define SPI_READ 0
|
||||||
#define SPI_WRITE 1
|
#define SPI_WRITE 1
|
||||||
|
|
||||||
|
@ -122,6 +124,9 @@ struct bfin5xx_spi_chip {
|
||||||
u8 bits_per_word;
|
u8 bits_per_word;
|
||||||
u8 cs_change_per_word;
|
u8 cs_change_per_word;
|
||||||
u16 cs_chg_udelay; /* Some devices require 16-bit delays */
|
u16 cs_chg_udelay; /* Some devices require 16-bit delays */
|
||||||
|
u32 cs_gpio;
|
||||||
|
/* Value to send if no TX value is supplied, usually 0x0 or 0xFFFF */
|
||||||
|
u16 idle_tx_val;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _SPI_CHANNEL_H_ */
|
#endif /* _SPI_CHANNEL_H_ */
|
||||||
|
|
|
@ -337,7 +337,7 @@ int _access_ok(unsigned long addr, unsigned long size)
|
||||||
if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end)
|
if (addr >= memory_mtd_end && (addr + size) <= physical_mem_end)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
#ifdef CONFIG_ROMFS_MTD_FS
|
#ifdef CONFIG_ROMFS_ON_MTD
|
||||||
/* For XIP, allow user space to use pointers within the ROMFS. */
|
/* For XIP, allow user space to use pointers within the ROMFS. */
|
||||||
if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end)
|
if (addr >= memory_mtd_start && (addr + size) <= memory_mtd_end)
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -53,9 +53,9 @@
|
||||||
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
||||||
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
||||||
|
|
||||||
#define UART_GET_CTS(x) gpio_get_value(x->cts_pin)
|
#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
|
||||||
#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1)
|
#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
|
||||||
#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0)
|
#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
|
||||||
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
||||||
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
||||||
|
|
||||||
|
@ -87,6 +87,7 @@
|
||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int status_irq;
|
||||||
unsigned int lsr;
|
unsigned int lsr;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
int tx_done;
|
int tx_done;
|
||||||
|
@ -125,6 +126,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
|
||||||
struct bfin_serial_res {
|
struct bfin_serial_res {
|
||||||
unsigned long uart_base_addr;
|
unsigned long uart_base_addr;
|
||||||
int uart_irq;
|
int uart_irq;
|
||||||
|
int uart_status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
unsigned int uart_tx_dma_channel;
|
unsigned int uart_tx_dma_channel;
|
||||||
unsigned int uart_rx_dma_channel;
|
unsigned int uart_rx_dma_channel;
|
||||||
|
@ -140,6 +142,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC00400,
|
0xFFC00400,
|
||||||
IRQ_UART0_RX,
|
IRQ_UART0_RX,
|
||||||
|
IRQ_UART0_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART0_TX,
|
CH_UART0_TX,
|
||||||
CH_UART0_RX,
|
CH_UART0_RX,
|
||||||
|
@ -154,6 +157,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC02000,
|
0xFFC02000,
|
||||||
IRQ_UART1_RX,
|
IRQ_UART1_RX,
|
||||||
|
IRQ_UART1_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART1_TX,
|
CH_UART1_TX,
|
||||||
CH_UART1_RX,
|
CH_UART1_RX,
|
||||||
|
|
|
@ -53,9 +53,9 @@
|
||||||
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
||||||
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
||||||
|
|
||||||
#define UART_GET_CTS(x) gpio_get_value(x->cts_pin)
|
#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
|
||||||
#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1)
|
#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
|
||||||
#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0)
|
#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
|
||||||
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
||||||
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
||||||
|
|
||||||
|
@ -87,6 +87,7 @@
|
||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int status_irq;
|
||||||
unsigned int lsr;
|
unsigned int lsr;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
int tx_done;
|
int tx_done;
|
||||||
|
@ -125,6 +126,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
|
||||||
struct bfin_serial_res {
|
struct bfin_serial_res {
|
||||||
unsigned long uart_base_addr;
|
unsigned long uart_base_addr;
|
||||||
int uart_irq;
|
int uart_irq;
|
||||||
|
int uart_status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
unsigned int uart_tx_dma_channel;
|
unsigned int uart_tx_dma_channel;
|
||||||
unsigned int uart_rx_dma_channel;
|
unsigned int uart_rx_dma_channel;
|
||||||
|
@ -140,6 +142,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC00400,
|
0xFFC00400,
|
||||||
IRQ_UART0_RX,
|
IRQ_UART0_RX,
|
||||||
|
IRQ_UART0_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART0_TX,
|
CH_UART0_TX,
|
||||||
CH_UART0_RX,
|
CH_UART0_RX,
|
||||||
|
@ -154,6 +157,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC02000,
|
0xFFC02000,
|
||||||
IRQ_UART1_RX,
|
IRQ_UART1_RX,
|
||||||
|
IRQ_UART1_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART1_TX,
|
CH_UART1_TX,
|
||||||
CH_UART1_RX,
|
CH_UART1_RX,
|
||||||
|
@ -167,29 +171,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DRIVER_NAME "bfin-uart"
|
#define DRIVER_NAME "bfin-uart"
|
||||||
|
|
||||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
|
||||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART1
|
|
||||||
peripheral_request(P_UART1_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART1_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
|
||||||
if (uart->cts_pin >= 0) {
|
|
||||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_input(uart->cts_pin);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uart->rts_pin >= 0) {
|
|
||||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_output(uart->rts_pin, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
|
@ -53,9 +53,9 @@
|
||||||
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
||||||
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
||||||
|
|
||||||
#define UART_GET_CTS(x) gpio_get_value(x->cts_pin)
|
#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
|
||||||
#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1)
|
#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
|
||||||
#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0)
|
#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
|
||||||
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
||||||
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@
|
||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int status_irq;
|
||||||
unsigned int lsr;
|
unsigned int lsr;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
int tx_done;
|
int tx_done;
|
||||||
|
@ -116,6 +117,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
|
||||||
struct bfin_serial_res {
|
struct bfin_serial_res {
|
||||||
unsigned long uart_base_addr;
|
unsigned long uart_base_addr;
|
||||||
int uart_irq;
|
int uart_irq;
|
||||||
|
int uart_status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
unsigned int uart_tx_dma_channel;
|
unsigned int uart_tx_dma_channel;
|
||||||
unsigned int uart_rx_dma_channel;
|
unsigned int uart_rx_dma_channel;
|
||||||
|
@ -130,6 +132,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC00400,
|
0xFFC00400,
|
||||||
IRQ_UART_RX,
|
IRQ_UART_RX,
|
||||||
|
IRQ_UART_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART_TX,
|
CH_UART_TX,
|
||||||
CH_UART_RX,
|
CH_UART_RX,
|
||||||
|
@ -142,23 +145,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DRIVER_NAME "bfin-uart"
|
#define DRIVER_NAME "bfin-uart"
|
||||||
|
|
||||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
|
||||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
|
||||||
if (uart->cts_pin >= 0) {
|
|
||||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_input(uart->cts_pin);
|
|
||||||
}
|
|
||||||
if (uart->rts_pin >= 0) {
|
|
||||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_output(uart->rts_pin, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
|
@ -53,9 +53,9 @@
|
||||||
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
||||||
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
||||||
|
|
||||||
#define UART_GET_CTS(x) gpio_get_value(x->cts_pin)
|
#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
|
||||||
#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1)
|
#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
|
||||||
#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0)
|
#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
|
||||||
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
||||||
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
||||||
|
|
||||||
|
@ -87,6 +87,7 @@
|
||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int status_irq;
|
||||||
unsigned int lsr;
|
unsigned int lsr;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
int tx_done;
|
int tx_done;
|
||||||
|
@ -99,7 +100,6 @@ struct bfin_serial_port {
|
||||||
struct work_struct tx_dma_workqueue;
|
struct work_struct tx_dma_workqueue;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
||||||
struct timer_list cts_timer;
|
|
||||||
int cts_pin;
|
int cts_pin;
|
||||||
int rts_pin;
|
int rts_pin;
|
||||||
#endif
|
#endif
|
||||||
|
@ -125,6 +125,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
|
||||||
struct bfin_serial_res {
|
struct bfin_serial_res {
|
||||||
unsigned long uart_base_addr;
|
unsigned long uart_base_addr;
|
||||||
int uart_irq;
|
int uart_irq;
|
||||||
|
int uart_status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
unsigned int uart_tx_dma_channel;
|
unsigned int uart_tx_dma_channel;
|
||||||
unsigned int uart_rx_dma_channel;
|
unsigned int uart_rx_dma_channel;
|
||||||
|
@ -140,6 +141,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC00400,
|
0xFFC00400,
|
||||||
IRQ_UART0_RX,
|
IRQ_UART0_RX,
|
||||||
|
IRQ_UART0_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART0_TX,
|
CH_UART0_TX,
|
||||||
CH_UART0_RX,
|
CH_UART0_RX,
|
||||||
|
@ -154,6 +156,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC02000,
|
0xFFC02000,
|
||||||
IRQ_UART1_RX,
|
IRQ_UART1_RX,
|
||||||
|
IRQ_UART1_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART1_TX,
|
CH_UART1_TX,
|
||||||
CH_UART1_RX,
|
CH_UART1_RX,
|
||||||
|
@ -167,29 +170,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DRIVER_NAME "bfin-uart"
|
#define DRIVER_NAME "bfin-uart"
|
||||||
|
|
||||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
|
||||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART1
|
|
||||||
peripheral_request(P_UART1_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART1_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
|
||||||
if (uart->cts_pin >= 0) {
|
|
||||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_input(uart->cts_pin);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uart->rts_pin >= 0) {
|
|
||||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_output(uart->rts_pin, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
|
@ -53,9 +53,9 @@
|
||||||
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
||||||
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
||||||
|
|
||||||
#define UART_GET_CTS(x) gpio_get_value(x->cts_pin)
|
#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
|
||||||
#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1)
|
#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
|
||||||
#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0)
|
#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
|
||||||
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
||||||
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
||||||
|
|
||||||
|
@ -87,6 +87,7 @@
|
||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int status_irq;
|
||||||
unsigned int lsr;
|
unsigned int lsr;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
int tx_done;
|
int tx_done;
|
||||||
|
@ -125,6 +126,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
|
||||||
struct bfin_serial_res {
|
struct bfin_serial_res {
|
||||||
unsigned long uart_base_addr;
|
unsigned long uart_base_addr;
|
||||||
int uart_irq;
|
int uart_irq;
|
||||||
|
int uart_status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
unsigned int uart_tx_dma_channel;
|
unsigned int uart_tx_dma_channel;
|
||||||
unsigned int uart_rx_dma_channel;
|
unsigned int uart_rx_dma_channel;
|
||||||
|
@ -140,6 +142,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC00400,
|
0xFFC00400,
|
||||||
IRQ_UART0_RX,
|
IRQ_UART0_RX,
|
||||||
|
IRQ_UART0_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART0_TX,
|
CH_UART0_TX,
|
||||||
CH_UART0_RX,
|
CH_UART0_RX,
|
||||||
|
@ -154,6 +157,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC02000,
|
0xFFC02000,
|
||||||
IRQ_UART1_RX,
|
IRQ_UART1_RX,
|
||||||
|
IRQ_UART1_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART1_TX,
|
CH_UART1_TX,
|
||||||
CH_UART1_RX,
|
CH_UART1_RX,
|
||||||
|
|
|
@ -46,41 +46,27 @@
|
||||||
#define UART_PUT_CHAR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_THR),v)
|
#define UART_PUT_CHAR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_THR),v)
|
||||||
#define UART_PUT_DLL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLL),v)
|
#define UART_PUT_DLL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLL),v)
|
||||||
#define UART_SET_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_SET),v)
|
#define UART_SET_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_SET),v)
|
||||||
#define UART_CLEAR_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_CLEAR),v)
|
#define UART_CLEAR_IER(uart,v) bfin_write16(((uart)->port.membase + OFFSET_IER_CLEAR),v)
|
||||||
#define UART_PUT_DLH(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLH),v)
|
#define UART_PUT_DLH(uart,v) bfin_write16(((uart)->port.membase + OFFSET_DLH),v)
|
||||||
#define UART_PUT_LSR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LSR),v)
|
#define UART_PUT_LSR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LSR),v)
|
||||||
#define UART_PUT_LCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LCR),v)
|
#define UART_PUT_LCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_LCR),v)
|
||||||
#define UART_CLEAR_LSR(uart) bfin_write16(((uart)->port.membase + OFFSET_LSR), -1)
|
#define UART_CLEAR_LSR(uart) bfin_write16(((uart)->port.membase + OFFSET_LSR), -1)
|
||||||
#define UART_PUT_GCTL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_GCTL),v)
|
#define UART_PUT_GCTL(uart,v) bfin_write16(((uart)->port.membase + OFFSET_GCTL),v)
|
||||||
#define UART_PUT_MCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_MCR),v)
|
#define UART_PUT_MCR(uart,v) bfin_write16(((uart)->port.membase + OFFSET_MCR),v)
|
||||||
|
#define UART_CLEAR_SCTS(uart) bfin_write16(((uart)->port.membase + OFFSET_MSR),SCTS)
|
||||||
|
|
||||||
#define UART_SET_DLAB(uart) /* MMRs not muxed on BF54x */
|
#define UART_SET_DLAB(uart) /* MMRs not muxed on BF54x */
|
||||||
#define UART_CLEAR_DLAB(uart) /* MMRs not muxed on BF54x */
|
#define UART_CLEAR_DLAB(uart) /* MMRs not muxed on BF54x */
|
||||||
|
|
||||||
#define UART_GET_CTS(x) (UART_GET_MSR(x) & CTS)
|
#define UART_GET_CTS(x) (UART_GET_MSR(x) & CTS)
|
||||||
#define UART_SET_RTS(x) (UART_PUT_MCR(x, UART_GET_MCR(x) | MRTS))
|
#define UART_DISABLE_RTS(x) UART_PUT_MCR(x, UART_GET_MCR(x) & ~(ARTS|MRTS))
|
||||||
#define UART_CLEAR_RTS(x) (UART_PUT_MCR(x, UART_GET_MCR(x) & ~MRTS))
|
#define UART_ENABLE_RTS(x) UART_PUT_MCR(x, UART_GET_MCR(x) | MRTS | ARTS)
|
||||||
#define UART_ENABLE_INTS(x, v) UART_SET_IER(x, v)
|
#define UART_ENABLE_INTS(x, v) UART_SET_IER(x, v)
|
||||||
#define UART_DISABLE_INTS(x) UART_CLEAR_IER(x, 0xF)
|
#define UART_DISABLE_INTS(x) UART_CLEAR_IER(x, 0xF)
|
||||||
|
|
||||||
#if defined(CONFIG_BFIN_UART0_CTSRTS) || defined(CONFIG_BFIN_UART2_CTSRTS)
|
#if defined(CONFIG_BFIN_UART0_CTSRTS) || defined(CONFIG_BFIN_UART1_CTSRTS) || \
|
||||||
# define CONFIG_SERIAL_BFIN_CTSRTS
|
defined(CONFIG_BFIN_UART2_CTSRTS) || defined(CONFIG_BFIN_UART3_CTSRTS)
|
||||||
|
# define CONFIG_SERIAL_BFIN_HARD_CTSRTS
|
||||||
# ifndef CONFIG_UART0_CTS_PIN
|
|
||||||
# define CONFIG_UART0_CTS_PIN -1
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef CONFIG_UART0_RTS_PIN
|
|
||||||
# define CONFIG_UART0_RTS_PIN -1
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef CONFIG_UART2_CTS_PIN
|
|
||||||
# define CONFIG_UART2_CTS_PIN -1
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef CONFIG_UART2_RTS_PIN
|
|
||||||
# define CONFIG_UART2_RTS_PIN -1
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define BFIN_UART_TX_FIFO_SIZE 2
|
#define BFIN_UART_TX_FIFO_SIZE 2
|
||||||
|
@ -91,6 +77,7 @@
|
||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
int tx_done;
|
int tx_done;
|
||||||
int tx_count;
|
int tx_count;
|
||||||
|
@ -101,23 +88,24 @@ struct bfin_serial_port {
|
||||||
unsigned int rx_dma_channel;
|
unsigned int rx_dma_channel;
|
||||||
struct work_struct tx_dma_workqueue;
|
struct work_struct tx_dma_workqueue;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
|
||||||
struct timer_list cts_timer;
|
int scts;
|
||||||
int cts_pin;
|
int cts_pin;
|
||||||
int rts_pin;
|
int rts_pin;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
struct bfin_serial_res {
|
struct bfin_serial_res {
|
||||||
unsigned long uart_base_addr;
|
unsigned long uart_base_addr;
|
||||||
int uart_irq;
|
int uart_irq;
|
||||||
|
int uart_status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
unsigned int uart_tx_dma_channel;
|
unsigned int uart_tx_dma_channel;
|
||||||
unsigned int uart_rx_dma_channel;
|
unsigned int uart_rx_dma_channel;
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
|
||||||
int uart_cts_pin;
|
int uart_cts_pin;
|
||||||
int uart_rts_pin;
|
int uart_rts_pin;
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -126,13 +114,14 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC00400,
|
0xFFC00400,
|
||||||
IRQ_UART0_RX,
|
IRQ_UART0_RX,
|
||||||
|
IRQ_UART0_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART0_TX,
|
CH_UART0_TX,
|
||||||
CH_UART0_RX,
|
CH_UART0_RX,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
|
||||||
CONFIG_UART0_CTS_PIN,
|
0,
|
||||||
CONFIG_UART0_RTS_PIN,
|
0,
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
@ -140,13 +129,14 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC02000,
|
0xFFC02000,
|
||||||
IRQ_UART1_RX,
|
IRQ_UART1_RX,
|
||||||
|
IRQ_UART1_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART1_TX,
|
CH_UART1_TX,
|
||||||
CH_UART1_RX,
|
CH_UART1_RX,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
|
||||||
0,
|
GPIO_PE10,
|
||||||
0,
|
GPIO_PE9,
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
@ -154,13 +144,14 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC02100,
|
0xFFC02100,
|
||||||
IRQ_UART2_RX,
|
IRQ_UART2_RX,
|
||||||
|
IRQ_UART2_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART2_TX,
|
CH_UART2_TX,
|
||||||
CH_UART2_RX,
|
CH_UART2_RX,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
|
||||||
CONFIG_UART2_CTS_PIN,
|
0,
|
||||||
CONFIG_UART2_RTS_PIN,
|
0,
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
|
@ -168,61 +159,17 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC03100,
|
0xFFC03100,
|
||||||
IRQ_UART3_RX,
|
IRQ_UART3_RX,
|
||||||
|
IRQ_UART3_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART3_TX,
|
CH_UART3_TX,
|
||||||
CH_UART3_RX,
|
CH_UART3_RX,
|
||||||
#endif
|
#endif
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
#ifdef CONFIG_SERIAL_BFIN_HARD_CTSRTS
|
||||||
0,
|
GPIO_PB3,
|
||||||
0,
|
GPIO_PB2,
|
||||||
#endif
|
#endif
|
||||||
},
|
},
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DRIVER_NAME "bfin-uart"
|
#define DRIVER_NAME "bfin-uart"
|
||||||
|
|
||||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
|
||||||
{
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
|
||||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART1
|
|
||||||
peripheral_request(P_UART1_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART1_RX, DRIVER_NAME);
|
|
||||||
|
|
||||||
#ifdef CONFIG_BFIN_UART1_CTSRTS
|
|
||||||
peripheral_request(P_UART1_RTS, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART1_CTS, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART2
|
|
||||||
peripheral_request(P_UART2_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART2_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART3
|
|
||||||
peripheral_request(P_UART3_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART3_RX, DRIVER_NAME);
|
|
||||||
|
|
||||||
#ifdef CONFIG_BFIN_UART3_CTSRTS
|
|
||||||
peripheral_request(P_UART3_RTS, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART3_CTS, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
SSYNC();
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
|
||||||
if (uart->cts_pin >= 0) {
|
|
||||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_input(uart->cts_pin);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uart->rts_pin >= 0) {
|
|
||||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_output(uart->rts_pin, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
|
@ -53,9 +53,9 @@
|
||||||
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
#define UART_SET_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) | DLAB); SSYNC(); } while (0)
|
||||||
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
#define UART_CLEAR_DLAB(uart) do { UART_PUT_LCR(uart, UART_GET_LCR(uart) & ~DLAB); SSYNC(); } while (0)
|
||||||
|
|
||||||
#define UART_GET_CTS(x) gpio_get_value(x->cts_pin)
|
#define UART_GET_CTS(x) (!gpio_get_value(x->cts_pin))
|
||||||
#define UART_SET_RTS(x) gpio_set_value(x->rts_pin, 1)
|
#define UART_DISABLE_RTS(x) gpio_set_value(x->rts_pin, 1)
|
||||||
#define UART_CLEAR_RTS(x) gpio_set_value(x->rts_pin, 0)
|
#define UART_ENABLE_RTS(x) gpio_set_value(x->rts_pin, 0)
|
||||||
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
#define UART_ENABLE_INTS(x, v) UART_PUT_IER(x, v)
|
||||||
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
#define UART_DISABLE_INTS(x) UART_PUT_IER(x, 0)
|
||||||
|
|
||||||
|
@ -74,6 +74,7 @@
|
||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int status_irq;
|
||||||
unsigned int lsr;
|
unsigned int lsr;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
int tx_done;
|
int tx_done;
|
||||||
|
@ -116,6 +117,7 @@ static inline void UART_CLEAR_LSR(struct bfin_serial_port *uart)
|
||||||
struct bfin_serial_res {
|
struct bfin_serial_res {
|
||||||
unsigned long uart_base_addr;
|
unsigned long uart_base_addr;
|
||||||
int uart_irq;
|
int uart_irq;
|
||||||
|
int uart_status_irq;
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
unsigned int uart_tx_dma_channel;
|
unsigned int uart_tx_dma_channel;
|
||||||
unsigned int uart_rx_dma_channel;
|
unsigned int uart_rx_dma_channel;
|
||||||
|
@ -130,6 +132,7 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
{
|
{
|
||||||
0xFFC00400,
|
0xFFC00400,
|
||||||
IRQ_UART_RX,
|
IRQ_UART_RX,
|
||||||
|
IRQ_UART_ERROR,
|
||||||
#ifdef CONFIG_SERIAL_BFIN_DMA
|
#ifdef CONFIG_SERIAL_BFIN_DMA
|
||||||
CH_UART_TX,
|
CH_UART_TX,
|
||||||
CH_UART_RX,
|
CH_UART_RX,
|
||||||
|
@ -142,23 +145,3 @@ struct bfin_serial_res bfin_serial_resource[] = {
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DRIVER_NAME "bfin-uart"
|
#define DRIVER_NAME "bfin-uart"
|
||||||
|
|
||||||
static void bfin_serial_hw_init(struct bfin_serial_port *uart)
|
|
||||||
{
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_UART0
|
|
||||||
peripheral_request(P_UART0_TX, DRIVER_NAME);
|
|
||||||
peripheral_request(P_UART0_RX, DRIVER_NAME);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_SERIAL_BFIN_CTSRTS
|
|
||||||
if (uart->cts_pin >= 0) {
|
|
||||||
gpio_request(uart->cts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_input(uart->cts_pin);
|
|
||||||
}
|
|
||||||
if (uart->rts_pin >= 0) {
|
|
||||||
gpio_request(uart->rts_pin, DRIVER_NAME);
|
|
||||||
gpio_direction_output(uart->rts_pin, 0);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue