mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 14:10:49 +07:00
Merge branch 'devel-stable' into devel
This commit is contained in:
commit
054d5c9238
@ -199,10 +199,33 @@
|
||||
may be configured as a kernel built-in or a kernel loadable module.
|
||||
You can only make use of <constant>kgdbwait</constant> and early
|
||||
debugging if you build kgdboc into the kernel as a built-in.
|
||||
<para>Optionally you can elect to activate kms (Kernel Mode
|
||||
Setting) integration. When you use kms with kgdboc and you have a
|
||||
video driver that has atomic mode setting hooks, it is possible to
|
||||
enter the debugger on the graphics console. When the kernel
|
||||
execution is resumed, the previous graphics mode will be restored.
|
||||
This integration can serve as a useful tool to aid in diagnosing
|
||||
crashes or doing analysis of memory with kdb while allowing the
|
||||
full graphics console applications to run.
|
||||
</para>
|
||||
</para>
|
||||
<sect2 id="kgdbocArgs">
|
||||
<title>kgdboc arguments</title>
|
||||
<para>Usage: <constant>kgdboc=[kbd][[,]serial_device][,baud]</constant></para>
|
||||
<para>Usage: <constant>kgdboc=[kms][[,]kbd][[,]serial_device][,baud]</constant></para>
|
||||
<para>The order listed above must be observed if you use any of the
|
||||
optional configurations together.
|
||||
</para>
|
||||
<para>Abbreviations:
|
||||
<itemizedlist>
|
||||
<listitem><para>kms = Kernel Mode Setting</para></listitem>
|
||||
<listitem><para>kbd = Keyboard</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>You can configure kgdboc to use the keyboard, and or a serial
|
||||
device depending on if you are using kdb and or kgdb, in one of the
|
||||
following scenarios. The order listed above must be observed if
|
||||
you use any of the optional configurations together. Using kms +
|
||||
only gdb is generally not a useful combination.</para>
|
||||
<sect3 id="kgdbocArgs1">
|
||||
<title>Using loadable module or built-in</title>
|
||||
<para>
|
||||
@ -212,7 +235,7 @@
|
||||
<listitem>
|
||||
<para>As a kernel loadable module:</para>
|
||||
<para>Use the command: <constant>modprobe kgdboc kgdboc=<tty-device>,[baud]</constant></para>
|
||||
<para>Here are two examples of how you might formate the kgdboc
|
||||
<para>Here are two examples of how you might format the kgdboc
|
||||
string. The first is for an x86 target using the first serial port.
|
||||
The second example is for the ARM Versatile AB using the second
|
||||
serial port.
|
||||
@ -240,6 +263,9 @@
|
||||
</sect3>
|
||||
<sect3 id="kgdbocArgs3">
|
||||
<title>More examples</title>
|
||||
<para>You can configure kgdboc to use the keyboard, and or a serial
|
||||
device depending on if you are using kdb and or kgdb, in one of the
|
||||
following scenarios.</para>
|
||||
<para>You can configure kgdboc to use the keyboard, and or a serial device
|
||||
depending on if you are using kdb and or kgdb, in one of the
|
||||
following scenarios.
|
||||
@ -255,6 +281,12 @@
|
||||
<listitem><para>kdb with a keyboard</para>
|
||||
<para><constant>kgdboc=kbd</constant></para>
|
||||
</listitem>
|
||||
<listitem><para>kdb with kernel mode setting</para>
|
||||
<para><constant>kgdboc=kms,kbd</constant></para>
|
||||
</listitem>
|
||||
<listitem><para>kdb with kernel mode setting and kgdb over a serial port</para>
|
||||
<para><constant>kgdboc=kms,kbd,ttyS0,115200</constant></para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</para>
|
||||
</sect3>
|
||||
@ -637,6 +669,8 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
<listitem><para>The logic to perform safe memory reads and writes to memory while using the debugger</para></listitem>
|
||||
<listitem><para>A full implementation for software breakpoints unless overridden by the arch</para></listitem>
|
||||
<listitem><para>The API to invoke either the kdb or kgdb frontend to the debug core.</para></listitem>
|
||||
<listitem><para>The structures and callback API for atomic kernel mode setting.</para>
|
||||
<para>NOTE: kgdboc is where the kms callbacks are invoked.</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</listitem>
|
||||
@ -747,6 +781,8 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
</sect1>
|
||||
<sect1 id="kgdbocDesign">
|
||||
<title>kgdboc internals</title>
|
||||
<sect2>
|
||||
<title>kgdboc and uarts</title>
|
||||
<para>
|
||||
The kgdboc driver is actually a very thin driver that relies on the
|
||||
underlying low level to the hardware driver having "polling hooks"
|
||||
@ -754,11 +790,8 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
implementation of kgdboc it the serial_core was changed to expose a
|
||||
low level UART hook for doing polled mode reading and writing of a
|
||||
single character while in an atomic context. When kgdb makes an I/O
|
||||
request to the debugger, kgdboc invokes a call back in the serial
|
||||
core which in turn uses the call back in the UART driver. It is
|
||||
certainly possible to extend kgdboc to work with non-UART based
|
||||
consoles in the future.
|
||||
</para>
|
||||
request to the debugger, kgdboc invokes a callback in the serial
|
||||
core which in turn uses the callback in the UART driver.</para>
|
||||
<para>
|
||||
When using kgdboc with a UART, the UART driver must implement two callbacks in the <constant>struct uart_ops</constant>. Example from drivers/8250.c:<programlisting>
|
||||
#ifdef CONFIG_CONSOLE_POLL
|
||||
@ -772,9 +805,68 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
that they can be called from an atomic context and have to restore
|
||||
the state of the UART chip on return such that the system can return
|
||||
to normal when the debugger detaches. You need to be very careful
|
||||
with any kind of lock you consider, because failing here is most
|
||||
with any kind of lock you consider, because failing here is most likely
|
||||
going to mean pressing the reset button.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="kgdbocKbd">
|
||||
<title>kgdboc and keyboards</title>
|
||||
<para>The kgdboc driver contains logic to configure communications
|
||||
with an attached keyboard. The keyboard infrastructure is only
|
||||
compiled into the kernel when CONFIG_KDB_KEYBOARD=y is set in the
|
||||
kernel configuration.</para>
|
||||
<para>The core polled keyboard driver driver for PS/2 type keyboards
|
||||
is in drivers/char/kdb_keyboard.c. This driver is hooked into the
|
||||
debug core when kgdboc populates the callback in the array
|
||||
called <constant>kdb_poll_funcs[]</constant>. The
|
||||
kdb_get_kbd_char() is the top-level function which polls hardware
|
||||
for single character input.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="kgdbocKms">
|
||||
<title>kgdboc and kms</title>
|
||||
<para>The kgdboc driver contains logic to request the graphics
|
||||
display to switch to a text context when you are using
|
||||
"kgdboc=kms,kbd", provided that you have a video driver which has a
|
||||
frame buffer console and atomic kernel mode setting support.</para>
|
||||
<para>
|
||||
Every time the kernel
|
||||
debugger is entered it calls kgdboc_pre_exp_handler() which in turn
|
||||
calls con_debug_enter() in the virtual console layer. On resuming kernel
|
||||
execution, the kernel debugger calls kgdboc_post_exp_handler() which
|
||||
in turn calls con_debug_leave().</para>
|
||||
<para>Any video driver that wants to be compatible with the kernel
|
||||
debugger and the atomic kms callbacks must implement the
|
||||
mode_set_base_atomic, fb_debug_enter and fb_debug_leave operations.
|
||||
For the fb_debug_enter and fb_debug_leave the option exists to use
|
||||
the generic drm fb helper functions or implement something custom for
|
||||
the hardware. The following example shows the initialization of the
|
||||
.mode_set_base_atomic operation in
|
||||
drivers/gpu/drm/i915/intel_display.c:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
static const struct drm_crtc_helper_funcs intel_helper_funcs = {
|
||||
[...]
|
||||
.mode_set_base_atomic = intel_pipe_set_base_atomic,
|
||||
[...]
|
||||
};
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<para>Here is an example of how the i915 driver initializes the fb_debug_enter and fb_debug_leave functions to use the generic drm helpers in
|
||||
drivers/gpu/drm/i915/intel_fb.c:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
static struct fb_ops intelfb_ops = {
|
||||
[...]
|
||||
.fb_debug_enter = drm_fb_helper_debug_enter,
|
||||
.fb_debug_leave = drm_fb_helper_debug_leave,
|
||||
[...]
|
||||
};
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<chapter id="credits">
|
||||
|
@ -6,4 +6,5 @@
|
||||
<param name="callout.graphics">0</param>
|
||||
<!-- <param name="paper.type">A4</param> -->
|
||||
<param name="generate.section.toc.level">2</param>
|
||||
<param name="use.id.as.filename">1</param>
|
||||
</stylesheet>
|
||||
|
@ -7,7 +7,7 @@ Notes Written on Jan 15, 2002:
|
||||
|
||||
Last Updated May 2, 2002
|
||||
September 2003: Updated I/O Scheduler portions
|
||||
Nick Piggin <piggin@cyberone.com.au>
|
||||
Nick Piggin <npiggin@kernel.dk>
|
||||
|
||||
Introduction:
|
||||
|
||||
|
258
Documentation/coccinelle.txt
Normal file
258
Documentation/coccinelle.txt
Normal file
@ -0,0 +1,258 @@
|
||||
Copyright 2010 Nicolas Palix <npalix@diku.dk>
|
||||
Copyright 2010 Julia Lawall <julia@diku.dk>
|
||||
Copyright 2010 Gilles Muller <Gilles.Muller@lip6.fr>
|
||||
|
||||
|
||||
Getting Coccinelle
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The semantic patches included in the kernel use the 'virtual rule'
|
||||
feature which was introduced in Coccinelle version 0.1.11.
|
||||
|
||||
Coccinelle (>=0.2.0) is available through the package manager
|
||||
of many distributions, e.g. :
|
||||
|
||||
- Debian (>=squeeze)
|
||||
- Fedora (>=13)
|
||||
- Ubuntu (>=10.04 Lucid Lynx)
|
||||
- OpenSUSE
|
||||
- Arch Linux
|
||||
- NetBSD
|
||||
- FreeBSD
|
||||
|
||||
|
||||
You can get the latest version released from the Coccinelle homepage at
|
||||
http://coccinelle.lip6.fr/
|
||||
|
||||
Once you have it, run the following command:
|
||||
|
||||
./configure
|
||||
make
|
||||
|
||||
as a regular user, and install it with
|
||||
|
||||
sudo make install
|
||||
|
||||
|
||||
Using Coccinelle on the Linux kernel
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A Coccinelle-specific target is defined in the top level
|
||||
Makefile. This target is named 'coccicheck' and calls the 'coccicheck'
|
||||
front-end in the 'scripts' directory.
|
||||
|
||||
Four modes are defined: report, patch, context, and org. The mode to
|
||||
use is specified by setting the MODE variable with 'MODE=<mode>'.
|
||||
|
||||
'report' generates a list in the following format:
|
||||
file:line:column-column: message
|
||||
|
||||
'patch' proposes a fix, when possible.
|
||||
|
||||
'context' highlights lines of interest and their context in a
|
||||
diff-like style.Lines of interest are indicated with '-'.
|
||||
|
||||
'org' generates a report in the Org mode format of Emacs.
|
||||
|
||||
Note that not all semantic patches implement all modes.
|
||||
|
||||
To make a report for every semantic patch, run the following command:
|
||||
|
||||
make coccicheck MODE=report
|
||||
|
||||
NB: The 'report' mode is the default one.
|
||||
|
||||
To produce patches, run:
|
||||
|
||||
make coccicheck MODE=patch
|
||||
|
||||
|
||||
The coccicheck target applies every semantic patch available in the
|
||||
subdirectories of 'scripts/coccinelle' to the entire Linux kernel.
|
||||
|
||||
For each semantic patch, a changelog message is proposed. It gives a
|
||||
description of the problem being checked by the semantic patch, and
|
||||
includes a reference to Coccinelle.
|
||||
|
||||
As any static code analyzer, Coccinelle produces false
|
||||
positives. Thus, reports must be carefully checked, and patches
|
||||
reviewed.
|
||||
|
||||
|
||||
Using Coccinelle with a single semantic patch
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The optional make variable COCCI can be used to check a single
|
||||
semantic patch. In that case, the variable must be initialized with
|
||||
the name of the semantic patch to apply.
|
||||
|
||||
For instance:
|
||||
|
||||
make coccicheck COCCI=<my_SP.cocci> MODE=patch
|
||||
or
|
||||
make coccicheck COCCI=<my_SP.cocci> MODE=report
|
||||
|
||||
|
||||
Proposing new semantic patches
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
New semantic patches can be proposed and submitted by kernel
|
||||
developers. For sake of clarity, they should be organized in the
|
||||
subdirectories of 'scripts/coccinelle/'.
|
||||
|
||||
|
||||
Detailed description of the 'report' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
'report' generates a list in the following format:
|
||||
file:line:column-column: message
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
|
||||
make coccicheck MODE=report COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@r depends on !context && !patch && (org || report)@
|
||||
expression x;
|
||||
position p;
|
||||
@@
|
||||
|
||||
ERR_PTR@p(PTR_ERR(x))
|
||||
|
||||
@script:python depends on report@
|
||||
p << r.p;
|
||||
x << r.x;
|
||||
@@
|
||||
|
||||
msg="ERR_CAST can be used with %s" % (x)
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates entries on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg
|
||||
/home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth
|
||||
/home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with alg
|
||||
|
||||
|
||||
Detailed description of the 'patch' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When the 'patch' mode is available, it proposes a fix for each problem
|
||||
identified.
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
make coccicheck MODE=patch COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@ depends on !context && patch && !org && !report @
|
||||
expression x;
|
||||
@@
|
||||
|
||||
- ERR_PTR(PTR_ERR(x))
|
||||
+ ERR_CAST(x)
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates patch hunks on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
diff -u -p a/crypto/ctr.c b/crypto/ctr.c
|
||||
--- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200
|
||||
+++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200
|
||||
@@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct
|
||||
alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
|
||||
CRYPTO_ALG_TYPE_MASK);
|
||||
if (IS_ERR(alg))
|
||||
- return ERR_PTR(PTR_ERR(alg));
|
||||
+ return ERR_CAST(alg);
|
||||
|
||||
/* Block size must be >= 4 bytes. */
|
||||
err = -EINVAL;
|
||||
|
||||
Detailed description of the 'context' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
'context' highlights lines of interest and their context
|
||||
in a diff-like style.
|
||||
|
||||
NOTE: The diff-like output generated is NOT an applicable patch. The
|
||||
intent of the 'context' mode is to highlight the important lines
|
||||
(annotated with minus, '-') and gives some surrounding context
|
||||
lines around. This output can be used with the diff mode of
|
||||
Emacs to review the code.
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
make coccicheck MODE=context COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@ depends on context && !patch && !org && !report@
|
||||
expression x;
|
||||
@@
|
||||
|
||||
* ERR_PTR(PTR_ERR(x))
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates diff hunks on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
diff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing
|
||||
--- /home/user/linux/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200
|
||||
+++ /tmp/nothing
|
||||
@@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct
|
||||
alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
|
||||
CRYPTO_ALG_TYPE_MASK);
|
||||
if (IS_ERR(alg))
|
||||
- return ERR_PTR(PTR_ERR(alg));
|
||||
|
||||
/* Block size must be >= 4 bytes. */
|
||||
err = -EINVAL;
|
||||
|
||||
Detailed description of the 'org' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
'org' generates a report in the Org mode format of Emacs.
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
make coccicheck MODE=org COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@r depends on !context && !patch && (org || report)@
|
||||
expression x;
|
||||
position p;
|
||||
@@
|
||||
|
||||
ERR_PTR@p(PTR_ERR(x))
|
||||
|
||||
@script:python depends on org@
|
||||
p << r.p;
|
||||
x << r.x;
|
||||
@@
|
||||
|
||||
msg="ERR_CAST can be used with %s" % (x)
|
||||
msg_safe=msg.replace("[","@(").replace("]",")")
|
||||
coccilib.org.print_todo(p[0], msg_safe)
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates Org entries on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]]
|
||||
* TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]]
|
||||
* TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]]
|
@ -22,11 +22,33 @@ building C files and assembler files.
|
||||
|
||||
KAFLAGS
|
||||
--------------------------------------------------
|
||||
Additional options to the assembler.
|
||||
Additional options to the assembler (for built-in and modules).
|
||||
|
||||
AFLAGS_MODULE
|
||||
--------------------------------------------------
|
||||
Addtional module specific options to use for $(AS).
|
||||
|
||||
AFLAGS_KERNEL
|
||||
--------------------------------------------------
|
||||
Addtional options for $(AS) when used for assembler
|
||||
code for code that is compiled as built-in.
|
||||
|
||||
KCFLAGS
|
||||
--------------------------------------------------
|
||||
Additional options to the C compiler.
|
||||
Additional options to the C compiler (for built-in and modules).
|
||||
|
||||
CFLAGS_KERNEL
|
||||
--------------------------------------------------
|
||||
Addtional options for $(CC) when used to compile
|
||||
code that is compiled as built-in.
|
||||
|
||||
CFLAGS_MODULE
|
||||
--------------------------------------------------
|
||||
Addtional module specific options to use for $(CC).
|
||||
|
||||
LDFLAGS_MODULE
|
||||
--------------------------------------------------
|
||||
Additional options used for $(LD) when linking modules.
|
||||
|
||||
KBUILD_VERBOSE
|
||||
--------------------------------------------------
|
||||
@ -40,15 +62,15 @@ Set the directory to look for the kernel source when building external
|
||||
modules.
|
||||
The directory can be specified in several ways:
|
||||
1) Use "M=..." on the command line
|
||||
2) Environmnet variable KBUILD_EXTMOD
|
||||
3) Environmnet variable SUBDIRS
|
||||
2) Environment variable KBUILD_EXTMOD
|
||||
3) Environment variable SUBDIRS
|
||||
The possibilities are listed in the order they take precedence.
|
||||
Using "M=..." will always override the others.
|
||||
|
||||
KBUILD_OUTPUT
|
||||
--------------------------------------------------
|
||||
Specify the output directory when building the kernel.
|
||||
The output directory can also be specificed using "O=...".
|
||||
The output directory can also be specified using "O=...".
|
||||
Setting "O=..." takes precedence over KBUILD_OUTPUT.
|
||||
|
||||
ARCH
|
||||
@ -90,7 +112,7 @@ The script will be called with the following arguments:
|
||||
$3 - kernel map file
|
||||
$4 - default install path (use root directory if blank)
|
||||
|
||||
The implmentation of "make install" is architecture specific
|
||||
The implementation of "make install" is architecture specific
|
||||
and it may differ from the above.
|
||||
|
||||
INSTALLKERNEL is provided to enable the possibility to
|
||||
|
@ -65,7 +65,7 @@ also use the environment variable KCONFIG_ALLCONFIG as a flag or a
|
||||
filename that contains config symbols that the user requires to be
|
||||
set to a specific value. If KCONFIG_ALLCONFIG is used without a
|
||||
filename, "make *config" checks for a file named
|
||||
"all{yes/mod/no/random}.config" (corresponding to the *config command
|
||||
"all{yes/mod/no/def/random}.config" (corresponding to the *config command
|
||||
that was used) for symbol values that are to be forced. If this file
|
||||
is not found, it checks for a file named "all.config" to contain forced
|
||||
values.
|
||||
|
@ -168,7 +168,7 @@ more details, with real examples.
|
||||
#drivers/isdn/i4l/Makefile
|
||||
# Makefile for the kernel ISDN subsystem and device drivers.
|
||||
# Each configuration option enables a list of files.
|
||||
obj-$(CONFIG_ISDN) += isdn.o
|
||||
obj-$(CONFIG_ISDN_I4L) += isdn.o
|
||||
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
|
||||
|
||||
--- 3.3 Loadable module goals - obj-m
|
||||
@ -187,34 +187,35 @@ more details, with real examples.
|
||||
Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'
|
||||
|
||||
If a kernel module is built from several source files, you specify
|
||||
that you want to build a module in the same way as above.
|
||||
|
||||
Kbuild needs to know which the parts that you want to build your
|
||||
module from, so you have to tell it by setting an
|
||||
$(<module_name>-objs) variable.
|
||||
that you want to build a module in the same way as above; however,
|
||||
kbuild needs to know which object files you want to build your
|
||||
module from, so you have to tell it by setting a $(<module_name>-y)
|
||||
variable.
|
||||
|
||||
Example:
|
||||
#drivers/isdn/i4l/Makefile
|
||||
obj-$(CONFIG_ISDN) += isdn.o
|
||||
isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
|
||||
obj-$(CONFIG_ISDN_I4L) += isdn.o
|
||||
isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
|
||||
|
||||
In this example, the module name will be isdn.o. Kbuild will
|
||||
compile the objects listed in $(isdn-objs) and then run
|
||||
compile the objects listed in $(isdn-y) and then run
|
||||
"$(LD) -r" on the list of these files to generate isdn.o.
|
||||
|
||||
Kbuild recognises objects used for composite objects by the suffix
|
||||
-objs, and the suffix -y. This allows the Makefiles to use
|
||||
the value of a CONFIG_ symbol to determine if an object is part
|
||||
of a composite object.
|
||||
Due to kbuild recognizing $(<module_name>-y) for composite objects,
|
||||
you can use the value of a CONFIG_ symbol to optionally include an
|
||||
object file as part of a composite object.
|
||||
|
||||
Example:
|
||||
#fs/ext2/Makefile
|
||||
obj-$(CONFIG_EXT2_FS) += ext2.o
|
||||
ext2-y := balloc.o bitmap.o
|
||||
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
|
||||
obj-$(CONFIG_EXT2_FS) += ext2.o
|
||||
ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
|
||||
namei.o super.o symlink.o
|
||||
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
|
||||
xattr_trusted.o
|
||||
|
||||
In this example, xattr.o is only part of the composite object
|
||||
ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
|
||||
In this example, xattr.o, xattr_user.o and xattr_trusted.o are only
|
||||
part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR)
|
||||
evaluates to 'y'.
|
||||
|
||||
Note: Of course, when you are building objects into the kernel,
|
||||
the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
|
||||
@ -244,12 +245,12 @@ more details, with real examples.
|
||||
may contain both a built-in.o and a lib.a file.
|
||||
|
||||
Example:
|
||||
#arch/i386/lib/Makefile
|
||||
lib-y := checksum.o delay.o
|
||||
#arch/x86/lib/Makefile
|
||||
lib-y := delay.o
|
||||
|
||||
This will create a library lib.a based on checksum.o and delay.o.
|
||||
For kbuild to actually recognize that there is a lib.a being built,
|
||||
the directory shall be listed in libs-y.
|
||||
This will create a library lib.a based on delay.o. For kbuild to
|
||||
actually recognize that there is a lib.a being built, the directory
|
||||
shall be listed in libs-y.
|
||||
See also "6.3 List directories to visit when descending".
|
||||
|
||||
Use of lib-y is normally restricted to lib/ and arch/*/lib.
|
||||
@ -284,43 +285,40 @@ more details, with real examples.
|
||||
--- 3.7 Compilation flags
|
||||
|
||||
ccflags-y, asflags-y and ldflags-y
|
||||
The three flags listed above applies only to the kbuild makefile
|
||||
where they are assigned. They are used for all the normal
|
||||
cc, as and ld invocation happenign during a recursive build.
|
||||
These three flags apply only to the kbuild makefile in which they
|
||||
are assigned. They are used for all the normal cc, as and ld
|
||||
invocations happening during a recursive build.
|
||||
Note: Flags with the same behaviour were previously named:
|
||||
EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
|
||||
They are yet supported but their use are deprecated.
|
||||
They are still supported but their usage is deprecated.
|
||||
|
||||
ccflags-y specifies options for compiling C files with $(CC).
|
||||
ccflags-y specifies options for compiling with $(CC).
|
||||
|
||||
Example:
|
||||
# drivers/sound/emu10k1/Makefile
|
||||
ccflags-y += -I$(obj)
|
||||
ccflags-$(DEBUG) += -DEMU10K1_DEBUG
|
||||
|
||||
# drivers/acpi/Makefile
|
||||
ccflags-y := -Os
|
||||
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
|
||||
|
||||
This variable is necessary because the top Makefile owns the
|
||||
variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
|
||||
entire tree.
|
||||
|
||||
asflags-y is a similar string for per-directory options
|
||||
when compiling assembly language source.
|
||||
asflags-y specifies options for assembling with $(AS).
|
||||
|
||||
Example:
|
||||
#arch/x86_64/kernel/Makefile
|
||||
asflags-y := -traditional
|
||||
#arch/sparc/kernel/Makefile
|
||||
asflags-y := -ansi
|
||||
|
||||
|
||||
ldflags-y is a string for per-directory options to $(LD).
|
||||
ldflags-y specifies options for linking with $(LD).
|
||||
|
||||
Example:
|
||||
#arch/m68k/fpsp040/Makefile
|
||||
ldflags-y := -x
|
||||
#arch/cris/boot/compressed/Makefile
|
||||
ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
|
||||
|
||||
subdir-ccflags-y, subdir-asflags-y
|
||||
The two flags listed above are similar to ccflags-y and as-falgs-y.
|
||||
The difference is that the subdir- variants has effect for the kbuild
|
||||
file where tey are present and all subdirectories.
|
||||
The two flags listed above are similar to ccflags-y and asflags-y.
|
||||
The difference is that the subdir- variants have effect for the kbuild
|
||||
file where they are present and all subdirectories.
|
||||
Options specified using subdir-* are added to the commandline before
|
||||
the options specified using the non-subdir variants.
|
||||
|
||||
@ -340,18 +338,18 @@ more details, with real examples.
|
||||
CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
|
||||
CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
|
||||
-DGDTH_STATISTICS
|
||||
CFLAGS_seagate.o = -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
|
||||
|
||||
These three lines specify compilation flags for aha152x.o,
|
||||
gdth.o, and seagate.o
|
||||
These two lines specify compilation flags for aha152x.o and gdth.o.
|
||||
|
||||
$(AFLAGS_$@) is a similar feature for source files in assembly
|
||||
languages.
|
||||
|
||||
Example:
|
||||
# arch/arm/kernel/Makefile
|
||||
AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
|
||||
AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional
|
||||
AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
|
||||
AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
|
||||
AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
|
||||
|
||||
|
||||
--- 3.9 Dependency tracking
|
||||
|
||||
@ -923,16 +921,33 @@ When kbuild executes, the following steps are followed (roughly):
|
||||
The first example utilises the trick that a config option expands
|
||||
to 'y' when selected.
|
||||
|
||||
CFLAGS_KERNEL $(CC) options specific for built-in
|
||||
KBUILD_AFLAGS_KERNEL $(AS) options specific for built-in
|
||||
|
||||
$(CFLAGS_KERNEL) contains extra C compiler flags used to compile
|
||||
$(KBUILD_AFLAGS_KERNEL) contains extra C compiler flags used to compile
|
||||
resident kernel code.
|
||||
|
||||
CFLAGS_MODULE $(CC) options specific for modules
|
||||
KBUILD_AFLAGS_MODULE Options for $(AS) when building modules
|
||||
|
||||
$(CFLAGS_MODULE) contains extra C compiler flags used to compile code
|
||||
for loadable kernel modules.
|
||||
$(KBUILD_AFLAGS_MODULE) is used to add arch specific options that
|
||||
are used for $(AS).
|
||||
From commandline AFLAGS_MODULE shall be used (see kbuild.txt).
|
||||
|
||||
KBUILD_CFLAGS_KERNEL $(CC) options specific for built-in
|
||||
|
||||
$(KBUILD_CFLAGS_KERNEL) contains extra C compiler flags used to compile
|
||||
resident kernel code.
|
||||
|
||||
KBUILD_CFLAGS_MODULE Options for $(CC) when building modules
|
||||
|
||||
$(KBUILD_CFLAGS_MODULE) is used to add arch specific options that
|
||||
are used for $(CC).
|
||||
From commandline CFLAGS_MODULE shall be used (see kbuild.txt).
|
||||
|
||||
KBUILD_LDFLAGS_MODULE Options for $(LD) when linking modules
|
||||
|
||||
$(KBUILD_LDFLAGS_MODULE) is used to add arch specific options
|
||||
used when linking modules. This is often a linker script.
|
||||
From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
|
||||
|
||||
--- 6.2 Add prerequisites to archprepare:
|
||||
|
||||
@ -1176,14 +1191,14 @@ When kbuild executes, the following steps are followed (roughly):
|
||||
=== 7 Kbuild syntax for exported headers
|
||||
|
||||
The kernel include a set of headers that is exported to userspace.
|
||||
Many headers can be exported as-is but other headers requires a
|
||||
Many headers can be exported as-is but other headers require 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__)
|
||||
- drop all sections that are kernel internal (guarded by ifdef __KERNEL__)
|
||||
|
||||
Each relevant directory contain a file name "Kbuild" which specify the
|
||||
Each relevant directory contains a file name "Kbuild" which specifies the
|
||||
headers to be exported.
|
||||
See subsequent chapter for the syntax of the Kbuild file.
|
||||
|
||||
|
@ -116,6 +116,7 @@ parameter is applicable:
|
||||
More X86-64 boot options can be found in
|
||||
Documentation/x86/x86_64/boot-options.txt .
|
||||
X86 Either 32bit or 64bit x86 (same as X86-32+X86-64)
|
||||
XEN Xen support is enabled
|
||||
|
||||
In addition, the following text indicates that the option:
|
||||
|
||||
@ -1144,9 +1145,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
kgdboc= [KGDB,HW] kgdb over consoles.
|
||||
Requires a tty driver that supports console polling,
|
||||
or a supported polling keyboard driver (non-usb).
|
||||
Serial only format: <serial_device>[,baud]
|
||||
keyboard only format: kbd
|
||||
keyboard and serial format: kbd,<serial_device>[,baud]
|
||||
Serial only format: <serial_device>[,baud]
|
||||
keyboard only format: kbd
|
||||
keyboard and serial format: kbd,<serial_device>[,baud]
|
||||
Optional Kernel mode setting:
|
||||
kms, kbd format: kms,kbd
|
||||
kms, kbd and serial format: kms,kbd,<ser_dev>[,baud]
|
||||
|
||||
kgdbwait [KGDB] Stop kernel execution and enter the
|
||||
kernel debugger at the earliest opportunity.
|
||||
@ -2886,6 +2890,16 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks.
|
||||
xd_geo= See header of drivers/block/xd.c.
|
||||
|
||||
xen_emul_unplug= [HW,X86,XEN]
|
||||
Unplug Xen emulated devices
|
||||
Format: [unplug0,][unplug1]
|
||||
ide-disks -- unplug primary master IDE devices
|
||||
aux-ide-disks -- unplug non-primary-master IDE devices
|
||||
nics -- unplug network devices
|
||||
all -- unplug all emulated devices (NICs and IDE disks)
|
||||
ignore -- continue loading the Xen platform PCI driver even
|
||||
if the version check failed
|
||||
|
||||
xirc2ps_cs= [NET,PCMCIA]
|
||||
Format:
|
||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||
|
@ -285,6 +285,7 @@ architectures:
|
||||
- sparc64 (Return probes not yet implemented.)
|
||||
- arm
|
||||
- ppc
|
||||
- mips
|
||||
|
||||
3. Configuring Kprobes
|
||||
|
||||
|
@ -4,10 +4,17 @@ The Freescale DIU is a LCD controller, with proper hardware, it can also
|
||||
drive DVI monitors.
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "fsl-diu".
|
||||
- compatible : should be "fsl,diu" or "fsl,mpc5121-diu".
|
||||
- reg : should contain at least address and length of the DIU register
|
||||
set.
|
||||
- Interrupts : one DIU interrupt should be describe here.
|
||||
- interrupts : one DIU interrupt should be described here.
|
||||
- interrupt-parent : the phandle for the interrupt controller that
|
||||
services interrupts for this device.
|
||||
|
||||
Optional properties:
|
||||
- edid : verbatim EDID data block describing attached display.
|
||||
Data from the detailed timing descriptor will be used to
|
||||
program the display controller.
|
||||
|
||||
Example (MPC8610HPCD):
|
||||
display@2c000 {
|
||||
@ -16,3 +23,12 @@ Example (MPC8610HPCD):
|
||||
interrupts = <72 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
};
|
||||
|
||||
Example for MPC5121:
|
||||
display@2100 {
|
||||
compatible = "fsl,mpc5121-diu";
|
||||
reg = <0x2100 0x100>;
|
||||
interrupts = <64 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
edid = [edid-data];
|
||||
};
|
||||
|
@ -20,6 +20,7 @@ Recommended properties :
|
||||
- fsl,preserve-clocking : boolean; if defined, the clock settings
|
||||
from the bootloader are preserved (not touched).
|
||||
- clock-frequency : desired I2C bus clock frequency in Hz.
|
||||
- fsl,timeout : I2C bus timeout in microseconds.
|
||||
|
||||
Examples :
|
||||
|
||||
@ -59,4 +60,5 @@ Examples :
|
||||
interrupts = <43 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
clock-frequency = <400000>;
|
||||
fsl,timeout = <10000>;
|
||||
};
|
||||
|
@ -694,7 +694,7 @@ static void usage(void)
|
||||
#endif
|
||||
" -l|--list Show page details in ranges\n"
|
||||
" -L|--list-each Show page details one by one\n"
|
||||
" -N|--no-summary Don't show summay info\n"
|
||||
" -N|--no-summary Don't show summary info\n"
|
||||
" -X|--hwpoison hwpoison pages\n"
|
||||
" -x|--unpoison unpoison pages\n"
|
||||
" -h|--help Show this usage message\n"
|
||||
|
28
MAINTAINERS
28
MAINTAINERS
@ -694,6 +694,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
|
||||
F: arch/arm/mach-sa1100/jornada720.c
|
||||
F: arch/arm/mach-sa1100/include/mach/jornada720.h
|
||||
|
||||
ARM/INCOME PXA270 SUPPORT
|
||||
M: Marek Vasut <marek.vasut@gmail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/mach-pxa/income.c
|
||||
F: arch/arm/mach-pxa/include/mach-pxa/income.h
|
||||
|
||||
ARM/INTEL IOP32X ARM ARCHITECTURE
|
||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
@ -949,8 +956,9 @@ ARM/SHMOBILE ARM ARCHITECTURE
|
||||
M: Paul Mundt <lethal@linux-sh.org>
|
||||
M: Magnus Damm <magnus.damm@gmail.com>
|
||||
L: linux-sh@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
|
||||
W: http://oss.renesas.com
|
||||
Q: http://patchwork.kernel.org/project/linux-sh/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
|
||||
S: Supported
|
||||
F: arch/arm/mach-shmobile/
|
||||
F: drivers/sh/
|
||||
@ -1570,6 +1578,16 @@ L: platform-driver-x86@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/platform/x86/classmate-laptop.c
|
||||
|
||||
COCCINELLE/Semantic Patches (SmPL)
|
||||
M: Julia Lawall <julia@diku.dk>
|
||||
M: Gilles Muller <Gilles.Muller@lip6.fr>
|
||||
M: Nicolas Palix <npalix@diku.dk>
|
||||
L: cocci@diku.dk (moderated for non-subscribers)
|
||||
W: http://coccinelle.lip6.fr/
|
||||
S: Supported
|
||||
F: scripts/coccinelle/
|
||||
F: scripts/coccicheck
|
||||
|
||||
CODA FILE SYSTEM
|
||||
M: Jan Harkes <jaharkes@cs.cmu.edu>
|
||||
M: coda@cs.cmu.edu
|
||||
@ -3267,8 +3285,8 @@ F: fs/autofs4/
|
||||
|
||||
KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
|
||||
M: Michal Marek <mmarek@suse.cz>
|
||||
T: git git://repo.or.cz/linux-kbuild.git for-next
|
||||
T: git git://repo.or.cz/linux-kbuild.git for-linus
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git for-next
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git rc-fixes
|
||||
L: linux-kbuild@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/kbuild/
|
||||
@ -4732,7 +4750,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git
|
||||
F: drivers/net/wireless/rt2x00/
|
||||
|
||||
RAMDISK RAM BLOCK DEVICE DRIVER
|
||||
M: Nick Piggin <npiggin@suse.de>
|
||||
M: Nick Piggin <npiggin@kernel.dk>
|
||||
S: Maintained
|
||||
F: Documentation/blockdev/ramdisk.txt
|
||||
F: drivers/block/brd.c
|
||||
@ -5358,7 +5376,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
|
||||
S: Maintained
|
||||
F: arch/sparc/
|
||||
F: drivers/sbus
|
||||
F: drivers/sbus/
|
||||
|
||||
SPARC SERIAL DRIVERS
|
||||
M: "David S. Miller" <davem@davemloft.net>
|
||||
|
41
Makefile
41
Makefile
@ -332,10 +332,9 @@ CHECK = sparse
|
||||
|
||||
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
||||
-Wbitwise -Wno-return-void $(CF)
|
||||
MODFLAGS = -DMODULE
|
||||
CFLAGS_MODULE = $(MODFLAGS)
|
||||
AFLAGS_MODULE = $(MODFLAGS)
|
||||
LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds
|
||||
CFLAGS_MODULE =
|
||||
AFLAGS_MODULE =
|
||||
LDFLAGS_MODULE =
|
||||
CFLAGS_KERNEL =
|
||||
AFLAGS_KERNEL =
|
||||
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
||||
@ -354,7 +353,12 @@ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||
-Werror-implicit-function-declaration \
|
||||
-Wno-format-security \
|
||||
-fno-delete-null-pointer-checks
|
||||
KBUILD_AFLAGS_KERNEL :=
|
||||
KBUILD_CFLAGS_KERNEL :=
|
||||
KBUILD_AFLAGS := -D__ASSEMBLY__
|
||||
KBUILD_AFLAGS_MODULE := -DMODULE
|
||||
KBUILD_CFLAGS_MODULE := -DMODULE
|
||||
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
||||
|
||||
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
||||
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
|
||||
@ -369,6 +373,8 @@ export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
|
||||
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
|
||||
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
|
||||
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
|
||||
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
|
||||
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
|
||||
|
||||
# When compiling out-of-tree modules, put MODVERDIR in the module
|
||||
# tree rather than in the kernel tree. The kernel tree might
|
||||
@ -412,9 +418,9 @@ endif
|
||||
# of make so .config is not included in this case either (for *config).
|
||||
|
||||
no-dot-config-targets := clean mrproper distclean \
|
||||
cscope TAGS tags help %docs check% \
|
||||
cscope TAGS tags help %docs check% coccicheck \
|
||||
include/linux/version.h headers_% \
|
||||
kernelrelease kernelversion
|
||||
kernelversion
|
||||
|
||||
config-targets := 0
|
||||
mixed-targets := 0
|
||||
@ -526,7 +532,7 @@ endif # $(dot-config)
|
||||
# The all: target is the default when no target is given on the
|
||||
# command line.
|
||||
# This allow a user to issue only 'make' to build a kernel including modules
|
||||
# Defaults vmlinux but it is usually overridden in the arch makefile
|
||||
# Defaults to vmlinux, but the arch makefile usually adds further targets
|
||||
all: vmlinux
|
||||
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||
@ -557,6 +563,10 @@ KBUILD_CFLAGS += -g
|
||||
KBUILD_AFLAGS += -gdwarf-2
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_REDUCED
|
||||
KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly)
|
||||
endif
|
||||
|
||||
ifdef CONFIG_FUNCTION_TRACER
|
||||
KBUILD_CFLAGS += -pg
|
||||
endif
|
||||
@ -603,7 +613,7 @@ endif
|
||||
# Use --build-id when available.
|
||||
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
|
||||
$(call cc-ldoption, -Wl$(comma)--build-id,))
|
||||
LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||
KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
||||
|
||||
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
||||
@ -1209,8 +1219,9 @@ help:
|
||||
@echo ' includecheck - Check for duplicate included header files'
|
||||
@echo ' export_report - List the usages of all exported symbols'
|
||||
@echo ' headers_check - Sanity check on exported headers'
|
||||
@echo ' headerdep - Detect inclusion cycles in headers'; \
|
||||
echo ''
|
||||
@echo ' headerdep - Detect inclusion cycles in headers'
|
||||
@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
|
||||
@echo ''
|
||||
@echo 'Kernel packaging:'
|
||||
@$(MAKE) $(build)=$(package-dir) help
|
||||
@echo ''
|
||||
@ -1369,6 +1380,9 @@ versioncheck:
|
||||
-name '*.[hcS]' -type f -print | sort \
|
||||
| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
|
||||
|
||||
coccicheck:
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
|
||||
|
||||
namespacecheck:
|
||||
$(PERL) $(srctree)/scripts/namespace.pl
|
||||
|
||||
@ -1393,9 +1407,9 @@ checkstack:
|
||||
$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
|
||||
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
||||
|
||||
kernelrelease:
|
||||
$(if $(wildcard include/config/kernel.release), $(Q)echo $(KERNELRELEASE), \
|
||||
$(error kernelrelease not valid - run 'make prepare' to update it))
|
||||
kernelrelease: include/config/kernel.release
|
||||
@echo $(KERNELRELEASE)
|
||||
|
||||
kernelversion:
|
||||
@echo $(KERNELVERSION)
|
||||
|
||||
@ -1472,6 +1486,7 @@ cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \
|
||||
$(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
|
||||
|
||||
a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
|
||||
$(KBUILD_AFLAGS_KERNEL) \
|
||||
$(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \
|
||||
$(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
|
||||
|
||||
|
@ -636,6 +636,7 @@ config ARCH_S3C2410
|
||||
select ARCH_HAS_CPUFREQ
|
||||
select HAVE_CLK
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
select HAVE_S3C2410_I2C
|
||||
help
|
||||
Samsung S3C2410X CPU based systems, such as the Simtec Electronics
|
||||
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
|
||||
@ -665,6 +666,8 @@ config ARCH_S3C64XX
|
||||
select S3C_DEV_NAND
|
||||
select USB_ARCH_HAS_OHCI
|
||||
select SAMSUNG_GPIOLIB_4BIT
|
||||
select HAVE_S3C2410_I2C
|
||||
select HAVE_S3C2410_WATCHDOG
|
||||
help
|
||||
Samsung S3C64XX series based systems
|
||||
|
||||
@ -673,7 +676,10 @@ config ARCH_S5P6440
|
||||
select CPU_V6
|
||||
select GENERIC_GPIO
|
||||
select HAVE_CLK
|
||||
select HAVE_S3C2410_WATCHDOG
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
select HAVE_S3C2410_I2C
|
||||
select HAVE_S3C_RTC
|
||||
help
|
||||
Samsung S5P6440 CPU based systems
|
||||
|
||||
@ -683,6 +689,7 @@ config ARCH_S5P6442
|
||||
select GENERIC_GPIO
|
||||
select HAVE_CLK
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
select HAVE_S3C2410_WATCHDOG
|
||||
help
|
||||
Samsung S5P6442 CPU based systems
|
||||
|
||||
@ -693,6 +700,9 @@ config ARCH_S5PC100
|
||||
select CPU_V7
|
||||
select ARM_L1_CACHE_SHIFT_6
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
select HAVE_S3C2410_I2C
|
||||
select HAVE_S3C_RTC
|
||||
select HAVE_S3C2410_WATCHDOG
|
||||
help
|
||||
Samsung S5PC100 series based systems
|
||||
|
||||
@ -703,9 +713,21 @@ config ARCH_S5PV210
|
||||
select HAVE_CLK
|
||||
select ARM_L1_CACHE_SHIFT_6
|
||||
select ARCH_USES_GETTIMEOFFSET
|
||||
select HAVE_S3C2410_I2C
|
||||
select HAVE_S3C_RTC
|
||||
select HAVE_S3C2410_WATCHDOG
|
||||
help
|
||||
Samsung S5PV210/S5PC110 series based systems
|
||||
|
||||
config ARCH_S5PV310
|
||||
bool "Samsung S5PV310/S5PC210"
|
||||
select CPU_V7
|
||||
select GENERIC_GPIO
|
||||
select HAVE_CLK
|
||||
select GENERIC_CLOCKEVENTS
|
||||
help
|
||||
Samsung S5PV310 series based systems
|
||||
|
||||
config ARCH_SHARK
|
||||
bool "Shark"
|
||||
select CPU_SA110
|
||||
@ -907,6 +929,8 @@ source "arch/arm/mach-s5pc100/Kconfig"
|
||||
|
||||
source "arch/arm/mach-s5pv210/Kconfig"
|
||||
|
||||
source "arch/arm/mach-s5pv310/Kconfig"
|
||||
|
||||
source "arch/arm/mach-shmobile/Kconfig"
|
||||
|
||||
source "arch/arm/plat-stmp3xxx/Kconfig"
|
||||
@ -1098,10 +1122,11 @@ config SMP
|
||||
bool "Symmetric Multi-Processing (EXPERIMENTAL)"
|
||||
depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\
|
||||
MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
|
||||
ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
|
||||
ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || ARCH_S5PV310)
|
||||
depends on GENERIC_CLOCKEVENTS
|
||||
select USE_GENERIC_SMP_HELPERS
|
||||
select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
|
||||
select HAVE_ARM_SCU if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_U8500 || ARCH_VEXPRESS_CA9X4 ||\
|
||||
ARCH_S5PV310)
|
||||
help
|
||||
This enables support for systems with more than one CPU. If you have
|
||||
a system with only one CPU, like most personal computers, say N. If
|
||||
@ -1171,9 +1196,9 @@ config LOCAL_TIMERS
|
||||
bool "Use local timer interrupts"
|
||||
depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \
|
||||
REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
|
||||
ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
|
||||
default y
|
||||
select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_VEXPRESS || ARCH_OMAP4 || ARCH_U8500)
|
||||
ARCH_S5PV310 || ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
|
||||
select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_S5PV310 || \
|
||||
ARCH_U8500 || ARCH_VEXPRESS)
|
||||
help
|
||||
Enable support for local timers on SMP platforms, rather then the
|
||||
legacy IPI broadcast method. Local timers allows the system
|
||||
@ -1184,7 +1209,8 @@ source kernel/Kconfig.preempt
|
||||
|
||||
config HZ
|
||||
int
|
||||
default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P6440 || ARCH_S5P6442 || ARCH_S5PV210
|
||||
default 200 if ARCH_EBSA110 || ARCH_S3C2410 || ARCH_S5P6440 || \
|
||||
ARCH_S5P6442 || ARCH_S5PV210 || ARCH_S5PV310
|
||||
default OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
|
||||
default AT91_TIMER_HZ if ARCH_AT91
|
||||
default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE
|
||||
|
@ -174,6 +174,7 @@ machine-$(CONFIG_ARCH_S5P6440) := s5p6440
|
||||
machine-$(CONFIG_ARCH_S5P6442) := s5p6442
|
||||
machine-$(CONFIG_ARCH_S5PC100) := s5pc100
|
||||
machine-$(CONFIG_ARCH_S5PV210) := s5pv210
|
||||
machine-$(CONFIG_ARCH_S5PV310) := s5pv310
|
||||
machine-$(CONFIG_ARCH_SA1100) := sa1100
|
||||
machine-$(CONFIG_ARCH_SHARK) := shark
|
||||
machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
|
||||
|
@ -33,7 +33,7 @@ ifeq ($(CONFIG_CPU_XSCALE),y)
|
||||
OBJS += head-xscale.o
|
||||
endif
|
||||
|
||||
ifeq ($(CONFIG_PXA_SHARPSL),y)
|
||||
ifeq ($(CONFIG_PXA_SHARPSL_DETECT_MACH_ID),y)
|
||||
OBJS += head-sharpsl.o
|
||||
endif
|
||||
|
||||
|
@ -263,14 +263,6 @@ static int it8152_pci_platform_notify_remove(struct device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dma_needs_bounce(struct device *dev, dma_addr_t dma_addr, size_t size)
|
||||
{
|
||||
dev_dbg(dev, "%s: dma_addr %08x, size %08x\n",
|
||||
__func__, dma_addr, size);
|
||||
return (dev->bus == &pci_bus_type) &&
|
||||
((dma_addr + size - PHYS_OFFSET) >= SZ_64M);
|
||||
}
|
||||
|
||||
int __init it8152_pci_setup(int nr, struct pci_sys_data *sys)
|
||||
{
|
||||
it8152_io.start = IT8152_IO_BASE + 0x12000;
|
||||
|
@ -1,66 +0,0 @@
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_S5PV210=y
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
||||
CONFIG_MACH_SMDKC110=y
|
||||
CONFIG_VMSPLIT_2G=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_CMDLINE="root=/dev/ram0 rw ramdisk=8192 initrd=0x20800000,8M console=ttySAC1,115200 init=/linuxrc"
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_SIZE=8192
|
||||
# CONFIG_MISC_DEVICES is not set
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_INPUT_KEYBOARD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_SAMSUNG=y
|
||||
CONFIG_SERIAL_SAMSUNG_CONSOLE=y
|
||||
CONFIG_HW_RANDOM=y
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
# CONFIG_HID_SUPPORT is not set
|
||||
# CONFIG_USB_SUPPORT is not set
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_CRAMFS=y
|
||||
CONFIG_ROMFS_FS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_BSD_DISKLABEL=y
|
||||
CONFIG_SOLARIS_X86_PARTITION=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_SPINLOCK=y
|
||||
CONFIG_DEBUG_MUTEXES=y
|
||||
CONFIG_DEBUG_SPINLOCK_SLEEP=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
CONFIG_SYSCTL_SYSCALL_CHECK=y
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
CONFIG_DEBUG_LL=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
CONFIG_DEBUG_S3C_UART=1
|
||||
CONFIG_CRC_CCITT=y
|
@ -7,6 +7,11 @@ CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
CONFIG_ARCH_S5PV210=y
|
||||
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
||||
CONFIG_S3C_DEV_FB=y
|
||||
CONFIG_S5PV210_SETUP_FB_24BPP=y
|
||||
CONFIG_MACH_AQUILA=y
|
||||
CONFIG_MACH_GONI=y
|
||||
CONFIG_MACH_SMDKC110=y
|
||||
CONFIG_MACH_SMDKV210=y
|
||||
CONFIG_VMSPLIT_2G=y
|
||||
CONFIG_PREEMPT=y
|
||||
|
@ -298,7 +298,15 @@ extern void dmabounce_unregister_dev(struct device *);
|
||||
* DMA access and 1 if the buffer needs to be bounced.
|
||||
*
|
||||
*/
|
||||
#ifdef CONFIG_SA1111
|
||||
extern int dma_needs_bounce(struct device*, dma_addr_t, size_t);
|
||||
#else
|
||||
static inline int dma_needs_bounce(struct device *dev, dma_addr_t addr,
|
||||
size_t size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The DMA API, implemented by dmabounce.c. See below for descriptions.
|
||||
|
@ -22,18 +22,23 @@
|
||||
#define SCOOP_GPWR 0x24
|
||||
#define SCOOP_GPRR 0x28
|
||||
|
||||
#define SCOOP_GPCR_PA22 ( 1 << 12 )
|
||||
#define SCOOP_GPCR_PA21 ( 1 << 11 )
|
||||
#define SCOOP_GPCR_PA20 ( 1 << 10 )
|
||||
#define SCOOP_GPCR_PA19 ( 1 << 9 )
|
||||
#define SCOOP_GPCR_PA18 ( 1 << 8 )
|
||||
#define SCOOP_GPCR_PA17 ( 1 << 7 )
|
||||
#define SCOOP_GPCR_PA16 ( 1 << 6 )
|
||||
#define SCOOP_GPCR_PA15 ( 1 << 5 )
|
||||
#define SCOOP_GPCR_PA14 ( 1 << 4 )
|
||||
#define SCOOP_GPCR_PA13 ( 1 << 3 )
|
||||
#define SCOOP_GPCR_PA12 ( 1 << 2 )
|
||||
#define SCOOP_GPCR_PA11 ( 1 << 1 )
|
||||
#define SCOOP_CPR_OUT (1 << 7)
|
||||
#define SCOOP_CPR_SD_3V (1 << 2)
|
||||
#define SCOOP_CPR_CF_XV (1 << 1)
|
||||
#define SCOOP_CPR_CF_3V (1 << 0)
|
||||
|
||||
#define SCOOP_GPCR_PA22 (1 << 12)
|
||||
#define SCOOP_GPCR_PA21 (1 << 11)
|
||||
#define SCOOP_GPCR_PA20 (1 << 10)
|
||||
#define SCOOP_GPCR_PA19 (1 << 9)
|
||||
#define SCOOP_GPCR_PA18 (1 << 8)
|
||||
#define SCOOP_GPCR_PA17 (1 << 7)
|
||||
#define SCOOP_GPCR_PA16 (1 << 6)
|
||||
#define SCOOP_GPCR_PA15 (1 << 5)
|
||||
#define SCOOP_GPCR_PA14 (1 << 4)
|
||||
#define SCOOP_GPCR_PA13 (1 << 3)
|
||||
#define SCOOP_GPCR_PA12 (1 << 2)
|
||||
#define SCOOP_GPCR_PA11 (1 << 1)
|
||||
|
||||
struct scoop_config {
|
||||
unsigned short io_out;
|
||||
|
@ -70,11 +70,11 @@ extern int kgdb_fault_expected;
|
||||
#define _GP_REGS 16
|
||||
#define _FP_REGS 8
|
||||
#define _EXTRA_REGS 2
|
||||
#define GDB_MAX_REGS (_GP_REGS + (_FP_REGS * 3) + _EXTRA_REGS)
|
||||
#define DBG_MAX_REG_NUM (_GP_REGS + (_FP_REGS * 3) + _EXTRA_REGS)
|
||||
|
||||
#define KGDB_MAX_NO_CPUS 1
|
||||
#define BUFMAX 400
|
||||
#define NUMREGBYTES (GDB_MAX_REGS << 2)
|
||||
#define NUMREGBYTES (DBG_MAX_REG_NUM << 2)
|
||||
#define NUMCRITREGBYTES (32 << 2)
|
||||
|
||||
#define _R0 0
|
||||
@ -93,7 +93,7 @@ extern int kgdb_fault_expected;
|
||||
#define _SPT 13
|
||||
#define _LR 14
|
||||
#define _PC 15
|
||||
#define _CPSR (GDB_MAX_REGS - 1)
|
||||
#define _CPSR (DBG_MAX_REG_NUM - 1)
|
||||
|
||||
/*
|
||||
* So that we can denote the end of a frame for tracing,
|
||||
|
@ -10,57 +10,62 @@
|
||||
* Deepak Saxena <dsaxena@plexity.net>
|
||||
*/
|
||||
#include <linux/irq.h>
|
||||
#include <linux/kdebug.h>
|
||||
#include <linux/kgdb.h>
|
||||
#include <asm/traps.h>
|
||||
|
||||
/* Make a local copy of the registers passed into the handler (bletch) */
|
||||
void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *kernel_regs)
|
||||
struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] =
|
||||
{
|
||||
int regno;
|
||||
{ "r0", 4, offsetof(struct pt_regs, ARM_r0)},
|
||||
{ "r1", 4, offsetof(struct pt_regs, ARM_r1)},
|
||||
{ "r2", 4, offsetof(struct pt_regs, ARM_r2)},
|
||||
{ "r3", 4, offsetof(struct pt_regs, ARM_r3)},
|
||||
{ "r4", 4, offsetof(struct pt_regs, ARM_r4)},
|
||||
{ "r5", 4, offsetof(struct pt_regs, ARM_r5)},
|
||||
{ "r6", 4, offsetof(struct pt_regs, ARM_r6)},
|
||||
{ "r7", 4, offsetof(struct pt_regs, ARM_r7)},
|
||||
{ "r8", 4, offsetof(struct pt_regs, ARM_r8)},
|
||||
{ "r9", 4, offsetof(struct pt_regs, ARM_r9)},
|
||||
{ "r10", 4, offsetof(struct pt_regs, ARM_r10)},
|
||||
{ "fp", 4, offsetof(struct pt_regs, ARM_fp)},
|
||||
{ "ip", 4, offsetof(struct pt_regs, ARM_ip)},
|
||||
{ "sp", 4, offsetof(struct pt_regs, ARM_sp)},
|
||||
{ "lr", 4, offsetof(struct pt_regs, ARM_lr)},
|
||||
{ "pc", 4, offsetof(struct pt_regs, ARM_pc)},
|
||||
{ "f0", 12, -1 },
|
||||
{ "f1", 12, -1 },
|
||||
{ "f2", 12, -1 },
|
||||
{ "f3", 12, -1 },
|
||||
{ "f4", 12, -1 },
|
||||
{ "f5", 12, -1 },
|
||||
{ "f6", 12, -1 },
|
||||
{ "f7", 12, -1 },
|
||||
{ "fps", 4, -1 },
|
||||
{ "cpsr", 4, offsetof(struct pt_regs, ARM_cpsr)},
|
||||
};
|
||||
|
||||
/* Initialize all to zero. */
|
||||
for (regno = 0; regno < GDB_MAX_REGS; regno++)
|
||||
gdb_regs[regno] = 0;
|
||||
char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
|
||||
{
|
||||
if (regno >= DBG_MAX_REG_NUM || regno < 0)
|
||||
return NULL;
|
||||
|
||||
gdb_regs[_R0] = kernel_regs->ARM_r0;
|
||||
gdb_regs[_R1] = kernel_regs->ARM_r1;
|
||||
gdb_regs[_R2] = kernel_regs->ARM_r2;
|
||||
gdb_regs[_R3] = kernel_regs->ARM_r3;
|
||||
gdb_regs[_R4] = kernel_regs->ARM_r4;
|
||||
gdb_regs[_R5] = kernel_regs->ARM_r5;
|
||||
gdb_regs[_R6] = kernel_regs->ARM_r6;
|
||||
gdb_regs[_R7] = kernel_regs->ARM_r7;
|
||||
gdb_regs[_R8] = kernel_regs->ARM_r8;
|
||||
gdb_regs[_R9] = kernel_regs->ARM_r9;
|
||||
gdb_regs[_R10] = kernel_regs->ARM_r10;
|
||||
gdb_regs[_FP] = kernel_regs->ARM_fp;
|
||||
gdb_regs[_IP] = kernel_regs->ARM_ip;
|
||||
gdb_regs[_SPT] = kernel_regs->ARM_sp;
|
||||
gdb_regs[_LR] = kernel_regs->ARM_lr;
|
||||
gdb_regs[_PC] = kernel_regs->ARM_pc;
|
||||
gdb_regs[_CPSR] = kernel_regs->ARM_cpsr;
|
||||
if (dbg_reg_def[regno].offset != -1)
|
||||
memcpy(mem, (void *)regs + dbg_reg_def[regno].offset,
|
||||
dbg_reg_def[regno].size);
|
||||
else
|
||||
memset(mem, 0, dbg_reg_def[regno].size);
|
||||
return dbg_reg_def[regno].name;
|
||||
}
|
||||
|
||||
/* Copy local gdb registers back to kgdb regs, for later copy to kernel */
|
||||
void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *kernel_regs)
|
||||
int dbg_set_reg(int regno, void *mem, struct pt_regs *regs)
|
||||
{
|
||||
kernel_regs->ARM_r0 = gdb_regs[_R0];
|
||||
kernel_regs->ARM_r1 = gdb_regs[_R1];
|
||||
kernel_regs->ARM_r2 = gdb_regs[_R2];
|
||||
kernel_regs->ARM_r3 = gdb_regs[_R3];
|
||||
kernel_regs->ARM_r4 = gdb_regs[_R4];
|
||||
kernel_regs->ARM_r5 = gdb_regs[_R5];
|
||||
kernel_regs->ARM_r6 = gdb_regs[_R6];
|
||||
kernel_regs->ARM_r7 = gdb_regs[_R7];
|
||||
kernel_regs->ARM_r8 = gdb_regs[_R8];
|
||||
kernel_regs->ARM_r9 = gdb_regs[_R9];
|
||||
kernel_regs->ARM_r10 = gdb_regs[_R10];
|
||||
kernel_regs->ARM_fp = gdb_regs[_FP];
|
||||
kernel_regs->ARM_ip = gdb_regs[_IP];
|
||||
kernel_regs->ARM_sp = gdb_regs[_SPT];
|
||||
kernel_regs->ARM_lr = gdb_regs[_LR];
|
||||
kernel_regs->ARM_pc = gdb_regs[_PC];
|
||||
kernel_regs->ARM_cpsr = gdb_regs[_CPSR];
|
||||
if (regno >= DBG_MAX_REG_NUM || regno < 0)
|
||||
return -EINVAL;
|
||||
|
||||
if (dbg_reg_def[regno].offset != -1)
|
||||
memcpy((void *)regs + dbg_reg_def[regno].offset, mem,
|
||||
dbg_reg_def[regno].size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
@ -176,6 +181,33 @@ void kgdb_roundup_cpus(unsigned long flags)
|
||||
local_irq_disable();
|
||||
}
|
||||
|
||||
static int __kgdb_notify(struct die_args *args, unsigned long cmd)
|
||||
{
|
||||
struct pt_regs *regs = args->regs;
|
||||
|
||||
if (kgdb_handle_exception(1, args->signr, cmd, regs))
|
||||
return NOTIFY_DONE;
|
||||
return NOTIFY_STOP;
|
||||
}
|
||||
static int
|
||||
kgdb_notify(struct notifier_block *self, unsigned long cmd, void *ptr)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret;
|
||||
|
||||
local_irq_save(flags);
|
||||
ret = __kgdb_notify(ptr, cmd);
|
||||
local_irq_restore(flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct notifier_block kgdb_notifier = {
|
||||
.notifier_call = kgdb_notify,
|
||||
.priority = -INT_MAX,
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* kgdb_arch_init - Perform any architecture specific initalization.
|
||||
*
|
||||
@ -184,6 +216,11 @@ void kgdb_roundup_cpus(unsigned long flags)
|
||||
*/
|
||||
int kgdb_arch_init(void)
|
||||
{
|
||||
int ret = register_die_notifier(&kgdb_notifier);
|
||||
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
|
||||
register_undef_hook(&kgdb_brkpt_hook);
|
||||
register_undef_hook(&kgdb_compiled_brkpt_hook);
|
||||
|
||||
@ -200,6 +237,7 @@ void kgdb_arch_exit(void)
|
||||
{
|
||||
unregister_undef_hook(&kgdb_brkpt_hook);
|
||||
unregister_undef_hook(&kgdb_compiled_brkpt_hook);
|
||||
unregister_die_notifier(&kgdb_notifier);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -150,9 +150,8 @@ static void __init common_init(void)
|
||||
|
||||
MACHINE_START(ASPENITE, "PXA168-based Aspenite Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = pxa168_init_irq,
|
||||
.timer = &pxa168_timer,
|
||||
.init_machine = common_init,
|
||||
@ -160,9 +159,8 @@ MACHINE_END
|
||||
|
||||
MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = pxa168_init_irq,
|
||||
.timer = &pxa168_timer,
|
||||
.init_machine = common_init,
|
||||
|
@ -42,9 +42,8 @@ static void __init avengers_lite_init(void)
|
||||
|
||||
MACHINE_START(AVENGERS_LITE, "PXA168 Avengers lite Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = pxa168_init_irq,
|
||||
.timer = &pxa168_timer,
|
||||
.init_machine = avengers_lite_init,
|
||||
|
@ -31,7 +31,7 @@ static struct map_desc standard_io_desc[] __initdata = {
|
||||
},
|
||||
};
|
||||
|
||||
void __init pxa_map_io(void)
|
||||
void __init mmp_map_io(void)
|
||||
{
|
||||
iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
|
||||
}
|
||||
|
@ -3,15 +3,6 @@
|
||||
struct sys_timer;
|
||||
|
||||
extern void timer_init(int irq);
|
||||
extern void mmp2_clear_pmic_int(void);
|
||||
|
||||
extern struct sys_timer pxa168_timer;
|
||||
extern struct sys_timer pxa910_timer;
|
||||
extern struct sys_timer mmp2_timer;
|
||||
extern void __init pxa168_init_irq(void);
|
||||
extern void __init pxa910_init_irq(void);
|
||||
extern void __init mmp2_init_icu(void);
|
||||
extern void __init mmp2_init_irq(void);
|
||||
|
||||
extern void __init icu_init_irq(void);
|
||||
extern void __init pxa_map_io(void);
|
||||
extern void __init mmp_map_io(void);
|
||||
|
@ -114,9 +114,8 @@ static void __init flint_init(void)
|
||||
|
||||
MACHINE_START(FLINT, "Flint Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = mmp2_init_irq,
|
||||
.timer = &mmp2_timer,
|
||||
.init_machine = flint_init,
|
||||
|
@ -1,3 +1,6 @@
|
||||
#ifndef __MACH_DEVICE_H
|
||||
#define __MACH_DEVICE_H
|
||||
|
||||
#include <linux/types.h>
|
||||
|
||||
#define MAX_RESOURCE_DMA 2
|
||||
@ -47,3 +50,4 @@ struct pxa_device_desc mmp2_device_##_name __initdata = { \
|
||||
}
|
||||
|
||||
extern int pxa_register_device(struct pxa_device_desc *, void *, size_t);
|
||||
#endif /* __MACH_DEVICE_H */
|
||||
|
@ -1,6 +1,13 @@
|
||||
#ifndef __ASM_MACH_MMP2_H
|
||||
#define __ASM_MACH_MMP2_H
|
||||
|
||||
struct sys_timer;
|
||||
|
||||
extern struct sys_timer mmp2_timer;
|
||||
extern void __init mmp2_init_icu(void);
|
||||
extern void __init mmp2_init_irq(void);
|
||||
extern void mmp2_clear_pmic_int(void);
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <mach/devices.h>
|
||||
#include <plat/i2c.h>
|
||||
|
@ -1,6 +1,11 @@
|
||||
#ifndef __ASM_MACH_PXA168_H
|
||||
#define __ASM_MACH_PXA168_H
|
||||
|
||||
struct sys_timer;
|
||||
|
||||
extern struct sys_timer pxa168_timer;
|
||||
extern void __init pxa168_init_irq(void);
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <mach/devices.h>
|
||||
#include <plat/i2c.h>
|
||||
|
@ -1,6 +1,11 @@
|
||||
#ifndef __ASM_MACH_PXA910_H
|
||||
#define __ASM_MACH_PXA910_H
|
||||
|
||||
struct sys_timer;
|
||||
|
||||
extern struct sys_timer pxa910_timer;
|
||||
extern void __init pxa910_init_irq(void);
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <mach/devices.h>
|
||||
#include <plat/i2c.h>
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/regs-icu.h>
|
||||
#include <mach/mmp2.h>
|
||||
|
||||
#include "common.h"
|
||||
|
||||
|
@ -135,9 +135,8 @@ static void __init jasper_init(void)
|
||||
|
||||
MACHINE_START(MARVELL_JASPER, "Jasper Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = mmp2_init_irq,
|
||||
.timer = &mmp2_timer,
|
||||
.init_machine = jasper_init,
|
||||
|
@ -17,6 +17,7 @@
|
||||
|
||||
#include <asm/hardware/cache-tauros2.h>
|
||||
|
||||
#include <asm/mach/time.h>
|
||||
#include <mach/addr-map.h>
|
||||
#include <mach/regs-apbc.h>
|
||||
#include <mach/regs-apmu.h>
|
||||
@ -26,6 +27,7 @@
|
||||
#include <mach/mfp.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <mach/devices.h>
|
||||
#include <mach/mmp2.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "clock.h"
|
||||
@ -158,6 +160,26 @@ static int __init mmp2_init(void)
|
||||
}
|
||||
postcore_initcall(mmp2_init);
|
||||
|
||||
static void __init mmp2_timer_init(void)
|
||||
{
|
||||
unsigned long clk_rst;
|
||||
|
||||
__raw_writel(APBC_APBCLK | APBC_RST, APBC_MMP2_TIMERS);
|
||||
|
||||
/*
|
||||
* enable bus/functional clock, enable 6.5MHz (divider 4),
|
||||
* release reset
|
||||
*/
|
||||
clk_rst = APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(1);
|
||||
__raw_writel(clk_rst, APBC_MMP2_TIMERS);
|
||||
|
||||
timer_init(IRQ_MMP2_TIMER1);
|
||||
}
|
||||
|
||||
struct sys_timer mmp2_timer = {
|
||||
.init = mmp2_timer_init,
|
||||
};
|
||||
|
||||
/* on-chip devices */
|
||||
MMP2_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4030000, 0x30, 4, 5);
|
||||
MMP2_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4017000, 0x30, 20, 21);
|
||||
|
@ -100,9 +100,8 @@ static void __init tavorevb_init(void)
|
||||
|
||||
MACHINE_START(TAVOREVB, "PXA910 Evaluation Board (aka TavorEVB)")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = pxa910_init_irq,
|
||||
.timer = &pxa910_timer,
|
||||
.init_machine = tavorevb_init,
|
||||
|
@ -200,24 +200,3 @@ void __init timer_init(int irq)
|
||||
clocksource_register(&cksrc);
|
||||
clockevents_register_device(&ckevt);
|
||||
}
|
||||
|
||||
static void __init mmp2_timer_init(void)
|
||||
{
|
||||
unsigned long clk_rst;
|
||||
|
||||
__raw_writel(APBC_APBCLK | APBC_RST, APBC_MMP2_TIMERS);
|
||||
|
||||
/*
|
||||
* enable bus/functional clock, enable 6.5MHz (divider 4),
|
||||
* release reset
|
||||
*/
|
||||
clk_rst = APBC_APBCLK | APBC_FNCLK | APBC_FNCLKSEL(1);
|
||||
__raw_writel(clk_rst, APBC_MMP2_TIMERS);
|
||||
|
||||
timer_init(IRQ_MMP2_TIMER1);
|
||||
}
|
||||
|
||||
struct sys_timer mmp2_timer = {
|
||||
.init = mmp2_timer_init,
|
||||
};
|
||||
|
||||
|
@ -123,9 +123,8 @@ static void __init ttc_dkb_init(void)
|
||||
|
||||
MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform")
|
||||
.phys_io = APB_PHYS_BASE,
|
||||
.boot_params = 0x00000100,
|
||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.map_io = mmp_map_io,
|
||||
.init_irq = pxa910_init_irq,
|
||||
.timer = &pxa910_timer,
|
||||
.init_machine = ttc_dkb_init,
|
||||
|
@ -238,6 +238,17 @@ config MACH_COLIBRI
|
||||
bool "Toradex Colibri PXA270"
|
||||
select PXA27x
|
||||
|
||||
config MACH_COLIBRI_PXA270_EVALBOARD
|
||||
bool "Toradex Colibri Evaluation Carrier Board support (PXA270)"
|
||||
depends on MACH_COLIBRI
|
||||
|
||||
config MACH_COLIBRI_PXA270_INCOME
|
||||
bool "Income s.r.o. PXA270 SBC"
|
||||
depends on MACH_COLIBRI
|
||||
select PXA27x
|
||||
select HAVE_PWM
|
||||
select PXA_HAVE_BOARD_IRQS
|
||||
|
||||
config MACH_COLIBRI300
|
||||
bool "Toradex Colibri PXA300/310"
|
||||
select PXA3xx
|
||||
@ -336,6 +347,9 @@ config ARCH_PXA_PALM
|
||||
bool "PXA based Palm PDAs"
|
||||
select HAVE_PWM
|
||||
|
||||
config MACH_PALM27X
|
||||
bool
|
||||
|
||||
config MACH_PALMTE2
|
||||
bool "Palm Tungsten|E2"
|
||||
default y
|
||||
@ -360,6 +374,7 @@ config MACH_PALMT5
|
||||
depends on ARCH_PXA_PALM
|
||||
select PXA27x
|
||||
select IWMMXT
|
||||
select MACH_PALM27X
|
||||
help
|
||||
Say Y here if you intend to run this kernel on a Palm Tungsten|T5
|
||||
handheld computer.
|
||||
@ -370,6 +385,7 @@ config MACH_PALMTX
|
||||
depends on ARCH_PXA_PALM
|
||||
select PXA27x
|
||||
select IWMMXT
|
||||
select MACH_PALM27X
|
||||
help
|
||||
Say Y here if you intend to run this kernel on a Palm T|X
|
||||
handheld computer.
|
||||
@ -380,6 +396,7 @@ config MACH_PALMZ72
|
||||
depends on ARCH_PXA_PALM
|
||||
select PXA27x
|
||||
select IWMMXT
|
||||
select MACH_PALM27X
|
||||
help
|
||||
Say Y here if you intend to run this kernel on Palm Zire 72
|
||||
handheld computer.
|
||||
@ -390,6 +407,7 @@ config MACH_PALMLD
|
||||
depends on ARCH_PXA_PALM
|
||||
select PXA27x
|
||||
select IWMMXT
|
||||
select MACH_PALM27X
|
||||
help
|
||||
Say Y here if you intend to run this kernel on a Palm LifeDrive
|
||||
handheld computer.
|
||||
@ -447,16 +465,13 @@ config PXA_SHARPSL
|
||||
SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
|
||||
handheld computer.
|
||||
|
||||
config SHARPSL_PM
|
||||
bool
|
||||
select APM_EMULATION
|
||||
select SHARPSL_PM_MAX1111
|
||||
|
||||
config SHARPSL_PM_MAX1111
|
||||
bool
|
||||
depends on !CORGI_SSP_DEPRECATED
|
||||
select HWMON
|
||||
select SENSORS_MAX1111
|
||||
config PXA_SHARPSL_DETECT_MACH_ID
|
||||
bool "Detect machine ID at run-time in the decompressor"
|
||||
depends on PXA_SHARPSL
|
||||
help
|
||||
Say Y here if you want the zImage decompressor to detect
|
||||
the Zaurus machine ID at run-time. For latest kexec-based
|
||||
boot loader, this is not necessary.
|
||||
|
||||
config MACH_POODLE
|
||||
bool "Enable Sharp SL-5600 (Poodle) Support"
|
||||
@ -510,6 +525,25 @@ config MACH_TOSA
|
||||
select PXA25x
|
||||
select PXA_HAVE_BOARD_IRQS
|
||||
|
||||
config TOSA_BT
|
||||
tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
|
||||
depends on MACH_TOSA
|
||||
select RFKILL
|
||||
help
|
||||
This is a simple driver that is able to control
|
||||
the state of built in bluetooth chip on tosa.
|
||||
|
||||
config TOSA_USE_EXT_KEYCODES
|
||||
bool "Tosa keyboard: use extended keycodes"
|
||||
depends on MACH_TOSA
|
||||
default n
|
||||
help
|
||||
Say Y here to enable the tosa keyboard driver to generate extended
|
||||
(>= 127) keycodes. Be aware, that they can't be correctly interpreted
|
||||
by either console keyboard driver or by Kdrive keybd driver.
|
||||
|
||||
Say Y only if you know, what you are doing!
|
||||
|
||||
config MACH_ICONTROL
|
||||
bool "TMT iControl/SafeTCam based on the MXM-8x10 CoM"
|
||||
select CPU_PXA320
|
||||
@ -648,25 +682,15 @@ config PXA_SHARP_Cxx00
|
||||
help
|
||||
Enable common support for Sharp Cxx00 models
|
||||
|
||||
config TOSA_BT
|
||||
tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
|
||||
depends on MACH_TOSA
|
||||
select RFKILL
|
||||
help
|
||||
This is a simple driver that is able to control
|
||||
the state of built in bluetooth chip on tosa.
|
||||
|
||||
config TOSA_USE_EXT_KEYCODES
|
||||
bool "Tosa keyboard: use extended keycodes"
|
||||
depends on MACH_TOSA
|
||||
default n
|
||||
help
|
||||
Say Y here to enable the tosa keyboard driver to generate extended
|
||||
(>= 127) keycodes. Be aware, that they can't be correctly interpreted
|
||||
by either console keyboard driver or by Kdrive keybd driver.
|
||||
|
||||
Say Y only if you know, what you are doing!
|
||||
config SHARPSL_PM
|
||||
bool
|
||||
select APM_EMULATION
|
||||
select SHARPSL_PM_MAX1111
|
||||
|
||||
config SHARPSL_PM_MAX1111
|
||||
bool
|
||||
select HWMON
|
||||
select SENSORS_MAX1111
|
||||
|
||||
config PXA_HAVE_BOARD_IRQS
|
||||
bool
|
||||
|
@ -51,14 +51,16 @@ obj-$(CONFIG_MACH_CAPC7117) += capc7117.o mxm8x10.o
|
||||
obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o
|
||||
obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o
|
||||
obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.o
|
||||
obj-$(CONFIG_MACH_INTELMOTE2) += imote2.o
|
||||
obj-$(CONFIG_MACH_INTELMOTE2) += stargate2.o
|
||||
obj-$(CONFIG_MACH_STARGATE2) += stargate2.o
|
||||
obj-$(CONFIG_MACH_XCEP) += xcep.o
|
||||
obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o
|
||||
obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o
|
||||
obj-$(CONFIG_MACH_PCM027) += pcm027.o
|
||||
obj-$(CONFIG_MACH_PCM990_BASEBOARD) += pcm990-baseboard.o
|
||||
obj-$(CONFIG_MACH_COLIBRI) += colibri-pxa270.o
|
||||
obj-$(CONFIG_MACH_COLIBRI) += colibri-pxa270.o
|
||||
obj-$(CONFIG_MACH_COLIBRI_PXA270_EVALBOARD) += colibri-pxa270-evalboard.o
|
||||
obj-$(CONFIG_MACH_COLIBRI_PXA270_INCOME) += colibri-pxa270-income.o
|
||||
obj-$(CONFIG_MACH_COLIBRI300) += colibri-pxa3xx.o colibri-pxa300.o
|
||||
obj-$(CONFIG_MACH_COLIBRI320) += colibri-pxa3xx.o colibri-pxa320.o
|
||||
obj-$(CONFIG_MACH_VPAC270) += vpac270.o
|
||||
@ -73,6 +75,7 @@ obj-$(CONFIG_PXA_EZX) += ezx.o
|
||||
obj-$(CONFIG_MACH_MP900C) += mp900.o
|
||||
obj-$(CONFIG_MACH_PALMTE2) += palmte2.o
|
||||
obj-$(CONFIG_MACH_PALMTC) += palmtc.o
|
||||
obj-$(CONFIG_MACH_PALM27X) += palm27x.o
|
||||
obj-$(CONFIG_MACH_PALMT5) += palmt5.o
|
||||
obj-$(CONFIG_MACH_PALMTX) += palmtx.o
|
||||
obj-$(CONFIG_MACH_PALMZ72) += palmz72.o
|
||||
@ -84,12 +87,6 @@ obj-$(CONFIG_MACH_POODLE) += poodle.o
|
||||
obj-$(CONFIG_MACH_TOSA) += tosa.o
|
||||
obj-$(CONFIG_MACH_ICONTROL) += icontrol.o mxm8x10.o
|
||||
obj-$(CONFIG_ARCH_PXA_ESERIES) += eseries.o
|
||||
obj-$(CONFIG_MACH_E330) += e330.o
|
||||
obj-$(CONFIG_MACH_E350) += e350.o
|
||||
obj-$(CONFIG_MACH_E740) += e740.o
|
||||
obj-$(CONFIG_MACH_E750) += e750.o
|
||||
obj-$(CONFIG_MACH_E400) += e400.o
|
||||
obj-$(CONFIG_MACH_E800) += e800.o
|
||||
obj-$(CONFIG_MACH_RAUMFELD_RC) += raumfeld.o
|
||||
obj-$(CONFIG_MACH_RAUMFELD_CONNECTOR) += raumfeld.o
|
||||
obj-$(CONFIG_MACH_RAUMFELD_SPEAKER) += raumfeld.o
|
||||
|
@ -22,9 +22,14 @@
|
||||
#include <linux/fb.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/ucb1400.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/i2c/pcf857x.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/regulator/max1586.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
@ -51,6 +56,59 @@
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
||||
/******************************************************************************
|
||||
* Pin configuration
|
||||
******************************************************************************/
|
||||
static unsigned long balloon3_pin_config[] __initdata = {
|
||||
/* Select BTUART 'COM1/ttyS0' as IO option for pins 42/43/44/45 */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
GPIO45_BTUART_RTS,
|
||||
|
||||
/* Reset, configured as GPIO wakeup source */
|
||||
GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||
|
||||
/* LEDs */
|
||||
GPIO9_GPIO, /* NAND activity LED */
|
||||
GPIO10_GPIO, /* Heartbeat LED */
|
||||
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
GPIO113_AC97_nRESET,
|
||||
GPIO95_GPIO,
|
||||
|
||||
/* MMC */
|
||||
GPIO32_MMC_CLK,
|
||||
GPIO92_MMC_DAT_0,
|
||||
GPIO109_MMC_DAT_1,
|
||||
GPIO110_MMC_DAT_2,
|
||||
GPIO111_MMC_DAT_3,
|
||||
GPIO112_MMC_CMD,
|
||||
|
||||
/* USB Host */
|
||||
GPIO88_USBH1_PWR,
|
||||
GPIO89_USBH1_PEN,
|
||||
|
||||
/* PC Card */
|
||||
GPIO48_nPOE,
|
||||
GPIO49_nPWE,
|
||||
GPIO50_nPIOR,
|
||||
GPIO51_nPIOW,
|
||||
GPIO85_nPCE_1,
|
||||
GPIO54_nPCE_2,
|
||||
GPIO79_PSKTSEL,
|
||||
GPIO55_nPREG,
|
||||
GPIO56_nPWAIT,
|
||||
GPIO57_nIOIS16,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Compatibility: Parameter parsing
|
||||
******************************************************************************/
|
||||
static unsigned long balloon3_irq_enabled;
|
||||
|
||||
static unsigned long balloon3_features_present =
|
||||
@ -73,6 +131,321 @@ int __init parse_balloon3_features(char *arg)
|
||||
}
|
||||
early_param("balloon3_features", parse_balloon3_features);
|
||||
|
||||
/******************************************************************************
|
||||
* NOR Flash
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
static struct mtd_partition balloon3_nor_partitions[] = {
|
||||
{
|
||||
.name = "Flash",
|
||||
.offset = 0x00000000,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
}
|
||||
};
|
||||
|
||||
static struct physmap_flash_data balloon3_flash_data[] = {
|
||||
{
|
||||
.width = 2, /* bankwidth in bytes */
|
||||
.parts = balloon3_nor_partitions,
|
||||
.nr_parts = ARRAY_SIZE(balloon3_nor_partitions)
|
||||
}
|
||||
};
|
||||
|
||||
static struct resource balloon3_flash_resource = {
|
||||
.start = PXA_CS0_PHYS,
|
||||
.end = PXA_CS0_PHYS + SZ_64M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct platform_device balloon3_flash = {
|
||||
.name = "physmap-flash",
|
||||
.id = 0,
|
||||
.resource = &balloon3_flash_resource,
|
||||
.num_resources = 1,
|
||||
.dev = {
|
||||
.platform_data = balloon3_flash_data,
|
||||
},
|
||||
};
|
||||
static void __init balloon3_nor_init(void)
|
||||
{
|
||||
platform_device_register(&balloon3_flash);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_nor_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Audio and Touchscreen
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_TOUCHSCREEN_UCB1400) || \
|
||||
defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
|
||||
static struct ucb1400_pdata vpac270_ucb1400_pdata = {
|
||||
.irq = IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ),
|
||||
};
|
||||
|
||||
|
||||
static struct platform_device balloon3_ucb1400_device = {
|
||||
.name = "ucb1400_core",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &vpac270_ucb1400_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init balloon3_ts_init(void)
|
||||
{
|
||||
if (!balloon3_has(BALLOON3_FEATURE_AUDIO))
|
||||
return;
|
||||
|
||||
pxa_set_ac97_info(NULL);
|
||||
platform_device_register(&balloon3_ucb1400_device);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_ts_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
static struct pxafb_mode_info balloon3_lcd_modes[] = {
|
||||
{
|
||||
.pixclock = 38000,
|
||||
.xres = 480,
|
||||
.yres = 640,
|
||||
.bpp = 16,
|
||||
.hsync_len = 8,
|
||||
.left_margin = 8,
|
||||
.right_margin = 8,
|
||||
.vsync_len = 2,
|
||||
.upper_margin = 4,
|
||||
.lower_margin = 5,
|
||||
.sync = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info balloon3_lcd_screen = {
|
||||
.modes = balloon3_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(balloon3_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
|
||||
static void balloon3_backlight_power(int on)
|
||||
{
|
||||
gpio_set_value(BALLOON3_GPIO_RUN_BACKLIGHT, on);
|
||||
}
|
||||
|
||||
static void __init balloon3_lcd_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (!balloon3_has(BALLOON3_FEATURE_TOPPOLY))
|
||||
return;
|
||||
|
||||
ret = gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT, "BKL-ON");
|
||||
if (ret) {
|
||||
pr_err("Requesting BKL-ON GPIO failed!\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
ret = gpio_direction_output(BALLOON3_GPIO_RUN_BACKLIGHT, 1);
|
||||
if (ret) {
|
||||
pr_err("Setting BKL-ON GPIO direction failed!\n");
|
||||
goto err2;
|
||||
}
|
||||
|
||||
balloon3_lcd_screen.pxafb_backlight_power = balloon3_backlight_power;
|
||||
set_pxa_fb_info(&balloon3_lcd_screen);
|
||||
return;
|
||||
|
||||
err2:
|
||||
gpio_free(BALLOON3_GPIO_RUN_BACKLIGHT);
|
||||
err:
|
||||
return;
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_lcd_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
static struct pxamci_platform_data balloon3_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = -1,
|
||||
.gpio_card_ro = -1,
|
||||
.gpio_power = -1,
|
||||
.detect_delay_ms = 200,
|
||||
};
|
||||
|
||||
static void __init balloon3_mmc_init(void)
|
||||
{
|
||||
pxa_set_mci_info(&balloon3_mci_platform_data);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_mmc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* USB Gadget
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_USB_GADGET_PXA27X)||defined(CONFIG_USB_GADGET_PXA27X_MODULE)
|
||||
static void balloon3_udc_command(int cmd)
|
||||
{
|
||||
if (cmd == PXA2XX_UDC_CMD_CONNECT)
|
||||
UP2OCR |= UP2OCR_DPPUE | UP2OCR_DPPUBE;
|
||||
else if (cmd == PXA2XX_UDC_CMD_DISCONNECT)
|
||||
UP2OCR &= ~UP2OCR_DPPUE;
|
||||
}
|
||||
|
||||
static int balloon3_udc_is_connected(void)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
static struct pxa2xx_udc_mach_info balloon3_udc_info __initdata = {
|
||||
.udc_command = balloon3_udc_command,
|
||||
.udc_is_connected = balloon3_udc_is_connected,
|
||||
.gpio_pullup = -1,
|
||||
};
|
||||
|
||||
static void __init balloon3_udc_init(void)
|
||||
{
|
||||
pxa_set_udc_info(&balloon3_udc_info);
|
||||
platform_device_register(&balloon3_gpio_vbus);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_udc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* IrDA
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
|
||||
static struct pxaficp_platform_data balloon3_ficp_platform_data = {
|
||||
.transceiver_cap = IR_FIRMODE | IR_SIRMODE | IR_OFF,
|
||||
};
|
||||
|
||||
static void __init balloon3_irda_init(void)
|
||||
{
|
||||
pxa_set_ficp_info(&balloon3_ficp_platform_data);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_irda_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* USB Host
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
||||
static struct pxaohci_platform_data balloon3_ohci_info = {
|
||||
.port_mode = PMM_PERPORT_MODE,
|
||||
.flags = ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW,
|
||||
};
|
||||
|
||||
static void __init balloon3_uhc_init(void)
|
||||
{
|
||||
if (!balloon3_has(BALLOON3_FEATURE_OHCI))
|
||||
return;
|
||||
pxa_set_ohci_info(&balloon3_ohci_info);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_uhc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* LEDs
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||
struct gpio_led balloon3_gpio_leds[] = {
|
||||
{
|
||||
.name = "balloon3:green:idle",
|
||||
.default_trigger = "heartbeat",
|
||||
.gpio = BALLOON3_GPIO_LED_IDLE,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:green:nand",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = BALLOON3_GPIO_LED_NAND,
|
||||
.active_low = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data balloon3_gpio_led_info = {
|
||||
.leds = balloon3_gpio_leds,
|
||||
.num_leds = ARRAY_SIZE(balloon3_gpio_leds),
|
||||
};
|
||||
|
||||
static struct platform_device balloon3_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &balloon3_gpio_led_info,
|
||||
}
|
||||
};
|
||||
|
||||
struct gpio_led balloon3_pcf_gpio_leds[] = {
|
||||
{
|
||||
.name = "balloon3:green:led0",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED0,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:green:led1",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED1,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:orange:led2",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED2,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:orange:led3",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED3,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:orange:led4",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED4,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:orange:led5",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED5,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:red:led6",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED6,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "balloon3:red:led7",
|
||||
.gpio = BALLOON3_PCF_GPIO_LED7,
|
||||
.active_low = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data balloon3_pcf_gpio_led_info = {
|
||||
.leds = balloon3_pcf_gpio_leds,
|
||||
.num_leds = ARRAY_SIZE(balloon3_pcf_gpio_leds),
|
||||
};
|
||||
|
||||
static struct platform_device balloon3_pcf_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = &balloon3_pcf_gpio_led_info,
|
||||
}
|
||||
};
|
||||
|
||||
static void __init balloon3_leds_init(void)
|
||||
{
|
||||
platform_device_register(&balloon3_leds);
|
||||
platform_device_register(&balloon3_pcf_leds);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_leds_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* FPGA IRQ
|
||||
******************************************************************************/
|
||||
static void balloon3_mask_irq(unsigned int irq)
|
||||
{
|
||||
int balloon3_irq = (irq - BALLOON3_IRQ(0));
|
||||
@ -98,7 +471,6 @@ static void balloon3_irq_handler(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
unsigned long pending = __raw_readl(BALLOON3_INT_CONTROL_REG) &
|
||||
balloon3_irq_enabled;
|
||||
|
||||
do {
|
||||
/* clear useless edge notification */
|
||||
if (desc->chip->ack)
|
||||
@ -132,201 +504,259 @@ static void __init balloon3_init_irq(void)
|
||||
"enabled\n", __func__, BALLOON3_AUX_NIRQ);
|
||||
}
|
||||
|
||||
static unsigned long balloon3_ac97_pin_config[] = {
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
GPIO113_AC97_nRESET,
|
||||
/******************************************************************************
|
||||
* GPIO expander
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_GPIO_PCF857X) || defined(CONFIG_GPIO_PCF857X_MODULE)
|
||||
static struct pcf857x_platform_data balloon3_pcf857x_pdata = {
|
||||
.gpio_base = BALLOON3_PCF_GPIO_BASE,
|
||||
.n_latch = 0,
|
||||
.setup = NULL,
|
||||
.teardown = NULL,
|
||||
.context = NULL,
|
||||
};
|
||||
|
||||
static void balloon3_backlight_power(int on)
|
||||
{
|
||||
pr_debug("%s: power is %s\n", __func__, on ? "on" : "off");
|
||||
gpio_set_value(BALLOON3_GPIO_RUN_BACKLIGHT, on);
|
||||
}
|
||||
|
||||
static unsigned long balloon3_lcd_pin_config[] = {
|
||||
/* LCD - 16bpp Active TFT */
|
||||
GPIOxx_LCD_TFT_16BPP,
|
||||
|
||||
GPIO99_GPIO, /* Backlight */
|
||||
};
|
||||
|
||||
static struct pxafb_mode_info balloon3_lcd_modes[] = {
|
||||
static struct i2c_board_info __initdata balloon3_i2c_devs[] = {
|
||||
{
|
||||
.pixclock = 38000,
|
||||
.xres = 480,
|
||||
.yres = 640,
|
||||
.bpp = 16,
|
||||
.hsync_len = 8,
|
||||
.left_margin = 8,
|
||||
.right_margin = 8,
|
||||
.vsync_len = 2,
|
||||
.upper_margin = 4,
|
||||
.lower_margin = 5,
|
||||
.sync = 0,
|
||||
I2C_BOARD_INFO("pcf8574a", 0x38),
|
||||
.platform_data = &balloon3_pcf857x_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info balloon3_pxafb_info = {
|
||||
.modes = balloon3_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(balloon3_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
.pxafb_backlight_power = balloon3_backlight_power,
|
||||
};
|
||||
|
||||
static unsigned long balloon3_mmc_pin_config[] = {
|
||||
GPIO32_MMC_CLK,
|
||||
GPIO92_MMC_DAT_0,
|
||||
GPIO109_MMC_DAT_1,
|
||||
GPIO110_MMC_DAT_2,
|
||||
GPIO111_MMC_DAT_3,
|
||||
GPIO112_MMC_CMD,
|
||||
};
|
||||
|
||||
static void balloon3_mci_setpower(struct device *dev, unsigned int vdd)
|
||||
static void __init balloon3_i2c_init(void)
|
||||
{
|
||||
struct pxamci_platform_data *p_d = dev->platform_data;
|
||||
pxa_set_i2c_info(NULL);
|
||||
i2c_register_board_info(0, ARRAY_AND_SIZE(balloon3_i2c_devs));
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_i2c_init(void) {}
|
||||
#endif
|
||||
|
||||
if ((1 << vdd) & p_d->ocr_mask) {
|
||||
pr_debug("%s: on\n", __func__);
|
||||
/* FIXME something to prod here? */
|
||||
} else {
|
||||
pr_debug("%s: off\n", __func__);
|
||||
/* FIXME something to prod here? */
|
||||
/******************************************************************************
|
||||
* NAND
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MTD_NAND_PLATFORM)||defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
|
||||
static uint16_t balloon3_ctl =
|
||||
BALLOON3_NAND_CONTROL_FLCE0 | BALLOON3_NAND_CONTROL_FLCE1 |
|
||||
BALLOON3_NAND_CONTROL_FLCE2 | BALLOON3_NAND_CONTROL_FLCE3 |
|
||||
BALLOON3_NAND_CONTROL_FLWP;
|
||||
|
||||
static void balloon3_nand_cmd_ctl(struct mtd_info *mtd, int cmd, unsigned int ctrl)
|
||||
{
|
||||
struct nand_chip *this = mtd->priv;
|
||||
|
||||
if (ctrl & NAND_CTRL_CHANGE) {
|
||||
if (ctrl & NAND_CLE)
|
||||
balloon3_ctl |= BALLOON3_NAND_CONTROL_FLCLE;
|
||||
else
|
||||
balloon3_ctl &= ~BALLOON3_NAND_CONTROL_FLCLE;
|
||||
|
||||
if (ctrl & NAND_ALE)
|
||||
balloon3_ctl |= BALLOON3_NAND_CONTROL_FLALE;
|
||||
else
|
||||
balloon3_ctl &= ~BALLOON3_NAND_CONTROL_FLALE;
|
||||
|
||||
__raw_writel(balloon3_ctl, BALLOON3_NAND_CONTROL_REG);
|
||||
}
|
||||
|
||||
if (cmd != NAND_CMD_NONE)
|
||||
writeb(cmd, this->IO_ADDR_W);
|
||||
}
|
||||
|
||||
static struct pxamci_platform_data balloon3_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
|
||||
.setpower = balloon3_mci_setpower,
|
||||
static void balloon3_nand_select_chip(struct mtd_info *mtd, int chip)
|
||||
{
|
||||
if (chip < 0 || chip > 3)
|
||||
return;
|
||||
|
||||
balloon3_ctl |= BALLOON3_NAND_CONTROL_FLCE0 |
|
||||
BALLOON3_NAND_CONTROL_FLCE1 |
|
||||
BALLOON3_NAND_CONTROL_FLCE2 |
|
||||
BALLOON3_NAND_CONTROL_FLCE3;
|
||||
|
||||
/* Deassert correct nCE line */
|
||||
balloon3_ctl &= ~(BALLOON3_NAND_CONTROL_FLCE0 << chip);
|
||||
|
||||
__raw_writew(balloon3_ctl, BALLOON3_NAND_CONTROL_REG);
|
||||
}
|
||||
|
||||
static int balloon3_nand_probe(struct platform_device *pdev)
|
||||
{
|
||||
void __iomem *temp_map;
|
||||
uint16_t ver;
|
||||
int ret;
|
||||
|
||||
__raw_writew(BALLOON3_NAND_CONTROL2_16BIT, BALLOON3_NAND_CONTROL2_REG);
|
||||
|
||||
ver = __raw_readw(BALLOON3_FPGA_VER);
|
||||
if (ver > 0x0201)
|
||||
pr_warn("The FPGA code, version 0x%04x, is newer than rel-0.3. "
|
||||
"NAND support might be broken in this version!", ver);
|
||||
|
||||
/* Power up the NAND chips */
|
||||
ret = gpio_request(BALLOON3_GPIO_RUN_NAND, "NAND");
|
||||
if (ret)
|
||||
goto err1;
|
||||
|
||||
ret = gpio_direction_output(BALLOON3_GPIO_RUN_NAND, 1);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
gpio_set_value(BALLOON3_GPIO_RUN_NAND, 1);
|
||||
|
||||
/* Deassert all nCE lines and write protect line */
|
||||
__raw_writel(balloon3_ctl, BALLOON3_NAND_CONTROL_REG);
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
gpio_free(BALLOON3_GPIO_RUN_NAND);
|
||||
err1:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void balloon3_nand_remove(struct platform_device *pdev)
|
||||
{
|
||||
/* Power down the NAND chips */
|
||||
gpio_set_value(BALLOON3_GPIO_RUN_NAND, 0);
|
||||
gpio_free(BALLOON3_GPIO_RUN_NAND);
|
||||
}
|
||||
|
||||
static struct mtd_partition balloon3_partition_info[] = {
|
||||
[0] = {
|
||||
.name = "Boot",
|
||||
.offset = 0,
|
||||
.size = SZ_4M,
|
||||
},
|
||||
[1] = {
|
||||
.name = "RootFS",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL
|
||||
},
|
||||
};
|
||||
|
||||
static int balloon3_udc_is_connected(void)
|
||||
{
|
||||
pr_debug("%s: udc connected\n", __func__);
|
||||
return 1;
|
||||
}
|
||||
static const char *balloon3_part_probes[] = { "cmdlinepart", NULL };
|
||||
|
||||
static void balloon3_udc_command(int cmd)
|
||||
{
|
||||
switch (cmd) {
|
||||
case PXA2XX_UDC_CMD_CONNECT:
|
||||
UP2OCR |= (UP2OCR_DPPUE + UP2OCR_DPPUBE);
|
||||
pr_debug("%s: connect\n", __func__);
|
||||
break;
|
||||
case PXA2XX_UDC_CMD_DISCONNECT:
|
||||
UP2OCR &= ~UP2OCR_DPPUE;
|
||||
pr_debug("%s: disconnect\n", __func__);
|
||||
break;
|
||||
struct platform_nand_data balloon3_nand_pdata = {
|
||||
.chip = {
|
||||
.nr_chips = 4,
|
||||
.chip_offset = 0,
|
||||
.nr_partitions = ARRAY_SIZE(balloon3_partition_info),
|
||||
.partitions = balloon3_partition_info,
|
||||
.chip_delay = 50,
|
||||
.part_probe_types = balloon3_part_probes,
|
||||
},
|
||||
.ctrl = {
|
||||
.hwcontrol = 0,
|
||||
.dev_ready = 0,
|
||||
.select_chip = balloon3_nand_select_chip,
|
||||
.cmd_ctrl = balloon3_nand_cmd_ctl,
|
||||
.probe = balloon3_nand_probe,
|
||||
.remove = balloon3_nand_remove,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource balloon3_nand_resource[] = {
|
||||
[0] = {
|
||||
.start = BALLOON3_NAND_BASE,
|
||||
.end = BALLOON3_NAND_BASE + 0x4,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device balloon3_nand = {
|
||||
.name = "gen_nand",
|
||||
.num_resources = ARRAY_SIZE(balloon3_nand_resource),
|
||||
.resource = balloon3_nand_resource,
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &balloon3_nand_pdata,
|
||||
}
|
||||
};
|
||||
|
||||
static void __init balloon3_nand_init(void)
|
||||
{
|
||||
platform_device_register(&balloon3_nand);
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_nand_init(void) {}
|
||||
#endif
|
||||
|
||||
static struct pxa2xx_udc_mach_info balloon3_udc_info = {
|
||||
.udc_is_connected = balloon3_udc_is_connected,
|
||||
.udc_command = balloon3_udc_command,
|
||||
};
|
||||
|
||||
static struct pxaficp_platform_data balloon3_ficp_platform_data = {
|
||||
.transceiver_cap = IR_SIRMODE | IR_FIRMODE | IR_OFF,
|
||||
};
|
||||
|
||||
static unsigned long balloon3_ohci_pin_config[] = {
|
||||
GPIO88_USBH1_PWR,
|
||||
GPIO89_USBH1_PEN,
|
||||
};
|
||||
|
||||
static struct pxaohci_platform_data balloon3_ohci_platform_data = {
|
||||
.port_mode = PMM_PERPORT_MODE,
|
||||
.flags = ENABLE_PORT_ALL | POWER_CONTROL_LOW | POWER_SENSE_LOW,
|
||||
};
|
||||
|
||||
static unsigned long balloon3_pin_config[] __initdata = {
|
||||
/* Select BTUART 'COM1/ttyS0' as IO option for pins 42/43/44/45 */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
GPIO45_BTUART_RTS,
|
||||
|
||||
/* Wakeup GPIO */
|
||||
GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,
|
||||
|
||||
/* NAND & IDLE LED GPIOs */
|
||||
GPIO9_GPIO,
|
||||
GPIO10_GPIO,
|
||||
};
|
||||
|
||||
static struct gpio_led balloon3_gpio_leds[] = {
|
||||
/******************************************************************************
|
||||
* Core power regulator
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_REGULATOR_MAX1586) || \
|
||||
defined(CONFIG_REGULATOR_MAX1586_MODULE)
|
||||
static struct regulator_consumer_supply balloon3_max1587a_consumers[] = {
|
||||
{
|
||||
.name = "balloon3:green:idle",
|
||||
.default_trigger = "heartbeat",
|
||||
.gpio = BALLOON3_GPIO_LED_IDLE,
|
||||
.active_low = 1,
|
||||
.supply = "vcc_core",
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data balloon3_max1587a_v3_info = {
|
||||
.constraints = {
|
||||
.name = "vcc_core range",
|
||||
.min_uV = 900000,
|
||||
.max_uV = 1705000,
|
||||
.always_on = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.consumer_supplies = balloon3_max1587a_consumers,
|
||||
.num_consumer_supplies = ARRAY_SIZE(balloon3_max1587a_consumers),
|
||||
};
|
||||
|
||||
static struct max1586_subdev_data balloon3_max1587a_subdevs[] = {
|
||||
{
|
||||
.name = "balloon3:green:nand",
|
||||
.default_trigger = "nand-disk",
|
||||
.gpio = BALLOON3_GPIO_LED_NAND,
|
||||
.active_low = 1,
|
||||
.name = "vcc_core",
|
||||
.id = MAX1586_V3,
|
||||
.platform_data = &balloon3_max1587a_v3_info,
|
||||
}
|
||||
};
|
||||
|
||||
static struct max1586_platform_data balloon3_max1587a_info = {
|
||||
.subdevs = balloon3_max1587a_subdevs,
|
||||
.num_subdevs = ARRAY_SIZE(balloon3_max1587a_subdevs),
|
||||
.v3_gain = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata balloon3_pi2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("max1586", 0x14),
|
||||
.platform_data = &balloon3_max1587a_info,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data balloon3_gpio_leds_platform_data = {
|
||||
.leds = balloon3_gpio_leds,
|
||||
.num_leds = ARRAY_SIZE(balloon3_gpio_leds),
|
||||
};
|
||||
|
||||
static struct platform_device balloon3led_device = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &balloon3_gpio_leds_platform_data,
|
||||
},
|
||||
};
|
||||
static void __init balloon3_pmic_init(void)
|
||||
{
|
||||
pxa27x_set_i2c_power_info(NULL);
|
||||
i2c_register_board_info(1, ARRAY_AND_SIZE(balloon3_pi2c_board_info));
|
||||
}
|
||||
#else
|
||||
static inline void balloon3_pmic_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
static void __init balloon3_init(void)
|
||||
{
|
||||
pr_info("Initialising Balloon3\n");
|
||||
|
||||
/* system bus arbiter setting
|
||||
* - Core_Park
|
||||
* - LCD_wt:DMA_wt:CORE_Wt = 2:3:4
|
||||
*/
|
||||
ARB_CNTRL = ARB_CORE_PARK | 0x234;
|
||||
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_pin_config));
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
pxa_set_i2c_info(NULL);
|
||||
if (balloon3_has(BALLOON3_FEATURE_AUDIO)) {
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_ac97_pin_config));
|
||||
pxa_set_ac97_info(NULL);
|
||||
}
|
||||
|
||||
if (balloon3_has(BALLOON3_FEATURE_TOPPOLY)) {
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_lcd_pin_config));
|
||||
gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT,
|
||||
"LCD Backlight Power");
|
||||
gpio_direction_output(BALLOON3_GPIO_RUN_BACKLIGHT, 1);
|
||||
set_pxa_fb_info(&balloon3_pxafb_info);
|
||||
}
|
||||
|
||||
if (balloon3_has(BALLOON3_FEATURE_MMC)) {
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_mmc_pin_config));
|
||||
pxa_set_mci_info(&balloon3_mci_platform_data);
|
||||
}
|
||||
pxa_set_ficp_info(&balloon3_ficp_platform_data);
|
||||
if (balloon3_has(BALLOON3_FEATURE_OHCI)) {
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_ohci_pin_config));
|
||||
pxa_set_ohci_info(&balloon3_ohci_platform_data);
|
||||
}
|
||||
pxa_set_udc_info(&balloon3_udc_info);
|
||||
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_pin_config));
|
||||
|
||||
platform_device_register(&balloon3led_device);
|
||||
balloon3_i2c_init();
|
||||
balloon3_irda_init();
|
||||
balloon3_lcd_init();
|
||||
balloon3_leds_init();
|
||||
balloon3_mmc_init();
|
||||
balloon3_nand_init();
|
||||
balloon3_nor_init();
|
||||
balloon3_pmic_init();
|
||||
balloon3_ts_init();
|
||||
balloon3_udc_init();
|
||||
balloon3_uhc_init();
|
||||
}
|
||||
|
||||
static struct map_desc balloon3_io_desc[] __initdata = {
|
||||
|
@ -689,6 +689,7 @@ static void __init cm_x300_init_da9030(void)
|
||||
{
|
||||
pxa3xx_set_i2c_power_info(&cm_x300_pwr_i2c_info);
|
||||
i2c_register_board_info(1, &cm_x300_pmic_info, 1);
|
||||
set_irq_wake(IRQ_WAKEUP0, 1);
|
||||
}
|
||||
|
||||
static void __init cm_x300_init_wi2wi(void)
|
||||
@ -745,9 +746,10 @@ static void __init cm_x300_init(void)
|
||||
{
|
||||
cm_x300_init_mfp();
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
if (cpu_is_pxa300())
|
||||
pxa_set_ffuart_info(NULL);
|
||||
|
||||
cm_x300_init_da9030();
|
||||
cm_x300_init_dm9000();
|
||||
|
111
arch/arm/mach-pxa/colibri-pxa270-evalboard.c
Normal file
111
arch/arm/mach-pxa/colibri-pxa270-evalboard.c
Normal file
@ -0,0 +1,111 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-pxa/colibri-pxa270-evalboard.c
|
||||
*
|
||||
* Support for Toradex PXA270 based Colibri Evaluation Carrier Board
|
||||
* Daniel Mack <daniel@caiaq.de>
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <mach/pxa27x.h>
|
||||
#include <mach/colibri.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/ohci.h>
|
||||
#include <mach/pxa27x-udc.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
||||
/******************************************************************************
|
||||
* Pin configuration
|
||||
******************************************************************************/
|
||||
static mfp_cfg_t colibri_pxa270_evalboard_pin_config[] __initdata = {
|
||||
/* MMC */
|
||||
GPIO32_MMC_CLK,
|
||||
GPIO92_MMC_DAT_0,
|
||||
GPIO109_MMC_DAT_1,
|
||||
GPIO110_MMC_DAT_2,
|
||||
GPIO111_MMC_DAT_3,
|
||||
GPIO112_MMC_CMD,
|
||||
GPIO0_GPIO, /* SD detect */
|
||||
|
||||
/* FFUART */
|
||||
GPIO39_FFUART_TXD,
|
||||
GPIO34_FFUART_RXD,
|
||||
|
||||
/* UHC */
|
||||
GPIO88_USBH1_PWR,
|
||||
GPIO89_USBH1_PEN,
|
||||
GPIO119_USBH2_PWR,
|
||||
GPIO120_USBH2_PEN,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
static struct pxamci_platform_data colibri_pxa270_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_power = -1,
|
||||
.gpio_card_detect = GPIO0_COLIBRI_PXA270_SD_DETECT,
|
||||
.gpio_card_ro = -1,
|
||||
.detect_delay_ms = 200,
|
||||
};
|
||||
|
||||
static void __init colibri_pxa270_mmc_init(void)
|
||||
{
|
||||
pxa_set_mci_info(&colibri_pxa270_mci_platform_data);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa270_mmc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* USB Host
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
||||
static int colibri_pxa270_ohci_init(struct device *dev)
|
||||
{
|
||||
UP2OCR = UP2OCR_HXS | UP2OCR_HXOE | UP2OCR_DPPDE | UP2OCR_DMPDE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pxaohci_platform_data colibri_pxa270_ohci_info = {
|
||||
.port_mode = PMM_PERPORT_MODE,
|
||||
.flags = ENABLE_PORT1 | ENABLE_PORT2 |
|
||||
POWER_CONTROL_LOW | POWER_SENSE_LOW,
|
||||
.init = colibri_pxa270_ohci_init,
|
||||
};
|
||||
|
||||
static void __init colibri_pxa270_uhc_init(void)
|
||||
{
|
||||
pxa_set_ohci_info(&colibri_pxa270_ohci_info);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa270_uhc_init(void) {}
|
||||
#endif
|
||||
|
||||
void __init colibri_pxa270_evalboard_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_evalboard_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
colibri_pxa270_mmc_init();
|
||||
colibri_pxa270_uhc_init();
|
||||
}
|
||||
|
272
arch/arm/mach-pxa/colibri-pxa270-income.c
Normal file
272
arch/arm/mach-pxa/colibri-pxa270-income.c
Normal file
@ -0,0 +1,272 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-pxa/income.c
|
||||
*
|
||||
* Support for Income s.r.o. SH-Dmaster PXA270 SBC
|
||||
*
|
||||
* Copyright (C) 2010
|
||||
* Marek Vasut <marek.vasut@gmail.com>
|
||||
* Pavel Revak <palo@bielyvlk.sk>
|
||||
*
|
||||
* 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/bitops.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/sysdev.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/ohci.h>
|
||||
#include <mach/pxa27x.h>
|
||||
#include <mach/pxa27x-udc.h>
|
||||
#include <mach/pxafb.h>
|
||||
|
||||
#include <plat/i2c.h>
|
||||
|
||||
#include "devices.h"
|
||||
#include "generic.h"
|
||||
|
||||
#define GPIO114_INCOME_ETH_IRQ (114)
|
||||
#define GPIO0_INCOME_SD_DETECT (0)
|
||||
#define GPIO0_INCOME_SD_RO (1)
|
||||
#define GPIO54_INCOME_LED_A (54)
|
||||
#define GPIO55_INCOME_LED_B (55)
|
||||
#define GPIO113_INCOME_TS_IRQ (113)
|
||||
|
||||
/******************************************************************************
|
||||
* Pin configuration
|
||||
******************************************************************************/
|
||||
static mfp_cfg_t income_pin_config[] __initdata = {
|
||||
/* MMC */
|
||||
GPIO32_MMC_CLK,
|
||||
GPIO92_MMC_DAT_0,
|
||||
GPIO109_MMC_DAT_1,
|
||||
GPIO110_MMC_DAT_2,
|
||||
GPIO111_MMC_DAT_3,
|
||||
GPIO112_MMC_CMD,
|
||||
GPIO0_GPIO, /* SD detect */
|
||||
GPIO1_GPIO, /* SD read-only */
|
||||
|
||||
/* FFUART */
|
||||
GPIO39_FFUART_TXD,
|
||||
GPIO34_FFUART_RXD,
|
||||
|
||||
/* BFUART */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO45_BTUART_RTS,
|
||||
|
||||
/* STUART */
|
||||
GPIO46_STUART_RXD,
|
||||
GPIO47_STUART_TXD,
|
||||
|
||||
/* UHC */
|
||||
GPIO88_USBH1_PWR,
|
||||
GPIO89_USBH1_PEN,
|
||||
|
||||
/* LCD */
|
||||
GPIOxx_LCD_TFT_16BPP,
|
||||
|
||||
/* PWM */
|
||||
GPIO16_PWM0_OUT,
|
||||
|
||||
/* I2C */
|
||||
GPIO117_I2C_SCL,
|
||||
GPIO118_I2C_SDA,
|
||||
|
||||
/* LED */
|
||||
GPIO54_GPIO, /* LED A */
|
||||
GPIO55_GPIO, /* LED B */
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
static struct pxamci_platform_data income_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_power = -1,
|
||||
.gpio_card_detect = GPIO0_INCOME_SD_DETECT,
|
||||
.gpio_card_ro = GPIO0_INCOME_SD_RO,
|
||||
.detect_delay_ms = 200,
|
||||
};
|
||||
|
||||
static void __init income_mmc_init(void)
|
||||
{
|
||||
pxa_set_mci_info(&income_mci_platform_data);
|
||||
}
|
||||
#else
|
||||
static inline void income_mmc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* USB Host
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
||||
static struct pxaohci_platform_data income_ohci_info = {
|
||||
.port_mode = PMM_PERPORT_MODE,
|
||||
.flags = ENABLE_PORT1 | POWER_CONTROL_LOW | POWER_SENSE_LOW,
|
||||
};
|
||||
|
||||
static void __init income_uhc_init(void)
|
||||
{
|
||||
pxa_set_ohci_info(&income_ohci_info);
|
||||
}
|
||||
#else
|
||||
static inline void income_uhc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* LED
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||
struct gpio_led income_gpio_leds[] = {
|
||||
{
|
||||
.name = "income:green:leda",
|
||||
.default_trigger = "none",
|
||||
.gpio = GPIO54_INCOME_LED_A,
|
||||
.active_low = 1,
|
||||
},
|
||||
{
|
||||
.name = "income:green:ledb",
|
||||
.default_trigger = "none",
|
||||
.gpio = GPIO55_INCOME_LED_B,
|
||||
.active_low = 1,
|
||||
}
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data income_gpio_led_info = {
|
||||
.leds = income_gpio_leds,
|
||||
.num_leds = ARRAY_SIZE(income_gpio_leds),
|
||||
};
|
||||
|
||||
static struct platform_device income_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &income_gpio_led_info,
|
||||
}
|
||||
};
|
||||
|
||||
static void __init income_led_init(void)
|
||||
{
|
||||
platform_device_register(&income_leds);
|
||||
}
|
||||
#else
|
||||
static inline void income_led_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* I2C
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
|
||||
static struct i2c_board_info __initdata income_i2c_devs[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("ds1340", 0x68),
|
||||
}, {
|
||||
I2C_BOARD_INFO("lm75", 0x4f),
|
||||
},
|
||||
};
|
||||
|
||||
static void __init income_i2c_init(void)
|
||||
{
|
||||
pxa_set_i2c_info(NULL);
|
||||
pxa27x_set_i2c_power_info(NULL);
|
||||
i2c_register_board_info(0, ARRAY_AND_SIZE(income_i2c_devs));
|
||||
}
|
||||
#else
|
||||
static inline void income_i2c_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
static struct pxafb_mode_info income_lcd_modes[] = {
|
||||
{
|
||||
.pixclock = 144700,
|
||||
.xres = 320,
|
||||
.yres = 240,
|
||||
.bpp = 32,
|
||||
.depth = 18,
|
||||
|
||||
.left_margin = 10,
|
||||
.right_margin = 10,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 8,
|
||||
|
||||
.hsync_len = 20,
|
||||
.vsync_len = 2,
|
||||
|
||||
.sync = FB_SYNC_VERT_HIGH_ACT,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info income_lcd_screen = {
|
||||
.modes = income_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(income_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_18BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
|
||||
static void __init income_lcd_init(void)
|
||||
{
|
||||
set_pxa_fb_info(&income_lcd_screen);
|
||||
}
|
||||
#else
|
||||
static inline void income_lcd_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Backlight
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM__MODULE)
|
||||
static struct platform_pwm_backlight_data income_backlight_data = {
|
||||
.pwm_id = 0,
|
||||
.max_brightness = 0x3ff,
|
||||
.dft_brightness = 0x1ff,
|
||||
.pwm_period_ns = 1000000,
|
||||
};
|
||||
|
||||
static struct platform_device income_backlight = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &pxa27x_device_pwm0.dev,
|
||||
.platform_data = &income_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init income_pwm_init(void)
|
||||
{
|
||||
platform_device_register(&income_backlight);
|
||||
}
|
||||
#else
|
||||
static inline void income_pwm_init(void) {}
|
||||
#endif
|
||||
|
||||
void __init colibri_pxa270_income_boardinit(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(income_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
income_mmc_init();
|
||||
income_uhc_init();
|
||||
income_led_init();
|
||||
income_i2c_init();
|
||||
income_lcd_init();
|
||||
income_pwm_init();
|
||||
}
|
||||
|
@ -3,6 +3,7 @@
|
||||
*
|
||||
* Support for Toradex PXA270 based Colibri module
|
||||
* Daniel Mack <daniel@caiaq.de>
|
||||
* 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
|
||||
@ -10,49 +11,55 @@
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/ioport.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/sizes.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/ucb1400.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/mach/flash.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
|
||||
#include <mach/pxa27x.h>
|
||||
#include <mach/audio.h>
|
||||
#include <mach/colibri.h>
|
||||
#include <mach/pxa27x.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
#include "generic.h"
|
||||
|
||||
/*
|
||||
* GPIO configuration
|
||||
*/
|
||||
/******************************************************************************
|
||||
* Pin configuration
|
||||
******************************************************************************/
|
||||
static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
|
||||
/* Ethernet */
|
||||
GPIO78_nCS_2, /* Ethernet CS */
|
||||
GPIO114_GPIO, /* Ethernet IRQ */
|
||||
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
GPIO95_AC97_nRESET,
|
||||
GPIO98_AC97_SYSCLK,
|
||||
GPIO113_GPIO, /* Touchscreen IRQ */
|
||||
};
|
||||
|
||||
/*
|
||||
* NOR flash
|
||||
*/
|
||||
/******************************************************************************
|
||||
* NOR Flash
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
static struct mtd_partition colibri_partitions[] = {
|
||||
{
|
||||
.name = "Bootloader",
|
||||
.offset = 0x00000000,
|
||||
.size = 0x00040000,
|
||||
.mask_flags = MTD_WRITEABLE /* force read-only */
|
||||
.mask_flags = MTD_WRITEABLE /* force read-only */
|
||||
}, {
|
||||
.name = "Kernel",
|
||||
.offset = 0x00040000,
|
||||
@ -90,50 +97,113 @@ static struct platform_device colibri_pxa270_flash_device = {
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* DM9000 Ethernet
|
||||
*/
|
||||
#if defined(CONFIG_DM9000)
|
||||
static struct resource dm9000_resources[] = {
|
||||
[0] = {
|
||||
.start = COLIBRI_PXA270_ETH_PHYS,
|
||||
.end = COLIBRI_PXA270_ETH_PHYS + 3,
|
||||
static void __init colibri_pxa270_nor_init(void)
|
||||
{
|
||||
platform_device_register(&colibri_pxa270_flash_device);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa270_nor_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Ethernet
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_DM9000) || defined(CONFIG_DM9000_MODULE)
|
||||
static struct resource colibri_pxa270_dm9000_resources[] = {
|
||||
{
|
||||
.start = PXA_CS2_PHYS,
|
||||
.end = PXA_CS2_PHYS + 3,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = COLIBRI_PXA270_ETH_PHYS + 4,
|
||||
.end = COLIBRI_PXA270_ETH_PHYS + 4 + 500,
|
||||
{
|
||||
.start = PXA_CS2_PHYS + 4,
|
||||
.end = PXA_CS2_PHYS + 4 + 500,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[2] = {
|
||||
.start = COLIBRI_PXA270_ETH_IRQ,
|
||||
.end = COLIBRI_PXA270_ETH_IRQ,
|
||||
{
|
||||
.start = gpio_to_irq(GPIO114_COLIBRI_PXA270_ETH_IRQ),
|
||||
.end = gpio_to_irq(GPIO114_COLIBRI_PXA270_ETH_IRQ),
|
||||
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device dm9000_device = {
|
||||
static struct platform_device colibri_pxa270_dm9000_device = {
|
||||
.name = "dm9000",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(dm9000_resources),
|
||||
.resource = dm9000_resources,
|
||||
.num_resources = ARRAY_SIZE(colibri_pxa270_dm9000_resources),
|
||||
.resource = colibri_pxa270_dm9000_resources,
|
||||
};
|
||||
#endif /* CONFIG_DM9000 */
|
||||
|
||||
static struct platform_device *colibri_pxa270_devices[] __initdata = {
|
||||
&colibri_pxa270_flash_device,
|
||||
#if defined(CONFIG_DM9000)
|
||||
&dm9000_device,
|
||||
static void __init colibri_pxa270_eth_init(void)
|
||||
{
|
||||
platform_device_register(&colibri_pxa270_dm9000_device);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa270_eth_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Audio and Touchscreen
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_TOUCHSCREEN_UCB1400) || \
|
||||
defined(CONFIG_TOUCHSCREEN_UCB1400_MODULE)
|
||||
static pxa2xx_audio_ops_t colibri_pxa270_ac97_pdata = {
|
||||
.reset_gpio = 95,
|
||||
};
|
||||
|
||||
static struct ucb1400_pdata colibri_pxa270_ucb1400_pdata = {
|
||||
.irq = gpio_to_irq(GPIO113_COLIBRI_PXA270_TS_IRQ),
|
||||
};
|
||||
|
||||
static struct platform_device colibri_pxa270_ucb1400_device = {
|
||||
.name = "ucb1400_core",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &colibri_pxa270_ucb1400_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init colibri_pxa270_tsc_init(void)
|
||||
{
|
||||
pxa_set_ac97_info(&colibri_pxa270_ac97_pdata);
|
||||
platform_device_register(&colibri_pxa270_ucb1400_device);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa270_tsc_init(void) {}
|
||||
#endif
|
||||
|
||||
static int colibri_pxa270_baseboard;
|
||||
core_param(colibri_pxa270_baseboard, colibri_pxa270_baseboard, int, 0444);
|
||||
|
||||
static void __init colibri_pxa270_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
platform_add_devices(ARRAY_AND_SIZE(colibri_pxa270_devices));
|
||||
|
||||
colibri_pxa270_nor_init();
|
||||
colibri_pxa270_eth_init();
|
||||
colibri_pxa270_tsc_init();
|
||||
|
||||
switch (colibri_pxa270_baseboard) {
|
||||
case COLIBRI_PXA270_EVALBOARD:
|
||||
colibri_pxa270_evalboard_init();
|
||||
break;
|
||||
case COLIBRI_PXA270_INCOME:
|
||||
colibri_pxa270_income_boardinit();
|
||||
break;
|
||||
default:
|
||||
printk(KERN_ERR "Illegal colibri_pxa270_baseboard type %d\n",
|
||||
colibri_pxa270_baseboard);
|
||||
}
|
||||
}
|
||||
|
||||
/* The "Income s.r.o. SH-Dmaster PXA270 SBC" board can be booted either
|
||||
* with the INCOME mach type or with COLIBRI and the kernel parameter
|
||||
* "colibri_pxa270_baseboard=1"
|
||||
*/
|
||||
static void __init colibri_pxa270_income_init(void)
|
||||
{
|
||||
colibri_pxa270_baseboard = COLIBRI_PXA270_INCOME;
|
||||
colibri_pxa270_init();
|
||||
}
|
||||
|
||||
MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
|
||||
@ -146,3 +216,13 @@ MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
||||
MACHINE_START(INCOME, "Income s.r.o. SH-Dmaster PXA270 SBC")
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.init_machine = colibri_pxa270_income_init,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa27x_init_irq,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/sizes.h>
|
||||
@ -28,6 +29,8 @@
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/ohci.h>
|
||||
#include <mach/audio.h>
|
||||
#include <mach/pxa27x-udc.h>
|
||||
#include <mach/udc.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
@ -101,6 +104,42 @@ void __init colibri_pxa320_init_ohci(void)
|
||||
static inline void colibri_pxa320_init_ohci(void) {}
|
||||
#endif /* CONFIG_USB_OHCI_HCD || CONFIG_USB_OHCI_HCD_MODULE */
|
||||
|
||||
#if defined(CONFIG_USB_GADGET_PXA27X)||defined(CONFIG_USB_GADGET_PXA27X_MODULE)
|
||||
static struct gpio_vbus_mach_info colibri_pxa320_gpio_vbus_info = {
|
||||
.gpio_vbus = mfp_to_gpio(MFP_PIN_GPIO96),
|
||||
.gpio_pullup = -1,
|
||||
};
|
||||
|
||||
static struct platform_device colibri_pxa320_gpio_vbus = {
|
||||
.name = "gpio-vbus",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &colibri_pxa320_gpio_vbus_info,
|
||||
},
|
||||
};
|
||||
|
||||
static void colibri_pxa320_udc_command(int cmd)
|
||||
{
|
||||
if (cmd == PXA2XX_UDC_CMD_CONNECT)
|
||||
UP2OCR = UP2OCR_HXOE | UP2OCR_DPPUE;
|
||||
else if (cmd == PXA2XX_UDC_CMD_DISCONNECT)
|
||||
UP2OCR = UP2OCR_HXOE;
|
||||
}
|
||||
|
||||
static struct pxa2xx_udc_mach_info colibri_pxa320_udc_info __initdata = {
|
||||
.udc_command = colibri_pxa320_udc_command,
|
||||
.gpio_pullup = -1,
|
||||
};
|
||||
|
||||
static void __init colibri_pxa320_init_udc(void)
|
||||
{
|
||||
pxa_set_udc_info(&colibri_pxa320_udc_info);
|
||||
platform_device_register(&colibri_pxa320_gpio_vbus);
|
||||
}
|
||||
#else
|
||||
static inline void colibri_pxa320_init_udc(void) {}
|
||||
#endif
|
||||
|
||||
static mfp_cfg_t colibri_pxa320_mmc_pin_config[] __initdata = {
|
||||
GPIO22_MMC1_CLK,
|
||||
GPIO23_MMC1_CMD,
|
||||
@ -212,6 +251,7 @@ void __init colibri_pxa320_init(void)
|
||||
colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa320_mmc_pin_config),
|
||||
mfp_to_gpio(MFP_PIN_GPIO28));
|
||||
colibri_pxa320_init_uart();
|
||||
colibri_pxa320_init_udc();
|
||||
}
|
||||
|
||||
MACHINE_START(COLIBRI320, "Toradex Colibri PXA320")
|
||||
|
@ -50,14 +50,13 @@
|
||||
#include <mach/udc.h>
|
||||
#include <mach/pxa2xx_spi.h>
|
||||
#include <mach/corgi.h>
|
||||
#include <mach/sharpsl.h>
|
||||
#include <mach/sharpsl_pm.h>
|
||||
|
||||
#include <asm/mach/sharpsl_param.h>
|
||||
#include <asm/hardware/scoop.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
#include "sharpsl.h"
|
||||
|
||||
static unsigned long corgi_pin_config[] __initdata = {
|
||||
/* Static Memory I/O */
|
||||
@ -185,8 +184,6 @@ static struct scoop_pcmcia_config corgi_pcmcia_config = {
|
||||
.num_devs = 1,
|
||||
};
|
||||
|
||||
EXPORT_SYMBOL(corgiscoop_device);
|
||||
|
||||
static struct w100_mem_info corgi_fb_mem = {
|
||||
.ext_cntl = 0x00040003,
|
||||
.sdram_mode_reg = 0x00650021,
|
||||
|
@ -23,12 +23,11 @@
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#include <mach/sharpsl.h>
|
||||
#include <mach/corgi.h>
|
||||
#include <mach/pxa2xx-regs.h>
|
||||
#include <mach/sharpsl_pm.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "sharpsl.h"
|
||||
|
||||
#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
|
||||
#define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 2.9V */
|
||||
@ -134,11 +133,11 @@ unsigned long corgipm_read_devdata(int type)
|
||||
case SHARPSL_STATUS_ACIN:
|
||||
return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0);
|
||||
case SHARPSL_STATUS_LOCK:
|
||||
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
|
||||
return gpio_get_value(sharpsl_pm.machinfo->gpio_batlock);
|
||||
case SHARPSL_STATUS_CHRGFULL:
|
||||
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
|
||||
return gpio_get_value(sharpsl_pm.machinfo->gpio_batfull);
|
||||
case SHARPSL_STATUS_FATAL:
|
||||
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
|
||||
return gpio_get_value(sharpsl_pm.machinfo->gpio_fatal);
|
||||
case SHARPSL_ACIN_VOLT:
|
||||
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
|
||||
case SHARPSL_BATT_TEMP:
|
||||
@ -165,8 +164,6 @@ static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
|
||||
.should_wakeup = corgi_should_wakeup,
|
||||
#if defined(CONFIG_LCD_CORGI)
|
||||
.backlight_limit = corgi_lcd_limit_intensity,
|
||||
#elif defined(CONFIG_BACKLIGHT_CORGI)
|
||||
.backlight_limit = corgibl_limit_intensity,
|
||||
#endif
|
||||
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
|
||||
.charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
|
||||
|
@ -4,6 +4,7 @@
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <asm/pmu.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/mmc.h>
|
||||
@ -31,6 +32,19 @@ void __init pxa_register_device(struct platform_device *dev, void *data)
|
||||
dev_err(&dev->dev, "unable to register device: %d\n", ret);
|
||||
}
|
||||
|
||||
static struct resource pxa_resource_pmu = {
|
||||
.start = IRQ_PMU,
|
||||
.end = IRQ_PMU,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
};
|
||||
|
||||
struct platform_device pxa_device_pmu = {
|
||||
.name = "arm-pmu",
|
||||
.id = ARM_PMU_DEVICE_CPU,
|
||||
.resource = &pxa_resource_pmu,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
static struct resource pxamci_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x41100000,
|
||||
|
@ -1,3 +1,4 @@
|
||||
extern struct platform_device pxa_device_pmu;
|
||||
extern struct platform_device pxa_device_mci;
|
||||
extern struct platform_device pxa3xx_device_mci2;
|
||||
extern struct platform_device pxa3xx_device_mci3;
|
||||
|
@ -1,78 +0,0 @@
|
||||
/*
|
||||
* Hardware definitions for the Toshiba e330 PDAs
|
||||
*
|
||||
* Copyright (c) 2003 Ian Molton <spyro@f2s.com>
|
||||
*
|
||||
* This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/tc6387xb.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/pxa25x.h>
|
||||
#include <mach/eseries-gpio.h>
|
||||
#include <mach/udc.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "eseries.h"
|
||||
#include "clock.h"
|
||||
|
||||
/* -------------------- e330 tc6387xb parameters -------------------- */
|
||||
|
||||
static struct tc6387xb_platform_data e330_tc6387xb_info = {
|
||||
.enable = &eseries_tmio_enable,
|
||||
.disable = &eseries_tmio_disable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
};
|
||||
|
||||
static struct platform_device e330_tc6387xb_device = {
|
||||
.name = "tc6387xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e330_tc6387xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* --------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&e330_tc6387xb_device,
|
||||
};
|
||||
|
||||
static void __init e330_init(void)
|
||||
{
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
eseries_register_clks();
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
}
|
||||
|
||||
MACHINE_START(E330, "Toshiba e330")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e330_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
@ -1,79 +0,0 @@
|
||||
/*
|
||||
* Hardware definitions for the Toshiba e350 PDAs
|
||||
*
|
||||
* Copyright (c) 2003 Ian Molton <spyro@f2s.com>
|
||||
*
|
||||
* This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/t7l66xb.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/pxa25x.h>
|
||||
#include <mach/eseries-gpio.h>
|
||||
#include <mach/udc.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "eseries.h"
|
||||
#include "clock.h"
|
||||
|
||||
/* -------------------- e350 t7l66xb parameters -------------------- */
|
||||
|
||||
static struct t7l66xb_platform_data e350_t7l66xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
};
|
||||
|
||||
static struct platform_device e350_t7l66xb_device = {
|
||||
.name = "t7l66xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e350_t7l66xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&e350_t7l66xb_device,
|
||||
};
|
||||
|
||||
static void __init e350_init(void)
|
||||
{
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
eseries_register_clks();
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
}
|
||||
|
||||
MACHINE_START(E350, "Toshiba e350")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e350_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
@ -1,155 +0,0 @@
|
||||
/*
|
||||
* Hardware definitions for the Toshiba eseries PDAs
|
||||
*
|
||||
* Copyright (c) 2003 Ian Molton <spyro@f2s.com>
|
||||
*
|
||||
* This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/t7l66xb.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/pxa25x.h>
|
||||
#include <mach/eseries-gpio.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/irqs.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "eseries.h"
|
||||
#include "clock.h"
|
||||
|
||||
/* ------------------------ E400 LCD definitions ------------------------ */
|
||||
|
||||
static struct pxafb_mode_info e400_pxafb_mode_info = {
|
||||
.pixclock = 140703,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.bpp = 16,
|
||||
.hsync_len = 4,
|
||||
.left_margin = 28,
|
||||
.right_margin = 8,
|
||||
.vsync_len = 3,
|
||||
.upper_margin = 5,
|
||||
.lower_margin = 6,
|
||||
.sync = 0,
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info e400_pxafb_mach_info = {
|
||||
.modes = &e400_pxafb_mode_info,
|
||||
.num_modes = 1,
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP,
|
||||
.lccr3 = 0,
|
||||
.pxafb_backlight_power = NULL,
|
||||
};
|
||||
|
||||
/* ------------------------ E400 MFP config ----------------------------- */
|
||||
|
||||
static unsigned long e400_pin_config[] __initdata = {
|
||||
/* Chip selects */
|
||||
GPIO15_nCS_1, /* CS1 - Flash */
|
||||
GPIO80_nCS_4, /* CS4 - TMIO */
|
||||
|
||||
/* Clocks */
|
||||
GPIO12_32KHz,
|
||||
|
||||
/* BTUART */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
|
||||
/* TMIO controller */
|
||||
GPIO19_GPIO, /* t7l66xb #PCLR */
|
||||
GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
|
||||
|
||||
/* wakeup */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
static struct mtd_partition partition_a = {
|
||||
.name = "Internal NAND flash",
|
||||
.offset = 0,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
};
|
||||
|
||||
static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
|
||||
|
||||
static struct nand_bbt_descr e400_t7l66xb_nand_bbt = {
|
||||
.options = 0,
|
||||
.offs = 4,
|
||||
.len = 2,
|
||||
.pattern = scan_ff_pattern
|
||||
};
|
||||
|
||||
static struct tmio_nand_data e400_t7l66xb_nand_config = {
|
||||
.num_partitions = 1,
|
||||
.partition = &partition_a,
|
||||
.badblock_pattern = &e400_t7l66xb_nand_bbt,
|
||||
};
|
||||
|
||||
static struct t7l66xb_platform_data e400_t7l66xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
|
||||
.nand_data = &e400_t7l66xb_nand_config,
|
||||
};
|
||||
|
||||
static struct platform_device e400_t7l66xb_device = {
|
||||
.name = "t7l66xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e400_t7l66xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&e400_t7l66xb_device,
|
||||
};
|
||||
|
||||
static void __init e400_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
/* Fixme - e400 may have a switched clock */
|
||||
eseries_register_clks();
|
||||
eseries_get_tmio_gpios();
|
||||
set_pxa_fb_info(&e400_pxafb_mach_info);
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
}
|
||||
|
||||
MACHINE_START(E400, "Toshiba e400")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e400_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
@ -1,225 +0,0 @@
|
||||
/*
|
||||
* Hardware definitions for the Toshiba eseries PDAs
|
||||
*
|
||||
* Copyright (c) 2003 Ian Molton <spyro@f2s.com>
|
||||
*
|
||||
* This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/mfd/t7l66xb.h>
|
||||
|
||||
#include <video/w100fb.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/pxa25x.h>
|
||||
#include <mach/eseries-gpio.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/irda.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/audio.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "eseries.h"
|
||||
#include "clock.h"
|
||||
#include "devices.h"
|
||||
|
||||
/* ------------------------ e740 video support --------------------------- */
|
||||
|
||||
static struct w100_gen_regs e740_lcd_regs = {
|
||||
.lcd_format = 0x00008023,
|
||||
.lcdd_cntl1 = 0x0f000000,
|
||||
.lcdd_cntl2 = 0x0003ffff,
|
||||
.genlcd_cntl1 = 0x00ffff03,
|
||||
.genlcd_cntl2 = 0x003c0f03,
|
||||
.genlcd_cntl3 = 0x000143aa,
|
||||
};
|
||||
|
||||
static struct w100_mode e740_lcd_mode = {
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.left_margin = 20,
|
||||
.right_margin = 28,
|
||||
.upper_margin = 9,
|
||||
.lower_margin = 8,
|
||||
.crtc_ss = 0x80140013,
|
||||
.crtc_ls = 0x81150110,
|
||||
.crtc_gs = 0x80050005,
|
||||
.crtc_vpos_gs = 0x000a0009,
|
||||
.crtc_rev = 0x0040010a,
|
||||
.crtc_dclk = 0xa906000a,
|
||||
.crtc_gclk = 0x80050108,
|
||||
.crtc_goe = 0x80050108,
|
||||
.pll_freq = 57,
|
||||
.pixclk_divider = 4,
|
||||
.pixclk_divider_rotated = 4,
|
||||
.pixclk_src = CLK_SRC_XTAL,
|
||||
.sysclk_divider = 1,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
.crtc_ps1_active = 0x41060010,
|
||||
};
|
||||
|
||||
static struct w100_gpio_regs e740_w100_gpio_info = {
|
||||
.init_data1 = 0x21002103,
|
||||
.gpio_dir1 = 0xffffdeff,
|
||||
.gpio_oe1 = 0x03c00643,
|
||||
.init_data2 = 0x003f003f,
|
||||
.gpio_dir2 = 0xffffffff,
|
||||
.gpio_oe2 = 0x000000ff,
|
||||
};
|
||||
|
||||
static struct w100fb_mach_info e740_fb_info = {
|
||||
.modelist = &e740_lcd_mode,
|
||||
.num_modes = 1,
|
||||
.regs = &e740_lcd_regs,
|
||||
.gpio = &e740_w100_gpio_info,
|
||||
.xtal_freq = 14318000,
|
||||
.xtal_dbl = 1,
|
||||
};
|
||||
|
||||
static struct resource e740_fb_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x0c000000,
|
||||
.end = 0x0cffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device e740_fb_device = {
|
||||
.name = "w100fb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e740_fb_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(e740_fb_resources),
|
||||
.resource = e740_fb_resources,
|
||||
};
|
||||
|
||||
/* --------------------------- MFP Pin config -------------------------- */
|
||||
|
||||
static unsigned long e740_pin_config[] __initdata = {
|
||||
/* Chip selects */
|
||||
GPIO15_nCS_1, /* CS1 - Flash */
|
||||
GPIO79_nCS_3, /* CS3 - IMAGEON */
|
||||
GPIO80_nCS_4, /* CS4 - TMIO */
|
||||
|
||||
/* Clocks */
|
||||
GPIO12_32KHz,
|
||||
|
||||
/* BTUART */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
|
||||
/* TMIO controller */
|
||||
GPIO19_GPIO, /* t7l66xb #PCLR */
|
||||
GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
|
||||
|
||||
/* UDC */
|
||||
GPIO13_GPIO,
|
||||
GPIO3_GPIO,
|
||||
|
||||
/* IrDA */
|
||||
GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
|
||||
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
|
||||
/* Audio power control */
|
||||
GPIO16_GPIO, /* AC97 codec AVDD2 supply (analogue power) */
|
||||
GPIO40_GPIO, /* Mic amp power */
|
||||
GPIO41_GPIO, /* Headphone amp power */
|
||||
|
||||
/* PC Card */
|
||||
GPIO8_GPIO, /* CD0 */
|
||||
GPIO44_GPIO, /* CD1 */
|
||||
GPIO11_GPIO, /* IRQ0 */
|
||||
GPIO6_GPIO, /* IRQ1 */
|
||||
GPIO27_GPIO, /* RST0 */
|
||||
GPIO24_GPIO, /* RST1 */
|
||||
GPIO20_GPIO, /* PWR0 */
|
||||
GPIO23_GPIO, /* PWR1 */
|
||||
GPIO48_nPOE,
|
||||
GPIO49_nPWE,
|
||||
GPIO50_nPIOR,
|
||||
GPIO51_nPIOW,
|
||||
GPIO52_nPCE_1,
|
||||
GPIO53_nPCE_2,
|
||||
GPIO54_nPSKTSEL,
|
||||
GPIO55_nPREG,
|
||||
GPIO56_nPWAIT,
|
||||
GPIO57_nIOIS16,
|
||||
|
||||
/* wakeup */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||
};
|
||||
|
||||
/* -------------------- e740 t7l66xb parameters -------------------- */
|
||||
|
||||
static struct t7l66xb_platform_data e740_t7l66xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
};
|
||||
|
||||
static struct platform_device e740_t7l66xb_device = {
|
||||
.name = "t7l66xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e740_t7l66xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&e740_fb_device,
|
||||
&e740_t7l66xb_device,
|
||||
};
|
||||
|
||||
static void __init e740_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
eseries_register_clks();
|
||||
clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name,
|
||||
"UDCCLK", &pxa25x_device_udc.dev),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
pxa_set_ac97_info(NULL);
|
||||
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
||||
}
|
||||
|
||||
MACHINE_START(E740, "Toshiba e740")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e740_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
@ -1,226 +0,0 @@
|
||||
/*
|
||||
* Hardware definitions for the Toshiba eseries PDAs
|
||||
*
|
||||
* Copyright (c) 2003 Ian Molton <spyro@f2s.com>
|
||||
*
|
||||
* This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/mfd/tc6393xb.h>
|
||||
|
||||
#include <video/w100fb.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/pxa25x.h>
|
||||
#include <mach/eseries-gpio.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/irda.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/audio.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "eseries.h"
|
||||
#include "clock.h"
|
||||
|
||||
/* ---------------------- E750 LCD definitions -------------------- */
|
||||
|
||||
static struct w100_gen_regs e750_lcd_regs = {
|
||||
.lcd_format = 0x00008003,
|
||||
.lcdd_cntl1 = 0x00000000,
|
||||
.lcdd_cntl2 = 0x0003ffff,
|
||||
.genlcd_cntl1 = 0x00fff003,
|
||||
.genlcd_cntl2 = 0x003c0f03,
|
||||
.genlcd_cntl3 = 0x000143aa,
|
||||
};
|
||||
|
||||
static struct w100_mode e750_lcd_mode = {
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.left_margin = 21,
|
||||
.right_margin = 22,
|
||||
.upper_margin = 5,
|
||||
.lower_margin = 4,
|
||||
.crtc_ss = 0x80150014,
|
||||
.crtc_ls = 0x8014000d,
|
||||
.crtc_gs = 0xc1000005,
|
||||
.crtc_vpos_gs = 0x00020147,
|
||||
.crtc_rev = 0x0040010a,
|
||||
.crtc_dclk = 0xa1700030,
|
||||
.crtc_gclk = 0x80cc0015,
|
||||
.crtc_goe = 0x80cc0015,
|
||||
.crtc_ps1_active = 0x61060017,
|
||||
.pll_freq = 57,
|
||||
.pixclk_divider = 4,
|
||||
.pixclk_divider_rotated = 4,
|
||||
.pixclk_src = CLK_SRC_XTAL,
|
||||
.sysclk_divider = 1,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
};
|
||||
|
||||
static struct w100_gpio_regs e750_w100_gpio_info = {
|
||||
.init_data1 = 0x01192f1b,
|
||||
.gpio_dir1 = 0xd5ffdeff,
|
||||
.gpio_oe1 = 0x000020bf,
|
||||
.init_data2 = 0x010f010f,
|
||||
.gpio_dir2 = 0xffffffff,
|
||||
.gpio_oe2 = 0x000001cf,
|
||||
};
|
||||
|
||||
static struct w100fb_mach_info e750_fb_info = {
|
||||
.modelist = &e750_lcd_mode,
|
||||
.num_modes = 1,
|
||||
.regs = &e750_lcd_regs,
|
||||
.gpio = &e750_w100_gpio_info,
|
||||
.xtal_freq = 14318000,
|
||||
.xtal_dbl = 1,
|
||||
};
|
||||
|
||||
static struct resource e750_fb_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x0c000000,
|
||||
.end = 0x0cffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device e750_fb_device = {
|
||||
.name = "w100fb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e750_fb_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(e750_fb_resources),
|
||||
.resource = e750_fb_resources,
|
||||
};
|
||||
|
||||
/* -------------------- e750 MFP parameters -------------------- */
|
||||
|
||||
static unsigned long e750_pin_config[] __initdata = {
|
||||
/* Chip selects */
|
||||
GPIO15_nCS_1, /* CS1 - Flash */
|
||||
GPIO79_nCS_3, /* CS3 - IMAGEON */
|
||||
GPIO80_nCS_4, /* CS4 - TMIO */
|
||||
|
||||
/* Clocks */
|
||||
GPIO11_3_6MHz,
|
||||
|
||||
/* BTUART */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
|
||||
/* TMIO controller */
|
||||
GPIO19_GPIO, /* t7l66xb #PCLR */
|
||||
GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
|
||||
|
||||
/* UDC */
|
||||
GPIO13_GPIO,
|
||||
GPIO3_GPIO,
|
||||
|
||||
/* IrDA */
|
||||
GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
|
||||
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
|
||||
/* Audio power control */
|
||||
GPIO4_GPIO, /* Headphone amp power */
|
||||
GPIO7_GPIO, /* Speaker amp power */
|
||||
GPIO37_GPIO, /* Headphone detect */
|
||||
|
||||
/* PC Card */
|
||||
GPIO8_GPIO, /* CD0 */
|
||||
GPIO44_GPIO, /* CD1 */
|
||||
GPIO11_GPIO, /* IRQ0 */
|
||||
GPIO6_GPIO, /* IRQ1 */
|
||||
GPIO27_GPIO, /* RST0 */
|
||||
GPIO24_GPIO, /* RST1 */
|
||||
GPIO20_GPIO, /* PWR0 */
|
||||
GPIO23_GPIO, /* PWR1 */
|
||||
GPIO48_nPOE,
|
||||
GPIO49_nPWE,
|
||||
GPIO50_nPIOR,
|
||||
GPIO51_nPIOW,
|
||||
GPIO52_nPCE_1,
|
||||
GPIO53_nPCE_2,
|
||||
GPIO54_nPSKTSEL,
|
||||
GPIO55_nPREG,
|
||||
GPIO56_nPWAIT,
|
||||
GPIO57_nIOIS16,
|
||||
|
||||
/* wakeup */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||
};
|
||||
|
||||
/* ----------------- e750 tc6393xb parameters ------------------ */
|
||||
|
||||
static struct tc6393xb_platform_data e750_tc6393xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.scr_pll2cr = 0x0cc1,
|
||||
.scr_gper = 0,
|
||||
.gpio_base = -1,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.disable = &eseries_tmio_disable,
|
||||
};
|
||||
|
||||
static struct platform_device e750_tc6393xb_device = {
|
||||
.name = "tc6393xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e750_tc6393xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&e750_fb_device,
|
||||
&e750_tc6393xb_device,
|
||||
};
|
||||
|
||||
static void __init e750_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name,
|
||||
"GPIO11_CLK", NULL),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
pxa_set_ac97_info(NULL);
|
||||
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
||||
}
|
||||
|
||||
MACHINE_START(E750, "Toshiba e750")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e750_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
@ -1,229 +0,0 @@
|
||||
/*
|
||||
* Hardware definitions for the Toshiba eseries PDAs
|
||||
*
|
||||
* Copyright (c) 2003 Ian Molton <spyro@f2s.com>
|
||||
*
|
||||
* This file is licensed under
|
||||
* the terms of the GNU General Public License version 2. This program
|
||||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/fb.h>
|
||||
#include <linux/mfd/tc6393xb.h>
|
||||
|
||||
#include <video/w100fb.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <mach/pxa25x.h>
|
||||
#include <mach/eseries-gpio.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/audio.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "eseries.h"
|
||||
#include "clock.h"
|
||||
|
||||
/* ------------------------ e800 LCD definitions ------------------------- */
|
||||
|
||||
static unsigned long e800_pin_config[] __initdata = {
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
};
|
||||
|
||||
static struct w100_gen_regs e800_lcd_regs = {
|
||||
.lcd_format = 0x00008003,
|
||||
.lcdd_cntl1 = 0x02a00000,
|
||||
.lcdd_cntl2 = 0x0003ffff,
|
||||
.genlcd_cntl1 = 0x000ff2a3,
|
||||
.genlcd_cntl2 = 0x000002a3,
|
||||
.genlcd_cntl3 = 0x000102aa,
|
||||
};
|
||||
|
||||
static struct w100_mode e800_lcd_mode[2] = {
|
||||
[0] = {
|
||||
.xres = 480,
|
||||
.yres = 640,
|
||||
.left_margin = 52,
|
||||
.right_margin = 148,
|
||||
.upper_margin = 2,
|
||||
.lower_margin = 6,
|
||||
.crtc_ss = 0x80350034,
|
||||
.crtc_ls = 0x802b0026,
|
||||
.crtc_gs = 0x80160016,
|
||||
.crtc_vpos_gs = 0x00020003,
|
||||
.crtc_rev = 0x0040001d,
|
||||
.crtc_dclk = 0xe0000000,
|
||||
.crtc_gclk = 0x82a50049,
|
||||
.crtc_goe = 0x80ee001c,
|
||||
.crtc_ps1_active = 0x00000000,
|
||||
.pll_freq = 128,
|
||||
.pixclk_divider = 4,
|
||||
.pixclk_divider_rotated = 6,
|
||||
.pixclk_src = CLK_SRC_PLL,
|
||||
.sysclk_divider = 0,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
},
|
||||
[1] = {
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.left_margin = 15,
|
||||
.right_margin = 88,
|
||||
.upper_margin = 0,
|
||||
.lower_margin = 7,
|
||||
.crtc_ss = 0xd010000f,
|
||||
.crtc_ls = 0x80070003,
|
||||
.crtc_gs = 0x80000000,
|
||||
.crtc_vpos_gs = 0x01460147,
|
||||
.crtc_rev = 0x00400003,
|
||||
.crtc_dclk = 0xa1700030,
|
||||
.crtc_gclk = 0x814b0008,
|
||||
.crtc_goe = 0x80cc0015,
|
||||
.crtc_ps1_active = 0x00000000,
|
||||
.pll_freq = 100,
|
||||
.pixclk_divider = 6, /* Wince uses 14 which gives a */
|
||||
.pixclk_divider_rotated = 6, /* 7MHz Pclk. We use a 14MHz one */
|
||||
.pixclk_src = CLK_SRC_PLL,
|
||||
.sysclk_divider = 0,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static struct w100_gpio_regs e800_w100_gpio_info = {
|
||||
.init_data1 = 0xc13fc019,
|
||||
.gpio_dir1 = 0x3e40df7f,
|
||||
.gpio_oe1 = 0x003c3000,
|
||||
.init_data2 = 0x00000000,
|
||||
.gpio_dir2 = 0x00000000,
|
||||
.gpio_oe2 = 0x00000000,
|
||||
};
|
||||
|
||||
static struct w100_mem_info e800_w100_mem_info = {
|
||||
.ext_cntl = 0x09640011,
|
||||
.sdram_mode_reg = 0x00600021,
|
||||
.ext_timing_cntl = 0x10001545,
|
||||
.io_cntl = 0x7ddd7333,
|
||||
.size = 0x1fffff,
|
||||
};
|
||||
|
||||
static void e800_tg_change(struct w100fb_par *par)
|
||||
{
|
||||
unsigned long tmp;
|
||||
|
||||
tmp = w100fb_gpio_read(W100_GPIO_PORT_A);
|
||||
if (par->mode->xres == 480)
|
||||
tmp |= 0x100;
|
||||
else
|
||||
tmp &= ~0x100;
|
||||
w100fb_gpio_write(W100_GPIO_PORT_A, tmp);
|
||||
}
|
||||
|
||||
static struct w100_tg_info e800_tg_info = {
|
||||
.change = e800_tg_change,
|
||||
};
|
||||
|
||||
static struct w100fb_mach_info e800_fb_info = {
|
||||
.modelist = e800_lcd_mode,
|
||||
.num_modes = 2,
|
||||
.regs = &e800_lcd_regs,
|
||||
.gpio = &e800_w100_gpio_info,
|
||||
.mem = &e800_w100_mem_info,
|
||||
.tg = &e800_tg_info,
|
||||
.xtal_freq = 16000000,
|
||||
};
|
||||
|
||||
static struct resource e800_fb_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x0c000000,
|
||||
.end = 0x0cffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device e800_fb_device = {
|
||||
.name = "w100fb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e800_fb_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(e800_fb_resources),
|
||||
.resource = e800_fb_resources,
|
||||
};
|
||||
|
||||
/* --------------------------- UDC definitions --------------------------- */
|
||||
|
||||
static struct pxa2xx_udc_mach_info e800_udc_mach_info = {
|
||||
.gpio_vbus = GPIO_E800_USB_DISC,
|
||||
.gpio_pullup = GPIO_E800_USB_PULLUP,
|
||||
.gpio_pullup_inverted = 1
|
||||
};
|
||||
|
||||
/* ----------------- e800 tc6393xb parameters ------------------ */
|
||||
|
||||
static struct tc6393xb_platform_data e800_tc6393xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.scr_pll2cr = 0x0cc1,
|
||||
.scr_gper = 0,
|
||||
.gpio_base = -1,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.disable = &eseries_tmio_disable,
|
||||
};
|
||||
|
||||
static struct platform_device e800_tc6393xb_device = {
|
||||
.name = "tc6393xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e800_tc6393xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&e800_fb_device,
|
||||
&e800_tc6393xb_device,
|
||||
};
|
||||
|
||||
static void __init e800_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e800_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name,
|
||||
"GPIO11_CLK", NULL),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
pxa_set_udc_info(&e800_udc_mach_info);
|
||||
pxa_set_ac97_info(NULL);
|
||||
}
|
||||
|
||||
MACHINE_START(E800, "Toshiba e800")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e800_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
|
@ -15,6 +15,13 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mfd/tc6387xb.h>
|
||||
#include <linux/mfd/tc6393xb.h>
|
||||
#include <linux/mfd/t7l66xb.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <video/w100fb.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@ -22,9 +29,12 @@
|
||||
|
||||
#include <mach/pxa25x.h>
|
||||
#include <mach/eseries-gpio.h>
|
||||
#include <mach/audio.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/irda.h>
|
||||
|
||||
#include "devices.h"
|
||||
#include "generic.h"
|
||||
#include "clock.h"
|
||||
|
||||
@ -130,3 +140,802 @@ void eseries_register_clks(void)
|
||||
clkdev_add_table(eseries_clkregs, ARRAY_SIZE(eseries_clkregs));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MACH_E330
|
||||
/* -------------------- e330 tc6387xb parameters -------------------- */
|
||||
|
||||
static struct tc6387xb_platform_data e330_tc6387xb_info = {
|
||||
.enable = &eseries_tmio_enable,
|
||||
.disable = &eseries_tmio_disable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
};
|
||||
|
||||
static struct platform_device e330_tc6387xb_device = {
|
||||
.name = "tc6387xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e330_tc6387xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* --------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *e330_devices[] __initdata = {
|
||||
&e330_tc6387xb_device,
|
||||
};
|
||||
|
||||
static void __init e330_init(void)
|
||||
{
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
eseries_register_clks();
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(ARRAY_AND_SIZE(e330_devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
}
|
||||
|
||||
MACHINE_START(E330, "Toshiba e330")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e330_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_E350
|
||||
/* -------------------- e350 t7l66xb parameters -------------------- */
|
||||
|
||||
static struct t7l66xb_platform_data e350_t7l66xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
};
|
||||
|
||||
static struct platform_device e350_t7l66xb_device = {
|
||||
.name = "t7l66xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e350_t7l66xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *e350_devices[] __initdata = {
|
||||
&e350_t7l66xb_device,
|
||||
};
|
||||
|
||||
static void __init e350_init(void)
|
||||
{
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
eseries_register_clks();
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(ARRAY_AND_SIZE(e350_devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
}
|
||||
|
||||
MACHINE_START(E350, "Toshiba e350")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e350_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_E400
|
||||
/* ------------------------ E400 LCD definitions ------------------------ */
|
||||
|
||||
static struct pxafb_mode_info e400_pxafb_mode_info = {
|
||||
.pixclock = 140703,
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.bpp = 16,
|
||||
.hsync_len = 4,
|
||||
.left_margin = 28,
|
||||
.right_margin = 8,
|
||||
.vsync_len = 3,
|
||||
.upper_margin = 5,
|
||||
.lower_margin = 6,
|
||||
.sync = 0,
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info e400_pxafb_mach_info = {
|
||||
.modes = &e400_pxafb_mode_info,
|
||||
.num_modes = 1,
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP,
|
||||
.lccr3 = 0,
|
||||
.pxafb_backlight_power = NULL,
|
||||
};
|
||||
|
||||
/* ------------------------ E400 MFP config ----------------------------- */
|
||||
|
||||
static unsigned long e400_pin_config[] __initdata = {
|
||||
/* Chip selects */
|
||||
GPIO15_nCS_1, /* CS1 - Flash */
|
||||
GPIO80_nCS_4, /* CS4 - TMIO */
|
||||
|
||||
/* Clocks */
|
||||
GPIO12_32KHz,
|
||||
|
||||
/* BTUART */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
|
||||
/* TMIO controller */
|
||||
GPIO19_GPIO, /* t7l66xb #PCLR */
|
||||
GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
|
||||
|
||||
/* wakeup */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------------------- */
|
||||
|
||||
static struct mtd_partition partition_a = {
|
||||
.name = "Internal NAND flash",
|
||||
.offset = 0,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
};
|
||||
|
||||
static uint8_t scan_ff_pattern[] = { 0xff, 0xff };
|
||||
|
||||
static struct nand_bbt_descr e400_t7l66xb_nand_bbt = {
|
||||
.options = 0,
|
||||
.offs = 4,
|
||||
.len = 2,
|
||||
.pattern = scan_ff_pattern
|
||||
};
|
||||
|
||||
static struct tmio_nand_data e400_t7l66xb_nand_config = {
|
||||
.num_partitions = 1,
|
||||
.partition = &partition_a,
|
||||
.badblock_pattern = &e400_t7l66xb_nand_bbt,
|
||||
};
|
||||
|
||||
static struct t7l66xb_platform_data e400_t7l66xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
|
||||
.nand_data = &e400_t7l66xb_nand_config,
|
||||
};
|
||||
|
||||
static struct platform_device e400_t7l66xb_device = {
|
||||
.name = "t7l66xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e400_t7l66xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ---------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *e400_devices[] __initdata = {
|
||||
&e400_t7l66xb_device,
|
||||
};
|
||||
|
||||
static void __init e400_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e400_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
/* Fixme - e400 may have a switched clock */
|
||||
eseries_register_clks();
|
||||
eseries_get_tmio_gpios();
|
||||
set_pxa_fb_info(&e400_pxafb_mach_info);
|
||||
platform_add_devices(ARRAY_AND_SIZE(e400_devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
}
|
||||
|
||||
MACHINE_START(E400, "Toshiba e400")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e400_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_E740
|
||||
/* ------------------------ e740 video support --------------------------- */
|
||||
|
||||
static struct w100_gen_regs e740_lcd_regs = {
|
||||
.lcd_format = 0x00008023,
|
||||
.lcdd_cntl1 = 0x0f000000,
|
||||
.lcdd_cntl2 = 0x0003ffff,
|
||||
.genlcd_cntl1 = 0x00ffff03,
|
||||
.genlcd_cntl2 = 0x003c0f03,
|
||||
.genlcd_cntl3 = 0x000143aa,
|
||||
};
|
||||
|
||||
static struct w100_mode e740_lcd_mode = {
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.left_margin = 20,
|
||||
.right_margin = 28,
|
||||
.upper_margin = 9,
|
||||
.lower_margin = 8,
|
||||
.crtc_ss = 0x80140013,
|
||||
.crtc_ls = 0x81150110,
|
||||
.crtc_gs = 0x80050005,
|
||||
.crtc_vpos_gs = 0x000a0009,
|
||||
.crtc_rev = 0x0040010a,
|
||||
.crtc_dclk = 0xa906000a,
|
||||
.crtc_gclk = 0x80050108,
|
||||
.crtc_goe = 0x80050108,
|
||||
.pll_freq = 57,
|
||||
.pixclk_divider = 4,
|
||||
.pixclk_divider_rotated = 4,
|
||||
.pixclk_src = CLK_SRC_XTAL,
|
||||
.sysclk_divider = 1,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
.crtc_ps1_active = 0x41060010,
|
||||
};
|
||||
|
||||
static struct w100_gpio_regs e740_w100_gpio_info = {
|
||||
.init_data1 = 0x21002103,
|
||||
.gpio_dir1 = 0xffffdeff,
|
||||
.gpio_oe1 = 0x03c00643,
|
||||
.init_data2 = 0x003f003f,
|
||||
.gpio_dir2 = 0xffffffff,
|
||||
.gpio_oe2 = 0x000000ff,
|
||||
};
|
||||
|
||||
static struct w100fb_mach_info e740_fb_info = {
|
||||
.modelist = &e740_lcd_mode,
|
||||
.num_modes = 1,
|
||||
.regs = &e740_lcd_regs,
|
||||
.gpio = &e740_w100_gpio_info,
|
||||
.xtal_freq = 14318000,
|
||||
.xtal_dbl = 1,
|
||||
};
|
||||
|
||||
static struct resource e740_fb_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x0c000000,
|
||||
.end = 0x0cffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device e740_fb_device = {
|
||||
.name = "w100fb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e740_fb_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(e740_fb_resources),
|
||||
.resource = e740_fb_resources,
|
||||
};
|
||||
|
||||
/* --------------------------- MFP Pin config -------------------------- */
|
||||
|
||||
static unsigned long e740_pin_config[] __initdata = {
|
||||
/* Chip selects */
|
||||
GPIO15_nCS_1, /* CS1 - Flash */
|
||||
GPIO79_nCS_3, /* CS3 - IMAGEON */
|
||||
GPIO80_nCS_4, /* CS4 - TMIO */
|
||||
|
||||
/* Clocks */
|
||||
GPIO12_32KHz,
|
||||
|
||||
/* BTUART */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
|
||||
/* TMIO controller */
|
||||
GPIO19_GPIO, /* t7l66xb #PCLR */
|
||||
GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
|
||||
|
||||
/* UDC */
|
||||
GPIO13_GPIO,
|
||||
GPIO3_GPIO,
|
||||
|
||||
/* IrDA */
|
||||
GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
|
||||
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
|
||||
/* Audio power control */
|
||||
GPIO16_GPIO, /* AC97 codec AVDD2 supply (analogue power) */
|
||||
GPIO40_GPIO, /* Mic amp power */
|
||||
GPIO41_GPIO, /* Headphone amp power */
|
||||
|
||||
/* PC Card */
|
||||
GPIO8_GPIO, /* CD0 */
|
||||
GPIO44_GPIO, /* CD1 */
|
||||
GPIO11_GPIO, /* IRQ0 */
|
||||
GPIO6_GPIO, /* IRQ1 */
|
||||
GPIO27_GPIO, /* RST0 */
|
||||
GPIO24_GPIO, /* RST1 */
|
||||
GPIO20_GPIO, /* PWR0 */
|
||||
GPIO23_GPIO, /* PWR1 */
|
||||
GPIO48_nPOE,
|
||||
GPIO49_nPWE,
|
||||
GPIO50_nPIOR,
|
||||
GPIO51_nPIOW,
|
||||
GPIO52_nPCE_1,
|
||||
GPIO53_nPCE_2,
|
||||
GPIO54_nPSKTSEL,
|
||||
GPIO55_nPREG,
|
||||
GPIO56_nPWAIT,
|
||||
GPIO57_nIOIS16,
|
||||
|
||||
/* wakeup */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||
};
|
||||
|
||||
/* -------------------- e740 t7l66xb parameters -------------------- */
|
||||
|
||||
static struct t7l66xb_platform_data e740_t7l66xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
};
|
||||
|
||||
static struct platform_device e740_t7l66xb_device = {
|
||||
.name = "t7l66xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e740_t7l66xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *e740_devices[] __initdata = {
|
||||
&e740_fb_device,
|
||||
&e740_t7l66xb_device,
|
||||
};
|
||||
|
||||
static void __init e740_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e740_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
eseries_register_clks();
|
||||
clk_add_alias("CLK_CK48M", e740_t7l66xb_device.name,
|
||||
"UDCCLK", &pxa25x_device_udc.dev),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(ARRAY_AND_SIZE(e740_devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
pxa_set_ac97_info(NULL);
|
||||
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
||||
}
|
||||
|
||||
MACHINE_START(E740, "Toshiba e740")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e740_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_E750
|
||||
/* ---------------------- E750 LCD definitions -------------------- */
|
||||
|
||||
static struct w100_gen_regs e750_lcd_regs = {
|
||||
.lcd_format = 0x00008003,
|
||||
.lcdd_cntl1 = 0x00000000,
|
||||
.lcdd_cntl2 = 0x0003ffff,
|
||||
.genlcd_cntl1 = 0x00fff003,
|
||||
.genlcd_cntl2 = 0x003c0f03,
|
||||
.genlcd_cntl3 = 0x000143aa,
|
||||
};
|
||||
|
||||
static struct w100_mode e750_lcd_mode = {
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.left_margin = 21,
|
||||
.right_margin = 22,
|
||||
.upper_margin = 5,
|
||||
.lower_margin = 4,
|
||||
.crtc_ss = 0x80150014,
|
||||
.crtc_ls = 0x8014000d,
|
||||
.crtc_gs = 0xc1000005,
|
||||
.crtc_vpos_gs = 0x00020147,
|
||||
.crtc_rev = 0x0040010a,
|
||||
.crtc_dclk = 0xa1700030,
|
||||
.crtc_gclk = 0x80cc0015,
|
||||
.crtc_goe = 0x80cc0015,
|
||||
.crtc_ps1_active = 0x61060017,
|
||||
.pll_freq = 57,
|
||||
.pixclk_divider = 4,
|
||||
.pixclk_divider_rotated = 4,
|
||||
.pixclk_src = CLK_SRC_XTAL,
|
||||
.sysclk_divider = 1,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
};
|
||||
|
||||
static struct w100_gpio_regs e750_w100_gpio_info = {
|
||||
.init_data1 = 0x01192f1b,
|
||||
.gpio_dir1 = 0xd5ffdeff,
|
||||
.gpio_oe1 = 0x000020bf,
|
||||
.init_data2 = 0x010f010f,
|
||||
.gpio_dir2 = 0xffffffff,
|
||||
.gpio_oe2 = 0x000001cf,
|
||||
};
|
||||
|
||||
static struct w100fb_mach_info e750_fb_info = {
|
||||
.modelist = &e750_lcd_mode,
|
||||
.num_modes = 1,
|
||||
.regs = &e750_lcd_regs,
|
||||
.gpio = &e750_w100_gpio_info,
|
||||
.xtal_freq = 14318000,
|
||||
.xtal_dbl = 1,
|
||||
};
|
||||
|
||||
static struct resource e750_fb_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x0c000000,
|
||||
.end = 0x0cffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device e750_fb_device = {
|
||||
.name = "w100fb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e750_fb_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(e750_fb_resources),
|
||||
.resource = e750_fb_resources,
|
||||
};
|
||||
|
||||
/* -------------------- e750 MFP parameters -------------------- */
|
||||
|
||||
static unsigned long e750_pin_config[] __initdata = {
|
||||
/* Chip selects */
|
||||
GPIO15_nCS_1, /* CS1 - Flash */
|
||||
GPIO79_nCS_3, /* CS3 - IMAGEON */
|
||||
GPIO80_nCS_4, /* CS4 - TMIO */
|
||||
|
||||
/* Clocks */
|
||||
GPIO11_3_6MHz,
|
||||
|
||||
/* BTUART */
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
|
||||
/* TMIO controller */
|
||||
GPIO19_GPIO, /* t7l66xb #PCLR */
|
||||
GPIO45_GPIO, /* t7l66xb #SUSPEND (NOT BTUART!) */
|
||||
|
||||
/* UDC */
|
||||
GPIO13_GPIO,
|
||||
GPIO3_GPIO,
|
||||
|
||||
/* IrDA */
|
||||
GPIO38_GPIO | MFP_LPM_DRIVE_HIGH,
|
||||
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
|
||||
/* Audio power control */
|
||||
GPIO4_GPIO, /* Headphone amp power */
|
||||
GPIO7_GPIO, /* Speaker amp power */
|
||||
GPIO37_GPIO, /* Headphone detect */
|
||||
|
||||
/* PC Card */
|
||||
GPIO8_GPIO, /* CD0 */
|
||||
GPIO44_GPIO, /* CD1 */
|
||||
GPIO11_GPIO, /* IRQ0 */
|
||||
GPIO6_GPIO, /* IRQ1 */
|
||||
GPIO27_GPIO, /* RST0 */
|
||||
GPIO24_GPIO, /* RST1 */
|
||||
GPIO20_GPIO, /* PWR0 */
|
||||
GPIO23_GPIO, /* PWR1 */
|
||||
GPIO48_nPOE,
|
||||
GPIO49_nPWE,
|
||||
GPIO50_nPIOR,
|
||||
GPIO51_nPIOW,
|
||||
GPIO52_nPCE_1,
|
||||
GPIO53_nPCE_2,
|
||||
GPIO54_nPSKTSEL,
|
||||
GPIO55_nPREG,
|
||||
GPIO56_nPWAIT,
|
||||
GPIO57_nIOIS16,
|
||||
|
||||
/* wakeup */
|
||||
GPIO0_GPIO | WAKEUP_ON_EDGE_RISE,
|
||||
};
|
||||
|
||||
/* ----------------- e750 tc6393xb parameters ------------------ */
|
||||
|
||||
static struct tc6393xb_platform_data e750_tc6393xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.scr_pll2cr = 0x0cc1,
|
||||
.scr_gper = 0,
|
||||
.gpio_base = -1,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.disable = &eseries_tmio_disable,
|
||||
};
|
||||
|
||||
static struct platform_device e750_tc6393xb_device = {
|
||||
.name = "tc6393xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e750_tc6393xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *e750_devices[] __initdata = {
|
||||
&e750_fb_device,
|
||||
&e750_tc6393xb_device,
|
||||
};
|
||||
|
||||
static void __init e750_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e750_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
clk_add_alias("CLK_CK3P6MI", e750_tc6393xb_device.name,
|
||||
"GPIO11_CLK", NULL),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(ARRAY_AND_SIZE(e750_devices));
|
||||
pxa_set_udc_info(&e7xx_udc_mach_info);
|
||||
pxa_set_ac97_info(NULL);
|
||||
pxa_set_ficp_info(&e7xx_ficp_platform_data);
|
||||
}
|
||||
|
||||
MACHINE_START(E750, "Toshiba e750")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e750_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_MACH_E800
|
||||
/* ------------------------ e800 LCD definitions ------------------------- */
|
||||
|
||||
static unsigned long e800_pin_config[] __initdata = {
|
||||
/* AC97 */
|
||||
GPIO28_AC97_BITCLK,
|
||||
GPIO29_AC97_SDATA_IN_0,
|
||||
GPIO30_AC97_SDATA_OUT,
|
||||
GPIO31_AC97_SYNC,
|
||||
};
|
||||
|
||||
static struct w100_gen_regs e800_lcd_regs = {
|
||||
.lcd_format = 0x00008003,
|
||||
.lcdd_cntl1 = 0x02a00000,
|
||||
.lcdd_cntl2 = 0x0003ffff,
|
||||
.genlcd_cntl1 = 0x000ff2a3,
|
||||
.genlcd_cntl2 = 0x000002a3,
|
||||
.genlcd_cntl3 = 0x000102aa,
|
||||
};
|
||||
|
||||
static struct w100_mode e800_lcd_mode[2] = {
|
||||
[0] = {
|
||||
.xres = 480,
|
||||
.yres = 640,
|
||||
.left_margin = 52,
|
||||
.right_margin = 148,
|
||||
.upper_margin = 2,
|
||||
.lower_margin = 6,
|
||||
.crtc_ss = 0x80350034,
|
||||
.crtc_ls = 0x802b0026,
|
||||
.crtc_gs = 0x80160016,
|
||||
.crtc_vpos_gs = 0x00020003,
|
||||
.crtc_rev = 0x0040001d,
|
||||
.crtc_dclk = 0xe0000000,
|
||||
.crtc_gclk = 0x82a50049,
|
||||
.crtc_goe = 0x80ee001c,
|
||||
.crtc_ps1_active = 0x00000000,
|
||||
.pll_freq = 128,
|
||||
.pixclk_divider = 4,
|
||||
.pixclk_divider_rotated = 6,
|
||||
.pixclk_src = CLK_SRC_PLL,
|
||||
.sysclk_divider = 0,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
},
|
||||
[1] = {
|
||||
.xres = 240,
|
||||
.yres = 320,
|
||||
.left_margin = 15,
|
||||
.right_margin = 88,
|
||||
.upper_margin = 0,
|
||||
.lower_margin = 7,
|
||||
.crtc_ss = 0xd010000f,
|
||||
.crtc_ls = 0x80070003,
|
||||
.crtc_gs = 0x80000000,
|
||||
.crtc_vpos_gs = 0x01460147,
|
||||
.crtc_rev = 0x00400003,
|
||||
.crtc_dclk = 0xa1700030,
|
||||
.crtc_gclk = 0x814b0008,
|
||||
.crtc_goe = 0x80cc0015,
|
||||
.crtc_ps1_active = 0x00000000,
|
||||
.pll_freq = 100,
|
||||
.pixclk_divider = 6, /* Wince uses 14 which gives a */
|
||||
.pixclk_divider_rotated = 6, /* 7MHz Pclk. We use a 14MHz one */
|
||||
.pixclk_src = CLK_SRC_PLL,
|
||||
.sysclk_divider = 0,
|
||||
.sysclk_src = CLK_SRC_PLL,
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
static struct w100_gpio_regs e800_w100_gpio_info = {
|
||||
.init_data1 = 0xc13fc019,
|
||||
.gpio_dir1 = 0x3e40df7f,
|
||||
.gpio_oe1 = 0x003c3000,
|
||||
.init_data2 = 0x00000000,
|
||||
.gpio_dir2 = 0x00000000,
|
||||
.gpio_oe2 = 0x00000000,
|
||||
};
|
||||
|
||||
static struct w100_mem_info e800_w100_mem_info = {
|
||||
.ext_cntl = 0x09640011,
|
||||
.sdram_mode_reg = 0x00600021,
|
||||
.ext_timing_cntl = 0x10001545,
|
||||
.io_cntl = 0x7ddd7333,
|
||||
.size = 0x1fffff,
|
||||
};
|
||||
|
||||
static void e800_tg_change(struct w100fb_par *par)
|
||||
{
|
||||
unsigned long tmp;
|
||||
|
||||
tmp = w100fb_gpio_read(W100_GPIO_PORT_A);
|
||||
if (par->mode->xres == 480)
|
||||
tmp |= 0x100;
|
||||
else
|
||||
tmp &= ~0x100;
|
||||
w100fb_gpio_write(W100_GPIO_PORT_A, tmp);
|
||||
}
|
||||
|
||||
static struct w100_tg_info e800_tg_info = {
|
||||
.change = e800_tg_change,
|
||||
};
|
||||
|
||||
static struct w100fb_mach_info e800_fb_info = {
|
||||
.modelist = e800_lcd_mode,
|
||||
.num_modes = 2,
|
||||
.regs = &e800_lcd_regs,
|
||||
.gpio = &e800_w100_gpio_info,
|
||||
.mem = &e800_w100_mem_info,
|
||||
.tg = &e800_tg_info,
|
||||
.xtal_freq = 16000000,
|
||||
};
|
||||
|
||||
static struct resource e800_fb_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x0c000000,
|
||||
.end = 0x0cffffff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device e800_fb_device = {
|
||||
.name = "w100fb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e800_fb_info,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(e800_fb_resources),
|
||||
.resource = e800_fb_resources,
|
||||
};
|
||||
|
||||
/* --------------------------- UDC definitions --------------------------- */
|
||||
|
||||
static struct pxa2xx_udc_mach_info e800_udc_mach_info = {
|
||||
.gpio_vbus = GPIO_E800_USB_DISC,
|
||||
.gpio_pullup = GPIO_E800_USB_PULLUP,
|
||||
.gpio_pullup_inverted = 1
|
||||
};
|
||||
|
||||
/* ----------------- e800 tc6393xb parameters ------------------ */
|
||||
|
||||
static struct tc6393xb_platform_data e800_tc6393xb_info = {
|
||||
.irq_base = IRQ_BOARD_START,
|
||||
.scr_pll2cr = 0x0cc1,
|
||||
.scr_gper = 0,
|
||||
.gpio_base = -1,
|
||||
.suspend = &eseries_tmio_suspend,
|
||||
.resume = &eseries_tmio_resume,
|
||||
.enable = &eseries_tmio_enable,
|
||||
.disable = &eseries_tmio_disable,
|
||||
};
|
||||
|
||||
static struct platform_device e800_tc6393xb_device = {
|
||||
.name = "tc6393xb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &e800_tc6393xb_info,
|
||||
},
|
||||
.num_resources = 2,
|
||||
.resource = eseries_tmio_resources,
|
||||
};
|
||||
|
||||
/* ----------------------------------------------------------------------- */
|
||||
|
||||
static struct platform_device *e800_devices[] __initdata = {
|
||||
&e800_fb_device,
|
||||
&e800_tc6393xb_device,
|
||||
};
|
||||
|
||||
static void __init e800_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(e800_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
clk_add_alias("CLK_CK3P6MI", e800_tc6393xb_device.name,
|
||||
"GPIO11_CLK", NULL),
|
||||
eseries_get_tmio_gpios();
|
||||
platform_add_devices(ARRAY_AND_SIZE(e800_devices));
|
||||
pxa_set_udc_info(&e800_udc_mach_info);
|
||||
pxa_set_ac97_info(NULL);
|
||||
}
|
||||
|
||||
MACHINE_START(E800, "Toshiba e800")
|
||||
/* Maintainer: Ian Molton (spyro@f2s.com) */
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.boot_params = 0xa0000100,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa25x_init_irq,
|
||||
.fixup = eseries_fixup,
|
||||
.init_machine = e800_init,
|
||||
.timer = &pxa_timer,
|
||||
MACHINE_END
|
||||
#endif
|
||||
|
@ -1,590 +0,0 @@
|
||||
/*
|
||||
* linux/arch/arm/mach-pxa/imote2.c
|
||||
*
|
||||
* Author: Ed C. Epp
|
||||
* Created: Nov 05, 2002
|
||||
* Copyright: Intel Corp.
|
||||
*
|
||||
* Modified 2008: Jonathan Cameron
|
||||
*
|
||||
* The Imote2 is a wireless sensor node platform sold
|
||||
* by Crossbow (www.xbow.com).
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/mfd/da903x.h>
|
||||
#include <linux/sht15.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <mach/pxa27x.h>
|
||||
#include <plat/i2c.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/pxa2xx_spi.h>
|
||||
#include <mach/pxa27x-udc.h>
|
||||
|
||||
#include "devices.h"
|
||||
#include "generic.h"
|
||||
|
||||
static unsigned long imote2_pin_config[] __initdata = {
|
||||
|
||||
/* Device Identification for wakeup*/
|
||||
GPIO102_GPIO,
|
||||
|
||||
/* Button */
|
||||
GPIO91_GPIO,
|
||||
|
||||
/* DA9030 */
|
||||
GPIO1_GPIO,
|
||||
|
||||
/* MMC */
|
||||
GPIO32_MMC_CLK,
|
||||
GPIO112_MMC_CMD,
|
||||
GPIO92_MMC_DAT_0,
|
||||
GPIO109_MMC_DAT_1,
|
||||
GPIO110_MMC_DAT_2,
|
||||
GPIO111_MMC_DAT_3,
|
||||
|
||||
/* 802.15.4 radio - driver out of mainline */
|
||||
GPIO22_GPIO, /* CC_RSTN */
|
||||
GPIO114_GPIO, /* CC_FIFO */
|
||||
GPIO116_GPIO, /* CC_CCA */
|
||||
GPIO0_GPIO, /* CC_FIFOP */
|
||||
GPIO16_GPIO, /* CCSFD */
|
||||
GPIO115_GPIO, /* Power enable */
|
||||
|
||||
/* I2C */
|
||||
GPIO117_I2C_SCL,
|
||||
GPIO118_I2C_SDA,
|
||||
|
||||
/* SSP 3 - 802.15.4 radio */
|
||||
GPIO39_GPIO, /* Chip Select */
|
||||
GPIO34_SSP3_SCLK,
|
||||
GPIO35_SSP3_TXD,
|
||||
GPIO41_SSP3_RXD,
|
||||
|
||||
/* SSP 2 - to daughter boards */
|
||||
GPIO37_GPIO, /* Chip Select */
|
||||
GPIO36_SSP2_SCLK,
|
||||
GPIO38_SSP2_TXD,
|
||||
GPIO11_SSP2_RXD,
|
||||
|
||||
/* SSP 1 - to daughter boards */
|
||||
GPIO24_GPIO, /* Chip Select */
|
||||
GPIO23_SSP1_SCLK,
|
||||
GPIO25_SSP1_TXD,
|
||||
GPIO26_SSP1_RXD,
|
||||
|
||||
/* BTUART Basic Connector*/
|
||||
GPIO42_BTUART_RXD,
|
||||
GPIO43_BTUART_TXD,
|
||||
GPIO44_BTUART_CTS,
|
||||
GPIO45_BTUART_RTS,
|
||||
|
||||
/* STUART Serial console via debug board*/
|
||||
GPIO46_STUART_RXD,
|
||||
GPIO47_STUART_TXD,
|
||||
|
||||
/* Basic sensor board */
|
||||
GPIO96_GPIO, /* accelerometer interrupt */
|
||||
GPIO99_GPIO, /* ADC interrupt */
|
||||
|
||||
/* SHT15 */
|
||||
GPIO100_GPIO,
|
||||
GPIO98_GPIO,
|
||||
|
||||
/* Connector pins specified as gpios */
|
||||
GPIO94_GPIO, /* large basic connector pin 14 */
|
||||
GPIO10_GPIO, /* large basic connector pin 23 */
|
||||
|
||||
/* LEDS */
|
||||
GPIO103_GPIO, /* red led */
|
||||
GPIO104_GPIO, /* green led */
|
||||
GPIO105_GPIO, /* blue led */
|
||||
};
|
||||
|
||||
static struct sht15_platform_data platform_data_sht15 = {
|
||||
.gpio_data = 100,
|
||||
.gpio_sck = 98,
|
||||
};
|
||||
|
||||
static struct platform_device sht15 = {
|
||||
.name = "sht15",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &platform_data_sht15,
|
||||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply imote2_sensor_3_con[] = {
|
||||
{
|
||||
.dev = &sht15.dev,
|
||||
.supply = "vcc",
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led imote2_led_pins[] = {
|
||||
{
|
||||
.name = "imote2:red",
|
||||
.gpio = 103,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "imote2:green",
|
||||
.gpio = 104,
|
||||
.active_low = 1,
|
||||
}, {
|
||||
.name = "imote2:blue",
|
||||
.gpio = 105,
|
||||
.active_low = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data imote2_led_data = {
|
||||
.num_leds = ARRAY_SIZE(imote2_led_pins),
|
||||
.leds = imote2_led_pins,
|
||||
};
|
||||
|
||||
static struct platform_device imote2_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &imote2_led_data,
|
||||
},
|
||||
};
|
||||
|
||||
/* Reverse engineered partly from Platformx drivers */
|
||||
enum imote2_ldos{
|
||||
vcc_vref,
|
||||
vcc_cc2420,
|
||||
vcc_mica,
|
||||
vcc_bt,
|
||||
/* The two voltages available to sensor boards */
|
||||
vcc_sensor_1_8,
|
||||
vcc_sensor_3,
|
||||
|
||||
vcc_sram_ext, /* directly connected to the pxa271 */
|
||||
vcc_pxa_pll,
|
||||
vcc_pxa_usim, /* Reference voltage for certain gpios */
|
||||
vcc_pxa_mem,
|
||||
vcc_pxa_flash,
|
||||
vcc_pxa_core, /*Dc-Dc buck not yet supported */
|
||||
vcc_lcd,
|
||||
vcc_bb,
|
||||
vcc_bbio,
|
||||
vcc_io, /* cc2420 802.15.4 radio and pxa vcc_io ?*/
|
||||
};
|
||||
|
||||
/* The values of the various regulator constraints are obviously dependent
|
||||
* on exactly what is wired to each ldo. Unfortunately this information is
|
||||
* not generally available. More information has been requested from Xbow
|
||||
* but as of yet they haven't been forthcoming.
|
||||
*
|
||||
* Some of these are clearly Stargate 2 related (no way of plugging
|
||||
* in an lcd on the IM2 for example!).
|
||||
*/
|
||||
static struct regulator_init_data imote2_ldo_init_data[] = {
|
||||
[vcc_bbio] = {
|
||||
.constraints = { /* board default 1.8V */
|
||||
.name = "vcc_bbio",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
},
|
||||
},
|
||||
[vcc_bb] = {
|
||||
.constraints = { /* board default 2.8V */
|
||||
.name = "vcc_bb",
|
||||
.min_uV = 2700000,
|
||||
.max_uV = 3000000,
|
||||
},
|
||||
},
|
||||
[vcc_pxa_flash] = {
|
||||
.constraints = {/* default is 1.8V */
|
||||
.name = "vcc_pxa_flash",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
},
|
||||
},
|
||||
[vcc_cc2420] = { /* also vcc_io */
|
||||
.constraints = {
|
||||
/* board default is 2.8V */
|
||||
.name = "vcc_cc2420",
|
||||
.min_uV = 2700000,
|
||||
.max_uV = 3300000,
|
||||
},
|
||||
},
|
||||
[vcc_vref] = { /* Reference for what? */
|
||||
.constraints = { /* default 1.8V */
|
||||
.name = "vcc_vref",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
},
|
||||
},
|
||||
[vcc_sram_ext] = {
|
||||
.constraints = { /* default 2.8V */
|
||||
.name = "vcc_sram_ext",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
},
|
||||
},
|
||||
[vcc_mica] = {
|
||||
.constraints = { /* default 2.8V */
|
||||
.name = "vcc_mica",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
},
|
||||
},
|
||||
[vcc_bt] = {
|
||||
.constraints = { /* default 2.8V */
|
||||
.name = "vcc_bt",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 2800000,
|
||||
},
|
||||
},
|
||||
[vcc_lcd] = {
|
||||
.constraints = { /* default 2.8V */
|
||||
.name = "vcc_lcd",
|
||||
.min_uV = 2700000,
|
||||
.max_uV = 3300000,
|
||||
},
|
||||
},
|
||||
[vcc_io] = { /* Same or higher than everything
|
||||
* bar vccbat and vccusb */
|
||||
.constraints = { /* default 2.8V */
|
||||
.name = "vcc_io",
|
||||
.min_uV = 2692000,
|
||||
.max_uV = 3300000,
|
||||
},
|
||||
},
|
||||
[vcc_sensor_1_8] = {
|
||||
.constraints = { /* default 1.8V */
|
||||
.name = "vcc_sensor_1_8",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
},
|
||||
},
|
||||
[vcc_sensor_3] = { /* curiously default 2.8V */
|
||||
.constraints = {
|
||||
.name = "vcc_sensor_3",
|
||||
.min_uV = 2800000,
|
||||
.max_uV = 3000000,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(imote2_sensor_3_con),
|
||||
.consumer_supplies = imote2_sensor_3_con,
|
||||
},
|
||||
[vcc_pxa_pll] = { /* 1.17V - 1.43V, default 1.3V*/
|
||||
.constraints = {
|
||||
.name = "vcc_pxa_pll",
|
||||
.min_uV = 1170000,
|
||||
.max_uV = 1430000,
|
||||
},
|
||||
},
|
||||
[vcc_pxa_usim] = {
|
||||
.constraints = { /* default 1.8V */
|
||||
.name = "vcc_pxa_usim",
|
||||
.min_uV = 1710000,
|
||||
.max_uV = 2160000,
|
||||
},
|
||||
},
|
||||
[vcc_pxa_mem] = {
|
||||
.constraints = { /* default 1.8V */
|
||||
.name = "vcc_pxa_mem",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
static struct da903x_subdev_info imote2_da9030_subdevs[] = {
|
||||
{
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO2,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_bbio],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO3,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_bb],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO4,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_pxa_flash],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO5,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_cc2420],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO6,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_vref],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO7,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_sram_ext],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO8,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_mica],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO9,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_bt],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO10,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_sensor_1_8],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO11,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_sensor_3],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO12,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_lcd],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO15,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_pxa_pll],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO17,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_pxa_usim],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO18,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_io],
|
||||
}, {
|
||||
.name = "da903x-regulator",
|
||||
.id = DA9030_ID_LDO19,
|
||||
.platform_data = &imote2_ldo_init_data[vcc_pxa_mem],
|
||||
},
|
||||
};
|
||||
|
||||
static struct da903x_platform_data imote2_da9030_pdata = {
|
||||
.num_subdevs = ARRAY_SIZE(imote2_da9030_subdevs),
|
||||
.subdevs = imote2_da9030_subdevs,
|
||||
};
|
||||
|
||||
/* As the the imote2 doesn't currently have a conventional SD slot
|
||||
* there is no option to hotplug cards, making all this rather simple
|
||||
*/
|
||||
static int imote2_mci_get_ro(struct device *dev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Rather simple case as hotplugging not possible */
|
||||
static struct pxamci_platform_data imote2_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34, /* default anyway */
|
||||
.get_ro = imote2_mci_get_ro,
|
||||
.gpio_card_detect = -1,
|
||||
.gpio_card_ro = -1,
|
||||
.gpio_power = -1,
|
||||
};
|
||||
|
||||
static struct mtd_partition imote2flash_partitions[] = {
|
||||
{
|
||||
.name = "Bootloader",
|
||||
.size = 0x00040000,
|
||||
.offset = 0,
|
||||
.mask_flags = MTD_WRITEABLE,
|
||||
}, {
|
||||
.name = "Kernel",
|
||||
.size = 0x00200000,
|
||||
.offset = 0x00040000,
|
||||
.mask_flags = 0,
|
||||
}, {
|
||||
.name = "Filesystem",
|
||||
.size = 0x01DC0000,
|
||||
.offset = 0x00240000,
|
||||
.mask_flags = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct resource flash_resources = {
|
||||
.start = PXA_CS0_PHYS,
|
||||
.end = PXA_CS0_PHYS + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
};
|
||||
|
||||
static struct flash_platform_data imote2_flash_data = {
|
||||
.map_name = "cfi_probe",
|
||||
.parts = imote2flash_partitions,
|
||||
.nr_parts = ARRAY_SIZE(imote2flash_partitions),
|
||||
.name = "PXA27xOnChipROM",
|
||||
.width = 2,
|
||||
};
|
||||
|
||||
static struct platform_device imote2_flash_device = {
|
||||
.name = "pxa2xx-flash",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &imote2_flash_data,
|
||||
},
|
||||
.resource = &flash_resources,
|
||||
.num_resources = 1,
|
||||
};
|
||||
|
||||
/* Some of the drivers here are out of kernel at the moment (parts of IIO)
|
||||
* and it may be a while before they are in the mainline.
|
||||
*/
|
||||
static struct i2c_board_info __initdata imote2_i2c_board_info[] = {
|
||||
{ /* UCAM sensor board */
|
||||
.type = "max1239",
|
||||
.addr = 0x35,
|
||||
}, { /* ITS400 Sensor board only */
|
||||
.type = "max1363",
|
||||
.addr = 0x34,
|
||||
/* Through a nand gate - Also beware, on V2 sensor board the
|
||||
* pull up resistors are missing.
|
||||
*/
|
||||
.irq = IRQ_GPIO(99),
|
||||
}, { /* ITS400 Sensor board only */
|
||||
.type = "tsl2561",
|
||||
.addr = 0x49,
|
||||
/* Through a nand gate - Also beware, on V2 sensor board the
|
||||
* pull up resistors are missing.
|
||||
*/
|
||||
.irq = IRQ_GPIO(99),
|
||||
}, { /* ITS400 Sensor board only */
|
||||
.type = "tmp175",
|
||||
.addr = 0x4A,
|
||||
.irq = IRQ_GPIO(96),
|
||||
}, { /* IMB400 Multimedia board */
|
||||
.type = "wm8940",
|
||||
.addr = 0x1A,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata imote2_pwr_i2c_board_info[] = {
|
||||
{
|
||||
.type = "da9030",
|
||||
.addr = 0x49,
|
||||
.platform_data = &imote2_da9030_pdata,
|
||||
.irq = gpio_to_irq(1),
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxa2xx_spi_master pxa_ssp_master_0_info = {
|
||||
.num_chipselect = 1,
|
||||
};
|
||||
|
||||
static struct pxa2xx_spi_master pxa_ssp_master_1_info = {
|
||||
.num_chipselect = 1,
|
||||
};
|
||||
|
||||
static struct pxa2xx_spi_master pxa_ssp_master_2_info = {
|
||||
.num_chipselect = 1,
|
||||
};
|
||||
|
||||
static struct pxa2xx_spi_chip staccel_chip_info = {
|
||||
.tx_threshold = 8,
|
||||
.rx_threshold = 8,
|
||||
.dma_burst_size = 8,
|
||||
.timeout = 235,
|
||||
.gpio_cs = 24,
|
||||
};
|
||||
|
||||
static struct pxa2xx_spi_chip cc2420_info = {
|
||||
.tx_threshold = 8,
|
||||
.rx_threshold = 8,
|
||||
.dma_burst_size = 8,
|
||||
.timeout = 235,
|
||||
.gpio_cs = 39,
|
||||
};
|
||||
|
||||
static struct spi_board_info spi_board_info[] __initdata = {
|
||||
{ /* Driver in IIO */
|
||||
.modalias = "lis3l02dq",
|
||||
.max_speed_hz = 8000000,/* 8MHz max spi frequency at 3V */
|
||||
.bus_num = 1,
|
||||
.chip_select = 0,
|
||||
.controller_data = &staccel_chip_info,
|
||||
.irq = IRQ_GPIO(96),
|
||||
}, { /* Driver out of kernel as it needs considerable rewriting */
|
||||
.modalias = "cc2420",
|
||||
.max_speed_hz = 6500000,
|
||||
.bus_num = 3,
|
||||
.chip_select = 0,
|
||||
.controller_data = &cc2420_info,
|
||||
},
|
||||
};
|
||||
|
||||
static void im2_udc_command(int cmd)
|
||||
{
|
||||
switch (cmd) {
|
||||
case PXA2XX_UDC_CMD_CONNECT:
|
||||
UP2OCR |= UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE;
|
||||
break;
|
||||
case PXA2XX_UDC_CMD_DISCONNECT:
|
||||
UP2OCR &= ~(UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static struct pxa2xx_udc_mach_info imote2_udc_info __initdata = {
|
||||
.udc_command = im2_udc_command,
|
||||
};
|
||||
|
||||
static struct platform_device *imote2_devices[] = {
|
||||
&imote2_flash_device,
|
||||
&imote2_leds,
|
||||
&sht15,
|
||||
};
|
||||
|
||||
static struct i2c_pxa_platform_data i2c_pwr_pdata = {
|
||||
.fast_mode = 1,
|
||||
};
|
||||
|
||||
static struct i2c_pxa_platform_data i2c_pdata = {
|
||||
.fast_mode = 1,
|
||||
};
|
||||
|
||||
static void __init imote2_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(imote2_pin_config));
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
platform_add_devices(imote2_devices, ARRAY_SIZE(imote2_devices));
|
||||
|
||||
pxa2xx_set_spi_info(1, &pxa_ssp_master_0_info);
|
||||
pxa2xx_set_spi_info(2, &pxa_ssp_master_1_info);
|
||||
pxa2xx_set_spi_info(3, &pxa_ssp_master_2_info);
|
||||
|
||||
spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info));
|
||||
|
||||
i2c_register_board_info(0, imote2_i2c_board_info,
|
||||
ARRAY_SIZE(imote2_i2c_board_info));
|
||||
i2c_register_board_info(1, imote2_pwr_i2c_board_info,
|
||||
ARRAY_SIZE(imote2_pwr_i2c_board_info));
|
||||
|
||||
pxa27x_set_i2c_power_info(&i2c_pwr_pdata);
|
||||
pxa_set_i2c_info(&i2c_pdata);
|
||||
|
||||
pxa_set_mci_info(&imote2_mci_platform_data);
|
||||
pxa_set_udc_info(&imote2_udc_info);
|
||||
}
|
||||
|
||||
MACHINE_START(INTELMOTE2, "IMOTE 2")
|
||||
.phys_io = 0x40000000,
|
||||
.io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
|
||||
.map_io = pxa_map_io,
|
||||
.init_irq = pxa27x_init_irq,
|
||||
.timer = &pxa_timer,
|
||||
.init_machine = imote2_init,
|
||||
.boot_params = 0xA0000100,
|
||||
MACHINE_END
|
@ -26,21 +26,55 @@ enum balloon3_features {
|
||||
#define BALLOON3_FPGA_VIRT (0xf1000000) /* as per balloon2 */
|
||||
#define BALLOON3_FPGA_LENGTH 0x01000000
|
||||
|
||||
/* FPGA/CPLD registers */
|
||||
#define BALLOON3_PCMCIA0_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
||||
/* fixme - same for now */
|
||||
#define BALLOON3_PCMCIA1_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
||||
#define BALLOON3_NANDIO_IO_REG (BALLOON3_FPGA_VIRT + 0x00e00000)
|
||||
/* FPGA / CPLD registers for CF socket */
|
||||
#define BALLOON3_CF_STATUS_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
||||
#define BALLOON3_CF_CONTROL_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
||||
/* FPGA / CPLD version register */
|
||||
#define BALLOON3_FPGA_VER (BALLOON3_FPGA_VIRT + 0x00e0001c)
|
||||
/* FPGA / CPLD registers for NAND flash */
|
||||
#define BALLOON3_NAND_BASE (PXA_CS4_PHYS + 0x00e00000)
|
||||
#define BALLOON3_NAND_IO_REG (BALLOON3_FPGA_VIRT + 0x00e00000)
|
||||
#define BALLOON3_NAND_CONTROL2_REG (BALLOON3_FPGA_VIRT + 0x00e00010)
|
||||
#define BALLOON3_NAND_STAT_REG (BALLOON3_FPGA_VIRT + 0x00e00010)
|
||||
#define BALLOON3_NAND_CONTROL_REG (BALLOON3_FPGA_VIRT + 0x00e00014)
|
||||
|
||||
/* fpga/cpld interrupt control register */
|
||||
#define BALLOON3_INT_CONTROL_REG (BALLOON3_FPGA_VIRT + 0x00e0000C)
|
||||
#define BALLOON3_NANDIO_CTL2_REG (BALLOON3_FPGA_VIRT + 0x00e00010)
|
||||
#define BALLOON3_NANDIO_CTL_REG (BALLOON3_FPGA_VIRT + 0x00e00014)
|
||||
#define BALLOON3_VERSION_REG (BALLOON3_FPGA_VIRT + 0x00e0001c)
|
||||
|
||||
#define BALLOON3_SAMOSA_ADDR_REG (BALLOON3_FPGA_VIRT + 0x00c00000)
|
||||
#define BALLOON3_SAMOSA_DATA_REG (BALLOON3_FPGA_VIRT + 0x00c00004)
|
||||
#define BALLOON3_SAMOSA_STATUS_REG (BALLOON3_FPGA_VIRT + 0x00c0001c)
|
||||
|
||||
/* CF Status Register bits (read-only) bits */
|
||||
#define BALLOON3_CF_nIRQ (1 << 0)
|
||||
#define BALLOON3_CF_nSTSCHG_BVD1 (1 << 1)
|
||||
|
||||
/* CF Control Set Register bits / CF Control Clear Register bits (write-only) */
|
||||
#define BALLOON3_CF_RESET (1 << 0)
|
||||
#define BALLOON3_CF_ENABLE (1 << 1)
|
||||
#define BALLOON3_CF_ADD_ENABLE (1 << 2)
|
||||
|
||||
/* CF Interrupt sources */
|
||||
#define BALLOON3_BP_CF_NRDY_IRQ BALLOON3_IRQ(0)
|
||||
#define BALLOON3_BP_NSTSCHG_IRQ BALLOON3_IRQ(1)
|
||||
|
||||
/* NAND Control register */
|
||||
#define BALLOON3_NAND_CONTROL_FLWP (1 << 7)
|
||||
#define BALLOON3_NAND_CONTROL_FLSE (1 << 6)
|
||||
#define BALLOON3_NAND_CONTROL_FLCE3 (1 << 5)
|
||||
#define BALLOON3_NAND_CONTROL_FLCE2 (1 << 4)
|
||||
#define BALLOON3_NAND_CONTROL_FLCE1 (1 << 3)
|
||||
#define BALLOON3_NAND_CONTROL_FLCE0 (1 << 2)
|
||||
#define BALLOON3_NAND_CONTROL_FLALE (1 << 1)
|
||||
#define BALLOON3_NAND_CONTROL_FLCLE (1 << 0)
|
||||
|
||||
/* NAND Status register */
|
||||
#define BALLOON3_NAND_STAT_RNB (1 << 0)
|
||||
|
||||
/* NAND Control2 register */
|
||||
#define BALLOON3_NAND_CONTROL2_16BIT (1 << 0)
|
||||
|
||||
/* GPIOs for irqs */
|
||||
#define BALLOON3_GPIO_AUX_NIRQ (94)
|
||||
#define BALLOON3_GPIO_CODEC_IRQ (95)
|
||||
@ -54,20 +88,24 @@ enum balloon3_features {
|
||||
|
||||
#define BALLOON3_GPIO_S0_CD (105)
|
||||
|
||||
/* NAND */
|
||||
#define BALLOON3_GPIO_RUN_NAND (102)
|
||||
|
||||
/* PCF8574A Leds */
|
||||
#define BALLOON3_PCF_GPIO_BASE 160
|
||||
#define BALLOON3_PCF_GPIO_LED0 (BALLOON3_PCF_GPIO_BASE + 0)
|
||||
#define BALLOON3_PCF_GPIO_LED1 (BALLOON3_PCF_GPIO_BASE + 1)
|
||||
#define BALLOON3_PCF_GPIO_LED2 (BALLOON3_PCF_GPIO_BASE + 2)
|
||||
#define BALLOON3_PCF_GPIO_LED3 (BALLOON3_PCF_GPIO_BASE + 3)
|
||||
#define BALLOON3_PCF_GPIO_LED4 (BALLOON3_PCF_GPIO_BASE + 4)
|
||||
#define BALLOON3_PCF_GPIO_LED5 (BALLOON3_PCF_GPIO_BASE + 5)
|
||||
#define BALLOON3_PCF_GPIO_LED6 (BALLOON3_PCF_GPIO_BASE + 6)
|
||||
#define BALLOON3_PCF_GPIO_LED7 (BALLOON3_PCF_GPIO_BASE + 7)
|
||||
|
||||
/* FPGA Interrupt Mask/Acknowledge Register */
|
||||
#define BALLOON3_INT_S0_IRQ (1 << 0) /* PCMCIA 0 IRQ */
|
||||
#define BALLOON3_INT_S0_STSCHG (1 << 1) /* PCMCIA 0 status changed */
|
||||
|
||||
/* CF Status Register */
|
||||
#define BALLOON3_PCMCIA_nIRQ (1 << 0) /* IRQ / ready signal */
|
||||
#define BALLOON3_PCMCIA_nSTSCHG_BVD1 (1 << 1)
|
||||
/* VDD sense / card status changed */
|
||||
|
||||
/* CF control register (write) */
|
||||
#define BALLOON3_PCMCIA_RESET (1 << 0) /* Card reset signal */
|
||||
#define BALLOON3_PCMCIA_ENABLE (1 << 1)
|
||||
#define BALLOON3_PCMCIA_ADD_ENABLE (1 << 2)
|
||||
|
||||
/* CPLD (and FPGA) interface definitions */
|
||||
#define CPLD_LCD0_DATA_SET 0x00
|
||||
#define CPLD_LCD0_DATA_CLR 0x10
|
||||
@ -132,9 +170,6 @@ enum balloon3_features {
|
||||
/* Balloon3 Interrupts */
|
||||
#define BALLOON3_IRQ(x) (IRQ_BOARD_START + (x))
|
||||
|
||||
#define BALLOON3_BP_CF_NRDY_IRQ BALLOON3_IRQ(0)
|
||||
#define BALLOON3_BP_NSTSCHG_IRQ BALLOON3_IRQ(1)
|
||||
|
||||
#define BALLOON3_AUX_NIRQ IRQ_GPIO(BALLOON3_GPIO_AUX_NIRQ)
|
||||
#define BALLOON3_CODEC_IRQ IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ)
|
||||
#define BALLOON3_S0_CD_IRQ IRQ_GPIO(BALLOON3_GPIO_S0_CD)
|
||||
|
@ -4,6 +4,27 @@
|
||||
#include <net/ax88796.h>
|
||||
#include <mach/mfp.h>
|
||||
|
||||
/*
|
||||
* base board glue for PXA270 module
|
||||
*/
|
||||
|
||||
enum {
|
||||
COLIBRI_PXA270_EVALBOARD = 0,
|
||||
COLIBRI_PXA270_INCOME,
|
||||
};
|
||||
|
||||
#if defined(CONFIG_MACH_COLIBRI_PXA270_EVALBOARD)
|
||||
extern void colibri_pxa270_evalboard_init(void);
|
||||
#else
|
||||
static inline void colibri_pxa270_evalboard_init(void) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MACH_COLIBRI_PXA270_INCOME)
|
||||
extern void colibri_pxa270_income_boardinit(void);
|
||||
#else
|
||||
static inline void colibri_pxa270_income_boardinit(void) {}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* common settings for all modules
|
||||
*/
|
||||
@ -33,13 +54,10 @@ static inline void colibri_pxa3xx_init_nand(void) {}
|
||||
/* physical memory regions */
|
||||
#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */
|
||||
|
||||
/* definitions for Colibri PXA270 */
|
||||
|
||||
#define COLIBRI_PXA270_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
|
||||
#define COLIBRI_PXA270_ETH_PHYS (PXA_CS2_PHYS) /* Ethernet */
|
||||
#define COLIBRI_PXA270_ETH_IRQ_GPIO 114
|
||||
#define COLIBRI_PXA270_ETH_IRQ \
|
||||
gpio_to_irq(mfp_to_gpio(COLIBRI_PXA270_ETH_IRQ_GPIO))
|
||||
/* GPIO definitions for Colibri PXA270 */
|
||||
#define GPIO114_COLIBRI_PXA270_ETH_IRQ 114
|
||||
#define GPIO0_COLIBRI_PXA270_SD_DETECT 0
|
||||
#define GPIO113_COLIBRI_PXA270_TS_IRQ 113
|
||||
|
||||
#endif /* _COLIBRI_H_ */
|
||||
|
||||
|
@ -109,10 +109,5 @@
|
||||
#define CORGI_GPIO_BACKLIGHT_CONT (CORGI_SCOOP_GPIO_BASE + 7)
|
||||
#define CORGI_GPIO_MIC_BIAS (CORGI_SCOOP_GPIO_BASE + 8)
|
||||
|
||||
/*
|
||||
* Shared data structures
|
||||
*/
|
||||
extern struct platform_device corgiscoop_device;
|
||||
|
||||
#endif /* __ASM_ARCH_CORGI_H */
|
||||
|
||||
|
@ -14,25 +14,15 @@
|
||||
|
||||
/*
|
||||
GPIOn - Input from MAX823 (or equiv), normalizing USB +5V into a clean
|
||||
interrupt signal for determining cable presence. On the original gumstix,
|
||||
this is GPIO81, and GPIO83 needs to be defined as well. On the gumstix F,
|
||||
interrupt signal for determining cable presence. On the gumstix F,
|
||||
this moves to GPIO17 and GPIO37. */
|
||||
|
||||
/* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn
|
||||
has detected a cable insertion; driven low otherwise. */
|
||||
|
||||
#ifdef CONFIG_ARCH_GUMSTIX_ORIG
|
||||
|
||||
#define GPIO_GUMSTIX_USB_GPIOn 81
|
||||
#define GPIO_GUMSTIX_USB_GPIOx 83
|
||||
|
||||
#else
|
||||
|
||||
#define GPIO_GUMSTIX_USB_GPIOn 35
|
||||
#define GPIO_GUMSTIX_USB_GPIOx 41
|
||||
|
||||
#endif
|
||||
|
||||
/* usb state change */
|
||||
#define GUMSTIX_USB_INTR_IRQ IRQ_GPIO(GPIO_GUMSTIX_USB_GPIOn)
|
||||
|
||||
|
81
arch/arm/mach-pxa/include/mach/palm27x.h
Normal file
81
arch/arm/mach-pxa/include/mach/palm27x.h
Normal file
@ -0,0 +1,81 @@
|
||||
/*
|
||||
* Common functions for Palm LD, T5, TX, Z72
|
||||
*
|
||||
* Copyright (C) 2010
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
#ifndef __INCLUDE_MACH_PALM27X__
|
||||
#define __INCLUDE_MACH_PALM27X__
|
||||
|
||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
extern void __init palm27x_mmc_init(int detect, int ro, int power,
|
||||
int power_inverted);
|
||||
#else
|
||||
static inline void palm27x_mmc_init(int detect, int ro, int power,
|
||||
int power_inverted)
|
||||
{}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_SUSPEND)
|
||||
extern void __init palm27x_pm_init(unsigned long str_base);
|
||||
#else
|
||||
static inline void palm27x_pm_init(unsigned long str_base) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
extern struct pxafb_mode_info palm_320x480_lcd_mode;
|
||||
extern struct pxafb_mode_info palm_320x320_lcd_mode;
|
||||
extern struct pxafb_mode_info palm_320x320_new_lcd_mode;
|
||||
extern void __init palm27x_lcd_init(int power,
|
||||
struct pxafb_mode_info *mode);
|
||||
#else
|
||||
static inline void palm27x_lcd_init(int power, struct pxafb_mode_info *mode) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_USB_GADGET_PXA27X) || \
|
||||
defined(CONFIG_USB_GADGET_PXA27X_MODULE)
|
||||
extern void __init palm27x_udc_init(int vbus, int pullup,
|
||||
int vbus_inverted);
|
||||
#else
|
||||
static inline void palm27x_udc_init(int vbus, int pullup, int vbus_inverted) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
|
||||
extern void __init palm27x_irda_init(int pwdn);
|
||||
#else
|
||||
static inline void palm27x_irda_init(int pwdn) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_TOUCHSCREEN_WM97XX) || \
|
||||
defined(CONFIG_TOUCHSCREEN_WM97XX_MODULE)
|
||||
extern void __init palm27x_ac97_init(int minv, int maxv, int jack,
|
||||
int reset);
|
||||
#else
|
||||
static inline void palm27x_ac97_init(int minv, int maxv, int jack, int reset) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE)
|
||||
extern void __init palm27x_pwm_init(int bl, int lcd);
|
||||
#else
|
||||
static inline void palm27x_pwm_init(int bl, int lcd) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_PDA_POWER) || defined(CONFIG_PDA_POWER_MODULE)
|
||||
extern void __init palm27x_power_init(int ac, int usb);
|
||||
#else
|
||||
static inline void palm27x_power_init(int ac, int usb) {}
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_REGULATOR_MAX1586) || \
|
||||
defined(CONFIG_REGULATOR_MAX1586_MODULE)
|
||||
extern void __init palm27x_pmic_init(void);
|
||||
#else
|
||||
static inline void palm27x_pmic_init(void) {}
|
||||
#endif
|
||||
|
||||
#endif /* __INCLUDE_MACH_PALM27X__ */
|
33
arch/arm/mach-pxa/include/mach/pata_pxa.h
Normal file
33
arch/arm/mach-pxa/include/mach/pata_pxa.h
Normal file
@ -0,0 +1,33 @@
|
||||
/*
|
||||
* Generic PXA PATA driver
|
||||
*
|
||||
* Copyright (C) 2010 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 as published by
|
||||
* the Free Software Foundation; either version 2, 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; see the file COPYING. If not, write to
|
||||
* the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifndef __MACH_PATA_PXA_H__
|
||||
#define __MACH_PATA_PXA_H__
|
||||
|
||||
struct pata_pxa_pdata {
|
||||
/* PXA DMA DREQ<0:2> pin */
|
||||
uint32_t dma_dreq;
|
||||
/* Register shift */
|
||||
uint32_t reg_shift;
|
||||
/* IRQ flags */
|
||||
uint32_t irq_flags;
|
||||
};
|
||||
|
||||
#endif /* __MACH_PATA_PXA_H__ */
|
@ -1,35 +0,0 @@
|
||||
/*
|
||||
* SharpSL SSP Driver
|
||||
*/
|
||||
|
||||
unsigned long corgi_ssp_ads7846_putget(unsigned long);
|
||||
unsigned long corgi_ssp_ads7846_get(void);
|
||||
void corgi_ssp_ads7846_put(unsigned long data);
|
||||
void corgi_ssp_ads7846_lock(void);
|
||||
void corgi_ssp_ads7846_unlock(void);
|
||||
void corgi_ssp_lcdtg_send (unsigned char adrs, unsigned char data);
|
||||
void corgi_ssp_blduty_set(int duty);
|
||||
int corgi_ssp_max1111_get(unsigned long data);
|
||||
|
||||
/*
|
||||
* SharpSL Touchscreen Driver
|
||||
*/
|
||||
|
||||
struct corgits_machinfo {
|
||||
unsigned long (*get_hsync_invperiod)(void);
|
||||
void (*put_hsync)(void);
|
||||
void (*wait_hsync)(void);
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* SharpSL Backlight
|
||||
*/
|
||||
extern void corgibl_limit_intensity(int limit);
|
||||
extern void corgi_lcd_limit_intensity(int limit);
|
||||
|
||||
|
||||
/*
|
||||
* SharpSL Battery/PM Driver
|
||||
*/
|
||||
extern void sharpsl_battery_kick(void);
|
@ -93,6 +93,8 @@ struct sharpsl_pm_status {
|
||||
|
||||
extern struct sharpsl_pm_status sharpsl_pm;
|
||||
|
||||
extern struct battery_thresh sharpsl_battery_levels_acin[];
|
||||
extern struct battery_thresh sharpsl_battery_levels_noac[];
|
||||
|
||||
#define SHARPSL_LED_ERROR 2
|
||||
#define SHARPSL_LED_ON 1
|
||||
@ -101,4 +103,11 @@ extern struct sharpsl_pm_status sharpsl_pm;
|
||||
void sharpsl_battery_kick(void);
|
||||
void sharpsl_pm_led(int val);
|
||||
|
||||
/* MAX1111 Channel Definitions */
|
||||
#define MAX1111_BATT_VOLT 4u
|
||||
#define MAX1111_BATT_TEMP 2u
|
||||
#define MAX1111_ACIN_VOLT 6u
|
||||
int sharpsl_pm_pxa_read_max1111(int channel);
|
||||
|
||||
void corgi_lcd_limit_intensity(int limit);
|
||||
#endif
|
||||
|
@ -185,7 +185,5 @@
|
||||
/*
|
||||
* Shared data structures
|
||||
*/
|
||||
extern struct platform_device spitzscoop_device;
|
||||
extern struct platform_device spitzscoop2_device;
|
||||
extern struct platform_device spitzssp_device;
|
||||
extern struct sharpsl_charger_machinfo spitz_pm_machinfo;
|
||||
|
@ -34,7 +34,7 @@
|
||||
#include <linux/irq.h>
|
||||
#include <linux/pda_power.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/wm97xx_batt.h>
|
||||
#include <linux/wm97xx.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
#include <linux/regulator/max1586.h>
|
||||
@ -636,7 +636,7 @@ static struct platform_device power_dev = {
|
||||
},
|
||||
};
|
||||
|
||||
static struct wm97xx_batt_info mioa701_battery_data = {
|
||||
static struct wm97xx_batt_pdata mioa701_battery_data = {
|
||||
.batt_aux = WM97XX_AUX_ID1,
|
||||
.temp_aux = -1,
|
||||
.charge_gpio = -1,
|
||||
@ -648,6 +648,10 @@ static struct wm97xx_batt_info mioa701_battery_data = {
|
||||
.batt_name = "mioa701_battery",
|
||||
};
|
||||
|
||||
static struct wm97xx_pdata mioa701_wm97xx_pdata = {
|
||||
.batt_pdata = &mioa701_battery_data,
|
||||
};
|
||||
|
||||
/*
|
||||
* Voltage regulation
|
||||
*/
|
||||
@ -716,6 +720,7 @@ struct i2c_pxa_platform_data i2c_pdata = {
|
||||
|
||||
static pxa2xx_audio_ops_t mioa701_ac97_info = {
|
||||
.reset_gpio = 95,
|
||||
.codec_pdata = { &mioa701_wm97xx_pdata, },
|
||||
};
|
||||
|
||||
/*
|
||||
@ -794,7 +799,6 @@ static void __init mioa701_machine_init(void)
|
||||
set_pxa_fb_info(&mioa701_pxafb_info);
|
||||
pxa_set_mci_info(&mioa701_mci_info);
|
||||
pxa_set_keypad_info(&mioa701_keypad_info);
|
||||
wm97xx_bat_set_pdata(&mioa701_battery_data);
|
||||
pxa_set_udc_info(&mioa701_udc_info);
|
||||
pxa_set_ac97_info(&mioa701_ac97_info);
|
||||
pm_power_off = mioa701_poweroff;
|
||||
|
477
arch/arm/mach-pxa/palm27x.c
Normal file
477
arch/arm/mach-pxa/palm27x.c
Normal file
@ -0,0 +1,477 @@
|
||||
/*
|
||||
* Common code for Palm LD, T5, TX, Z72
|
||||
*
|
||||
* Copyright (C) 2010
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#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.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
#include <linux/regulator/max1586.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/pxa27x.h>
|
||||
#include <mach/audio.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/irda.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/palmasoc.h>
|
||||
#include <mach/palm27x.h>
|
||||
|
||||
#include <plat/i2c.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MMC_PXA) || defined(CONFIG_MMC_PXA_MODULE)
|
||||
static struct pxamci_platform_data palm27x_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.detect_delay_ms = 200,
|
||||
};
|
||||
|
||||
void __init palm27x_mmc_init(int detect, int ro, int power,
|
||||
int power_inverted)
|
||||
{
|
||||
palm27x_mci_platform_data.gpio_card_detect = detect;
|
||||
palm27x_mci_platform_data.gpio_card_ro = ro;
|
||||
palm27x_mci_platform_data.gpio_power = power;
|
||||
palm27x_mci_platform_data.gpio_power_invert = power_inverted;
|
||||
|
||||
pxa_set_mci_info(&palm27x_mci_platform_data);
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Power management - standby
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_SUSPEND)
|
||||
void __init palm27x_pm_init(unsigned long str_base)
|
||||
{
|
||||
static const unsigned long resume[] = {
|
||||
0xe3a00101, /* mov r0, #0x40000000 */
|
||||
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||
};
|
||||
|
||||
/*
|
||||
* Copy the bootloader.
|
||||
* NOTE: PalmZ72 uses a different wakeup method!
|
||||
*/
|
||||
memcpy(phys_to_virt(str_base), resume, sizeof(resume));
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
|
||||
struct pxafb_mode_info palm_320x480_lcd_mode = {
|
||||
.pixclock = 57692,
|
||||
.xres = 320,
|
||||
.yres = 480,
|
||||
.bpp = 16,
|
||||
|
||||
.left_margin = 32,
|
||||
.right_margin = 1,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 1,
|
||||
|
||||
.hsync_len = 4,
|
||||
.vsync_len = 1,
|
||||
};
|
||||
|
||||
struct pxafb_mode_info palm_320x320_lcd_mode = {
|
||||
.pixclock = 115384,
|
||||
.xres = 320,
|
||||
.yres = 320,
|
||||
.bpp = 16,
|
||||
|
||||
.left_margin = 27,
|
||||
.right_margin = 7,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 8,
|
||||
|
||||
.hsync_len = 6,
|
||||
.vsync_len = 1,
|
||||
};
|
||||
|
||||
struct pxafb_mode_info palm_320x320_new_lcd_mode = {
|
||||
.pixclock = 86538,
|
||||
.xres = 320,
|
||||
.yres = 320,
|
||||
.bpp = 16,
|
||||
|
||||
.left_margin = 20,
|
||||
.right_margin = 8,
|
||||
.upper_margin = 8,
|
||||
.lower_margin = 5,
|
||||
|
||||
.hsync_len = 4,
|
||||
.vsync_len = 1,
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info palm27x_lcd_screen = {
|
||||
.num_modes = 1,
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
|
||||
static int palm27x_lcd_power;
|
||||
static void palm27x_lcd_ctl(int on, struct fb_var_screeninfo *info)
|
||||
{
|
||||
gpio_set_value(palm27x_lcd_power, on);
|
||||
}
|
||||
|
||||
void __init palm27x_lcd_init(int power, struct pxafb_mode_info *mode)
|
||||
{
|
||||
palm27x_lcd_screen.modes = mode;
|
||||
|
||||
if (gpio_is_valid(power)) {
|
||||
if (!gpio_request(power, "LCD power")) {
|
||||
pr_err("Palm27x: failed to claim lcd power gpio!\n");
|
||||
return;
|
||||
}
|
||||
if (!gpio_direction_output(power, 1)) {
|
||||
pr_err("Palm27x: lcd power configuration failed!\n");
|
||||
return;
|
||||
}
|
||||
palm27x_lcd_power = power;
|
||||
palm27x_lcd_screen.pxafb_lcd_power = palm27x_lcd_ctl;
|
||||
}
|
||||
|
||||
set_pxa_fb_info(&palm27x_lcd_screen);
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* USB Gadget
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_USB_GADGET_PXA27X) || \
|
||||
defined(CONFIG_USB_GADGET_PXA27X_MODULE)
|
||||
static struct gpio_vbus_mach_info palm27x_udc_info = {
|
||||
.gpio_vbus_inverted = 1,
|
||||
};
|
||||
|
||||
static struct platform_device palm27x_gpio_vbus = {
|
||||
.name = "gpio-vbus",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palm27x_udc_info,
|
||||
},
|
||||
};
|
||||
|
||||
void __init palm27x_udc_init(int vbus, int pullup, int vbus_inverted)
|
||||
{
|
||||
palm27x_udc_info.gpio_vbus = vbus;
|
||||
palm27x_udc_info.gpio_pullup = pullup;
|
||||
|
||||
palm27x_udc_info.gpio_vbus_inverted = vbus_inverted;
|
||||
|
||||
if (!gpio_request(pullup, "USB Pullup")) {
|
||||
gpio_direction_output(pullup,
|
||||
palm27x_udc_info.gpio_vbus_inverted);
|
||||
gpio_free(pullup);
|
||||
} else
|
||||
return;
|
||||
|
||||
platform_device_register(&palm27x_gpio_vbus);
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* IrDA
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_IRDA) || defined(CONFIG_IRDA_MODULE)
|
||||
static struct pxaficp_platform_data palm27x_ficp_platform_data = {
|
||||
.transceiver_cap = IR_SIRMODE | IR_OFF,
|
||||
};
|
||||
|
||||
void __init palm27x_irda_init(int pwdn)
|
||||
{
|
||||
palm27x_ficp_platform_data.gpio_pwdown = pwdn;
|
||||
pxa_set_ficp_info(&palm27x_ficp_platform_data);
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* WM97xx audio, battery
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_TOUCHSCREEN_WM97XX) || \
|
||||
defined(CONFIG_TOUCHSCREEN_WM97XX_MODULE)
|
||||
static struct wm97xx_batt_pdata palm27x_batt_pdata = {
|
||||
.batt_aux = WM97XX_AUX_ID3,
|
||||
.temp_aux = WM97XX_AUX_ID2,
|
||||
.charge_gpio = -1,
|
||||
.batt_mult = 1000,
|
||||
.batt_div = 414,
|
||||
.temp_mult = 1,
|
||||
.temp_div = 1,
|
||||
.batt_tech = POWER_SUPPLY_TECHNOLOGY_LIPO,
|
||||
.batt_name = "main-batt",
|
||||
};
|
||||
|
||||
static struct wm97xx_pdata palm27x_wm97xx_pdata = {
|
||||
.batt_pdata = &palm27x_batt_pdata,
|
||||
};
|
||||
|
||||
static pxa2xx_audio_ops_t palm27x_ac97_pdata = {
|
||||
.codec_pdata = { &palm27x_wm97xx_pdata, },
|
||||
};
|
||||
|
||||
static struct palm27x_asoc_info palm27x_asoc_pdata = {
|
||||
.jack_gpio = -1,
|
||||
};
|
||||
|
||||
static struct platform_device palm27x_asoc = {
|
||||
.name = "palm27x-asoc",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palm27x_asoc_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
void __init palm27x_ac97_init(int minv, int maxv, int jack, int reset)
|
||||
{
|
||||
palm27x_ac97_pdata.reset_gpio = reset;
|
||||
palm27x_asoc_pdata.jack_gpio = jack;
|
||||
|
||||
if (minv < 0 || maxv < 0) {
|
||||
palm27x_ac97_pdata.codec_pdata[0] = NULL;
|
||||
pxa_set_ac97_info(&palm27x_ac97_pdata);
|
||||
} else {
|
||||
palm27x_batt_pdata.min_voltage = minv,
|
||||
palm27x_batt_pdata.max_voltage = maxv,
|
||||
|
||||
pxa_set_ac97_info(&palm27x_ac97_pdata);
|
||||
platform_device_register(&palm27x_asoc);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Backlight
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE)
|
||||
static int palm_bl_power;
|
||||
static int palm_lcd_power;
|
||||
|
||||
static int palm27x_backlight_init(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(palm_bl_power, "BL POWER");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = gpio_direction_output(palm_bl_power, 0);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
if (gpio_is_valid(palm_lcd_power)) {
|
||||
ret = gpio_request(palm_lcd_power, "LCD POWER");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_output(palm_lcd_power, 0);
|
||||
if (ret)
|
||||
goto err3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err3:
|
||||
gpio_free(palm_lcd_power);
|
||||
err2:
|
||||
gpio_free(palm_bl_power);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int palm27x_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(palm_bl_power, brightness);
|
||||
if (gpio_is_valid(palm_lcd_power))
|
||||
gpio_set_value(palm_lcd_power, brightness);
|
||||
return brightness;
|
||||
}
|
||||
|
||||
static void palm27x_backlight_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(palm_bl_power);
|
||||
if (gpio_is_valid(palm_lcd_power))
|
||||
gpio_free(palm_lcd_power);
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data palm27x_backlight_data = {
|
||||
.pwm_id = 0,
|
||||
.max_brightness = 0xfe,
|
||||
.dft_brightness = 0x7e,
|
||||
.pwm_period_ns = 3500,
|
||||
.init = palm27x_backlight_init,
|
||||
.notify = palm27x_backlight_notify,
|
||||
.exit = palm27x_backlight_exit,
|
||||
};
|
||||
|
||||
static struct platform_device palm27x_backlight = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &pxa27x_device_pwm0.dev,
|
||||
.platform_data = &palm27x_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
void __init palm27x_pwm_init(int bl, int lcd)
|
||||
{
|
||||
palm_bl_power = bl;
|
||||
palm_lcd_power = lcd;
|
||||
platform_device_register(&palm27x_backlight);
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Power supply
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_PDA_POWER) || defined(CONFIG_PDA_POWER_MODULE)
|
||||
static int palm_ac_state;
|
||||
static int palm_usb_state;
|
||||
|
||||
static int palm27x_power_supply_init(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(palm_ac_state, "AC state");
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = gpio_direction_input(palm_ac_state);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
if (gpio_is_valid(palm_usb_state)) {
|
||||
ret = gpio_request(palm_usb_state, "USB state");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_input(palm_usb_state);
|
||||
if (ret)
|
||||
goto err3;
|
||||
}
|
||||
|
||||
return 0;
|
||||
err3:
|
||||
gpio_free(palm_usb_state);
|
||||
err2:
|
||||
gpio_free(palm_ac_state);
|
||||
err1:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void palm27x_power_supply_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(palm_usb_state);
|
||||
gpio_free(palm_ac_state);
|
||||
}
|
||||
|
||||
static int palm27x_is_ac_online(void)
|
||||
{
|
||||
return gpio_get_value(palm_ac_state);
|
||||
}
|
||||
|
||||
static int palm27x_is_usb_online(void)
|
||||
{
|
||||
return !gpio_get_value(palm_usb_state);
|
||||
}
|
||||
static char *palm27x_supplicants[] = {
|
||||
"main-battery",
|
||||
};
|
||||
|
||||
static struct pda_power_pdata palm27x_ps_info = {
|
||||
.init = palm27x_power_supply_init,
|
||||
.exit = palm27x_power_supply_exit,
|
||||
.is_ac_online = palm27x_is_ac_online,
|
||||
.is_usb_online = palm27x_is_usb_online,
|
||||
.supplied_to = palm27x_supplicants,
|
||||
.num_supplicants = ARRAY_SIZE(palm27x_supplicants),
|
||||
};
|
||||
|
||||
static struct platform_device palm27x_power_supply = {
|
||||
.name = "pda-power",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palm27x_ps_info,
|
||||
},
|
||||
};
|
||||
|
||||
void __init palm27x_power_init(int ac, int usb)
|
||||
{
|
||||
palm_ac_state = ac;
|
||||
palm_usb_state = usb;
|
||||
platform_device_register(&palm27x_power_supply);
|
||||
}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Core power regulator
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_REGULATOR_MAX1586) || \
|
||||
defined(CONFIG_REGULATOR_MAX1586_MODULE)
|
||||
static struct regulator_consumer_supply palm27x_max1587a_consumers[] = {
|
||||
{
|
||||
.supply = "vcc_core",
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data palm27x_max1587a_v3_info = {
|
||||
.constraints = {
|
||||
.name = "vcc_core range",
|
||||
.min_uV = 900000,
|
||||
.max_uV = 1705000,
|
||||
.always_on = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.consumer_supplies = palm27x_max1587a_consumers,
|
||||
.num_consumer_supplies = ARRAY_SIZE(palm27x_max1587a_consumers),
|
||||
};
|
||||
|
||||
static struct max1586_subdev_data palm27x_max1587a_subdevs[] = {
|
||||
{
|
||||
.name = "vcc_core",
|
||||
.id = MAX1586_V3,
|
||||
.platform_data = &palm27x_max1587a_v3_info,
|
||||
}
|
||||
};
|
||||
|
||||
static struct max1586_platform_data palm27x_max1587a_info = {
|
||||
.subdevs = palm27x_max1587a_subdevs,
|
||||
.num_subdevs = ARRAY_SIZE(palm27x_max1587a_subdevs),
|
||||
.v3_gain = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata palm27x_pi2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("max1586", 0x14),
|
||||
.platform_data = &palm27x_max1587a_info,
|
||||
},
|
||||
};
|
||||
|
||||
void __init palm27x_pmic_init(void)
|
||||
{
|
||||
i2c_register_board_info(1, ARRAY_AND_SIZE(palm27x_pi2c_board_info));
|
||||
pxa27x_set_i2c_power_info(NULL);
|
||||
}
|
||||
#endif
|
@ -22,7 +22,7 @@
|
||||
#include <linux/pda_power.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/wm97xx_batt.h>
|
||||
#include <linux/wm97xx.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/sysdev.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
@ -41,6 +41,7 @@
|
||||
#include <mach/irda.h>
|
||||
#include <mach/pxa27x_keypad.h>
|
||||
#include <mach/palmasoc.h>
|
||||
#include <mach/palm27x.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
@ -127,6 +128,7 @@ static unsigned long palmld_pin_config[] __initdata = {
|
||||
/******************************************************************************
|
||||
* NOR Flash
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
static struct mtd_partition palmld_partitions[] = {
|
||||
{
|
||||
.name = "Flash",
|
||||
@ -160,20 +162,18 @@ static struct platform_device palmld_flash = {
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
static struct pxamci_platform_data palmld_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = GPIO_NR_PALMLD_SD_DETECT_N,
|
||||
.gpio_card_ro = GPIO_NR_PALMLD_SD_READONLY,
|
||||
.gpio_power = GPIO_NR_PALMLD_SD_POWER,
|
||||
.detect_delay_ms = 200,
|
||||
};
|
||||
static void __init palmld_nor_init(void)
|
||||
{
|
||||
platform_device_register(&palmld_flash);
|
||||
}
|
||||
#else
|
||||
static inline void palmld_nor_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keyboard
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||
static unsigned int palmld_matrix_keys[] = {
|
||||
KEY(0, 1, KEY_F2),
|
||||
KEY(0, 2, KEY_UP),
|
||||
@ -200,9 +200,18 @@ static struct pxa27x_keypad_platform_data palmld_keypad_platform_data = {
|
||||
.debounce_interval = 30,
|
||||
};
|
||||
|
||||
static void __init palmld_kpc_init(void)
|
||||
{
|
||||
pxa_set_keypad_info(&palmld_keypad_platform_data);
|
||||
}
|
||||
#else
|
||||
static inline void palmld_kpc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keys
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
static struct gpio_keys_button palmld_pxa_buttons[] = {
|
||||
{KEY_F8, GPIO_NR_PALMLD_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
||||
{KEY_F9, GPIO_NR_PALMLD_LOCK_SWITCH, 0, "Lock Switch" },
|
||||
@ -222,77 +231,18 @@ static struct platform_device palmld_pxa_keys = {
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Backlight
|
||||
******************************************************************************/
|
||||
static int palmld_backlight_init(struct device *dev)
|
||||
static void __init palmld_keys_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMLD_BL_POWER, "BL POWER");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMLD_BL_POWER, 0);
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_request(GPIO_NR_PALMLD_LCD_POWER, "LCD POWER");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMLD_LCD_POWER, 0);
|
||||
if (ret)
|
||||
goto err3;
|
||||
|
||||
return 0;
|
||||
err3:
|
||||
gpio_free(GPIO_NR_PALMLD_LCD_POWER);
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMLD_BL_POWER);
|
||||
err:
|
||||
return ret;
|
||||
platform_device_register(&palmld_pxa_keys);
|
||||
}
|
||||
|
||||
static int palmld_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMLD_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMLD_LCD_POWER, brightness);
|
||||
return brightness;
|
||||
}
|
||||
|
||||
static void palmld_backlight_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMLD_BL_POWER);
|
||||
gpio_free(GPIO_NR_PALMLD_LCD_POWER);
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data palmld_backlight_data = {
|
||||
.pwm_id = 0,
|
||||
.max_brightness = PALMLD_MAX_INTENSITY,
|
||||
.dft_brightness = PALMLD_MAX_INTENSITY,
|
||||
.pwm_period_ns = PALMLD_PERIOD_NS,
|
||||
.init = palmld_backlight_init,
|
||||
.notify = palmld_backlight_notify,
|
||||
.exit = palmld_backlight_exit,
|
||||
};
|
||||
|
||||
static struct platform_device palmld_backlight = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &pxa27x_device_pwm0.dev,
|
||||
.platform_data = &palmld_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* IrDA
|
||||
******************************************************************************/
|
||||
static struct pxaficp_platform_data palmld_ficp_platform_data = {
|
||||
.gpio_pwdown = GPIO_NR_PALMLD_IR_DISABLE,
|
||||
.transceiver_cap = IR_SIRMODE | IR_OFF,
|
||||
};
|
||||
#else
|
||||
static inline void palmld_keys_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* LEDs
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||
struct gpio_led gpio_leds[] = {
|
||||
{
|
||||
.name = "palmld:green:led",
|
||||
@ -318,174 +268,34 @@ static struct platform_device palmld_leds = {
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power supply
|
||||
******************************************************************************/
|
||||
static int power_supply_init(struct device *dev)
|
||||
static void __init palmld_leds_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMLD_POWER_DETECT, "CABLE_STATE_AC");
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = gpio_direction_input(GPIO_NR_PALMLD_POWER_DETECT);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMLD_USB_DETECT_N, "CABLE_STATE_USB");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_input(GPIO_NR_PALMLD_USB_DETECT_N);
|
||||
if (ret)
|
||||
goto err3;
|
||||
|
||||
return 0;
|
||||
|
||||
err3:
|
||||
gpio_free(GPIO_NR_PALMLD_USB_DETECT_N);
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMLD_POWER_DETECT);
|
||||
err1:
|
||||
return ret;
|
||||
platform_device_register(&palmld_leds);
|
||||
}
|
||||
|
||||
static int palmld_is_ac_online(void)
|
||||
{
|
||||
return gpio_get_value(GPIO_NR_PALMLD_POWER_DETECT);
|
||||
}
|
||||
|
||||
static int palmld_is_usb_online(void)
|
||||
{
|
||||
return !gpio_get_value(GPIO_NR_PALMLD_USB_DETECT_N);
|
||||
}
|
||||
|
||||
static void power_supply_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMLD_USB_DETECT_N);
|
||||
gpio_free(GPIO_NR_PALMLD_POWER_DETECT);
|
||||
}
|
||||
|
||||
static char *palmld_supplicants[] = {
|
||||
"main-battery",
|
||||
};
|
||||
|
||||
static struct pda_power_pdata power_supply_info = {
|
||||
.init = power_supply_init,
|
||||
.is_ac_online = palmld_is_ac_online,
|
||||
.is_usb_online = palmld_is_usb_online,
|
||||
.exit = power_supply_exit,
|
||||
.supplied_to = palmld_supplicants,
|
||||
.num_supplicants = ARRAY_SIZE(palmld_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 = PALMLD_BAT_MAX_VOLTAGE,
|
||||
.min_voltage = PALMLD_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",
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* aSoC audio
|
||||
******************************************************************************/
|
||||
static struct palm27x_asoc_info palmld_asoc_pdata = {
|
||||
.jack_gpio = GPIO_NR_PALMLD_EARPHONE_DETECT,
|
||||
};
|
||||
|
||||
static pxa2xx_audio_ops_t palmld_ac97_pdata = {
|
||||
.reset_gpio = 95,
|
||||
};
|
||||
|
||||
static struct platform_device palmld_asoc = {
|
||||
.name = "palm27x-asoc",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palmld_asoc_pdata,
|
||||
},
|
||||
};
|
||||
#else
|
||||
static inline void palmld_leds_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* HDD
|
||||
******************************************************************************/
|
||||
static struct platform_device palmld_hdd = {
|
||||
#if defined(CONFIG_PATA_PALMLD) || defined(CONFIG_PATA_PALMLD_MODULE)
|
||||
static struct platform_device palmld_ide_device = {
|
||||
.name = "pata_palmld",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
static struct pxafb_mode_info palmld_lcd_modes[] = {
|
||||
static void __init palmld_ide_init(void)
|
||||
{
|
||||
.pixclock = 57692,
|
||||
.xres = 320,
|
||||
.yres = 480,
|
||||
.bpp = 16,
|
||||
|
||||
.left_margin = 32,
|
||||
.right_margin = 1,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 1,
|
||||
|
||||
.hsync_len = 4,
|
||||
.vsync_len = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info palmld_lcd_screen = {
|
||||
.modes = palmld_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(palmld_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power management - standby
|
||||
******************************************************************************/
|
||||
static void __init palmld_pm_init(void)
|
||||
{
|
||||
static u32 resume[] = {
|
||||
0xe3a00101, /* mov r0, #0x40000000 */
|
||||
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||
};
|
||||
|
||||
/* copy the bootloader */
|
||||
memcpy(phys_to_virt(PALMLD_STR_BASE), resume, sizeof(resume));
|
||||
platform_device_register(&palmld_ide_device);
|
||||
}
|
||||
#else
|
||||
static inline void palmld_ide_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
&palmld_pxa_keys,
|
||||
#endif
|
||||
&palmld_backlight,
|
||||
&palmld_leds,
|
||||
&power_supply,
|
||||
&palmld_asoc,
|
||||
&palmld_hdd,
|
||||
&palmld_flash,
|
||||
};
|
||||
|
||||
static struct map_desc palmld_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = PALMLD_IDE_VIRT,
|
||||
@ -510,20 +320,26 @@ static void __init palmld_map_io(void)
|
||||
static void __init palmld_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmld_pin_config));
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
palmld_pm_init();
|
||||
set_pxa_fb_info(&palmld_lcd_screen);
|
||||
pxa_set_mci_info(&palmld_mci_platform_data);
|
||||
pxa_set_ac97_info(&palmld_ac97_pdata);
|
||||
pxa_set_ficp_info(&palmld_ficp_platform_data);
|
||||
pxa_set_keypad_info(&palmld_keypad_platform_data);
|
||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
palm27x_mmc_init(GPIO_NR_PALMLD_SD_DETECT_N, GPIO_NR_PALMLD_SD_READONLY,
|
||||
GPIO_NR_PALMLD_SD_POWER, 0);
|
||||
palm27x_pm_init(PALMLD_STR_BASE);
|
||||
palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
|
||||
palm27x_irda_init(GPIO_NR_PALMLD_IR_DISABLE);
|
||||
palm27x_ac97_init(PALMLD_BAT_MIN_VOLTAGE, PALMLD_BAT_MAX_VOLTAGE,
|
||||
GPIO_NR_PALMLD_EARPHONE_DETECT, 95);
|
||||
palm27x_pwm_init(GPIO_NR_PALMLD_BL_POWER, GPIO_NR_PALMLD_LCD_POWER);
|
||||
palm27x_power_init(GPIO_NR_PALMLD_POWER_DETECT,
|
||||
GPIO_NR_PALMLD_USB_DETECT_N);
|
||||
palm27x_pmic_init();
|
||||
palmld_kpc_init();
|
||||
palmld_keys_init();
|
||||
palmld_nor_init();
|
||||
palmld_leds_init();
|
||||
palmld_ide_init();
|
||||
}
|
||||
|
||||
MACHINE_START(PALMLD, "Palm LifeDrive")
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <linux/pda_power.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/wm97xx_batt.h>
|
||||
#include <linux/wm97xx.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
|
||||
@ -42,6 +42,7 @@
|
||||
#include <mach/pxa27x_keypad.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/palmasoc.h>
|
||||
#include <mach/palm27x.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
@ -103,20 +104,10 @@ static unsigned long palmt5_pin_config[] __initdata = {
|
||||
GPIO107_GPIO, /* earphone detect */
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
static struct pxamci_platform_data palmt5_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = GPIO_NR_PALMT5_SD_DETECT_N,
|
||||
.gpio_card_ro = GPIO_NR_PALMT5_SD_READONLY,
|
||||
.gpio_power = GPIO_NR_PALMT5_SD_POWER,
|
||||
.detect_delay_ms = 200,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keyboard
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||
static unsigned int palmt5_matrix_keys[] = {
|
||||
KEY(0, 0, KEY_POWER),
|
||||
KEY(0, 1, KEY_F1),
|
||||
@ -142,9 +133,18 @@ static struct pxa27x_keypad_platform_data palmt5_keypad_platform_data = {
|
||||
.debounce_interval = 30,
|
||||
};
|
||||
|
||||
static void __init palmt5_kpc_init(void)
|
||||
{
|
||||
pxa_set_keypad_info(&palmt5_keypad_platform_data);
|
||||
}
|
||||
#else
|
||||
static inline void palmt5_kpc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keys
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
static struct gpio_keys_button palmt5_pxa_buttons[] = {
|
||||
{KEY_F8, GPIO_NR_PALMT5_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
||||
};
|
||||
@ -162,241 +162,17 @@ static struct platform_device palmt5_pxa_keys = {
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Backlight
|
||||
******************************************************************************/
|
||||
static int palmt5_backlight_init(struct device *dev)
|
||||
static void __init palmt5_keys_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMT5_BL_POWER, "BL POWER");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMT5_BL_POWER, 0);
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_request(GPIO_NR_PALMT5_LCD_POWER, "LCD POWER");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMT5_LCD_POWER, 0);
|
||||
if (ret)
|
||||
goto err3;
|
||||
|
||||
return 0;
|
||||
err3:
|
||||
gpio_free(GPIO_NR_PALMT5_LCD_POWER);
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMT5_BL_POWER);
|
||||
err:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int palmt5_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMT5_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMT5_LCD_POWER, brightness);
|
||||
return brightness;
|
||||
}
|
||||
|
||||
static void palmt5_backlight_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMT5_BL_POWER);
|
||||
gpio_free(GPIO_NR_PALMT5_LCD_POWER);
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data palmt5_backlight_data = {
|
||||
.pwm_id = 0,
|
||||
.max_brightness = PALMT5_MAX_INTENSITY,
|
||||
.dft_brightness = PALMT5_MAX_INTENSITY,
|
||||
.pwm_period_ns = PALMT5_PERIOD_NS,
|
||||
.init = palmt5_backlight_init,
|
||||
.notify = palmt5_backlight_notify,
|
||||
.exit = palmt5_backlight_exit,
|
||||
};
|
||||
|
||||
static struct platform_device palmt5_backlight = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &pxa27x_device_pwm0.dev,
|
||||
.platform_data = &palmt5_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* IrDA
|
||||
******************************************************************************/
|
||||
static struct pxaficp_platform_data palmt5_ficp_platform_data = {
|
||||
.gpio_pwdown = GPIO_NR_PALMT5_IR_DISABLE,
|
||||
.transceiver_cap = IR_SIRMODE | IR_OFF,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* UDC
|
||||
******************************************************************************/
|
||||
static struct gpio_vbus_mach_info palmt5_udc_info = {
|
||||
.gpio_vbus = GPIO_NR_PALMT5_USB_DETECT_N,
|
||||
.gpio_vbus_inverted = 1,
|
||||
.gpio_pullup = GPIO_NR_PALMT5_USB_PULLUP,
|
||||
};
|
||||
|
||||
static struct platform_device palmt5_gpio_vbus = {
|
||||
.name = "gpio-vbus",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palmt5_udc_info,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power supply
|
||||
******************************************************************************/
|
||||
static int power_supply_init(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMT5_POWER_DETECT, "CABLE_STATE_AC");
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = gpio_direction_input(GPIO_NR_PALMT5_POWER_DETECT);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
return 0;
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMT5_POWER_DETECT);
|
||||
err1:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int palmt5_is_ac_online(void)
|
||||
{
|
||||
return gpio_get_value(GPIO_NR_PALMT5_POWER_DETECT);
|
||||
}
|
||||
|
||||
static void power_supply_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMT5_POWER_DETECT);
|
||||
}
|
||||
|
||||
static char *palmt5_supplicants[] = {
|
||||
"main-battery",
|
||||
};
|
||||
|
||||
static struct pda_power_pdata power_supply_info = {
|
||||
.init = power_supply_init,
|
||||
.is_ac_online = palmt5_is_ac_online,
|
||||
.exit = power_supply_exit,
|
||||
.supplied_to = palmt5_supplicants,
|
||||
.num_supplicants = ARRAY_SIZE(palmt5_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 = PALMT5_BAT_MAX_VOLTAGE,
|
||||
.min_voltage = PALMT5_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",
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* aSoC audio
|
||||
******************************************************************************/
|
||||
static struct palm27x_asoc_info palmt5_asoc_pdata = {
|
||||
.jack_gpio = GPIO_NR_PALMT5_EARPHONE_DETECT,
|
||||
};
|
||||
|
||||
static pxa2xx_audio_ops_t palmt5_ac97_pdata = {
|
||||
.reset_gpio = 95,
|
||||
};
|
||||
|
||||
static struct platform_device palmt5_asoc = {
|
||||
.name = "palm27x-asoc",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palmt5_asoc_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
static struct pxafb_mode_info palmt5_lcd_modes[] = {
|
||||
{
|
||||
.pixclock = 57692,
|
||||
.xres = 320,
|
||||
.yres = 480,
|
||||
.bpp = 16,
|
||||
|
||||
.left_margin = 32,
|
||||
.right_margin = 1,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 1,
|
||||
|
||||
.hsync_len = 4,
|
||||
.vsync_len = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info palmt5_lcd_screen = {
|
||||
.modes = palmt5_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(palmt5_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power management - standby
|
||||
******************************************************************************/
|
||||
static void __init palmt5_pm_init(void)
|
||||
{
|
||||
static u32 resume[] = {
|
||||
0xe3a00101, /* mov r0, #0x40000000 */
|
||||
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||
};
|
||||
|
||||
/* copy the bootloader */
|
||||
memcpy(phys_to_virt(PALMT5_STR_BASE), resume, sizeof(resume));
|
||||
platform_device_register(&palmt5_pxa_keys);
|
||||
}
|
||||
#else
|
||||
static inline void palmt5_keys_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
&palmt5_pxa_keys,
|
||||
#endif
|
||||
&palmt5_backlight,
|
||||
&power_supply,
|
||||
&palmt5_asoc,
|
||||
&palmt5_gpio_vbus,
|
||||
};
|
||||
|
||||
/* setup udc GPIOs initial state */
|
||||
static void __init palmt5_udc_init(void)
|
||||
{
|
||||
if (!gpio_request(GPIO_NR_PALMT5_USB_PULLUP, "UDC Vbus")) {
|
||||
gpio_direction_output(GPIO_NR_PALMT5_USB_PULLUP, 1);
|
||||
gpio_free(GPIO_NR_PALMT5_USB_PULLUP);
|
||||
}
|
||||
}
|
||||
|
||||
static void __init palmt5_reserve(void)
|
||||
{
|
||||
memblock_reserve(0xa0200000, 0x1000);
|
||||
@ -405,21 +181,24 @@ static void __init palmt5_reserve(void)
|
||||
static void __init palmt5_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
palmt5_pm_init();
|
||||
set_pxa_fb_info(&palmt5_lcd_screen);
|
||||
pxa_set_mci_info(&palmt5_mci_platform_data);
|
||||
palmt5_udc_init();
|
||||
pxa_set_ac97_info(&palmt5_ac97_pdata);
|
||||
pxa_set_ficp_info(&palmt5_ficp_platform_data);
|
||||
pxa_set_keypad_info(&palmt5_keypad_platform_data);
|
||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
palm27x_mmc_init(GPIO_NR_PALMT5_SD_DETECT_N, GPIO_NR_PALMT5_SD_READONLY,
|
||||
GPIO_NR_PALMT5_SD_POWER, 0);
|
||||
palm27x_pm_init(PALMT5_STR_BASE);
|
||||
palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
|
||||
palm27x_udc_init(GPIO_NR_PALMT5_USB_DETECT_N,
|
||||
GPIO_NR_PALMT5_USB_PULLUP, 1);
|
||||
palm27x_irda_init(GPIO_NR_PALMT5_IR_DISABLE);
|
||||
palm27x_ac97_init(PALMT5_BAT_MIN_VOLTAGE, PALMT5_BAT_MAX_VOLTAGE,
|
||||
GPIO_NR_PALMT5_EARPHONE_DETECT, 95);
|
||||
palm27x_pwm_init(GPIO_NR_PALMT5_BL_POWER, GPIO_NR_PALMT5_LCD_POWER);
|
||||
palm27x_power_init(GPIO_NR_PALMT5_POWER_DETECT, -1);
|
||||
palm27x_pmic_init();
|
||||
palmt5_kpc_init();
|
||||
palmt5_keys_init();
|
||||
}
|
||||
|
||||
MACHINE_START(PALMT5, "Palm Tungsten|T5")
|
||||
|
@ -23,7 +23,7 @@
|
||||
#include <linux/pda_power.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/wm97xx_batt.h>
|
||||
#include <linux/wm97xx.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
|
||||
@ -271,9 +271,9 @@ static struct platform_device power_supply = {
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* WM97xx battery
|
||||
* WM97xx audio, battery
|
||||
******************************************************************************/
|
||||
static struct wm97xx_batt_info wm97xx_batt_pdata = {
|
||||
static struct wm97xx_batt_pdata palmte2_batt_pdata = {
|
||||
.batt_aux = WM97XX_AUX_ID3,
|
||||
.temp_aux = WM97XX_AUX_ID2,
|
||||
.charge_gpio = -1,
|
||||
@ -287,9 +287,14 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
|
||||
.batt_name = "main-batt",
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* aSoC audio
|
||||
******************************************************************************/
|
||||
static struct wm97xx_pdata palmte2_wm97xx_pdata = {
|
||||
.batt_pdata = &palmte2_batt_pdata,
|
||||
};
|
||||
|
||||
static pxa2xx_audio_ops_t palmte2_ac97_pdata = {
|
||||
.codec_pdata = { &palmte2_wm97xx_pdata, },
|
||||
};
|
||||
|
||||
static struct palm27x_asoc_info palmte2_asoc_pdata = {
|
||||
.jack_gpio = GPIO_NR_PALMTE2_EARPHONE_DETECT,
|
||||
};
|
||||
@ -361,9 +366,8 @@ static void __init palmte2_init(void)
|
||||
set_pxa_fb_info(&palmte2_lcd_screen);
|
||||
pxa_set_mci_info(&palmte2_mci_platform_data);
|
||||
palmte2_udc_init();
|
||||
pxa_set_ac97_info(NULL);
|
||||
pxa_set_ac97_info(&palmte2_ac97_pdata);
|
||||
pxa_set_ficp_info(&palmte2_ficp_platform_data);
|
||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
@ -24,7 +24,6 @@
|
||||
#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 <linux/sysdev.h>
|
||||
#include <linux/w1-gpio.h>
|
||||
@ -46,6 +45,7 @@
|
||||
#include <mach/pxa2xx-regs.h>
|
||||
#include <mach/palmasoc.h>
|
||||
#include <mach/camera.h>
|
||||
#include <mach/palm27x.h>
|
||||
|
||||
#include <sound/pxa2xx-lib.h>
|
||||
|
||||
@ -159,32 +159,10 @@ static unsigned long centro685_pin_config[] __initdata = {
|
||||
};
|
||||
#endif /* CONFIG_MACH_CENTRO */
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
#ifdef CONFIG_MACH_TREO680
|
||||
static struct pxamci_platform_data treo680_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = GPIO_NR_TREO_SD_DETECT_N,
|
||||
.gpio_card_ro = GPIO_NR_TREO680_SD_READONLY,
|
||||
.gpio_power = GPIO_NR_TREO680_SD_POWER,
|
||||
};
|
||||
#endif /* CONFIG_MACH_TREO680 */
|
||||
|
||||
#ifdef CONFIG_MACH_CENTRO
|
||||
static struct pxamci_platform_data centro_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = GPIO_NR_TREO_SD_DETECT_N,
|
||||
.gpio_card_ro = -1,
|
||||
.gpio_power = GPIO_NR_CENTRO_SD_POWER,
|
||||
.gpio_power_invert = 1,
|
||||
};
|
||||
#endif /* CONFIG_MACH_CENTRO */
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keyboard
|
||||
******************************************************************************/
|
||||
#ifdef CONFIG_MACH_TREO680
|
||||
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||
static unsigned int treo680_matrix_keys[] = {
|
||||
KEY(0, 0, KEY_F8), /* Red/Off/Power */
|
||||
KEY(0, 1, KEY_LEFT),
|
||||
@ -244,19 +222,6 @@ static unsigned int treo680_matrix_keys[] = {
|
||||
KEY(7, 5, KEY_I),
|
||||
};
|
||||
|
||||
static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = {
|
||||
.matrix_key_rows = 8,
|
||||
.matrix_key_cols = 7,
|
||||
.matrix_key_map = treo680_matrix_keys,
|
||||
.matrix_key_map_size = ARRAY_SIZE(treo680_matrix_keys),
|
||||
.direct_key_map = { KEY_CONNECT },
|
||||
.direct_key_num = 1,
|
||||
|
||||
.debounce_interval = 30,
|
||||
};
|
||||
#endif /* CONFIG_MACH_TREO680 */
|
||||
|
||||
#ifdef CONFIG_MACH_CENTRO
|
||||
static unsigned int centro_matrix_keys[] = {
|
||||
KEY(0, 0, KEY_F9), /* Home */
|
||||
KEY(0, 1, KEY_LEFT),
|
||||
@ -316,157 +281,50 @@ static unsigned int centro_matrix_keys[] = {
|
||||
KEY(7, 5, KEY_I),
|
||||
};
|
||||
|
||||
static struct pxa27x_keypad_platform_data centro_keypad_platform_data = {
|
||||
static struct pxa27x_keypad_platform_data treo680_keypad_pdata = {
|
||||
.matrix_key_rows = 8,
|
||||
.matrix_key_cols = 7,
|
||||
.matrix_key_map = centro_matrix_keys,
|
||||
.matrix_key_map_size = ARRAY_SIZE(centro_matrix_keys),
|
||||
.matrix_key_map = treo680_matrix_keys,
|
||||
.matrix_key_map_size = ARRAY_SIZE(treo680_matrix_keys),
|
||||
.direct_key_map = { KEY_CONNECT },
|
||||
.direct_key_num = 1,
|
||||
|
||||
.debounce_interval = 30,
|
||||
};
|
||||
#endif /* CONFIG_MACH_CENTRO */
|
||||
|
||||
/******************************************************************************
|
||||
* aSoC audio
|
||||
******************************************************************************/
|
||||
|
||||
static pxa2xx_audio_ops_t treo_ac97_pdata = {
|
||||
.reset_gpio = 95,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Backlight
|
||||
******************************************************************************/
|
||||
static int treo_backlight_init(struct device *dev)
|
||||
static void __init palmtreo_kpc_init(void)
|
||||
{
|
||||
int ret;
|
||||
static struct pxa27x_keypad_platform_data *data = &treo680_keypad_pdata;
|
||||
|
||||
ret = gpio_request(GPIO_NR_TREO_BL_POWER, "BL POWER");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = gpio_direction_output(GPIO_NR_TREO_BL_POWER, 0);
|
||||
if (ret)
|
||||
goto err2;
|
||||
if (machine_is_centro()) {
|
||||
data->matrix_key_map = centro_matrix_keys;
|
||||
data->matrix_key_map_size = ARRAY_SIZE(centro_matrix_keys);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
gpio_free(GPIO_NR_TREO_BL_POWER);
|
||||
err:
|
||||
return ret;
|
||||
pxa_set_keypad_info(&treo680_keypad_pdata);
|
||||
}
|
||||
|
||||
static int treo_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_TREO_BL_POWER, brightness);
|
||||
return TREO_MAX_INTENSITY - brightness;
|
||||
};
|
||||
|
||||
static void treo_backlight_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_TREO_BL_POWER);
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data treo_backlight_data = {
|
||||
.pwm_id = 0,
|
||||
.max_brightness = TREO_MAX_INTENSITY,
|
||||
.dft_brightness = TREO_DEFAULT_INTENSITY,
|
||||
.pwm_period_ns = TREO_PERIOD_NS,
|
||||
.init = treo_backlight_init,
|
||||
.notify = treo_backlight_notify,
|
||||
.exit = treo_backlight_exit,
|
||||
};
|
||||
|
||||
static struct platform_device treo_backlight = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &pxa27x_device_pwm0.dev,
|
||||
.platform_data = &treo_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* IrDA
|
||||
******************************************************************************/
|
||||
static struct pxaficp_platform_data treo_ficp_info = {
|
||||
.gpio_pwdown = GPIO_NR_TREO_IR_EN,
|
||||
.transceiver_cap = IR_SIRMODE | IR_OFF,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* UDC
|
||||
******************************************************************************/
|
||||
static struct pxa2xx_udc_mach_info treo_udc_info __initdata = {
|
||||
.gpio_vbus = GPIO_NR_TREO_USB_DETECT,
|
||||
.gpio_vbus_inverted = 1,
|
||||
.gpio_pullup = GPIO_NR_TREO_USB_PULLUP,
|
||||
};
|
||||
|
||||
#else
|
||||
static inline void palmtreo_kpc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* USB host
|
||||
******************************************************************************/
|
||||
#ifdef CONFIG_MACH_TREO680
|
||||
#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
|
||||
static struct pxaohci_platform_data treo680_ohci_info = {
|
||||
.port_mode = PMM_PERPORT_MODE,
|
||||
.flags = ENABLE_PORT1 | ENABLE_PORT3,
|
||||
.power_budget = 0,
|
||||
};
|
||||
#endif /* CONFIG_MACH_TREO680 */
|
||||
|
||||
/******************************************************************************
|
||||
* Power supply
|
||||
******************************************************************************/
|
||||
static int power_supply_init(struct device *dev)
|
||||
static void __init palmtreo_uhc_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_TREO_POWER_DETECT, "CABLE_STATE_AC");
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = gpio_direction_input(GPIO_NR_TREO_POWER_DETECT);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
gpio_free(GPIO_NR_TREO_POWER_DETECT);
|
||||
err1:
|
||||
return ret;
|
||||
if (machine_is_treo680())
|
||||
pxa_set_ohci_info(&treo680_ohci_info);
|
||||
}
|
||||
|
||||
static int treo_is_ac_online(void)
|
||||
{
|
||||
return gpio_get_value(GPIO_NR_TREO_POWER_DETECT);
|
||||
}
|
||||
|
||||
static void power_supply_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_TREO_POWER_DETECT);
|
||||
}
|
||||
|
||||
static char *treo_supplicants[] = {
|
||||
"main-battery",
|
||||
};
|
||||
|
||||
static struct pda_power_pdata power_supply_info = {
|
||||
.init = power_supply_init,
|
||||
.is_ac_online = treo_is_ac_online,
|
||||
.exit = power_supply_exit,
|
||||
.supplied_to = treo_supplicants,
|
||||
.num_supplicants = ARRAY_SIZE(treo_supplicants),
|
||||
};
|
||||
|
||||
static struct platform_device power_supply = {
|
||||
.name = "pda-power",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &power_supply_info,
|
||||
},
|
||||
};
|
||||
#else
|
||||
static inline void palmtreo_uhc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Vibra and LEDs
|
||||
@ -495,16 +353,6 @@ static struct gpio_led_platform_data treo680_gpio_led_info = {
|
||||
.num_leds = ARRAY_SIZE(treo680_gpio_leds),
|
||||
};
|
||||
|
||||
static struct platform_device treo680_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &treo680_gpio_led_info,
|
||||
}
|
||||
};
|
||||
#endif /* CONFIG_MACH_TREO680 */
|
||||
|
||||
#ifdef CONFIG_MACH_CENTRO
|
||||
static struct gpio_led centro_gpio_leds[] = {
|
||||
{
|
||||
.name = "centro:vibra:vibra",
|
||||
@ -529,145 +377,67 @@ static struct gpio_led_platform_data centro_gpio_led_info = {
|
||||
.num_leds = ARRAY_SIZE(centro_gpio_leds),
|
||||
};
|
||||
|
||||
static struct platform_device centro_leds = {
|
||||
static struct platform_device palmtreo_leds = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = ¢ro_gpio_led_info,
|
||||
.platform_data = &treo680_gpio_led_info,
|
||||
}
|
||||
};
|
||||
#endif /* CONFIG_MACH_CENTRO */
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
/* TODO: add support for 324x324 */
|
||||
static struct pxafb_mode_info treo_lcd_modes[] = {
|
||||
static void __init palmtreo_leds_init(void)
|
||||
{
|
||||
.pixclock = 86538,
|
||||
.xres = 320,
|
||||
.yres = 320,
|
||||
.bpp = 16,
|
||||
if (machine_is_centro())
|
||||
palmtreo_leds.dev.platform_data = ¢ro_gpio_led_info;
|
||||
|
||||
.left_margin = 20,
|
||||
.right_margin = 8,
|
||||
.upper_margin = 8,
|
||||
.lower_margin = 5,
|
||||
|
||||
.hsync_len = 4,
|
||||
.vsync_len = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static void treo_lcd_power(int on, struct fb_var_screeninfo *info)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_TREO_BL_POWER, on);
|
||||
}
|
||||
|
||||
static struct pxafb_mach_info treo_lcd_screen = {
|
||||
.modes = treo_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(treo_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power management - standby
|
||||
******************************************************************************/
|
||||
static void __init treo_pm_init(void)
|
||||
{
|
||||
static u32 resume[] = {
|
||||
0xe3a00101, /* mov r0, #0x40000000 */
|
||||
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||
};
|
||||
|
||||
/* this is where the bootloader jumps */
|
||||
memcpy(phys_to_virt(TREO_STR_BASE), resume, sizeof(resume));
|
||||
platform_device_register(&palmtreo_leds);
|
||||
}
|
||||
#else
|
||||
static inline void palmtreo_leds_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
static struct platform_device *treo_devices[] __initdata = {
|
||||
&treo_backlight,
|
||||
&power_supply,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_MACH_TREO680
|
||||
static struct platform_device *treo680_devices[] __initdata = {
|
||||
&treo680_leds,
|
||||
};
|
||||
#endif /* CONFIG_MACH_TREO680 */
|
||||
|
||||
#ifdef CONFIG_MACH_CENTRO
|
||||
static struct platform_device *centro_devices[] __initdata = {
|
||||
¢ro_leds,
|
||||
};
|
||||
#endif /* CONFIG_MACH_CENTRO */
|
||||
|
||||
/* setup udc GPIOs initial state */
|
||||
static void __init treo_udc_init(void)
|
||||
{
|
||||
if (!gpio_request(GPIO_NR_TREO_USB_PULLUP, "UDC Vbus")) {
|
||||
gpio_direction_output(GPIO_NR_TREO_USB_PULLUP, 1);
|
||||
gpio_free(GPIO_NR_TREO_USB_PULLUP);
|
||||
}
|
||||
}
|
||||
|
||||
static void __init treo_lcd_power_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_TREO_LCD_POWER, "LCD POWER");
|
||||
if (ret) {
|
||||
pr_err("Treo680: LCD power GPIO request failed!\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = gpio_direction_output(GPIO_NR_TREO_LCD_POWER, 0);
|
||||
if (ret) {
|
||||
pr_err("Treo680: setting LCD power GPIO direction failed!\n");
|
||||
gpio_free(GPIO_NR_TREO_LCD_POWER);
|
||||
return;
|
||||
}
|
||||
|
||||
treo_lcd_screen.pxafb_lcd_power = treo_lcd_power;
|
||||
}
|
||||
|
||||
static void __init treo_reserve(void)
|
||||
{
|
||||
memblock_reserve(0xa0000000, 0x1000);
|
||||
memblock_reserve(0xa2000000, 0x1000);
|
||||
}
|
||||
|
||||
static void __init treo_init(void)
|
||||
static void __init palmphone_common_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo_pin_config));
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
treo_pm_init();
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo_pin_config));
|
||||
treo_lcd_power_init();
|
||||
set_pxa_fb_info(&treo_lcd_screen);
|
||||
treo_udc_init();
|
||||
pxa_set_udc_info(&treo_udc_info);
|
||||
pxa_set_ac97_info(&treo_ac97_pdata);
|
||||
pxa_set_ficp_info(&treo_ficp_info);
|
||||
|
||||
platform_add_devices(ARRAY_AND_SIZE(treo_devices));
|
||||
palm27x_pm_init(TREO_STR_BASE);
|
||||
palm27x_lcd_init(GPIO_NR_TREO_BL_POWER, &palm_320x320_new_lcd_mode);
|
||||
palm27x_udc_init(GPIO_NR_TREO_USB_DETECT, GPIO_NR_TREO_USB_PULLUP, 1);
|
||||
palm27x_irda_init(GPIO_NR_TREO_IR_EN);
|
||||
palm27x_ac97_init(-1, -1, -1, 95);
|
||||
palm27x_pwm_init(GPIO_NR_TREO_BL_POWER, -1);
|
||||
palm27x_power_init(GPIO_NR_TREO_POWER_DETECT, -1);
|
||||
palm27x_pmic_init();
|
||||
palmtreo_kpc_init();
|
||||
palmtreo_uhc_init();
|
||||
palmtreo_leds_init();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_MACH_TREO680
|
||||
static void __init treo680_init(void)
|
||||
{
|
||||
treo_init();
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
|
||||
pxa_set_mci_info(&treo680_mci_platform_data);
|
||||
pxa_set_keypad_info(&treo680_keypad_platform_data);
|
||||
pxa_set_ohci_info(&treo680_ohci_info);
|
||||
palmphone_common_init();
|
||||
palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY,
|
||||
GPIO_NR_TREO680_SD_POWER, 0);
|
||||
}
|
||||
|
||||
platform_add_devices(ARRAY_AND_SIZE(treo680_devices));
|
||||
static void __init centro_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(centro685_pin_config));
|
||||
palmphone_common_init();
|
||||
palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, -1,
|
||||
GPIO_NR_CENTRO_SD_POWER, 1);
|
||||
}
|
||||
|
||||
MACHINE_START(TREO680, "Palm Treo 680")
|
||||
@ -680,19 +450,6 @@ MACHINE_START(TREO680, "Palm Treo 680")
|
||||
.timer = &pxa_timer,
|
||||
.init_machine = treo680_init,
|
||||
MACHINE_END
|
||||
#endif /* CONFIG_MACH_TREO680 */
|
||||
|
||||
#ifdef CONFIG_MACH_CENTRO
|
||||
static void __init centro_init(void)
|
||||
{
|
||||
treo_init();
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(centro685_pin_config));
|
||||
pxa_set_mci_info(¢ro_mci_platform_data);
|
||||
|
||||
pxa_set_keypad_info(¢ro_keypad_platform_data);
|
||||
|
||||
platform_add_devices(ARRAY_AND_SIZE(centro_devices));
|
||||
}
|
||||
|
||||
MACHINE_START(CENTRO, "Palm Centro 685")
|
||||
.phys_io = TREO_PHYS_IO_START,
|
||||
@ -702,6 +459,5 @@ MACHINE_START(CENTRO, "Palm Centro 685")
|
||||
.reserve = treo_reserve,
|
||||
.init_irq = pxa27x_init_irq,
|
||||
.timer = &pxa_timer,
|
||||
.init_machine = centro_init,
|
||||
.init_machine = centro_init,
|
||||
MACHINE_END
|
||||
#endif /* CONFIG_MACH_CENTRO */
|
||||
|
@ -25,7 +25,7 @@
|
||||
#include <linux/pda_power.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/wm97xx_batt.h>
|
||||
#include <linux/wm97xx.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
@ -46,6 +46,7 @@
|
||||
#include <mach/pxa27x_keypad.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/palmasoc.h>
|
||||
#include <mach/palm27x.h>
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
@ -129,6 +130,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
|
||||
/******************************************************************************
|
||||
* NOR Flash
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
static struct mtd_partition palmtx_partitions[] = {
|
||||
{
|
||||
.name = "Flash",
|
||||
@ -162,20 +164,18 @@ static struct platform_device palmtx_flash = {
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
static struct pxamci_platform_data palmtx_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = GPIO_NR_PALMTX_SD_DETECT_N,
|
||||
.gpio_card_ro = GPIO_NR_PALMTX_SD_READONLY,
|
||||
.gpio_power = GPIO_NR_PALMTX_SD_POWER,
|
||||
.detect_delay_ms = 200,
|
||||
};
|
||||
static void __init palmtx_nor_init(void)
|
||||
{
|
||||
platform_device_register(&palmtx_flash);
|
||||
}
|
||||
#else
|
||||
static inline void palmtx_nor_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keyboard
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||
static unsigned int palmtx_matrix_keys[] = {
|
||||
KEY(0, 0, KEY_POWER),
|
||||
KEY(0, 1, KEY_F1),
|
||||
@ -201,9 +201,18 @@ static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
|
||||
.debounce_interval = 30,
|
||||
};
|
||||
|
||||
static void __init palmtx_kpc_init(void)
|
||||
{
|
||||
pxa_set_keypad_info(&palmtx_keypad_platform_data);
|
||||
}
|
||||
#else
|
||||
static inline void palmtx_kpc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keys
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
static struct gpio_keys_button palmtx_pxa_buttons[] = {
|
||||
{KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
||||
};
|
||||
@ -221,208 +230,18 @@ static struct platform_device palmtx_pxa_keys = {
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Backlight
|
||||
******************************************************************************/
|
||||
static int palmtx_backlight_init(struct device *dev)
|
||||
static void __init palmtx_keys_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMTX_BL_POWER, "BL POWER");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMTX_BL_POWER, 0);
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_request(GPIO_NR_PALMTX_LCD_POWER, "LCD POWER");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMTX_LCD_POWER, 0);
|
||||
if (ret)
|
||||
goto err3;
|
||||
|
||||
return 0;
|
||||
err3:
|
||||
gpio_free(GPIO_NR_PALMTX_LCD_POWER);
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMTX_BL_POWER);
|
||||
err:
|
||||
return ret;
|
||||
platform_device_register(&palmtx_pxa_keys);
|
||||
}
|
||||
|
||||
static int palmtx_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMTX_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMTX_LCD_POWER, brightness);
|
||||
return brightness;
|
||||
}
|
||||
|
||||
static void palmtx_backlight_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMTX_BL_POWER);
|
||||
gpio_free(GPIO_NR_PALMTX_LCD_POWER);
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data palmtx_backlight_data = {
|
||||
.pwm_id = 0,
|
||||
.max_brightness = PALMTX_MAX_INTENSITY,
|
||||
.dft_brightness = PALMTX_MAX_INTENSITY,
|
||||
.pwm_period_ns = PALMTX_PERIOD_NS,
|
||||
.init = palmtx_backlight_init,
|
||||
.notify = palmtx_backlight_notify,
|
||||
.exit = palmtx_backlight_exit,
|
||||
};
|
||||
|
||||
static struct platform_device palmtx_backlight = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &pxa27x_device_pwm0.dev,
|
||||
.platform_data = &palmtx_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* IrDA
|
||||
******************************************************************************/
|
||||
static struct pxaficp_platform_data palmtx_ficp_platform_data = {
|
||||
.gpio_pwdown = GPIO_NR_PALMTX_IR_DISABLE,
|
||||
.transceiver_cap = IR_SIRMODE | IR_OFF,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* UDC
|
||||
******************************************************************************/
|
||||
static struct gpio_vbus_mach_info palmtx_udc_info = {
|
||||
.gpio_vbus = GPIO_NR_PALMTX_USB_DETECT_N,
|
||||
.gpio_vbus_inverted = 1,
|
||||
.gpio_pullup = GPIO_NR_PALMTX_USB_PULLUP,
|
||||
};
|
||||
|
||||
static struct platform_device palmtx_gpio_vbus = {
|
||||
.name = "gpio-vbus",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palmtx_udc_info,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power supply
|
||||
******************************************************************************/
|
||||
static int power_supply_init(struct device *dev)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMTX_POWER_DETECT, "CABLE_STATE_AC");
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = gpio_direction_input(GPIO_NR_PALMTX_POWER_DETECT);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
return 0;
|
||||
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
|
||||
err1:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int palmtx_is_ac_online(void)
|
||||
{
|
||||
return gpio_get_value(GPIO_NR_PALMTX_POWER_DETECT);
|
||||
}
|
||||
|
||||
static void power_supply_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMTX_POWER_DETECT);
|
||||
}
|
||||
|
||||
static char *palmtx_supplicants[] = {
|
||||
"main-battery",
|
||||
};
|
||||
|
||||
static struct pda_power_pdata power_supply_info = {
|
||||
.init = power_supply_init,
|
||||
.is_ac_online = palmtx_is_ac_online,
|
||||
.exit = power_supply_exit,
|
||||
.supplied_to = palmtx_supplicants,
|
||||
.num_supplicants = ARRAY_SIZE(palmtx_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 = PALMTX_BAT_MAX_VOLTAGE,
|
||||
.min_voltage = PALMTX_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",
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* aSoC audio
|
||||
******************************************************************************/
|
||||
static struct palm27x_asoc_info palmtx_asoc_pdata = {
|
||||
.jack_gpio = GPIO_NR_PALMTX_EARPHONE_DETECT,
|
||||
};
|
||||
|
||||
static pxa2xx_audio_ops_t palmtx_ac97_pdata = {
|
||||
.reset_gpio = 95,
|
||||
};
|
||||
|
||||
static struct platform_device palmtx_asoc = {
|
||||
.name = "palm27x-asoc",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palmtx_asoc_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
static struct pxafb_mode_info palmtx_lcd_modes[] = {
|
||||
{
|
||||
.pixclock = 57692,
|
||||
.xres = 320,
|
||||
.yres = 480,
|
||||
.bpp = 16,
|
||||
|
||||
.left_margin = 32,
|
||||
.right_margin = 1,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 1,
|
||||
|
||||
.hsync_len = 4,
|
||||
.vsync_len = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info palmtx_lcd_screen = {
|
||||
.modes = palmtx_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(palmtx_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
#else
|
||||
static inline void palmtx_keys_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* NAND Flash
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_MTD_NAND_GPIO) || defined(CONFIG_MTD_NAND_GPIO_MODULE)
|
||||
static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
|
||||
unsigned int ctrl)
|
||||
{
|
||||
@ -482,36 +301,17 @@ static struct platform_device palmtx_nand = {
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power management - standby
|
||||
******************************************************************************/
|
||||
static void __init palmtx_pm_init(void)
|
||||
static void __init palmtx_nand_init(void)
|
||||
{
|
||||
static u32 resume[] = {
|
||||
0xe3a00101, /* mov r0, #0x40000000 */
|
||||
0xe380060f, /* orr r0, r0, #0x00f00000 */
|
||||
0xe590f008, /* ldr pc, [r0, #0x08] */
|
||||
};
|
||||
|
||||
/* copy the bootloader */
|
||||
memcpy(phys_to_virt(PALMTX_STR_BASE), resume, sizeof(resume));
|
||||
platform_device_register(&palmtx_nand);
|
||||
}
|
||||
#else
|
||||
static inline void palmtx_nand_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||
&palmtx_pxa_keys,
|
||||
#endif
|
||||
&palmtx_backlight,
|
||||
&power_supply,
|
||||
&palmtx_asoc,
|
||||
&palmtx_gpio_vbus,
|
||||
&palmtx_flash,
|
||||
&palmtx_nand,
|
||||
};
|
||||
|
||||
static struct map_desc palmtx_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = PALMTX_PCMCIA_VIRT,
|
||||
@ -537,34 +337,29 @@ static void __init palmtx_map_io(void)
|
||||
iotable_init(palmtx_io_desc, ARRAY_SIZE(palmtx_io_desc));
|
||||
}
|
||||
|
||||
/* setup udc GPIOs initial state */
|
||||
static void __init palmtx_udc_init(void)
|
||||
{
|
||||
if (!gpio_request(GPIO_NR_PALMTX_USB_PULLUP, "UDC Vbus")) {
|
||||
gpio_direction_output(GPIO_NR_PALMTX_USB_PULLUP, 1);
|
||||
gpio_free(GPIO_NR_PALMTX_USB_PULLUP);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void __init palmtx_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
palmtx_pm_init();
|
||||
set_pxa_fb_info(&palmtx_lcd_screen);
|
||||
pxa_set_mci_info(&palmtx_mci_platform_data);
|
||||
palmtx_udc_init();
|
||||
pxa_set_ac97_info(&palmtx_ac97_pdata);
|
||||
pxa_set_ficp_info(&palmtx_ficp_platform_data);
|
||||
pxa_set_keypad_info(&palmtx_keypad_platform_data);
|
||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
palm27x_mmc_init(GPIO_NR_PALMTX_SD_DETECT_N, GPIO_NR_PALMTX_SD_READONLY,
|
||||
GPIO_NR_PALMTX_SD_POWER, 0);
|
||||
palm27x_pm_init(PALMTX_STR_BASE);
|
||||
palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
|
||||
palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
|
||||
GPIO_NR_PALMTX_USB_PULLUP, 1);
|
||||
palm27x_irda_init(GPIO_NR_PALMTX_IR_DISABLE);
|
||||
palm27x_ac97_init(PALMTX_BAT_MIN_VOLTAGE, PALMTX_BAT_MAX_VOLTAGE,
|
||||
GPIO_NR_PALMTX_EARPHONE_DETECT, 95);
|
||||
palm27x_pwm_init(GPIO_NR_PALMTX_BL_POWER, GPIO_NR_PALMTX_LCD_POWER);
|
||||
palm27x_power_init(GPIO_NR_PALMTX_POWER_DETECT, -1);
|
||||
palm27x_pmic_init();
|
||||
palmtx_kpc_init();
|
||||
palmtx_keys_init();
|
||||
palmtx_nor_init();
|
||||
palmtx_nand_init();
|
||||
}
|
||||
|
||||
MACHINE_START(PALMTX, "Palm T|X")
|
||||
|
@ -27,7 +27,7 @@
|
||||
#include <linux/pda_power.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/wm97xx_batt.h>
|
||||
#include <linux/wm97xx.h>
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/usb/gpio_vbus.h>
|
||||
|
||||
@ -44,6 +44,7 @@
|
||||
#include <mach/pxa27x_keypad.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/palmasoc.h>
|
||||
#include <mach/palm27x.h>
|
||||
|
||||
#include <mach/pm.h>
|
||||
|
||||
@ -108,22 +109,10 @@ static unsigned long palmz72_pin_config[] __initdata = {
|
||||
GPIO27_GPIO, /* WM9712 IRQ */
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* SD/MMC card controller
|
||||
******************************************************************************/
|
||||
/* SD_POWER is not actually power, but it is more like chip
|
||||
* select, i.e. it is inverted */
|
||||
static struct pxamci_platform_data palmz72_mci_platform_data = {
|
||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
||||
.gpio_card_detect = GPIO_NR_PALMZ72_SD_DETECT_N,
|
||||
.gpio_card_ro = GPIO_NR_PALMZ72_SD_RO,
|
||||
.gpio_power = GPIO_NR_PALMZ72_SD_POWER_N,
|
||||
.gpio_power_invert = 1,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* GPIO keyboard
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||
static unsigned int palmz72_matrix_keys[] = {
|
||||
KEY(0, 0, KEY_POWER),
|
||||
KEY(0, 1, KEY_F1),
|
||||
@ -149,77 +138,18 @@ static struct pxa27x_keypad_platform_data palmz72_keypad_platform_data = {
|
||||
.debounce_interval = 30,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Backlight
|
||||
******************************************************************************/
|
||||
static int palmz72_backlight_init(struct device *dev)
|
||||
static void __init palmz72_kpc_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMZ72_BL_POWER, "BL POWER");
|
||||
if (ret)
|
||||
goto err;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMZ72_BL_POWER, 0);
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_request(GPIO_NR_PALMZ72_LCD_POWER, "LCD POWER");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_output(GPIO_NR_PALMZ72_LCD_POWER, 0);
|
||||
if (ret)
|
||||
goto err3;
|
||||
|
||||
return 0;
|
||||
err3:
|
||||
gpio_free(GPIO_NR_PALMZ72_LCD_POWER);
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMZ72_BL_POWER);
|
||||
err:
|
||||
return ret;
|
||||
pxa_set_keypad_info(&palmz72_keypad_platform_data);
|
||||
}
|
||||
|
||||
static int palmz72_backlight_notify(struct device *dev, int brightness)
|
||||
{
|
||||
gpio_set_value(GPIO_NR_PALMZ72_BL_POWER, brightness);
|
||||
gpio_set_value(GPIO_NR_PALMZ72_LCD_POWER, brightness);
|
||||
return brightness;
|
||||
}
|
||||
|
||||
static void palmz72_backlight_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMZ72_BL_POWER);
|
||||
gpio_free(GPIO_NR_PALMZ72_LCD_POWER);
|
||||
}
|
||||
|
||||
static struct platform_pwm_backlight_data palmz72_backlight_data = {
|
||||
.pwm_id = 0,
|
||||
.max_brightness = PALMZ72_MAX_INTENSITY,
|
||||
.dft_brightness = PALMZ72_MAX_INTENSITY,
|
||||
.pwm_period_ns = PALMZ72_PERIOD_NS,
|
||||
.init = palmz72_backlight_init,
|
||||
.notify = palmz72_backlight_notify,
|
||||
.exit = palmz72_backlight_exit,
|
||||
};
|
||||
|
||||
static struct platform_device palmz72_backlight = {
|
||||
.name = "pwm-backlight",
|
||||
.dev = {
|
||||
.parent = &pxa27x_device_pwm0.dev,
|
||||
.platform_data = &palmz72_backlight_data,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* IrDA
|
||||
******************************************************************************/
|
||||
static struct pxaficp_platform_data palmz72_ficp_platform_data = {
|
||||
.gpio_pwdown = GPIO_NR_PALMZ72_IR_DISABLE,
|
||||
.transceiver_cap = IR_SIRMODE | IR_OFF,
|
||||
};
|
||||
#else
|
||||
static inline void palmz72_kpc_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* LEDs
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||
static struct gpio_led gpio_leds[] = {
|
||||
{
|
||||
.name = "palmz72:green:led",
|
||||
@ -241,139 +171,13 @@ static struct platform_device palmz72_leds = {
|
||||
}
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* UDC
|
||||
******************************************************************************/
|
||||
static struct gpio_vbus_mach_info palmz72_udc_info = {
|
||||
.gpio_vbus = GPIO_NR_PALMZ72_USB_DETECT_N,
|
||||
.gpio_pullup = GPIO_NR_PALMZ72_USB_PULLUP,
|
||||
};
|
||||
|
||||
static struct platform_device palmz72_gpio_vbus = {
|
||||
.name = "gpio-vbus",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &palmz72_udc_info,
|
||||
},
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Power supply
|
||||
******************************************************************************/
|
||||
static int power_supply_init(struct device *dev)
|
||||
static void __init palmz72_leds_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMZ72_POWER_DETECT, "CABLE_STATE_AC");
|
||||
if (ret)
|
||||
goto err1;
|
||||
ret = gpio_direction_input(GPIO_NR_PALMZ72_POWER_DETECT);
|
||||
if (ret)
|
||||
goto err2;
|
||||
|
||||
ret = gpio_request(GPIO_NR_PALMZ72_USB_DETECT_N, "CABLE_STATE_USB");
|
||||
if (ret)
|
||||
goto err2;
|
||||
ret = gpio_direction_input(GPIO_NR_PALMZ72_USB_DETECT_N);
|
||||
if (ret)
|
||||
goto err3;
|
||||
|
||||
return 0;
|
||||
err3:
|
||||
gpio_free(GPIO_NR_PALMZ72_USB_DETECT_N);
|
||||
err2:
|
||||
gpio_free(GPIO_NR_PALMZ72_POWER_DETECT);
|
||||
err1:
|
||||
return ret;
|
||||
platform_device_register(&palmz72_leds);
|
||||
}
|
||||
|
||||
static int palmz72_is_ac_online(void)
|
||||
{
|
||||
return gpio_get_value(GPIO_NR_PALMZ72_POWER_DETECT);
|
||||
}
|
||||
|
||||
static int palmz72_is_usb_online(void)
|
||||
{
|
||||
return !gpio_get_value(GPIO_NR_PALMZ72_USB_DETECT_N);
|
||||
}
|
||||
|
||||
static void power_supply_exit(struct device *dev)
|
||||
{
|
||||
gpio_free(GPIO_NR_PALMZ72_USB_DETECT_N);
|
||||
gpio_free(GPIO_NR_PALMZ72_POWER_DETECT);
|
||||
}
|
||||
|
||||
static char *palmz72_supplicants[] = {
|
||||
"main-battery",
|
||||
};
|
||||
|
||||
static struct pda_power_pdata power_supply_info = {
|
||||
.init = power_supply_init,
|
||||
.is_ac_online = palmz72_is_ac_online,
|
||||
.is_usb_online = palmz72_is_usb_online,
|
||||
.exit = power_supply_exit,
|
||||
.supplied_to = palmz72_supplicants,
|
||||
.num_supplicants = ARRAY_SIZE(palmz72_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 = PALMZ72_BAT_MAX_VOLTAGE,
|
||||
.min_voltage = PALMZ72_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",
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* aSoC audio
|
||||
******************************************************************************/
|
||||
static struct platform_device palmz72_asoc = {
|
||||
.name = "palm27x-asoc",
|
||||
.id = -1,
|
||||
};
|
||||
|
||||
/******************************************************************************
|
||||
* Framebuffer
|
||||
******************************************************************************/
|
||||
static struct pxafb_mode_info palmz72_lcd_modes[] = {
|
||||
{
|
||||
.pixclock = 115384,
|
||||
.xres = 320,
|
||||
.yres = 320,
|
||||
.bpp = 16,
|
||||
|
||||
.left_margin = 27,
|
||||
.right_margin = 7,
|
||||
.upper_margin = 7,
|
||||
.lower_margin = 8,
|
||||
|
||||
.hsync_len = 6,
|
||||
.vsync_len = 1,
|
||||
},
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info palmz72_lcd_screen = {
|
||||
.modes = palmz72_lcd_modes,
|
||||
.num_modes = ARRAY_SIZE(palmz72_lcd_modes),
|
||||
.lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
|
||||
};
|
||||
#else
|
||||
static inline void palmz72_leds_init(void) {}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
|
||||
@ -452,40 +256,26 @@ device_initcall(palmz72_pm_init);
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&palmz72_backlight,
|
||||
&palmz72_leds,
|
||||
&palmz72_asoc,
|
||||
&power_supply,
|
||||
&palmz72_gpio_vbus,
|
||||
};
|
||||
|
||||
/* setup udc GPIOs initial state */
|
||||
static void __init palmz72_udc_init(void)
|
||||
{
|
||||
if (!gpio_request(GPIO_NR_PALMZ72_USB_PULLUP, "USB Pullup")) {
|
||||
gpio_direction_output(GPIO_NR_PALMZ72_USB_PULLUP, 0);
|
||||
gpio_free(GPIO_NR_PALMZ72_USB_PULLUP);
|
||||
}
|
||||
}
|
||||
|
||||
static void __init palmz72_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config));
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
set_pxa_fb_info(&palmz72_lcd_screen);
|
||||
pxa_set_mci_info(&palmz72_mci_platform_data);
|
||||
palmz72_udc_init();
|
||||
pxa_set_ac97_info(NULL);
|
||||
pxa_set_ficp_info(&palmz72_ficp_platform_data);
|
||||
pxa_set_keypad_info(&palmz72_keypad_platform_data);
|
||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
palm27x_mmc_init(GPIO_NR_PALMZ72_SD_DETECT_N, GPIO_NR_PALMZ72_SD_RO,
|
||||
GPIO_NR_PALMZ72_SD_POWER_N, 1);
|
||||
palm27x_lcd_init(-1, &palm_320x320_lcd_mode);
|
||||
palm27x_udc_init(GPIO_NR_PALMZ72_USB_DETECT_N,
|
||||
GPIO_NR_PALMZ72_USB_PULLUP, 0);
|
||||
palm27x_irda_init(GPIO_NR_PALMZ72_IR_DISABLE);
|
||||
palm27x_ac97_init(PALMZ72_BAT_MIN_VOLTAGE, PALMZ72_BAT_MAX_VOLTAGE,
|
||||
-1, 113);
|
||||
palm27x_pwm_init(-1, -1);
|
||||
palm27x_power_init(-1, -1);
|
||||
palm27x_pmic_init();
|
||||
palmz72_kpc_init();
|
||||
palmz72_leds_init();
|
||||
}
|
||||
|
||||
MACHINE_START(PALMZ72, "Palm Zire72")
|
||||
|
@ -43,7 +43,6 @@
|
||||
#include <mach/irda.h>
|
||||
#include <mach/poodle.h>
|
||||
#include <mach/pxafb.h>
|
||||
#include <mach/sharpsl.h>
|
||||
#include <mach/pxa2xx_spi.h>
|
||||
#include <plat/i2c.h>
|
||||
|
||||
@ -53,7 +52,6 @@
|
||||
|
||||
#include "generic.h"
|
||||
#include "devices.h"
|
||||
#include "sharpsl.h"
|
||||
|
||||
static unsigned long poodle_pin_config[] __initdata = {
|
||||
/* I/O */
|
||||
|
@ -322,6 +322,7 @@ void __init pxa26x_init_irq(void)
|
||||
|
||||
static struct platform_device *pxa25x_devices[] __initdata = {
|
||||
&pxa25x_device_udc,
|
||||
&pxa_device_pmu,
|
||||
&pxa_device_i2s,
|
||||
&sa1100_device_rtc,
|
||||
&pxa25x_device_ssp,
|
||||
|
@ -383,6 +383,7 @@ void __init pxa27x_set_i2c_power_info(struct i2c_pxa_platform_data *info)
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pxa27x_device_udc,
|
||||
&pxa_device_pmu,
|
||||
&pxa_device_i2s,
|
||||
&sa1100_device_rtc,
|
||||
&pxa_device_rtc,
|
||||
|
@ -52,7 +52,7 @@
|
||||
static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, };
|
||||
|
||||
/* crystal frequency to HSIO bus frequency multiplier (HSS) */
|
||||
static unsigned char hss_mult[4] = { 8, 12, 16, 0 };
|
||||
static unsigned char hss_mult[4] = { 8, 12, 16, 24 };
|
||||
|
||||
/*
|
||||
* Get the clock frequency as reflected by CCSR and the turbo flag.
|
||||
@ -552,11 +552,23 @@ static void pxa_unmask_ext_wakeup(unsigned int irq)
|
||||
PECR |= PECR_IE(irq - IRQ_WAKEUP0);
|
||||
}
|
||||
|
||||
static int pxa_set_ext_wakeup_type(unsigned int irq, unsigned int flow_type)
|
||||
{
|
||||
if (flow_type & IRQ_TYPE_EDGE_RISING)
|
||||
PWER |= 1 << (irq - IRQ_WAKEUP0);
|
||||
|
||||
if (flow_type & IRQ_TYPE_EDGE_FALLING)
|
||||
PWER |= 1 << (irq - IRQ_WAKEUP0 + 2);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct irq_chip pxa_ext_wakeup_chip = {
|
||||
.name = "WAKEUP",
|
||||
.ack = pxa_ack_ext_wakeup,
|
||||
.mask = pxa_mask_ext_wakeup,
|
||||
.unmask = pxa_unmask_ext_wakeup,
|
||||
.set_type = pxa_set_ext_wakeup_type,
|
||||
};
|
||||
|
||||
static void __init pxa_init_ext_wakeup_irq(set_wake_t fn)
|
||||
@ -596,6 +608,7 @@ void __init pxa3xx_set_i2c_power_info(struct i2c_pxa_platform_data *info)
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&pxa27x_device_udc,
|
||||
&pxa_device_pmu,
|
||||
&pxa_device_i2s,
|
||||
&sa1100_device_rtc,
|
||||
&pxa_device_rtc,
|
||||
|
@ -745,13 +745,32 @@ static int raumfeld_is_usb_online(void)
|
||||
|
||||
static char *raumfeld_power_supplicants[] = { "ds2760-battery.0" };
|
||||
|
||||
static void raumfeld_power_signal_charged(void)
|
||||
{
|
||||
struct power_supply *psy =
|
||||
power_supply_get_by_name(raumfeld_power_supplicants[0]);
|
||||
|
||||
if (psy)
|
||||
power_supply_set_battery_charged(psy);
|
||||
}
|
||||
|
||||
static int raumfeld_power_resume(void)
|
||||
{
|
||||
/* check if GPIO_CHARGE_DONE went low while we were sleeping */
|
||||
if (!gpio_get_value(GPIO_CHARGE_DONE))
|
||||
raumfeld_power_signal_charged();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pda_power_pdata power_supply_info = {
|
||||
.init = power_supply_init,
|
||||
.is_ac_online = raumfeld_is_ac_online,
|
||||
.is_usb_online = raumfeld_is_usb_online,
|
||||
.exit = power_supply_exit,
|
||||
.supplied_to = raumfeld_power_supplicants,
|
||||
.num_supplicants = ARRAY_SIZE(raumfeld_power_supplicants)
|
||||
.num_supplicants = ARRAY_SIZE(raumfeld_power_supplicants),
|
||||
.resume = raumfeld_power_resume,
|
||||
};
|
||||
|
||||
static struct resource power_supply_resources[] = {
|
||||
@ -766,13 +785,7 @@ static struct resource power_supply_resources[] = {
|
||||
|
||||
static irqreturn_t charge_done_irq(int irq, void *dev_id)
|
||||
{
|
||||
struct power_supply *psy;
|
||||
|
||||
psy = power_supply_get_by_name("ds2760-battery.0");
|
||||
|
||||
if (psy)
|
||||
power_supply_set_battery_charged(psy);
|
||||
|
||||
raumfeld_power_signal_charged();
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
@ -1,26 +0,0 @@
|
||||
/*
|
||||
* Copyright (c) 2004-2005 Richard Purdie
|
||||
*
|
||||
* 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 <mach/sharpsl_pm.h>
|
||||
|
||||
/*
|
||||
* SharpSL Battery/PM Driver
|
||||
*/
|
||||
#define READ_GPIO_BIT(x) (GPLR(x) & GPIO_bit(x))
|
||||
|
||||
/* MAX1111 Channel Definitions */
|
||||
#define MAX1111_BATT_VOLT 4u
|
||||
#define MAX1111_BATT_TEMP 2u
|
||||
#define MAX1111_ACIN_VOLT 6u
|
||||
|
||||
extern struct battery_thresh sharpsl_battery_levels_acin[];
|
||||
extern struct battery_thresh sharpsl_battery_levels_noac[];
|
||||
int sharpsl_pm_pxa_read_max1111(int channel);
|
||||
|
||||
|
@ -29,11 +29,8 @@
|
||||
#include <mach/pm.h>
|
||||
#include <mach/pxa2xx-regs.h>
|
||||
#include <mach/regs-rtc.h>
|
||||
#include <mach/sharpsl.h>
|
||||
#include <mach/sharpsl_pm.h>
|
||||
|
||||
#include "sharpsl.h"
|
||||
|
||||
/*
|
||||
* Constants
|
||||
*/
|
||||
@ -180,17 +177,12 @@ int sharpsl_pm_pxa_read_max1111(int channel)
|
||||
if (machine_is_tosa())
|
||||
return 0;
|
||||
|
||||
#ifdef CONFIG_CORGI_SSP_DEPRECATED
|
||||
return corgi_ssp_max1111_get((channel << MAXCTRL_SEL_SH) | MAXCTRL_PD0 | MAXCTRL_PD1
|
||||
| MAXCTRL_SGL | MAXCTRL_UNI | MAXCTRL_STR);
|
||||
#else
|
||||
extern int max1111_read_channel(int);
|
||||
|
||||
/* max1111 accepts channels from 0-3, however,
|
||||
* it is encoded from 0-7 here in the code.
|
||||
*/
|
||||
return max1111_read_channel(channel >> 1);
|
||||
#endif
|
||||
}
|
||||
|
||||
static int get_percentage(int voltage)
|
||||
@ -277,21 +269,6 @@ static void sharpsl_battery_thread(struct work_struct *private_)
|
||||
dev_dbg(sharpsl_pm.dev, "Battery: voltage: %d, status: %d, percentage: %d, time: %ld\n", voltage,
|
||||
sharpsl_pm.battstat.mainbat_status, sharpsl_pm.battstat.mainbat_percent, jiffies);
|
||||
|
||||
#ifdef CONFIG_BACKLIGHT_CORGI
|
||||
/* If battery is low. limit backlight intensity to save power. */
|
||||
if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
|
||||
&& ((sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_LOW)
|
||||
|| (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL))) {
|
||||
if (!(sharpsl_pm.flags & SHARPSL_BL_LIMIT)) {
|
||||
sharpsl_pm.machinfo->backlight_limit(1);
|
||||
sharpsl_pm.flags |= SHARPSL_BL_LIMIT;
|
||||
}
|
||||
} else if (sharpsl_pm.flags & SHARPSL_BL_LIMIT) {
|
||||
sharpsl_pm.machinfo->backlight_limit(0);
|
||||
sharpsl_pm.flags &= ~SHARPSL_BL_LIMIT;
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Suspend if critical battery level */
|
||||
if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
|
||||
&& (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL)
|
||||
|
@ -339,10 +339,6 @@ ENTRY(pxa_cpu_resume)
|
||||
mcr p15, 0, r1, c8, c7, 0 @ invalidate I & D TLBs
|
||||
mcr p15, 0, r1, c7, c7, 0 @ invalidate I & D caches, BTB
|
||||
|
||||
#ifdef CONFIG_XSCALE_CACHE_ERRATA
|
||||
bic r9, r9, #0x0004 @ see cpu_xscale_proc_init
|
||||
#endif
|
||||
|
||||
mcr p14, 0, r3, c6, c0, 0 @ clock configuration, turbo mode.
|
||||
mcr p15, 0, r4, c15, c1, 0 @ CP access reg
|
||||
mcr p15, 0, r5, c13, c0, 0 @ PID
|
||||
@ -368,9 +364,6 @@ sleep_save_sp:
|
||||
|
||||
.text
|
||||
resume_after_mmu:
|
||||
#ifdef CONFIG_XSCALE_CACHE_ERRATA
|
||||
bl cpu_xscale_proc_init
|
||||
#endif
|
||||
ldmfd sp!, {r2, r3}
|
||||
#ifndef CONFIG_IWMMXT
|
||||
mar acc0, r2, r3
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -22,11 +22,10 @@
|
||||
#include <asm/mach-types.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
#include <mach/sharpsl.h>
|
||||
#include <mach/spitz.h>
|
||||
#include <mach/pxa27x.h>
|
||||
#include <mach/sharpsl_pm.h>
|
||||
|
||||
#include "sharpsl.h"
|
||||
#include "generic.h"
|
||||
|
||||
#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
|
||||
@ -178,11 +177,11 @@ unsigned long spitzpm_read_devdata(int type)
|
||||
case SHARPSL_STATUS_ACIN:
|
||||
return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0);
|
||||
case SHARPSL_STATUS_LOCK:
|
||||
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batlock);
|
||||
return gpio_get_value(sharpsl_pm.machinfo->gpio_batlock);
|
||||
case SHARPSL_STATUS_CHRGFULL:
|
||||
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_batfull);
|
||||
return gpio_get_value(sharpsl_pm.machinfo->gpio_batfull);
|
||||
case SHARPSL_STATUS_FATAL:
|
||||
return READ_GPIO_BIT(sharpsl_pm.machinfo->gpio_fatal);
|
||||
return gpio_get_value(sharpsl_pm.machinfo->gpio_fatal);
|
||||
case SHARPSL_ACIN_VOLT:
|
||||
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
|
||||
case SHARPSL_BATT_TEMP:
|
||||
@ -212,8 +211,6 @@ struct sharpsl_charger_machinfo spitz_pm_machinfo = {
|
||||
.should_wakeup = spitz_should_wakeup,
|
||||
#if defined(CONFIG_LCD_CORGI)
|
||||
.backlight_limit = corgi_lcd_limit_intensity,
|
||||
#elif defined(CONFIG_BACKLIGHT_CORGI)
|
||||
.backlight_limit = corgibl_limit_intensity,
|
||||
#endif
|
||||
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
|
||||
.charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -530,13 +530,9 @@ static void __init trizeps4_init(void)
|
||||
i2c_register_board_info(0, trizeps4_i2c_devices,
|
||||
ARRAY_SIZE(trizeps4_i2c_devices));
|
||||
|
||||
#ifdef CONFIG_IDE_PXA_CF
|
||||
/* if boot direct from compact flash dont disable power */
|
||||
trizeps_conxs_bcr = 0x0009;
|
||||
#else
|
||||
/* this is the reset value */
|
||||
trizeps_conxs_bcr = 0x00A0;
|
||||
#endif
|
||||
|
||||
BCR_writew(trizeps_conxs_bcr);
|
||||
board_backlight_power(1);
|
||||
}
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include <linux/dm9000.h>
|
||||
#include <linux/ucb1400.h>
|
||||
#include <linux/ata_platform.h>
|
||||
#include <linux/regulator/max1586.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@ -37,6 +38,7 @@
|
||||
#include <mach/ohci.h>
|
||||
#include <mach/pxa27x-udc.h>
|
||||
#include <mach/udc.h>
|
||||
#include <mach/pata_pxa.h>
|
||||
|
||||
#include <plat/i2c.h>
|
||||
|
||||
@ -464,7 +466,6 @@ static struct i2c_board_info __initdata vpac270_i2c_devs[] = {
|
||||
|
||||
static void __init vpac270_rtc_init(void)
|
||||
{
|
||||
pxa_set_i2c_info(NULL);
|
||||
i2c_register_board_info(0, ARRAY_AND_SIZE(vpac270_i2c_devs));
|
||||
}
|
||||
#else
|
||||
@ -492,7 +493,55 @@ static struct pxafb_mode_info vpac270_lcd_modes[] = {
|
||||
.vsync_len = 2,
|
||||
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
||||
},
|
||||
}, { /* CRT 640x480 */
|
||||
.pixclock = 35000,
|
||||
.xres = 640,
|
||||
.yres = 480,
|
||||
.bpp = 16,
|
||||
.depth = 16,
|
||||
|
||||
.left_margin = 96,
|
||||
.right_margin = 48,
|
||||
.upper_margin = 33,
|
||||
.lower_margin = 10,
|
||||
|
||||
.hsync_len = 48,
|
||||
.vsync_len = 1,
|
||||
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
||||
}, { /* CRT 800x600 H=30kHz V=48HZ */
|
||||
.pixclock = 25000,
|
||||
.xres = 800,
|
||||
.yres = 600,
|
||||
.bpp = 16,
|
||||
.depth = 16,
|
||||
|
||||
.left_margin = 50,
|
||||
.right_margin = 1,
|
||||
.upper_margin = 21,
|
||||
.lower_margin = 12,
|
||||
|
||||
.hsync_len = 8,
|
||||
.vsync_len = 1,
|
||||
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
||||
}, { /* CRT 1024x768 H=40kHz V=50Hz */
|
||||
.pixclock = 15000,
|
||||
.xres = 1024,
|
||||
.yres = 768,
|
||||
.bpp = 16,
|
||||
.depth = 16,
|
||||
|
||||
.left_margin = 220,
|
||||
.right_margin = 8,
|
||||
.upper_margin = 33,
|
||||
.lower_margin = 2,
|
||||
|
||||
.hsync_len = 48,
|
||||
.vsync_len = 1,
|
||||
|
||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
||||
}
|
||||
};
|
||||
|
||||
static struct pxafb_mach_info vpac270_lcd_screen = {
|
||||
@ -538,9 +587,10 @@ static inline void vpac270_lcd_init(void) {}
|
||||
/******************************************************************************
|
||||
* PATA IDE
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
||||
static struct pata_platform_info vpac270_pata_pdata = {
|
||||
.ioport_shift = 1,
|
||||
#if defined(CONFIG_PATA_PXA) || defined(CONFIG_PATA_PXA_MODULE)
|
||||
static struct pata_pxa_pdata vpac270_pata_pdata = {
|
||||
.reg_shift = 1,
|
||||
.dma_dreq = 1,
|
||||
.irq_flags = IRQF_TRIGGER_RISING,
|
||||
};
|
||||
|
||||
@ -555,7 +605,12 @@ static struct resource vpac270_ide_resources[] = {
|
||||
.end = PXA_CS3_PHYS + 0x15f,
|
||||
.flags = IORESOURCE_MEM
|
||||
},
|
||||
[2] = { /* IDE IRQ pin */
|
||||
[2] = { /* DMA Base address */
|
||||
.start = PXA_CS3_PHYS + 0x20,
|
||||
.end = PXA_CS3_PHYS + 0x2f,
|
||||
.flags = IORESOURCE_DMA
|
||||
},
|
||||
[3] = { /* IDE IRQ pin */
|
||||
.start = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
|
||||
.end = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
|
||||
.flags = IORESOURCE_IRQ
|
||||
@ -563,11 +618,12 @@ static struct resource vpac270_ide_resources[] = {
|
||||
};
|
||||
|
||||
static struct platform_device vpac270_ide_device = {
|
||||
.name = "pata_platform",
|
||||
.name = "pata_pxa",
|
||||
.num_resources = ARRAY_SIZE(vpac270_ide_resources),
|
||||
.resource = vpac270_ide_resources,
|
||||
.dev = {
|
||||
.platform_data = &vpac270_pata_pdata,
|
||||
.coherent_dma_mask = 0xffffffff,
|
||||
}
|
||||
};
|
||||
|
||||
@ -579,6 +635,59 @@ static void __init vpac270_ide_init(void)
|
||||
static inline void vpac270_ide_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Core power regulator
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_REGULATOR_MAX1586) || \
|
||||
defined(CONFIG_REGULATOR_MAX1586_MODULE)
|
||||
static struct regulator_consumer_supply vpac270_max1587a_consumers[] = {
|
||||
{
|
||||
.supply = "vcc_core",
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data vpac270_max1587a_v3_info = {
|
||||
.constraints = {
|
||||
.name = "vcc_core range",
|
||||
.min_uV = 900000,
|
||||
.max_uV = 1705000,
|
||||
.always_on = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.consumer_supplies = vpac270_max1587a_consumers,
|
||||
.num_consumer_supplies = ARRAY_SIZE(vpac270_max1587a_consumers),
|
||||
};
|
||||
|
||||
static struct max1586_subdev_data vpac270_max1587a_subdevs[] = {
|
||||
{
|
||||
.name = "vcc_core",
|
||||
.id = MAX1586_V3,
|
||||
.platform_data = &vpac270_max1587a_v3_info,
|
||||
}
|
||||
};
|
||||
|
||||
static struct max1586_platform_data vpac270_max1587a_info = {
|
||||
.subdevs = vpac270_max1587a_subdevs,
|
||||
.num_subdevs = ARRAY_SIZE(vpac270_max1587a_subdevs),
|
||||
.v3_gain = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata vpac270_pi2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("max1586", 0x14),
|
||||
.platform_data = &vpac270_max1587a_info,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init vpac270_pmic_init(void)
|
||||
{
|
||||
i2c_register_board_info(1, ARRAY_AND_SIZE(vpac270_pi2c_board_info));
|
||||
}
|
||||
#else
|
||||
static inline void vpac270_pmic_init(void) {}
|
||||
#endif
|
||||
|
||||
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
@ -589,7 +698,10 @@ static void __init vpac270_init(void)
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
pxa_set_i2c_info(NULL);
|
||||
pxa27x_set_i2c_power_info(NULL);
|
||||
|
||||
vpac270_pmic_init();
|
||||
vpac270_lcd_init();
|
||||
vpac270_mmc_init();
|
||||
vpac270_nor_init();
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/pwm_backlight.h>
|
||||
#include <linux/z2_battery.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/libertas_spi.h>
|
||||
@ -26,6 +27,7 @@
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
@ -162,7 +164,7 @@ static struct mtd_partition z2_flash_parts[] = {
|
||||
}, {
|
||||
.name = "U-Boot Environment",
|
||||
.offset = 0x40000,
|
||||
.size = 0x60000,
|
||||
.size = 0x20000,
|
||||
}, {
|
||||
.name = "Flash",
|
||||
.offset = 0x60000,
|
||||
@ -451,6 +453,42 @@ static void __init z2_keys_init(void)
|
||||
static inline void z2_keys_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Battery
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_I2C_PXA) || defined(CONFIG_I2C_PXA_MODULE)
|
||||
static struct z2_battery_info batt_chip_info = {
|
||||
.batt_I2C_bus = 0,
|
||||
.batt_I2C_addr = 0x55,
|
||||
.batt_I2C_reg = 2,
|
||||
.charge_gpio = GPIO0_ZIPITZ2_AC_DETECT,
|
||||
.min_voltage = 2400000,
|
||||
.max_voltage = 3700000,
|
||||
.batt_div = 69,
|
||||
.batt_mult = 1000000,
|
||||
.batt_tech = POWER_SUPPLY_TECHNOLOGY_LION,
|
||||
.batt_name = "Z2",
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata z2_i2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("aer915", 0x55),
|
||||
.platform_data = &batt_chip_info,
|
||||
}, {
|
||||
I2C_BOARD_INFO("wm8750", 0x1b),
|
||||
},
|
||||
|
||||
};
|
||||
|
||||
static void __init z2_i2c_init(void)
|
||||
{
|
||||
pxa_set_i2c_info(NULL);
|
||||
i2c_register_board_info(0, ARRAY_AND_SIZE(z2_i2c_board_info));
|
||||
}
|
||||
#else
|
||||
static inline void z2_i2c_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* SSP Devices - WiFi and LCD control
|
||||
******************************************************************************/
|
||||
@ -572,6 +610,75 @@ static void __init z2_spi_init(void)
|
||||
static inline void z2_spi_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Core power regulator
|
||||
******************************************************************************/
|
||||
#if defined(CONFIG_REGULATOR_TPS65023) || \
|
||||
defined(CONFIG_REGULATOR_TPS65023_MODULE)
|
||||
static struct regulator_consumer_supply z2_tps65021_consumers[] = {
|
||||
{
|
||||
.supply = "vcc_core",
|
||||
}
|
||||
};
|
||||
|
||||
static struct regulator_init_data z2_tps65021_info[] = {
|
||||
{
|
||||
.constraints = {
|
||||
.name = "vcc_core range",
|
||||
.min_uV = 800000,
|
||||
.max_uV = 1600000,
|
||||
.always_on = 1,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
|
||||
},
|
||||
.consumer_supplies = z2_tps65021_consumers,
|
||||
.num_consumer_supplies = ARRAY_SIZE(z2_tps65021_consumers),
|
||||
}, {
|
||||
.constraints = {
|
||||
.name = "DCDC2",
|
||||
.min_uV = 3300000,
|
||||
.max_uV = 3300000,
|
||||
.always_on = 1,
|
||||
},
|
||||
}, {
|
||||
.constraints = {
|
||||
.name = "DCDC3",
|
||||
.min_uV = 1800000,
|
||||
.max_uV = 1800000,
|
||||
.always_on = 1,
|
||||
},
|
||||
}, {
|
||||
.constraints = {
|
||||
.name = "LDO1",
|
||||
.min_uV = 1000000,
|
||||
.max_uV = 3150000,
|
||||
.always_on = 1,
|
||||
},
|
||||
}, {
|
||||
.constraints = {
|
||||
.name = "LDO2",
|
||||
.min_uV = 1050000,
|
||||
.max_uV = 3300000,
|
||||
.always_on = 1,
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata z2_pi2c_board_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps65021", 0x48),
|
||||
.platform_data = &z2_tps65021_info,
|
||||
},
|
||||
};
|
||||
|
||||
static void __init z2_pmic_init(void)
|
||||
{
|
||||
pxa27x_set_i2c_power_info(NULL);
|
||||
i2c_register_board_info(1, ARRAY_AND_SIZE(z2_pi2c_board_info));
|
||||
}
|
||||
#else
|
||||
static inline void z2_pmic_init(void) {}
|
||||
#endif
|
||||
|
||||
/******************************************************************************
|
||||
* Machine init
|
||||
******************************************************************************/
|
||||
@ -579,17 +686,20 @@ static void __init z2_init(void)
|
||||
{
|
||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(z2_pin_config));
|
||||
|
||||
pxa_set_ffuart_info(NULL);
|
||||
pxa_set_btuart_info(NULL);
|
||||
pxa_set_stuart_info(NULL);
|
||||
|
||||
z2_lcd_init();
|
||||
z2_mmc_init();
|
||||
z2_mkp_init();
|
||||
|
||||
pxa_set_i2c_info(NULL);
|
||||
|
||||
z2_i2c_init();
|
||||
z2_spi_init();
|
||||
z2_nor_init();
|
||||
z2_pwm_init();
|
||||
z2_leds_init();
|
||||
z2_keys_init();
|
||||
z2_pmic_init();
|
||||
}
|
||||
|
||||
MACHINE_START(ZIPIT2, "Zipit Z2")
|
||||
|
@ -57,11 +57,21 @@ config S3C64XX_SETUP_I2C1
|
||||
help
|
||||
Common setup code for i2c bus 1.
|
||||
|
||||
config S3C64XX_SETUP_IDE
|
||||
bool
|
||||
help
|
||||
Common setup code for S3C64XX IDE.
|
||||
|
||||
config S3C64XX_SETUP_FB_24BPP
|
||||
bool
|
||||
help
|
||||
Common setup code for S3C64XX with an 24bpp RGB display helper.
|
||||
|
||||
config S3C64XX_SETUP_KEYPAD
|
||||
bool
|
||||
help
|
||||
Common setup code for S3C64XX KEYPAD GPIO configurations
|
||||
|
||||
config S3C64XX_SETUP_SDHCI_GPIO
|
||||
bool
|
||||
help
|
||||
@ -95,15 +105,20 @@ config MACH_SMDK6410
|
||||
select S3C_DEV_HSMMC
|
||||
select S3C_DEV_HSMMC1
|
||||
select S3C_DEV_I2C1
|
||||
select SAMSUNG_DEV_IDE
|
||||
select S3C_DEV_FB
|
||||
select S3C_DEV_RTC
|
||||
select SAMSUNG_DEV_TS
|
||||
select S3C_DEV_USB_HOST
|
||||
select S3C_DEV_USB_HSOTG
|
||||
select S3C_DEV_WDT
|
||||
select SAMSUNG_DEV_KEYPAD
|
||||
select HAVE_S3C2410_WATCHDOG
|
||||
select S3C64XX_SETUP_SDHCI
|
||||
select S3C64XX_SETUP_I2C1
|
||||
select S3C64XX_SETUP_IDE
|
||||
select S3C64XX_SETUP_FB_24BPP
|
||||
select S3C64XX_SETUP_KEYPAD
|
||||
help
|
||||
Machine support for the Samsung SMDK6410
|
||||
|
||||
|
@ -35,6 +35,8 @@ obj-$(CONFIG_S3C64XX_DMA) += dma.o
|
||||
|
||||
obj-$(CONFIG_S3C64XX_SETUP_I2C0) += setup-i2c0.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_IDE) += setup-ide.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_KEYPAD) += setup-keypad.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_SDHCI) += setup-sdhci.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o
|
||||
obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||
|
@ -132,6 +132,12 @@ static struct clk init_clocks_disable[] = {
|
||||
.name = "nand",
|
||||
.id = -1,
|
||||
.parent = &clk_h,
|
||||
}, {
|
||||
.name = "rtc",
|
||||
.id = -1,
|
||||
.parent = &clk_p,
|
||||
.enable = s3c64xx_pclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_PCLK_RTC,
|
||||
}, {
|
||||
.name = "adc",
|
||||
.id = -1,
|
||||
@ -165,6 +171,12 @@ static struct clk init_clocks_disable[] = {
|
||||
.ctrlbit = S3C6410_CLKCON_PCLK_IIS2,
|
||||
}, {
|
||||
#endif
|
||||
.name = "keypad",
|
||||
.id = -1,
|
||||
.parent = &clk_p,
|
||||
.enable = s3c64xx_pclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_PCLK_KEYPAD,
|
||||
}, {
|
||||
.name = "spi",
|
||||
.id = 0,
|
||||
.parent = &clk_p,
|
||||
@ -294,12 +306,6 @@ static struct clk init_clocks[] = {
|
||||
.parent = &clk_p,
|
||||
.enable = s3c64xx_pclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_PCLK_UART3,
|
||||
}, {
|
||||
.name = "rtc",
|
||||
.id = -1,
|
||||
.parent = &clk_p,
|
||||
.enable = s3c64xx_pclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_PCLK_RTC,
|
||||
}, {
|
||||
.name = "watchdog",
|
||||
.id = -1,
|
||||
@ -310,6 +316,12 @@ static struct clk init_clocks[] = {
|
||||
.id = -1,
|
||||
.parent = &clk_p,
|
||||
.ctrlbit = S3C_CLKCON_PCLK_AC97,
|
||||
}, {
|
||||
.name = "cfcon",
|
||||
.id = -1,
|
||||
.parent = &clk_h,
|
||||
.enable = s3c64xx_hclk_ctrl,
|
||||
.ctrlbit = S3C_CLKCON_HCLK_IHOST,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -12,11 +12,11 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/map.h>
|
||||
#include <mach/dma.h>
|
||||
#include <mach/gpio.h>
|
||||
|
||||
#include <plat/devs.h>
|
||||
#include <plat/audio.h>
|
||||
|
@ -12,10 +12,10 @@
|
||||
#include <linux/string.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <mach/dma.h>
|
||||
#include <mach/map.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <mach/gpio-bank-c.h>
|
||||
#include <mach/spi-clocks.h>
|
||||
|
||||
|
@ -15,9 +15,9 @@
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <mach/map.h>
|
||||
#include <mach/gpio.h>
|
||||
|
||||
#include <plat/gpio-core.h>
|
||||
#include <plat/gpio-cfg.h>
|
||||
|
@ -67,6 +67,7 @@
|
||||
#define S3C64XX_PA_USB_HSOTG (0x7C000000)
|
||||
#define S3C64XX_PA_WATCHDOG (0x7E004000)
|
||||
#define S3C64XX_PA_RTC (0x7E005000)
|
||||
#define S3C64XX_PA_KEYPAD (0x7E00A000)
|
||||
#define S3C64XX_PA_ADC (0x7E00B000)
|
||||
#define S3C64XX_PA_SYSCON (0x7E00F000)
|
||||
#define S3C64XX_PA_AC97 (0x7F001000)
|
||||
@ -86,6 +87,9 @@
|
||||
#define S3C64XX_SZ_GPIO SZ_4K
|
||||
|
||||
#define S3C64XX_PA_SDRAM (0x50000000)
|
||||
|
||||
#define S3C64XX_PA_CFCON (0x70300000)
|
||||
|
||||
#define S3C64XX_PA_VIC0 (0x71200000)
|
||||
#define S3C64XX_PA_VIC1 (0x71300000)
|
||||
|
||||
@ -120,5 +124,7 @@
|
||||
#define S3C_PA_WDT S3C64XX_PA_WATCHDOG
|
||||
|
||||
#define SAMSUNG_PA_ADC S3C64XX_PA_ADC
|
||||
#define SAMSUNG_PA_CFCON S3C64XX_PA_CFCON
|
||||
#define SAMSUNG_PA_KEYPAD S3C64XX_PA_KEYPAD
|
||||
|
||||
#endif /* __ASM_ARCH_6400_MAP_H */
|
||||
|
@ -34,6 +34,7 @@
|
||||
#define S3C_SCLK_GATE S3C_CLKREG(0x38)
|
||||
#define S3C_MEM0_GATE S3C_CLKREG(0x3C)
|
||||
#define S3C6410_CLK_SRC2 S3C_CLKREG(0x10C)
|
||||
#define S3C_MEM_SYS_CFG S3C_CLKREG(0x120)
|
||||
|
||||
/* CLKDIV0 */
|
||||
#define S3C6400_CLKDIV0_PCLK_MASK (0xf << 12)
|
||||
@ -154,4 +155,8 @@
|
||||
#define S3C6400_CLKSRC_EPLL_MOUT_SHIFT (2)
|
||||
#define S3C6400_CLKSRC_MFC (1 << 4)
|
||||
|
||||
/* MEM_SYS_CFG */
|
||||
#define MEM_SYS_CFG_INDEP_CF 0x4000
|
||||
#define MEM_SYS_CFG_EBI_FIX_PRI_CFCON 0x30
|
||||
|
||||
#endif /* _PLAT_REGS_CLOCK_H */
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include <linux/list.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/serial_core.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
@ -56,6 +57,7 @@
|
||||
#include <mach/regs-gpio.h>
|
||||
#include <mach/regs-sys.h>
|
||||
#include <mach/regs-srom.h>
|
||||
#include <plat/ata.h>
|
||||
#include <plat/iic.h>
|
||||
#include <plat/fb.h>
|
||||
#include <plat/gpio-cfg.h>
|
||||
@ -66,6 +68,7 @@
|
||||
#include <plat/cpu.h>
|
||||
#include <plat/adc.h>
|
||||
#include <plat/ts.h>
|
||||
#include <plat/keypad.h>
|
||||
|
||||
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
||||
#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
|
||||
@ -242,6 +245,29 @@ static struct platform_device smdk6410_b_pwr_5v = {
|
||||
};
|
||||
#endif
|
||||
|
||||
static struct s3c_ide_platdata smdk6410_ide_pdata __initdata = {
|
||||
.setup_gpio = s3c64xx_ide_setup_gpio,
|
||||
};
|
||||
|
||||
static uint32_t smdk6410_keymap[] __initdata = {
|
||||
/* KEY(row, col, keycode) */
|
||||
KEY(0, 3, KEY_1), KEY(0, 4, KEY_2), KEY(0, 5, KEY_3),
|
||||
KEY(0, 6, KEY_4), KEY(0, 7, KEY_5),
|
||||
KEY(1, 3, KEY_A), KEY(1, 4, KEY_B), KEY(1, 5, KEY_C),
|
||||
KEY(1, 6, KEY_D), KEY(1, 7, KEY_E)
|
||||
};
|
||||
|
||||
static struct matrix_keymap_data smdk6410_keymap_data __initdata = {
|
||||
.keymap = smdk6410_keymap,
|
||||
.keymap_size = ARRAY_SIZE(smdk6410_keymap),
|
||||
};
|
||||
|
||||
static struct samsung_keypad_platdata smdk6410_keypad_data __initdata = {
|
||||
.keymap_data = &smdk6410_keymap_data,
|
||||
.rows = 2,
|
||||
.cols = 8,
|
||||
};
|
||||
|
||||
static struct map_desc smdk6410_iodesc[] = {};
|
||||
|
||||
static struct platform_device *smdk6410_devices[] __initdata = {
|
||||
@ -257,6 +283,7 @@ static struct platform_device *smdk6410_devices[] __initdata = {
|
||||
&s3c_device_ohci,
|
||||
&s3c_device_usb_hsotg,
|
||||
&s3c64xx_device_iisv4,
|
||||
&samsung_device_keypad,
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
&smdk6410_b_pwr_5v,
|
||||
@ -265,6 +292,8 @@ static struct platform_device *smdk6410_devices[] __initdata = {
|
||||
|
||||
&smdk6410_smsc911x,
|
||||
&s3c_device_adc,
|
||||
&s3c_device_cfcon,
|
||||
&s3c_device_rtc,
|
||||
&s3c_device_ts,
|
||||
&s3c_device_wdt,
|
||||
};
|
||||
@ -636,6 +665,8 @@ static void __init smdk6410_machine_init(void)
|
||||
s3c_i2c1_set_platdata(NULL);
|
||||
s3c_fb_set_platdata(&smdk6410_lcd_pdata);
|
||||
|
||||
samsung_keypad_set_platdata(&smdk6410_keypad_data);
|
||||
|
||||
s3c24xx_ts_set_platdata(&s3c_ts_platform);
|
||||
|
||||
/* configure nCS1 width to 16 bits */
|
||||
@ -665,6 +696,8 @@ static void __init smdk6410_machine_init(void)
|
||||
i2c_register_board_info(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
|
||||
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
|
||||
|
||||
s3c_ide_set_platdata(&smdk6410_ide_pdata);
|
||||
|
||||
platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices));
|
||||
}
|
||||
|
||||
|
@ -37,8 +37,9 @@
|
||||
#include <plat/devs.h>
|
||||
#include <plat/clock.h>
|
||||
#include <plat/sdhci.h>
|
||||
#include <plat/ata-core.h>
|
||||
#include <plat/adc-core.h>
|
||||
#include <plat/iic-core.h>
|
||||
#include <plat/adc.h>
|
||||
#include <plat/onenand-core.h>
|
||||
#include <mach/s3c6400.h>
|
||||
#include <mach/s3c6410.h>
|
||||
@ -54,10 +55,11 @@ void __init s3c6410_map_io(void)
|
||||
s3c_i2c0_setname("s3c2440-i2c");
|
||||
s3c_i2c1_setname("s3c2440-i2c");
|
||||
|
||||
s3c_device_adc.name = "s3c64xx-adc";
|
||||
s3c_adc_setname("s3c64xx-adc");
|
||||
s3c_device_nand.name = "s3c6400-nand";
|
||||
s3c_onenand_setname("s3c6410-onenand");
|
||||
s3c64xx_onenand1_setname("s3c6410-onenand");
|
||||
s3c_cfcon_setname("s3c64xx-pata");
|
||||
}
|
||||
|
||||
void __init s3c6410_init_clocks(int xtal)
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user