Merge 3.2-rc3 into tty-next to handle merge conflict in tty_ldisc.c
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
commit
dd7c7c3f69
2
.mailmap
2
.mailmap
@ -68,6 +68,7 @@ Juha Yrjola <juha.yrjola@solidboot.com>
|
|||||||
Kay Sievers <kay.sievers@vrfy.org>
|
Kay Sievers <kay.sievers@vrfy.org>
|
||||||
Kenneth W Chen <kenneth.w.chen@intel.com>
|
Kenneth W Chen <kenneth.w.chen@intel.com>
|
||||||
Koushik <raghavendra.koushik@neterion.com>
|
Koushik <raghavendra.koushik@neterion.com>
|
||||||
|
Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
||||||
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
Leonid I Ananiev <leonid.i.ananiev@intel.com>
|
||||||
Linas Vepstas <linas@austin.ibm.com>
|
Linas Vepstas <linas@austin.ibm.com>
|
||||||
Mark Brown <broonie@sirena.org.uk>
|
Mark Brown <broonie@sirena.org.uk>
|
||||||
@ -111,3 +112,4 @@ Uwe Kleine-König <ukl@pengutronix.de>
|
|||||||
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
Uwe Kleine-König <Uwe.Kleine-Koenig@digi.com>
|
||||||
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
Valdis Kletnieks <Valdis.Kletnieks@vt.edu>
|
||||||
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
Takashi YOSHII <takashi.yoshii.zj@renesas.com>
|
||||||
|
Yusuke Goda <goda.yusuke@renesas.com>
|
||||||
|
@ -206,16 +206,3 @@ Description:
|
|||||||
when a discarded area is read the discard_zeroes_data
|
when a discarded area is read the discard_zeroes_data
|
||||||
parameter will be set to one. Otherwise it will be 0 and
|
parameter will be set to one. Otherwise it will be 0 and
|
||||||
the result of reading a discarded area is undefined.
|
the result of reading a discarded area is undefined.
|
||||||
What: /sys/block/<disk>/alias
|
|
||||||
Date: Aug 2011
|
|
||||||
Contact: Nao Nishijima <nao.nishijima.xt@hitachi.com>
|
|
||||||
Description:
|
|
||||||
A raw device name of a disk does not always point a same disk
|
|
||||||
each boot-up time. Therefore, users have to use persistent
|
|
||||||
device names, which udev creates when the kernel finds a disk,
|
|
||||||
instead of raw device name. However, kernel doesn't show those
|
|
||||||
persistent names on its messages (e.g. dmesg).
|
|
||||||
This file can store an alias of the disk and it would be
|
|
||||||
appeared in kernel messages if it is set. A disk can have an
|
|
||||||
alias which length is up to 255bytes. Users can use alphabets,
|
|
||||||
numbers, "-" and "_" in alias name. This file is writeonce.
|
|
||||||
|
@ -32,7 +32,7 @@
|
|||||||
The Linux DRM layer contains code intended to support the needs
|
The Linux DRM layer contains code intended to support the needs
|
||||||
of complex graphics devices, usually containing programmable
|
of complex graphics devices, usually containing programmable
|
||||||
pipelines well suited to 3D graphics acceleration. Graphics
|
pipelines well suited to 3D graphics acceleration. Graphics
|
||||||
drivers in the kernel can make use of DRM functions to make
|
drivers in the kernel may make use of DRM functions to make
|
||||||
tasks like memory management, interrupt handling and DMA easier,
|
tasks like memory management, interrupt handling and DMA easier,
|
||||||
and provide a uniform interface to applications.
|
and provide a uniform interface to applications.
|
||||||
</para>
|
</para>
|
||||||
@ -57,10 +57,10 @@
|
|||||||
existing drivers.
|
existing drivers.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
First, we'll go over some typical driver initialization
|
First, we go over some typical driver initialization
|
||||||
requirements, like setting up command buffers, creating an
|
requirements, like setting up command buffers, creating an
|
||||||
initial output configuration, and initializing core services.
|
initial output configuration, and initializing core services.
|
||||||
Subsequent sections will cover core internals in more detail,
|
Subsequent sections cover core internals in more detail,
|
||||||
providing implementation notes and examples.
|
providing implementation notes and examples.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -74,7 +74,7 @@
|
|||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The core of every DRM driver is struct drm_driver. Drivers
|
The core of every DRM driver is struct drm_driver. Drivers
|
||||||
will typically statically initialize a drm_driver structure,
|
typically statically initialize a drm_driver structure,
|
||||||
then pass it to drm_init() at load time.
|
then pass it to drm_init() at load time.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -88,8 +88,8 @@
|
|||||||
</para>
|
</para>
|
||||||
<programlisting>
|
<programlisting>
|
||||||
static struct drm_driver driver = {
|
static struct drm_driver driver = {
|
||||||
/* don't use mtrr's here, the Xserver or user space app should
|
/* Don't use MTRRs here; the Xserver or userspace app should
|
||||||
* deal with them for intel hardware.
|
* deal with them for Intel hardware.
|
||||||
*/
|
*/
|
||||||
.driver_features =
|
.driver_features =
|
||||||
DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
|
DRIVER_USE_AGP | DRIVER_REQUIRE_AGP |
|
||||||
@ -154,8 +154,8 @@
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
<para>
|
<para>
|
||||||
In the example above, taken from the i915 DRM driver, the driver
|
In the example above, taken from the i915 DRM driver, the driver
|
||||||
sets several flags indicating what core features it supports.
|
sets several flags indicating what core features it supports;
|
||||||
We'll go over the individual callbacks in later sections. Since
|
we go over the individual callbacks in later sections. Since
|
||||||
flags indicate which features your driver supports to the DRM
|
flags indicate which features your driver supports to the DRM
|
||||||
core, you need to set most of them prior to calling drm_init(). Some,
|
core, you need to set most of them prior to calling drm_init(). Some,
|
||||||
like DRIVER_MODESET can be set later based on user supplied parameters,
|
like DRIVER_MODESET can be set later based on user supplied parameters,
|
||||||
@ -203,8 +203,8 @@
|
|||||||
<term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term>
|
<term>DRIVER_HAVE_IRQ</term><term>DRIVER_IRQ_SHARED</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
DRIVER_HAVE_IRQ indicates whether the driver has a IRQ
|
DRIVER_HAVE_IRQ indicates whether the driver has an IRQ
|
||||||
handler, DRIVER_IRQ_SHARED indicates whether the device &
|
handler. DRIVER_IRQ_SHARED indicates whether the device &
|
||||||
handler support shared IRQs (note that this is required of
|
handler support shared IRQs (note that this is required of
|
||||||
PCI drivers).
|
PCI drivers).
|
||||||
</para>
|
</para>
|
||||||
@ -214,8 +214,8 @@
|
|||||||
<term>DRIVER_DMA_QUEUE</term>
|
<term>DRIVER_DMA_QUEUE</term>
|
||||||
<listitem>
|
<listitem>
|
||||||
<para>
|
<para>
|
||||||
If the driver queues DMA requests and completes them
|
Should be set if the driver queues DMA requests and completes them
|
||||||
asynchronously, this flag should be set. Deprecated.
|
asynchronously. Deprecated.
|
||||||
</para>
|
</para>
|
||||||
</listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
@ -238,7 +238,7 @@
|
|||||||
</variablelist>
|
</variablelist>
|
||||||
<para>
|
<para>
|
||||||
In this specific case, the driver requires AGP and supports
|
In this specific case, the driver requires AGP and supports
|
||||||
IRQs. DMA, as we'll see, is handled by device specific ioctls
|
IRQs. DMA, as discussed later, is handled by device-specific ioctls
|
||||||
in this case. It also supports the kernel mode setting APIs, though
|
in this case. It also supports the kernel mode setting APIs, though
|
||||||
unlike in the actual i915 driver source, this example unconditionally
|
unlike in the actual i915 driver source, this example unconditionally
|
||||||
exports KMS capability.
|
exports KMS capability.
|
||||||
@ -269,36 +269,34 @@
|
|||||||
initial output configuration.
|
initial output configuration.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Note that the tasks performed at driver load time must not
|
If compatibility is a concern (e.g. with drivers converted over
|
||||||
conflict with DRM client requirements. For instance, if user
|
to the new interfaces from the old ones), care must be taken to
|
||||||
|
prevent device initialization and control that is incompatible with
|
||||||
|
currently active userspace drivers. For instance, if user
|
||||||
level mode setting drivers are in use, it would be problematic
|
level mode setting drivers are in use, it would be problematic
|
||||||
to perform output discovery & configuration at load time.
|
to perform output discovery & configuration at load time.
|
||||||
Likewise, if pre-memory management aware user level drivers are
|
Likewise, if user-level drivers unaware of memory management are
|
||||||
in use, memory management and command buffer setup may need to
|
in use, memory management and command buffer setup may need to
|
||||||
be omitted. These requirements are driver specific, and care
|
be omitted. These requirements are driver-specific, and care
|
||||||
needs to be taken to keep both old and new applications and
|
needs to be taken to keep both old and new applications and
|
||||||
libraries working. The i915 driver supports the "modeset"
|
libraries working. The i915 driver supports the "modeset"
|
||||||
module parameter to control whether advanced features are
|
module parameter to control whether advanced features are
|
||||||
enabled at load time or in legacy fashion. If compatibility is
|
enabled at load time or in legacy fashion.
|
||||||
a concern (e.g. with drivers converted over to the new interfaces
|
|
||||||
from the old ones), care must be taken to prevent incompatible
|
|
||||||
device initialization and control with the currently active
|
|
||||||
userspace drivers.
|
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Driver private & performance counters</title>
|
<title>Driver private & performance counters</title>
|
||||||
<para>
|
<para>
|
||||||
The driver private hangs off the main drm_device structure and
|
The driver private hangs off the main drm_device structure and
|
||||||
can be used for tracking various device specific bits of
|
can be used for tracking various device-specific bits of
|
||||||
information, like register offsets, command buffer status,
|
information, like register offsets, command buffer status,
|
||||||
register state for suspend/resume, etc. At load time, a
|
register state for suspend/resume, etc. At load time, a
|
||||||
driver can simply allocate one and set drm_device.dev_priv
|
driver may simply allocate one and set drm_device.dev_priv
|
||||||
appropriately; at unload the driver can free it and set
|
appropriately; it should be freed and drm_device.dev_priv set
|
||||||
drm_device.dev_priv to NULL.
|
to NULL when the driver is unloaded.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
The DRM supports several counters which can be used for rough
|
The DRM supports several counters which may be used for rough
|
||||||
performance characterization. Note that the DRM stat counter
|
performance characterization. Note that the DRM stat counter
|
||||||
system is not often used by applications, and supporting
|
system is not often used by applications, and supporting
|
||||||
additional counters is completely optional.
|
additional counters is completely optional.
|
||||||
@ -307,15 +305,15 @@
|
|||||||
These interfaces are deprecated and should not be used. If performance
|
These interfaces are deprecated and should not be used. If performance
|
||||||
monitoring is desired, the developer should investigate and
|
monitoring is desired, the developer should investigate and
|
||||||
potentially enhance the kernel perf and tracing infrastructure to export
|
potentially enhance the kernel perf and tracing infrastructure to export
|
||||||
GPU related performance information to performance monitoring
|
GPU related performance information for consumption by performance
|
||||||
tools and applications.
|
monitoring tools and applications.
|
||||||
</para>
|
</para>
|
||||||
</sect2>
|
</sect2>
|
||||||
|
|
||||||
<sect2>
|
<sect2>
|
||||||
<title>Configuring the device</title>
|
<title>Configuring the device</title>
|
||||||
<para>
|
<para>
|
||||||
Obviously, device configuration will be device specific.
|
Obviously, device configuration is device-specific.
|
||||||
However, there are several common operations: finding a
|
However, there are several common operations: finding a
|
||||||
device's PCI resources, mapping them, and potentially setting
|
device's PCI resources, mapping them, and potentially setting
|
||||||
up an IRQ handler.
|
up an IRQ handler.
|
||||||
@ -323,10 +321,10 @@
|
|||||||
<para>
|
<para>
|
||||||
Finding & mapping resources is fairly straightforward. The
|
Finding & mapping resources is fairly straightforward. The
|
||||||
DRM wrapper functions, drm_get_resource_start() and
|
DRM wrapper functions, drm_get_resource_start() and
|
||||||
drm_get_resource_len() can be used to find BARs on the given
|
drm_get_resource_len(), may be used to find BARs on the given
|
||||||
drm_device struct. Once those values have been retrieved, the
|
drm_device struct. Once those values have been retrieved, the
|
||||||
driver load function can call drm_addmap() to create a new
|
driver load function can call drm_addmap() to create a new
|
||||||
mapping for the BAR in question. Note you'll probably want a
|
mapping for the BAR in question. Note that you probably want a
|
||||||
drm_local_map_t in your driver private structure to track any
|
drm_local_map_t in your driver private structure to track any
|
||||||
mappings you create.
|
mappings you create.
|
||||||
<!-- !Fdrivers/gpu/drm/drm_bufs.c drm_get_resource_* -->
|
<!-- !Fdrivers/gpu/drm/drm_bufs.c drm_get_resource_* -->
|
||||||
@ -335,20 +333,20 @@
|
|||||||
<para>
|
<para>
|
||||||
if compatibility with other operating systems isn't a concern
|
if compatibility with other operating systems isn't a concern
|
||||||
(DRM drivers can run under various BSD variants and OpenSolaris),
|
(DRM drivers can run under various BSD variants and OpenSolaris),
|
||||||
native Linux calls can be used for the above, e.g. pci_resource_*
|
native Linux calls may be used for the above, e.g. pci_resource_*
|
||||||
and iomap*/iounmap. See the Linux device driver book for more
|
and iomap*/iounmap. See the Linux device driver book for more
|
||||||
info.
|
info.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once you have a register map, you can use the DRM_READn() and
|
Once you have a register map, you may use the DRM_READn() and
|
||||||
DRM_WRITEn() macros to access the registers on your device, or
|
DRM_WRITEn() macros to access the registers on your device, or
|
||||||
use driver specific versions to offset into your MMIO space
|
use driver-specific versions to offset into your MMIO space
|
||||||
relative to a driver specific base pointer (see I915_READ for
|
relative to a driver-specific base pointer (see I915_READ for
|
||||||
example).
|
an example).
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If your device supports interrupt generation, you may want to
|
If your device supports interrupt generation, you may want to
|
||||||
setup an interrupt handler at driver load time as well. This
|
set up an interrupt handler when the driver is loaded. This
|
||||||
is done using the drm_irq_install() function. If your device
|
is done using the drm_irq_install() function. If your device
|
||||||
supports vertical blank interrupts, it should call
|
supports vertical blank interrupts, it should call
|
||||||
drm_vblank_init() to initialize the core vblank handling code before
|
drm_vblank_init() to initialize the core vblank handling code before
|
||||||
@ -357,7 +355,7 @@
|
|||||||
</para>
|
</para>
|
||||||
<!--!Fdrivers/char/drm/drm_irq.c drm_irq_install-->
|
<!--!Fdrivers/char/drm/drm_irq.c drm_irq_install-->
|
||||||
<para>
|
<para>
|
||||||
Once your interrupt handler is registered (it'll use your
|
Once your interrupt handler is registered (it uses your
|
||||||
drm_driver.irq_handler as the actual interrupt handling
|
drm_driver.irq_handler as the actual interrupt handling
|
||||||
function), you can safely enable interrupts on your device,
|
function), you can safely enable interrupts on your device,
|
||||||
assuming any other state your interrupt handler uses is also
|
assuming any other state your interrupt handler uses is also
|
||||||
@ -371,10 +369,10 @@
|
|||||||
using the pci_map_rom() call, a convenience function that
|
using the pci_map_rom() call, a convenience function that
|
||||||
takes care of mapping the actual ROM, whether it has been
|
takes care of mapping the actual ROM, whether it has been
|
||||||
shadowed into memory (typically at address 0xc0000) or exists
|
shadowed into memory (typically at address 0xc0000) or exists
|
||||||
on the PCI device in the ROM BAR. Note that once you've
|
on the PCI device in the ROM BAR. Note that after the ROM
|
||||||
mapped the ROM and extracted any necessary information, be
|
has been mapped and any necessary information has been extracted,
|
||||||
sure to unmap it; on many devices the ROM address decoder is
|
it should be unmapped; on many devices, the ROM address decoder is
|
||||||
shared with other BARs, so leaving it mapped can cause
|
shared with other BARs, so leaving it mapped could cause
|
||||||
undesired behavior like hangs or memory corruption.
|
undesired behavior like hangs or memory corruption.
|
||||||
<!--!Fdrivers/pci/rom.c pci_map_rom-->
|
<!--!Fdrivers/pci/rom.c pci_map_rom-->
|
||||||
</para>
|
</para>
|
||||||
@ -389,9 +387,9 @@
|
|||||||
should support a memory manager.
|
should support a memory manager.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
If your driver supports memory management (it should!), you'll
|
If your driver supports memory management (it should!), you
|
||||||
need to set that up at load time as well. How you initialize
|
need to set that up at load time as well. How you initialize
|
||||||
it depends on which memory manager you're using, TTM or GEM.
|
it depends on which memory manager you're using: TTM or GEM.
|
||||||
</para>
|
</para>
|
||||||
<sect3>
|
<sect3>
|
||||||
<title>TTM initialization</title>
|
<title>TTM initialization</title>
|
||||||
@ -401,7 +399,7 @@
|
|||||||
and devices with dedicated video RAM (VRAM), i.e. most discrete
|
and devices with dedicated video RAM (VRAM), i.e. most discrete
|
||||||
graphics devices. If your device has dedicated RAM, supporting
|
graphics devices. If your device has dedicated RAM, supporting
|
||||||
TTM is desirable. TTM also integrates tightly with your
|
TTM is desirable. TTM also integrates tightly with your
|
||||||
driver specific buffer execution function. See the radeon
|
driver-specific buffer execution function. See the radeon
|
||||||
driver for examples.
|
driver for examples.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -429,21 +427,21 @@
|
|||||||
created by the memory manager at runtime. Your global TTM should
|
created by the memory manager at runtime. Your global TTM should
|
||||||
have a type of TTM_GLOBAL_TTM_MEM. The size field for the global
|
have a type of TTM_GLOBAL_TTM_MEM. The size field for the global
|
||||||
object should be sizeof(struct ttm_mem_global), and the init and
|
object should be sizeof(struct ttm_mem_global), and the init and
|
||||||
release hooks should point at your driver specific init and
|
release hooks should point at your driver-specific init and
|
||||||
release routines, which will probably eventually call
|
release routines, which probably eventually call
|
||||||
ttm_mem_global_init and ttm_mem_global_release respectively.
|
ttm_mem_global_init and ttm_mem_global_release, respectively.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once your global TTM accounting structure is set up and initialized
|
Once your global TTM accounting structure is set up and initialized
|
||||||
(done by calling ttm_global_item_ref on the global object you
|
by calling ttm_global_item_ref() on it,
|
||||||
just created), you'll need to create a buffer object TTM to
|
you need to create a buffer object TTM to
|
||||||
provide a pool for buffer object allocation by clients and the
|
provide a pool for buffer object allocation by clients and the
|
||||||
kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO,
|
kernel itself. The type of this object should be TTM_GLOBAL_TTM_BO,
|
||||||
and its size should be sizeof(struct ttm_bo_global). Again,
|
and its size should be sizeof(struct ttm_bo_global). Again,
|
||||||
driver specific init and release functions can be provided,
|
driver-specific init and release functions may be provided,
|
||||||
likely eventually calling ttm_bo_global_init and
|
likely eventually calling ttm_bo_global_init() and
|
||||||
ttm_bo_global_release, respectively. Also like the previous
|
ttm_bo_global_release(), respectively. Also, like the previous
|
||||||
object, ttm_global_item_ref is used to create an initial reference
|
object, ttm_global_item_ref() is used to create an initial reference
|
||||||
count for the TTM, which will call your initialization function.
|
count for the TTM, which will call your initialization function.
|
||||||
</para>
|
</para>
|
||||||
</sect3>
|
</sect3>
|
||||||
@ -453,27 +451,26 @@
|
|||||||
GEM is an alternative to TTM, designed specifically for UMA
|
GEM is an alternative to TTM, designed specifically for UMA
|
||||||
devices. It has simpler initialization and execution requirements
|
devices. It has simpler initialization and execution requirements
|
||||||
than TTM, but has no VRAM management capability. Core GEM
|
than TTM, but has no VRAM management capability. Core GEM
|
||||||
initialization is comprised of a basic drm_mm_init call to create
|
is initialized by calling drm_mm_init() to create
|
||||||
a GTT DRM MM object, which provides an address space pool for
|
a GTT DRM MM object, which provides an address space pool for
|
||||||
object allocation. In a KMS configuration, the driver will
|
object allocation. In a KMS configuration, the driver
|
||||||
need to allocate and initialize a command ring buffer following
|
needs to allocate and initialize a command ring buffer following
|
||||||
basic GEM initialization. Most UMA devices have a so-called
|
core GEM initialization. A UMA device usually has what is called a
|
||||||
"stolen" memory region, which provides space for the initial
|
"stolen" memory region, which provides space for the initial
|
||||||
framebuffer and large, contiguous memory regions required by the
|
framebuffer and large, contiguous memory regions required by the
|
||||||
device. This space is not typically managed by GEM, and must
|
device. This space is not typically managed by GEM, and it must
|
||||||
be initialized separately into its own DRM MM object.
|
be initialized separately into its own DRM MM object.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Initialization will be driver specific, and will depend on
|
Initialization is driver-specific. In the case of Intel
|
||||||
the architecture of the device. In the case of Intel
|
|
||||||
integrated graphics chips like 965GM, GEM initialization can
|
integrated graphics chips like 965GM, GEM initialization can
|
||||||
be done by calling the internal GEM init function,
|
be done by calling the internal GEM init function,
|
||||||
i915_gem_do_init(). Since the 965GM is a UMA device
|
i915_gem_do_init(). Since the 965GM is a UMA device
|
||||||
(i.e. it doesn't have dedicated VRAM), GEM will manage
|
(i.e. it doesn't have dedicated VRAM), GEM manages
|
||||||
making regular RAM available for GPU operations. Memory set
|
making regular RAM available for GPU operations. Memory set
|
||||||
aside by the BIOS (called "stolen" memory by the i915
|
aside by the BIOS (called "stolen" memory by the i915
|
||||||
driver) will be managed by the DRM memrange allocator; the
|
driver) is managed by the DRM memrange allocator; the
|
||||||
rest of the aperture will be managed by GEM.
|
rest of the aperture is managed by GEM.
|
||||||
<programlisting>
|
<programlisting>
|
||||||
/* Basic memrange allocator for stolen space (aka vram) */
|
/* Basic memrange allocator for stolen space (aka vram) */
|
||||||
drm_memrange_init(&dev_priv->vram, 0, prealloc_size);
|
drm_memrange_init(&dev_priv->vram, 0, prealloc_size);
|
||||||
@ -483,7 +480,7 @@
|
|||||||
<!--!Edrivers/char/drm/drm_memrange.c-->
|
<!--!Edrivers/char/drm/drm_memrange.c-->
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Once the memory manager has been set up, we can allocate the
|
Once the memory manager has been set up, we may allocate the
|
||||||
command buffer. In the i915 case, this is also done with a
|
command buffer. In the i915 case, this is also done with a
|
||||||
GEM function, i915_gem_init_ringbuffer().
|
GEM function, i915_gem_init_ringbuffer().
|
||||||
</para>
|
</para>
|
||||||
@ -493,16 +490,25 @@
|
|||||||
<sect2>
|
<sect2>
|
||||||
<title>Output configuration</title>
|
<title>Output configuration</title>
|
||||||
<para>
|
<para>
|
||||||
The final initialization task is output configuration. This involves
|
The final initialization task is output configuration. This involves:
|
||||||
finding and initializing the CRTCs, encoders and connectors
|
<itemizedlist>
|
||||||
for your device, creating an initial configuration and
|
<listitem>
|
||||||
registering a framebuffer console driver.
|
Finding and initializing the CRTCs, encoders, and connectors
|
||||||
|
for the device.
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
Creating an initial configuration.
|
||||||
|
</listitem>
|
||||||
|
<listitem>
|
||||||
|
Registering a framebuffer console driver.
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
</para>
|
</para>
|
||||||
<sect3>
|
<sect3>
|
||||||
<title>Output discovery and initialization</title>
|
<title>Output discovery and initialization</title>
|
||||||
<para>
|
<para>
|
||||||
Several core functions exist to create CRTCs, encoders and
|
Several core functions exist to create CRTCs, encoders, and
|
||||||
connectors, namely drm_crtc_init(), drm_connector_init() and
|
connectors, namely: drm_crtc_init(), drm_connector_init(), and
|
||||||
drm_encoder_init(), along with several "helper" functions to
|
drm_encoder_init(), along with several "helper" functions to
|
||||||
perform common tasks.
|
perform common tasks.
|
||||||
</para>
|
</para>
|
||||||
@ -555,10 +561,10 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
</programlisting>
|
</programlisting>
|
||||||
<para>
|
<para>
|
||||||
In the example above (again, taken from the i915 driver), a
|
In the example above (again, taken from the i915 driver), a
|
||||||
CRT connector and encoder combination is created. A device
|
CRT connector and encoder combination is created. A device-specific
|
||||||
specific i2c bus is also created, for fetching EDID data and
|
i2c bus is also created for fetching EDID data and
|
||||||
performing monitor detection. Once the process is complete,
|
performing monitor detection. Once the process is complete,
|
||||||
the new connector is registered with sysfs, to make its
|
the new connector is registered with sysfs to make its
|
||||||
properties available to applications.
|
properties available to applications.
|
||||||
</para>
|
</para>
|
||||||
<sect4>
|
<sect4>
|
||||||
@ -567,12 +573,12 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
Since many PC-class graphics devices have similar display output
|
Since many PC-class graphics devices have similar display output
|
||||||
designs, the DRM provides a set of helper functions to make
|
designs, the DRM provides a set of helper functions to make
|
||||||
output management easier. The core helper routines handle
|
output management easier. The core helper routines handle
|
||||||
encoder re-routing and disabling of unused functions following
|
encoder re-routing and the disabling of unused functions following
|
||||||
mode set. Using the helpers is optional, but recommended for
|
mode setting. Using the helpers is optional, but recommended for
|
||||||
devices with PC-style architectures (i.e. a set of display planes
|
devices with PC-style architectures (i.e. a set of display planes
|
||||||
for feeding pixels to encoders which are in turn routed to
|
for feeding pixels to encoders which are in turn routed to
|
||||||
connectors). Devices with more complex requirements needing
|
connectors). Devices with more complex requirements needing
|
||||||
finer grained management can opt to use the core callbacks
|
finer grained management may opt to use the core callbacks
|
||||||
directly.
|
directly.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -580,17 +586,25 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
</para>
|
</para>
|
||||||
</sect4>
|
</sect4>
|
||||||
<para>
|
<para>
|
||||||
For each encoder, CRTC and connector, several functions must
|
Each encoder object needs to provide:
|
||||||
be provided, depending on the object type. Encoder objects
|
<itemizedlist>
|
||||||
need to provide a DPMS (basically on/off) function, mode fixup
|
<listitem>
|
||||||
(for converting requested modes into native hardware timings),
|
A DPMS (basically on/off) function.
|
||||||
and prepare, set and commit functions for use by the core DRM
|
</listitem>
|
||||||
helper functions. Connector helpers need to provide mode fetch and
|
<listitem>
|
||||||
validity functions as well as an encoder matching function for
|
A mode-fixup function (for converting requested modes into
|
||||||
returning an ideal encoder for a given connector. The core
|
native hardware timings).
|
||||||
connector functions include a DPMS callback, (deprecated)
|
</listitem>
|
||||||
save/restore routines, detection, mode probing, property handling,
|
<listitem>
|
||||||
and cleanup functions.
|
Functions (prepare, set, and commit) for use by the core DRM
|
||||||
|
helper functions.
|
||||||
|
</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
Connector helpers need to provide functions (mode-fetch, validity,
|
||||||
|
and encoder-matching) for returning an ideal encoder for a given
|
||||||
|
connector. The core connector functions include a DPMS callback,
|
||||||
|
save/restore routines (deprecated), detection, mode probing,
|
||||||
|
property handling, and cleanup functions.
|
||||||
</para>
|
</para>
|
||||||
<!--!Edrivers/char/drm/drm_crtc.h-->
|
<!--!Edrivers/char/drm/drm_crtc.h-->
|
||||||
<!--!Edrivers/char/drm/drm_crtc.c-->
|
<!--!Edrivers/char/drm/drm_crtc.c-->
|
||||||
@ -605,22 +619,33 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<title>VBlank event handling</title>
|
<title>VBlank event handling</title>
|
||||||
<para>
|
<para>
|
||||||
The DRM core exposes two vertical blank related ioctls:
|
The DRM core exposes two vertical blank related ioctls:
|
||||||
DRM_IOCTL_WAIT_VBLANK and DRM_IOCTL_MODESET_CTL.
|
<variablelist>
|
||||||
|
<varlistentry>
|
||||||
|
<term>DRM_IOCTL_WAIT_VBLANK</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This takes a struct drm_wait_vblank structure as its argument,
|
||||||
|
and it is used to block or request a signal when a specified
|
||||||
|
vblank event occurs.
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
<varlistentry>
|
||||||
|
<term>DRM_IOCTL_MODESET_CTL</term>
|
||||||
|
<listitem>
|
||||||
|
<para>
|
||||||
|
This should be called by application level drivers before and
|
||||||
|
after mode setting, since on many devices the vertical blank
|
||||||
|
counter is reset at that time. Internally, the DRM snapshots
|
||||||
|
the last vblank count when the ioctl is called with the
|
||||||
|
_DRM_PRE_MODESET command, so that the counter won't go backwards
|
||||||
|
(which is dealt with when _DRM_POST_MODESET is used).
|
||||||
|
</para>
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
</variablelist>
|
||||||
<!--!Edrivers/char/drm/drm_irq.c-->
|
<!--!Edrivers/char/drm/drm_irq.c-->
|
||||||
</para>
|
</para>
|
||||||
<para>
|
|
||||||
DRM_IOCTL_WAIT_VBLANK takes a struct drm_wait_vblank structure
|
|
||||||
as its argument, and is used to block or request a signal when a
|
|
||||||
specified vblank event occurs.
|
|
||||||
</para>
|
|
||||||
<para>
|
|
||||||
DRM_IOCTL_MODESET_CTL should be called by application level
|
|
||||||
drivers before and after mode setting, since on many devices the
|
|
||||||
vertical blank counter will be reset at that time. Internally,
|
|
||||||
the DRM snapshots the last vblank count when the ioctl is called
|
|
||||||
with the _DRM_PRE_MODESET command so that the counter won't go
|
|
||||||
backwards (which is dealt with when _DRM_POST_MODESET is used).
|
|
||||||
</para>
|
|
||||||
<para>
|
<para>
|
||||||
To support the functions above, the DRM core provides several
|
To support the functions above, the DRM core provides several
|
||||||
helper functions for tracking vertical blank counters, and
|
helper functions for tracking vertical blank counters, and
|
||||||
@ -632,24 +657,24 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
register. The enable and disable vblank callbacks should enable
|
register. The enable and disable vblank callbacks should enable
|
||||||
and disable vertical blank interrupts, respectively. In the
|
and disable vertical blank interrupts, respectively. In the
|
||||||
absence of DRM clients waiting on vblank events, the core DRM
|
absence of DRM clients waiting on vblank events, the core DRM
|
||||||
code will use the disable_vblank() function to disable
|
code uses the disable_vblank() function to disable
|
||||||
interrupts, which saves power. They'll be re-enabled again when
|
interrupts, which saves power. They are re-enabled again when
|
||||||
a client calls the vblank wait ioctl above.
|
a client calls the vblank wait ioctl above.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Devices that don't provide a count register can simply use an
|
A device that doesn't provide a count register may simply use an
|
||||||
internal atomic counter incremented on every vertical blank
|
internal atomic counter incremented on every vertical blank
|
||||||
interrupt, and can make their enable and disable vblank
|
interrupt (and then treat the enable_vblank() and disable_vblank()
|
||||||
functions into no-ops.
|
callbacks as no-ops).
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Memory management</title>
|
<title>Memory management</title>
|
||||||
<para>
|
<para>
|
||||||
The memory manager lies at the heart of many DRM operations, and
|
The memory manager lies at the heart of many DRM operations; it
|
||||||
is also required to support advanced client features like OpenGL
|
is required to support advanced client features like OpenGL
|
||||||
pbuffers. The DRM currently contains two memory managers, TTM
|
pbuffers. The DRM currently contains two memory managers: TTM
|
||||||
and GEM.
|
and GEM.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -679,41 +704,46 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<para>
|
<para>
|
||||||
GEM-enabled drivers must provide gem_init_object() and
|
GEM-enabled drivers must provide gem_init_object() and
|
||||||
gem_free_object() callbacks to support the core memory
|
gem_free_object() callbacks to support the core memory
|
||||||
allocation routines. They should also provide several driver
|
allocation routines. They should also provide several driver-specific
|
||||||
specific ioctls to support command execution, pinning, buffer
|
ioctls to support command execution, pinning, buffer
|
||||||
read & write, mapping, and domain ownership transfers.
|
read & write, mapping, and domain ownership transfers.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
On a fundamental level, GEM involves several operations: memory
|
On a fundamental level, GEM involves several operations:
|
||||||
allocation and freeing, command execution, and aperture management
|
<itemizedlist>
|
||||||
at command execution time. Buffer object allocation is relatively
|
<listitem>Memory allocation and freeing</listitem>
|
||||||
|
<listitem>Command execution</listitem>
|
||||||
|
<listitem>Aperture management at command execution time</listitem>
|
||||||
|
</itemizedlist>
|
||||||
|
Buffer object allocation is relatively
|
||||||
straightforward and largely provided by Linux's shmem layer, which
|
straightforward and largely provided by Linux's shmem layer, which
|
||||||
provides memory to back each object. When mapped into the GTT
|
provides memory to back each object. When mapped into the GTT
|
||||||
or used in a command buffer, the backing pages for an object are
|
or used in a command buffer, the backing pages for an object are
|
||||||
flushed to memory and marked write combined so as to be coherent
|
flushed to memory and marked write combined so as to be coherent
|
||||||
with the GPU. Likewise, when the GPU finishes rendering to an object,
|
with the GPU. Likewise, if the CPU accesses an object after the GPU
|
||||||
if the CPU accesses it, it must be made coherent with the CPU's view
|
has finished rendering to the object, then the object must be made
|
||||||
|
coherent with the CPU's view
|
||||||
of memory, usually involving GPU cache flushing of various kinds.
|
of memory, usually involving GPU cache flushing of various kinds.
|
||||||
This core CPU<->GPU coherency management is provided by the GEM
|
This core CPU<->GPU coherency management is provided by a
|
||||||
set domain function, which evaluates an object's current domain and
|
device-specific ioctl, which evaluates an object's current domain and
|
||||||
performs any necessary flushing or synchronization to put the object
|
performs any necessary flushing or synchronization to put the object
|
||||||
into the desired coherency domain (note that the object may be busy,
|
into the desired coherency domain (note that the object may be busy,
|
||||||
i.e. an active render target; in that case the set domain function
|
i.e. an active render target; in that case, setting the domain
|
||||||
will block the client and wait for rendering to complete before
|
blocks the client and waits for rendering to complete before
|
||||||
performing any necessary flushing operations).
|
performing any necessary flushing operations).
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Perhaps the most important GEM function is providing a command
|
Perhaps the most important GEM function is providing a command
|
||||||
execution interface to clients. Client programs construct command
|
execution interface to clients. Client programs construct command
|
||||||
buffers containing references to previously allocated memory objects
|
buffers containing references to previously allocated memory objects,
|
||||||
and submit them to GEM. At that point, GEM will take care to bind
|
and then submit them to GEM. At that point, GEM takes care to bind
|
||||||
all the objects into the GTT, execute the buffer, and provide
|
all the objects into the GTT, execute the buffer, and provide
|
||||||
necessary synchronization between clients accessing the same buffers.
|
necessary synchronization between clients accessing the same buffers.
|
||||||
This often involves evicting some objects from the GTT and re-binding
|
This often involves evicting some objects from the GTT and re-binding
|
||||||
others (a fairly expensive operation), and providing relocation
|
others (a fairly expensive operation), and providing relocation
|
||||||
support which hides fixed GTT offsets from clients. Clients must
|
support which hides fixed GTT offsets from clients. Clients must
|
||||||
take care not to submit command buffers that reference more objects
|
take care not to submit command buffers that reference more objects
|
||||||
than can fit in the GTT or GEM will reject them and no rendering
|
than can fit in the GTT; otherwise, GEM will reject them and no rendering
|
||||||
will occur. Similarly, if several objects in the buffer require
|
will occur. Similarly, if several objects in the buffer require
|
||||||
fence registers to be allocated for correct rendering (e.g. 2D blits
|
fence registers to be allocated for correct rendering (e.g. 2D blits
|
||||||
on pre-965 chips), care must be taken not to require more fence
|
on pre-965 chips), care must be taken not to require more fence
|
||||||
@ -729,7 +759,7 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<title>Output management</title>
|
<title>Output management</title>
|
||||||
<para>
|
<para>
|
||||||
At the core of the DRM output management code is a set of
|
At the core of the DRM output management code is a set of
|
||||||
structures representing CRTCs, encoders and connectors.
|
structures representing CRTCs, encoders, and connectors.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
A CRTC is an abstraction representing a part of the chip that
|
A CRTC is an abstraction representing a part of the chip that
|
||||||
@ -765,21 +795,19 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<sect1>
|
<sect1>
|
||||||
<title>Framebuffer management</title>
|
<title>Framebuffer management</title>
|
||||||
<para>
|
<para>
|
||||||
In order to set a mode on a given CRTC, encoder and connector
|
Clients need to provide a framebuffer object which provides a source
|
||||||
configuration, clients need to provide a framebuffer object which
|
of pixels for a CRTC to deliver to the encoder(s) and ultimately the
|
||||||
will provide a source of pixels for the CRTC to deliver to the encoder(s)
|
connector(s). A framebuffer is fundamentally a driver-specific memory
|
||||||
and ultimately the connector(s) in the configuration. A framebuffer
|
object, made into an opaque handle by the DRM's addfb() function.
|
||||||
is fundamentally a driver specific memory object, made into an opaque
|
Once a framebuffer has been created this way, it may be passed to the
|
||||||
handle by the DRM addfb function. Once an fb has been created this
|
KMS mode setting routines for use in a completed configuration.
|
||||||
way it can be passed to the KMS mode setting routines for use in
|
|
||||||
a configuration.
|
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1>
|
<sect1>
|
||||||
<title>Command submission & fencing</title>
|
<title>Command submission & fencing</title>
|
||||||
<para>
|
<para>
|
||||||
This should cover a few device specific command submission
|
This should cover a few device-specific command submission
|
||||||
implementations.
|
implementations.
|
||||||
</para>
|
</para>
|
||||||
</sect1>
|
</sect1>
|
||||||
@ -789,7 +817,7 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<para>
|
<para>
|
||||||
The DRM core provides some suspend/resume code, but drivers
|
The DRM core provides some suspend/resume code, but drivers
|
||||||
wanting full suspend/resume support should provide save() and
|
wanting full suspend/resume support should provide save() and
|
||||||
restore() functions. These will be called at suspend,
|
restore() functions. These are called at suspend,
|
||||||
hibernate, or resume time, and should perform any state save or
|
hibernate, or resume time, and should perform any state save or
|
||||||
restore required by your device across suspend or hibernate
|
restore required by your device across suspend or hibernate
|
||||||
states.
|
states.
|
||||||
@ -812,8 +840,8 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
<para>
|
<para>
|
||||||
The DRM core exports several interfaces to applications,
|
The DRM core exports several interfaces to applications,
|
||||||
generally intended to be used through corresponding libdrm
|
generally intended to be used through corresponding libdrm
|
||||||
wrapper functions. In addition, drivers export device specific
|
wrapper functions. In addition, drivers export device-specific
|
||||||
interfaces for use by userspace drivers & device aware
|
interfaces for use by userspace drivers & device-aware
|
||||||
applications through ioctls and sysfs files.
|
applications through ioctls and sysfs files.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
@ -822,8 +850,8 @@ void intel_crt_init(struct drm_device *dev)
|
|||||||
management, memory management, and output management.
|
management, memory management, and output management.
|
||||||
</para>
|
</para>
|
||||||
<para>
|
<para>
|
||||||
Cover generic ioctls and sysfs layout here. Only need high
|
Cover generic ioctls and sysfs layout here. We only need high-level
|
||||||
level info, since man pages will cover the rest.
|
info, since man pages should cover the rest.
|
||||||
</para>
|
</para>
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
@ -520,6 +520,11 @@ Here's a description of the fields of <varname>struct uio_mem</varname>:
|
|||||||
</para>
|
</para>
|
||||||
|
|
||||||
<itemizedlist>
|
<itemizedlist>
|
||||||
|
<listitem><para>
|
||||||
|
<varname>const char *name</varname>: Optional. Set this to help identify
|
||||||
|
the memory region, it will show up in the corresponding sysfs node.
|
||||||
|
</para></listitem>
|
||||||
|
|
||||||
<listitem><para>
|
<listitem><para>
|
||||||
<varname>int memtype</varname>: Required if the mapping is used. Set this to
|
<varname>int memtype</varname>: Required if the mapping is used. Set this to
|
||||||
<varname>UIO_MEM_PHYS</varname> if you you have physical memory on your
|
<varname>UIO_MEM_PHYS</varname> if you you have physical memory on your
|
||||||
@ -553,7 +558,7 @@ instead to remember such an address.
|
|||||||
</itemizedlist>
|
</itemizedlist>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
Please do not touch the <varname>kobj</varname> element of
|
Please do not touch the <varname>map</varname> element of
|
||||||
<varname>struct uio_mem</varname>! It is used by the UIO framework
|
<varname>struct uio_mem</varname>! It is used by the UIO framework
|
||||||
to set up sysfs files for this mapping. Simply leave it alone.
|
to set up sysfs files for this mapping. Simply leave it alone.
|
||||||
</para>
|
</para>
|
||||||
|
@ -98,14 +98,12 @@ You must enable "SCSI tape drive support for Smart Array 5xxx" and
|
|||||||
"SCSI support" in your kernel configuration to be able to use SCSI
|
"SCSI support" in your kernel configuration to be able to use SCSI
|
||||||
tape drives with your Smart Array 5xxx controller.
|
tape drives with your Smart Array 5xxx controller.
|
||||||
|
|
||||||
Additionally, note that the driver will not engage the SCSI core at init
|
Additionally, note that the driver will engage the SCSI core at init
|
||||||
time. The driver must be directed to dynamically engage the SCSI core via
|
time if any tape drives or medium changers are detected. The driver may
|
||||||
the /proc filesystem entry which the "block" side of the driver creates as
|
also be directed to dynamically engage the SCSI core via the /proc filesystem
|
||||||
/proc/driver/cciss/cciss* at runtime. This is because at driver init time,
|
entry which the "block" side of the driver creates as
|
||||||
the SCSI core may not yet be initialized (because the driver is a block
|
/proc/driver/cciss/cciss* at runtime. This is best done via a script.
|
||||||
driver) and attempting to register it with the SCSI core in such a case
|
|
||||||
would cause a hang. This is best done via an initialization script
|
|
||||||
(typically in /etc/init.d, but could vary depending on distribution).
|
|
||||||
For example:
|
For example:
|
||||||
|
|
||||||
for x in /proc/driver/cciss/cciss[0-9]*
|
for x in /proc/driver/cciss/cciss[0-9]*
|
||||||
|
@ -33,9 +33,9 @@ demonstrate this problem using nested bash shells:
|
|||||||
|
|
||||||
From a second, unrelated bash shell:
|
From a second, unrelated bash shell:
|
||||||
$ kill -SIGSTOP 16690
|
$ kill -SIGSTOP 16690
|
||||||
$ kill -SIGCONT 16990
|
$ kill -SIGCONT 16690
|
||||||
|
|
||||||
<at this point 16990 exits and causes 16644 to exit too>
|
<at this point 16690 exits and causes 16644 to exit too>
|
||||||
|
|
||||||
This happens because bash can observe both signals and choose how it
|
This happens because bash can observe both signals and choose how it
|
||||||
responds to them.
|
responds to them.
|
||||||
|
@ -1,22 +1,24 @@
|
|||||||
The I2C protocol knows about two kinds of device addresses: normal 7 bit
|
The I2C protocol knows about two kinds of device addresses: normal 7 bit
|
||||||
addresses, and an extended set of 10 bit addresses. The sets of addresses
|
addresses, and an extended set of 10 bit addresses. The sets of addresses
|
||||||
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
|
do not intersect: the 7 bit address 0x10 is not the same as the 10 bit
|
||||||
address 0x10 (though a single device could respond to both of them). You
|
address 0x10 (though a single device could respond to both of them).
|
||||||
select a 10 bit address by adding an extra byte after the address
|
|
||||||
byte:
|
|
||||||
S Addr7 Rd/Wr ....
|
|
||||||
becomes
|
|
||||||
S 11110 Addr10 Rd/Wr
|
|
||||||
S is the start bit, Rd/Wr the read/write bit, and if you count the number
|
|
||||||
of bits, you will see the there are 8 after the S bit for 7 bit addresses,
|
|
||||||
and 16 after the S bit for 10 bit addresses.
|
|
||||||
|
|
||||||
WARNING! The current 10 bit address support is EXPERIMENTAL. There are
|
I2C messages to and from 10-bit address devices have a different format.
|
||||||
several places in the code that will cause SEVERE PROBLEMS with 10 bit
|
See the I2C specification for the details.
|
||||||
addresses, even though there is some basic handling and hooks. Also,
|
|
||||||
almost no supported adapter handles the 10 bit addresses correctly.
|
|
||||||
|
|
||||||
As soon as a real 10 bit address device is spotted 'in the wild', we
|
The current 10 bit address support is minimal. It should work, however
|
||||||
can and will add proper support. Right now, 10 bit address devices
|
you can expect some problems along the way:
|
||||||
are defined by the I2C protocol, but we have never seen a single device
|
* Not all bus drivers support 10-bit addresses. Some don't because the
|
||||||
which supports them.
|
hardware doesn't support them (SMBus doesn't require 10-bit address
|
||||||
|
support for example), some don't because nobody bothered adding the
|
||||||
|
code (or it's there but not working properly.) Software implementation
|
||||||
|
(i2c-algo-bit) is known to work.
|
||||||
|
* Some optional features do not support 10-bit addresses. This is the
|
||||||
|
case of automatic detection and instantiation of devices by their,
|
||||||
|
drivers, for example.
|
||||||
|
* Many user-space packages (for example i2c-tools) lack support for
|
||||||
|
10-bit addresses.
|
||||||
|
|
||||||
|
Note that 10-bit address devices are still pretty rare, so the limitations
|
||||||
|
listed above could stay for a long time, maybe even forever if nobody
|
||||||
|
needs them to be fixed.
|
||||||
|
@ -20,7 +20,7 @@ ip_no_pmtu_disc - BOOLEAN
|
|||||||
default FALSE
|
default FALSE
|
||||||
|
|
||||||
min_pmtu - INTEGER
|
min_pmtu - INTEGER
|
||||||
default 562 - minimum discovered Path MTU
|
default 552 - minimum discovered Path MTU
|
||||||
|
|
||||||
route/max_size - INTEGER
|
route/max_size - INTEGER
|
||||||
Maximum number of routes allowed in the kernel. Increase
|
Maximum number of routes allowed in the kernel. Increase
|
||||||
|
@ -97,15 +97,23 @@
|
|||||||
|
|
||||||
struct serial_rs485 rs485conf;
|
struct serial_rs485 rs485conf;
|
||||||
|
|
||||||
/* Set RS485 mode: */
|
/* Enable RS485 mode: */
|
||||||
rs485conf.flags |= SER_RS485_ENABLED;
|
rs485conf.flags |= SER_RS485_ENABLED;
|
||||||
|
|
||||||
|
/* Set logical level for RTS pin equal to 1 when sending: */
|
||||||
|
rs485conf.flags |= SER_RS485_RTS_ON_SEND;
|
||||||
|
/* or, set logical level for RTS pin equal to 0 when sending: */
|
||||||
|
rs485conf.flags &= ~(SER_RS485_RTS_ON_SEND);
|
||||||
|
|
||||||
|
/* Set logical level for RTS pin equal to 1 after sending: */
|
||||||
|
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
|
||||||
|
/* or, set logical level for RTS pin equal to 0 after sending: */
|
||||||
|
rs485conf.flags &= ~(SER_RS485_RTS_AFTER_SEND);
|
||||||
|
|
||||||
/* Set rts delay before send, if needed: */
|
/* Set rts delay before send, if needed: */
|
||||||
rs485conf.flags |= SER_RS485_RTS_BEFORE_SEND;
|
|
||||||
rs485conf.delay_rts_before_send = ...;
|
rs485conf.delay_rts_before_send = ...;
|
||||||
|
|
||||||
/* Set rts delay after send, if needed: */
|
/* Set rts delay after send, if needed: */
|
||||||
rs485conf.flags |= SER_RS485_RTS_AFTER_SEND;
|
|
||||||
rs485conf.delay_rts_after_send = ...;
|
rs485conf.delay_rts_after_send = ...;
|
||||||
|
|
||||||
/* Set this flag if you want to receive data even whilst sending data */
|
/* Set this flag if you want to receive data even whilst sending data */
|
||||||
|
@ -349,6 +349,7 @@ STAC92HD83*
|
|||||||
ref Reference board
|
ref Reference board
|
||||||
mic-ref Reference board with power management for ports
|
mic-ref Reference board with power management for ports
|
||||||
dell-s14 Dell laptop
|
dell-s14 Dell laptop
|
||||||
|
dell-vostro-3500 Dell Vostro 3500 laptop
|
||||||
hp HP laptops with (inverted) mute-LED
|
hp HP laptops with (inverted) mute-LED
|
||||||
hp-dv7-4000 HP dv-7 4000
|
hp-dv7-4000 HP dv-7 4000
|
||||||
auto BIOS setup (default)
|
auto BIOS setup (default)
|
||||||
|
@ -579,7 +579,7 @@ Development Tree
|
|||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
The latest development codes for HD-audio are found on sound git tree:
|
The latest development codes for HD-audio are found on sound git tree:
|
||||||
|
|
||||||
- git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound-2.6.git
|
- git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound.git
|
||||||
|
|
||||||
The master branch or for-next branches can be used as the main
|
The master branch or for-next branches can be used as the main
|
||||||
development branches in general while the HD-audio specific patches
|
development branches in general while the HD-audio specific patches
|
||||||
@ -594,7 +594,7 @@ is, installed via the usual spells: configure, make and make
|
|||||||
install(-modules). See INSTALL in the package. The snapshot tarballs
|
install(-modules). See INSTALL in the package. The snapshot tarballs
|
||||||
are found at:
|
are found at:
|
||||||
|
|
||||||
- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/snapshot/
|
- ftp://ftp.suse.com/pub/people/tiwai/snapshot/
|
||||||
|
|
||||||
|
|
||||||
Sending a Bug Report
|
Sending a Bug Report
|
||||||
@ -696,7 +696,7 @@ via hda-verb won't change the mixer value.
|
|||||||
|
|
||||||
The hda-verb program is found in the ftp directory:
|
The hda-verb program is found in the ftp directory:
|
||||||
|
|
||||||
- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/misc/
|
- ftp://ftp.suse.com/pub/people/tiwai/misc/
|
||||||
|
|
||||||
Also a git repository is available:
|
Also a git repository is available:
|
||||||
|
|
||||||
@ -764,7 +764,7 @@ operation, the jack plugging simulation, etc.
|
|||||||
|
|
||||||
The package is found in:
|
The package is found in:
|
||||||
|
|
||||||
- ftp://ftp.kernel.org/pub/linux/kernel/people/tiwai/misc/
|
- ftp://ftp.suse.com/pub/people/tiwai/misc/
|
||||||
|
|
||||||
A git repository is available:
|
A git repository is available:
|
||||||
|
|
||||||
|
2
Kbuild
2
Kbuild
@ -92,7 +92,7 @@ always += missing-syscalls
|
|||||||
targets += missing-syscalls
|
targets += missing-syscalls
|
||||||
|
|
||||||
quiet_cmd_syscalls = CALL $<
|
quiet_cmd_syscalls = CALL $<
|
||||||
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags)
|
cmd_syscalls = $(CONFIG_SHELL) $< $(CC) $(c_flags) $(missing_syscalls_flags)
|
||||||
|
|
||||||
missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
|
missing-syscalls: scripts/checksyscalls.sh $(offsets-file) FORCE
|
||||||
$(call cmd,syscalls)
|
$(call cmd,syscalls)
|
||||||
|
40
MAINTAINERS
40
MAINTAINERS
@ -1106,6 +1106,7 @@ F: drivers/media/video/s5p-fimc/
|
|||||||
ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
|
ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
|
||||||
M: Kyungmin Park <kyungmin.park@samsung.com>
|
M: Kyungmin Park <kyungmin.park@samsung.com>
|
||||||
M: Kamil Debski <k.debski@samsung.com>
|
M: Kamil Debski <k.debski@samsung.com>
|
||||||
|
M: Jeongtae Park <jtp.park@samsung.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org
|
L: linux-arm-kernel@lists.infradead.org
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
@ -1788,6 +1789,14 @@ F: include/net/cfg80211.h
|
|||||||
F: net/wireless/*
|
F: net/wireless/*
|
||||||
X: net/wireless/wext*
|
X: net/wireless/wext*
|
||||||
|
|
||||||
|
CHAR and MISC DRIVERS
|
||||||
|
M: Arnd Bergmann <arnd@arndb.de>
|
||||||
|
M: Greg Kroah-Hartman <greg@kroah.com>
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/char-misc.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/char/*
|
||||||
|
F: drivers/misc/*
|
||||||
|
|
||||||
CHECKPATCH
|
CHECKPATCH
|
||||||
M: Andy Whitcroft <apw@canonical.com>
|
M: Andy Whitcroft <apw@canonical.com>
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -1926,9 +1935,11 @@ S: Maintained
|
|||||||
F: drivers/connector/
|
F: drivers/connector/
|
||||||
|
|
||||||
CONTROL GROUPS (CGROUPS)
|
CONTROL GROUPS (CGROUPS)
|
||||||
M: Paul Menage <paul@paulmenage.org>
|
M: Tejun Heo <tj@kernel.org>
|
||||||
M: Li Zefan <lizf@cn.fujitsu.com>
|
M: Li Zefan <lizf@cn.fujitsu.com>
|
||||||
L: containers@lists.linux-foundation.org
|
L: containers@lists.linux-foundation.org
|
||||||
|
L: cgroups@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup.git
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: include/linux/cgroup*
|
F: include/linux/cgroup*
|
||||||
F: kernel/cgroup*
|
F: kernel/cgroup*
|
||||||
@ -2342,6 +2353,13 @@ S: Supported
|
|||||||
F: drivers/gpu/drm/i915
|
F: drivers/gpu/drm/i915
|
||||||
F: include/drm/i915*
|
F: include/drm/i915*
|
||||||
|
|
||||||
|
DRM DRIVERS FOR EXYNOS
|
||||||
|
M: Inki Dae <inki.dae@samsung.com>
|
||||||
|
L: dri-devel@lists.freedesktop.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/gpu/drm/exynos
|
||||||
|
F: include/drm/exynos*
|
||||||
|
|
||||||
DSCC4 DRIVER
|
DSCC4 DRIVER
|
||||||
M: Francois Romieu <romieu@fr.zoreil.com>
|
M: Francois Romieu <romieu@fr.zoreil.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
@ -2576,7 +2594,7 @@ S: Maintained
|
|||||||
F: drivers/net/ethernet/i825xx/eexpress.*
|
F: drivers/net/ethernet/i825xx/eexpress.*
|
||||||
|
|
||||||
ETHERNET BRIDGE
|
ETHERNET BRIDGE
|
||||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||||
L: bridge@lists.linux-foundation.org
|
L: bridge@lists.linux-foundation.org
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://www.linuxfoundation.org/en/Net:Bridge
|
W: http://www.linuxfoundation.org/en/Net:Bridge
|
||||||
@ -3710,7 +3728,7 @@ F: fs/jbd2/
|
|||||||
F: include/linux/jbd2.h
|
F: include/linux/jbd2.h
|
||||||
|
|
||||||
JSM Neo PCI based serial card
|
JSM Neo PCI based serial card
|
||||||
M: Breno Leitao <leitao@linux.vnet.ibm.com>
|
M: Lucas Tavares <lucaskt@linux.vnet.ibm.com>
|
||||||
L: linux-serial@vger.kernel.org
|
L: linux-serial@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/tty/serial/jsm/
|
F: drivers/tty/serial/jsm/
|
||||||
@ -4296,6 +4314,7 @@ MEMORY RESOURCE CONTROLLER
|
|||||||
M: Balbir Singh <bsingharora@gmail.com>
|
M: Balbir Singh <bsingharora@gmail.com>
|
||||||
M: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
|
M: Daisuke Nishimura <nishimura@mxp.nes.nec.co.jp>
|
||||||
M: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
|
M: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
|
||||||
|
L: cgroups@vger.kernel.org
|
||||||
L: linux-mm@kvack.org
|
L: linux-mm@kvack.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: mm/memcontrol.c
|
F: mm/memcontrol.c
|
||||||
@ -4329,7 +4348,7 @@ MIPS
|
|||||||
M: Ralf Baechle <ralf@linux-mips.org>
|
M: Ralf Baechle <ralf@linux-mips.org>
|
||||||
L: linux-mips@linux-mips.org
|
L: linux-mips@linux-mips.org
|
||||||
W: http://www.linux-mips.org/
|
W: http://www.linux-mips.org/
|
||||||
T: git git://git.linux-mips.org/pub/scm/linux.git
|
T: git git://git.linux-mips.org/pub/scm/ralf/linux.git
|
||||||
Q: http://patchwork.linux-mips.org/project/linux-mips/list/
|
Q: http://patchwork.linux-mips.org/project/linux-mips/list/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/mips/
|
F: Documentation/mips/
|
||||||
@ -4462,7 +4481,7 @@ S: Supported
|
|||||||
F: drivers/infiniband/hw/nes/
|
F: drivers/infiniband/hw/nes/
|
||||||
|
|
||||||
NETEM NETWORK EMULATOR
|
NETEM NETWORK EMULATOR
|
||||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||||
L: netem@lists.linux-foundation.org
|
L: netem@lists.linux-foundation.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: net/sched/sch_netem.c
|
F: net/sched/sch_netem.c
|
||||||
@ -4939,7 +4958,7 @@ F: drivers/char/ppdev.c
|
|||||||
F: include/linux/ppdev.h
|
F: include/linux/ppdev.h
|
||||||
|
|
||||||
PARAVIRT_OPS INTERFACE
|
PARAVIRT_OPS INTERFACE
|
||||||
M: Jeremy Fitzhardinge <jeremy@xensource.com>
|
M: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||||
M: Chris Wright <chrisw@sous-sol.org>
|
M: Chris Wright <chrisw@sous-sol.org>
|
||||||
M: Alok Kataria <akataria@vmware.com>
|
M: Alok Kataria <akataria@vmware.com>
|
||||||
M: Rusty Russell <rusty@rustcorp.com.au>
|
M: Rusty Russell <rusty@rustcorp.com.au>
|
||||||
@ -5977,7 +5996,7 @@ S: Maintained
|
|||||||
F: drivers/usb/misc/sisusbvga/
|
F: drivers/usb/misc/sisusbvga/
|
||||||
|
|
||||||
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
||||||
M: Stephen Hemminger <shemminger@linux-foundation.org>
|
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/net/ethernet/marvell/sk*
|
F: drivers/net/ethernet/marvell/sk*
|
||||||
@ -6122,7 +6141,7 @@ F: sound/
|
|||||||
SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
|
SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
|
||||||
M: Liam Girdwood <lrg@ti.com>
|
M: Liam Girdwood <lrg@ti.com>
|
||||||
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
|
||||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||||
W: http://alsa-project.org/main/index.php/ASoC
|
W: http://alsa-project.org/main/index.php/ASoC
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -7391,8 +7410,8 @@ S: Maintained
|
|||||||
F: arch/x86/kernel/cpu/mcheck/*
|
F: arch/x86/kernel/cpu/mcheck/*
|
||||||
|
|
||||||
XEN HYPERVISOR INTERFACE
|
XEN HYPERVISOR INTERFACE
|
||||||
M: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
|
|
||||||
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
M: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
|
||||||
|
M: Jeremy Fitzhardinge <jeremy@goop.org>
|
||||||
L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
L: xen-devel@lists.xensource.com (moderated for non-subscribers)
|
||||||
L: virtualization@lists.linux-foundation.org
|
L: virtualization@lists.linux-foundation.org
|
||||||
S: Supported
|
S: Supported
|
||||||
@ -7425,7 +7444,8 @@ F: drivers/xen/*swiotlb*
|
|||||||
|
|
||||||
XFS FILESYSTEM
|
XFS FILESYSTEM
|
||||||
P: Silicon Graphics Inc
|
P: Silicon Graphics Inc
|
||||||
M: Alex Elder <aelder@sgi.com>
|
M: Ben Myers <bpm@sgi.com>
|
||||||
|
M: Alex Elder <elder@kernel.org>
|
||||||
M: xfs-masters@oss.sgi.com
|
M: xfs-masters@oss.sgi.com
|
||||||
L: xfs@oss.sgi.com
|
L: xfs@oss.sgi.com
|
||||||
W: http://oss.sgi.com/projects/xfs
|
W: http://oss.sgi.com/projects/xfs
|
||||||
|
2
Makefile
2
Makefile
@ -1,7 +1,7 @@
|
|||||||
VERSION = 3
|
VERSION = 3
|
||||||
PATCHLEVEL = 2
|
PATCHLEVEL = 2
|
||||||
SUBLEVEL = 0
|
SUBLEVEL = 0
|
||||||
EXTRAVERSION = -rc1
|
EXTRAVERSION = -rc3
|
||||||
NAME = Saber-toothed Squirrel
|
NAME = Saber-toothed Squirrel
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
@ -65,6 +65,8 @@ $(obj)/%.dtb: $(src)/dts/%.dts
|
|||||||
|
|
||||||
$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))
|
$(obj)/dtbs: $(addprefix $(obj)/, $(dtb-y))
|
||||||
|
|
||||||
|
clean-files := *.dtb
|
||||||
|
|
||||||
quiet_cmd_uimage = UIMAGE $@
|
quiet_cmd_uimage = UIMAGE $@
|
||||||
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
|
cmd_uimage = $(CONFIG_SHELL) $(MKIMAGE) -A arm -O linux -T kernel \
|
||||||
-C none -a $(LOADADDR) -e $(STARTADDR) \
|
-C none -a $(LOADADDR) -e $(STARTADDR) \
|
||||||
|
@ -22,11 +22,10 @@ serial@70006300 {
|
|||||||
sdhci@c8000400 {
|
sdhci@c8000400 {
|
||||||
cd-gpios = <&gpio 69 0>; /* gpio PI5 */
|
cd-gpios = <&gpio 69 0>; /* gpio PI5 */
|
||||||
wp-gpios = <&gpio 57 0>; /* gpio PH1 */
|
wp-gpios = <&gpio 57 0>; /* gpio PH1 */
|
||||||
power-gpios = <&gpio 155 0>; /* gpio PT3 */
|
power-gpios = <&gpio 70 0>; /* gpio PI6 */
|
||||||
};
|
};
|
||||||
|
|
||||||
sdhci@c8000600 {
|
sdhci@c8000600 {
|
||||||
power-gpios = <&gpio 70 0>; /* gpio PI6 */
|
|
||||||
support-8bit;
|
support-8bit;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
@ -20,6 +20,8 @@
|
|||||||
#ifndef __ASM_ARM_HARDWARE_L2X0_H
|
#ifndef __ASM_ARM_HARDWARE_L2X0_H
|
||||||
#define __ASM_ARM_HARDWARE_L2X0_H
|
#define __ASM_ARM_HARDWARE_L2X0_H
|
||||||
|
|
||||||
|
#include <linux/errno.h>
|
||||||
|
|
||||||
#define L2X0_CACHE_ID 0x000
|
#define L2X0_CACHE_ID 0x000
|
||||||
#define L2X0_CACHE_TYPE 0x004
|
#define L2X0_CACHE_TYPE 0x004
|
||||||
#define L2X0_CTRL 0x100
|
#define L2X0_CTRL 0x100
|
||||||
|
@ -13,6 +13,7 @@
|
|||||||
struct tag;
|
struct tag;
|
||||||
struct meminfo;
|
struct meminfo;
|
||||||
struct sys_timer;
|
struct sys_timer;
|
||||||
|
struct pt_regs;
|
||||||
|
|
||||||
struct machine_desc {
|
struct machine_desc {
|
||||||
unsigned int nr; /* architecture number */
|
unsigned int nr; /* architecture number */
|
||||||
|
@ -402,6 +402,8 @@
|
|||||||
#define __NR_syncfs (__NR_SYSCALL_BASE+373)
|
#define __NR_syncfs (__NR_SYSCALL_BASE+373)
|
||||||
#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
|
#define __NR_sendmmsg (__NR_SYSCALL_BASE+374)
|
||||||
#define __NR_setns (__NR_SYSCALL_BASE+375)
|
#define __NR_setns (__NR_SYSCALL_BASE+375)
|
||||||
|
#define __NR_process_vm_readv (__NR_SYSCALL_BASE+376)
|
||||||
|
#define __NR_process_vm_writev (__NR_SYSCALL_BASE+377)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The following SWIs are ARM private.
|
* The following SWIs are ARM private.
|
||||||
|
@ -385,6 +385,8 @@
|
|||||||
CALL(sys_syncfs)
|
CALL(sys_syncfs)
|
||||||
CALL(sys_sendmmsg)
|
CALL(sys_sendmmsg)
|
||||||
/* 375 */ CALL(sys_setns)
|
/* 375 */ CALL(sys_setns)
|
||||||
|
CALL(sys_process_vm_readv)
|
||||||
|
CALL(sys_process_vm_writev)
|
||||||
#ifndef syscalls_counted
|
#ifndef syscalls_counted
|
||||||
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
.equ syscalls_padding, ((NR_syscalls + 3) & ~3) - NR_syscalls
|
||||||
#define syscalls_counted
|
#define syscalls_counted
|
||||||
|
@ -360,7 +360,7 @@ __secondary_data:
|
|||||||
* r13 = *virtual* address to jump to upon completion
|
* r13 = *virtual* address to jump to upon completion
|
||||||
*/
|
*/
|
||||||
__enable_mmu:
|
__enable_mmu:
|
||||||
#ifdef CONFIG_ALIGNMENT_TRAP
|
#if defined(CONFIG_ALIGNMENT_TRAP) && __LINUX_ARM_ARCH__ < 6
|
||||||
orr r0, r0, #CR_A
|
orr r0, r0, #CR_A
|
||||||
#else
|
#else
|
||||||
bic r0, r0, #CR_A
|
bic r0, r0, #CR_A
|
||||||
|
@ -32,24 +32,6 @@ static atomic_t waiting_for_crash_ipi;
|
|||||||
|
|
||||||
int machine_kexec_prepare(struct kimage *image)
|
int machine_kexec_prepare(struct kimage *image)
|
||||||
{
|
{
|
||||||
unsigned long page_list;
|
|
||||||
void *reboot_code_buffer;
|
|
||||||
page_list = image->head & PAGE_MASK;
|
|
||||||
|
|
||||||
reboot_code_buffer = page_address(image->control_code_page);
|
|
||||||
|
|
||||||
/* Prepare parameters for reboot_code_buffer*/
|
|
||||||
kexec_start_address = image->start;
|
|
||||||
kexec_indirection_page = page_list;
|
|
||||||
kexec_mach_type = machine_arch_type;
|
|
||||||
kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
|
|
||||||
|
|
||||||
/* copy our kernel relocation code to the control code page */
|
|
||||||
memcpy(reboot_code_buffer,
|
|
||||||
relocate_new_kernel, relocate_new_kernel_size);
|
|
||||||
|
|
||||||
flush_icache_range((unsigned long) reboot_code_buffer,
|
|
||||||
(unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,14 +82,31 @@ void (*kexec_reinit)(void);
|
|||||||
|
|
||||||
void machine_kexec(struct kimage *image)
|
void machine_kexec(struct kimage *image)
|
||||||
{
|
{
|
||||||
|
unsigned long page_list;
|
||||||
unsigned long reboot_code_buffer_phys;
|
unsigned long reboot_code_buffer_phys;
|
||||||
void *reboot_code_buffer;
|
void *reboot_code_buffer;
|
||||||
|
|
||||||
|
|
||||||
|
page_list = image->head & PAGE_MASK;
|
||||||
|
|
||||||
/* we need both effective and real address here */
|
/* we need both effective and real address here */
|
||||||
reboot_code_buffer_phys =
|
reboot_code_buffer_phys =
|
||||||
page_to_pfn(image->control_code_page) << PAGE_SHIFT;
|
page_to_pfn(image->control_code_page) << PAGE_SHIFT;
|
||||||
reboot_code_buffer = page_address(image->control_code_page);
|
reboot_code_buffer = page_address(image->control_code_page);
|
||||||
|
|
||||||
|
/* Prepare parameters for reboot_code_buffer*/
|
||||||
|
kexec_start_address = image->start;
|
||||||
|
kexec_indirection_page = page_list;
|
||||||
|
kexec_mach_type = machine_arch_type;
|
||||||
|
kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
|
||||||
|
|
||||||
|
/* copy our kernel relocation code to the control code page */
|
||||||
|
memcpy(reboot_code_buffer,
|
||||||
|
relocate_new_kernel, relocate_new_kernel_size);
|
||||||
|
|
||||||
|
|
||||||
|
flush_icache_range((unsigned long) reboot_code_buffer,
|
||||||
|
(unsigned long) reboot_code_buffer + KEXEC_CONTROL_PAGE_SIZE);
|
||||||
printk(KERN_INFO "Bye!\n");
|
printk(KERN_INFO "Bye!\n");
|
||||||
|
|
||||||
if (kexec_reinit)
|
if (kexec_reinit)
|
||||||
|
@ -461,8 +461,10 @@ static void __init setup_processor(void)
|
|||||||
cpu_name, read_cpuid_id(), read_cpuid_id() & 15,
|
cpu_name, read_cpuid_id(), read_cpuid_id() & 15,
|
||||||
proc_arch[cpu_architecture()], cr_alignment);
|
proc_arch[cpu_architecture()], cr_alignment);
|
||||||
|
|
||||||
sprintf(init_utsname()->machine, "%s%c", list->arch_name, ENDIANNESS);
|
snprintf(init_utsname()->machine, __NEW_UTS_LEN + 1, "%s%c",
|
||||||
sprintf(elf_platform, "%s%c", list->elf_name, ENDIANNESS);
|
list->arch_name, ENDIANNESS);
|
||||||
|
snprintf(elf_platform, ELF_PLATFORM_SIZE, "%s%c",
|
||||||
|
list->elf_name, ENDIANNESS);
|
||||||
elf_hwcap = list->elf_hwcap;
|
elf_hwcap = list->elf_hwcap;
|
||||||
#ifndef CONFIG_ARM_THUMB
|
#ifndef CONFIG_ARM_THUMB
|
||||||
elf_hwcap &= ~HWCAP_THUMB;
|
elf_hwcap &= ~HWCAP_THUMB;
|
||||||
|
@ -98,7 +98,7 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data) {}
|
|||||||
* USB HS Device (Gadget)
|
* USB HS Device (Gadget)
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
|
#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
|
||||||
|
|
||||||
static struct resource usba_udc_resources[] = {
|
static struct resource usba_udc_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
@ -1021,8 +1021,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
|||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
@ -1035,7 +1035,6 @@ static struct resource dbgu_resources[] = {
|
|||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
@ -877,8 +877,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
|||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
@ -891,7 +891,6 @@ static struct resource dbgu_resources[] = {
|
|||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
@ -837,8 +837,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
|||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
@ -851,7 +851,6 @@ static struct resource dbgu_resources[] = {
|
|||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
@ -816,8 +816,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
|||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
@ -830,7 +830,6 @@ static struct resource dbgu_resources[] = {
|
|||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
@ -1196,8 +1196,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
|||||||
|
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
@ -1210,7 +1210,6 @@ static struct resource dbgu_resources[] = {
|
|||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
@ -197,7 +197,7 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data) {}
|
|||||||
* USB HS Device (Gadget)
|
* USB HS Device (Gadget)
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
|
#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
|
||||||
static struct resource usba_udc_resources[] = {
|
static struct resource usba_udc_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91SAM9G45_UDPHS_FIFO,
|
.start = AT91SAM9G45_UDPHS_FIFO,
|
||||||
@ -1332,8 +1332,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
|||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
@ -1346,7 +1346,6 @@ static struct resource dbgu_resources[] = {
|
|||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0,
|
.use_dma_rx = 0,
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
@ -75,7 +75,7 @@ void __init at91_add_device_hdmac(void) {}
|
|||||||
* USB HS Device (Gadget)
|
* USB HS Device (Gadget)
|
||||||
* -------------------------------------------------------------------- */
|
* -------------------------------------------------------------------- */
|
||||||
|
|
||||||
#if defined(CONFIG_USB_GADGET_ATMEL_USBA) || defined(CONFIG_USB_GADGET_ATMEL_USBA_MODULE)
|
#if defined(CONFIG_USB_ATMEL_USBA) || defined(CONFIG_USB_ATMEL_USBA_MODULE)
|
||||||
|
|
||||||
static struct resource usba_udc_resources[] = {
|
static struct resource usba_udc_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
@ -908,8 +908,8 @@ void __init at91_add_device_ssc(unsigned id, unsigned pins) {}
|
|||||||
#if defined(CONFIG_SERIAL_ATMEL)
|
#if defined(CONFIG_SERIAL_ATMEL)
|
||||||
static struct resource dbgu_resources[] = {
|
static struct resource dbgu_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = AT91_VA_BASE_SYS + AT91_DBGU,
|
.start = AT91_BASE_SYS + AT91_DBGU,
|
||||||
.end = AT91_VA_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
.end = AT91_BASE_SYS + AT91_DBGU + SZ_512 - 1,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
[1] = {
|
[1] = {
|
||||||
@ -922,7 +922,6 @@ static struct resource dbgu_resources[] = {
|
|||||||
static struct atmel_uart_data dbgu_data = {
|
static struct atmel_uart_data dbgu_data = {
|
||||||
.use_dma_tx = 0,
|
.use_dma_tx = 0,
|
||||||
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
.use_dma_rx = 0, /* DBGU not capable of receive DMA */
|
||||||
.regs = (void __iomem *)(AT91_VA_BASE_SYS + AT91_DBGU),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
static u64 dbgu_dmamask = DMA_BIT_MASK(32);
|
||||||
|
@ -384,7 +384,7 @@ static struct spi_board_info yl9200_spi_devices[] = {
|
|||||||
#include <video/s1d13xxxfb.h>
|
#include <video/s1d13xxxfb.h>
|
||||||
|
|
||||||
|
|
||||||
static void __init yl9200_init_video(void)
|
static void yl9200_init_video(void)
|
||||||
{
|
{
|
||||||
/* NWAIT Signal */
|
/* NWAIT Signal */
|
||||||
at91_set_A_periph(AT91_PIN_PC6, 0);
|
at91_set_A_periph(AT91_PIN_PC6, 0);
|
||||||
|
@ -21,6 +21,8 @@
|
|||||||
#ifndef __ASM_ARCH_VMALLOC_H
|
#ifndef __ASM_ARCH_VMALLOC_H
|
||||||
#define __ASM_ARCH_VMALLOC_H
|
#define __ASM_ARCH_VMALLOC_H
|
||||||
|
|
||||||
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
#define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK)
|
#define VMALLOC_END (AT91_VIRT_BASE & PGDIR_MASK)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -235,7 +235,7 @@ void __init bcmring_init_timer(void)
|
|||||||
*/
|
*/
|
||||||
bcmring_clocksource_init();
|
bcmring_clocksource_init();
|
||||||
|
|
||||||
sp804_clockevents_register(TIMER0_VA_BASE, IRQ_TIMER0, "timer0");
|
sp804_clockevents_init(TIMER0_VA_BASE, IRQ_TIMER0, "timer0");
|
||||||
}
|
}
|
||||||
|
|
||||||
struct sys_timer bcmring_timer = {
|
struct sys_timer bcmring_timer = {
|
||||||
|
@ -36,6 +36,7 @@
|
|||||||
#include <linux/mm.h>
|
#include <linux/mm.h>
|
||||||
#include <linux/pfn.h>
|
#include <linux/pfn.h>
|
||||||
#include <linux/atomic.h>
|
#include <linux/atomic.h>
|
||||||
|
#include <linux/sched.h>
|
||||||
#include <mach/dma.h>
|
#include <mach/dma.h>
|
||||||
|
|
||||||
/* I don't quite understand why dc4 fails when this is set to 1 and DMA is enabled */
|
/* I don't quite understand why dc4 fails when this is set to 1 and DMA is enabled */
|
||||||
|
@ -1,22 +1,26 @@
|
|||||||
zreladdr-$(CONFIG_ARCH_MX1) += 0x08008000
|
zreladdr-$(CONFIG_SOC_IMX1) += 0x08008000
|
||||||
params_phys-$(CONFIG_ARCH_MX1) := 0x08000100
|
params_phys-$(CONFIG_SOC_IMX1) := 0x08000100
|
||||||
initrd_phys-$(CONFIG_ARCH_MX1) := 0x08800000
|
initrd_phys-$(CONFIG_SOC_IMX1) := 0x08800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_MACH_MX21) += 0xC0008000
|
zreladdr-$(CONFIG_SOC_IMX21) += 0xC0008000
|
||||||
params_phys-$(CONFIG_MACH_MX21) := 0xC0000100
|
params_phys-$(CONFIG_SOC_IMX21) := 0xC0000100
|
||||||
initrd_phys-$(CONFIG_MACH_MX21) := 0xC0800000
|
initrd_phys-$(CONFIG_SOC_IMX21) := 0xC0800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_ARCH_MX25) += 0x80008000
|
zreladdr-$(CONFIG_SOC_IMX25) += 0x80008000
|
||||||
params_phys-$(CONFIG_ARCH_MX25) := 0x80000100
|
params_phys-$(CONFIG_SOC_IMX25) := 0x80000100
|
||||||
initrd_phys-$(CONFIG_ARCH_MX25) := 0x80800000
|
initrd_phys-$(CONFIG_SOC_IMX25) := 0x80800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_MACH_MX27) += 0xA0008000
|
zreladdr-$(CONFIG_SOC_IMX27) += 0xA0008000
|
||||||
params_phys-$(CONFIG_MACH_MX27) := 0xA0000100
|
params_phys-$(CONFIG_SOC_IMX27) := 0xA0000100
|
||||||
initrd_phys-$(CONFIG_MACH_MX27) := 0xA0800000
|
initrd_phys-$(CONFIG_SOC_IMX27) := 0xA0800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_ARCH_MX3) += 0x80008000
|
zreladdr-$(CONFIG_SOC_IMX31) += 0x80008000
|
||||||
params_phys-$(CONFIG_ARCH_MX3) := 0x80000100
|
params_phys-$(CONFIG_SOC_IMX31) := 0x80000100
|
||||||
initrd_phys-$(CONFIG_ARCH_MX3) := 0x80800000
|
initrd_phys-$(CONFIG_SOC_IMX31) := 0x80800000
|
||||||
|
|
||||||
|
zreladdr-$(CONFIG_SOC_IMX35) += 0x80008000
|
||||||
|
params_phys-$(CONFIG_SOC_IMX35) := 0x80000100
|
||||||
|
initrd_phys-$(CONFIG_SOC_IMX35) := 0x80800000
|
||||||
|
|
||||||
zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000
|
zreladdr-$(CONFIG_SOC_IMX6Q) += 0x10008000
|
||||||
params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100
|
params_phys-$(CONFIG_SOC_IMX6Q) := 0x10000100
|
||||||
|
@ -1139,7 +1139,7 @@ static int _clk_set_rate(struct clk *clk, unsigned long rate)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
max_div = ((d->bm_pred >> d->bp_pred) + 1) *
|
max_div = ((d->bm_pred >> d->bp_pred) + 1) *
|
||||||
((d->bm_pred >> d->bp_pred) + 1);
|
((d->bm_podf >> d->bp_podf) + 1);
|
||||||
|
|
||||||
div = parent_rate / rate;
|
div = parent_rate / rate;
|
||||||
if (div == 0)
|
if (div == 0)
|
||||||
@ -2002,6 +2002,21 @@ int __init mx6q_clocks_init(void)
|
|||||||
clk_set_rate(&asrc_serial_clk, 1500000);
|
clk_set_rate(&asrc_serial_clk, 1500000);
|
||||||
clk_set_rate(&enfc_clk, 11000000);
|
clk_set_rate(&enfc_clk, 11000000);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Before pinctrl API is available, we have to rely on the pad
|
||||||
|
* configuration set up by bootloader. For usdhc example here,
|
||||||
|
* u-boot sets up the pads for 49.5 MHz case, and we have to lower
|
||||||
|
* the usdhc clock from 198 to 49.5 MHz to match the pad configuration.
|
||||||
|
*
|
||||||
|
* FIXME: This is should be removed after pinctrl API is available.
|
||||||
|
* At that time, usdhc driver can call pinctrl API to change pad
|
||||||
|
* configuration dynamically per different usdhc clock settings.
|
||||||
|
*/
|
||||||
|
clk_set_rate(&usdhc1_clk, 49500000);
|
||||||
|
clk_set_rate(&usdhc2_clk, 49500000);
|
||||||
|
clk_set_rate(&usdhc3_clk, 49500000);
|
||||||
|
clk_set_rate(&usdhc4_clk, 49500000);
|
||||||
|
|
||||||
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
|
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-gpt");
|
||||||
base = of_iomap(np, 0);
|
base = of_iomap(np, 0);
|
||||||
WARN_ON(!base);
|
WARN_ON(!base);
|
||||||
|
@ -15,6 +15,8 @@ obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o
|
|||||||
obj-$(CONFIG_MSM_SMD) += last_radio_log.o
|
obj-$(CONFIG_MSM_SMD) += last_radio_log.o
|
||||||
obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o
|
obj-$(CONFIG_MSM_SCM) += scm.o scm-boot.o
|
||||||
|
|
||||||
|
CFLAGS_scm.o :=$(call as-instr,.arch_extension sec,-DREQUIRES_SEC=1)
|
||||||
|
|
||||||
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o
|
||||||
obj-$(CONFIG_SMP) += headsmp.o platsmp.o
|
obj-$(CONFIG_SMP) += headsmp.o platsmp.o
|
||||||
|
|
||||||
|
@ -42,8 +42,8 @@
|
|||||||
|
|
||||||
extern struct sys_timer msm_timer;
|
extern struct sys_timer msm_timer;
|
||||||
|
|
||||||
static void __init msm7x30_fixup(struct machine_desc *desc, struct tag *tag,
|
static void __init msm7x30_fixup(struct tag *tag, char **cmdline,
|
||||||
char **cmdline, struct meminfo *mi)
|
struct meminfo *mi)
|
||||||
{
|
{
|
||||||
for (; tag->hdr.size; tag = tag_next(tag))
|
for (; tag->hdr.size; tag = tag_next(tag))
|
||||||
if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) {
|
if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) {
|
||||||
|
@ -32,8 +32,8 @@
|
|||||||
|
|
||||||
#include "devices.h"
|
#include "devices.h"
|
||||||
|
|
||||||
static void __init msm8960_fixup(struct machine_desc *desc, struct tag *tag,
|
static void __init msm8960_fixup(struct tag *tag, char **cmdline,
|
||||||
char **cmdline, struct meminfo *mi)
|
struct meminfo *mi)
|
||||||
{
|
{
|
||||||
for (; tag->hdr.size; tag = tag_next(tag))
|
for (; tag->hdr.size; tag = tag_next(tag))
|
||||||
if (tag->hdr.tag == ATAG_MEM &&
|
if (tag->hdr.tag == ATAG_MEM &&
|
||||||
|
@ -28,8 +28,8 @@
|
|||||||
#include <mach/board.h>
|
#include <mach/board.h>
|
||||||
#include <mach/msm_iomap.h>
|
#include <mach/msm_iomap.h>
|
||||||
|
|
||||||
static void __init msm8x60_fixup(struct machine_desc *desc, struct tag *tag,
|
static void __init msm8x60_fixup(struct tag *tag, char **cmdline,
|
||||||
char **cmdline, struct meminfo *mi)
|
struct meminfo *mi)
|
||||||
{
|
{
|
||||||
for (; tag->hdr.size; tag = tag_next(tag))
|
for (; tag->hdr.size; tag = tag_next(tag))
|
||||||
if (tag->hdr.tag == ATAG_MEM &&
|
if (tag->hdr.tag == ATAG_MEM &&
|
||||||
|
@ -180,6 +180,9 @@ static u32 smc(u32 cmd_addr)
|
|||||||
__asmeq("%1", "r0")
|
__asmeq("%1", "r0")
|
||||||
__asmeq("%2", "r1")
|
__asmeq("%2", "r1")
|
||||||
__asmeq("%3", "r2")
|
__asmeq("%3", "r2")
|
||||||
|
#ifdef REQUIRES_SEC
|
||||||
|
".arch_extension sec\n"
|
||||||
|
#endif
|
||||||
"smc #0 @ switch to secure world\n"
|
"smc #0 @ switch to secure world\n"
|
||||||
: "=r" (r0)
|
: "=r" (r0)
|
||||||
: "r" (r0), "r" (r1), "r" (r2)
|
: "r" (r0), "r" (r1), "r" (r2)
|
||||||
|
@ -1281,9 +1281,9 @@ DEFINE_CLOCK(gpt_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG9_OFFSET,
|
|||||||
NULL, NULL, &ipg_clk, &gpt_ipg_clk);
|
NULL, NULL, &ipg_clk, &gpt_ipg_clk);
|
||||||
|
|
||||||
DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET,
|
DEFINE_CLOCK(pwm1_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG6_OFFSET,
|
||||||
NULL, NULL, &ipg_clk, NULL);
|
NULL, NULL, &ipg_perclk, NULL);
|
||||||
DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET,
|
DEFINE_CLOCK(pwm2_clk, 0, MXC_CCM_CCGR2, MXC_CCM_CCGRx_CG8_OFFSET,
|
||||||
NULL, NULL, &ipg_clk, NULL);
|
NULL, NULL, &ipg_perclk, NULL);
|
||||||
|
|
||||||
/* I2C */
|
/* I2C */
|
||||||
DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET,
|
DEFINE_CLOCK(i2c1_clk, 0, MXC_CCM_CCGR1, MXC_CCM_CCGRx_CG9_OFFSET,
|
||||||
@ -1634,6 +1634,7 @@ int __init mx53_clocks_init(unsigned long ckil, unsigned long osc,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_OF
|
||||||
static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc,
|
static void __init clk_get_freq_dt(unsigned long *ckil, unsigned long *osc,
|
||||||
unsigned long *ckih1, unsigned long *ckih2)
|
unsigned long *ckih1, unsigned long *ckih2)
|
||||||
{
|
{
|
||||||
@ -1671,3 +1672,4 @@ int __init mx53_clocks_init_dt(void)
|
|||||||
clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2);
|
clk_get_freq_dt(&ckil, &osc, &ckih1, &ckih2);
|
||||||
return mx53_clocks_init(ckil, osc, ckih1, ckih2);
|
return mx53_clocks_init(ckil, osc, ckih1, ckih2);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
@ -471,7 +471,8 @@ static void __init mx28evk_init(void)
|
|||||||
"mmc0-slot-power");
|
"mmc0-slot-power");
|
||||||
if (ret)
|
if (ret)
|
||||||
pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret);
|
pr_warn("failed to request gpio mmc0-slot-power: %d\n", ret);
|
||||||
mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
|
else
|
||||||
|
mx28_add_mxs_mmc(0, &mx28evk_mmc_pdata[0]);
|
||||||
|
|
||||||
ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW,
|
ret = gpio_request_one(MX28EVK_MMC1_SLOT_POWER, GPIOF_OUT_INIT_LOW,
|
||||||
"mmc1-slot-power");
|
"mmc1-slot-power");
|
||||||
@ -480,7 +481,6 @@ static void __init mx28evk_init(void)
|
|||||||
else
|
else
|
||||||
mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
|
mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
|
||||||
|
|
||||||
mx28_add_mxs_mmc(1, &mx28evk_mmc_pdata[1]);
|
|
||||||
mx28_add_rtc_stmp3xxx();
|
mx28_add_rtc_stmp3xxx();
|
||||||
|
|
||||||
gpio_led_register_device(0, &mx28evk_led_data);
|
gpio_led_register_device(0, &mx28evk_led_data);
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#define UART_SHIFT 2
|
#define UART_SHIFT 2
|
||||||
|
|
||||||
.macro addruart, rp, rv
|
.macro addruart, rp, rv, tmp
|
||||||
ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE)
|
ldr \rv, =PHYS_TO_IO(PICOXCELL_UART1_BASE)
|
||||||
ldr \rp, =PICOXCELL_UART1_BASE
|
ldr \rp, =PICOXCELL_UART1_BASE
|
||||||
.endm
|
.endm
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
#
|
#
|
||||||
|
|
||||||
# Common objects
|
# Common objects
|
||||||
obj-y := timer.o console.o clock.o pm_runtime.o
|
obj-y := timer.o console.o clock.o
|
||||||
|
|
||||||
# CPU objects
|
# CPU objects
|
||||||
obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o
|
obj-$(CONFIG_ARCH_SH7367) += setup-sh7367.o clock-sh7367.o intc-sh7367.o
|
||||||
|
@ -515,14 +515,14 @@ static void __init ag5evm_init(void)
|
|||||||
/* enable MMCIF */
|
/* enable MMCIF */
|
||||||
gpio_request(GPIO_FN_MMCCLK0, NULL);
|
gpio_request(GPIO_FN_MMCCLK0, NULL);
|
||||||
gpio_request(GPIO_FN_MMCCMD0_PU, NULL);
|
gpio_request(GPIO_FN_MMCCMD0_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_0, NULL);
|
gpio_request(GPIO_FN_MMCD0_0_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_1, NULL);
|
gpio_request(GPIO_FN_MMCD0_1_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_2, NULL);
|
gpio_request(GPIO_FN_MMCD0_2_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_3, NULL);
|
gpio_request(GPIO_FN_MMCD0_3_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_4, NULL);
|
gpio_request(GPIO_FN_MMCD0_4_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_5, NULL);
|
gpio_request(GPIO_FN_MMCD0_5_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_6, NULL);
|
gpio_request(GPIO_FN_MMCD0_6_PU, NULL);
|
||||||
gpio_request(GPIO_FN_MMCD0_7, NULL);
|
gpio_request(GPIO_FN_MMCD0_7_PU, NULL);
|
||||||
gpio_request(GPIO_PORT208, NULL); /* Reset */
|
gpio_request(GPIO_PORT208, NULL); /* Reset */
|
||||||
gpio_direction_output(GPIO_PORT208, 1);
|
gpio_direction_output(GPIO_PORT208, 1);
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ static struct physmap_flash_data nor_flash_data = {
|
|||||||
static struct resource nor_flash_resources[] = {
|
static struct resource nor_flash_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = 0x20000000, /* CS0 shadow instead of regular CS0 */
|
.start = 0x20000000, /* CS0 shadow instead of regular CS0 */
|
||||||
.end = 0x28000000 - 1, /* needed by USB MASK ROM boot */
|
.end = 0x28000000 - 1, /* needed by USB MASK ROM boot */
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -48,6 +48,7 @@
|
|||||||
#include <asm/hardware/cache-l2x0.h>
|
#include <asm/hardware/cache-l2x0.h>
|
||||||
#include <asm/traps.h>
|
#include <asm/traps.h>
|
||||||
|
|
||||||
|
/* SMSC 9220 */
|
||||||
static struct resource smsc9220_resources[] = {
|
static struct resource smsc9220_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = 0x14000000, /* CS5A */
|
.start = 0x14000000, /* CS5A */
|
||||||
@ -77,6 +78,7 @@ static struct platform_device eth_device = {
|
|||||||
.num_resources = ARRAY_SIZE(smsc9220_resources),
|
.num_resources = ARRAY_SIZE(smsc9220_resources),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* KEYSC */
|
||||||
static struct sh_keysc_info keysc_platdata = {
|
static struct sh_keysc_info keysc_platdata = {
|
||||||
.mode = SH_KEYSC_MODE_6,
|
.mode = SH_KEYSC_MODE_6,
|
||||||
.scan_timing = 3,
|
.scan_timing = 3,
|
||||||
@ -120,6 +122,7 @@ static struct platform_device keysc_device = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* GPIO KEY */
|
||||||
#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }
|
#define GPIO_KEY(c, g, d) { .code = c, .gpio = g, .desc = d, .active_low = 1 }
|
||||||
|
|
||||||
static struct gpio_keys_button gpio_buttons[] = {
|
static struct gpio_keys_button gpio_buttons[] = {
|
||||||
@ -150,6 +153,7 @@ static struct platform_device gpio_keys_device = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* GPIO LED */
|
||||||
#define GPIO_LED(n, g) { .name = n, .gpio = g }
|
#define GPIO_LED(n, g) { .name = n, .gpio = g }
|
||||||
|
|
||||||
static struct gpio_led gpio_leds[] = {
|
static struct gpio_led gpio_leds[] = {
|
||||||
@ -175,6 +179,7 @@ static struct platform_device gpio_leds_device = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* MMCIF */
|
||||||
static struct resource mmcif_resources[] = {
|
static struct resource mmcif_resources[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.name = "MMCIF",
|
.name = "MMCIF",
|
||||||
@ -207,6 +212,7 @@ static struct platform_device mmcif_device = {
|
|||||||
.resource = mmcif_resources,
|
.resource = mmcif_resources,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* SDHI0 */
|
||||||
static struct sh_mobile_sdhi_info sdhi0_info = {
|
static struct sh_mobile_sdhi_info sdhi0_info = {
|
||||||
.tmio_caps = MMC_CAP_SD_HIGHSPEED,
|
.tmio_caps = MMC_CAP_SD_HIGHSPEED,
|
||||||
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT,
|
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT,
|
||||||
@ -243,6 +249,7 @@ static struct platform_device sdhi0_device = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* SDHI1 */
|
||||||
static struct sh_mobile_sdhi_info sdhi1_info = {
|
static struct sh_mobile_sdhi_info sdhi1_info = {
|
||||||
.tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ,
|
.tmio_caps = MMC_CAP_NONREMOVABLE | MMC_CAP_SDIO_IRQ,
|
||||||
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT,
|
.tmio_flags = TMIO_MMC_WRPROTECT_DISABLE | TMIO_MMC_HAS_IDLE_WAIT,
|
||||||
|
@ -476,7 +476,7 @@ static struct clk_ops fsidiv_clk_ops = {
|
|||||||
.disable = fsidiv_disable,
|
.disable = fsidiv_disable,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_mapping sh7372_fsidiva_clk_mapping = {
|
static struct clk_mapping fsidiva_clk_mapping = {
|
||||||
.phys = FSIDIVA,
|
.phys = FSIDIVA,
|
||||||
.len = 8,
|
.len = 8,
|
||||||
};
|
};
|
||||||
@ -484,10 +484,10 @@ static struct clk_mapping sh7372_fsidiva_clk_mapping = {
|
|||||||
struct clk sh7372_fsidiva_clk = {
|
struct clk sh7372_fsidiva_clk = {
|
||||||
.ops = &fsidiv_clk_ops,
|
.ops = &fsidiv_clk_ops,
|
||||||
.parent = &div6_reparent_clks[DIV6_FSIA], /* late install */
|
.parent = &div6_reparent_clks[DIV6_FSIA], /* late install */
|
||||||
.mapping = &sh7372_fsidiva_clk_mapping,
|
.mapping = &fsidiva_clk_mapping,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk_mapping sh7372_fsidivb_clk_mapping = {
|
static struct clk_mapping fsidivb_clk_mapping = {
|
||||||
.phys = FSIDIVB,
|
.phys = FSIDIVB,
|
||||||
.len = 8,
|
.len = 8,
|
||||||
};
|
};
|
||||||
@ -495,7 +495,7 @@ static struct clk_mapping sh7372_fsidivb_clk_mapping = {
|
|||||||
struct clk sh7372_fsidivb_clk = {
|
struct clk sh7372_fsidivb_clk = {
|
||||||
.ops = &fsidiv_clk_ops,
|
.ops = &fsidiv_clk_ops,
|
||||||
.parent = &div6_reparent_clks[DIV6_FSIB], /* late install */
|
.parent = &div6_reparent_clks[DIV6_FSIB], /* late install */
|
||||||
.mapping = &sh7372_fsidivb_clk_mapping,
|
.mapping = &fsidivb_clk_mapping,
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct clk *late_main_clks[] = {
|
static struct clk *late_main_clks[] = {
|
||||||
|
@ -26,65 +26,59 @@ void (*shmobile_cpuidle_modes[CPUIDLE_STATE_MAX])(void) = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int shmobile_cpuidle_enter(struct cpuidle_device *dev,
|
static int shmobile_cpuidle_enter(struct cpuidle_device *dev,
|
||||||
struct cpuidle_state *state)
|
struct cpuidle_driver *drv,
|
||||||
|
int index)
|
||||||
{
|
{
|
||||||
ktime_t before, after;
|
ktime_t before, after;
|
||||||
int requested_state = state - &dev->states[0];
|
|
||||||
|
|
||||||
dev->last_state = &dev->states[requested_state];
|
|
||||||
before = ktime_get();
|
before = ktime_get();
|
||||||
|
|
||||||
local_irq_disable();
|
local_irq_disable();
|
||||||
local_fiq_disable();
|
local_fiq_disable();
|
||||||
|
|
||||||
shmobile_cpuidle_modes[requested_state]();
|
shmobile_cpuidle_modes[index]();
|
||||||
|
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
local_fiq_enable();
|
local_fiq_enable();
|
||||||
|
|
||||||
after = ktime_get();
|
after = ktime_get();
|
||||||
return ktime_to_ns(ktime_sub(after, before)) >> 10;
|
dev->last_residency = ktime_to_ns(ktime_sub(after, before)) >> 10;
|
||||||
|
|
||||||
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct cpuidle_device shmobile_cpuidle_dev;
|
static struct cpuidle_device shmobile_cpuidle_dev;
|
||||||
static struct cpuidle_driver shmobile_cpuidle_driver = {
|
static struct cpuidle_driver shmobile_cpuidle_driver = {
|
||||||
.name = "shmobile_cpuidle",
|
.name = "shmobile_cpuidle",
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
|
.states[0] = {
|
||||||
|
.name = "C1",
|
||||||
|
.desc = "WFI",
|
||||||
|
.exit_latency = 1,
|
||||||
|
.target_residency = 1 * 2,
|
||||||
|
.flags = CPUIDLE_FLAG_TIME_VALID,
|
||||||
|
},
|
||||||
|
.safe_state_index = 0, /* C1 */
|
||||||
|
.state_count = 1,
|
||||||
};
|
};
|
||||||
|
|
||||||
void (*shmobile_cpuidle_setup)(struct cpuidle_device *dev);
|
void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv);
|
||||||
|
|
||||||
static int shmobile_cpuidle_init(void)
|
static int shmobile_cpuidle_init(void)
|
||||||
{
|
{
|
||||||
struct cpuidle_device *dev = &shmobile_cpuidle_dev;
|
struct cpuidle_device *dev = &shmobile_cpuidle_dev;
|
||||||
struct cpuidle_state *state;
|
struct cpuidle_driver *drv = &shmobile_cpuidle_driver;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
cpuidle_register_driver(&shmobile_cpuidle_driver);
|
for (i = 0; i < CPUIDLE_STATE_MAX; i++)
|
||||||
|
drv->states[i].enter = shmobile_cpuidle_enter;
|
||||||
for (i = 0; i < CPUIDLE_STATE_MAX; i++) {
|
|
||||||
dev->states[i].name[0] = '\0';
|
|
||||||
dev->states[i].desc[0] = '\0';
|
|
||||||
dev->states[i].enter = shmobile_cpuidle_enter;
|
|
||||||
}
|
|
||||||
|
|
||||||
i = CPUIDLE_DRIVER_STATE_START;
|
|
||||||
|
|
||||||
state = &dev->states[i++];
|
|
||||||
snprintf(state->name, CPUIDLE_NAME_LEN, "C1");
|
|
||||||
strncpy(state->desc, "WFI", CPUIDLE_DESC_LEN);
|
|
||||||
state->exit_latency = 1;
|
|
||||||
state->target_residency = 1 * 2;
|
|
||||||
state->power_usage = 3;
|
|
||||||
state->flags = 0;
|
|
||||||
state->flags |= CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
|
|
||||||
dev->safe_state = state;
|
|
||||||
dev->state_count = i;
|
|
||||||
|
|
||||||
if (shmobile_cpuidle_setup)
|
if (shmobile_cpuidle_setup)
|
||||||
shmobile_cpuidle_setup(dev);
|
shmobile_cpuidle_setup(drv);
|
||||||
|
|
||||||
|
cpuidle_register_driver(drv);
|
||||||
|
|
||||||
|
dev->state_count = drv->state_count;
|
||||||
cpuidle_register_device(dev);
|
cpuidle_register_device(dev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -9,9 +9,9 @@ extern int clk_init(void);
|
|||||||
extern void shmobile_handle_irq_intc(struct pt_regs *);
|
extern void shmobile_handle_irq_intc(struct pt_regs *);
|
||||||
extern void shmobile_handle_irq_gic(struct pt_regs *);
|
extern void shmobile_handle_irq_gic(struct pt_regs *);
|
||||||
extern struct platform_suspend_ops shmobile_suspend_ops;
|
extern struct platform_suspend_ops shmobile_suspend_ops;
|
||||||
struct cpuidle_device;
|
struct cpuidle_driver;
|
||||||
extern void (*shmobile_cpuidle_modes[])(void);
|
extern void (*shmobile_cpuidle_modes[])(void);
|
||||||
extern void (*shmobile_cpuidle_setup)(struct cpuidle_device *dev);
|
extern void (*shmobile_cpuidle_setup)(struct cpuidle_driver *drv);
|
||||||
|
|
||||||
extern void sh7367_init_irq(void);
|
extern void sh7367_init_irq(void);
|
||||||
extern void sh7367_add_early_devices(void);
|
extern void sh7367_add_early_devices(void);
|
||||||
|
@ -470,6 +470,14 @@ enum {
|
|||||||
GPIO_FN_SDHICMD2_PU,
|
GPIO_FN_SDHICMD2_PU,
|
||||||
GPIO_FN_MMCCMD0_PU,
|
GPIO_FN_MMCCMD0_PU,
|
||||||
GPIO_FN_MMCCMD1_PU,
|
GPIO_FN_MMCCMD1_PU,
|
||||||
|
GPIO_FN_MMCD0_0_PU,
|
||||||
|
GPIO_FN_MMCD0_1_PU,
|
||||||
|
GPIO_FN_MMCD0_2_PU,
|
||||||
|
GPIO_FN_MMCD0_3_PU,
|
||||||
|
GPIO_FN_MMCD0_4_PU,
|
||||||
|
GPIO_FN_MMCD0_5_PU,
|
||||||
|
GPIO_FN_MMCD0_6_PU,
|
||||||
|
GPIO_FN_MMCD0_7_PU,
|
||||||
GPIO_FN_FSIACK_PU,
|
GPIO_FN_FSIACK_PU,
|
||||||
GPIO_FN_FSIAILR_PU,
|
GPIO_FN_FSIAILR_PU,
|
||||||
GPIO_FN_FSIAIBT_PU,
|
GPIO_FN_FSIAIBT_PU,
|
||||||
|
@ -21,68 +21,49 @@
|
|||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <mach/sh7367.h>
|
#include <mach/sh7367.h>
|
||||||
|
|
||||||
#define _1(fn, pfx, sfx) fn(pfx, sfx)
|
#define CPU_ALL_PORT(fn, pfx, sfx) \
|
||||||
|
PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \
|
||||||
#define _10(fn, pfx, sfx) \
|
PORT_10(fn, pfx##10, sfx), PORT_90(fn, pfx##1, sfx), \
|
||||||
_1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \
|
PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \
|
||||||
_1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \
|
PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \
|
||||||
_1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \
|
PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \
|
||||||
_1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \
|
PORT_10(fn, pfx##26, sfx), PORT_1(fn, pfx##270, sfx), \
|
||||||
_1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx)
|
PORT_1(fn, pfx##271, sfx), PORT_1(fn, pfx##272, sfx)
|
||||||
|
|
||||||
#define _90(fn, pfx, sfx) \
|
|
||||||
_10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \
|
|
||||||
_10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \
|
|
||||||
_10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \
|
|
||||||
_10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx), \
|
|
||||||
_10(fn, pfx##9, sfx)
|
|
||||||
|
|
||||||
#define _273(fn, pfx, sfx) \
|
|
||||||
_10(fn, pfx, sfx), _90(fn, pfx, sfx), \
|
|
||||||
_10(fn, pfx##10, sfx), _90(fn, pfx##1, sfx), \
|
|
||||||
_10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \
|
|
||||||
_10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \
|
|
||||||
_10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \
|
|
||||||
_10(fn, pfx##26, sfx), _1(fn, pfx##270, sfx), \
|
|
||||||
_1(fn, pfx##271, sfx), _1(fn, pfx##272, sfx)
|
|
||||||
|
|
||||||
#define _PORT(pfx, sfx) pfx##_##sfx
|
|
||||||
#define PORT_273(str) _273(_PORT, PORT, str)
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PINMUX_RESERVED = 0,
|
PINMUX_RESERVED = 0,
|
||||||
|
|
||||||
PINMUX_DATA_BEGIN,
|
PINMUX_DATA_BEGIN,
|
||||||
PORT_273(DATA), /* PORT0_DATA -> PORT272_DATA */
|
PORT_ALL(DATA), /* PORT0_DATA -> PORT272_DATA */
|
||||||
PINMUX_DATA_END,
|
PINMUX_DATA_END,
|
||||||
|
|
||||||
PINMUX_INPUT_BEGIN,
|
PINMUX_INPUT_BEGIN,
|
||||||
PORT_273(IN), /* PORT0_IN -> PORT272_IN */
|
PORT_ALL(IN), /* PORT0_IN -> PORT272_IN */
|
||||||
PINMUX_INPUT_END,
|
PINMUX_INPUT_END,
|
||||||
|
|
||||||
PINMUX_INPUT_PULLUP_BEGIN,
|
PINMUX_INPUT_PULLUP_BEGIN,
|
||||||
PORT_273(IN_PU), /* PORT0_IN_PU -> PORT272_IN_PU */
|
PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT272_IN_PU */
|
||||||
PINMUX_INPUT_PULLUP_END,
|
PINMUX_INPUT_PULLUP_END,
|
||||||
|
|
||||||
PINMUX_INPUT_PULLDOWN_BEGIN,
|
PINMUX_INPUT_PULLDOWN_BEGIN,
|
||||||
PORT_273(IN_PD), /* PORT0_IN_PD -> PORT272_IN_PD */
|
PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT272_IN_PD */
|
||||||
PINMUX_INPUT_PULLDOWN_END,
|
PINMUX_INPUT_PULLDOWN_END,
|
||||||
|
|
||||||
PINMUX_OUTPUT_BEGIN,
|
PINMUX_OUTPUT_BEGIN,
|
||||||
PORT_273(OUT), /* PORT0_OUT -> PORT272_OUT */
|
PORT_ALL(OUT), /* PORT0_OUT -> PORT272_OUT */
|
||||||
PINMUX_OUTPUT_END,
|
PINMUX_OUTPUT_END,
|
||||||
|
|
||||||
PINMUX_FUNCTION_BEGIN,
|
PINMUX_FUNCTION_BEGIN,
|
||||||
PORT_273(FN_IN), /* PORT0_FN_IN -> PORT272_FN_IN */
|
PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT272_FN_IN */
|
||||||
PORT_273(FN_OUT), /* PORT0_FN_OUT -> PORT272_FN_OUT */
|
PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT272_FN_OUT */
|
||||||
PORT_273(FN0), /* PORT0_FN0 -> PORT272_FN0 */
|
PORT_ALL(FN0), /* PORT0_FN0 -> PORT272_FN0 */
|
||||||
PORT_273(FN1), /* PORT0_FN1 -> PORT272_FN1 */
|
PORT_ALL(FN1), /* PORT0_FN1 -> PORT272_FN1 */
|
||||||
PORT_273(FN2), /* PORT0_FN2 -> PORT272_FN2 */
|
PORT_ALL(FN2), /* PORT0_FN2 -> PORT272_FN2 */
|
||||||
PORT_273(FN3), /* PORT0_FN3 -> PORT272_FN3 */
|
PORT_ALL(FN3), /* PORT0_FN3 -> PORT272_FN3 */
|
||||||
PORT_273(FN4), /* PORT0_FN4 -> PORT272_FN4 */
|
PORT_ALL(FN4), /* PORT0_FN4 -> PORT272_FN4 */
|
||||||
PORT_273(FN5), /* PORT0_FN5 -> PORT272_FN5 */
|
PORT_ALL(FN5), /* PORT0_FN5 -> PORT272_FN5 */
|
||||||
PORT_273(FN6), /* PORT0_FN6 -> PORT272_FN6 */
|
PORT_ALL(FN6), /* PORT0_FN6 -> PORT272_FN6 */
|
||||||
PORT_273(FN7), /* PORT0_FN7 -> PORT272_FN7 */
|
PORT_ALL(FN7), /* PORT0_FN7 -> PORT272_FN7 */
|
||||||
|
|
||||||
MSELBCR_MSEL2_1, MSELBCR_MSEL2_0,
|
MSELBCR_MSEL2_1, MSELBCR_MSEL2_0,
|
||||||
PINMUX_FUNCTION_END,
|
PINMUX_FUNCTION_END,
|
||||||
@ -327,41 +308,6 @@ enum {
|
|||||||
PINMUX_MARK_END,
|
PINMUX_MARK_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PORT_DATA_I(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PU(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PU_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_O(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PU(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PU_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
|
|
||||||
static pinmux_enum_t pinmux_data[] = {
|
static pinmux_enum_t pinmux_data[] = {
|
||||||
|
|
||||||
/* specify valid pin states for each pin in GPIO mode */
|
/* specify valid pin states for each pin in GPIO mode */
|
||||||
@ -1098,13 +1044,9 @@ static pinmux_enum_t pinmux_data[] = {
|
|||||||
PINMUX_DATA(DIVLOCK_MARK, PORT272_FN1),
|
PINMUX_DATA(DIVLOCK_MARK, PORT272_FN1),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA)
|
|
||||||
#define GPIO_PORT_273() _273(_GPIO_PORT, , unused)
|
|
||||||
#define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK)
|
|
||||||
|
|
||||||
static struct pinmux_gpio pinmux_gpios[] = {
|
static struct pinmux_gpio pinmux_gpios[] = {
|
||||||
/* 49-1 -> 49-6 (GPIO) */
|
/* 49-1 -> 49-6 (GPIO) */
|
||||||
GPIO_PORT_273(),
|
GPIO_PORT_ALL(),
|
||||||
|
|
||||||
/* Special Pull-up / Pull-down Functions */
|
/* Special Pull-up / Pull-down Functions */
|
||||||
GPIO_FN(PORT48_KEYIN0_PU), GPIO_FN(PORT49_KEYIN1_PU),
|
GPIO_FN(PORT48_KEYIN0_PU), GPIO_FN(PORT49_KEYIN1_PU),
|
||||||
@ -1345,22 +1287,6 @@ static struct pinmux_gpio pinmux_gpios[] = {
|
|||||||
GPIO_FN(DIVLOCK),
|
GPIO_FN(DIVLOCK),
|
||||||
};
|
};
|
||||||
|
|
||||||
/* helper for top 4 bits in PORTnCR */
|
|
||||||
#define PCRH(in, in_pd, in_pu, out) \
|
|
||||||
0, (out), (in), 0, \
|
|
||||||
0, 0, 0, 0, \
|
|
||||||
0, 0, (in_pd), 0, \
|
|
||||||
0, 0, (in_pu), 0
|
|
||||||
|
|
||||||
#define PORTCR(nr, reg) \
|
|
||||||
{ PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \
|
|
||||||
PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \
|
|
||||||
PORT##nr##_IN_PU, PORT##nr##_OUT), \
|
|
||||||
PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \
|
|
||||||
PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \
|
|
||||||
PORT##nr##_FN6, PORT##nr##_FN7 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||||
PORTCR(0, 0xe6050000), /* PORT0CR */
|
PORTCR(0, 0xe6050000), /* PORT0CR */
|
||||||
PORTCR(1, 0xe6050001), /* PORT1CR */
|
PORTCR(1, 0xe6050001), /* PORT1CR */
|
||||||
|
@ -25,27 +25,13 @@
|
|||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <mach/sh7372.h>
|
#include <mach/sh7372.h>
|
||||||
|
|
||||||
#define _1(fn, pfx, sfx) fn(pfx, sfx)
|
#define CPU_ALL_PORT(fn, pfx, sfx) \
|
||||||
|
PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \
|
||||||
#define _10(fn, pfx, sfx) \
|
PORT_10(fn, pfx##10, sfx), PORT_10(fn, pfx##11, sfx), \
|
||||||
_1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \
|
PORT_10(fn, pfx##12, sfx), PORT_10(fn, pfx##13, sfx), \
|
||||||
_1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \
|
PORT_10(fn, pfx##14, sfx), PORT_10(fn, pfx##15, sfx), \
|
||||||
_1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \
|
PORT_10(fn, pfx##16, sfx), PORT_10(fn, pfx##17, sfx), \
|
||||||
_1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \
|
PORT_10(fn, pfx##18, sfx), PORT_1(fn, pfx##190, sfx)
|
||||||
_1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx)
|
|
||||||
|
|
||||||
#define _80(fn, pfx, sfx) \
|
|
||||||
_10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \
|
|
||||||
_10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \
|
|
||||||
_10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \
|
|
||||||
_10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx)
|
|
||||||
|
|
||||||
#define _190(fn, pfx, sfx) \
|
|
||||||
_10(fn, pfx, sfx), _80(fn, pfx, sfx), _10(fn, pfx##9, sfx), \
|
|
||||||
_10(fn, pfx##10, sfx), _80(fn, pfx##1, sfx), _1(fn, pfx##190, sfx)
|
|
||||||
|
|
||||||
#define _PORT(pfx, sfx) pfx##_##sfx
|
|
||||||
#define PORT_ALL(str) _190(_PORT, PORT, str)
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PINMUX_RESERVED = 0,
|
PINMUX_RESERVED = 0,
|
||||||
@ -381,108 +367,124 @@ enum {
|
|||||||
PINMUX_MARK_END,
|
PINMUX_MARK_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* PORT_DATA_I_PD(nr) */
|
|
||||||
#define _I___D(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
/* PORT_DATA_I_PU(nr) */
|
|
||||||
#define _I__U_(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
/* PORT_DATA_I_PU_PD(nr) */
|
|
||||||
#define _I__UD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
/* PORT_DATA_O(nr) */
|
|
||||||
#define __O___(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT)
|
|
||||||
|
|
||||||
/* PORT_DATA_IO(nr) */
|
|
||||||
#define _IO___(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN)
|
|
||||||
|
|
||||||
/* PORT_DATA_IO_PD(nr) */
|
|
||||||
#define _IO__D(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
/* PORT_DATA_IO_PU(nr) */
|
|
||||||
#define _IO_U_(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
/* PORT_DATA_IO_PU_PD(nr) */
|
|
||||||
#define _IO_UD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_OUT, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
|
|
||||||
static pinmux_enum_t pinmux_data[] = {
|
static pinmux_enum_t pinmux_data[] = {
|
||||||
|
|
||||||
/* specify valid pin states for each pin in GPIO mode */
|
/* specify valid pin states for each pin in GPIO mode */
|
||||||
|
PORT_DATA_IO_PD(0), PORT_DATA_IO_PD(1),
|
||||||
|
PORT_DATA_O(2), PORT_DATA_I_PD(3),
|
||||||
|
PORT_DATA_I_PD(4), PORT_DATA_I_PD(5),
|
||||||
|
PORT_DATA_IO_PU_PD(6), PORT_DATA_I_PD(7),
|
||||||
|
PORT_DATA_IO_PD(8), PORT_DATA_O(9),
|
||||||
|
|
||||||
_IO__D(0), _IO__D(1), __O___(2), _I___D(3), _I___D(4),
|
PORT_DATA_O(10), PORT_DATA_O(11),
|
||||||
_I___D(5), _IO_UD(6), _I___D(7), _IO__D(8), __O___(9),
|
PORT_DATA_IO_PU_PD(12), PORT_DATA_IO_PD(13),
|
||||||
|
PORT_DATA_IO_PD(14), PORT_DATA_O(15),
|
||||||
|
PORT_DATA_IO_PD(16), PORT_DATA_IO_PD(17),
|
||||||
|
PORT_DATA_I_PD(18), PORT_DATA_IO(19),
|
||||||
|
|
||||||
__O___(10), __O___(11), _IO_UD(12), _IO__D(13), _IO__D(14),
|
PORT_DATA_IO(20), PORT_DATA_IO(21),
|
||||||
__O___(15), _IO__D(16), _IO__D(17), _I___D(18), _IO___(19),
|
PORT_DATA_IO(22), PORT_DATA_IO(23),
|
||||||
|
PORT_DATA_IO(24), PORT_DATA_IO(25),
|
||||||
|
PORT_DATA_IO(26), PORT_DATA_IO(27),
|
||||||
|
PORT_DATA_IO(28), PORT_DATA_IO(29),
|
||||||
|
|
||||||
_IO___(20), _IO___(21), _IO___(22), _IO___(23), _IO___(24),
|
PORT_DATA_IO(30), PORT_DATA_IO(31),
|
||||||
_IO___(25), _IO___(26), _IO___(27), _IO___(28), _IO___(29),
|
PORT_DATA_IO(32), PORT_DATA_IO(33),
|
||||||
|
PORT_DATA_IO(34), PORT_DATA_IO(35),
|
||||||
|
PORT_DATA_IO(36), PORT_DATA_IO(37),
|
||||||
|
PORT_DATA_IO(38), PORT_DATA_IO(39),
|
||||||
|
|
||||||
_IO___(30), _IO___(31), _IO___(32), _IO___(33), _IO___(34),
|
PORT_DATA_IO(40), PORT_DATA_IO(41),
|
||||||
_IO___(35), _IO___(36), _IO___(37), _IO___(38), _IO___(39),
|
PORT_DATA_IO(42), PORT_DATA_IO(43),
|
||||||
|
PORT_DATA_IO(44), PORT_DATA_IO(45),
|
||||||
|
PORT_DATA_IO_PU(46), PORT_DATA_IO_PU(47),
|
||||||
|
PORT_DATA_IO_PU(48), PORT_DATA_IO_PU(49),
|
||||||
|
|
||||||
_IO___(40), _IO___(41), _IO___(42), _IO___(43), _IO___(44),
|
PORT_DATA_IO_PU(50), PORT_DATA_IO_PU(51),
|
||||||
_IO___(45), _IO_U_(46), _IO_U_(47), _IO_U_(48), _IO_U_(49),
|
PORT_DATA_IO_PU(52), PORT_DATA_IO_PU(53),
|
||||||
|
PORT_DATA_IO_PU(54), PORT_DATA_IO_PU(55),
|
||||||
|
PORT_DATA_IO_PU(56), PORT_DATA_IO_PU(57),
|
||||||
|
PORT_DATA_IO_PU(58), PORT_DATA_IO_PU(59),
|
||||||
|
|
||||||
_IO_U_(50), _IO_U_(51), _IO_U_(52), _IO_U_(53), _IO_U_(54),
|
PORT_DATA_IO_PU(60), PORT_DATA_IO_PU(61),
|
||||||
_IO_U_(55), _IO_U_(56), _IO_U_(57), _IO_U_(58), _IO_U_(59),
|
PORT_DATA_IO(62), PORT_DATA_O(63),
|
||||||
|
PORT_DATA_O(64), PORT_DATA_IO_PU(65),
|
||||||
|
PORT_DATA_O(66), PORT_DATA_IO_PU(67), /*66?*/
|
||||||
|
PORT_DATA_O(68), PORT_DATA_IO(69),
|
||||||
|
|
||||||
_IO_U_(60), _IO_U_(61), _IO___(62), __O___(63), __O___(64),
|
PORT_DATA_IO(70), PORT_DATA_IO(71),
|
||||||
_IO_U_(65), __O___(66), _IO_U_(67), __O___(68), _IO___(69), /*66?*/
|
PORT_DATA_O(72), PORT_DATA_I_PU(73),
|
||||||
|
PORT_DATA_I_PU_PD(74), PORT_DATA_IO_PU_PD(75),
|
||||||
|
PORT_DATA_IO_PU_PD(76), PORT_DATA_IO_PU_PD(77),
|
||||||
|
PORT_DATA_IO_PU_PD(78), PORT_DATA_IO_PU_PD(79),
|
||||||
|
|
||||||
_IO___(70), _IO___(71), __O___(72), _I__U_(73), _I__UD(74),
|
PORT_DATA_IO_PU_PD(80), PORT_DATA_IO_PU_PD(81),
|
||||||
_IO_UD(75), _IO_UD(76), _IO_UD(77), _IO_UD(78), _IO_UD(79),
|
PORT_DATA_IO_PU_PD(82), PORT_DATA_IO_PU_PD(83),
|
||||||
|
PORT_DATA_IO_PU_PD(84), PORT_DATA_IO_PU_PD(85),
|
||||||
|
PORT_DATA_IO_PU_PD(86), PORT_DATA_IO_PU_PD(87),
|
||||||
|
PORT_DATA_IO_PU_PD(88), PORT_DATA_IO_PU_PD(89),
|
||||||
|
|
||||||
_IO_UD(80), _IO_UD(81), _IO_UD(82), _IO_UD(83), _IO_UD(84),
|
PORT_DATA_IO_PU_PD(90), PORT_DATA_IO_PU_PD(91),
|
||||||
_IO_UD(85), _IO_UD(86), _IO_UD(87), _IO_UD(88), _IO_UD(89),
|
PORT_DATA_IO_PU_PD(92), PORT_DATA_IO_PU_PD(93),
|
||||||
|
PORT_DATA_IO_PU_PD(94), PORT_DATA_IO_PU_PD(95),
|
||||||
|
PORT_DATA_IO_PU(96), PORT_DATA_IO_PU_PD(97),
|
||||||
|
PORT_DATA_IO_PU_PD(98), PORT_DATA_O(99), /*99?*/
|
||||||
|
|
||||||
_IO_UD(90), _IO_UD(91), _IO_UD(92), _IO_UD(93), _IO_UD(94),
|
PORT_DATA_IO_PD(100), PORT_DATA_IO_PD(101),
|
||||||
_IO_UD(95), _IO_U_(96), _IO_UD(97), _IO_UD(98), __O___(99), /*99?*/
|
PORT_DATA_IO_PD(102), PORT_DATA_IO_PD(103),
|
||||||
|
PORT_DATA_IO_PD(104), PORT_DATA_IO_PD(105),
|
||||||
|
PORT_DATA_IO_PU(106), PORT_DATA_IO_PU(107),
|
||||||
|
PORT_DATA_IO_PU(108), PORT_DATA_IO_PU(109),
|
||||||
|
|
||||||
_IO__D(100), _IO__D(101), _IO__D(102), _IO__D(103), _IO__D(104),
|
PORT_DATA_IO_PU(110), PORT_DATA_IO_PU(111),
|
||||||
_IO__D(105), _IO_U_(106), _IO_U_(107), _IO_U_(108), _IO_U_(109),
|
PORT_DATA_IO_PD(112), PORT_DATA_IO_PD(113),
|
||||||
|
PORT_DATA_IO_PU(114), PORT_DATA_IO_PU(115),
|
||||||
|
PORT_DATA_IO_PU(116), PORT_DATA_IO_PU(117),
|
||||||
|
PORT_DATA_IO_PU(118), PORT_DATA_IO_PU(119),
|
||||||
|
|
||||||
_IO_U_(110), _IO_U_(111), _IO__D(112), _IO__D(113), _IO_U_(114),
|
PORT_DATA_IO_PU(120), PORT_DATA_IO_PD(121),
|
||||||
_IO_U_(115), _IO_U_(116), _IO_U_(117), _IO_U_(118), _IO_U_(119),
|
PORT_DATA_IO_PD(122), PORT_DATA_IO_PD(123),
|
||||||
|
PORT_DATA_IO_PD(124), PORT_DATA_IO_PD(125),
|
||||||
|
PORT_DATA_IO_PD(126), PORT_DATA_IO_PD(127),
|
||||||
|
PORT_DATA_IO_PD(128), PORT_DATA_IO_PU_PD(129),
|
||||||
|
|
||||||
_IO_U_(120), _IO__D(121), _IO__D(122), _IO__D(123), _IO__D(124),
|
PORT_DATA_IO_PU_PD(130), PORT_DATA_IO_PU_PD(131),
|
||||||
_IO__D(125), _IO__D(126), _IO__D(127), _IO__D(128), _IO_UD(129),
|
PORT_DATA_IO_PU_PD(132), PORT_DATA_IO_PU_PD(133),
|
||||||
|
PORT_DATA_IO_PU_PD(134), PORT_DATA_IO_PU_PD(135),
|
||||||
|
PORT_DATA_IO_PD(136), PORT_DATA_IO_PD(137),
|
||||||
|
PORT_DATA_IO_PD(138), PORT_DATA_IO_PD(139),
|
||||||
|
|
||||||
_IO_UD(130), _IO_UD(131), _IO_UD(132), _IO_UD(133), _IO_UD(134),
|
PORT_DATA_IO_PD(140), PORT_DATA_IO_PD(141),
|
||||||
_IO_UD(135), _IO__D(136), _IO__D(137), _IO__D(138), _IO__D(139),
|
PORT_DATA_IO_PD(142), PORT_DATA_IO_PU_PD(143),
|
||||||
|
PORT_DATA_IO_PD(144), PORT_DATA_IO_PD(145),
|
||||||
|
PORT_DATA_IO_PD(146), PORT_DATA_IO_PD(147),
|
||||||
|
PORT_DATA_IO_PD(148), PORT_DATA_IO_PD(149),
|
||||||
|
|
||||||
_IO__D(140), _IO__D(141), _IO__D(142), _IO_UD(143), _IO__D(144),
|
PORT_DATA_IO_PD(150), PORT_DATA_IO_PD(151),
|
||||||
_IO__D(145), _IO__D(146), _IO__D(147), _IO__D(148), _IO__D(149),
|
PORT_DATA_IO_PU_PD(152), PORT_DATA_I_PD(153),
|
||||||
|
PORT_DATA_IO_PU_PD(154), PORT_DATA_I_PD(155),
|
||||||
|
PORT_DATA_IO_PD(156), PORT_DATA_IO_PD(157),
|
||||||
|
PORT_DATA_I_PD(158), PORT_DATA_IO_PD(159),
|
||||||
|
|
||||||
_IO__D(150), _IO__D(151), _IO_UD(152), _I___D(153), _IO_UD(154),
|
PORT_DATA_O(160), PORT_DATA_IO_PD(161),
|
||||||
_I___D(155), _IO__D(156), _IO__D(157), _I___D(158), _IO__D(159),
|
PORT_DATA_IO_PD(162), PORT_DATA_IO_PD(163),
|
||||||
|
PORT_DATA_I_PD(164), PORT_DATA_IO_PD(165),
|
||||||
|
PORT_DATA_I_PD(166), PORT_DATA_I_PD(167),
|
||||||
|
PORT_DATA_I_PD(168), PORT_DATA_I_PD(169),
|
||||||
|
|
||||||
__O___(160), _IO__D(161), _IO__D(162), _IO__D(163), _I___D(164),
|
PORT_DATA_I_PD(170), PORT_DATA_O(171),
|
||||||
_IO__D(165), _I___D(166), _I___D(167), _I___D(168), _I___D(169),
|
PORT_DATA_IO_PU_PD(172), PORT_DATA_IO_PU_PD(173),
|
||||||
|
PORT_DATA_IO_PU_PD(174), PORT_DATA_IO_PU_PD(175),
|
||||||
|
PORT_DATA_IO_PU_PD(176), PORT_DATA_IO_PU_PD(177),
|
||||||
|
PORT_DATA_IO_PU_PD(178), PORT_DATA_O(179),
|
||||||
|
|
||||||
_I___D(170), __O___(171), _IO_UD(172), _IO_UD(173), _IO_UD(174),
|
PORT_DATA_IO_PU_PD(180), PORT_DATA_IO_PU_PD(181),
|
||||||
_IO_UD(175), _IO_UD(176), _IO_UD(177), _IO_UD(178), __O___(179),
|
PORT_DATA_IO_PU_PD(182), PORT_DATA_IO_PU_PD(183),
|
||||||
|
PORT_DATA_IO_PU_PD(184), PORT_DATA_O(185),
|
||||||
|
PORT_DATA_IO_PU_PD(186), PORT_DATA_IO_PU_PD(187),
|
||||||
|
PORT_DATA_IO_PU_PD(188), PORT_DATA_IO_PU_PD(189),
|
||||||
|
|
||||||
_IO_UD(180), _IO_UD(181), _IO_UD(182), _IO_UD(183), _IO_UD(184),
|
PORT_DATA_IO_PU_PD(190),
|
||||||
__O___(185), _IO_UD(186), _IO_UD(187), _IO_UD(188), _IO_UD(189),
|
|
||||||
|
|
||||||
_IO_UD(190),
|
|
||||||
|
|
||||||
/* IRQ */
|
/* IRQ */
|
||||||
PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0),
|
PINMUX_DATA(IRQ0_6_MARK, PORT6_FN0, MSEL1CR_0_0),
|
||||||
@ -926,10 +928,6 @@ static pinmux_enum_t pinmux_data[] = {
|
|||||||
PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1),
|
PINMUX_DATA(MFIv4_MARK, MSEL4CR_6_1),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA)
|
|
||||||
#define GPIO_PORT_ALL() _190(_GPIO_PORT, , unused)
|
|
||||||
#define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK)
|
|
||||||
|
|
||||||
static struct pinmux_gpio pinmux_gpios[] = {
|
static struct pinmux_gpio pinmux_gpios[] = {
|
||||||
|
|
||||||
/* PORT */
|
/* PORT */
|
||||||
@ -1201,22 +1199,6 @@ static struct pinmux_gpio pinmux_gpios[] = {
|
|||||||
GPIO_FN(SDENC_DV_CLKI),
|
GPIO_FN(SDENC_DV_CLKI),
|
||||||
};
|
};
|
||||||
|
|
||||||
/* helper for top 4 bits in PORTnCR */
|
|
||||||
#define PCRH(in, in_pd, in_pu, out) \
|
|
||||||
0, (out), (in), 0, \
|
|
||||||
0, 0, 0, 0, \
|
|
||||||
0, 0, (in_pd), 0, \
|
|
||||||
0, 0, (in_pu), 0
|
|
||||||
|
|
||||||
#define PORTCR(nr, reg) \
|
|
||||||
{ PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \
|
|
||||||
PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \
|
|
||||||
PORT##nr##_IN_PU, PORT##nr##_OUT), \
|
|
||||||
PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \
|
|
||||||
PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \
|
|
||||||
PORT##nr##_FN6, PORT##nr##_FN7 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||||
PORTCR(0, 0xE6051000), /* PORT0CR */
|
PORTCR(0, 0xE6051000), /* PORT0CR */
|
||||||
PORTCR(1, 0xE6051001), /* PORT1CR */
|
PORTCR(1, 0xE6051001), /* PORT1CR */
|
||||||
|
@ -22,84 +22,65 @@
|
|||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <mach/sh7377.h>
|
#include <mach/sh7377.h>
|
||||||
|
|
||||||
#define _1(fn, pfx, sfx) fn(pfx, sfx)
|
#define CPU_ALL_PORT(fn, pfx, sfx) \
|
||||||
|
PORT_10(fn, pfx, sfx), PORT_90(fn, pfx, sfx), \
|
||||||
#define _10(fn, pfx, sfx) \
|
PORT_10(fn, pfx##10, sfx), \
|
||||||
_1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \
|
PORT_1(fn, pfx##110, sfx), PORT_1(fn, pfx##111, sfx), \
|
||||||
_1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \
|
PORT_1(fn, pfx##112, sfx), PORT_1(fn, pfx##113, sfx), \
|
||||||
_1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \
|
PORT_1(fn, pfx##114, sfx), PORT_1(fn, pfx##115, sfx), \
|
||||||
_1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \
|
PORT_1(fn, pfx##116, sfx), PORT_1(fn, pfx##117, sfx), \
|
||||||
_1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx)
|
PORT_1(fn, pfx##118, sfx), \
|
||||||
|
PORT_1(fn, pfx##128, sfx), PORT_1(fn, pfx##129, sfx), \
|
||||||
#define _90(fn, pfx, sfx) \
|
PORT_10(fn, pfx##13, sfx), PORT_10(fn, pfx##14, sfx), \
|
||||||
_10(fn, pfx##1, sfx), _10(fn, pfx##2, sfx), \
|
PORT_10(fn, pfx##15, sfx), \
|
||||||
_10(fn, pfx##3, sfx), _10(fn, pfx##4, sfx), \
|
PORT_1(fn, pfx##160, sfx), PORT_1(fn, pfx##161, sfx), \
|
||||||
_10(fn, pfx##5, sfx), _10(fn, pfx##6, sfx), \
|
PORT_1(fn, pfx##162, sfx), PORT_1(fn, pfx##163, sfx), \
|
||||||
_10(fn, pfx##7, sfx), _10(fn, pfx##8, sfx), \
|
PORT_1(fn, pfx##164, sfx), \
|
||||||
_10(fn, pfx##9, sfx)
|
PORT_1(fn, pfx##192, sfx), PORT_1(fn, pfx##193, sfx), \
|
||||||
|
PORT_1(fn, pfx##194, sfx), PORT_1(fn, pfx##195, sfx), \
|
||||||
#define _265(fn, pfx, sfx) \
|
PORT_1(fn, pfx##196, sfx), PORT_1(fn, pfx##197, sfx), \
|
||||||
_10(fn, pfx, sfx), _90(fn, pfx, sfx), \
|
PORT_1(fn, pfx##198, sfx), PORT_1(fn, pfx##199, sfx), \
|
||||||
_10(fn, pfx##10, sfx), \
|
PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \
|
||||||
_1(fn, pfx##110, sfx), _1(fn, pfx##111, sfx), \
|
PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \
|
||||||
_1(fn, pfx##112, sfx), _1(fn, pfx##113, sfx), \
|
PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \
|
||||||
_1(fn, pfx##114, sfx), _1(fn, pfx##115, sfx), \
|
PORT_1(fn, pfx##260, sfx), PORT_1(fn, pfx##261, sfx), \
|
||||||
_1(fn, pfx##116, sfx), _1(fn, pfx##117, sfx), \
|
PORT_1(fn, pfx##262, sfx), PORT_1(fn, pfx##263, sfx), \
|
||||||
_1(fn, pfx##118, sfx), \
|
PORT_1(fn, pfx##264, sfx)
|
||||||
_1(fn, pfx##128, sfx), _1(fn, pfx##129, sfx), \
|
|
||||||
_10(fn, pfx##13, sfx), _10(fn, pfx##14, sfx), \
|
|
||||||
_10(fn, pfx##15, sfx), \
|
|
||||||
_1(fn, pfx##160, sfx), _1(fn, pfx##161, sfx), \
|
|
||||||
_1(fn, pfx##162, sfx), _1(fn, pfx##163, sfx), \
|
|
||||||
_1(fn, pfx##164, sfx), \
|
|
||||||
_1(fn, pfx##192, sfx), _1(fn, pfx##193, sfx), \
|
|
||||||
_1(fn, pfx##194, sfx), _1(fn, pfx##195, sfx), \
|
|
||||||
_1(fn, pfx##196, sfx), _1(fn, pfx##197, sfx), \
|
|
||||||
_1(fn, pfx##198, sfx), _1(fn, pfx##199, sfx), \
|
|
||||||
_10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \
|
|
||||||
_10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \
|
|
||||||
_10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \
|
|
||||||
_1(fn, pfx##260, sfx), _1(fn, pfx##261, sfx), \
|
|
||||||
_1(fn, pfx##262, sfx), _1(fn, pfx##263, sfx), \
|
|
||||||
_1(fn, pfx##264, sfx)
|
|
||||||
|
|
||||||
#define _PORT(pfx, sfx) pfx##_##sfx
|
|
||||||
#define PORT_265(str) _265(_PORT, PORT, str)
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PINMUX_RESERVED = 0,
|
PINMUX_RESERVED = 0,
|
||||||
|
|
||||||
PINMUX_DATA_BEGIN,
|
PINMUX_DATA_BEGIN,
|
||||||
PORT_265(DATA), /* PORT0_DATA -> PORT264_DATA */
|
PORT_ALL(DATA), /* PORT0_DATA -> PORT264_DATA */
|
||||||
PINMUX_DATA_END,
|
PINMUX_DATA_END,
|
||||||
|
|
||||||
PINMUX_INPUT_BEGIN,
|
PINMUX_INPUT_BEGIN,
|
||||||
PORT_265(IN), /* PORT0_IN -> PORT264_IN */
|
PORT_ALL(IN), /* PORT0_IN -> PORT264_IN */
|
||||||
PINMUX_INPUT_END,
|
PINMUX_INPUT_END,
|
||||||
|
|
||||||
PINMUX_INPUT_PULLUP_BEGIN,
|
PINMUX_INPUT_PULLUP_BEGIN,
|
||||||
PORT_265(IN_PU), /* PORT0_IN_PU -> PORT264_IN_PU */
|
PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT264_IN_PU */
|
||||||
PINMUX_INPUT_PULLUP_END,
|
PINMUX_INPUT_PULLUP_END,
|
||||||
|
|
||||||
PINMUX_INPUT_PULLDOWN_BEGIN,
|
PINMUX_INPUT_PULLDOWN_BEGIN,
|
||||||
PORT_265(IN_PD), /* PORT0_IN_PD -> PORT264_IN_PD */
|
PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT264_IN_PD */
|
||||||
PINMUX_INPUT_PULLDOWN_END,
|
PINMUX_INPUT_PULLDOWN_END,
|
||||||
|
|
||||||
PINMUX_OUTPUT_BEGIN,
|
PINMUX_OUTPUT_BEGIN,
|
||||||
PORT_265(OUT), /* PORT0_OUT -> PORT264_OUT */
|
PORT_ALL(OUT), /* PORT0_OUT -> PORT264_OUT */
|
||||||
PINMUX_OUTPUT_END,
|
PINMUX_OUTPUT_END,
|
||||||
|
|
||||||
PINMUX_FUNCTION_BEGIN,
|
PINMUX_FUNCTION_BEGIN,
|
||||||
PORT_265(FN_IN), /* PORT0_FN_IN -> PORT264_FN_IN */
|
PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT264_FN_IN */
|
||||||
PORT_265(FN_OUT), /* PORT0_FN_OUT -> PORT264_FN_OUT */
|
PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT264_FN_OUT */
|
||||||
PORT_265(FN0), /* PORT0_FN0 -> PORT264_FN0 */
|
PORT_ALL(FN0), /* PORT0_FN0 -> PORT264_FN0 */
|
||||||
PORT_265(FN1), /* PORT0_FN1 -> PORT264_FN1 */
|
PORT_ALL(FN1), /* PORT0_FN1 -> PORT264_FN1 */
|
||||||
PORT_265(FN2), /* PORT0_FN2 -> PORT264_FN2 */
|
PORT_ALL(FN2), /* PORT0_FN2 -> PORT264_FN2 */
|
||||||
PORT_265(FN3), /* PORT0_FN3 -> PORT264_FN3 */
|
PORT_ALL(FN3), /* PORT0_FN3 -> PORT264_FN3 */
|
||||||
PORT_265(FN4), /* PORT0_FN4 -> PORT264_FN4 */
|
PORT_ALL(FN4), /* PORT0_FN4 -> PORT264_FN4 */
|
||||||
PORT_265(FN5), /* PORT0_FN5 -> PORT264_FN5 */
|
PORT_ALL(FN5), /* PORT0_FN5 -> PORT264_FN5 */
|
||||||
PORT_265(FN6), /* PORT0_FN6 -> PORT264_FN6 */
|
PORT_ALL(FN6), /* PORT0_FN6 -> PORT264_FN6 */
|
||||||
PORT_265(FN7), /* PORT0_FN7 -> PORT264_FN7 */
|
PORT_ALL(FN7), /* PORT0_FN7 -> PORT264_FN7 */
|
||||||
|
|
||||||
MSELBCR_MSEL17_1, MSELBCR_MSEL17_0,
|
MSELBCR_MSEL17_1, MSELBCR_MSEL17_0,
|
||||||
MSELBCR_MSEL16_1, MSELBCR_MSEL16_0,
|
MSELBCR_MSEL16_1, MSELBCR_MSEL16_0,
|
||||||
@ -360,45 +341,6 @@ enum {
|
|||||||
PINMUX_MARK_END,
|
PINMUX_MARK_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PORT_DATA_I(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PU(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PU_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD, \
|
|
||||||
PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_O(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN, \
|
|
||||||
PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PU(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN, \
|
|
||||||
PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PU_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN, \
|
|
||||||
PORT##nr##_IN_PD, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
static pinmux_enum_t pinmux_data[] = {
|
static pinmux_enum_t pinmux_data[] = {
|
||||||
/* specify valid pin states for each pin in GPIO mode */
|
/* specify valid pin states for each pin in GPIO mode */
|
||||||
/* 55-1 (GPIO) */
|
/* 55-1 (GPIO) */
|
||||||
@ -1078,13 +1020,9 @@ static pinmux_enum_t pinmux_data[] = {
|
|||||||
PINMUX_DATA(RESETOUTS_MARK, PORT264_FN1),
|
PINMUX_DATA(RESETOUTS_MARK, PORT264_FN1),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA)
|
|
||||||
#define GPIO_PORT_265() _265(_GPIO_PORT, , unused)
|
|
||||||
#define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK)
|
|
||||||
|
|
||||||
static struct pinmux_gpio pinmux_gpios[] = {
|
static struct pinmux_gpio pinmux_gpios[] = {
|
||||||
/* 55-1 -> 55-5 (GPIO) */
|
/* 55-1 -> 55-5 (GPIO) */
|
||||||
GPIO_PORT_265(),
|
GPIO_PORT_ALL(),
|
||||||
|
|
||||||
/* Special Pull-up / Pull-down Functions */
|
/* Special Pull-up / Pull-down Functions */
|
||||||
GPIO_FN(PORT66_KEYIN0_PU), GPIO_FN(PORT67_KEYIN1_PU),
|
GPIO_FN(PORT66_KEYIN0_PU), GPIO_FN(PORT67_KEYIN1_PU),
|
||||||
@ -1362,23 +1300,6 @@ static struct pinmux_gpio pinmux_gpios[] = {
|
|||||||
GPIO_FN(RESETOUTS),
|
GPIO_FN(RESETOUTS),
|
||||||
};
|
};
|
||||||
|
|
||||||
/* helper for top 4 bits in PORTnCR */
|
|
||||||
#define PCRH(in, in_pd, in_pu, out) \
|
|
||||||
0, (out), (in), 0, \
|
|
||||||
0, 0, 0, 0, \
|
|
||||||
0, 0, (in_pd), 0, \
|
|
||||||
0, 0, (in_pu), 0
|
|
||||||
|
|
||||||
#define PORTCR(nr, reg) \
|
|
||||||
{ PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \
|
|
||||||
PCRH(PORT##nr##_IN, PORT##nr##_IN_PD, \
|
|
||||||
PORT##nr##_IN_PU, PORT##nr##_OUT), \
|
|
||||||
PORT##nr##_FN0, PORT##nr##_FN1, \
|
|
||||||
PORT##nr##_FN2, PORT##nr##_FN3, \
|
|
||||||
PORT##nr##_FN4, PORT##nr##_FN5, \
|
|
||||||
PORT##nr##_FN6, PORT##nr##_FN7 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||||
PORTCR(0, 0xe6050000), /* PORT0CR */
|
PORTCR(0, 0xe6050000), /* PORT0CR */
|
||||||
PORTCR(1, 0xe6050001), /* PORT1CR */
|
PORTCR(1, 0xe6050001), /* PORT1CR */
|
||||||
|
@ -24,83 +24,71 @@
|
|||||||
#include <mach/sh73a0.h>
|
#include <mach/sh73a0.h>
|
||||||
#include <mach/irqs.h>
|
#include <mach/irqs.h>
|
||||||
|
|
||||||
#define _1(fn, pfx, sfx) fn(pfx, sfx)
|
#define CPU_ALL_PORT(fn, pfx, sfx) \
|
||||||
|
PORT_10(fn, pfx, sfx), PORT_10(fn, pfx##1, sfx), \
|
||||||
#define _10(fn, pfx, sfx) \
|
PORT_10(fn, pfx##2, sfx), PORT_10(fn, pfx##3, sfx), \
|
||||||
_1(fn, pfx##0, sfx), _1(fn, pfx##1, sfx), \
|
PORT_10(fn, pfx##4, sfx), PORT_10(fn, pfx##5, sfx), \
|
||||||
_1(fn, pfx##2, sfx), _1(fn, pfx##3, sfx), \
|
PORT_10(fn, pfx##6, sfx), PORT_10(fn, pfx##7, sfx), \
|
||||||
_1(fn, pfx##4, sfx), _1(fn, pfx##5, sfx), \
|
PORT_10(fn, pfx##8, sfx), PORT_10(fn, pfx##9, sfx), \
|
||||||
_1(fn, pfx##6, sfx), _1(fn, pfx##7, sfx), \
|
PORT_10(fn, pfx##10, sfx), \
|
||||||
_1(fn, pfx##8, sfx), _1(fn, pfx##9, sfx)
|
PORT_1(fn, pfx##110, sfx), PORT_1(fn, pfx##111, sfx), \
|
||||||
|
PORT_1(fn, pfx##112, sfx), PORT_1(fn, pfx##113, sfx), \
|
||||||
#define _310(fn, pfx, sfx) \
|
PORT_1(fn, pfx##114, sfx), PORT_1(fn, pfx##115, sfx), \
|
||||||
_10(fn, pfx, sfx), _10(fn, pfx##1, sfx), \
|
PORT_1(fn, pfx##116, sfx), PORT_1(fn, pfx##117, sfx), \
|
||||||
_10(fn, pfx##2, sfx), _10(fn, pfx##3, sfx), \
|
PORT_1(fn, pfx##118, sfx), \
|
||||||
_10(fn, pfx##4, sfx), _10(fn, pfx##5, sfx), \
|
PORT_1(fn, pfx##128, sfx), PORT_1(fn, pfx##129, sfx), \
|
||||||
_10(fn, pfx##6, sfx), _10(fn, pfx##7, sfx), \
|
PORT_10(fn, pfx##13, sfx), PORT_10(fn, pfx##14, sfx), \
|
||||||
_10(fn, pfx##8, sfx), _10(fn, pfx##9, sfx), \
|
PORT_10(fn, pfx##15, sfx), \
|
||||||
_10(fn, pfx##10, sfx), \
|
PORT_1(fn, pfx##160, sfx), PORT_1(fn, pfx##161, sfx), \
|
||||||
_1(fn, pfx##110, sfx), _1(fn, pfx##111, sfx), \
|
PORT_1(fn, pfx##162, sfx), PORT_1(fn, pfx##163, sfx), \
|
||||||
_1(fn, pfx##112, sfx), _1(fn, pfx##113, sfx), \
|
PORT_1(fn, pfx##164, sfx), \
|
||||||
_1(fn, pfx##114, sfx), _1(fn, pfx##115, sfx), \
|
PORT_1(fn, pfx##192, sfx), PORT_1(fn, pfx##193, sfx), \
|
||||||
_1(fn, pfx##116, sfx), _1(fn, pfx##117, sfx), \
|
PORT_1(fn, pfx##194, sfx), PORT_1(fn, pfx##195, sfx), \
|
||||||
_1(fn, pfx##118, sfx), \
|
PORT_1(fn, pfx##196, sfx), PORT_1(fn, pfx##197, sfx), \
|
||||||
_1(fn, pfx##128, sfx), _1(fn, pfx##129, sfx), \
|
PORT_1(fn, pfx##198, sfx), PORT_1(fn, pfx##199, sfx), \
|
||||||
_10(fn, pfx##13, sfx), _10(fn, pfx##14, sfx), \
|
PORT_10(fn, pfx##20, sfx), PORT_10(fn, pfx##21, sfx), \
|
||||||
_10(fn, pfx##15, sfx), \
|
PORT_10(fn, pfx##22, sfx), PORT_10(fn, pfx##23, sfx), \
|
||||||
_1(fn, pfx##160, sfx), _1(fn, pfx##161, sfx), \
|
PORT_10(fn, pfx##24, sfx), PORT_10(fn, pfx##25, sfx), \
|
||||||
_1(fn, pfx##162, sfx), _1(fn, pfx##163, sfx), \
|
PORT_10(fn, pfx##26, sfx), PORT_10(fn, pfx##27, sfx), \
|
||||||
_1(fn, pfx##164, sfx), \
|
PORT_1(fn, pfx##280, sfx), PORT_1(fn, pfx##281, sfx), \
|
||||||
_1(fn, pfx##192, sfx), _1(fn, pfx##193, sfx), \
|
PORT_1(fn, pfx##282, sfx), \
|
||||||
_1(fn, pfx##194, sfx), _1(fn, pfx##195, sfx), \
|
PORT_1(fn, pfx##288, sfx), PORT_1(fn, pfx##289, sfx), \
|
||||||
_1(fn, pfx##196, sfx), _1(fn, pfx##197, sfx), \
|
PORT_10(fn, pfx##29, sfx), PORT_10(fn, pfx##30, sfx)
|
||||||
_1(fn, pfx##198, sfx), _1(fn, pfx##199, sfx), \
|
|
||||||
_10(fn, pfx##20, sfx), _10(fn, pfx##21, sfx), \
|
|
||||||
_10(fn, pfx##22, sfx), _10(fn, pfx##23, sfx), \
|
|
||||||
_10(fn, pfx##24, sfx), _10(fn, pfx##25, sfx), \
|
|
||||||
_10(fn, pfx##26, sfx), _10(fn, pfx##27, sfx), \
|
|
||||||
_1(fn, pfx##280, sfx), _1(fn, pfx##281, sfx), \
|
|
||||||
_1(fn, pfx##282, sfx), \
|
|
||||||
_1(fn, pfx##288, sfx), _1(fn, pfx##289, sfx), \
|
|
||||||
_10(fn, pfx##29, sfx), _10(fn, pfx##30, sfx)
|
|
||||||
|
|
||||||
#define _PORT(pfx, sfx) pfx##_##sfx
|
|
||||||
#define PORT_310(str) _310(_PORT, PORT, str)
|
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
PINMUX_RESERVED = 0,
|
PINMUX_RESERVED = 0,
|
||||||
|
|
||||||
PINMUX_DATA_BEGIN,
|
PINMUX_DATA_BEGIN,
|
||||||
PORT_310(DATA), /* PORT0_DATA -> PORT309_DATA */
|
PORT_ALL(DATA), /* PORT0_DATA -> PORT309_DATA */
|
||||||
PINMUX_DATA_END,
|
PINMUX_DATA_END,
|
||||||
|
|
||||||
PINMUX_INPUT_BEGIN,
|
PINMUX_INPUT_BEGIN,
|
||||||
PORT_310(IN), /* PORT0_IN -> PORT309_IN */
|
PORT_ALL(IN), /* PORT0_IN -> PORT309_IN */
|
||||||
PINMUX_INPUT_END,
|
PINMUX_INPUT_END,
|
||||||
|
|
||||||
PINMUX_INPUT_PULLUP_BEGIN,
|
PINMUX_INPUT_PULLUP_BEGIN,
|
||||||
PORT_310(IN_PU), /* PORT0_IN_PU -> PORT309_IN_PU */
|
PORT_ALL(IN_PU), /* PORT0_IN_PU -> PORT309_IN_PU */
|
||||||
PINMUX_INPUT_PULLUP_END,
|
PINMUX_INPUT_PULLUP_END,
|
||||||
|
|
||||||
PINMUX_INPUT_PULLDOWN_BEGIN,
|
PINMUX_INPUT_PULLDOWN_BEGIN,
|
||||||
PORT_310(IN_PD), /* PORT0_IN_PD -> PORT309_IN_PD */
|
PORT_ALL(IN_PD), /* PORT0_IN_PD -> PORT309_IN_PD */
|
||||||
PINMUX_INPUT_PULLDOWN_END,
|
PINMUX_INPUT_PULLDOWN_END,
|
||||||
|
|
||||||
PINMUX_OUTPUT_BEGIN,
|
PINMUX_OUTPUT_BEGIN,
|
||||||
PORT_310(OUT), /* PORT0_OUT -> PORT309_OUT */
|
PORT_ALL(OUT), /* PORT0_OUT -> PORT309_OUT */
|
||||||
PINMUX_OUTPUT_END,
|
PINMUX_OUTPUT_END,
|
||||||
|
|
||||||
PINMUX_FUNCTION_BEGIN,
|
PINMUX_FUNCTION_BEGIN,
|
||||||
PORT_310(FN_IN), /* PORT0_FN_IN -> PORT309_FN_IN */
|
PORT_ALL(FN_IN), /* PORT0_FN_IN -> PORT309_FN_IN */
|
||||||
PORT_310(FN_OUT), /* PORT0_FN_OUT -> PORT309_FN_OUT */
|
PORT_ALL(FN_OUT), /* PORT0_FN_OUT -> PORT309_FN_OUT */
|
||||||
PORT_310(FN0), /* PORT0_FN0 -> PORT309_FN0 */
|
PORT_ALL(FN0), /* PORT0_FN0 -> PORT309_FN0 */
|
||||||
PORT_310(FN1), /* PORT0_FN1 -> PORT309_FN1 */
|
PORT_ALL(FN1), /* PORT0_FN1 -> PORT309_FN1 */
|
||||||
PORT_310(FN2), /* PORT0_FN2 -> PORT309_FN2 */
|
PORT_ALL(FN2), /* PORT0_FN2 -> PORT309_FN2 */
|
||||||
PORT_310(FN3), /* PORT0_FN3 -> PORT309_FN3 */
|
PORT_ALL(FN3), /* PORT0_FN3 -> PORT309_FN3 */
|
||||||
PORT_310(FN4), /* PORT0_FN4 -> PORT309_FN4 */
|
PORT_ALL(FN4), /* PORT0_FN4 -> PORT309_FN4 */
|
||||||
PORT_310(FN5), /* PORT0_FN5 -> PORT309_FN5 */
|
PORT_ALL(FN5), /* PORT0_FN5 -> PORT309_FN5 */
|
||||||
PORT_310(FN6), /* PORT0_FN6 -> PORT309_FN6 */
|
PORT_ALL(FN6), /* PORT0_FN6 -> PORT309_FN6 */
|
||||||
PORT_310(FN7), /* PORT0_FN7 -> PORT309_FN7 */
|
PORT_ALL(FN7), /* PORT0_FN7 -> PORT309_FN7 */
|
||||||
|
|
||||||
MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1,
|
MSEL2CR_MSEL19_0, MSEL2CR_MSEL19_1,
|
||||||
MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1,
|
MSEL2CR_MSEL18_0, MSEL2CR_MSEL18_1,
|
||||||
@ -508,6 +496,14 @@ enum {
|
|||||||
SDHICMD2_PU_MARK,
|
SDHICMD2_PU_MARK,
|
||||||
MMCCMD0_PU_MARK,
|
MMCCMD0_PU_MARK,
|
||||||
MMCCMD1_PU_MARK,
|
MMCCMD1_PU_MARK,
|
||||||
|
MMCD0_0_PU_MARK,
|
||||||
|
MMCD0_1_PU_MARK,
|
||||||
|
MMCD0_2_PU_MARK,
|
||||||
|
MMCD0_3_PU_MARK,
|
||||||
|
MMCD0_4_PU_MARK,
|
||||||
|
MMCD0_5_PU_MARK,
|
||||||
|
MMCD0_6_PU_MARK,
|
||||||
|
MMCD0_7_PU_MARK,
|
||||||
FSIBISLD_PU_MARK,
|
FSIBISLD_PU_MARK,
|
||||||
FSIACK_PU_MARK,
|
FSIACK_PU_MARK,
|
||||||
FSIAILR_PU_MARK,
|
FSIAILR_PU_MARK,
|
||||||
@ -517,45 +513,6 @@ enum {
|
|||||||
PINMUX_MARK_END,
|
PINMUX_MARK_END,
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PORT_DATA_I(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, PORT##nr##_IN)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PU(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_I_PU_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_IN, PORT##nr##_IN_PD, \
|
|
||||||
PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_O(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN, \
|
|
||||||
PORT##nr##_IN_PD)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PU(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN, \
|
|
||||||
PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
#define PORT_DATA_IO_PU_PD(nr) \
|
|
||||||
PINMUX_DATA(PORT##nr##_DATA, PORT##nr##_FN0, \
|
|
||||||
PORT##nr##_OUT, PORT##nr##_IN, \
|
|
||||||
PORT##nr##_IN_PD, PORT##nr##_IN_PU)
|
|
||||||
|
|
||||||
static pinmux_enum_t pinmux_data[] = {
|
static pinmux_enum_t pinmux_data[] = {
|
||||||
/* specify valid pin states for each pin in GPIO mode */
|
/* specify valid pin states for each pin in GPIO mode */
|
||||||
|
|
||||||
@ -1561,6 +1518,24 @@ static pinmux_enum_t pinmux_data[] = {
|
|||||||
MSEL4CR_MSEL15_0),
|
MSEL4CR_MSEL15_0),
|
||||||
PINMUX_DATA(MMCCMD1_PU_MARK, PORT297_FN2, PORT297_IN_PU,
|
PINMUX_DATA(MMCCMD1_PU_MARK, PORT297_FN2, PORT297_IN_PU,
|
||||||
MSEL4CR_MSEL15_1),
|
MSEL4CR_MSEL15_1),
|
||||||
|
|
||||||
|
PINMUX_DATA(MMCD0_0_PU_MARK,
|
||||||
|
PORT271_FN1, PORT271_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
PINMUX_DATA(MMCD0_1_PU_MARK,
|
||||||
|
PORT272_FN1, PORT272_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
PINMUX_DATA(MMCD0_2_PU_MARK,
|
||||||
|
PORT273_FN1, PORT273_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
PINMUX_DATA(MMCD0_3_PU_MARK,
|
||||||
|
PORT274_FN1, PORT274_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
PINMUX_DATA(MMCD0_4_PU_MARK,
|
||||||
|
PORT275_FN1, PORT275_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
PINMUX_DATA(MMCD0_5_PU_MARK,
|
||||||
|
PORT276_FN1, PORT276_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
PINMUX_DATA(MMCD0_6_PU_MARK,
|
||||||
|
PORT277_FN1, PORT277_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
PINMUX_DATA(MMCD0_7_PU_MARK,
|
||||||
|
PORT278_FN1, PORT278_IN_PU, MSEL4CR_MSEL15_0),
|
||||||
|
|
||||||
PINMUX_DATA(FSIBISLD_PU_MARK, PORT39_FN1, PORT39_IN_PU),
|
PINMUX_DATA(FSIBISLD_PU_MARK, PORT39_FN1, PORT39_IN_PU),
|
||||||
PINMUX_DATA(FSIACK_PU_MARK, PORT49_FN1, PORT49_IN_PU),
|
PINMUX_DATA(FSIACK_PU_MARK, PORT49_FN1, PORT49_IN_PU),
|
||||||
PINMUX_DATA(FSIAILR_PU_MARK, PORT50_FN5, PORT50_IN_PU),
|
PINMUX_DATA(FSIAILR_PU_MARK, PORT50_FN5, PORT50_IN_PU),
|
||||||
@ -1568,12 +1543,8 @@ static pinmux_enum_t pinmux_data[] = {
|
|||||||
PINMUX_DATA(FSIAISLD_PU_MARK, PORT55_FN1, PORT55_IN_PU),
|
PINMUX_DATA(FSIAISLD_PU_MARK, PORT55_FN1, PORT55_IN_PU),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define _GPIO_PORT(pfx, sfx) PINMUX_GPIO(GPIO_PORT##pfx, PORT##pfx##_DATA)
|
|
||||||
#define GPIO_PORT_310() _310(_GPIO_PORT, , unused)
|
|
||||||
#define GPIO_FN(str) PINMUX_GPIO(GPIO_FN_##str, str##_MARK)
|
|
||||||
|
|
||||||
static struct pinmux_gpio pinmux_gpios[] = {
|
static struct pinmux_gpio pinmux_gpios[] = {
|
||||||
GPIO_PORT_310(),
|
GPIO_PORT_ALL(),
|
||||||
|
|
||||||
/* Table 25-1 (Functions 0-7) */
|
/* Table 25-1 (Functions 0-7) */
|
||||||
GPIO_FN(VBUS_0),
|
GPIO_FN(VBUS_0),
|
||||||
@ -2236,24 +2207,20 @@ static struct pinmux_gpio pinmux_gpios[] = {
|
|||||||
GPIO_FN(SDHICMD2_PU),
|
GPIO_FN(SDHICMD2_PU),
|
||||||
GPIO_FN(MMCCMD0_PU),
|
GPIO_FN(MMCCMD0_PU),
|
||||||
GPIO_FN(MMCCMD1_PU),
|
GPIO_FN(MMCCMD1_PU),
|
||||||
|
GPIO_FN(MMCD0_0_PU),
|
||||||
|
GPIO_FN(MMCD0_1_PU),
|
||||||
|
GPIO_FN(MMCD0_2_PU),
|
||||||
|
GPIO_FN(MMCD0_3_PU),
|
||||||
|
GPIO_FN(MMCD0_4_PU),
|
||||||
|
GPIO_FN(MMCD0_5_PU),
|
||||||
|
GPIO_FN(MMCD0_6_PU),
|
||||||
|
GPIO_FN(MMCD0_7_PU),
|
||||||
GPIO_FN(FSIACK_PU),
|
GPIO_FN(FSIACK_PU),
|
||||||
GPIO_FN(FSIAILR_PU),
|
GPIO_FN(FSIAILR_PU),
|
||||||
GPIO_FN(FSIAIBT_PU),
|
GPIO_FN(FSIAIBT_PU),
|
||||||
GPIO_FN(FSIAISLD_PU),
|
GPIO_FN(FSIAISLD_PU),
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PORTCR(nr, reg) \
|
|
||||||
{ PINMUX_CFG_REG("PORT" nr "CR", reg, 8, 4) { \
|
|
||||||
0, \
|
|
||||||
/*0001*/ PORT##nr##_OUT , \
|
|
||||||
/*0010*/ PORT##nr##_IN , 0, 0, 0, 0, 0, 0, 0, \
|
|
||||||
/*1010*/ PORT##nr##_IN_PD, 0, 0, 0, \
|
|
||||||
/*1110*/ PORT##nr##_IN_PU, 0, \
|
|
||||||
PORT##nr##_FN0, PORT##nr##_FN1, PORT##nr##_FN2, \
|
|
||||||
PORT##nr##_FN3, PORT##nr##_FN4, PORT##nr##_FN5, \
|
|
||||||
PORT##nr##_FN6, PORT##nr##_FN7, 0, 0, 0, 0, 0, 0, 0, 0 } \
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
static struct pinmux_cfg_reg pinmux_config_regs[] = {
|
||||||
PORTCR(0, 0xe6050000), /* PORT0CR */
|
PORTCR(0, 0xe6050000), /* PORT0CR */
|
||||||
PORTCR(1, 0xe6050001), /* PORT1CR */
|
PORTCR(1, 0xe6050001), /* PORT1CR */
|
||||||
|
@ -20,6 +20,7 @@
|
|||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/irq.h>
|
||||||
#include <linux/bitrev.h>
|
#include <linux/bitrev.h>
|
||||||
|
#include <linux/console.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/io.h>
|
#include <asm/io.h>
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
@ -106,9 +107,8 @@ static int pd_power_down(struct generic_pm_domain *genpd)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int pd_power_up(struct generic_pm_domain *genpd)
|
static int __pd_power_up(struct sh7372_pm_domain *sh7372_pd, bool do_resume)
|
||||||
{
|
{
|
||||||
struct sh7372_pm_domain *sh7372_pd = to_sh7372_pd(genpd);
|
|
||||||
unsigned int mask = 1 << sh7372_pd->bit_shift;
|
unsigned int mask = 1 << sh7372_pd->bit_shift;
|
||||||
unsigned int retry_count;
|
unsigned int retry_count;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
@ -123,13 +123,13 @@ static int pd_power_up(struct generic_pm_domain *genpd)
|
|||||||
|
|
||||||
for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
|
for (retry_count = 2 * PSTR_RETRIES; retry_count; retry_count--) {
|
||||||
if (!(__raw_readl(SWUCR) & mask))
|
if (!(__raw_readl(SWUCR) & mask))
|
||||||
goto out;
|
break;
|
||||||
if (retry_count > PSTR_RETRIES)
|
if (retry_count > PSTR_RETRIES)
|
||||||
udelay(PSTR_DELAY_US);
|
udelay(PSTR_DELAY_US);
|
||||||
else
|
else
|
||||||
cpu_relax();
|
cpu_relax();
|
||||||
}
|
}
|
||||||
if (__raw_readl(SWUCR) & mask)
|
if (!retry_count)
|
||||||
ret = -EIO;
|
ret = -EIO;
|
||||||
|
|
||||||
if (!sh7372_pd->no_debug)
|
if (!sh7372_pd->no_debug)
|
||||||
@ -137,12 +137,17 @@ static int pd_power_up(struct generic_pm_domain *genpd)
|
|||||||
mask, __raw_readl(PSTR));
|
mask, __raw_readl(PSTR));
|
||||||
|
|
||||||
out:
|
out:
|
||||||
if (ret == 0 && sh7372_pd->resume)
|
if (ret == 0 && sh7372_pd->resume && do_resume)
|
||||||
sh7372_pd->resume();
|
sh7372_pd->resume();
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int pd_power_up(struct generic_pm_domain *genpd)
|
||||||
|
{
|
||||||
|
return __pd_power_up(to_sh7372_pd(genpd), true);
|
||||||
|
}
|
||||||
|
|
||||||
static void sh7372_a4r_suspend(void)
|
static void sh7372_a4r_suspend(void)
|
||||||
{
|
{
|
||||||
sh7372_intcs_suspend();
|
sh7372_intcs_suspend();
|
||||||
@ -174,7 +179,7 @@ void sh7372_init_pm_domain(struct sh7372_pm_domain *sh7372_pd)
|
|||||||
genpd->active_wakeup = pd_active_wakeup;
|
genpd->active_wakeup = pd_active_wakeup;
|
||||||
genpd->power_off = pd_power_down;
|
genpd->power_off = pd_power_down;
|
||||||
genpd->power_on = pd_power_up;
|
genpd->power_on = pd_power_up;
|
||||||
genpd->power_on(&sh7372_pd->genpd);
|
__pd_power_up(sh7372_pd, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sh7372_add_device_to_domain(struct sh7372_pm_domain *sh7372_pd,
|
void sh7372_add_device_to_domain(struct sh7372_pm_domain *sh7372_pd,
|
||||||
@ -227,11 +232,23 @@ struct sh7372_pm_domain sh7372_a3sp = {
|
|||||||
.no_debug = true,
|
.no_debug = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void sh7372_a3sp_init(void)
|
||||||
|
{
|
||||||
|
/* serial consoles make use of SCIF hardware located in A3SP,
|
||||||
|
* keep such power domain on if "no_console_suspend" is set.
|
||||||
|
*/
|
||||||
|
sh7372_a3sp.stay_on = !console_suspend_enabled;
|
||||||
|
}
|
||||||
|
|
||||||
struct sh7372_pm_domain sh7372_a3sg = {
|
struct sh7372_pm_domain sh7372_a3sg = {
|
||||||
.bit_shift = 13,
|
.bit_shift = 13,
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* CONFIG_PM */
|
#else /* !CONFIG_PM */
|
||||||
|
|
||||||
|
static inline void sh7372_a3sp_init(void) {}
|
||||||
|
|
||||||
|
#endif /* !CONFIG_PM */
|
||||||
|
|
||||||
#if defined(CONFIG_SUSPEND) || defined(CONFIG_CPU_IDLE)
|
#if defined(CONFIG_SUSPEND) || defined(CONFIG_CPU_IDLE)
|
||||||
static int sh7372_do_idle_core_standby(unsigned long unused)
|
static int sh7372_do_idle_core_standby(unsigned long unused)
|
||||||
@ -402,22 +419,18 @@ static void sh7372_setup_a3sm(unsigned long msk, unsigned long msk2)
|
|||||||
|
|
||||||
#ifdef CONFIG_CPU_IDLE
|
#ifdef CONFIG_CPU_IDLE
|
||||||
|
|
||||||
static void sh7372_cpuidle_setup(struct cpuidle_device *dev)
|
static void sh7372_cpuidle_setup(struct cpuidle_driver *drv)
|
||||||
{
|
{
|
||||||
struct cpuidle_state *state;
|
struct cpuidle_state *state = &drv->states[drv->state_count];
|
||||||
int i = dev->state_count;
|
|
||||||
|
|
||||||
state = &dev->states[i];
|
|
||||||
snprintf(state->name, CPUIDLE_NAME_LEN, "C2");
|
snprintf(state->name, CPUIDLE_NAME_LEN, "C2");
|
||||||
strncpy(state->desc, "Core Standby Mode", CPUIDLE_DESC_LEN);
|
strncpy(state->desc, "Core Standby Mode", CPUIDLE_DESC_LEN);
|
||||||
state->exit_latency = 10;
|
state->exit_latency = 10;
|
||||||
state->target_residency = 20 + 10;
|
state->target_residency = 20 + 10;
|
||||||
state->power_usage = 1; /* perhaps not */
|
state->flags = CPUIDLE_FLAG_TIME_VALID;
|
||||||
state->flags = 0;
|
shmobile_cpuidle_modes[drv->state_count] = sh7372_enter_core_standby;
|
||||||
state->flags |= CPUIDLE_FLAG_TIME_VALID;
|
|
||||||
shmobile_cpuidle_modes[i] = sh7372_enter_core_standby;
|
|
||||||
|
|
||||||
dev->state_count = i + 1;
|
drv->state_count++;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void sh7372_cpuidle_init(void)
|
static void sh7372_cpuidle_init(void)
|
||||||
@ -469,6 +482,8 @@ void __init sh7372_pm_init(void)
|
|||||||
/* do not convert A3SM, A3SP, A3SG, A4R power down into A4S */
|
/* do not convert A3SM, A3SP, A3SG, A4R power down into A4S */
|
||||||
__raw_writel(0, PDNSEL);
|
__raw_writel(0, PDNSEL);
|
||||||
|
|
||||||
|
sh7372_a3sp_init();
|
||||||
|
|
||||||
sh7372_suspend_init();
|
sh7372_suspend_init();
|
||||||
sh7372_cpuidle_init();
|
sh7372_cpuidle_init();
|
||||||
}
|
}
|
||||||
|
@ -101,6 +101,13 @@ static void __init tegra_dt_init(void)
|
|||||||
|
|
||||||
tegra_clk_init_from_table(tegra_dt_clk_init_table);
|
tegra_clk_init_from_table(tegra_dt_clk_init_table);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Finished with the static registrations now; fill in the missing
|
||||||
|
* devices
|
||||||
|
*/
|
||||||
|
of_platform_populate(NULL, tegra_dt_match_table,
|
||||||
|
tegra20_auxdata_lookup, NULL);
|
||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) {
|
for (i = 0; i < ARRAY_SIZE(pinmux_configs); i++) {
|
||||||
if (of_machine_is_compatible(pinmux_configs[i].machine)) {
|
if (of_machine_is_compatible(pinmux_configs[i].machine)) {
|
||||||
pinmux_configs[i].init();
|
pinmux_configs[i].init();
|
||||||
@ -110,12 +117,6 @@ static void __init tegra_dt_init(void)
|
|||||||
|
|
||||||
WARN(i == ARRAY_SIZE(pinmux_configs),
|
WARN(i == ARRAY_SIZE(pinmux_configs),
|
||||||
"Unknown platform! Pinmuxing not initialized\n");
|
"Unknown platform! Pinmuxing not initialized\n");
|
||||||
|
|
||||||
/*
|
|
||||||
* Finished with the static registrations now; fill in the missing
|
|
||||||
* devices
|
|
||||||
*/
|
|
||||||
of_platform_populate(NULL, tegra_dt_match_table, tegra20_auxdata_lookup, NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static const char * tegra_dt_board_compat[] = {
|
static const char * tegra_dt_board_compat[] = {
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
|
|
||||||
#include "gpio-names.h"
|
#include "gpio-names.h"
|
||||||
@ -161,7 +163,9 @@ static struct tegra_gpio_table gpio_table[] = {
|
|||||||
|
|
||||||
void harmony_pinmux_init(void)
|
void harmony_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
|
|
||||||
tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux));
|
tegra_pinmux_config_table(harmony_pinmux, ARRAY_SIZE(harmony_pinmux));
|
||||||
|
|
||||||
|
@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
|
|
||||||
#include "gpio-names.h"
|
#include "gpio-names.h"
|
||||||
@ -158,7 +160,9 @@ static struct tegra_gpio_table gpio_table[] = {
|
|||||||
|
|
||||||
void paz00_pinmux_init(void)
|
void paz00_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
|
|
||||||
tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux));
|
tegra_pinmux_config_table(paz00_pinmux, ARRAY_SIZE(paz00_pinmux));
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
#include <mach/pinmux-t2.h>
|
#include <mach/pinmux-t2.h>
|
||||||
@ -191,6 +192,7 @@ static struct tegra_gpio_table common_gpio_table[] = {
|
|||||||
{ .gpio = TEGRA_GPIO_SD2_POWER, .enable = true },
|
{ .gpio = TEGRA_GPIO_SD2_POWER, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true },
|
{ .gpio = TEGRA_GPIO_LIDSWITCH, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_POWERKEY, .enable = true },
|
{ .gpio = TEGRA_GPIO_POWERKEY, .enable = true },
|
||||||
|
{ .gpio = TEGRA_GPIO_HP_DET, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true },
|
{ .gpio = TEGRA_GPIO_ISL29018_IRQ, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true },
|
{ .gpio = TEGRA_GPIO_CDC_IRQ, .enable = true },
|
||||||
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
|
{ .gpio = TEGRA_GPIO_USB1, .enable = true },
|
||||||
@ -218,7 +220,9 @@ static void __init update_pinmux(struct tegra_pingroup_config *newtbl, int size)
|
|||||||
|
|
||||||
void __init seaboard_common_pinmux_init(void)
|
void __init seaboard_common_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
|
|
||||||
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
|
tegra_pinmux_config_table(seaboard_pinmux, ARRAY_SIZE(seaboard_pinmux));
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include <linux/gpio.h>
|
#include <linux/gpio.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
#include <linux/of.h>
|
||||||
|
|
||||||
#include <mach/pinmux.h>
|
#include <mach/pinmux.h>
|
||||||
|
|
||||||
@ -157,7 +158,9 @@ static struct tegra_gpio_table gpio_table[] = {
|
|||||||
|
|
||||||
void __init trimslice_pinmux_init(void)
|
void __init trimslice_pinmux_init(void)
|
||||||
{
|
{
|
||||||
platform_add_devices(pinmux_devices, ARRAY_SIZE(pinmux_devices));
|
if (!of_machine_is_compatible("nvidia,tegra20"))
|
||||||
|
platform_add_devices(pinmux_devices,
|
||||||
|
ARRAY_SIZE(pinmux_devices));
|
||||||
tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux));
|
tegra_pinmux_config_table(trimslice_pinmux, ARRAY_SIZE(trimslice_pinmux));
|
||||||
tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table));
|
tegra_gpio_config(gpio_table, ARRAY_SIZE(gpio_table));
|
||||||
}
|
}
|
||||||
|
@ -422,7 +422,7 @@ struct platform_device nuc900_device_kpi = {
|
|||||||
|
|
||||||
/* LCD controller*/
|
/* LCD controller*/
|
||||||
|
|
||||||
static struct nuc900fb_display __initdata nuc900_lcd_info[] = {
|
static struct nuc900fb_display nuc900_lcd_info[] = {
|
||||||
/* Giantplus Technology GPM1040A0 320x240 Color TFT LCD */
|
/* Giantplus Technology GPM1040A0 320x240 Color TFT LCD */
|
||||||
[0] = {
|
[0] = {
|
||||||
.type = LCM_DCCS_VA_SRC_RGB565,
|
.type = LCM_DCCS_VA_SRC_RGB565,
|
||||||
@ -445,7 +445,7 @@ static struct nuc900fb_display __initdata nuc900_lcd_info[] = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct nuc900fb_mach_info nuc900_fb_info __initdata = {
|
static struct nuc900fb_mach_info nuc900_fb_info = {
|
||||||
#if defined(CONFIG_GPM1040A0_320X240)
|
#if defined(CONFIG_GPM1040A0_320X240)
|
||||||
.displays = &nuc900_lcd_info[0],
|
.displays = &nuc900_lcd_info[0],
|
||||||
#else
|
#else
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
extern void mfp_set_groupf(struct device *dev);
|
extern void mfp_set_groupf(struct device *dev);
|
||||||
extern void mfp_set_groupc(struct device *dev);
|
extern void mfp_set_groupc(struct device *dev);
|
||||||
extern void mfp_set_groupi(struct device *dev);
|
extern void mfp_set_groupi(struct device *dev);
|
||||||
extern void mfp_set_groupg(struct device *dev);
|
extern void mfp_set_groupg(struct device *dev, const char *subname);
|
||||||
|
extern void mfp_set_groupd(struct device *dev, const char *subname);
|
||||||
|
|
||||||
#endif /* __ASM_ARCH_MFP_H */
|
#endif /* __ASM_ARCH_MFP_H */
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
#ifndef __ASM_ARCH_SPI_H
|
#ifndef __ASM_ARCH_SPI_H
|
||||||
#define __ASM_ARCH_SPI_H
|
#define __ASM_ARCH_SPI_H
|
||||||
|
|
||||||
extern void mfp_set_groupg(struct device *dev);
|
extern void mfp_set_groupg(struct device *dev, const char *subname);
|
||||||
|
|
||||||
struct nuc900_spi_info {
|
struct nuc900_spi_info {
|
||||||
unsigned int num_cs;
|
unsigned int num_cs;
|
||||||
|
@ -26,10 +26,8 @@
|
|||||||
#define REG_MFSEL (W90X900_VA_GCR + 0xC)
|
#define REG_MFSEL (W90X900_VA_GCR + 0xC)
|
||||||
|
|
||||||
#define GPSELF (0x01 << 1)
|
#define GPSELF (0x01 << 1)
|
||||||
|
|
||||||
#define GPSELC (0x03 << 2)
|
#define GPSELC (0x03 << 2)
|
||||||
#define ENKPI (0x02 << 2)
|
#define GPSELD (0x0f << 4)
|
||||||
#define ENNAND (0x01 << 2)
|
|
||||||
|
|
||||||
#define GPSELEI0 (0x01 << 26)
|
#define GPSELEI0 (0x01 << 26)
|
||||||
#define GPSELEI1 (0x01 << 27)
|
#define GPSELEI1 (0x01 << 27)
|
||||||
@ -37,11 +35,16 @@
|
|||||||
#define GPIOG0TO1 (0x03 << 14)
|
#define GPIOG0TO1 (0x03 << 14)
|
||||||
#define GPIOG2TO3 (0x03 << 16)
|
#define GPIOG2TO3 (0x03 << 16)
|
||||||
#define GPIOG22TO23 (0x03 << 22)
|
#define GPIOG22TO23 (0x03 << 22)
|
||||||
|
#define GPIOG18TO20 (0x07 << 18)
|
||||||
|
|
||||||
#define ENSPI (0x0a << 14)
|
#define ENSPI (0x0a << 14)
|
||||||
#define ENI2C0 (0x01 << 14)
|
#define ENI2C0 (0x01 << 14)
|
||||||
#define ENI2C1 (0x01 << 16)
|
#define ENI2C1 (0x01 << 16)
|
||||||
#define ENAC97 (0x02 << 22)
|
#define ENAC97 (0x02 << 22)
|
||||||
|
#define ENSD1 (0x02 << 18)
|
||||||
|
#define ENSD0 (0x0a << 4)
|
||||||
|
#define ENKPI (0x02 << 2)
|
||||||
|
#define ENNAND (0x01 << 2)
|
||||||
|
|
||||||
static DEFINE_MUTEX(mfp_mutex);
|
static DEFINE_MUTEX(mfp_mutex);
|
||||||
|
|
||||||
@ -127,16 +130,19 @@ void mfp_set_groupi(struct device *dev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mfp_set_groupi);
|
EXPORT_SYMBOL(mfp_set_groupi);
|
||||||
|
|
||||||
void mfp_set_groupg(struct device *dev)
|
void mfp_set_groupg(struct device *dev, const char *subname)
|
||||||
{
|
{
|
||||||
unsigned long mfpen;
|
unsigned long mfpen;
|
||||||
const char *dev_id;
|
const char *dev_id;
|
||||||
|
|
||||||
BUG_ON(!dev);
|
BUG_ON((!dev) && (!subname));
|
||||||
|
|
||||||
mutex_lock(&mfp_mutex);
|
mutex_lock(&mfp_mutex);
|
||||||
|
|
||||||
dev_id = dev_name(dev);
|
if (subname != NULL)
|
||||||
|
dev_id = subname;
|
||||||
|
else
|
||||||
|
dev_id = dev_name(dev);
|
||||||
|
|
||||||
mfpen = __raw_readl(REG_MFSEL);
|
mfpen = __raw_readl(REG_MFSEL);
|
||||||
|
|
||||||
@ -152,6 +158,9 @@ void mfp_set_groupg(struct device *dev)
|
|||||||
} else if (strcmp(dev_id, "nuc900-audio") == 0) {
|
} else if (strcmp(dev_id, "nuc900-audio") == 0) {
|
||||||
mfpen &= ~(GPIOG22TO23);
|
mfpen &= ~(GPIOG22TO23);
|
||||||
mfpen |= ENAC97;/*enable AC97*/
|
mfpen |= ENAC97;/*enable AC97*/
|
||||||
|
} else if (strcmp(dev_id, "nuc900-mmc-port1") == 0) {
|
||||||
|
mfpen &= ~(GPIOG18TO20);
|
||||||
|
mfpen |= (ENSD1 | 0x01);/*enable sd1*/
|
||||||
} else {
|
} else {
|
||||||
mfpen &= ~(GPIOG0TO1 | GPIOG2TO3);/*GPIOG[3:0]*/
|
mfpen &= ~(GPIOG0TO1 | GPIOG2TO3);/*GPIOG[3:0]*/
|
||||||
}
|
}
|
||||||
@ -162,3 +171,30 @@ void mfp_set_groupg(struct device *dev)
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL(mfp_set_groupg);
|
EXPORT_SYMBOL(mfp_set_groupg);
|
||||||
|
|
||||||
|
void mfp_set_groupd(struct device *dev, const char *subname)
|
||||||
|
{
|
||||||
|
unsigned long mfpen;
|
||||||
|
const char *dev_id;
|
||||||
|
|
||||||
|
BUG_ON((!dev) && (!subname));
|
||||||
|
|
||||||
|
mutex_lock(&mfp_mutex);
|
||||||
|
|
||||||
|
if (subname != NULL)
|
||||||
|
dev_id = subname;
|
||||||
|
else
|
||||||
|
dev_id = dev_name(dev);
|
||||||
|
|
||||||
|
mfpen = __raw_readl(REG_MFSEL);
|
||||||
|
|
||||||
|
if (strcmp(dev_id, "nuc900-mmc-port0") == 0) {
|
||||||
|
mfpen &= ~GPSELD;/*enable sd0*/
|
||||||
|
mfpen |= ENSD0;
|
||||||
|
} else
|
||||||
|
mfpen &= (~GPSELD);
|
||||||
|
|
||||||
|
__raw_writel(mfpen, REG_MFSEL);
|
||||||
|
|
||||||
|
mutex_unlock(&mfp_mutex);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(mfp_set_groupd);
|
||||||
|
@ -10,7 +10,7 @@ choice
|
|||||||
|
|
||||||
config ARCH_IMX_V4_V5
|
config ARCH_IMX_V4_V5
|
||||||
bool "i.MX1, i.MX21, i.MX25, i.MX27"
|
bool "i.MX1, i.MX21, i.MX25, i.MX27"
|
||||||
select AUTO_ZRELADDR
|
select AUTO_ZRELADDR if !ZBOOT_ROM
|
||||||
select ARM_PATCH_PHYS_VIRT
|
select ARM_PATCH_PHYS_VIRT
|
||||||
help
|
help
|
||||||
This enables support for systems based on the Freescale i.MX ARMv4
|
This enables support for systems based on the Freescale i.MX ARMv4
|
||||||
@ -26,7 +26,7 @@ config ARCH_IMX_V6_V7
|
|||||||
|
|
||||||
config ARCH_MX5
|
config ARCH_MX5
|
||||||
bool "i.MX50, i.MX51, i.MX53"
|
bool "i.MX50, i.MX51, i.MX53"
|
||||||
select AUTO_ZRELADDR
|
select AUTO_ZRELADDR if !ZBOOT_ROM
|
||||||
select ARM_PATCH_PHYS_VIRT
|
select ARM_PATCH_PHYS_VIRT
|
||||||
help
|
help
|
||||||
This enables support for machines using Freescale's i.MX50 and i.MX53
|
This enables support for machines using Freescale's i.MX50 and i.MX53
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
|
#include <asm/exception.h>
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
|
|
||||||
#include "irq-common.h"
|
#include "irq-common.h"
|
||||||
|
@ -28,21 +28,14 @@ asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)
|
|||||||
if (irqnr == 1023)
|
if (irqnr == 1023)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (irqnr > 29 && irqnr < 1021)
|
if (irqnr > 15 && irqnr < 1021)
|
||||||
handle_IRQ(irqnr, regs);
|
handle_IRQ(irqnr, regs);
|
||||||
#ifdef CONFIG_SMP
|
#ifdef CONFIG_SMP
|
||||||
else if (irqnr < 16) {
|
else {
|
||||||
writel_relaxed(irqstat, gic_cpu_base_addr +
|
writel_relaxed(irqstat, gic_cpu_base_addr +
|
||||||
GIC_CPU_EOI);
|
GIC_CPU_EOI);
|
||||||
handle_IPI(irqnr, regs);
|
handle_IPI(irqnr, regs);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
#ifdef CONFIG_LOCAL_TIMERS
|
|
||||||
else if (irqnr == 29) {
|
|
||||||
writel_relaxed(irqstat, gic_cpu_base_addr +
|
|
||||||
GIC_CPU_EOI);
|
|
||||||
handle_local_timer(regs);
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
} while (1);
|
} while (1);
|
||||||
}
|
}
|
||||||
|
@ -25,6 +25,3 @@
|
|||||||
|
|
||||||
.macro test_for_ipi, irqnr, irqstat, base, tmp
|
.macro test_for_ipi, irqnr, irqstat, base, tmp
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro test_for_ltirq, irqnr, irqstat, base, tmp
|
|
||||||
.endm
|
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
|
#include <asm/exception.h>
|
||||||
|
|
||||||
#include <mach/hardware.h>
|
#include <mach/hardware.h>
|
||||||
#include <mach/common.h>
|
#include <mach/common.h>
|
||||||
|
@ -32,6 +32,8 @@ struct work_struct;
|
|||||||
struct bfin_serial_port {
|
struct bfin_serial_port {
|
||||||
struct uart_port port;
|
struct uart_port port;
|
||||||
unsigned int old_status;
|
unsigned int old_status;
|
||||||
|
int tx_irq;
|
||||||
|
int rx_irq;
|
||||||
int status_irq;
|
int status_irq;
|
||||||
#ifndef BFIN_UART_BF54X_STYLE
|
#ifndef BFIN_UART_BF54X_STYLE
|
||||||
unsigned int lsr;
|
unsigned int lsr;
|
||||||
|
@ -372,9 +372,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -415,9 +420,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -308,9 +308,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -351,9 +356,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -380,9 +380,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -423,9 +428,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
@ -538,9 +539,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -581,9 +587,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -801,7 +812,6 @@ static struct platform_device bfin_sport1_uart_device = {
|
|||||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/export.h>
|
|
||||||
|
|
||||||
static struct gpio_keys_button bfin_gpio_keys_table[] = {
|
static struct gpio_keys_button bfin_gpio_keys_table[] = {
|
||||||
{BTN_0, GPIO_PF14, 1, "gpio-keys: BTN0"},
|
{BTN_0, GPIO_PF14, 1, "gpio-keys: BTN0"},
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
@ -416,9 +417,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -459,9 +465,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -674,7 +685,6 @@ static struct platform_device bfin_sport1_uart_device = {
|
|||||||
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
|
||||||
#include <linux/input.h>
|
#include <linux/input.h>
|
||||||
#include <linux/gpio_keys.h>
|
#include <linux/gpio_keys.h>
|
||||||
#include <linux/export.h>
|
|
||||||
|
|
||||||
static struct gpio_keys_button bfin_gpio_keys_table[] = {
|
static struct gpio_keys_button bfin_gpio_keys_table[] = {
|
||||||
{BTN_0, GPIO_PG0, 1, "gpio-keys: BTN0"},
|
{BTN_0, GPIO_PG0, 1, "gpio-keys: BTN0"},
|
||||||
|
@ -710,9 +710,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -753,9 +758,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -495,9 +495,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -539,9 +544,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -237,9 +237,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX + 1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -192,9 +192,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX + 1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -220,9 +220,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX + 1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -291,9 +291,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX + 1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -150,9 +150,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX + 1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -297,9 +297,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX + 1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
@ -304,9 +305,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -365,9 +371,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -569,7 +580,6 @@ static struct platform_device bfin_sport1_uart_device = {
|
|||||||
|
|
||||||
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
||||||
#include <linux/bfin_mac.h>
|
#include <linux/bfin_mac.h>
|
||||||
#include <linux/export.h>
|
|
||||||
static const unsigned short bfin_mac_peripherals[] = P_MII0;
|
static const unsigned short bfin_mac_peripherals[] = P_MII0;
|
||||||
|
|
||||||
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
@ -305,9 +306,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -348,9 +354,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -534,7 +545,6 @@ static struct platform_device bfin_sport1_uart_device = {
|
|||||||
|
|
||||||
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
||||||
#include <linux/bfin_mac.h>
|
#include <linux/bfin_mac.h>
|
||||||
#include <linux/export.h>
|
|
||||||
static const unsigned short bfin_mac_peripherals[] = P_MII0;
|
static const unsigned short bfin_mac_peripherals[] = P_MII0;
|
||||||
|
|
||||||
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
@ -49,7 +50,6 @@ static struct platform_device rtc_device = {
|
|||||||
|
|
||||||
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
||||||
#include <linux/bfin_mac.h>
|
#include <linux/bfin_mac.h>
|
||||||
#include <linux/export.h>
|
|
||||||
static const unsigned short bfin_mac_peripherals[] = P_RMII0;
|
static const unsigned short bfin_mac_peripherals[] = P_RMII0;
|
||||||
|
|
||||||
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
||||||
@ -236,9 +236,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -280,9 +285,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -239,9 +239,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -282,9 +287,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
@ -308,9 +309,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -351,9 +357,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
@ -1565,9 +1566,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1620,9 +1626,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1992,7 +2003,6 @@ static struct adp8870_backlight_platform_data adp8870_pdata = {
|
|||||||
|
|
||||||
#if defined(CONFIG_BACKLIGHT_ADP8860) || defined(CONFIG_BACKLIGHT_ADP8860_MODULE)
|
#if defined(CONFIG_BACKLIGHT_ADP8860) || defined(CONFIG_BACKLIGHT_ADP8860_MODULE)
|
||||||
#include <linux/i2c/adp8860.h>
|
#include <linux/i2c/adp8860.h>
|
||||||
#include <linux/export.h>
|
|
||||||
static struct led_info adp8860_leds[] = {
|
static struct led_info adp8860_leds[] = {
|
||||||
{
|
{
|
||||||
.name = "adp8860-led7",
|
.name = "adp8860-led7",
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
#include <linux/device.h>
|
#include <linux/device.h>
|
||||||
#include <linux/etherdevice.h>
|
#include <linux/etherdevice.h>
|
||||||
|
#include <linux/export.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/mtd/mtd.h>
|
#include <linux/mtd/mtd.h>
|
||||||
#include <linux/mtd/partitions.h>
|
#include <linux/mtd/partitions.h>
|
||||||
@ -305,9 +306,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -348,9 +354,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -536,7 +547,6 @@ static struct platform_device bfin_sport1_uart_device = {
|
|||||||
|
|
||||||
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
#if defined(CONFIG_BFIN_MAC) || defined(CONFIG_BFIN_MAC_MODULE)
|
||||||
#include <linux/bfin_mac.h>
|
#include <linux/bfin_mac.h>
|
||||||
#include <linux/export.h>
|
|
||||||
static const unsigned short bfin_mac_peripherals[] = P_MII0;
|
static const unsigned short bfin_mac_peripherals[] = P_MII0;
|
||||||
|
|
||||||
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
static struct bfin_phydev_platform_data bfin_phydev_data[] = {
|
||||||
|
@ -48,9 +48,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_GCTL+2,
|
.end = UART0_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -103,9 +108,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_GCTL+2,
|
.end = UART1_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -146,9 +156,14 @@ static struct resource bfin_uart2_resources[] = {
|
|||||||
.end = UART2_GCTL+2,
|
.end = UART2_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART2_TX,
|
||||||
|
.end = IRQ_UART2_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART2_RX,
|
.start = IRQ_UART2_RX,
|
||||||
.end = IRQ_UART2_RX+1,
|
.end = IRQ_UART2_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -134,9 +134,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_RBR+2,
|
.end = UART0_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -177,9 +182,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_RBR+2,
|
.end = UART1_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -236,9 +246,14 @@ static struct resource bfin_uart2_resources[] = {
|
|||||||
.end = UART2_RBR+2,
|
.end = UART2_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART2_TX,
|
||||||
|
.end = IRQ_UART2_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART2_RX,
|
.start = IRQ_UART2_RX,
|
||||||
.end = IRQ_UART2_RX+1,
|
.end = IRQ_UART2_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -279,9 +294,14 @@ static struct resource bfin_uart3_resources[] = {
|
|||||||
.end = UART3_RBR+2,
|
.end = UART3_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART3_TX,
|
||||||
|
.end = IRQ_UART3_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART3_RX,
|
.start = IRQ_UART3_RX,
|
||||||
.end = IRQ_UART3_RX+1,
|
.end = IRQ_UART3_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -240,9 +240,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = UART0_RBR+2,
|
.end = UART0_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART0_TX,
|
||||||
|
.end = IRQ_UART0_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART0_RX,
|
.start = IRQ_UART0_RX,
|
||||||
.end = IRQ_UART0_RX+1,
|
.end = IRQ_UART0_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -283,9 +288,14 @@ static struct resource bfin_uart1_resources[] = {
|
|||||||
.end = UART1_RBR+2,
|
.end = UART1_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART1_TX,
|
||||||
|
.end = IRQ_UART1_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART1_RX,
|
.start = IRQ_UART1_RX,
|
||||||
.end = IRQ_UART1_RX+1,
|
.end = IRQ_UART1_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -342,9 +352,14 @@ static struct resource bfin_uart2_resources[] = {
|
|||||||
.end = UART2_RBR+2,
|
.end = UART2_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART2_TX,
|
||||||
|
.end = IRQ_UART2_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART2_RX,
|
.start = IRQ_UART2_RX,
|
||||||
.end = IRQ_UART2_RX+1,
|
.end = IRQ_UART2_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -385,9 +400,14 @@ static struct resource bfin_uart3_resources[] = {
|
|||||||
.end = UART3_RBR+2,
|
.end = UART3_RBR+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART3_TX,
|
||||||
|
.end = IRQ_UART3_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART3_RX,
|
.start = IRQ_UART3_RX,
|
||||||
.end = IRQ_UART3_RX+1,
|
.end = IRQ_UART3_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -202,9 +202,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL + 2,
|
.end = BFIN_UART_GCTL + 2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART_TX,
|
||||||
|
.end = IRQ_UART_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART_RX,
|
.start = IRQ_UART_RX,
|
||||||
.end = IRQ_UART_RX + 1,
|
.end = IRQ_UART_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -276,9 +276,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART_TX,
|
||||||
|
.end = IRQ_UART_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART_RX,
|
.start = IRQ_UART_RX,
|
||||||
.end = IRQ_UART_RX+1,
|
.end = IRQ_UART_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -171,9 +171,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART_TX,
|
||||||
|
.end = IRQ_UART_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART_RX,
|
.start = IRQ_UART_RX,
|
||||||
.end = IRQ_UART_RX+1,
|
.end = IRQ_UART_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -50,9 +50,14 @@ static struct resource bfin_uart0_resources[] = {
|
|||||||
.end = BFIN_UART_GCTL+2,
|
.end = BFIN_UART_GCTL+2,
|
||||||
.flags = IORESOURCE_MEM,
|
.flags = IORESOURCE_MEM,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
.start = IRQ_UART_TX,
|
||||||
|
.end = IRQ_UART_TX,
|
||||||
|
.flags = IORESOURCE_IRQ,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
.start = IRQ_UART_RX,
|
.start = IRQ_UART_RX,
|
||||||
.end = IRQ_UART_RX+1,
|
.end = IRQ_UART_RX,
|
||||||
.flags = IORESOURCE_IRQ,
|
.flags = IORESOURCE_IRQ,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -3,7 +3,7 @@ if ETRAX_ARCH_V10
|
|||||||
config ETRAX_ETHERNET
|
config ETRAX_ETHERNET
|
||||||
bool "Ethernet support"
|
bool "Ethernet support"
|
||||||
depends on ETRAX_ARCH_V10
|
depends on ETRAX_ARCH_V10
|
||||||
select NET_ETHERNET
|
select ETHERNET
|
||||||
select NET_CORE
|
select NET_CORE
|
||||||
select MII
|
select MII
|
||||||
help
|
help
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user