mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-24 15:01:13 +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.
|
may be configured as a kernel built-in or a kernel loadable module.
|
||||||
You can only make use of <constant>kgdbwait</constant> and early
|
You can only make use of <constant>kgdbwait</constant> and early
|
||||||
debugging if you build kgdboc into the kernel as a built-in.
|
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>
|
</para>
|
||||||
<sect2 id="kgdbocArgs">
|
<sect2 id="kgdbocArgs">
|
||||||
<title>kgdboc arguments</title>
|
<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">
|
<sect3 id="kgdbocArgs1">
|
||||||
<title>Using loadable module or built-in</title>
|
<title>Using loadable module or built-in</title>
|
||||||
<para>
|
<para>
|
||||||
@ -212,7 +235,7 @@
|
|||||||
<listitem>
|
<listitem>
|
||||||
<para>As a kernel loadable module:</para>
|
<para>As a kernel loadable module:</para>
|
||||||
<para>Use the command: <constant>modprobe kgdboc kgdboc=<tty-device>,[baud]</constant></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.
|
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
|
The second example is for the ARM Versatile AB using the second
|
||||||
serial port.
|
serial port.
|
||||||
@ -240,6 +263,9 @@
|
|||||||
</sect3>
|
</sect3>
|
||||||
<sect3 id="kgdbocArgs3">
|
<sect3 id="kgdbocArgs3">
|
||||||
<title>More examples</title>
|
<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
|
<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
|
depending on if you are using kdb and or kgdb, in one of the
|
||||||
following scenarios.
|
following scenarios.
|
||||||
@ -255,6 +281,12 @@
|
|||||||
<listitem><para>kdb with a keyboard</para>
|
<listitem><para>kdb with a keyboard</para>
|
||||||
<para><constant>kgdboc=kbd</constant></para>
|
<para><constant>kgdboc=kbd</constant></para>
|
||||||
</listitem>
|
</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>
|
</orderedlist>
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</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>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>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 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>
|
</itemizedlist>
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
@ -747,6 +781,8 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
|||||||
</sect1>
|
</sect1>
|
||||||
<sect1 id="kgdbocDesign">
|
<sect1 id="kgdbocDesign">
|
||||||
<title>kgdboc internals</title>
|
<title>kgdboc internals</title>
|
||||||
|
<sect2>
|
||||||
|
<title>kgdboc and uarts</title>
|
||||||
<para>
|
<para>
|
||||||
The kgdboc driver is actually a very thin driver that relies on the
|
The kgdboc driver is actually a very thin driver that relies on the
|
||||||
underlying low level to the hardware driver having "polling hooks"
|
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
|
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
|
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
|
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
|
request to the debugger, kgdboc invokes a callback in the serial
|
||||||
core which in turn uses the call back in the UART driver. It is
|
core which in turn uses the callback in the UART driver.</para>
|
||||||
certainly possible to extend kgdboc to work with non-UART based
|
|
||||||
consoles in the future.
|
|
||||||
</para>
|
|
||||||
<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>
|
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
|
#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
|
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
|
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
|
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.
|
going to mean pressing the reset button.
|
||||||
</para>
|
</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>
|
</sect1>
|
||||||
</chapter>
|
</chapter>
|
||||||
<chapter id="credits">
|
<chapter id="credits">
|
||||||
|
@ -6,4 +6,5 @@
|
|||||||
<param name="callout.graphics">0</param>
|
<param name="callout.graphics">0</param>
|
||||||
<!-- <param name="paper.type">A4</param> -->
|
<!-- <param name="paper.type">A4</param> -->
|
||||||
<param name="generate.section.toc.level">2</param>
|
<param name="generate.section.toc.level">2</param>
|
||||||
|
<param name="use.id.as.filename">1</param>
|
||||||
</stylesheet>
|
</stylesheet>
|
||||||
|
@ -7,7 +7,7 @@ Notes Written on Jan 15, 2002:
|
|||||||
|
|
||||||
Last Updated May 2, 2002
|
Last Updated May 2, 2002
|
||||||
September 2003: Updated I/O Scheduler portions
|
September 2003: Updated I/O Scheduler portions
|
||||||
Nick Piggin <piggin@cyberone.com.au>
|
Nick Piggin <npiggin@kernel.dk>
|
||||||
|
|
||||||
Introduction:
|
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
|
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
|
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
|
KBUILD_VERBOSE
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
@ -40,15 +62,15 @@ Set the directory to look for the kernel source when building external
|
|||||||
modules.
|
modules.
|
||||||
The directory can be specified in several ways:
|
The directory can be specified in several ways:
|
||||||
1) Use "M=..." on the command line
|
1) Use "M=..." on the command line
|
||||||
2) Environmnet variable KBUILD_EXTMOD
|
2) Environment variable KBUILD_EXTMOD
|
||||||
3) Environmnet variable SUBDIRS
|
3) Environment variable SUBDIRS
|
||||||
The possibilities are listed in the order they take precedence.
|
The possibilities are listed in the order they take precedence.
|
||||||
Using "M=..." will always override the others.
|
Using "M=..." will always override the others.
|
||||||
|
|
||||||
KBUILD_OUTPUT
|
KBUILD_OUTPUT
|
||||||
--------------------------------------------------
|
--------------------------------------------------
|
||||||
Specify the output directory when building the kernel.
|
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.
|
Setting "O=..." takes precedence over KBUILD_OUTPUT.
|
||||||
|
|
||||||
ARCH
|
ARCH
|
||||||
@ -90,7 +112,7 @@ The script will be called with the following arguments:
|
|||||||
$3 - kernel map file
|
$3 - kernel map file
|
||||||
$4 - default install path (use root directory if blank)
|
$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.
|
and it may differ from the above.
|
||||||
|
|
||||||
INSTALLKERNEL is provided to enable the possibility to
|
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
|
filename that contains config symbols that the user requires to be
|
||||||
set to a specific value. If KCONFIG_ALLCONFIG is used without a
|
set to a specific value. If KCONFIG_ALLCONFIG is used without a
|
||||||
filename, "make *config" checks for a file named
|
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
|
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
|
is not found, it checks for a file named "all.config" to contain forced
|
||||||
values.
|
values.
|
||||||
|
@ -168,7 +168,7 @@ more details, with real examples.
|
|||||||
#drivers/isdn/i4l/Makefile
|
#drivers/isdn/i4l/Makefile
|
||||||
# Makefile for the kernel ISDN subsystem and device drivers.
|
# Makefile for the kernel ISDN subsystem and device drivers.
|
||||||
# Each configuration option enables a list of files.
|
# 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
|
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
|
||||||
|
|
||||||
--- 3.3 Loadable module goals - obj-m
|
--- 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'
|
Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'
|
||||||
|
|
||||||
If a kernel module is built from several source files, you specify
|
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.
|
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
|
||||||
Kbuild needs to know which the parts that you want to build your
|
module from, so you have to tell it by setting a $(<module_name>-y)
|
||||||
module from, so you have to tell it by setting an
|
variable.
|
||||||
$(<module_name>-objs) variable.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
#drivers/isdn/i4l/Makefile
|
#drivers/isdn/i4l/Makefile
|
||||||
obj-$(CONFIG_ISDN) += isdn.o
|
obj-$(CONFIG_ISDN_I4L) += isdn.o
|
||||||
isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.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
|
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.
|
"$(LD) -r" on the list of these files to generate isdn.o.
|
||||||
|
|
||||||
Kbuild recognises objects used for composite objects by the suffix
|
Due to kbuild recognizing $(<module_name>-y) for composite objects,
|
||||||
-objs, and the suffix -y. This allows the Makefiles to use
|
you can use the value of a CONFIG_ symbol to optionally include an
|
||||||
the value of a CONFIG_ symbol to determine if an object is part
|
object file as part of a composite object.
|
||||||
of a composite object.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
#fs/ext2/Makefile
|
#fs/ext2/Makefile
|
||||||
obj-$(CONFIG_EXT2_FS) += ext2.o
|
obj-$(CONFIG_EXT2_FS) += ext2.o
|
||||||
ext2-y := balloc.o bitmap.o
|
ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
|
||||||
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.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
|
In this example, xattr.o, xattr_user.o and xattr_trusted.o are only
|
||||||
ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
|
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,
|
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,
|
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.
|
may contain both a built-in.o and a lib.a file.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
#arch/i386/lib/Makefile
|
#arch/x86/lib/Makefile
|
||||||
lib-y := checksum.o delay.o
|
lib-y := delay.o
|
||||||
|
|
||||||
This will create a library lib.a based on checksum.o and delay.o.
|
This will create a library lib.a based on delay.o. For kbuild to
|
||||||
For kbuild to actually recognize that there is a lib.a being built,
|
actually recognize that there is a lib.a being built, the directory
|
||||||
the directory shall be listed in libs-y.
|
shall be listed in libs-y.
|
||||||
See also "6.3 List directories to visit when descending".
|
See also "6.3 List directories to visit when descending".
|
||||||
|
|
||||||
Use of lib-y is normally restricted to lib/ and arch/*/lib.
|
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
|
--- 3.7 Compilation flags
|
||||||
|
|
||||||
ccflags-y, asflags-y and ldflags-y
|
ccflags-y, asflags-y and ldflags-y
|
||||||
The three flags listed above applies only to the kbuild makefile
|
These three flags apply only to the kbuild makefile in which they
|
||||||
where they are assigned. They are used for all the normal
|
are assigned. They are used for all the normal cc, as and ld
|
||||||
cc, as and ld invocation happenign during a recursive build.
|
invocations happening during a recursive build.
|
||||||
Note: Flags with the same behaviour were previously named:
|
Note: Flags with the same behaviour were previously named:
|
||||||
EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
|
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:
|
Example:
|
||||||
# drivers/sound/emu10k1/Makefile
|
# drivers/acpi/Makefile
|
||||||
ccflags-y += -I$(obj)
|
ccflags-y := -Os
|
||||||
ccflags-$(DEBUG) += -DEMU10K1_DEBUG
|
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
|
||||||
|
|
||||||
|
|
||||||
This variable is necessary because the top Makefile owns the
|
This variable is necessary because the top Makefile owns the
|
||||||
variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
|
variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
|
||||||
entire tree.
|
entire tree.
|
||||||
|
|
||||||
asflags-y is a similar string for per-directory options
|
asflags-y specifies options for assembling with $(AS).
|
||||||
when compiling assembly language source.
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
#arch/x86_64/kernel/Makefile
|
#arch/sparc/kernel/Makefile
|
||||||
asflags-y := -traditional
|
asflags-y := -ansi
|
||||||
|
|
||||||
|
ldflags-y specifies options for linking with $(LD).
|
||||||
ldflags-y is a string for per-directory options to $(LD).
|
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
#arch/m68k/fpsp040/Makefile
|
#arch/cris/boot/compressed/Makefile
|
||||||
ldflags-y := -x
|
ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
|
||||||
|
|
||||||
subdir-ccflags-y, subdir-asflags-y
|
subdir-ccflags-y, subdir-asflags-y
|
||||||
The two flags listed above are similar to ccflags-y and as-falgs-y.
|
The two flags listed above are similar to ccflags-y and asflags-y.
|
||||||
The difference is that the subdir- variants has effect for the kbuild
|
The difference is that the subdir- variants have effect for the kbuild
|
||||||
file where tey are present and all subdirectories.
|
file where they are present and all subdirectories.
|
||||||
Options specified using subdir-* are added to the commandline before
|
Options specified using subdir-* are added to the commandline before
|
||||||
the options specified using the non-subdir variants.
|
the options specified using the non-subdir variants.
|
||||||
|
|
||||||
@ -340,18 +338,18 @@ more details, with real examples.
|
|||||||
CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
|
CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
|
||||||
CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
|
CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
|
||||||
-DGDTH_STATISTICS
|
-DGDTH_STATISTICS
|
||||||
CFLAGS_seagate.o = -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
|
|
||||||
|
|
||||||
These three lines specify compilation flags for aha152x.o,
|
These two lines specify compilation flags for aha152x.o and gdth.o.
|
||||||
gdth.o, and seagate.o
|
|
||||||
|
|
||||||
$(AFLAGS_$@) is a similar feature for source files in assembly
|
$(AFLAGS_$@) is a similar feature for source files in assembly
|
||||||
languages.
|
languages.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
# arch/arm/kernel/Makefile
|
# arch/arm/kernel/Makefile
|
||||||
AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
|
AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
|
||||||
AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional
|
AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
|
||||||
|
AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
|
||||||
|
|
||||||
|
|
||||||
--- 3.9 Dependency tracking
|
--- 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
|
The first example utilises the trick that a config option expands
|
||||||
to 'y' when selected.
|
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.
|
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
|
$(KBUILD_AFLAGS_MODULE) is used to add arch specific options that
|
||||||
for loadable kernel modules.
|
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:
|
--- 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
|
=== 7 Kbuild syntax for exported headers
|
||||||
|
|
||||||
The kernel include a set of headers that is exported to userspace.
|
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.
|
minimal pre-processing before they are ready for user-space.
|
||||||
The pre-processing does:
|
The pre-processing does:
|
||||||
- drop kernel specific annotations
|
- drop kernel specific annotations
|
||||||
- drop include of compiler.h
|
- 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.
|
headers to be exported.
|
||||||
See subsequent chapter for the syntax of the Kbuild file.
|
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
|
More X86-64 boot options can be found in
|
||||||
Documentation/x86/x86_64/boot-options.txt .
|
Documentation/x86/x86_64/boot-options.txt .
|
||||||
X86 Either 32bit or 64bit x86 (same as X86-32+X86-64)
|
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:
|
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.
|
kgdboc= [KGDB,HW] kgdb over consoles.
|
||||||
Requires a tty driver that supports console polling,
|
Requires a tty driver that supports console polling,
|
||||||
or a supported polling keyboard driver (non-usb).
|
or a supported polling keyboard driver (non-usb).
|
||||||
Serial only format: <serial_device>[,baud]
|
Serial only format: <serial_device>[,baud]
|
||||||
keyboard only format: kbd
|
keyboard only format: kbd
|
||||||
keyboard and serial format: kbd,<serial_device>[,baud]
|
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
|
kgdbwait [KGDB] Stop kernel execution and enter the
|
||||||
kernel debugger at the earliest opportunity.
|
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= [HW,XT] Original XT pre-IDE (RLL encoded) disks.
|
||||||
xd_geo= See header of drivers/block/xd.c.
|
xd_geo= See header of drivers/block/xd.c.
|
||||||
|
|
||||||
|
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]
|
xirc2ps_cs= [NET,PCMCIA]
|
||||||
Format:
|
Format:
|
||||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||||
|
@ -285,6 +285,7 @@ architectures:
|
|||||||
- sparc64 (Return probes not yet implemented.)
|
- sparc64 (Return probes not yet implemented.)
|
||||||
- arm
|
- arm
|
||||||
- ppc
|
- ppc
|
||||||
|
- mips
|
||||||
|
|
||||||
3. Configuring Kprobes
|
3. Configuring Kprobes
|
||||||
|
|
||||||
|
@ -4,10 +4,17 @@ The Freescale DIU is a LCD controller, with proper hardware, it can also
|
|||||||
drive DVI monitors.
|
drive DVI monitors.
|
||||||
|
|
||||||
Required properties:
|
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
|
- reg : should contain at least address and length of the DIU register
|
||||||
set.
|
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):
|
Example (MPC8610HPCD):
|
||||||
display@2c000 {
|
display@2c000 {
|
||||||
@ -16,3 +23,12 @@ Example (MPC8610HPCD):
|
|||||||
interrupts = <72 2>;
|
interrupts = <72 2>;
|
||||||
interrupt-parent = <&mpic>;
|
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
|
- fsl,preserve-clocking : boolean; if defined, the clock settings
|
||||||
from the bootloader are preserved (not touched).
|
from the bootloader are preserved (not touched).
|
||||||
- clock-frequency : desired I2C bus clock frequency in Hz.
|
- clock-frequency : desired I2C bus clock frequency in Hz.
|
||||||
|
- fsl,timeout : I2C bus timeout in microseconds.
|
||||||
|
|
||||||
Examples :
|
Examples :
|
||||||
|
|
||||||
@ -59,4 +60,5 @@ Examples :
|
|||||||
interrupts = <43 2>;
|
interrupts = <43 2>;
|
||||||
interrupt-parent = <&mpic>;
|
interrupt-parent = <&mpic>;
|
||||||
clock-frequency = <400000>;
|
clock-frequency = <400000>;
|
||||||
|
fsl,timeout = <10000>;
|
||||||
};
|
};
|
||||||
|
@ -694,7 +694,7 @@ static void usage(void)
|
|||||||
#endif
|
#endif
|
||||||
" -l|--list Show page details in ranges\n"
|
" -l|--list Show page details in ranges\n"
|
||||||
" -L|--list-each Show page details one by one\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|--hwpoison hwpoison pages\n"
|
||||||
" -x|--unpoison unpoison pages\n"
|
" -x|--unpoison unpoison pages\n"
|
||||||
" -h|--help Show this usage message\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/jornada720.c
|
||||||
F: arch/arm/mach-sa1100/include/mach/jornada720.h
|
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
|
ARM/INTEL IOP32X ARM ARCHITECTURE
|
||||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||||
M: Dan Williams <dan.j.williams@intel.com>
|
M: Dan Williams <dan.j.williams@intel.com>
|
||||||
@ -949,8 +956,9 @@ ARM/SHMOBILE ARM ARCHITECTURE
|
|||||||
M: Paul Mundt <lethal@linux-sh.org>
|
M: Paul Mundt <lethal@linux-sh.org>
|
||||||
M: Magnus Damm <magnus.damm@gmail.com>
|
M: Magnus Damm <magnus.damm@gmail.com>
|
||||||
L: linux-sh@vger.kernel.org
|
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
|
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
|
S: Supported
|
||||||
F: arch/arm/mach-shmobile/
|
F: arch/arm/mach-shmobile/
|
||||||
F: drivers/sh/
|
F: drivers/sh/
|
||||||
@ -1570,6 +1578,16 @@ L: platform-driver-x86@vger.kernel.org
|
|||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/platform/x86/classmate-laptop.c
|
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
|
CODA FILE SYSTEM
|
||||||
M: Jan Harkes <jaharkes@cs.cmu.edu>
|
M: Jan Harkes <jaharkes@cs.cmu.edu>
|
||||||
M: coda@cs.cmu.edu
|
M: coda@cs.cmu.edu
|
||||||
@ -3267,8 +3285,8 @@ F: fs/autofs4/
|
|||||||
|
|
||||||
KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
|
KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
|
||||||
M: Michal Marek <mmarek@suse.cz>
|
M: Michal Marek <mmarek@suse.cz>
|
||||||
T: git git://repo.or.cz/linux-kbuild.git for-next
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.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 rc-fixes
|
||||||
L: linux-kbuild@vger.kernel.org
|
L: linux-kbuild@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/kbuild/
|
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/
|
F: drivers/net/wireless/rt2x00/
|
||||||
|
|
||||||
RAMDISK RAM BLOCK DEVICE DRIVER
|
RAMDISK RAM BLOCK DEVICE DRIVER
|
||||||
M: Nick Piggin <npiggin@suse.de>
|
M: Nick Piggin <npiggin@kernel.dk>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/blockdev/ramdisk.txt
|
F: Documentation/blockdev/ramdisk.txt
|
||||||
F: drivers/block/brd.c
|
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
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: arch/sparc/
|
F: arch/sparc/
|
||||||
F: drivers/sbus
|
F: drivers/sbus/
|
||||||
|
|
||||||
SPARC SERIAL DRIVERS
|
SPARC SERIAL DRIVERS
|
||||||
M: "David S. Miller" <davem@davemloft.net>
|
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__ \
|
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
||||||
-Wbitwise -Wno-return-void $(CF)
|
-Wbitwise -Wno-return-void $(CF)
|
||||||
MODFLAGS = -DMODULE
|
CFLAGS_MODULE =
|
||||||
CFLAGS_MODULE = $(MODFLAGS)
|
AFLAGS_MODULE =
|
||||||
AFLAGS_MODULE = $(MODFLAGS)
|
LDFLAGS_MODULE =
|
||||||
LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds
|
|
||||||
CFLAGS_KERNEL =
|
CFLAGS_KERNEL =
|
||||||
AFLAGS_KERNEL =
|
AFLAGS_KERNEL =
|
||||||
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
||||||
@ -354,7 +353,12 @@ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
|||||||
-Werror-implicit-function-declaration \
|
-Werror-implicit-function-declaration \
|
||||||
-Wno-format-security \
|
-Wno-format-security \
|
||||||
-fno-delete-null-pointer-checks
|
-fno-delete-null-pointer-checks
|
||||||
|
KBUILD_AFLAGS_KERNEL :=
|
||||||
|
KBUILD_CFLAGS_KERNEL :=
|
||||||
KBUILD_AFLAGS := -D__ASSEMBLY__
|
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)
|
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
||||||
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
|
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_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
|
||||||
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
|
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
|
||||||
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
|
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
|
# When compiling out-of-tree modules, put MODVERDIR in the module
|
||||||
# tree rather than in the kernel tree. The kernel tree might
|
# 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).
|
# of make so .config is not included in this case either (for *config).
|
||||||
|
|
||||||
no-dot-config-targets := clean mrproper distclean \
|
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_% \
|
include/linux/version.h headers_% \
|
||||||
kernelrelease kernelversion
|
kernelversion
|
||||||
|
|
||||||
config-targets := 0
|
config-targets := 0
|
||||||
mixed-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
|
# The all: target is the default when no target is given on the
|
||||||
# command line.
|
# command line.
|
||||||
# This allow a user to issue only 'make' to build a kernel including modules
|
# 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
|
all: vmlinux
|
||||||
|
|
||||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||||
@ -557,6 +563,10 @@ KBUILD_CFLAGS += -g
|
|||||||
KBUILD_AFLAGS += -gdwarf-2
|
KBUILD_AFLAGS += -gdwarf-2
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifdef CONFIG_DEBUG_INFO_REDUCED
|
||||||
|
KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly)
|
||||||
|
endif
|
||||||
|
|
||||||
ifdef CONFIG_FUNCTION_TRACER
|
ifdef CONFIG_FUNCTION_TRACER
|
||||||
KBUILD_CFLAGS += -pg
|
KBUILD_CFLAGS += -pg
|
||||||
endif
|
endif
|
||||||
@ -603,7 +613,7 @@ endif
|
|||||||
# Use --build-id when available.
|
# Use --build-id when available.
|
||||||
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
|
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
|
||||||
$(call cc-ldoption, -Wl$(comma)--build-id,))
|
$(call cc-ldoption, -Wl$(comma)--build-id,))
|
||||||
LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||||
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
||||||
|
|
||||||
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
||||||
@ -1209,8 +1219,9 @@ help:
|
|||||||
@echo ' includecheck - Check for duplicate included header files'
|
@echo ' includecheck - Check for duplicate included header files'
|
||||||
@echo ' export_report - List the usages of all exported symbols'
|
@echo ' export_report - List the usages of all exported symbols'
|
||||||
@echo ' headers_check - Sanity check on exported headers'
|
@echo ' headers_check - Sanity check on exported headers'
|
||||||
@echo ' headerdep - Detect inclusion cycles in headers'; \
|
@echo ' headerdep - Detect inclusion cycles in headers'
|
||||||
echo ''
|
@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
|
||||||
|
@echo ''
|
||||||
@echo 'Kernel packaging:'
|
@echo 'Kernel packaging:'
|
||||||
@$(MAKE) $(build)=$(package-dir) help
|
@$(MAKE) $(build)=$(package-dir) help
|
||||||
@echo ''
|
@echo ''
|
||||||
@ -1369,6 +1380,9 @@ versioncheck:
|
|||||||
-name '*.[hcS]' -type f -print | sort \
|
-name '*.[hcS]' -type f -print | sort \
|
||||||
| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
|
| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
|
||||||
|
|
||||||
|
coccicheck:
|
||||||
|
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
|
||||||
|
|
||||||
namespacecheck:
|
namespacecheck:
|
||||||
$(PERL) $(srctree)/scripts/namespace.pl
|
$(PERL) $(srctree)/scripts/namespace.pl
|
||||||
|
|
||||||
@ -1393,9 +1407,9 @@ checkstack:
|
|||||||
$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
|
$(OBJDUMP) -d vmlinux $$(find . -name '*.ko') | \
|
||||||
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
||||||
|
|
||||||
kernelrelease:
|
kernelrelease: include/config/kernel.release
|
||||||
$(if $(wildcard include/config/kernel.release), $(Q)echo $(KERNELRELEASE), \
|
@echo $(KERNELRELEASE)
|
||||||
$(error kernelrelease not valid - run 'make prepare' to update it))
|
|
||||||
kernelversion:
|
kernelversion:
|
||||||
@echo $(KERNELVERSION)
|
@echo $(KERNELVERSION)
|
||||||
|
|
||||||
@ -1472,6 +1486,7 @@ cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \
|
|||||||
$(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
|
$(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
|
||||||
|
|
||||||
a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
|
a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
|
||||||
|
$(KBUILD_AFLAGS_KERNEL) \
|
||||||
$(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \
|
$(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \
|
||||||
$(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
|
$(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
|
||||||
|
|
||||||
|
@ -636,6 +636,7 @@ config ARCH_S3C2410
|
|||||||
select ARCH_HAS_CPUFREQ
|
select ARCH_HAS_CPUFREQ
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
|
select HAVE_S3C2410_I2C
|
||||||
help
|
help
|
||||||
Samsung S3C2410X CPU based systems, such as the Simtec Electronics
|
Samsung S3C2410X CPU based systems, such as the Simtec Electronics
|
||||||
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
|
BAST (<http://www.simtec.co.uk/products/EB110ITX/>), the IPAQ 1940 or
|
||||||
@ -665,6 +666,8 @@ config ARCH_S3C64XX
|
|||||||
select S3C_DEV_NAND
|
select S3C_DEV_NAND
|
||||||
select USB_ARCH_HAS_OHCI
|
select USB_ARCH_HAS_OHCI
|
||||||
select SAMSUNG_GPIOLIB_4BIT
|
select SAMSUNG_GPIOLIB_4BIT
|
||||||
|
select HAVE_S3C2410_I2C
|
||||||
|
select HAVE_S3C2410_WATCHDOG
|
||||||
help
|
help
|
||||||
Samsung S3C64XX series based systems
|
Samsung S3C64XX series based systems
|
||||||
|
|
||||||
@ -673,7 +676,10 @@ config ARCH_S5P6440
|
|||||||
select CPU_V6
|
select CPU_V6
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
|
select HAVE_S3C2410_WATCHDOG
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
|
select HAVE_S3C2410_I2C
|
||||||
|
select HAVE_S3C_RTC
|
||||||
help
|
help
|
||||||
Samsung S5P6440 CPU based systems
|
Samsung S5P6440 CPU based systems
|
||||||
|
|
||||||
@ -683,6 +689,7 @@ config ARCH_S5P6442
|
|||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
|
select HAVE_S3C2410_WATCHDOG
|
||||||
help
|
help
|
||||||
Samsung S5P6442 CPU based systems
|
Samsung S5P6442 CPU based systems
|
||||||
|
|
||||||
@ -693,6 +700,9 @@ config ARCH_S5PC100
|
|||||||
select CPU_V7
|
select CPU_V7
|
||||||
select ARM_L1_CACHE_SHIFT_6
|
select ARM_L1_CACHE_SHIFT_6
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
|
select HAVE_S3C2410_I2C
|
||||||
|
select HAVE_S3C_RTC
|
||||||
|
select HAVE_S3C2410_WATCHDOG
|
||||||
help
|
help
|
||||||
Samsung S5PC100 series based systems
|
Samsung S5PC100 series based systems
|
||||||
|
|
||||||
@ -703,9 +713,21 @@ config ARCH_S5PV210
|
|||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select ARM_L1_CACHE_SHIFT_6
|
select ARM_L1_CACHE_SHIFT_6
|
||||||
select ARCH_USES_GETTIMEOFFSET
|
select ARCH_USES_GETTIMEOFFSET
|
||||||
|
select HAVE_S3C2410_I2C
|
||||||
|
select HAVE_S3C_RTC
|
||||||
|
select HAVE_S3C2410_WATCHDOG
|
||||||
help
|
help
|
||||||
Samsung S5PV210/S5PC110 series based systems
|
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
|
config ARCH_SHARK
|
||||||
bool "Shark"
|
bool "Shark"
|
||||||
select CPU_SA110
|
select CPU_SA110
|
||||||
@ -907,6 +929,8 @@ source "arch/arm/mach-s5pc100/Kconfig"
|
|||||||
|
|
||||||
source "arch/arm/mach-s5pv210/Kconfig"
|
source "arch/arm/mach-s5pv210/Kconfig"
|
||||||
|
|
||||||
|
source "arch/arm/mach-s5pv310/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-shmobile/Kconfig"
|
source "arch/arm/mach-shmobile/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/plat-stmp3xxx/Kconfig"
|
source "arch/arm/plat-stmp3xxx/Kconfig"
|
||||||
@ -1098,10 +1122,11 @@ config SMP
|
|||||||
bool "Symmetric Multi-Processing (EXPERIMENTAL)"
|
bool "Symmetric Multi-Processing (EXPERIMENTAL)"
|
||||||
depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\
|
depends on EXPERIMENTAL && (REALVIEW_EB_ARM11MP || REALVIEW_EB_A9MP ||\
|
||||||
MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
|
MACH_REALVIEW_PB11MP || MACH_REALVIEW_PBX || ARCH_OMAP4 ||\
|
||||||
ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
|
ARCH_U8500 || ARCH_VEXPRESS_CA9X4 || ARCH_S5PV310)
|
||||||
depends on GENERIC_CLOCKEVENTS
|
depends on GENERIC_CLOCKEVENTS
|
||||||
select USE_GENERIC_SMP_HELPERS
|
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
|
help
|
||||||
This enables support for systems with more than one CPU. If you have
|
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
|
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"
|
bool "Use local timer interrupts"
|
||||||
depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \
|
depends on SMP && (REALVIEW_EB_ARM11MP || MACH_REALVIEW_PB11MP || \
|
||||||
REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
|
REALVIEW_EB_A9MP || MACH_REALVIEW_PBX || ARCH_OMAP4 || \
|
||||||
ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
|
ARCH_S5PV310 || ARCH_U8500 || ARCH_VEXPRESS_CA9X4)
|
||||||
default y
|
select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_OMAP4 || ARCH_S5PV310 || \
|
||||||
select HAVE_ARM_TWD if (ARCH_REALVIEW || ARCH_VEXPRESS || ARCH_OMAP4 || ARCH_U8500)
|
ARCH_U8500 || ARCH_VEXPRESS)
|
||||||
help
|
help
|
||||||
Enable support for local timers on SMP platforms, rather then the
|
Enable support for local timers on SMP platforms, rather then the
|
||||||
legacy IPI broadcast method. Local timers allows the system
|
legacy IPI broadcast method. Local timers allows the system
|
||||||
@ -1184,7 +1209,8 @@ source kernel/Kconfig.preempt
|
|||||||
|
|
||||||
config HZ
|
config HZ
|
||||||
int
|
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 OMAP_32K_TIMER_HZ if ARCH_OMAP && OMAP_32K_TIMER
|
||||||
default AT91_TIMER_HZ if ARCH_AT91
|
default AT91_TIMER_HZ if ARCH_AT91
|
||||||
default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE
|
default SHMOBILE_TIMER_HZ if ARCH_SHMOBILE
|
||||||
|
@ -174,6 +174,7 @@ machine-$(CONFIG_ARCH_S5P6440) := s5p6440
|
|||||||
machine-$(CONFIG_ARCH_S5P6442) := s5p6442
|
machine-$(CONFIG_ARCH_S5P6442) := s5p6442
|
||||||
machine-$(CONFIG_ARCH_S5PC100) := s5pc100
|
machine-$(CONFIG_ARCH_S5PC100) := s5pc100
|
||||||
machine-$(CONFIG_ARCH_S5PV210) := s5pv210
|
machine-$(CONFIG_ARCH_S5PV210) := s5pv210
|
||||||
|
machine-$(CONFIG_ARCH_S5PV310) := s5pv310
|
||||||
machine-$(CONFIG_ARCH_SA1100) := sa1100
|
machine-$(CONFIG_ARCH_SA1100) := sa1100
|
||||||
machine-$(CONFIG_ARCH_SHARK) := shark
|
machine-$(CONFIG_ARCH_SHARK) := shark
|
||||||
machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
|
machine-$(CONFIG_ARCH_SHMOBILE) := shmobile
|
||||||
|
@ -33,7 +33,7 @@ ifeq ($(CONFIG_CPU_XSCALE),y)
|
|||||||
OBJS += head-xscale.o
|
OBJS += head-xscale.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_PXA_SHARPSL),y)
|
ifeq ($(CONFIG_PXA_SHARPSL_DETECT_MACH_ID),y)
|
||||||
OBJS += head-sharpsl.o
|
OBJS += head-sharpsl.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -263,14 +263,6 @@ static int it8152_pci_platform_notify_remove(struct device *dev)
|
|||||||
return 0;
|
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)
|
int __init it8152_pci_setup(int nr, struct pci_sys_data *sys)
|
||||||
{
|
{
|
||||||
it8152_io.start = IT8152_IO_BASE + 0x12000;
|
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_BLK_DEV_BSG is not set
|
||||||
CONFIG_ARCH_S5PV210=y
|
CONFIG_ARCH_S5PV210=y
|
||||||
CONFIG_S3C_LOWLEVEL_UART_PORT=1
|
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_MACH_SMDKV210=y
|
||||||
CONFIG_VMSPLIT_2G=y
|
CONFIG_VMSPLIT_2G=y
|
||||||
CONFIG_PREEMPT=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.
|
* 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);
|
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.
|
* The DMA API, implemented by dmabounce.c. See below for descriptions.
|
||||||
|
@ -22,18 +22,23 @@
|
|||||||
#define SCOOP_GPWR 0x24
|
#define SCOOP_GPWR 0x24
|
||||||
#define SCOOP_GPRR 0x28
|
#define SCOOP_GPRR 0x28
|
||||||
|
|
||||||
#define SCOOP_GPCR_PA22 ( 1 << 12 )
|
#define SCOOP_CPR_OUT (1 << 7)
|
||||||
#define SCOOP_GPCR_PA21 ( 1 << 11 )
|
#define SCOOP_CPR_SD_3V (1 << 2)
|
||||||
#define SCOOP_GPCR_PA20 ( 1 << 10 )
|
#define SCOOP_CPR_CF_XV (1 << 1)
|
||||||
#define SCOOP_GPCR_PA19 ( 1 << 9 )
|
#define SCOOP_CPR_CF_3V (1 << 0)
|
||||||
#define SCOOP_GPCR_PA18 ( 1 << 8 )
|
|
||||||
#define SCOOP_GPCR_PA17 ( 1 << 7 )
|
#define SCOOP_GPCR_PA22 (1 << 12)
|
||||||
#define SCOOP_GPCR_PA16 ( 1 << 6 )
|
#define SCOOP_GPCR_PA21 (1 << 11)
|
||||||
#define SCOOP_GPCR_PA15 ( 1 << 5 )
|
#define SCOOP_GPCR_PA20 (1 << 10)
|
||||||
#define SCOOP_GPCR_PA14 ( 1 << 4 )
|
#define SCOOP_GPCR_PA19 (1 << 9)
|
||||||
#define SCOOP_GPCR_PA13 ( 1 << 3 )
|
#define SCOOP_GPCR_PA18 (1 << 8)
|
||||||
#define SCOOP_GPCR_PA12 ( 1 << 2 )
|
#define SCOOP_GPCR_PA17 (1 << 7)
|
||||||
#define SCOOP_GPCR_PA11 ( 1 << 1 )
|
#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 {
|
struct scoop_config {
|
||||||
unsigned short io_out;
|
unsigned short io_out;
|
||||||
|
@ -70,11 +70,11 @@ extern int kgdb_fault_expected;
|
|||||||
#define _GP_REGS 16
|
#define _GP_REGS 16
|
||||||
#define _FP_REGS 8
|
#define _FP_REGS 8
|
||||||
#define _EXTRA_REGS 2
|
#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 KGDB_MAX_NO_CPUS 1
|
||||||
#define BUFMAX 400
|
#define BUFMAX 400
|
||||||
#define NUMREGBYTES (GDB_MAX_REGS << 2)
|
#define NUMREGBYTES (DBG_MAX_REG_NUM << 2)
|
||||||
#define NUMCRITREGBYTES (32 << 2)
|
#define NUMCRITREGBYTES (32 << 2)
|
||||||
|
|
||||||
#define _R0 0
|
#define _R0 0
|
||||||
@ -93,7 +93,7 @@ extern int kgdb_fault_expected;
|
|||||||
#define _SPT 13
|
#define _SPT 13
|
||||||
#define _LR 14
|
#define _LR 14
|
||||||
#define _PC 15
|
#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,
|
* So that we can denote the end of a frame for tracing,
|
||||||
|
@ -10,57 +10,62 @@
|
|||||||
* Deepak Saxena <dsaxena@plexity.net>
|
* Deepak Saxena <dsaxena@plexity.net>
|
||||||
*/
|
*/
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
|
#include <linux/kdebug.h>
|
||||||
#include <linux/kgdb.h>
|
#include <linux/kgdb.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
/* Make a local copy of the registers passed into the handler (bletch) */
|
struct dbg_reg_def_t dbg_reg_def[DBG_MAX_REG_NUM] =
|
||||||
void pt_regs_to_gdb_regs(unsigned long *gdb_regs, struct pt_regs *kernel_regs)
|
|
||||||
{
|
{
|
||||||
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. */
|
char *dbg_get_reg(int regno, void *mem, struct pt_regs *regs)
|
||||||
for (regno = 0; regno < GDB_MAX_REGS; regno++)
|
{
|
||||||
gdb_regs[regno] = 0;
|
if (regno >= DBG_MAX_REG_NUM || regno < 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
gdb_regs[_R0] = kernel_regs->ARM_r0;
|
if (dbg_reg_def[regno].offset != -1)
|
||||||
gdb_regs[_R1] = kernel_regs->ARM_r1;
|
memcpy(mem, (void *)regs + dbg_reg_def[regno].offset,
|
||||||
gdb_regs[_R2] = kernel_regs->ARM_r2;
|
dbg_reg_def[regno].size);
|
||||||
gdb_regs[_R3] = kernel_regs->ARM_r3;
|
else
|
||||||
gdb_regs[_R4] = kernel_regs->ARM_r4;
|
memset(mem, 0, dbg_reg_def[regno].size);
|
||||||
gdb_regs[_R5] = kernel_regs->ARM_r5;
|
return dbg_reg_def[regno].name;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Copy local gdb registers back to kgdb regs, for later copy to kernel */
|
int dbg_set_reg(int regno, void *mem, struct pt_regs *regs)
|
||||||
void gdb_regs_to_pt_regs(unsigned long *gdb_regs, struct pt_regs *kernel_regs)
|
|
||||||
{
|
{
|
||||||
kernel_regs->ARM_r0 = gdb_regs[_R0];
|
if (regno >= DBG_MAX_REG_NUM || regno < 0)
|
||||||
kernel_regs->ARM_r1 = gdb_regs[_R1];
|
return -EINVAL;
|
||||||
kernel_regs->ARM_r2 = gdb_regs[_R2];
|
|
||||||
kernel_regs->ARM_r3 = gdb_regs[_R3];
|
if (dbg_reg_def[regno].offset != -1)
|
||||||
kernel_regs->ARM_r4 = gdb_regs[_R4];
|
memcpy((void *)regs + dbg_reg_def[regno].offset, mem,
|
||||||
kernel_regs->ARM_r5 = gdb_regs[_R5];
|
dbg_reg_def[regno].size);
|
||||||
kernel_regs->ARM_r6 = gdb_regs[_R6];
|
return 0;
|
||||||
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];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@ -176,6 +181,33 @@ void kgdb_roundup_cpus(unsigned long flags)
|
|||||||
local_irq_disable();
|
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.
|
* 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 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_brkpt_hook);
|
||||||
register_undef_hook(&kgdb_compiled_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_brkpt_hook);
|
||||||
unregister_undef_hook(&kgdb_compiled_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")
|
MACHINE_START(ASPENITE, "PXA168-based Aspenite Development Platform")
|
||||||
.phys_io = APB_PHYS_BASE,
|
.phys_io = APB_PHYS_BASE,
|
||||||
.boot_params = 0x00000100,
|
|
||||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||||
.map_io = pxa_map_io,
|
.map_io = mmp_map_io,
|
||||||
.init_irq = pxa168_init_irq,
|
.init_irq = pxa168_init_irq,
|
||||||
.timer = &pxa168_timer,
|
.timer = &pxa168_timer,
|
||||||
.init_machine = common_init,
|
.init_machine = common_init,
|
||||||
@ -160,9 +159,8 @@ MACHINE_END
|
|||||||
|
|
||||||
MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform")
|
MACHINE_START(ZYLONITE2, "PXA168-based Zylonite2 Development Platform")
|
||||||
.phys_io = APB_PHYS_BASE,
|
.phys_io = APB_PHYS_BASE,
|
||||||
.boot_params = 0x00000100,
|
|
||||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||||
.map_io = pxa_map_io,
|
.map_io = mmp_map_io,
|
||||||
.init_irq = pxa168_init_irq,
|
.init_irq = pxa168_init_irq,
|
||||||
.timer = &pxa168_timer,
|
.timer = &pxa168_timer,
|
||||||
.init_machine = common_init,
|
.init_machine = common_init,
|
||||||
|
@ -42,9 +42,8 @@ static void __init avengers_lite_init(void)
|
|||||||
|
|
||||||
MACHINE_START(AVENGERS_LITE, "PXA168 Avengers lite Development Platform")
|
MACHINE_START(AVENGERS_LITE, "PXA168 Avengers lite Development Platform")
|
||||||
.phys_io = APB_PHYS_BASE,
|
.phys_io = APB_PHYS_BASE,
|
||||||
.boot_params = 0x00000100,
|
|
||||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||||
.map_io = pxa_map_io,
|
.map_io = mmp_map_io,
|
||||||
.init_irq = pxa168_init_irq,
|
.init_irq = pxa168_init_irq,
|
||||||
.timer = &pxa168_timer,
|
.timer = &pxa168_timer,
|
||||||
.init_machine = avengers_lite_init,
|
.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));
|
iotable_init(standard_io_desc, ARRAY_SIZE(standard_io_desc));
|
||||||
}
|
}
|
||||||
|
@ -3,15 +3,6 @@
|
|||||||
struct sys_timer;
|
struct sys_timer;
|
||||||
|
|
||||||
extern void timer_init(int irq);
|
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 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")
|
MACHINE_START(FLINT, "Flint Development Platform")
|
||||||
.phys_io = APB_PHYS_BASE,
|
.phys_io = APB_PHYS_BASE,
|
||||||
.boot_params = 0x00000100,
|
|
||||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||||
.map_io = pxa_map_io,
|
.map_io = mmp_map_io,
|
||||||
.init_irq = mmp2_init_irq,
|
.init_irq = mmp2_init_irq,
|
||||||
.timer = &mmp2_timer,
|
.timer = &mmp2_timer,
|
||||||
.init_machine = flint_init,
|
.init_machine = flint_init,
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
#ifndef __MACH_DEVICE_H
|
||||||
|
#define __MACH_DEVICE_H
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
|
||||||
#define MAX_RESOURCE_DMA 2
|
#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);
|
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
|
#ifndef __ASM_MACH_MMP2_H
|
||||||
#define __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 <linux/i2c.h>
|
||||||
#include <mach/devices.h>
|
#include <mach/devices.h>
|
||||||
#include <plat/i2c.h>
|
#include <plat/i2c.h>
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
#ifndef __ASM_MACH_PXA168_H
|
#ifndef __ASM_MACH_PXA168_H
|
||||||
#define __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 <linux/i2c.h>
|
||||||
#include <mach/devices.h>
|
#include <mach/devices.h>
|
||||||
#include <plat/i2c.h>
|
#include <plat/i2c.h>
|
||||||
|
@ -1,6 +1,11 @@
|
|||||||
#ifndef __ASM_MACH_PXA910_H
|
#ifndef __ASM_MACH_PXA910_H
|
||||||
#define __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 <linux/i2c.h>
|
||||||
#include <mach/devices.h>
|
#include <mach/devices.h>
|
||||||
#include <plat/i2c.h>
|
#include <plat/i2c.h>
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <mach/regs-icu.h>
|
#include <mach/regs-icu.h>
|
||||||
|
#include <mach/mmp2.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
@ -135,9 +135,8 @@ static void __init jasper_init(void)
|
|||||||
|
|
||||||
MACHINE_START(MARVELL_JASPER, "Jasper Development Platform")
|
MACHINE_START(MARVELL_JASPER, "Jasper Development Platform")
|
||||||
.phys_io = APB_PHYS_BASE,
|
.phys_io = APB_PHYS_BASE,
|
||||||
.boot_params = 0x00000100,
|
|
||||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||||
.map_io = pxa_map_io,
|
.map_io = mmp_map_io,
|
||||||
.init_irq = mmp2_init_irq,
|
.init_irq = mmp2_init_irq,
|
||||||
.timer = &mmp2_timer,
|
.timer = &mmp2_timer,
|
||||||
.init_machine = jasper_init,
|
.init_machine = jasper_init,
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <asm/hardware/cache-tauros2.h>
|
#include <asm/hardware/cache-tauros2.h>
|
||||||
|
|
||||||
|
#include <asm/mach/time.h>
|
||||||
#include <mach/addr-map.h>
|
#include <mach/addr-map.h>
|
||||||
#include <mach/regs-apbc.h>
|
#include <mach/regs-apbc.h>
|
||||||
#include <mach/regs-apmu.h>
|
#include <mach/regs-apmu.h>
|
||||||
@ -26,6 +27,7 @@
|
|||||||
#include <mach/mfp.h>
|
#include <mach/mfp.h>
|
||||||
#include <mach/gpio.h>
|
#include <mach/gpio.h>
|
||||||
#include <mach/devices.h>
|
#include <mach/devices.h>
|
||||||
|
#include <mach/mmp2.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
@ -158,6 +160,26 @@ static int __init mmp2_init(void)
|
|||||||
}
|
}
|
||||||
postcore_initcall(mmp2_init);
|
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 */
|
/* on-chip devices */
|
||||||
MMP2_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4030000, 0x30, 4, 5);
|
MMP2_DEVICE(uart1, "pxa2xx-uart", 0, UART1, 0xd4030000, 0x30, 4, 5);
|
||||||
MMP2_DEVICE(uart2, "pxa2xx-uart", 1, UART2, 0xd4017000, 0x30, 20, 21);
|
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)")
|
MACHINE_START(TAVOREVB, "PXA910 Evaluation Board (aka TavorEVB)")
|
||||||
.phys_io = APB_PHYS_BASE,
|
.phys_io = APB_PHYS_BASE,
|
||||||
.boot_params = 0x00000100,
|
|
||||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||||
.map_io = pxa_map_io,
|
.map_io = mmp_map_io,
|
||||||
.init_irq = pxa910_init_irq,
|
.init_irq = pxa910_init_irq,
|
||||||
.timer = &pxa910_timer,
|
.timer = &pxa910_timer,
|
||||||
.init_machine = tavorevb_init,
|
.init_machine = tavorevb_init,
|
||||||
|
@ -200,24 +200,3 @@ void __init timer_init(int irq)
|
|||||||
clocksource_register(&cksrc);
|
clocksource_register(&cksrc);
|
||||||
clockevents_register_device(&ckevt);
|
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")
|
MACHINE_START(TTC_DKB, "PXA910-based TTC_DKB Development Platform")
|
||||||
.phys_io = APB_PHYS_BASE,
|
.phys_io = APB_PHYS_BASE,
|
||||||
.boot_params = 0x00000100,
|
|
||||||
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
.io_pg_offst = (APB_VIRT_BASE >> 18) & 0xfffc,
|
||||||
.map_io = pxa_map_io,
|
.map_io = mmp_map_io,
|
||||||
.init_irq = pxa910_init_irq,
|
.init_irq = pxa910_init_irq,
|
||||||
.timer = &pxa910_timer,
|
.timer = &pxa910_timer,
|
||||||
.init_machine = ttc_dkb_init,
|
.init_machine = ttc_dkb_init,
|
||||||
|
@ -238,6 +238,17 @@ config MACH_COLIBRI
|
|||||||
bool "Toradex Colibri PXA270"
|
bool "Toradex Colibri PXA270"
|
||||||
select PXA27x
|
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
|
config MACH_COLIBRI300
|
||||||
bool "Toradex Colibri PXA300/310"
|
bool "Toradex Colibri PXA300/310"
|
||||||
select PXA3xx
|
select PXA3xx
|
||||||
@ -336,6 +347,9 @@ config ARCH_PXA_PALM
|
|||||||
bool "PXA based Palm PDAs"
|
bool "PXA based Palm PDAs"
|
||||||
select HAVE_PWM
|
select HAVE_PWM
|
||||||
|
|
||||||
|
config MACH_PALM27X
|
||||||
|
bool
|
||||||
|
|
||||||
config MACH_PALMTE2
|
config MACH_PALMTE2
|
||||||
bool "Palm Tungsten|E2"
|
bool "Palm Tungsten|E2"
|
||||||
default y
|
default y
|
||||||
@ -360,6 +374,7 @@ config MACH_PALMT5
|
|||||||
depends on ARCH_PXA_PALM
|
depends on ARCH_PXA_PALM
|
||||||
select PXA27x
|
select PXA27x
|
||||||
select IWMMXT
|
select IWMMXT
|
||||||
|
select MACH_PALM27X
|
||||||
help
|
help
|
||||||
Say Y here if you intend to run this kernel on a Palm Tungsten|T5
|
Say Y here if you intend to run this kernel on a Palm Tungsten|T5
|
||||||
handheld computer.
|
handheld computer.
|
||||||
@ -370,6 +385,7 @@ config MACH_PALMTX
|
|||||||
depends on ARCH_PXA_PALM
|
depends on ARCH_PXA_PALM
|
||||||
select PXA27x
|
select PXA27x
|
||||||
select IWMMXT
|
select IWMMXT
|
||||||
|
select MACH_PALM27X
|
||||||
help
|
help
|
||||||
Say Y here if you intend to run this kernel on a Palm T|X
|
Say Y here if you intend to run this kernel on a Palm T|X
|
||||||
handheld computer.
|
handheld computer.
|
||||||
@ -380,6 +396,7 @@ config MACH_PALMZ72
|
|||||||
depends on ARCH_PXA_PALM
|
depends on ARCH_PXA_PALM
|
||||||
select PXA27x
|
select PXA27x
|
||||||
select IWMMXT
|
select IWMMXT
|
||||||
|
select MACH_PALM27X
|
||||||
help
|
help
|
||||||
Say Y here if you intend to run this kernel on Palm Zire 72
|
Say Y here if you intend to run this kernel on Palm Zire 72
|
||||||
handheld computer.
|
handheld computer.
|
||||||
@ -390,6 +407,7 @@ config MACH_PALMLD
|
|||||||
depends on ARCH_PXA_PALM
|
depends on ARCH_PXA_PALM
|
||||||
select PXA27x
|
select PXA27x
|
||||||
select IWMMXT
|
select IWMMXT
|
||||||
|
select MACH_PALM27X
|
||||||
help
|
help
|
||||||
Say Y here if you intend to run this kernel on a Palm LifeDrive
|
Say Y here if you intend to run this kernel on a Palm LifeDrive
|
||||||
handheld computer.
|
handheld computer.
|
||||||
@ -447,16 +465,13 @@ config PXA_SHARPSL
|
|||||||
SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
|
SL-C3000 (Spitz), SL-C3100 (Borzoi) or SL-C6000x (Tosa)
|
||||||
handheld computer.
|
handheld computer.
|
||||||
|
|
||||||
config SHARPSL_PM
|
config PXA_SHARPSL_DETECT_MACH_ID
|
||||||
bool
|
bool "Detect machine ID at run-time in the decompressor"
|
||||||
select APM_EMULATION
|
depends on PXA_SHARPSL
|
||||||
select SHARPSL_PM_MAX1111
|
help
|
||||||
|
Say Y here if you want the zImage decompressor to detect
|
||||||
config SHARPSL_PM_MAX1111
|
the Zaurus machine ID at run-time. For latest kexec-based
|
||||||
bool
|
boot loader, this is not necessary.
|
||||||
depends on !CORGI_SSP_DEPRECATED
|
|
||||||
select HWMON
|
|
||||||
select SENSORS_MAX1111
|
|
||||||
|
|
||||||
config MACH_POODLE
|
config MACH_POODLE
|
||||||
bool "Enable Sharp SL-5600 (Poodle) Support"
|
bool "Enable Sharp SL-5600 (Poodle) Support"
|
||||||
@ -510,6 +525,25 @@ config MACH_TOSA
|
|||||||
select PXA25x
|
select PXA25x
|
||||||
select PXA_HAVE_BOARD_IRQS
|
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
|
config MACH_ICONTROL
|
||||||
bool "TMT iControl/SafeTCam based on the MXM-8x10 CoM"
|
bool "TMT iControl/SafeTCam based on the MXM-8x10 CoM"
|
||||||
select CPU_PXA320
|
select CPU_PXA320
|
||||||
@ -648,25 +682,15 @@ config PXA_SHARP_Cxx00
|
|||||||
help
|
help
|
||||||
Enable common support for Sharp Cxx00 models
|
Enable common support for Sharp Cxx00 models
|
||||||
|
|
||||||
config TOSA_BT
|
config SHARPSL_PM
|
||||||
tristate "Control the state of built-in bluetooth chip on Sharp SL-6000"
|
bool
|
||||||
depends on MACH_TOSA
|
select APM_EMULATION
|
||||||
select RFKILL
|
select SHARPSL_PM_MAX1111
|
||||||
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_MAX1111
|
||||||
|
bool
|
||||||
|
select HWMON
|
||||||
|
select SENSORS_MAX1111
|
||||||
|
|
||||||
config PXA_HAVE_BOARD_IRQS
|
config PXA_HAVE_BOARD_IRQS
|
||||||
bool
|
bool
|
||||||
|
@ -51,14 +51,16 @@ obj-$(CONFIG_MACH_CAPC7117) += capc7117.o mxm8x10.o
|
|||||||
obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o
|
obj-$(CONFIG_ARCH_GUMSTIX) += gumstix.o
|
||||||
obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o
|
obj-$(CONFIG_GUMSTIX_AM200EPD) += am200epd.o
|
||||||
obj-$(CONFIG_GUMSTIX_AM300EPD) += am300epd.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_STARGATE2) += stargate2.o
|
||||||
obj-$(CONFIG_MACH_XCEP) += xcep.o
|
obj-$(CONFIG_MACH_XCEP) += xcep.o
|
||||||
obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o
|
obj-$(CONFIG_MACH_TRIZEPS4) += trizeps4.o
|
||||||
obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o
|
obj-$(CONFIG_MACH_LOGICPD_PXA270) += lpd270.o
|
||||||
obj-$(CONFIG_MACH_PCM027) += pcm027.o
|
obj-$(CONFIG_MACH_PCM027) += pcm027.o
|
||||||
obj-$(CONFIG_MACH_PCM990_BASEBOARD) += pcm990-baseboard.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_COLIBRI300) += colibri-pxa3xx.o colibri-pxa300.o
|
||||||
obj-$(CONFIG_MACH_COLIBRI320) += colibri-pxa3xx.o colibri-pxa320.o
|
obj-$(CONFIG_MACH_COLIBRI320) += colibri-pxa3xx.o colibri-pxa320.o
|
||||||
obj-$(CONFIG_MACH_VPAC270) += vpac270.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_MP900C) += mp900.o
|
||||||
obj-$(CONFIG_MACH_PALMTE2) += palmte2.o
|
obj-$(CONFIG_MACH_PALMTE2) += palmte2.o
|
||||||
obj-$(CONFIG_MACH_PALMTC) += palmtc.o
|
obj-$(CONFIG_MACH_PALMTC) += palmtc.o
|
||||||
|
obj-$(CONFIG_MACH_PALM27X) += palm27x.o
|
||||||
obj-$(CONFIG_MACH_PALMT5) += palmt5.o
|
obj-$(CONFIG_MACH_PALMT5) += palmt5.o
|
||||||
obj-$(CONFIG_MACH_PALMTX) += palmtx.o
|
obj-$(CONFIG_MACH_PALMTX) += palmtx.o
|
||||||
obj-$(CONFIG_MACH_PALMZ72) += palmz72.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_TOSA) += tosa.o
|
||||||
obj-$(CONFIG_MACH_ICONTROL) += icontrol.o mxm8x10.o
|
obj-$(CONFIG_MACH_ICONTROL) += icontrol.o mxm8x10.o
|
||||||
obj-$(CONFIG_ARCH_PXA_ESERIES) += eseries.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_RC) += raumfeld.o
|
||||||
obj-$(CONFIG_MACH_RAUMFELD_CONNECTOR) += raumfeld.o
|
obj-$(CONFIG_MACH_RAUMFELD_CONNECTOR) += raumfeld.o
|
||||||
obj-$(CONFIG_MACH_RAUMFELD_SPEAKER) += raumfeld.o
|
obj-$(CONFIG_MACH_RAUMFELD_SPEAKER) += raumfeld.o
|
||||||
|
@ -22,9 +22,14 @@
|
|||||||
#include <linux/fb.h>
|
#include <linux/fb.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
|
#include <linux/ucb1400.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/types.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/setup.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
@ -51,6 +56,59 @@
|
|||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.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_irq_enabled;
|
||||||
|
|
||||||
static unsigned long balloon3_features_present =
|
static unsigned long balloon3_features_present =
|
||||||
@ -73,6 +131,321 @@ int __init parse_balloon3_features(char *arg)
|
|||||||
}
|
}
|
||||||
early_param("balloon3_features", parse_balloon3_features);
|
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)
|
static void balloon3_mask_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
int balloon3_irq = (irq - BALLOON3_IRQ(0));
|
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) &
|
unsigned long pending = __raw_readl(BALLOON3_INT_CONTROL_REG) &
|
||||||
balloon3_irq_enabled;
|
balloon3_irq_enabled;
|
||||||
|
|
||||||
do {
|
do {
|
||||||
/* clear useless edge notification */
|
/* clear useless edge notification */
|
||||||
if (desc->chip->ack)
|
if (desc->chip->ack)
|
||||||
@ -132,201 +504,259 @@ static void __init balloon3_init_irq(void)
|
|||||||
"enabled\n", __func__, BALLOON3_AUX_NIRQ);
|
"enabled\n", __func__, BALLOON3_AUX_NIRQ);
|
||||||
}
|
}
|
||||||
|
|
||||||
static unsigned long balloon3_ac97_pin_config[] = {
|
/******************************************************************************
|
||||||
GPIO28_AC97_BITCLK,
|
* GPIO expander
|
||||||
GPIO29_AC97_SDATA_IN_0,
|
******************************************************************************/
|
||||||
GPIO30_AC97_SDATA_OUT,
|
#if defined(CONFIG_GPIO_PCF857X) || defined(CONFIG_GPIO_PCF857X_MODULE)
|
||||||
GPIO31_AC97_SYNC,
|
static struct pcf857x_platform_data balloon3_pcf857x_pdata = {
|
||||||
GPIO113_AC97_nRESET,
|
.gpio_base = BALLOON3_PCF_GPIO_BASE,
|
||||||
|
.n_latch = 0,
|
||||||
|
.setup = NULL,
|
||||||
|
.teardown = NULL,
|
||||||
|
.context = NULL,
|
||||||
};
|
};
|
||||||
|
|
||||||
static void balloon3_backlight_power(int on)
|
static struct i2c_board_info __initdata balloon3_i2c_devs[] = {
|
||||||
{
|
|
||||||
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[] = {
|
|
||||||
{
|
{
|
||||||
.pixclock = 38000,
|
I2C_BOARD_INFO("pcf8574a", 0x38),
|
||||||
.xres = 480,
|
.platform_data = &balloon3_pcf857x_pdata,
|
||||||
.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_pxafb_info = {
|
static void __init balloon3_i2c_init(void)
|
||||||
.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)
|
|
||||||
{
|
{
|
||||||
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__);
|
* NAND
|
||||||
/* FIXME something to prod here? */
|
******************************************************************************/
|
||||||
} else {
|
#if defined(CONFIG_MTD_NAND_PLATFORM)||defined(CONFIG_MTD_NAND_PLATFORM_MODULE)
|
||||||
pr_debug("%s: off\n", __func__);
|
static uint16_t balloon3_ctl =
|
||||||
/* FIXME something to prod here? */
|
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 = {
|
static void balloon3_nand_select_chip(struct mtd_info *mtd, int chip)
|
||||||
.ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
|
{
|
||||||
.setpower = balloon3_mci_setpower,
|
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)
|
static const char *balloon3_part_probes[] = { "cmdlinepart", NULL };
|
||||||
{
|
|
||||||
pr_debug("%s: udc connected\n", __func__);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void balloon3_udc_command(int cmd)
|
struct platform_nand_data balloon3_nand_pdata = {
|
||||||
{
|
.chip = {
|
||||||
switch (cmd) {
|
.nr_chips = 4,
|
||||||
case PXA2XX_UDC_CMD_CONNECT:
|
.chip_offset = 0,
|
||||||
UP2OCR |= (UP2OCR_DPPUE + UP2OCR_DPPUBE);
|
.nr_partitions = ARRAY_SIZE(balloon3_partition_info),
|
||||||
pr_debug("%s: connect\n", __func__);
|
.partitions = balloon3_partition_info,
|
||||||
break;
|
.chip_delay = 50,
|
||||||
case PXA2XX_UDC_CMD_DISCONNECT:
|
.part_probe_types = balloon3_part_probes,
|
||||||
UP2OCR &= ~UP2OCR_DPPUE;
|
},
|
||||||
pr_debug("%s: disconnect\n", __func__);
|
.ctrl = {
|
||||||
break;
|
.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,
|
* Core power regulator
|
||||||
.udc_command = balloon3_udc_command,
|
******************************************************************************/
|
||||||
};
|
#if defined(CONFIG_REGULATOR_MAX1586) || \
|
||||||
|
defined(CONFIG_REGULATOR_MAX1586_MODULE)
|
||||||
static struct pxaficp_platform_data balloon3_ficp_platform_data = {
|
static struct regulator_consumer_supply balloon3_max1587a_consumers[] = {
|
||||||
.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[] = {
|
|
||||||
{
|
{
|
||||||
.name = "balloon3:green:idle",
|
.supply = "vcc_core",
|
||||||
.default_trigger = "heartbeat",
|
}
|
||||||
.gpio = BALLOON3_GPIO_LED_IDLE,
|
};
|
||||||
.active_low = 1,
|
|
||||||
|
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",
|
.name = "vcc_core",
|
||||||
.default_trigger = "nand-disk",
|
.id = MAX1586_V3,
|
||||||
.gpio = BALLOON3_GPIO_LED_NAND,
|
.platform_data = &balloon3_max1587a_v3_info,
|
||||||
.active_low = 1,
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
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 = {
|
static void __init balloon3_pmic_init(void)
|
||||||
.leds = balloon3_gpio_leds,
|
{
|
||||||
.num_leds = ARRAY_SIZE(balloon3_gpio_leds),
|
pxa27x_set_i2c_power_info(NULL);
|
||||||
};
|
i2c_register_board_info(1, ARRAY_AND_SIZE(balloon3_pi2c_board_info));
|
||||||
|
}
|
||||||
static struct platform_device balloon3led_device = {
|
#else
|
||||||
.name = "leds-gpio",
|
static inline void balloon3_pmic_init(void) {}
|
||||||
.id = -1,
|
#endif
|
||||||
.dev = {
|
|
||||||
.platform_data = &balloon3_gpio_leds_platform_data,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
|
/******************************************************************************
|
||||||
|
* Machine init
|
||||||
|
******************************************************************************/
|
||||||
static void __init balloon3_init(void)
|
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;
|
ARB_CNTRL = ARB_CORE_PARK | 0x234;
|
||||||
|
|
||||||
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_pin_config));
|
||||||
|
|
||||||
pxa_set_ffuart_info(NULL);
|
pxa_set_ffuart_info(NULL);
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_info(NULL);
|
pxa_set_stuart_info(NULL);
|
||||||
|
|
||||||
pxa_set_i2c_info(NULL);
|
balloon3_i2c_init();
|
||||||
if (balloon3_has(BALLOON3_FEATURE_AUDIO)) {
|
balloon3_irda_init();
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_ac97_pin_config));
|
balloon3_lcd_init();
|
||||||
pxa_set_ac97_info(NULL);
|
balloon3_leds_init();
|
||||||
}
|
balloon3_mmc_init();
|
||||||
|
balloon3_nand_init();
|
||||||
if (balloon3_has(BALLOON3_FEATURE_TOPPOLY)) {
|
balloon3_nor_init();
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(balloon3_lcd_pin_config));
|
balloon3_pmic_init();
|
||||||
gpio_request(BALLOON3_GPIO_RUN_BACKLIGHT,
|
balloon3_ts_init();
|
||||||
"LCD Backlight Power");
|
balloon3_udc_init();
|
||||||
gpio_direction_output(BALLOON3_GPIO_RUN_BACKLIGHT, 1);
|
balloon3_uhc_init();
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct map_desc balloon3_io_desc[] __initdata = {
|
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);
|
pxa3xx_set_i2c_power_info(&cm_x300_pwr_i2c_info);
|
||||||
i2c_register_board_info(1, &cm_x300_pmic_info, 1);
|
i2c_register_board_info(1, &cm_x300_pmic_info, 1);
|
||||||
|
set_irq_wake(IRQ_WAKEUP0, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void __init cm_x300_init_wi2wi(void)
|
static void __init cm_x300_init_wi2wi(void)
|
||||||
@ -745,9 +746,10 @@ static void __init cm_x300_init(void)
|
|||||||
{
|
{
|
||||||
cm_x300_init_mfp();
|
cm_x300_init_mfp();
|
||||||
|
|
||||||
pxa_set_ffuart_info(NULL);
|
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_info(NULL);
|
pxa_set_stuart_info(NULL);
|
||||||
|
if (cpu_is_pxa300())
|
||||||
|
pxa_set_ffuart_info(NULL);
|
||||||
|
|
||||||
cm_x300_init_da9030();
|
cm_x300_init_da9030();
|
||||||
cm_x300_init_dm9000();
|
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
|
* Support for Toradex PXA270 based Colibri module
|
||||||
* Daniel Mack <daniel@caiaq.de>
|
* Daniel Mack <daniel@caiaq.de>
|
||||||
|
* Marek Vasut <marek.vasut@gmail.com>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* This program is free software; you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License version 2 as
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@ -10,49 +11,55 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
|
||||||
#include <linux/platform_device.h>
|
|
||||||
#include <linux/sysdev.h>
|
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/bitops.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/ioport.h>
|
|
||||||
#include <linux/delay.h>
|
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/platform_device.h>
|
||||||
#include <asm/mach-types.h>
|
#include <linux/sysdev.h>
|
||||||
#include <mach/hardware.h>
|
#include <linux/ucb1400.h>
|
||||||
#include <asm/irq.h>
|
|
||||||
#include <asm/sizes.h>
|
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
#include <asm/mach/map.h>
|
|
||||||
#include <asm/mach/irq.h>
|
|
||||||
#include <asm/mach/flash.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/colibri.h>
|
||||||
|
#include <mach/pxa27x.h>
|
||||||
|
|
||||||
#include "generic.h"
|
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
|
#include "generic.h"
|
||||||
|
|
||||||
/*
|
/******************************************************************************
|
||||||
* GPIO configuration
|
* Pin configuration
|
||||||
*/
|
******************************************************************************/
|
||||||
static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
|
static mfp_cfg_t colibri_pxa270_pin_config[] __initdata = {
|
||||||
|
/* Ethernet */
|
||||||
GPIO78_nCS_2, /* Ethernet CS */
|
GPIO78_nCS_2, /* Ethernet CS */
|
||||||
GPIO114_GPIO, /* Ethernet IRQ */
|
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[] = {
|
static struct mtd_partition colibri_partitions[] = {
|
||||||
{
|
{
|
||||||
.name = "Bootloader",
|
.name = "Bootloader",
|
||||||
.offset = 0x00000000,
|
.offset = 0x00000000,
|
||||||
.size = 0x00040000,
|
.size = 0x00040000,
|
||||||
.mask_flags = MTD_WRITEABLE /* force read-only */
|
.mask_flags = MTD_WRITEABLE /* force read-only */
|
||||||
}, {
|
}, {
|
||||||
.name = "Kernel",
|
.name = "Kernel",
|
||||||
.offset = 0x00040000,
|
.offset = 0x00040000,
|
||||||
@ -90,50 +97,113 @@ static struct platform_device colibri_pxa270_flash_device = {
|
|||||||
.num_resources = 1,
|
.num_resources = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
static void __init colibri_pxa270_nor_init(void)
|
||||||
* DM9000 Ethernet
|
{
|
||||||
*/
|
platform_device_register(&colibri_pxa270_flash_device);
|
||||||
#if defined(CONFIG_DM9000)
|
}
|
||||||
static struct resource dm9000_resources[] = {
|
#else
|
||||||
[0] = {
|
static inline void colibri_pxa270_nor_init(void) {}
|
||||||
.start = COLIBRI_PXA270_ETH_PHYS,
|
#endif
|
||||||
.end = COLIBRI_PXA270_ETH_PHYS + 3,
|
|
||||||
|
/******************************************************************************
|
||||||
|
* 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,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
{
|
||||||
.start = COLIBRI_PXA270_ETH_PHYS + 4,
|
.start = PXA_CS2_PHYS + 4,
|
||||||
.end = COLIBRI_PXA270_ETH_PHYS + 4 + 500,
|
.end = PXA_CS2_PHYS + 4 + 500,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[2] = {
|
{
|
||||||
.start = COLIBRI_PXA270_ETH_IRQ,
|
.start = gpio_to_irq(GPIO114_COLIBRI_PXA270_ETH_IRQ),
|
||||||
.end = COLIBRI_PXA270_ETH_IRQ,
|
.end = gpio_to_irq(GPIO114_COLIBRI_PXA270_ETH_IRQ),
|
||||||
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
|
.flags = IORESOURCE_IRQ | IRQF_TRIGGER_RISING,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device dm9000_device = {
|
static struct platform_device colibri_pxa270_dm9000_device = {
|
||||||
.name = "dm9000",
|
.name = "dm9000",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.num_resources = ARRAY_SIZE(dm9000_resources),
|
.num_resources = ARRAY_SIZE(colibri_pxa270_dm9000_resources),
|
||||||
.resource = dm9000_resources,
|
.resource = colibri_pxa270_dm9000_resources,
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_DM9000 */
|
|
||||||
|
|
||||||
static struct platform_device *colibri_pxa270_devices[] __initdata = {
|
static void __init colibri_pxa270_eth_init(void)
|
||||||
&colibri_pxa270_flash_device,
|
{
|
||||||
#if defined(CONFIG_DM9000)
|
platform_device_register(&colibri_pxa270_dm9000_device);
|
||||||
&dm9000_device,
|
}
|
||||||
|
#else
|
||||||
|
static inline void colibri_pxa270_eth_init(void) {}
|
||||||
#endif
|
#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)
|
static void __init colibri_pxa270_init(void)
|
||||||
{
|
{
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(colibri_pxa270_pin_config));
|
||||||
pxa_set_ffuart_info(NULL);
|
|
||||||
pxa_set_btuart_info(NULL);
|
colibri_pxa270_nor_init();
|
||||||
pxa_set_stuart_info(NULL);
|
colibri_pxa270_eth_init();
|
||||||
platform_add_devices(ARRAY_AND_SIZE(colibri_pxa270_devices));
|
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")
|
MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
|
||||||
@ -146,3 +216,13 @@ MACHINE_START(COLIBRI, "Toradex Colibri PXA270")
|
|||||||
.timer = &pxa_timer,
|
.timer = &pxa_timer,
|
||||||
MACHINE_END
|
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/platform_device.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
#include <linux/usb/gpio_vbus.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/sizes.h>
|
#include <asm/sizes.h>
|
||||||
@ -28,6 +29,8 @@
|
|||||||
#include <mach/pxafb.h>
|
#include <mach/pxafb.h>
|
||||||
#include <mach/ohci.h>
|
#include <mach/ohci.h>
|
||||||
#include <mach/audio.h>
|
#include <mach/audio.h>
|
||||||
|
#include <mach/pxa27x-udc.h>
|
||||||
|
#include <mach/udc.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
@ -101,6 +104,42 @@ void __init colibri_pxa320_init_ohci(void)
|
|||||||
static inline void colibri_pxa320_init_ohci(void) {}
|
static inline void colibri_pxa320_init_ohci(void) {}
|
||||||
#endif /* CONFIG_USB_OHCI_HCD || CONFIG_USB_OHCI_HCD_MODULE */
|
#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 = {
|
static mfp_cfg_t colibri_pxa320_mmc_pin_config[] __initdata = {
|
||||||
GPIO22_MMC1_CLK,
|
GPIO22_MMC1_CLK,
|
||||||
GPIO23_MMC1_CMD,
|
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),
|
colibri_pxa3xx_init_mmc(ARRAY_AND_SIZE(colibri_pxa320_mmc_pin_config),
|
||||||
mfp_to_gpio(MFP_PIN_GPIO28));
|
mfp_to_gpio(MFP_PIN_GPIO28));
|
||||||
colibri_pxa320_init_uart();
|
colibri_pxa320_init_uart();
|
||||||
|
colibri_pxa320_init_udc();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(COLIBRI320, "Toradex Colibri PXA320")
|
MACHINE_START(COLIBRI320, "Toradex Colibri PXA320")
|
||||||
|
@ -50,14 +50,13 @@
|
|||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/pxa2xx_spi.h>
|
#include <mach/pxa2xx_spi.h>
|
||||||
#include <mach/corgi.h>
|
#include <mach/corgi.h>
|
||||||
#include <mach/sharpsl.h>
|
#include <mach/sharpsl_pm.h>
|
||||||
|
|
||||||
#include <asm/mach/sharpsl_param.h>
|
#include <asm/mach/sharpsl_param.h>
|
||||||
#include <asm/hardware/scoop.h>
|
#include <asm/hardware/scoop.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
#include "sharpsl.h"
|
|
||||||
|
|
||||||
static unsigned long corgi_pin_config[] __initdata = {
|
static unsigned long corgi_pin_config[] __initdata = {
|
||||||
/* Static Memory I/O */
|
/* Static Memory I/O */
|
||||||
@ -185,8 +184,6 @@ static struct scoop_pcmcia_config corgi_pcmcia_config = {
|
|||||||
.num_devs = 1,
|
.num_devs = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
EXPORT_SYMBOL(corgiscoop_device);
|
|
||||||
|
|
||||||
static struct w100_mem_info corgi_fb_mem = {
|
static struct w100_mem_info corgi_fb_mem = {
|
||||||
.ext_cntl = 0x00040003,
|
.ext_cntl = 0x00040003,
|
||||||
.sdram_mode_reg = 0x00650021,
|
.sdram_mode_reg = 0x00650021,
|
||||||
|
@ -23,12 +23,11 @@
|
|||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
#include <mach/sharpsl.h>
|
|
||||||
#include <mach/corgi.h>
|
#include <mach/corgi.h>
|
||||||
#include <mach/pxa2xx-regs.h>
|
#include <mach/pxa2xx-regs.h>
|
||||||
|
#include <mach/sharpsl_pm.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "sharpsl.h"
|
|
||||||
|
|
||||||
#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
|
#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
|
||||||
#define SHARPSL_CHARGE_ON_TEMP 0xe0 /* 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:
|
case SHARPSL_STATUS_ACIN:
|
||||||
return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0);
|
return ((GPLR(CORGI_GPIO_AC_IN) & GPIO_bit(CORGI_GPIO_AC_IN)) != 0);
|
||||||
case SHARPSL_STATUS_LOCK:
|
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:
|
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:
|
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:
|
case SHARPSL_ACIN_VOLT:
|
||||||
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
|
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
|
||||||
case SHARPSL_BATT_TEMP:
|
case SHARPSL_BATT_TEMP:
|
||||||
@ -165,8 +164,6 @@ static struct sharpsl_charger_machinfo corgi_pm_machinfo = {
|
|||||||
.should_wakeup = corgi_should_wakeup,
|
.should_wakeup = corgi_should_wakeup,
|
||||||
#if defined(CONFIG_LCD_CORGI)
|
#if defined(CONFIG_LCD_CORGI)
|
||||||
.backlight_limit = corgi_lcd_limit_intensity,
|
.backlight_limit = corgi_lcd_limit_intensity,
|
||||||
#elif defined(CONFIG_BACKLIGHT_CORGI)
|
|
||||||
.backlight_limit = corgibl_limit_intensity,
|
|
||||||
#endif
|
#endif
|
||||||
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
|
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
|
||||||
.charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
|
.charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
|
||||||
|
#include <asm/pmu.h>
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/pxafb.h>
|
#include <mach/pxafb.h>
|
||||||
#include <mach/mmc.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);
|
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[] = {
|
static struct resource pxamci_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = 0x41100000,
|
.start = 0x41100000,
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
extern struct platform_device pxa_device_pmu;
|
||||||
extern struct platform_device pxa_device_mci;
|
extern struct platform_device pxa_device_mci;
|
||||||
extern struct platform_device pxa3xx_device_mci2;
|
extern struct platform_device pxa3xx_device_mci2;
|
||||||
extern struct platform_device pxa3xx_device_mci3;
|
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/gpio.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/platform_device.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/setup.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
@ -22,9 +29,12 @@
|
|||||||
|
|
||||||
#include <mach/pxa25x.h>
|
#include <mach/pxa25x.h>
|
||||||
#include <mach/eseries-gpio.h>
|
#include <mach/eseries-gpio.h>
|
||||||
|
#include <mach/audio.h>
|
||||||
|
#include <mach/pxafb.h>
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/irda.h>
|
#include <mach/irda.h>
|
||||||
|
|
||||||
|
#include "devices.h"
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "clock.h"
|
#include "clock.h"
|
||||||
|
|
||||||
@ -130,3 +140,802 @@ void eseries_register_clks(void)
|
|||||||
clkdev_add_table(eseries_clkregs, ARRAY_SIZE(eseries_clkregs));
|
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_VIRT (0xf1000000) /* as per balloon2 */
|
||||||
#define BALLOON3_FPGA_LENGTH 0x01000000
|
#define BALLOON3_FPGA_LENGTH 0x01000000
|
||||||
|
|
||||||
/* FPGA/CPLD registers */
|
/* FPGA / CPLD registers for CF socket */
|
||||||
#define BALLOON3_PCMCIA0_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
#define BALLOON3_CF_STATUS_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
||||||
/* fixme - same for now */
|
#define BALLOON3_CF_CONTROL_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
||||||
#define BALLOON3_PCMCIA1_REG (BALLOON3_FPGA_VIRT + 0x00e00008)
|
/* FPGA / CPLD version register */
|
||||||
#define BALLOON3_NANDIO_IO_REG (BALLOON3_FPGA_VIRT + 0x00e00000)
|
#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 */
|
/* fpga/cpld interrupt control register */
|
||||||
#define BALLOON3_INT_CONTROL_REG (BALLOON3_FPGA_VIRT + 0x00e0000C)
|
#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_VERSION_REG (BALLOON3_FPGA_VIRT + 0x00e0001c)
|
||||||
|
|
||||||
#define BALLOON3_SAMOSA_ADDR_REG (BALLOON3_FPGA_VIRT + 0x00c00000)
|
#define BALLOON3_SAMOSA_ADDR_REG (BALLOON3_FPGA_VIRT + 0x00c00000)
|
||||||
#define BALLOON3_SAMOSA_DATA_REG (BALLOON3_FPGA_VIRT + 0x00c00004)
|
#define BALLOON3_SAMOSA_DATA_REG (BALLOON3_FPGA_VIRT + 0x00c00004)
|
||||||
#define BALLOON3_SAMOSA_STATUS_REG (BALLOON3_FPGA_VIRT + 0x00c0001c)
|
#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 */
|
/* GPIOs for irqs */
|
||||||
#define BALLOON3_GPIO_AUX_NIRQ (94)
|
#define BALLOON3_GPIO_AUX_NIRQ (94)
|
||||||
#define BALLOON3_GPIO_CODEC_IRQ (95)
|
#define BALLOON3_GPIO_CODEC_IRQ (95)
|
||||||
@ -54,20 +88,24 @@ enum balloon3_features {
|
|||||||
|
|
||||||
#define BALLOON3_GPIO_S0_CD (105)
|
#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 */
|
/* FPGA Interrupt Mask/Acknowledge Register */
|
||||||
#define BALLOON3_INT_S0_IRQ (1 << 0) /* PCMCIA 0 IRQ */
|
#define BALLOON3_INT_S0_IRQ (1 << 0) /* PCMCIA 0 IRQ */
|
||||||
#define BALLOON3_INT_S0_STSCHG (1 << 1) /* PCMCIA 0 status changed */
|
#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 */
|
/* CPLD (and FPGA) interface definitions */
|
||||||
#define CPLD_LCD0_DATA_SET 0x00
|
#define CPLD_LCD0_DATA_SET 0x00
|
||||||
#define CPLD_LCD0_DATA_CLR 0x10
|
#define CPLD_LCD0_DATA_CLR 0x10
|
||||||
@ -132,9 +170,6 @@ enum balloon3_features {
|
|||||||
/* Balloon3 Interrupts */
|
/* Balloon3 Interrupts */
|
||||||
#define BALLOON3_IRQ(x) (IRQ_BOARD_START + (x))
|
#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_AUX_NIRQ IRQ_GPIO(BALLOON3_GPIO_AUX_NIRQ)
|
||||||
#define BALLOON3_CODEC_IRQ IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ)
|
#define BALLOON3_CODEC_IRQ IRQ_GPIO(BALLOON3_GPIO_CODEC_IRQ)
|
||||||
#define BALLOON3_S0_CD_IRQ IRQ_GPIO(BALLOON3_GPIO_S0_CD)
|
#define BALLOON3_S0_CD_IRQ IRQ_GPIO(BALLOON3_GPIO_S0_CD)
|
||||||
|
@ -4,6 +4,27 @@
|
|||||||
#include <net/ax88796.h>
|
#include <net/ax88796.h>
|
||||||
#include <mach/mfp.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
|
* common settings for all modules
|
||||||
*/
|
*/
|
||||||
@ -33,13 +54,10 @@ static inline void colibri_pxa3xx_init_nand(void) {}
|
|||||||
/* physical memory regions */
|
/* physical memory regions */
|
||||||
#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */
|
#define COLIBRI_SDRAM_BASE 0xa0000000 /* SDRAM region */
|
||||||
|
|
||||||
/* definitions for Colibri PXA270 */
|
/* GPIO definitions for Colibri PXA270 */
|
||||||
|
#define GPIO114_COLIBRI_PXA270_ETH_IRQ 114
|
||||||
#define COLIBRI_PXA270_FLASH_PHYS (PXA_CS0_PHYS) /* Flash region */
|
#define GPIO0_COLIBRI_PXA270_SD_DETECT 0
|
||||||
#define COLIBRI_PXA270_ETH_PHYS (PXA_CS2_PHYS) /* Ethernet */
|
#define GPIO113_COLIBRI_PXA270_TS_IRQ 113
|
||||||
#define COLIBRI_PXA270_ETH_IRQ_GPIO 114
|
|
||||||
#define COLIBRI_PXA270_ETH_IRQ \
|
|
||||||
gpio_to_irq(mfp_to_gpio(COLIBRI_PXA270_ETH_IRQ_GPIO))
|
|
||||||
|
|
||||||
#endif /* _COLIBRI_H_ */
|
#endif /* _COLIBRI_H_ */
|
||||||
|
|
||||||
|
@ -109,10 +109,5 @@
|
|||||||
#define CORGI_GPIO_BACKLIGHT_CONT (CORGI_SCOOP_GPIO_BASE + 7)
|
#define CORGI_GPIO_BACKLIGHT_CONT (CORGI_SCOOP_GPIO_BASE + 7)
|
||||||
#define CORGI_GPIO_MIC_BIAS (CORGI_SCOOP_GPIO_BASE + 8)
|
#define CORGI_GPIO_MIC_BIAS (CORGI_SCOOP_GPIO_BASE + 8)
|
||||||
|
|
||||||
/*
|
|
||||||
* Shared data structures
|
|
||||||
*/
|
|
||||||
extern struct platform_device corgiscoop_device;
|
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_CORGI_H */
|
#endif /* __ASM_ARCH_CORGI_H */
|
||||||
|
|
||||||
|
@ -14,25 +14,15 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
GPIOn - Input from MAX823 (or equiv), normalizing USB +5V into a clean
|
GPIOn - Input from MAX823 (or equiv), normalizing USB +5V into a clean
|
||||||
interrupt signal for determining cable presence. On the original gumstix,
|
interrupt signal for determining cable presence. On the gumstix F,
|
||||||
this is GPIO81, and GPIO83 needs to be defined as well. On the gumstix F,
|
|
||||||
this moves to GPIO17 and GPIO37. */
|
this moves to GPIO17 and GPIO37. */
|
||||||
|
|
||||||
/* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn
|
/* GPIOx - Connects to USB D+ and used as a pull-up after GPIOn
|
||||||
has detected a cable insertion; driven low otherwise. */
|
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_GPIOn 35
|
||||||
#define GPIO_GUMSTIX_USB_GPIOx 41
|
#define GPIO_GUMSTIX_USB_GPIOx 41
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* usb state change */
|
/* usb state change */
|
||||||
#define GUMSTIX_USB_INTR_IRQ IRQ_GPIO(GPIO_GUMSTIX_USB_GPIOn)
|
#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 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_ERROR 2
|
||||||
#define SHARPSL_LED_ON 1
|
#define SHARPSL_LED_ON 1
|
||||||
@ -101,4 +103,11 @@ extern struct sharpsl_pm_status sharpsl_pm;
|
|||||||
void sharpsl_battery_kick(void);
|
void sharpsl_battery_kick(void);
|
||||||
void sharpsl_pm_led(int val);
|
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
|
#endif
|
||||||
|
@ -185,7 +185,5 @@
|
|||||||
/*
|
/*
|
||||||
* Shared data structures
|
* Shared data structures
|
||||||
*/
|
*/
|
||||||
extern struct platform_device spitzscoop_device;
|
|
||||||
extern struct platform_device spitzscoop2_device;
|
|
||||||
extern struct platform_device spitzssp_device;
|
extern struct platform_device spitzssp_device;
|
||||||
extern struct sharpsl_charger_machinfo spitz_pm_machinfo;
|
extern struct sharpsl_charger_machinfo spitz_pm_machinfo;
|
||||||
|
@ -34,7 +34,7 @@
|
|||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/pda_power.h>
|
#include <linux/pda_power.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
#include <linux/wm97xx.h>
|
||||||
#include <linux/mtd/physmap.h>
|
#include <linux/mtd/physmap.h>
|
||||||
#include <linux/usb/gpio_vbus.h>
|
#include <linux/usb/gpio_vbus.h>
|
||||||
#include <linux/regulator/max1586.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,
|
.batt_aux = WM97XX_AUX_ID1,
|
||||||
.temp_aux = -1,
|
.temp_aux = -1,
|
||||||
.charge_gpio = -1,
|
.charge_gpio = -1,
|
||||||
@ -648,6 +648,10 @@ static struct wm97xx_batt_info mioa701_battery_data = {
|
|||||||
.batt_name = "mioa701_battery",
|
.batt_name = "mioa701_battery",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct wm97xx_pdata mioa701_wm97xx_pdata = {
|
||||||
|
.batt_pdata = &mioa701_battery_data,
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Voltage regulation
|
* Voltage regulation
|
||||||
*/
|
*/
|
||||||
@ -716,6 +720,7 @@ struct i2c_pxa_platform_data i2c_pdata = {
|
|||||||
|
|
||||||
static pxa2xx_audio_ops_t mioa701_ac97_info = {
|
static pxa2xx_audio_ops_t mioa701_ac97_info = {
|
||||||
.reset_gpio = 95,
|
.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);
|
set_pxa_fb_info(&mioa701_pxafb_info);
|
||||||
pxa_set_mci_info(&mioa701_mci_info);
|
pxa_set_mci_info(&mioa701_mci_info);
|
||||||
pxa_set_keypad_info(&mioa701_keypad_info);
|
pxa_set_keypad_info(&mioa701_keypad_info);
|
||||||
wm97xx_bat_set_pdata(&mioa701_battery_data);
|
|
||||||
pxa_set_udc_info(&mioa701_udc_info);
|
pxa_set_udc_info(&mioa701_udc_info);
|
||||||
pxa_set_ac97_info(&mioa701_ac97_info);
|
pxa_set_ac97_info(&mioa701_ac97_info);
|
||||||
pm_power_off = mioa701_poweroff;
|
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/pda_power.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
#include <linux/wm97xx.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/sysdev.h>
|
#include <linux/sysdev.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
@ -41,6 +41,7 @@
|
|||||||
#include <mach/irda.h>
|
#include <mach/irda.h>
|
||||||
#include <mach/pxa27x_keypad.h>
|
#include <mach/pxa27x_keypad.h>
|
||||||
#include <mach/palmasoc.h>
|
#include <mach/palmasoc.h>
|
||||||
|
#include <mach/palm27x.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
@ -127,6 +128,7 @@ static unsigned long palmld_pin_config[] __initdata = {
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* NOR Flash
|
* NOR Flash
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||||
static struct mtd_partition palmld_partitions[] = {
|
static struct mtd_partition palmld_partitions[] = {
|
||||||
{
|
{
|
||||||
.name = "Flash",
|
.name = "Flash",
|
||||||
@ -160,20 +162,18 @@ static struct platform_device palmld_flash = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmld_nor_init(void)
|
||||||
* SD/MMC card controller
|
{
|
||||||
******************************************************************************/
|
platform_device_register(&palmld_flash);
|
||||||
static struct pxamci_platform_data palmld_mci_platform_data = {
|
}
|
||||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
#else
|
||||||
.gpio_card_detect = GPIO_NR_PALMLD_SD_DETECT_N,
|
static inline void palmld_nor_init(void) {}
|
||||||
.gpio_card_ro = GPIO_NR_PALMLD_SD_READONLY,
|
#endif
|
||||||
.gpio_power = GPIO_NR_PALMLD_SD_POWER,
|
|
||||||
.detect_delay_ms = 200,
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* GPIO keyboard
|
* GPIO keyboard
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||||
static unsigned int palmld_matrix_keys[] = {
|
static unsigned int palmld_matrix_keys[] = {
|
||||||
KEY(0, 1, KEY_F2),
|
KEY(0, 1, KEY_F2),
|
||||||
KEY(0, 2, KEY_UP),
|
KEY(0, 2, KEY_UP),
|
||||||
@ -200,9 +200,18 @@ static struct pxa27x_keypad_platform_data palmld_keypad_platform_data = {
|
|||||||
.debounce_interval = 30,
|
.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
|
* GPIO keys
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||||
static struct gpio_keys_button palmld_pxa_buttons[] = {
|
static struct gpio_keys_button palmld_pxa_buttons[] = {
|
||||||
{KEY_F8, GPIO_NR_PALMLD_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
{KEY_F8, GPIO_NR_PALMLD_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
||||||
{KEY_F9, GPIO_NR_PALMLD_LOCK_SWITCH, 0, "Lock Switch" },
|
{KEY_F9, GPIO_NR_PALMLD_LOCK_SWITCH, 0, "Lock Switch" },
|
||||||
@ -222,77 +231,18 @@ static struct platform_device palmld_pxa_keys = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmld_keys_init(void)
|
||||||
* Backlight
|
|
||||||
******************************************************************************/
|
|
||||||
static int palmld_backlight_init(struct device *dev)
|
|
||||||
{
|
{
|
||||||
int ret;
|
platform_device_register(&palmld_pxa_keys);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
static int palmld_backlight_notify(struct device *dev, int brightness)
|
static inline void palmld_keys_init(void) {}
|
||||||
{
|
#endif
|
||||||
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,
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* LEDs
|
* LEDs
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||||
struct gpio_led gpio_leds[] = {
|
struct gpio_led gpio_leds[] = {
|
||||||
{
|
{
|
||||||
.name = "palmld:green:led",
|
.name = "palmld:green:led",
|
||||||
@ -318,174 +268,34 @@ static struct platform_device palmld_leds = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmld_leds_init(void)
|
||||||
* Power supply
|
|
||||||
******************************************************************************/
|
|
||||||
static int power_supply_init(struct device *dev)
|
|
||||||
{
|
{
|
||||||
int ret;
|
platform_device_register(&palmld_leds);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
static int palmld_is_ac_online(void)
|
static inline void palmld_leds_init(void) {}
|
||||||
{
|
#endif
|
||||||
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,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* HDD
|
* 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",
|
.name = "pata_palmld",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmld_ide_init(void)
|
||||||
* Framebuffer
|
|
||||||
******************************************************************************/
|
|
||||||
static struct pxafb_mode_info palmld_lcd_modes[] = {
|
|
||||||
{
|
{
|
||||||
.pixclock = 57692,
|
platform_device_register(&palmld_ide_device);
|
||||||
.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));
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static inline void palmld_ide_init(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine init
|
* 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 = {
|
static struct map_desc palmld_io_desc[] __initdata = {
|
||||||
{
|
{
|
||||||
.virtual = PALMLD_IDE_VIRT,
|
.virtual = PALMLD_IDE_VIRT,
|
||||||
@ -510,20 +320,26 @@ static void __init palmld_map_io(void)
|
|||||||
static void __init palmld_init(void)
|
static void __init palmld_init(void)
|
||||||
{
|
{
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmld_pin_config));
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmld_pin_config));
|
||||||
|
|
||||||
pxa_set_ffuart_info(NULL);
|
pxa_set_ffuart_info(NULL);
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_info(NULL);
|
pxa_set_stuart_info(NULL);
|
||||||
|
|
||||||
palmld_pm_init();
|
palm27x_mmc_init(GPIO_NR_PALMLD_SD_DETECT_N, GPIO_NR_PALMLD_SD_READONLY,
|
||||||
set_pxa_fb_info(&palmld_lcd_screen);
|
GPIO_NR_PALMLD_SD_POWER, 0);
|
||||||
pxa_set_mci_info(&palmld_mci_platform_data);
|
palm27x_pm_init(PALMLD_STR_BASE);
|
||||||
pxa_set_ac97_info(&palmld_ac97_pdata);
|
palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
|
||||||
pxa_set_ficp_info(&palmld_ficp_platform_data);
|
palm27x_irda_init(GPIO_NR_PALMLD_IR_DISABLE);
|
||||||
pxa_set_keypad_info(&palmld_keypad_platform_data);
|
palm27x_ac97_init(PALMLD_BAT_MIN_VOLTAGE, PALMLD_BAT_MAX_VOLTAGE,
|
||||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
GPIO_NR_PALMLD_EARPHONE_DETECT, 95);
|
||||||
|
palm27x_pwm_init(GPIO_NR_PALMLD_BL_POWER, GPIO_NR_PALMLD_LCD_POWER);
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
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")
|
MACHINE_START(PALMLD, "Palm LifeDrive")
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#include <linux/pda_power.h>
|
#include <linux/pda_power.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
#include <linux/wm97xx.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/usb/gpio_vbus.h>
|
#include <linux/usb/gpio_vbus.h>
|
||||||
|
|
||||||
@ -42,6 +42,7 @@
|
|||||||
#include <mach/pxa27x_keypad.h>
|
#include <mach/pxa27x_keypad.h>
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/palmasoc.h>
|
#include <mach/palmasoc.h>
|
||||||
|
#include <mach/palm27x.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
@ -103,20 +104,10 @@ static unsigned long palmt5_pin_config[] __initdata = {
|
|||||||
GPIO107_GPIO, /* earphone detect */
|
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
|
* GPIO keyboard
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||||
static unsigned int palmt5_matrix_keys[] = {
|
static unsigned int palmt5_matrix_keys[] = {
|
||||||
KEY(0, 0, KEY_POWER),
|
KEY(0, 0, KEY_POWER),
|
||||||
KEY(0, 1, KEY_F1),
|
KEY(0, 1, KEY_F1),
|
||||||
@ -142,9 +133,18 @@ static struct pxa27x_keypad_platform_data palmt5_keypad_platform_data = {
|
|||||||
.debounce_interval = 30,
|
.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
|
* GPIO keys
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||||
static struct gpio_keys_button palmt5_pxa_buttons[] = {
|
static struct gpio_keys_button palmt5_pxa_buttons[] = {
|
||||||
{KEY_F8, GPIO_NR_PALMT5_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
{KEY_F8, GPIO_NR_PALMT5_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
||||||
};
|
};
|
||||||
@ -162,241 +162,17 @@ static struct platform_device palmt5_pxa_keys = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmt5_keys_init(void)
|
||||||
* Backlight
|
|
||||||
******************************************************************************/
|
|
||||||
static int palmt5_backlight_init(struct device *dev)
|
|
||||||
{
|
{
|
||||||
int ret;
|
platform_device_register(&palmt5_pxa_keys);
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static inline void palmt5_keys_init(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine init
|
* 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)
|
static void __init palmt5_reserve(void)
|
||||||
{
|
{
|
||||||
memblock_reserve(0xa0200000, 0x1000);
|
memblock_reserve(0xa0200000, 0x1000);
|
||||||
@ -405,21 +181,24 @@ static void __init palmt5_reserve(void)
|
|||||||
static void __init palmt5_init(void)
|
static void __init palmt5_init(void)
|
||||||
{
|
{
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmt5_pin_config));
|
||||||
|
|
||||||
pxa_set_ffuart_info(NULL);
|
pxa_set_ffuart_info(NULL);
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_info(NULL);
|
pxa_set_stuart_info(NULL);
|
||||||
|
|
||||||
palmt5_pm_init();
|
palm27x_mmc_init(GPIO_NR_PALMT5_SD_DETECT_N, GPIO_NR_PALMT5_SD_READONLY,
|
||||||
set_pxa_fb_info(&palmt5_lcd_screen);
|
GPIO_NR_PALMT5_SD_POWER, 0);
|
||||||
pxa_set_mci_info(&palmt5_mci_platform_data);
|
palm27x_pm_init(PALMT5_STR_BASE);
|
||||||
palmt5_udc_init();
|
palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
|
||||||
pxa_set_ac97_info(&palmt5_ac97_pdata);
|
palm27x_udc_init(GPIO_NR_PALMT5_USB_DETECT_N,
|
||||||
pxa_set_ficp_info(&palmt5_ficp_platform_data);
|
GPIO_NR_PALMT5_USB_PULLUP, 1);
|
||||||
pxa_set_keypad_info(&palmt5_keypad_platform_data);
|
palm27x_irda_init(GPIO_NR_PALMT5_IR_DISABLE);
|
||||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
palm27x_ac97_init(PALMT5_BAT_MIN_VOLTAGE, PALMT5_BAT_MAX_VOLTAGE,
|
||||||
|
GPIO_NR_PALMT5_EARPHONE_DETECT, 95);
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
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")
|
MACHINE_START(PALMT5, "Palm Tungsten|T5")
|
||||||
|
@ -23,7 +23,7 @@
|
|||||||
#include <linux/pda_power.h>
|
#include <linux/pda_power.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
#include <linux/wm97xx.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/usb/gpio_vbus.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,
|
.batt_aux = WM97XX_AUX_ID3,
|
||||||
.temp_aux = WM97XX_AUX_ID2,
|
.temp_aux = WM97XX_AUX_ID2,
|
||||||
.charge_gpio = -1,
|
.charge_gpio = -1,
|
||||||
@ -287,9 +287,14 @@ static struct wm97xx_batt_info wm97xx_batt_pdata = {
|
|||||||
.batt_name = "main-batt",
|
.batt_name = "main-batt",
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static struct wm97xx_pdata palmte2_wm97xx_pdata = {
|
||||||
* aSoC audio
|
.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 = {
|
static struct palm27x_asoc_info palmte2_asoc_pdata = {
|
||||||
.jack_gpio = GPIO_NR_PALMTE2_EARPHONE_DETECT,
|
.jack_gpio = GPIO_NR_PALMTE2_EARPHONE_DETECT,
|
||||||
};
|
};
|
||||||
@ -361,9 +366,8 @@ static void __init palmte2_init(void)
|
|||||||
set_pxa_fb_info(&palmte2_lcd_screen);
|
set_pxa_fb_info(&palmte2_lcd_screen);
|
||||||
pxa_set_mci_info(&palmte2_mci_platform_data);
|
pxa_set_mci_info(&palmte2_mci_platform_data);
|
||||||
palmte2_udc_init();
|
palmte2_udc_init();
|
||||||
pxa_set_ac97_info(NULL);
|
pxa_set_ac97_info(&palmte2_ac97_pdata);
|
||||||
pxa_set_ficp_info(&palmte2_ficp_platform_data);
|
pxa_set_ficp_info(&palmte2_ficp_platform_data);
|
||||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
|
||||||
|
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,6 @@
|
|||||||
#include <linux/pda_power.h>
|
#include <linux/pda_power.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/sysdev.h>
|
#include <linux/sysdev.h>
|
||||||
#include <linux/w1-gpio.h>
|
#include <linux/w1-gpio.h>
|
||||||
@ -46,6 +45,7 @@
|
|||||||
#include <mach/pxa2xx-regs.h>
|
#include <mach/pxa2xx-regs.h>
|
||||||
#include <mach/palmasoc.h>
|
#include <mach/palmasoc.h>
|
||||||
#include <mach/camera.h>
|
#include <mach/camera.h>
|
||||||
|
#include <mach/palm27x.h>
|
||||||
|
|
||||||
#include <sound/pxa2xx-lib.h>
|
#include <sound/pxa2xx-lib.h>
|
||||||
|
|
||||||
@ -159,32 +159,10 @@ static unsigned long centro685_pin_config[] __initdata = {
|
|||||||
};
|
};
|
||||||
#endif /* CONFIG_MACH_CENTRO */
|
#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
|
* GPIO keyboard
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#ifdef CONFIG_MACH_TREO680
|
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||||
static unsigned int treo680_matrix_keys[] = {
|
static unsigned int treo680_matrix_keys[] = {
|
||||||
KEY(0, 0, KEY_F8), /* Red/Off/Power */
|
KEY(0, 0, KEY_F8), /* Red/Off/Power */
|
||||||
KEY(0, 1, KEY_LEFT),
|
KEY(0, 1, KEY_LEFT),
|
||||||
@ -244,19 +222,6 @@ static unsigned int treo680_matrix_keys[] = {
|
|||||||
KEY(7, 5, KEY_I),
|
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[] = {
|
static unsigned int centro_matrix_keys[] = {
|
||||||
KEY(0, 0, KEY_F9), /* Home */
|
KEY(0, 0, KEY_F9), /* Home */
|
||||||
KEY(0, 1, KEY_LEFT),
|
KEY(0, 1, KEY_LEFT),
|
||||||
@ -316,157 +281,50 @@ static unsigned int centro_matrix_keys[] = {
|
|||||||
KEY(7, 5, KEY_I),
|
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_rows = 8,
|
||||||
.matrix_key_cols = 7,
|
.matrix_key_cols = 7,
|
||||||
.matrix_key_map = centro_matrix_keys,
|
.matrix_key_map = treo680_matrix_keys,
|
||||||
.matrix_key_map_size = ARRAY_SIZE(centro_matrix_keys),
|
.matrix_key_map_size = ARRAY_SIZE(treo680_matrix_keys),
|
||||||
.direct_key_map = { KEY_CONNECT },
|
.direct_key_map = { KEY_CONNECT },
|
||||||
.direct_key_num = 1,
|
.direct_key_num = 1,
|
||||||
|
|
||||||
.debounce_interval = 30,
|
.debounce_interval = 30,
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_MACH_CENTRO */
|
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmtreo_kpc_init(void)
|
||||||
* aSoC audio
|
|
||||||
******************************************************************************/
|
|
||||||
|
|
||||||
static pxa2xx_audio_ops_t treo_ac97_pdata = {
|
|
||||||
.reset_gpio = 95,
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
|
||||||
* Backlight
|
|
||||||
******************************************************************************/
|
|
||||||
static int treo_backlight_init(struct device *dev)
|
|
||||||
{
|
{
|
||||||
int ret;
|
static struct pxa27x_keypad_platform_data *data = &treo680_keypad_pdata;
|
||||||
|
|
||||||
ret = gpio_request(GPIO_NR_TREO_BL_POWER, "BL POWER");
|
if (machine_is_centro()) {
|
||||||
if (ret)
|
data->matrix_key_map = centro_matrix_keys;
|
||||||
goto err;
|
data->matrix_key_map_size = ARRAY_SIZE(centro_matrix_keys);
|
||||||
ret = gpio_direction_output(GPIO_NR_TREO_BL_POWER, 0);
|
}
|
||||||
if (ret)
|
|
||||||
goto err2;
|
|
||||||
|
|
||||||
return 0;
|
pxa_set_keypad_info(&treo680_keypad_pdata);
|
||||||
|
|
||||||
err2:
|
|
||||||
gpio_free(GPIO_NR_TREO_BL_POWER);
|
|
||||||
err:
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
static int treo_backlight_notify(struct device *dev, int brightness)
|
static inline void palmtreo_kpc_init(void) {}
|
||||||
{
|
#endif
|
||||||
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,
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* USB host
|
* 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 = {
|
static struct pxaohci_platform_data treo680_ohci_info = {
|
||||||
.port_mode = PMM_PERPORT_MODE,
|
.port_mode = PMM_PERPORT_MODE,
|
||||||
.flags = ENABLE_PORT1 | ENABLE_PORT3,
|
.flags = ENABLE_PORT1 | ENABLE_PORT3,
|
||||||
.power_budget = 0,
|
.power_budget = 0,
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_MACH_TREO680 */
|
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmtreo_uhc_init(void)
|
||||||
* Power supply
|
|
||||||
******************************************************************************/
|
|
||||||
static int power_supply_init(struct device *dev)
|
|
||||||
{
|
{
|
||||||
int ret;
|
if (machine_is_treo680())
|
||||||
|
pxa_set_ohci_info(&treo680_ohci_info);
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
static int treo_is_ac_online(void)
|
static inline void palmtreo_uhc_init(void) {}
|
||||||
{
|
#endif
|
||||||
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,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Vibra and LEDs
|
* Vibra and LEDs
|
||||||
@ -495,16 +353,6 @@ static struct gpio_led_platform_data treo680_gpio_led_info = {
|
|||||||
.num_leds = ARRAY_SIZE(treo680_gpio_leds),
|
.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[] = {
|
static struct gpio_led centro_gpio_leds[] = {
|
||||||
{
|
{
|
||||||
.name = "centro:vibra:vibra",
|
.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),
|
.num_leds = ARRAY_SIZE(centro_gpio_leds),
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device centro_leds = {
|
static struct platform_device palmtreo_leds = {
|
||||||
.name = "leds-gpio",
|
.name = "leds-gpio",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = ¢ro_gpio_led_info,
|
.platform_data = &treo680_gpio_led_info,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
#endif /* CONFIG_MACH_CENTRO */
|
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmtreo_leds_init(void)
|
||||||
* Framebuffer
|
|
||||||
******************************************************************************/
|
|
||||||
/* TODO: add support for 324x324 */
|
|
||||||
static struct pxafb_mode_info treo_lcd_modes[] = {
|
|
||||||
{
|
{
|
||||||
.pixclock = 86538,
|
if (machine_is_centro())
|
||||||
.xres = 320,
|
palmtreo_leds.dev.platform_data = ¢ro_gpio_led_info;
|
||||||
.yres = 320,
|
|
||||||
.bpp = 16,
|
|
||||||
|
|
||||||
.left_margin = 20,
|
platform_device_register(&palmtreo_leds);
|
||||||
.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));
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static inline void palmtreo_leds_init(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine init
|
* 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)
|
static void __init treo_reserve(void)
|
||||||
{
|
{
|
||||||
memblock_reserve(0xa0000000, 0x1000);
|
memblock_reserve(0xa0000000, 0x1000);
|
||||||
memblock_reserve(0xa2000000, 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_ffuart_info(NULL);
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_info(NULL);
|
pxa_set_stuart_info(NULL);
|
||||||
|
palm27x_pm_init(TREO_STR_BASE);
|
||||||
treo_pm_init();
|
palm27x_lcd_init(GPIO_NR_TREO_BL_POWER, &palm_320x320_new_lcd_mode);
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo_pin_config));
|
palm27x_udc_init(GPIO_NR_TREO_USB_DETECT, GPIO_NR_TREO_USB_PULLUP, 1);
|
||||||
treo_lcd_power_init();
|
palm27x_irda_init(GPIO_NR_TREO_IR_EN);
|
||||||
set_pxa_fb_info(&treo_lcd_screen);
|
palm27x_ac97_init(-1, -1, -1, 95);
|
||||||
treo_udc_init();
|
palm27x_pwm_init(GPIO_NR_TREO_BL_POWER, -1);
|
||||||
pxa_set_udc_info(&treo_udc_info);
|
palm27x_power_init(GPIO_NR_TREO_POWER_DETECT, -1);
|
||||||
pxa_set_ac97_info(&treo_ac97_pdata);
|
palm27x_pmic_init();
|
||||||
pxa_set_ficp_info(&treo_ficp_info);
|
palmtreo_kpc_init();
|
||||||
|
palmtreo_uhc_init();
|
||||||
platform_add_devices(ARRAY_AND_SIZE(treo_devices));
|
palmtreo_leds_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_MACH_TREO680
|
|
||||||
static void __init treo680_init(void)
|
static void __init treo680_init(void)
|
||||||
{
|
{
|
||||||
treo_init();
|
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
|
||||||
pxa_set_mci_info(&treo680_mci_platform_data);
|
palmphone_common_init();
|
||||||
pxa_set_keypad_info(&treo680_keypad_platform_data);
|
palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY,
|
||||||
pxa_set_ohci_info(&treo680_ohci_info);
|
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")
|
MACHINE_START(TREO680, "Palm Treo 680")
|
||||||
@ -680,19 +450,6 @@ MACHINE_START(TREO680, "Palm Treo 680")
|
|||||||
.timer = &pxa_timer,
|
.timer = &pxa_timer,
|
||||||
.init_machine = treo680_init,
|
.init_machine = treo680_init,
|
||||||
MACHINE_END
|
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")
|
MACHINE_START(CENTRO, "Palm Centro 685")
|
||||||
.phys_io = TREO_PHYS_IO_START,
|
.phys_io = TREO_PHYS_IO_START,
|
||||||
@ -702,6 +459,5 @@ MACHINE_START(CENTRO, "Palm Centro 685")
|
|||||||
.reserve = treo_reserve,
|
.reserve = treo_reserve,
|
||||||
.init_irq = pxa27x_init_irq,
|
.init_irq = pxa27x_init_irq,
|
||||||
.timer = &pxa_timer,
|
.timer = &pxa_timer,
|
||||||
.init_machine = centro_init,
|
.init_machine = centro_init,
|
||||||
MACHINE_END
|
MACHINE_END
|
||||||
#endif /* CONFIG_MACH_CENTRO */
|
|
||||||
|
@ -25,7 +25,7 @@
|
|||||||
#include <linux/pda_power.h>
|
#include <linux/pda_power.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
#include <linux/wm97xx.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/usb/gpio_vbus.h>
|
#include <linux/usb/gpio_vbus.h>
|
||||||
#include <linux/mtd/nand.h>
|
#include <linux/mtd/nand.h>
|
||||||
@ -46,6 +46,7 @@
|
|||||||
#include <mach/pxa27x_keypad.h>
|
#include <mach/pxa27x_keypad.h>
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/palmasoc.h>
|
#include <mach/palmasoc.h>
|
||||||
|
#include <mach/palm27x.h>
|
||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
@ -129,6 +130,7 @@ static unsigned long palmtx_pin_config[] __initdata = {
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* NOR Flash
|
* NOR Flash
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_MTD_PHYSMAP) || defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||||
static struct mtd_partition palmtx_partitions[] = {
|
static struct mtd_partition palmtx_partitions[] = {
|
||||||
{
|
{
|
||||||
.name = "Flash",
|
.name = "Flash",
|
||||||
@ -162,20 +164,18 @@ static struct platform_device palmtx_flash = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmtx_nor_init(void)
|
||||||
* SD/MMC card controller
|
{
|
||||||
******************************************************************************/
|
platform_device_register(&palmtx_flash);
|
||||||
static struct pxamci_platform_data palmtx_mci_platform_data = {
|
}
|
||||||
.ocr_mask = MMC_VDD_32_33 | MMC_VDD_33_34,
|
#else
|
||||||
.gpio_card_detect = GPIO_NR_PALMTX_SD_DETECT_N,
|
static inline void palmtx_nor_init(void) {}
|
||||||
.gpio_card_ro = GPIO_NR_PALMTX_SD_READONLY,
|
#endif
|
||||||
.gpio_power = GPIO_NR_PALMTX_SD_POWER,
|
|
||||||
.detect_delay_ms = 200,
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* GPIO keyboard
|
* GPIO keyboard
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||||
static unsigned int palmtx_matrix_keys[] = {
|
static unsigned int palmtx_matrix_keys[] = {
|
||||||
KEY(0, 0, KEY_POWER),
|
KEY(0, 0, KEY_POWER),
|
||||||
KEY(0, 1, KEY_F1),
|
KEY(0, 1, KEY_F1),
|
||||||
@ -201,9 +201,18 @@ static struct pxa27x_keypad_platform_data palmtx_keypad_platform_data = {
|
|||||||
.debounce_interval = 30,
|
.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
|
* GPIO keys
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||||
static struct gpio_keys_button palmtx_pxa_buttons[] = {
|
static struct gpio_keys_button palmtx_pxa_buttons[] = {
|
||||||
{KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
{KEY_F8, GPIO_NR_PALMTX_HOTSYNC_BUTTON_N, 1, "HotSync Button" },
|
||||||
};
|
};
|
||||||
@ -221,208 +230,18 @@ static struct platform_device palmtx_pxa_keys = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmtx_keys_init(void)
|
||||||
* Backlight
|
|
||||||
******************************************************************************/
|
|
||||||
static int palmtx_backlight_init(struct device *dev)
|
|
||||||
{
|
{
|
||||||
int ret;
|
platform_device_register(&palmtx_pxa_keys);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
static int palmtx_backlight_notify(struct device *dev, int brightness)
|
static inline void palmtx_keys_init(void) {}
|
||||||
{
|
#endif
|
||||||
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,
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* NAND Flash
|
* 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,
|
static void palmtx_nand_cmd_ctl(struct mtd_info *mtd, int cmd,
|
||||||
unsigned int ctrl)
|
unsigned int ctrl)
|
||||||
{
|
{
|
||||||
@ -482,36 +301,17 @@ static struct platform_device palmtx_nand = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmtx_nand_init(void)
|
||||||
* Power management - standby
|
|
||||||
******************************************************************************/
|
|
||||||
static void __init palmtx_pm_init(void)
|
|
||||||
{
|
{
|
||||||
static u32 resume[] = {
|
platform_device_register(&palmtx_nand);
|
||||||
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));
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static inline void palmtx_nand_init(void) {}
|
||||||
|
#endif
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine init
|
* 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 = {
|
static struct map_desc palmtx_io_desc[] __initdata = {
|
||||||
{
|
{
|
||||||
.virtual = PALMTX_PCMCIA_VIRT,
|
.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));
|
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)
|
static void __init palmtx_init(void)
|
||||||
{
|
{
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmtx_pin_config));
|
||||||
|
|
||||||
pxa_set_ffuart_info(NULL);
|
pxa_set_ffuart_info(NULL);
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_info(NULL);
|
pxa_set_stuart_info(NULL);
|
||||||
|
|
||||||
palmtx_pm_init();
|
palm27x_mmc_init(GPIO_NR_PALMTX_SD_DETECT_N, GPIO_NR_PALMTX_SD_READONLY,
|
||||||
set_pxa_fb_info(&palmtx_lcd_screen);
|
GPIO_NR_PALMTX_SD_POWER, 0);
|
||||||
pxa_set_mci_info(&palmtx_mci_platform_data);
|
palm27x_pm_init(PALMTX_STR_BASE);
|
||||||
palmtx_udc_init();
|
palm27x_lcd_init(-1, &palm_320x480_lcd_mode);
|
||||||
pxa_set_ac97_info(&palmtx_ac97_pdata);
|
palm27x_udc_init(GPIO_NR_PALMTX_USB_DETECT_N,
|
||||||
pxa_set_ficp_info(&palmtx_ficp_platform_data);
|
GPIO_NR_PALMTX_USB_PULLUP, 1);
|
||||||
pxa_set_keypad_info(&palmtx_keypad_platform_data);
|
palm27x_irda_init(GPIO_NR_PALMTX_IR_DISABLE);
|
||||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
palm27x_ac97_init(PALMTX_BAT_MIN_VOLTAGE, PALMTX_BAT_MAX_VOLTAGE,
|
||||||
|
GPIO_NR_PALMTX_EARPHONE_DETECT, 95);
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
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")
|
MACHINE_START(PALMTX, "Palm T|X")
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
#include <linux/pda_power.h>
|
#include <linux/pda_power.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/wm97xx_batt.h>
|
#include <linux/wm97xx.h>
|
||||||
#include <linux/power_supply.h>
|
#include <linux/power_supply.h>
|
||||||
#include <linux/usb/gpio_vbus.h>
|
#include <linux/usb/gpio_vbus.h>
|
||||||
|
|
||||||
@ -44,6 +44,7 @@
|
|||||||
#include <mach/pxa27x_keypad.h>
|
#include <mach/pxa27x_keypad.h>
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
#include <mach/palmasoc.h>
|
#include <mach/palmasoc.h>
|
||||||
|
#include <mach/palm27x.h>
|
||||||
|
|
||||||
#include <mach/pm.h>
|
#include <mach/pm.h>
|
||||||
|
|
||||||
@ -108,22 +109,10 @@ static unsigned long palmz72_pin_config[] __initdata = {
|
|||||||
GPIO27_GPIO, /* WM9712 IRQ */
|
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
|
* GPIO keyboard
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
|
||||||
static unsigned int palmz72_matrix_keys[] = {
|
static unsigned int palmz72_matrix_keys[] = {
|
||||||
KEY(0, 0, KEY_POWER),
|
KEY(0, 0, KEY_POWER),
|
||||||
KEY(0, 1, KEY_F1),
|
KEY(0, 1, KEY_F1),
|
||||||
@ -149,77 +138,18 @@ static struct pxa27x_keypad_platform_data palmz72_keypad_platform_data = {
|
|||||||
.debounce_interval = 30,
|
.debounce_interval = 30,
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmz72_kpc_init(void)
|
||||||
* Backlight
|
|
||||||
******************************************************************************/
|
|
||||||
static int palmz72_backlight_init(struct device *dev)
|
|
||||||
{
|
{
|
||||||
int ret;
|
pxa_set_keypad_info(&palmz72_keypad_platform_data);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
static int palmz72_backlight_notify(struct device *dev, int brightness)
|
static inline void palmz72_kpc_init(void) {}
|
||||||
{
|
#endif
|
||||||
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,
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* LEDs
|
* LEDs
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
|
||||||
static struct gpio_led gpio_leds[] = {
|
static struct gpio_led gpio_leds[] = {
|
||||||
{
|
{
|
||||||
.name = "palmz72:green:led",
|
.name = "palmz72:green:led",
|
||||||
@ -241,139 +171,13 @@ static struct platform_device palmz72_leds = {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/******************************************************************************
|
static void __init palmz72_leds_init(void)
|
||||||
* 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)
|
|
||||||
{
|
{
|
||||||
int ret;
|
platform_device_register(&palmz72_leds);
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
static int palmz72_is_ac_online(void)
|
static inline void palmz72_leds_init(void) {}
|
||||||
{
|
#endif
|
||||||
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,
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
|
|
||||||
@ -452,40 +256,26 @@ device_initcall(palmz72_pm_init);
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* Machine 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)
|
static void __init palmz72_init(void)
|
||||||
{
|
{
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config));
|
pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config));
|
||||||
|
|
||||||
pxa_set_ffuart_info(NULL);
|
pxa_set_ffuart_info(NULL);
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_info(NULL);
|
pxa_set_stuart_info(NULL);
|
||||||
|
|
||||||
set_pxa_fb_info(&palmz72_lcd_screen);
|
palm27x_mmc_init(GPIO_NR_PALMZ72_SD_DETECT_N, GPIO_NR_PALMZ72_SD_RO,
|
||||||
pxa_set_mci_info(&palmz72_mci_platform_data);
|
GPIO_NR_PALMZ72_SD_POWER_N, 1);
|
||||||
palmz72_udc_init();
|
palm27x_lcd_init(-1, &palm_320x320_lcd_mode);
|
||||||
pxa_set_ac97_info(NULL);
|
palm27x_udc_init(GPIO_NR_PALMZ72_USB_DETECT_N,
|
||||||
pxa_set_ficp_info(&palmz72_ficp_platform_data);
|
GPIO_NR_PALMZ72_USB_PULLUP, 0);
|
||||||
pxa_set_keypad_info(&palmz72_keypad_platform_data);
|
palm27x_irda_init(GPIO_NR_PALMZ72_IR_DISABLE);
|
||||||
wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
|
palm27x_ac97_init(PALMZ72_BAT_MIN_VOLTAGE, PALMZ72_BAT_MAX_VOLTAGE,
|
||||||
|
-1, 113);
|
||||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
palm27x_pwm_init(-1, -1);
|
||||||
|
palm27x_power_init(-1, -1);
|
||||||
|
palm27x_pmic_init();
|
||||||
|
palmz72_kpc_init();
|
||||||
|
palmz72_leds_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(PALMZ72, "Palm Zire72")
|
MACHINE_START(PALMZ72, "Palm Zire72")
|
||||||
|
@ -43,7 +43,6 @@
|
|||||||
#include <mach/irda.h>
|
#include <mach/irda.h>
|
||||||
#include <mach/poodle.h>
|
#include <mach/poodle.h>
|
||||||
#include <mach/pxafb.h>
|
#include <mach/pxafb.h>
|
||||||
#include <mach/sharpsl.h>
|
|
||||||
#include <mach/pxa2xx_spi.h>
|
#include <mach/pxa2xx_spi.h>
|
||||||
#include <plat/i2c.h>
|
#include <plat/i2c.h>
|
||||||
|
|
||||||
@ -53,7 +52,6 @@
|
|||||||
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
#include "sharpsl.h"
|
|
||||||
|
|
||||||
static unsigned long poodle_pin_config[] __initdata = {
|
static unsigned long poodle_pin_config[] __initdata = {
|
||||||
/* I/O */
|
/* I/O */
|
||||||
|
@ -322,6 +322,7 @@ void __init pxa26x_init_irq(void)
|
|||||||
|
|
||||||
static struct platform_device *pxa25x_devices[] __initdata = {
|
static struct platform_device *pxa25x_devices[] __initdata = {
|
||||||
&pxa25x_device_udc,
|
&pxa25x_device_udc,
|
||||||
|
&pxa_device_pmu,
|
||||||
&pxa_device_i2s,
|
&pxa_device_i2s,
|
||||||
&sa1100_device_rtc,
|
&sa1100_device_rtc,
|
||||||
&pxa25x_device_ssp,
|
&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 = {
|
static struct platform_device *devices[] __initdata = {
|
||||||
&pxa27x_device_udc,
|
&pxa27x_device_udc,
|
||||||
|
&pxa_device_pmu,
|
||||||
&pxa_device_i2s,
|
&pxa_device_i2s,
|
||||||
&sa1100_device_rtc,
|
&sa1100_device_rtc,
|
||||||
&pxa_device_rtc,
|
&pxa_device_rtc,
|
||||||
|
@ -52,7 +52,7 @@
|
|||||||
static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, };
|
static unsigned char smcfs_mult[8] = { 6, 0, 8, 0, 0, 16, };
|
||||||
|
|
||||||
/* crystal frequency to HSIO bus frequency multiplier (HSS) */
|
/* 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.
|
* 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);
|
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 = {
|
static struct irq_chip pxa_ext_wakeup_chip = {
|
||||||
.name = "WAKEUP",
|
.name = "WAKEUP",
|
||||||
.ack = pxa_ack_ext_wakeup,
|
.ack = pxa_ack_ext_wakeup,
|
||||||
.mask = pxa_mask_ext_wakeup,
|
.mask = pxa_mask_ext_wakeup,
|
||||||
.unmask = pxa_unmask_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)
|
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 = {
|
static struct platform_device *devices[] __initdata = {
|
||||||
&pxa27x_device_udc,
|
&pxa27x_device_udc,
|
||||||
|
&pxa_device_pmu,
|
||||||
&pxa_device_i2s,
|
&pxa_device_i2s,
|
||||||
&sa1100_device_rtc,
|
&sa1100_device_rtc,
|
||||||
&pxa_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 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 = {
|
static struct pda_power_pdata power_supply_info = {
|
||||||
.init = power_supply_init,
|
.init = power_supply_init,
|
||||||
.is_ac_online = raumfeld_is_ac_online,
|
.is_ac_online = raumfeld_is_ac_online,
|
||||||
.is_usb_online = raumfeld_is_usb_online,
|
.is_usb_online = raumfeld_is_usb_online,
|
||||||
.exit = power_supply_exit,
|
.exit = power_supply_exit,
|
||||||
.supplied_to = raumfeld_power_supplicants,
|
.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[] = {
|
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)
|
static irqreturn_t charge_done_irq(int irq, void *dev_id)
|
||||||
{
|
{
|
||||||
struct power_supply *psy;
|
raumfeld_power_signal_charged();
|
||||||
|
|
||||||
psy = power_supply_get_by_name("ds2760-battery.0");
|
|
||||||
|
|
||||||
if (psy)
|
|
||||||
power_supply_set_battery_charged(psy);
|
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
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/pm.h>
|
||||||
#include <mach/pxa2xx-regs.h>
|
#include <mach/pxa2xx-regs.h>
|
||||||
#include <mach/regs-rtc.h>
|
#include <mach/regs-rtc.h>
|
||||||
#include <mach/sharpsl.h>
|
|
||||||
#include <mach/sharpsl_pm.h>
|
#include <mach/sharpsl_pm.h>
|
||||||
|
|
||||||
#include "sharpsl.h"
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Constants
|
* Constants
|
||||||
*/
|
*/
|
||||||
@ -180,17 +177,12 @@ int sharpsl_pm_pxa_read_max1111(int channel)
|
|||||||
if (machine_is_tosa())
|
if (machine_is_tosa())
|
||||||
return 0;
|
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);
|
extern int max1111_read_channel(int);
|
||||||
|
|
||||||
/* max1111 accepts channels from 0-3, however,
|
/* max1111 accepts channels from 0-3, however,
|
||||||
* it is encoded from 0-7 here in the code.
|
* it is encoded from 0-7 here in the code.
|
||||||
*/
|
*/
|
||||||
return max1111_read_channel(channel >> 1);
|
return max1111_read_channel(channel >> 1);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int get_percentage(int voltage)
|
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,
|
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);
|
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 */
|
/* Suspend if critical battery level */
|
||||||
if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
|
if ((sharpsl_pm.battstat.ac_status != APM_AC_ONLINE)
|
||||||
&& (sharpsl_pm.battstat.mainbat_status == APM_BATTERY_STATUS_CRITICAL)
|
&& (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, c8, c7, 0 @ invalidate I & D TLBs
|
||||||
mcr p15, 0, r1, c7, c7, 0 @ invalidate I & D caches, BTB
|
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 p14, 0, r3, c6, c0, 0 @ clock configuration, turbo mode.
|
||||||
mcr p15, 0, r4, c15, c1, 0 @ CP access reg
|
mcr p15, 0, r4, c15, c1, 0 @ CP access reg
|
||||||
mcr p15, 0, r5, c13, c0, 0 @ PID
|
mcr p15, 0, r5, c13, c0, 0 @ PID
|
||||||
@ -368,9 +364,6 @@ sleep_save_sp:
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
resume_after_mmu:
|
resume_after_mmu:
|
||||||
#ifdef CONFIG_XSCALE_CACHE_ERRATA
|
|
||||||
bl cpu_xscale_proc_init
|
|
||||||
#endif
|
|
||||||
ldmfd sp!, {r2, r3}
|
ldmfd sp!, {r2, r3}
|
||||||
#ifndef CONFIG_IWMMXT
|
#ifndef CONFIG_IWMMXT
|
||||||
mar acc0, r2, r3
|
mar acc0, r2, r3
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -22,11 +22,10 @@
|
|||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
#include <mach/sharpsl.h>
|
|
||||||
#include <mach/spitz.h>
|
#include <mach/spitz.h>
|
||||||
#include <mach/pxa27x.h>
|
#include <mach/pxa27x.h>
|
||||||
|
#include <mach/sharpsl_pm.h>
|
||||||
|
|
||||||
#include "sharpsl.h"
|
|
||||||
#include "generic.h"
|
#include "generic.h"
|
||||||
|
|
||||||
#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
|
#define SHARPSL_CHARGE_ON_VOLT 0x99 /* 2.9V */
|
||||||
@ -178,11 +177,11 @@ unsigned long spitzpm_read_devdata(int type)
|
|||||||
case SHARPSL_STATUS_ACIN:
|
case SHARPSL_STATUS_ACIN:
|
||||||
return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0);
|
return (((~GPLR(SPITZ_GPIO_AC_IN)) & GPIO_bit(SPITZ_GPIO_AC_IN)) != 0);
|
||||||
case SHARPSL_STATUS_LOCK:
|
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:
|
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:
|
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:
|
case SHARPSL_ACIN_VOLT:
|
||||||
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
|
return sharpsl_pm_pxa_read_max1111(MAX1111_ACIN_VOLT);
|
||||||
case SHARPSL_BATT_TEMP:
|
case SHARPSL_BATT_TEMP:
|
||||||
@ -212,8 +211,6 @@ struct sharpsl_charger_machinfo spitz_pm_machinfo = {
|
|||||||
.should_wakeup = spitz_should_wakeup,
|
.should_wakeup = spitz_should_wakeup,
|
||||||
#if defined(CONFIG_LCD_CORGI)
|
#if defined(CONFIG_LCD_CORGI)
|
||||||
.backlight_limit = corgi_lcd_limit_intensity,
|
.backlight_limit = corgi_lcd_limit_intensity,
|
||||||
#elif defined(CONFIG_BACKLIGHT_CORGI)
|
|
||||||
.backlight_limit = corgibl_limit_intensity,
|
|
||||||
#endif
|
#endif
|
||||||
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
|
.charge_on_volt = SHARPSL_CHARGE_ON_VOLT,
|
||||||
.charge_on_temp = SHARPSL_CHARGE_ON_TEMP,
|
.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,
|
i2c_register_board_info(0, trizeps4_i2c_devices,
|
||||||
ARRAY_SIZE(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 */
|
/* this is the reset value */
|
||||||
trizeps_conxs_bcr = 0x00A0;
|
trizeps_conxs_bcr = 0x00A0;
|
||||||
#endif
|
|
||||||
BCR_writew(trizeps_conxs_bcr);
|
BCR_writew(trizeps_conxs_bcr);
|
||||||
board_backlight_power(1);
|
board_backlight_power(1);
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include <linux/dm9000.h>
|
#include <linux/dm9000.h>
|
||||||
#include <linux/ucb1400.h>
|
#include <linux/ucb1400.h>
|
||||||
#include <linux/ata_platform.h>
|
#include <linux/ata_platform.h>
|
||||||
|
#include <linux/regulator/max1586.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
@ -37,6 +38,7 @@
|
|||||||
#include <mach/ohci.h>
|
#include <mach/ohci.h>
|
||||||
#include <mach/pxa27x-udc.h>
|
#include <mach/pxa27x-udc.h>
|
||||||
#include <mach/udc.h>
|
#include <mach/udc.h>
|
||||||
|
#include <mach/pata_pxa.h>
|
||||||
|
|
||||||
#include <plat/i2c.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)
|
static void __init vpac270_rtc_init(void)
|
||||||
{
|
{
|
||||||
pxa_set_i2c_info(NULL);
|
|
||||||
i2c_register_board_info(0, ARRAY_AND_SIZE(vpac270_i2c_devs));
|
i2c_register_board_info(0, ARRAY_AND_SIZE(vpac270_i2c_devs));
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -492,7 +493,55 @@ static struct pxafb_mode_info vpac270_lcd_modes[] = {
|
|||||||
.vsync_len = 2,
|
.vsync_len = 2,
|
||||||
|
|
||||||
.sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
|
.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 = {
|
static struct pxafb_mach_info vpac270_lcd_screen = {
|
||||||
@ -538,9 +587,10 @@ static inline void vpac270_lcd_init(void) {}
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
* PATA IDE
|
* PATA IDE
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
#if defined(CONFIG_PATA_PLATFORM) || defined(CONFIG_PATA_PLATFORM_MODULE)
|
#if defined(CONFIG_PATA_PXA) || defined(CONFIG_PATA_PXA_MODULE)
|
||||||
static struct pata_platform_info vpac270_pata_pdata = {
|
static struct pata_pxa_pdata vpac270_pata_pdata = {
|
||||||
.ioport_shift = 1,
|
.reg_shift = 1,
|
||||||
|
.dma_dreq = 1,
|
||||||
.irq_flags = IRQF_TRIGGER_RISING,
|
.irq_flags = IRQF_TRIGGER_RISING,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -555,7 +605,12 @@ static struct resource vpac270_ide_resources[] = {
|
|||||||
.end = PXA_CS3_PHYS + 0x15f,
|
.end = PXA_CS3_PHYS + 0x15f,
|
||||||
.flags = IORESOURCE_MEM
|
.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),
|
.start = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
|
||||||
.end = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
|
.end = gpio_to_irq(GPIO36_VPAC270_IDE_IRQ),
|
||||||
.flags = IORESOURCE_IRQ
|
.flags = IORESOURCE_IRQ
|
||||||
@ -563,11 +618,12 @@ static struct resource vpac270_ide_resources[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct platform_device vpac270_ide_device = {
|
static struct platform_device vpac270_ide_device = {
|
||||||
.name = "pata_platform",
|
.name = "pata_pxa",
|
||||||
.num_resources = ARRAY_SIZE(vpac270_ide_resources),
|
.num_resources = ARRAY_SIZE(vpac270_ide_resources),
|
||||||
.resource = vpac270_ide_resources,
|
.resource = vpac270_ide_resources,
|
||||||
.dev = {
|
.dev = {
|
||||||
.platform_data = &vpac270_pata_pdata,
|
.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) {}
|
static inline void vpac270_ide_init(void) {}
|
||||||
#endif
|
#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
|
* Machine init
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -589,7 +698,10 @@ static void __init vpac270_init(void)
|
|||||||
pxa_set_ffuart_info(NULL);
|
pxa_set_ffuart_info(NULL);
|
||||||
pxa_set_btuart_info(NULL);
|
pxa_set_btuart_info(NULL);
|
||||||
pxa_set_stuart_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_lcd_init();
|
||||||
vpac270_mmc_init();
|
vpac270_mmc_init();
|
||||||
vpac270_nor_init();
|
vpac270_nor_init();
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
#include <linux/pwm_backlight.h>
|
#include <linux/pwm_backlight.h>
|
||||||
|
#include <linux/z2_battery.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
#include <linux/spi/spi.h>
|
#include <linux/spi/spi.h>
|
||||||
#include <linux/spi/libertas_spi.h>
|
#include <linux/spi/libertas_spi.h>
|
||||||
@ -26,6 +27,7 @@
|
|||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <linux/regulator/machine.h>
|
||||||
|
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
#include <asm/mach/arch.h>
|
#include <asm/mach/arch.h>
|
||||||
@ -162,7 +164,7 @@ static struct mtd_partition z2_flash_parts[] = {
|
|||||||
}, {
|
}, {
|
||||||
.name = "U-Boot Environment",
|
.name = "U-Boot Environment",
|
||||||
.offset = 0x40000,
|
.offset = 0x40000,
|
||||||
.size = 0x60000,
|
.size = 0x20000,
|
||||||
}, {
|
}, {
|
||||||
.name = "Flash",
|
.name = "Flash",
|
||||||
.offset = 0x60000,
|
.offset = 0x60000,
|
||||||
@ -451,6 +453,42 @@ static void __init z2_keys_init(void)
|
|||||||
static inline void z2_keys_init(void) {}
|
static inline void z2_keys_init(void) {}
|
||||||
#endif
|
#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
|
* SSP Devices - WiFi and LCD control
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -572,6 +610,75 @@ static void __init z2_spi_init(void)
|
|||||||
static inline void z2_spi_init(void) {}
|
static inline void z2_spi_init(void) {}
|
||||||
#endif
|
#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
|
* Machine init
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
@ -579,17 +686,20 @@ static void __init z2_init(void)
|
|||||||
{
|
{
|
||||||
pxa2xx_mfp_config(ARRAY_AND_SIZE(z2_pin_config));
|
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_lcd_init();
|
||||||
z2_mmc_init();
|
z2_mmc_init();
|
||||||
z2_mkp_init();
|
z2_mkp_init();
|
||||||
|
z2_i2c_init();
|
||||||
pxa_set_i2c_info(NULL);
|
|
||||||
|
|
||||||
z2_spi_init();
|
z2_spi_init();
|
||||||
z2_nor_init();
|
z2_nor_init();
|
||||||
z2_pwm_init();
|
z2_pwm_init();
|
||||||
z2_leds_init();
|
z2_leds_init();
|
||||||
z2_keys_init();
|
z2_keys_init();
|
||||||
|
z2_pmic_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
MACHINE_START(ZIPIT2, "Zipit Z2")
|
MACHINE_START(ZIPIT2, "Zipit Z2")
|
||||||
|
@ -57,11 +57,21 @@ config S3C64XX_SETUP_I2C1
|
|||||||
help
|
help
|
||||||
Common setup code for i2c bus 1.
|
Common setup code for i2c bus 1.
|
||||||
|
|
||||||
|
config S3C64XX_SETUP_IDE
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
Common setup code for S3C64XX IDE.
|
||||||
|
|
||||||
config S3C64XX_SETUP_FB_24BPP
|
config S3C64XX_SETUP_FB_24BPP
|
||||||
bool
|
bool
|
||||||
help
|
help
|
||||||
Common setup code for S3C64XX with an 24bpp RGB display helper.
|
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
|
config S3C64XX_SETUP_SDHCI_GPIO
|
||||||
bool
|
bool
|
||||||
help
|
help
|
||||||
@ -95,15 +105,20 @@ config MACH_SMDK6410
|
|||||||
select S3C_DEV_HSMMC
|
select S3C_DEV_HSMMC
|
||||||
select S3C_DEV_HSMMC1
|
select S3C_DEV_HSMMC1
|
||||||
select S3C_DEV_I2C1
|
select S3C_DEV_I2C1
|
||||||
|
select SAMSUNG_DEV_IDE
|
||||||
select S3C_DEV_FB
|
select S3C_DEV_FB
|
||||||
|
select S3C_DEV_RTC
|
||||||
select SAMSUNG_DEV_TS
|
select SAMSUNG_DEV_TS
|
||||||
select S3C_DEV_USB_HOST
|
select S3C_DEV_USB_HOST
|
||||||
select S3C_DEV_USB_HSOTG
|
select S3C_DEV_USB_HSOTG
|
||||||
select S3C_DEV_WDT
|
select S3C_DEV_WDT
|
||||||
|
select SAMSUNG_DEV_KEYPAD
|
||||||
select HAVE_S3C2410_WATCHDOG
|
select HAVE_S3C2410_WATCHDOG
|
||||||
select S3C64XX_SETUP_SDHCI
|
select S3C64XX_SETUP_SDHCI
|
||||||
select S3C64XX_SETUP_I2C1
|
select S3C64XX_SETUP_I2C1
|
||||||
|
select S3C64XX_SETUP_IDE
|
||||||
select S3C64XX_SETUP_FB_24BPP
|
select S3C64XX_SETUP_FB_24BPP
|
||||||
|
select S3C64XX_SETUP_KEYPAD
|
||||||
help
|
help
|
||||||
Machine support for the Samsung SMDK6410
|
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_I2C0) += setup-i2c0.o
|
||||||
obj-$(CONFIG_S3C64XX_SETUP_I2C1) += setup-i2c1.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_SDHCI) += setup-sdhci.o
|
||||||
obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o
|
obj-$(CONFIG_S3C64XX_SETUP_FB_24BPP) += setup-fb-24bpp.o
|
||||||
obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
obj-$(CONFIG_S3C64XX_SETUP_SDHCI_GPIO) += setup-sdhci-gpio.o
|
||||||
|
@ -132,6 +132,12 @@ static struct clk init_clocks_disable[] = {
|
|||||||
.name = "nand",
|
.name = "nand",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
.parent = &clk_h,
|
.parent = &clk_h,
|
||||||
|
}, {
|
||||||
|
.name = "rtc",
|
||||||
|
.id = -1,
|
||||||
|
.parent = &clk_p,
|
||||||
|
.enable = s3c64xx_pclk_ctrl,
|
||||||
|
.ctrlbit = S3C_CLKCON_PCLK_RTC,
|
||||||
}, {
|
}, {
|
||||||
.name = "adc",
|
.name = "adc",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
@ -165,6 +171,12 @@ static struct clk init_clocks_disable[] = {
|
|||||||
.ctrlbit = S3C6410_CLKCON_PCLK_IIS2,
|
.ctrlbit = S3C6410_CLKCON_PCLK_IIS2,
|
||||||
}, {
|
}, {
|
||||||
#endif
|
#endif
|
||||||
|
.name = "keypad",
|
||||||
|
.id = -1,
|
||||||
|
.parent = &clk_p,
|
||||||
|
.enable = s3c64xx_pclk_ctrl,
|
||||||
|
.ctrlbit = S3C_CLKCON_PCLK_KEYPAD,
|
||||||
|
}, {
|
||||||
.name = "spi",
|
.name = "spi",
|
||||||
.id = 0,
|
.id = 0,
|
||||||
.parent = &clk_p,
|
.parent = &clk_p,
|
||||||
@ -294,12 +306,6 @@ static struct clk init_clocks[] = {
|
|||||||
.parent = &clk_p,
|
.parent = &clk_p,
|
||||||
.enable = s3c64xx_pclk_ctrl,
|
.enable = s3c64xx_pclk_ctrl,
|
||||||
.ctrlbit = S3C_CLKCON_PCLK_UART3,
|
.ctrlbit = S3C_CLKCON_PCLK_UART3,
|
||||||
}, {
|
|
||||||
.name = "rtc",
|
|
||||||
.id = -1,
|
|
||||||
.parent = &clk_p,
|
|
||||||
.enable = s3c64xx_pclk_ctrl,
|
|
||||||
.ctrlbit = S3C_CLKCON_PCLK_RTC,
|
|
||||||
}, {
|
}, {
|
||||||
.name = "watchdog",
|
.name = "watchdog",
|
||||||
.id = -1,
|
.id = -1,
|
||||||
@ -310,6 +316,12 @@ static struct clk init_clocks[] = {
|
|||||||
.id = -1,
|
.id = -1,
|
||||||
.parent = &clk_p,
|
.parent = &clk_p,
|
||||||
.ctrlbit = S3C_CLKCON_PCLK_AC97,
|
.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/string.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
#include <mach/map.h>
|
#include <mach/map.h>
|
||||||
#include <mach/dma.h>
|
#include <mach/dma.h>
|
||||||
#include <mach/gpio.h>
|
|
||||||
|
|
||||||
#include <plat/devs.h>
|
#include <plat/devs.h>
|
||||||
#include <plat/audio.h>
|
#include <plat/audio.h>
|
||||||
|
@ -12,10 +12,10 @@
|
|||||||
#include <linux/string.h>
|
#include <linux/string.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/dma-mapping.h>
|
#include <linux/dma-mapping.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
#include <mach/dma.h>
|
#include <mach/dma.h>
|
||||||
#include <mach/map.h>
|
#include <mach/map.h>
|
||||||
#include <mach/gpio.h>
|
|
||||||
#include <mach/gpio-bank-c.h>
|
#include <mach/gpio-bank-c.h>
|
||||||
#include <mach/spi-clocks.h>
|
#include <mach/spi-clocks.h>
|
||||||
|
|
||||||
|
@ -15,9 +15,9 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
#include <linux/gpio.h>
|
||||||
|
|
||||||
#include <mach/map.h>
|
#include <mach/map.h>
|
||||||
#include <mach/gpio.h>
|
|
||||||
|
|
||||||
#include <plat/gpio-core.h>
|
#include <plat/gpio-core.h>
|
||||||
#include <plat/gpio-cfg.h>
|
#include <plat/gpio-cfg.h>
|
||||||
|
@ -67,6 +67,7 @@
|
|||||||
#define S3C64XX_PA_USB_HSOTG (0x7C000000)
|
#define S3C64XX_PA_USB_HSOTG (0x7C000000)
|
||||||
#define S3C64XX_PA_WATCHDOG (0x7E004000)
|
#define S3C64XX_PA_WATCHDOG (0x7E004000)
|
||||||
#define S3C64XX_PA_RTC (0x7E005000)
|
#define S3C64XX_PA_RTC (0x7E005000)
|
||||||
|
#define S3C64XX_PA_KEYPAD (0x7E00A000)
|
||||||
#define S3C64XX_PA_ADC (0x7E00B000)
|
#define S3C64XX_PA_ADC (0x7E00B000)
|
||||||
#define S3C64XX_PA_SYSCON (0x7E00F000)
|
#define S3C64XX_PA_SYSCON (0x7E00F000)
|
||||||
#define S3C64XX_PA_AC97 (0x7F001000)
|
#define S3C64XX_PA_AC97 (0x7F001000)
|
||||||
@ -86,6 +87,9 @@
|
|||||||
#define S3C64XX_SZ_GPIO SZ_4K
|
#define S3C64XX_SZ_GPIO SZ_4K
|
||||||
|
|
||||||
#define S3C64XX_PA_SDRAM (0x50000000)
|
#define S3C64XX_PA_SDRAM (0x50000000)
|
||||||
|
|
||||||
|
#define S3C64XX_PA_CFCON (0x70300000)
|
||||||
|
|
||||||
#define S3C64XX_PA_VIC0 (0x71200000)
|
#define S3C64XX_PA_VIC0 (0x71200000)
|
||||||
#define S3C64XX_PA_VIC1 (0x71300000)
|
#define S3C64XX_PA_VIC1 (0x71300000)
|
||||||
|
|
||||||
@ -120,5 +124,7 @@
|
|||||||
#define S3C_PA_WDT S3C64XX_PA_WATCHDOG
|
#define S3C_PA_WDT S3C64XX_PA_WATCHDOG
|
||||||
|
|
||||||
#define SAMSUNG_PA_ADC S3C64XX_PA_ADC
|
#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 */
|
#endif /* __ASM_ARCH_6400_MAP_H */
|
||||||
|
@ -34,6 +34,7 @@
|
|||||||
#define S3C_SCLK_GATE S3C_CLKREG(0x38)
|
#define S3C_SCLK_GATE S3C_CLKREG(0x38)
|
||||||
#define S3C_MEM0_GATE S3C_CLKREG(0x3C)
|
#define S3C_MEM0_GATE S3C_CLKREG(0x3C)
|
||||||
#define S3C6410_CLK_SRC2 S3C_CLKREG(0x10C)
|
#define S3C6410_CLK_SRC2 S3C_CLKREG(0x10C)
|
||||||
|
#define S3C_MEM_SYS_CFG S3C_CLKREG(0x120)
|
||||||
|
|
||||||
/* CLKDIV0 */
|
/* CLKDIV0 */
|
||||||
#define S3C6400_CLKDIV0_PCLK_MASK (0xf << 12)
|
#define S3C6400_CLKDIV0_PCLK_MASK (0xf << 12)
|
||||||
@ -154,4 +155,8 @@
|
|||||||
#define S3C6400_CLKSRC_EPLL_MOUT_SHIFT (2)
|
#define S3C6400_CLKSRC_EPLL_MOUT_SHIFT (2)
|
||||||
#define S3C6400_CLKSRC_MFC (1 << 4)
|
#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 */
|
#endif /* _PLAT_REGS_CLOCK_H */
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/input.h>
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
@ -56,6 +57,7 @@
|
|||||||
#include <mach/regs-gpio.h>
|
#include <mach/regs-gpio.h>
|
||||||
#include <mach/regs-sys.h>
|
#include <mach/regs-sys.h>
|
||||||
#include <mach/regs-srom.h>
|
#include <mach/regs-srom.h>
|
||||||
|
#include <plat/ata.h>
|
||||||
#include <plat/iic.h>
|
#include <plat/iic.h>
|
||||||
#include <plat/fb.h>
|
#include <plat/fb.h>
|
||||||
#include <plat/gpio-cfg.h>
|
#include <plat/gpio-cfg.h>
|
||||||
@ -66,6 +68,7 @@
|
|||||||
#include <plat/cpu.h>
|
#include <plat/cpu.h>
|
||||||
#include <plat/adc.h>
|
#include <plat/adc.h>
|
||||||
#include <plat/ts.h>
|
#include <plat/ts.h>
|
||||||
|
#include <plat/keypad.h>
|
||||||
|
|
||||||
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
#define UCON S3C2410_UCON_DEFAULT | S3C2410_UCON_UCLK
|
||||||
#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
|
#define ULCON S3C2410_LCON_CS8 | S3C2410_LCON_PNONE | S3C2410_LCON_STOPB
|
||||||
@ -242,6 +245,29 @@ static struct platform_device smdk6410_b_pwr_5v = {
|
|||||||
};
|
};
|
||||||
#endif
|
#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 map_desc smdk6410_iodesc[] = {};
|
||||||
|
|
||||||
static struct platform_device *smdk6410_devices[] __initdata = {
|
static struct platform_device *smdk6410_devices[] __initdata = {
|
||||||
@ -257,6 +283,7 @@ static struct platform_device *smdk6410_devices[] __initdata = {
|
|||||||
&s3c_device_ohci,
|
&s3c_device_ohci,
|
||||||
&s3c_device_usb_hsotg,
|
&s3c_device_usb_hsotg,
|
||||||
&s3c64xx_device_iisv4,
|
&s3c64xx_device_iisv4,
|
||||||
|
&samsung_device_keypad,
|
||||||
|
|
||||||
#ifdef CONFIG_REGULATOR
|
#ifdef CONFIG_REGULATOR
|
||||||
&smdk6410_b_pwr_5v,
|
&smdk6410_b_pwr_5v,
|
||||||
@ -265,6 +292,8 @@ static struct platform_device *smdk6410_devices[] __initdata = {
|
|||||||
|
|
||||||
&smdk6410_smsc911x,
|
&smdk6410_smsc911x,
|
||||||
&s3c_device_adc,
|
&s3c_device_adc,
|
||||||
|
&s3c_device_cfcon,
|
||||||
|
&s3c_device_rtc,
|
||||||
&s3c_device_ts,
|
&s3c_device_ts,
|
||||||
&s3c_device_wdt,
|
&s3c_device_wdt,
|
||||||
};
|
};
|
||||||
@ -636,6 +665,8 @@ static void __init smdk6410_machine_init(void)
|
|||||||
s3c_i2c1_set_platdata(NULL);
|
s3c_i2c1_set_platdata(NULL);
|
||||||
s3c_fb_set_platdata(&smdk6410_lcd_pdata);
|
s3c_fb_set_platdata(&smdk6410_lcd_pdata);
|
||||||
|
|
||||||
|
samsung_keypad_set_platdata(&smdk6410_keypad_data);
|
||||||
|
|
||||||
s3c24xx_ts_set_platdata(&s3c_ts_platform);
|
s3c24xx_ts_set_platdata(&s3c_ts_platform);
|
||||||
|
|
||||||
/* configure nCS1 width to 16 bits */
|
/* 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(0, i2c_devs0, ARRAY_SIZE(i2c_devs0));
|
||||||
i2c_register_board_info(1, i2c_devs1, ARRAY_SIZE(i2c_devs1));
|
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));
|
platform_add_devices(smdk6410_devices, ARRAY_SIZE(smdk6410_devices));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -37,8 +37,9 @@
|
|||||||
#include <plat/devs.h>
|
#include <plat/devs.h>
|
||||||
#include <plat/clock.h>
|
#include <plat/clock.h>
|
||||||
#include <plat/sdhci.h>
|
#include <plat/sdhci.h>
|
||||||
|
#include <plat/ata-core.h>
|
||||||
|
#include <plat/adc-core.h>
|
||||||
#include <plat/iic-core.h>
|
#include <plat/iic-core.h>
|
||||||
#include <plat/adc.h>
|
|
||||||
#include <plat/onenand-core.h>
|
#include <plat/onenand-core.h>
|
||||||
#include <mach/s3c6400.h>
|
#include <mach/s3c6400.h>
|
||||||
#include <mach/s3c6410.h>
|
#include <mach/s3c6410.h>
|
||||||
@ -54,10 +55,11 @@ void __init s3c6410_map_io(void)
|
|||||||
s3c_i2c0_setname("s3c2440-i2c");
|
s3c_i2c0_setname("s3c2440-i2c");
|
||||||
s3c_i2c1_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_device_nand.name = "s3c6400-nand";
|
||||||
s3c_onenand_setname("s3c6410-onenand");
|
s3c_onenand_setname("s3c6410-onenand");
|
||||||
s3c64xx_onenand1_setname("s3c6410-onenand");
|
s3c64xx_onenand1_setname("s3c6410-onenand");
|
||||||
|
s3c_cfcon_setname("s3c64xx-pata");
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init s3c6410_init_clocks(int xtal)
|
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