Linux 3.4-rc2
-----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iQEcBAABAgAGBQJPgOpXAAoJEHm+PkMAQRiG8eUIAJ3Hjo0o5hqzxol8LWHDGF8s 3h59qwRtts82u2psStZULPLbBzw6yjn8U5Mcrh7pffwCG2BzBL5rXcmXfvoPaET3 TjylIj986Jv+jwZyuyZcLzYyoUtgjtq7hnt4tgVVEPlexYs7LxUl8vO8QjxT+bVO 7eKgzLsXlBC9kw4P5M7kOBQ9NE5vmEcKf+fB3Hu3DqfVJtw9Lb7EeDQj/cbQsGqI vavSxe7lMTPsgMP2+hRz4txGTDJNRazkO2BdwfYrcNwTSa8tfBFlamww3y4+eJtq MFQfdNxQpumh2++T4IC2i/nLaawH7kWj2EdaRCRLMy9hVlb/v8/wcgd+1nfLkU8= =0on9 -----END PGP SIGNATURE----- Merge tag 'v3.4-rc2' into for-3.5 Linux 3.4-rc2 contains some bug fixes we need, including the addition of an export for regcache_sync_region().
This commit is contained in:
commit
1eecb8280b
|
@ -31,3 +31,21 @@ may be weakly ordered, that is that reads and writes may pass each other.
|
|||
Since it is optional for platforms to implement DMA_ATTR_WEAK_ORDERING,
|
||||
those that do not will simply ignore the attribute and exhibit default
|
||||
behavior.
|
||||
|
||||
DMA_ATTR_WRITE_COMBINE
|
||||
----------------------
|
||||
|
||||
DMA_ATTR_WRITE_COMBINE specifies that writes to the mapping may be
|
||||
buffered to improve performance.
|
||||
|
||||
Since it is optional for platforms to implement DMA_ATTR_WRITE_COMBINE,
|
||||
those that do not will simply ignore the attribute and exhibit default
|
||||
behavior.
|
||||
|
||||
DMA_ATTR_NON_CONSISTENT
|
||||
-----------------------
|
||||
|
||||
DMA_ATTR_NON_CONSISTENT lets the platform to choose to return either
|
||||
consistent or non-consistent memory as it sees fit. By using this API,
|
||||
you are guaranteeing to the platform that you have all the correct and
|
||||
necessary sync points for this memory in the driver.
|
||||
|
|
|
@ -446,4 +446,21 @@ X!Idrivers/video/console/fonts.c
|
|||
!Edrivers/i2c/i2c-core.c
|
||||
</chapter>
|
||||
|
||||
<chapter id="hsi">
|
||||
<title>High Speed Synchronous Serial Interface (HSI)</title>
|
||||
|
||||
<para>
|
||||
High Speed Synchronous Serial Interface (HSI) is a
|
||||
serial interface mainly used for connecting application
|
||||
engines (APE) with cellular modem engines (CMT) in cellular
|
||||
handsets.
|
||||
|
||||
HSI provides multiplexing for up to 16 logical channels,
|
||||
low-latency and full duplex communication.
|
||||
</para>
|
||||
|
||||
!Iinclude/linux/hsi/hsi.h
|
||||
!Edrivers/hsi/hsi.c
|
||||
</chapter>
|
||||
|
||||
</book>
|
||||
|
|
|
@ -217,7 +217,7 @@ and name space for cpusets, with a minimum of additional kernel code.
|
|||
|
||||
The cpus and mems files in the root (top_cpuset) cpuset are
|
||||
read-only. The cpus file automatically tracks the value of
|
||||
cpu_online_map using a CPU hotplug notifier, and the mems file
|
||||
cpu_online_mask using a CPU hotplug notifier, and the mems file
|
||||
automatically tracks the value of node_states[N_HIGH_MEMORY]--i.e.,
|
||||
nodes with memory--using the cpuset_track_online_nodes() hook.
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ maxcpus=n Restrict boot time cpus to n. Say if you have 4 cpus, using
|
|||
other cpus later online, read FAQ's for more info.
|
||||
|
||||
additional_cpus=n (*) Use this to limit hotpluggable cpus. This option sets
|
||||
cpu_possible_map = cpu_present_map + additional_cpus
|
||||
cpu_possible_mask = cpu_present_mask + additional_cpus
|
||||
|
||||
cede_offline={"off","on"} Use this option to disable/enable putting offlined
|
||||
processors to an extended H_CEDE state on
|
||||
|
@ -64,11 +64,11 @@ should only rely on this to count the # of cpus, but *MUST* not rely
|
|||
on the apicid values in those tables for disabled apics. In the event
|
||||
BIOS doesn't mark such hot-pluggable cpus as disabled entries, one could
|
||||
use this parameter "additional_cpus=x" to represent those cpus in the
|
||||
cpu_possible_map.
|
||||
cpu_possible_mask.
|
||||
|
||||
possible_cpus=n [s390,x86_64] use this to set hotpluggable cpus.
|
||||
This option sets possible_cpus bits in
|
||||
cpu_possible_map. Thus keeping the numbers of bits set
|
||||
cpu_possible_mask. Thus keeping the numbers of bits set
|
||||
constant even if the machine gets rebooted.
|
||||
|
||||
CPU maps and such
|
||||
|
@ -76,7 +76,7 @@ CPU maps and such
|
|||
[More on cpumaps and primitive to manipulate, please check
|
||||
include/linux/cpumask.h that has more descriptive text.]
|
||||
|
||||
cpu_possible_map: Bitmap of possible CPUs that can ever be available in the
|
||||
cpu_possible_mask: Bitmap of possible CPUs that can ever be available in the
|
||||
system. This is used to allocate some boot time memory for per_cpu variables
|
||||
that aren't designed to grow/shrink as CPUs are made available or removed.
|
||||
Once set during boot time discovery phase, the map is static, i.e no bits
|
||||
|
@ -84,13 +84,13 @@ are added or removed anytime. Trimming it accurately for your system needs
|
|||
upfront can save some boot time memory. See below for how we use heuristics
|
||||
in x86_64 case to keep this under check.
|
||||
|
||||
cpu_online_map: Bitmap of all CPUs currently online. Its set in __cpu_up()
|
||||
cpu_online_mask: Bitmap of all CPUs currently online. Its set in __cpu_up()
|
||||
after a cpu is available for kernel scheduling and ready to receive
|
||||
interrupts from devices. Its cleared when a cpu is brought down using
|
||||
__cpu_disable(), before which all OS services including interrupts are
|
||||
migrated to another target CPU.
|
||||
|
||||
cpu_present_map: Bitmap of CPUs currently present in the system. Not all
|
||||
cpu_present_mask: Bitmap of CPUs currently present in the system. Not all
|
||||
of them may be online. When physical hotplug is processed by the relevant
|
||||
subsystem (e.g ACPI) can change and new bit either be added or removed
|
||||
from the map depending on the event is hot-add/hot-remove. There are currently
|
||||
|
@ -99,22 +99,22 @@ at which time hotplug is disabled.
|
|||
|
||||
You really dont need to manipulate any of the system cpu maps. They should
|
||||
be read-only for most use. When setting up per-cpu resources almost always use
|
||||
cpu_possible_map/for_each_possible_cpu() to iterate.
|
||||
cpu_possible_mask/for_each_possible_cpu() to iterate.
|
||||
|
||||
Never use anything other than cpumask_t to represent bitmap of CPUs.
|
||||
|
||||
#include <linux/cpumask.h>
|
||||
|
||||
for_each_possible_cpu - Iterate over cpu_possible_map
|
||||
for_each_online_cpu - Iterate over cpu_online_map
|
||||
for_each_present_cpu - Iterate over cpu_present_map
|
||||
for_each_possible_cpu - Iterate over cpu_possible_mask
|
||||
for_each_online_cpu - Iterate over cpu_online_mask
|
||||
for_each_present_cpu - Iterate over cpu_present_mask
|
||||
for_each_cpu_mask(x,mask) - Iterate over some random collection of cpu mask.
|
||||
|
||||
#include <linux/cpu.h>
|
||||
get_online_cpus() and put_online_cpus():
|
||||
|
||||
The above calls are used to inhibit cpu hotplug operations. While the
|
||||
cpu_hotplug.refcount is non zero, the cpu_online_map will not change.
|
||||
cpu_hotplug.refcount is non zero, the cpu_online_mask will not change.
|
||||
If you merely need to avoid cpus going away, you could also use
|
||||
preempt_disable() and preempt_enable() for those sections.
|
||||
Just remember the critical section cannot call any
|
||||
|
|
|
@ -27,13 +27,13 @@ nand0: nand@40000000,0 {
|
|||
reg = <0x40000000 0x10000000
|
||||
0xffffe800 0x200
|
||||
>;
|
||||
atmel,nand-addr-offset = <21>;
|
||||
atmel,nand-cmd-offset = <22>;
|
||||
atmel,nand-addr-offset = <21>; /* ale */
|
||||
atmel,nand-cmd-offset = <22>; /* cle */
|
||||
nand-on-flash-bbt;
|
||||
nand-ecc-mode = "soft";
|
||||
gpios = <&pioC 13 0
|
||||
&pioC 14 0
|
||||
0
|
||||
gpios = <&pioC 13 0 /* rdy */
|
||||
&pioC 14 0 /* nce */
|
||||
0 /* cd */
|
||||
>;
|
||||
partition@0 {
|
||||
...
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
Anatop Voltage regulators
|
||||
|
||||
Required properties:
|
||||
- compatible: Must be "fsl,anatop-regulator"
|
||||
- anatop-reg-offset: Anatop MFD register offset
|
||||
- anatop-vol-bit-shift: Bit shift for the register
|
||||
- anatop-vol-bit-width: Number of bits used in the register
|
||||
- anatop-min-bit-val: Minimum value of this register
|
||||
- anatop-min-voltage: Minimum voltage of this regulator
|
||||
- anatop-max-voltage: Maximum voltage of this regulator
|
||||
|
||||
Any property defined as part of the core regulator
|
||||
binding, defined in regulator.txt, can also be used.
|
||||
|
||||
Example:
|
||||
|
||||
regulator-vddpu {
|
||||
compatible = "fsl,anatop-regulator";
|
||||
regulator-name = "vddpu";
|
||||
regulator-min-microvolt = <725000>;
|
||||
regulator-max-microvolt = <1300000>;
|
||||
regulator-always-on;
|
||||
anatop-reg-offset = <0x140>;
|
||||
anatop-vol-bit-shift = <9>;
|
||||
anatop-vol-bit-width = <5>;
|
||||
anatop-min-bit-val = <1>;
|
||||
anatop-min-voltage = <725000>;
|
||||
anatop-max-voltage = <1300000>;
|
||||
};
|
|
@ -6,14 +6,6 @@ be removed from this file.
|
|||
|
||||
---------------------------
|
||||
|
||||
What: x86 floppy disable_hlt
|
||||
When: 2012
|
||||
Why: ancient workaround of dubious utility clutters the
|
||||
code used by everybody else.
|
||||
Who: Len Brown <len.brown@intel.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: CONFIG_APM_CPU_IDLE, and its ability to call APM BIOS in idle
|
||||
When: 2012
|
||||
Why: This optional sub-feature of APM is of dubious reliability,
|
||||
|
|
|
@ -11,7 +11,7 @@ Supported chips:
|
|||
Socket S1G2: Athlon (X2), Sempron (X2), Turion X2 (Ultra)
|
||||
* AMD Family 12h processors: "Llano" (E2/A4/A6/A8-Series)
|
||||
* AMD Family 14h processors: "Brazos" (C/E/G/Z-Series)
|
||||
* AMD Family 15h processors: "Bulldozer"
|
||||
* AMD Family 15h processors: "Bulldozer" (FX-Series), "Trinity"
|
||||
|
||||
Prefix: 'k10temp'
|
||||
Addresses scanned: PCI space
|
||||
|
|
|
@ -225,6 +225,7 @@ Code Seq#(hex) Include File Comments
|
|||
'j' 00-3F linux/joystick.h
|
||||
'k' 00-0F linux/spi/spidev.h conflict!
|
||||
'k' 00-05 video/kyro.h conflict!
|
||||
'k' 10-17 linux/hsi/hsi_char.h HSI character device
|
||||
'l' 00-3F linux/tcfs_fs.h transparent cryptographic file system
|
||||
<http://web.archive.org/web/*/http://mikonos.dia.unisa.it/tcfs>
|
||||
'l' 40-7F linux/udf_fs_i.h in development:
|
||||
|
|
|
@ -2,16 +2,16 @@ Document about softnet driver issues
|
|||
|
||||
Transmit path guidelines:
|
||||
|
||||
1) The hard_start_xmit method must never return '1' under any
|
||||
normal circumstances. It is considered a hard error unless
|
||||
1) The ndo_start_xmit method must not return NETDEV_TX_BUSY under
|
||||
any normal circumstances. It is considered a hard error unless
|
||||
there is no way your device can tell ahead of time when it's
|
||||
transmit function will become busy.
|
||||
|
||||
Instead it must maintain the queue properly. For example,
|
||||
for a driver implementing scatter-gather this means:
|
||||
|
||||
static int drv_hard_start_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
static netdev_tx_t drv_hard_start_xmit(struct sk_buff *skb,
|
||||
struct net_device *dev)
|
||||
{
|
||||
struct drv *dp = netdev_priv(dev);
|
||||
|
||||
|
@ -23,7 +23,7 @@ Transmit path guidelines:
|
|||
unlock_tx(dp);
|
||||
printk(KERN_ERR PFX "%s: BUG! Tx Ring full when queue awake!\n",
|
||||
dev->name);
|
||||
return 1;
|
||||
return NETDEV_TX_BUSY;
|
||||
}
|
||||
|
||||
... queue packet to card ...
|
||||
|
@ -35,6 +35,7 @@ Transmit path guidelines:
|
|||
...
|
||||
unlock_tx(dp);
|
||||
...
|
||||
return NETDEV_TX_OK;
|
||||
}
|
||||
|
||||
And then at the end of your TX reclamation event handling:
|
||||
|
@ -58,15 +59,12 @@ Transmit path guidelines:
|
|||
TX_BUFFS_AVAIL(dp) > 0)
|
||||
netif_wake_queue(dp->dev);
|
||||
|
||||
2) Do not forget to update netdev->trans_start to jiffies after
|
||||
each new tx packet is given to the hardware.
|
||||
|
||||
3) A hard_start_xmit method must not modify the shared parts of a
|
||||
2) An ndo_start_xmit method must not modify the shared parts of a
|
||||
cloned SKB.
|
||||
|
||||
4) Do not forget that once you return 0 from your hard_start_xmit
|
||||
method, it is your driver's responsibility to free up the SKB
|
||||
and in some finite amount of time.
|
||||
3) Do not forget that once you return NETDEV_TX_OK from your
|
||||
ndo_start_xmit method, it is your driver's responsibility to free
|
||||
up the SKB and in some finite amount of time.
|
||||
|
||||
For example, this means that it is not allowed for your TX
|
||||
mitigation scheme to let TX packets "hang out" in the TX
|
||||
|
@ -74,8 +72,9 @@ Transmit path guidelines:
|
|||
This error can deadlock sockets waiting for send buffer room
|
||||
to be freed up.
|
||||
|
||||
If you return 1 from the hard_start_xmit method, you must not keep
|
||||
any reference to that SKB and you must not attempt to free it up.
|
||||
If you return NETDEV_TX_BUSY from the ndo_start_xmit method, you
|
||||
must not keep any reference to that SKB and you must not attempt
|
||||
to free it up.
|
||||
|
||||
Probing guidelines:
|
||||
|
||||
|
@ -85,10 +84,10 @@ Probing guidelines:
|
|||
|
||||
Close/stop guidelines:
|
||||
|
||||
1) After the dev->stop routine has been called, the hardware must
|
||||
1) After the ndo_stop routine has been called, the hardware must
|
||||
not receive or transmit any data. All in flight packets must
|
||||
be aborted. If necessary, poll or wait for completion of
|
||||
any reset commands.
|
||||
|
||||
2) The dev->stop routine will be called by unregister_netdevice
|
||||
2) The ndo_stop routine will be called by unregister_netdevice
|
||||
if device is still UP.
|
||||
|
|
|
@ -604,15 +604,8 @@ IP Variables:
|
|||
ip_local_port_range - 2 INTEGERS
|
||||
Defines the local port range that is used by TCP and UDP to
|
||||
choose the local port. The first number is the first, the
|
||||
second the last local port number. Default value depends on
|
||||
amount of memory available on the system:
|
||||
> 128Mb 32768-61000
|
||||
< 128Mb 1024-4999 or even less.
|
||||
This number defines number of active connections, which this
|
||||
system can issue simultaneously to systems not supporting
|
||||
TCP extensions (timestamps). With tcp_tw_recycle enabled
|
||||
(i.e. by default) range 1024-4999 is enough to issue up to
|
||||
2000 connections per second to systems supporting timestamps.
|
||||
second the last local port number. The default values are
|
||||
32768 and 61000 respectively.
|
||||
|
||||
ip_local_reserved_ports - list of comma separated ranges
|
||||
Specify the ports which are reserved for known third-party
|
||||
|
|
|
@ -47,26 +47,25 @@ packets is preferred.
|
|||
|
||||
struct net_device synchronization rules
|
||||
=======================================
|
||||
dev->open:
|
||||
ndo_open:
|
||||
Synchronization: rtnl_lock() semaphore.
|
||||
Context: process
|
||||
|
||||
dev->stop:
|
||||
ndo_stop:
|
||||
Synchronization: rtnl_lock() semaphore.
|
||||
Context: process
|
||||
Note1: netif_running() is guaranteed false
|
||||
Note2: dev->poll() is guaranteed to be stopped
|
||||
Note: netif_running() is guaranteed false
|
||||
|
||||
dev->do_ioctl:
|
||||
ndo_do_ioctl:
|
||||
Synchronization: rtnl_lock() semaphore.
|
||||
Context: process
|
||||
|
||||
dev->get_stats:
|
||||
ndo_get_stats:
|
||||
Synchronization: dev_base_lock rwlock.
|
||||
Context: nominally process, but don't sleep inside an rwlock
|
||||
|
||||
dev->hard_start_xmit:
|
||||
Synchronization: netif_tx_lock spinlock.
|
||||
ndo_start_xmit:
|
||||
Synchronization: __netif_tx_lock spinlock.
|
||||
|
||||
When the driver sets NETIF_F_LLTX in dev->features this will be
|
||||
called without holding netif_tx_lock. In this case the driver
|
||||
|
@ -87,20 +86,20 @@ dev->hard_start_xmit:
|
|||
o NETDEV_TX_LOCKED Locking failed, please retry quickly.
|
||||
Only valid when NETIF_F_LLTX is set.
|
||||
|
||||
dev->tx_timeout:
|
||||
Synchronization: netif_tx_lock spinlock.
|
||||
ndo_tx_timeout:
|
||||
Synchronization: netif_tx_lock spinlock; all TX queues frozen.
|
||||
Context: BHs disabled
|
||||
Notes: netif_queue_stopped() is guaranteed true
|
||||
|
||||
dev->set_rx_mode:
|
||||
Synchronization: netif_tx_lock spinlock.
|
||||
ndo_set_rx_mode:
|
||||
Synchronization: netif_addr_lock spinlock.
|
||||
Context: BHs disabled
|
||||
|
||||
struct napi_struct synchronization rules
|
||||
========================================
|
||||
napi->poll:
|
||||
Synchronization: NAPI_STATE_SCHED bit in napi->state. Device
|
||||
driver's dev->close method will invoke napi_disable() on
|
||||
driver's ndo_stop method will invoke napi_disable() on
|
||||
all NAPI instances which will do a sleeping poll on the
|
||||
NAPI_STATE_SCHED napi->state bit, waiting for all pending
|
||||
NAPI activity to cease.
|
||||
|
|
67
MAINTAINERS
67
MAINTAINERS
|
@ -228,7 +228,7 @@ M: Len Brown <lenb@kernel.org>
|
|||
L: linux-acpi@vger.kernel.org
|
||||
W: http://www.lesswatts.org/projects/acpi/
|
||||
Q: http://patchwork.kernel.org/project/linux-acpi/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux
|
||||
S: Supported
|
||||
F: drivers/acpi/
|
||||
F: drivers/pnp/pnpacpi/
|
||||
|
@ -1251,7 +1251,6 @@ ATHEROS ATH5K WIRELESS DRIVER
|
|||
M: Jiri Slaby <jirislaby@gmail.com>
|
||||
M: Nick Kossifidis <mickflemm@gmail.com>
|
||||
M: "Luis R. Rodriguez" <mcgrof@qca.qualcomm.com>
|
||||
M: Bob Copeland <me@bobcopeland.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
L: ath5k-devel@lists.ath5k.org
|
||||
W: http://wireless.kernel.org/en/users/Drivers/ath5k
|
||||
|
@ -2451,17 +2450,17 @@ F: fs/ecryptfs/
|
|||
|
||||
EDAC-CORE
|
||||
M: Doug Thompson <dougthompson@xmission.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Supported
|
||||
F: Documentation/edac.txt
|
||||
F: drivers/edac/edac_*
|
||||
F: drivers/edac/
|
||||
F: include/linux/edac.h
|
||||
|
||||
EDAC-AMD64
|
||||
M: Doug Thompson <dougthompson@xmission.com>
|
||||
M: Borislav Petkov <borislav.petkov@amd.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Supported
|
||||
F: drivers/edac/amd64_edac*
|
||||
|
@ -2469,35 +2468,35 @@ F: drivers/edac/amd64_edac*
|
|||
EDAC-E752X
|
||||
M: Mark Gross <mark.gross@intel.com>
|
||||
M: Doug Thompson <dougthompson@xmission.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/e752x_edac.c
|
||||
|
||||
EDAC-E7XXX
|
||||
M: Doug Thompson <dougthompson@xmission.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/e7xxx_edac.c
|
||||
|
||||
EDAC-I82443BXGX
|
||||
M: Tim Small <tim@buttersideup.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/i82443bxgx_edac.c
|
||||
|
||||
EDAC-I3000
|
||||
M: Jason Uhlenkott <juhlenko@akamai.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/i3000_edac.c
|
||||
|
||||
EDAC-I5000
|
||||
M: Doug Thompson <dougthompson@xmission.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/i5000_edac.c
|
||||
|
@ -2526,21 +2525,21 @@ F: drivers/edac/i7core_edac.c
|
|||
EDAC-I82975X
|
||||
M: Ranganathan Desikan <ravi@jetztechnologies.com>
|
||||
M: "Arvind R." <arvino55@gmail.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/i82975x_edac.c
|
||||
|
||||
EDAC-PASEMI
|
||||
M: Egor Martovetsky <egor@pasemi.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/pasemi_edac.c
|
||||
|
||||
EDAC-R82600
|
||||
M: Tim Small <tim@buttersideup.com>
|
||||
L: bluesmoke-devel@lists.sourceforge.net (moderated for non-subscribers)
|
||||
L: linux-edac@vger.kernel.org
|
||||
W: bluesmoke.sourceforge.net
|
||||
S: Maintained
|
||||
F: drivers/edac/r82600_edac.c
|
||||
|
@ -3557,17 +3556,13 @@ L: linux-pm@vger.kernel.org
|
|||
S: Supported
|
||||
F: arch/x86/platform/mrst/pmu.*
|
||||
|
||||
INTEL PRO/WIRELESS 2100 NETWORK CONNECTION SUPPORT
|
||||
INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT
|
||||
M: Stanislav Yakovlev <stas.yakovlev@gmail.com>
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Orphan
|
||||
S: Maintained
|
||||
F: Documentation/networking/README.ipw2100
|
||||
F: drivers/net/wireless/ipw2x00/ipw2100.*
|
||||
|
||||
INTEL PRO/WIRELESS 2915ABG NETWORK CONNECTION SUPPORT
|
||||
L: linux-wireless@vger.kernel.org
|
||||
S: Orphan
|
||||
F: Documentation/networking/README.ipw2200
|
||||
F: drivers/net/wireless/ipw2x00/ipw2200.*
|
||||
F: drivers/net/wireless/ipw2x00/
|
||||
|
||||
INTEL(R) TRUSTED EXECUTION TECHNOLOGY (TXT)
|
||||
M: Joseph Cihula <joseph.cihula@intel.com>
|
||||
|
@ -4314,6 +4309,13 @@ W: http://www.kernel.org/doc/man-pages
|
|||
L: linux-man@vger.kernel.org
|
||||
S: Maintained
|
||||
|
||||
MARVELL GIGABIT ETHERNET DRIVERS (skge/sky2)
|
||||
M: Mirko Lindner <mlindner@marvell.com>
|
||||
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/marvell/sk*
|
||||
|
||||
MARVELL LIBERTAS WIRELESS DRIVER
|
||||
M: Dan Williams <dcbw@redhat.com>
|
||||
L: libertas-dev@lists.infradead.org
|
||||
|
@ -4344,12 +4346,6 @@ M: Nicolas Pitre <nico@fluxnic.net>
|
|||
S: Odd Fixes
|
||||
F: drivers/mmc/host/mvsdio.*
|
||||
|
||||
MARVELL YUKON / SYSKONNECT DRIVER
|
||||
M: Mirko Lindner <mlindner@syskonnect.de>
|
||||
M: Ralph Roesler <rroesler@syskonnect.de>
|
||||
W: http://www.syskonnect.com
|
||||
S: Supported
|
||||
|
||||
MATROX FRAMEBUFFER DRIVER
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
S: Orphan
|
||||
|
@ -5642,7 +5638,7 @@ M: Ohad Ben-Cohen <ohad@wizery.com>
|
|||
S: Maintained
|
||||
F: drivers/remoteproc/
|
||||
F: Documentation/remoteproc.txt
|
||||
F: include/linux/remoteproc.txt
|
||||
F: include/linux/remoteproc.h
|
||||
|
||||
RFKILL
|
||||
M: Johannes Berg <johannes@sipsolutions.net>
|
||||
|
@ -6121,12 +6117,6 @@ W: http://www.winischhofer.at/linuxsisusbvga.shtml
|
|||
S: Maintained
|
||||
F: drivers/usb/misc/sisusbvga/
|
||||
|
||||
SKGE, SKY2 10/100/1000 GIGABIT ETHERNET DRIVERS
|
||||
M: Stephen Hemminger <shemminger@vyatta.com>
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/ethernet/marvell/sk*
|
||||
|
||||
SLAB ALLOCATOR
|
||||
M: Christoph Lameter <cl@linux-foundation.org>
|
||||
M: Pekka Enberg <penberg@kernel.org>
|
||||
|
@ -6292,6 +6282,15 @@ F: drivers/tty/serial/sunsu.c
|
|||
F: drivers/tty/serial/sunzilog.c
|
||||
F: drivers/tty/serial/sunzilog.h
|
||||
|
||||
SPARSE CHECKER
|
||||
M: "Christopher Li" <sparse@chrisli.org>
|
||||
L: linux-sparse@vger.kernel.org
|
||||
W: https://sparse.wiki.kernel.org/
|
||||
T: git git://git.kernel.org/pub/scm/devel/sparse/sparse.git
|
||||
T: git git://git.kernel.org/pub/scm/devel/sparse/chrisl/sparse.git
|
||||
S: Maintained
|
||||
F: include/linux/compiler.h
|
||||
|
||||
SPEAR PLATFORM SUPPORT
|
||||
M: Viresh Kumar <viresh.kumar@st.com>
|
||||
L: spear-devel@list.st.com
|
||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
|||
VERSION = 3
|
||||
PATCHLEVEL = 4
|
||||
SUBLEVEL = 0
|
||||
EXTRAVERSION = -rc1
|
||||
EXTRAVERSION = -rc2
|
||||
NAME = Saber-toothed Squirrel
|
||||
|
||||
# *DOCUMENTATION*
|
||||
|
|
|
@ -12,16 +12,22 @@ static inline struct dma_map_ops *get_dma_ops(struct device *dev)
|
|||
|
||||
#include <asm-generic/dma-mapping-common.h>
|
||||
|
||||
static inline void *dma_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t gfp)
|
||||
#define dma_alloc_coherent(d,s,h,f) dma_alloc_attrs(d,s,h,f,NULL)
|
||||
|
||||
static inline void *dma_alloc_attrs(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t gfp,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
return get_dma_ops(dev)->alloc_coherent(dev, size, dma_handle, gfp);
|
||||
return get_dma_ops(dev)->alloc(dev, size, dma_handle, gfp, attrs);
|
||||
}
|
||||
|
||||
static inline void dma_free_coherent(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle)
|
||||
#define dma_free_coherent(d,s,c,h) dma_free_attrs(d,s,c,h,NULL)
|
||||
|
||||
static inline void dma_free_attrs(struct device *dev, size_t size,
|
||||
void *vaddr, dma_addr_t dma_handle,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
get_dma_ops(dev)->free_coherent(dev, size, vaddr, dma_handle);
|
||||
get_dma_ops(dev)->free(dev, size, vaddr, dma_handle, attrs);
|
||||
}
|
||||
|
||||
static inline int dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
|
||||
|
|
|
@ -108,7 +108,8 @@ sys_pciconfig_write(unsigned long bus, unsigned long dfn,
|
|||
}
|
||||
|
||||
static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_handle, gfp_t gfp)
|
||||
dma_addr_t *dma_handle, gfp_t gfp,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
void *ret;
|
||||
|
||||
|
@ -123,7 +124,8 @@ static void *alpha_noop_alloc_coherent(struct device *dev, size_t size,
|
|||
}
|
||||
|
||||
static void alpha_noop_free_coherent(struct device *dev, size_t size,
|
||||
void *cpu_addr, dma_addr_t dma_addr)
|
||||
void *cpu_addr, dma_addr_t dma_addr,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
free_pages((unsigned long)cpu_addr, get_order(size));
|
||||
}
|
||||
|
@ -174,8 +176,8 @@ static int alpha_noop_set_mask(struct device *dev, u64 mask)
|
|||
}
|
||||
|
||||
struct dma_map_ops alpha_noop_ops = {
|
||||
.alloc_coherent = alpha_noop_alloc_coherent,
|
||||
.free_coherent = alpha_noop_free_coherent,
|
||||
.alloc = alpha_noop_alloc_coherent,
|
||||
.free = alpha_noop_free_coherent,
|
||||
.map_page = alpha_noop_map_page,
|
||||
.map_sg = alpha_noop_map_sg,
|
||||
.mapping_error = alpha_noop_mapping_error,
|
||||
|
|
|
@ -434,7 +434,8 @@ static void alpha_pci_unmap_page(struct device *dev, dma_addr_t dma_addr,
|
|||
else DMA_ADDRP is undefined. */
|
||||
|
||||
static void *alpha_pci_alloc_coherent(struct device *dev, size_t size,
|
||||
dma_addr_t *dma_addrp, gfp_t gfp)
|
||||
dma_addr_t *dma_addrp, gfp_t gfp,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
|
||||
void *cpu_addr;
|
||||
|
@ -478,7 +479,8 @@ try_again:
|
|||
DMA_ADDR past this call are illegal. */
|
||||
|
||||
static void alpha_pci_free_coherent(struct device *dev, size_t size,
|
||||
void *cpu_addr, dma_addr_t dma_addr)
|
||||
void *cpu_addr, dma_addr_t dma_addr,
|
||||
struct dma_attrs *attrs)
|
||||
{
|
||||
struct pci_dev *pdev = alpha_gendev_to_pci(dev);
|
||||
pci_unmap_single(pdev, dma_addr, size, PCI_DMA_BIDIRECTIONAL);
|
||||
|
@ -952,8 +954,8 @@ static int alpha_pci_set_mask(struct device *dev, u64 mask)
|
|||
}
|
||||
|
||||
struct dma_map_ops alpha_pci_ops = {
|
||||
.alloc_coherent = alpha_pci_alloc_coherent,
|
||||
.free_coherent = alpha_pci_free_coherent,
|
||||
.alloc = alpha_pci_alloc_coherent,
|
||||
.free = alpha_pci_free_coherent,
|
||||
.map_page = alpha_pci_map_page,
|
||||
.unmap_page = alpha_pci_unmap_page,
|
||||
.map_sg = alpha_pci_map_sg,
|
||||
|
|
|
@ -120,12 +120,13 @@ SYSCALL_DEFINE5(rt_sigaction, int, sig, const struct sigaction __user *, act,
|
|||
*/
|
||||
SYSCALL_DEFINE1(sigsuspend, old_sigset_t, mask)
|
||||
{
|
||||
mask &= _BLOCKABLE;
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigset_t blocked;
|
||||
|
||||
current->saved_sigmask = current->blocked;
|
||||
siginitset(¤t->blocked, mask);
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
|
||||
mask &= _BLOCKABLE;
|
||||
siginitset(&blocked, mask);
|
||||
set_current_blocked(&blocked);
|
||||
|
||||
current->state = TASK_INTERRUPTIBLE;
|
||||
schedule();
|
||||
|
@ -238,10 +239,7 @@ do_sigreturn(struct sigcontext __user *sc, struct pt_regs *regs,
|
|||
goto give_sigsegv;
|
||||
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&set);
|
||||
|
||||
if (restore_sigcontext(sc, regs, sw))
|
||||
goto give_sigsegv;
|
||||
|
@ -276,10 +274,7 @@ do_rt_sigreturn(struct rt_sigframe __user *frame, struct pt_regs *regs,
|
|||
goto give_sigsegv;
|
||||
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&set);
|
||||
|
||||
if (restore_sigcontext(&frame->uc.uc_mcontext, regs, sw))
|
||||
goto give_sigsegv;
|
||||
|
@ -501,14 +496,8 @@ handle_signal(int sig, struct k_sigaction *ka, siginfo_t *info,
|
|||
else
|
||||
ret = setup_frame(sig, ka, oldset, regs, sw);
|
||||
|
||||
if (ret == 0) {
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask);
|
||||
if (!(ka->sa.sa_flags & SA_NODEFER))
|
||||
sigaddset(¤t->blocked,sig);
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
}
|
||||
if (ret == 0)
|
||||
block_sigmask(ka, sig);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -450,7 +450,7 @@ setup_smp(void)
|
|||
smp_num_probed = 1;
|
||||
}
|
||||
|
||||
printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_map = %lx\n",
|
||||
printk(KERN_INFO "SMP: %d CPUs probed -- cpu_present_mask = %lx\n",
|
||||
smp_num_probed, cpumask_bits(cpu_present_mask)[0]);
|
||||
}
|
||||
|
||||
|
|
|
@ -338,6 +338,7 @@ config ARCH_AT91
|
|||
select HAVE_CLK
|
||||
select CLKDEV_LOOKUP
|
||||
select IRQ_DOMAIN
|
||||
select NEED_MACH_IO_H if PCCARD
|
||||
help
|
||||
This enables support for systems based on the Atmel AT91RM9200,
|
||||
AT91SAM9 processors.
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
memory@20000000 {
|
||||
memory {
|
||||
reg = <0x20000000 0x08000000>;
|
||||
};
|
||||
|
||||
|
|
|
@ -37,8 +37,8 @@
|
|||
usb0: ohci@00600000 {
|
||||
status = "okay";
|
||||
num-ports = <2>;
|
||||
atmel,vbus-gpio = <&pioD 19 0
|
||||
&pioD 20 0
|
||||
atmel,vbus-gpio = <&pioD 19 1
|
||||
&pioD 20 1
|
||||
>;
|
||||
};
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
memory@70000000 {
|
||||
memory {
|
||||
reg = <0x70000000 0x10000000>;
|
||||
};
|
||||
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock1 rw rootfstype=jffs2";
|
||||
};
|
||||
|
||||
memory@70000000 {
|
||||
memory {
|
||||
reg = <0x70000000 0x4000000>;
|
||||
};
|
||||
|
||||
|
@ -73,8 +73,8 @@
|
|||
usb0: ohci@00700000 {
|
||||
status = "okay";
|
||||
num-ports = <2>;
|
||||
atmel,vbus-gpio = <&pioD 1 0
|
||||
&pioD 3 0>;
|
||||
atmel,vbus-gpio = <&pioD 1 1
|
||||
&pioD 3 1>;
|
||||
};
|
||||
|
||||
usb1: ehci@00800000 {
|
||||
|
|
|
@ -34,7 +34,7 @@
|
|||
};
|
||||
};
|
||||
|
||||
memory@20000000 {
|
||||
memory {
|
||||
reg = <0x20000000 0x10000000>;
|
||||
};
|
||||
|
||||
|
@ -201,8 +201,8 @@
|
|||
>;
|
||||
atmel,nand-addr-offset = <21>;
|
||||
atmel,nand-cmd-offset = <22>;
|
||||
gpios = <&pioC 8 0
|
||||
&pioC 14 0
|
||||
gpios = <&pioD 5 0
|
||||
&pioD 4 0
|
||||
0
|
||||
>;
|
||||
status = "disabled";
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
*/
|
||||
|
||||
/ {
|
||||
memory@20000000 {
|
||||
memory {
|
||||
reg = <0x20000000 0x8000000>;
|
||||
};
|
||||
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
bootargs = "mem=64M console=ttyS0,115200 root=/dev/mtdblock5 rw rootfstype=ubifs";
|
||||
};
|
||||
|
||||
memory@20000000 {
|
||||
memory {
|
||||
reg = <0x20000000 0x4000000>;
|
||||
};
|
||||
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define __ASM_BARRIER_H
|
||||
|
||||
#ifndef __ASSEMBLY__
|
||||
#include <asm/outercache.h>
|
||||
|
||||
#define nop() __asm__ __volatile__("mov\tr0,r0\t@ nop\n\t");
|
||||
|
||||
|
@ -39,7 +40,6 @@
|
|||
#ifdef CONFIG_ARCH_HAS_BARRIERS
|
||||
#include <mach/barriers.h>
|
||||
#elif defined(CONFIG_ARM_DMA_MEM_BUFFERABLE) || defined(CONFIG_SMP)
|
||||
#include <asm/outercache.h>
|
||||
#define mb() do { dsb(); outer_sync(); } while (0)
|
||||
#define rmb() dsb()
|
||||
#define wmb() mb()
|
||||
|
|
|
@ -119,7 +119,7 @@ static inline void __iomem *__typesafe_io(unsigned long addr)
|
|||
#ifdef CONFIG_NEED_MACH_IO_H
|
||||
#include <mach/io.h>
|
||||
#else
|
||||
#define __io(a) ({ (void)(a); __typesafe_io(0); })
|
||||
#define __io(a) __typesafe_io((a) & IO_SPACE_LIMIT)
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
|
|
@ -299,7 +299,6 @@ static inline int pdev_bad_for_parity(struct pci_dev *dev)
|
|||
*/
|
||||
void pcibios_fixup_bus(struct pci_bus *bus)
|
||||
{
|
||||
struct pci_sys_data *root = bus->sysdata;
|
||||
struct pci_dev *dev;
|
||||
u16 features = PCI_COMMAND_SERR | PCI_COMMAND_PARITY | PCI_COMMAND_FAST_BACK;
|
||||
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
#include <linux/bug.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <asm/opcodes.h>
|
||||
|
||||
|
|
|
@ -152,7 +152,7 @@ int __kprobes __arch_disarm_kprobe(void *p)
|
|||
|
||||
void __kprobes arch_disarm_kprobe(struct kprobe *p)
|
||||
{
|
||||
stop_machine(__arch_disarm_kprobe, p, &cpu_online_map);
|
||||
stop_machine(__arch_disarm_kprobe, p, cpu_online_mask);
|
||||
}
|
||||
|
||||
void __kprobes arch_remove_kprobe(struct kprobe *p)
|
||||
|
|
|
@ -256,7 +256,7 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
|
|||
{
|
||||
unsigned long tmp;
|
||||
|
||||
if (off & 3 || off >= sizeof(struct user))
|
||||
if (off & 3)
|
||||
return -EIO;
|
||||
|
||||
tmp = 0;
|
||||
|
@ -268,6 +268,8 @@ static int ptrace_read_user(struct task_struct *tsk, unsigned long off,
|
|||
tmp = tsk->mm->end_code;
|
||||
else if (off < sizeof(struct pt_regs))
|
||||
tmp = get_user_reg(tsk, off >> 2);
|
||||
else if (off >= sizeof(struct user))
|
||||
return -EIO;
|
||||
|
||||
return put_user(tmp, ret);
|
||||
}
|
||||
|
|
|
@ -349,7 +349,7 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
|||
* re-initialize the map in platform_smp_prepare_cpus() if
|
||||
* present != possible (e.g. physical hotplug).
|
||||
*/
|
||||
init_cpu_present(&cpu_possible_map);
|
||||
init_cpu_present(cpu_possible_mask);
|
||||
|
||||
/*
|
||||
* Initialise the SCU if there are more than one CPU
|
||||
|
@ -581,8 +581,9 @@ void smp_send_stop(void)
|
|||
unsigned long timeout;
|
||||
|
||||
if (num_online_cpus() > 1) {
|
||||
cpumask_t mask = cpu_online_map;
|
||||
cpu_clear(smp_processor_id(), mask);
|
||||
struct cpumask mask;
|
||||
cpumask_copy(&mask, cpu_online_mask);
|
||||
cpumask_clear_cpu(smp_processor_id(), &mask);
|
||||
|
||||
smp_cross_call(&mask, IPI_CPU_STOP);
|
||||
}
|
||||
|
|
|
@ -598,6 +598,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
|||
else
|
||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||
|
||||
if (!gpio_is_valid(cs_pin))
|
||||
continue;
|
||||
|
||||
if (devices[i].bus_num == 0)
|
||||
enable_spi0 = 1;
|
||||
else
|
||||
|
|
|
@ -415,6 +415,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
|||
else
|
||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||
|
||||
if (!gpio_is_valid(cs_pin))
|
||||
continue;
|
||||
|
||||
if (devices[i].bus_num == 0)
|
||||
enable_spi0 = 1;
|
||||
else
|
||||
|
|
|
@ -72,7 +72,8 @@ void __init at91_add_device_usbh(struct at91_usbh_data *data)
|
|||
/* Enable VBus control for UHP ports */
|
||||
for (i = 0; i < data->ports; i++) {
|
||||
if (gpio_is_valid(data->vbus_pin[i]))
|
||||
at91_set_gpio_output(data->vbus_pin[i], 0);
|
||||
at91_set_gpio_output(data->vbus_pin[i],
|
||||
data->vbus_pin_active_low[i]);
|
||||
}
|
||||
|
||||
/* Enable overcurrent notification */
|
||||
|
@ -671,6 +672,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
|||
else
|
||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||
|
||||
if (!gpio_is_valid(cs_pin))
|
||||
continue;
|
||||
|
||||
if (devices[i].bus_num == 0)
|
||||
enable_spi0 = 1;
|
||||
else
|
||||
|
|
|
@ -127,12 +127,13 @@ void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data)
|
|||
/* Enable VBus control for UHP ports */
|
||||
for (i = 0; i < data->ports; i++) {
|
||||
if (gpio_is_valid(data->vbus_pin[i]))
|
||||
at91_set_gpio_output(data->vbus_pin[i], 0);
|
||||
at91_set_gpio_output(data->vbus_pin[i],
|
||||
data->vbus_pin_active_low[i]);
|
||||
}
|
||||
|
||||
/* Enable overcurrent notification */
|
||||
for (i = 0; i < data->ports; i++) {
|
||||
if (data->overcurrent_pin[i])
|
||||
if (gpio_is_valid(data->overcurrent_pin[i]))
|
||||
at91_set_gpio_input(data->overcurrent_pin[i], 1);
|
||||
}
|
||||
|
||||
|
@ -188,7 +189,8 @@ void __init at91_add_device_usbh_ehci(struct at91_usbh_data *data)
|
|||
/* Enable VBus control for UHP ports */
|
||||
for (i = 0; i < data->ports; i++) {
|
||||
if (gpio_is_valid(data->vbus_pin[i]))
|
||||
at91_set_gpio_output(data->vbus_pin[i], 0);
|
||||
at91_set_gpio_output(data->vbus_pin[i],
|
||||
data->vbus_pin_active_low[i]);
|
||||
}
|
||||
|
||||
usbh_ehci_data = *data;
|
||||
|
@ -785,6 +787,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
|||
else
|
||||
cs_pin = spi1_standard_cs[devices[i].chip_select];
|
||||
|
||||
if (!gpio_is_valid(cs_pin))
|
||||
continue;
|
||||
|
||||
if (devices[i].bus_num == 0)
|
||||
enable_spi0 = 1;
|
||||
else
|
||||
|
|
|
@ -419,6 +419,9 @@ void __init at91_add_device_spi(struct spi_board_info *devices, int nr_devices)
|
|||
else
|
||||
cs_pin = spi_standard_cs[devices[i].chip_select];
|
||||
|
||||
if (!gpio_is_valid(cs_pin))
|
||||
continue;
|
||||
|
||||
/* enable chip-select pin */
|
||||
at91_set_gpio_output(cs_pin, 1);
|
||||
|
||||
|
|
|
@ -223,6 +223,8 @@ static struct clk_lookup periph_clocks_lookups[] = {
|
|||
CLKDEV_CON_DEV_ID("usart", "f8028000.serial", &usart3_clk),
|
||||
CLKDEV_CON_DEV_ID("t0_clk", "f8008000.timer", &tcb0_clk),
|
||||
CLKDEV_CON_DEV_ID("t0_clk", "f800c000.timer", &tcb0_clk),
|
||||
CLKDEV_CON_DEV_ID("dma_clk", "ffffec00.dma-controller", &dma0_clk),
|
||||
CLKDEV_CON_DEV_ID("dma_clk", "ffffee00.dma-controller", &dma1_clk),
|
||||
CLKDEV_CON_ID("pioA", &pioAB_clk),
|
||||
CLKDEV_CON_ID("pioB", &pioAB_clk),
|
||||
CLKDEV_CON_ID("pioC", &pioCD_clk),
|
||||
|
|
|
@ -74,6 +74,7 @@ static void __init ek_init_early(void)
|
|||
static struct at91_usbh_data __initdata ek_usbh_data = {
|
||||
.ports = 2,
|
||||
.vbus_pin = { AT91_PIN_PA24, AT91_PIN_PA21 },
|
||||
.vbus_pin_active_low = {1, 1},
|
||||
.overcurrent_pin= {-EINVAL, -EINVAL},
|
||||
};
|
||||
|
||||
|
|
|
@ -71,6 +71,7 @@ static void __init ek_init_early(void)
|
|||
static struct at91_usbh_data __initdata ek_usbh_hs_data = {
|
||||
.ports = 2,
|
||||
.vbus_pin = {AT91_PIN_PD1, AT91_PIN_PD3},
|
||||
.vbus_pin_active_low = {1, 1},
|
||||
.overcurrent_pin= {-EINVAL, -EINVAL},
|
||||
};
|
||||
|
||||
|
|
|
@ -86,14 +86,15 @@ extern void __init at91_add_device_mci(short mmc_id, struct mci_platform_data *d
|
|||
extern void __init at91_add_device_eth(struct macb_platform_data *data);
|
||||
|
||||
/* USB Host */
|
||||
#define AT91_MAX_USBH_PORTS 3
|
||||
struct at91_usbh_data {
|
||||
u8 ports; /* number of ports on root hub */
|
||||
int vbus_pin[2]; /* port power-control pin */
|
||||
u8 vbus_pin_active_low[2];
|
||||
int vbus_pin[AT91_MAX_USBH_PORTS]; /* port power-control pin */
|
||||
int overcurrent_pin[AT91_MAX_USBH_PORTS];
|
||||
u8 ports; /* number of ports on root hub */
|
||||
u8 overcurrent_supported;
|
||||
int overcurrent_pin[2];
|
||||
u8 overcurrent_status[2];
|
||||
u8 overcurrent_changed[2];
|
||||
u8 vbus_pin_active_low[AT91_MAX_USBH_PORTS];
|
||||
u8 overcurrent_status[AT91_MAX_USBH_PORTS];
|
||||
u8 overcurrent_changed[AT91_MAX_USBH_PORTS];
|
||||
};
|
||||
extern void __init at91_add_device_usbh(struct at91_usbh_data *data);
|
||||
extern void __init at91_add_device_usbh_ohci(struct at91_usbh_data *data);
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
/*
|
||||
* arch/arm/mach-at91/include/mach/io.h
|
||||
*
|
||||
* Copyright (C) 2003 SAN People
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_IO_H
|
||||
#define __ASM_ARCH_IO_H
|
||||
|
||||
#define IO_SPACE_LIMIT 0xFFFFFFFF
|
||||
#define __io(a) __typesafe_io(a)
|
||||
|
||||
#endif
|
|
@ -583,10 +583,11 @@ core_initcall(exynos_core_init);
|
|||
#ifdef CONFIG_CACHE_L2X0
|
||||
static int __init exynos4_l2x0_cache_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (soc_is_exynos5250())
|
||||
return 0;
|
||||
|
||||
int ret;
|
||||
ret = l2x0_of_init(L2_AUX_VAL, L2_AUX_MASK);
|
||||
if (!ret) {
|
||||
l2x0_regs_phys = virt_to_phys(&l2x0_saved_regs);
|
||||
|
|
|
@ -35,8 +35,6 @@
|
|||
#include <mach/irqs.h>
|
||||
#include <mach/dma.h>
|
||||
|
||||
static u64 dma_dmamask = DMA_BIT_MASK(32);
|
||||
|
||||
static u8 exynos4210_pdma0_peri[] = {
|
||||
DMACH_PCM0_RX,
|
||||
DMACH_PCM0_TX,
|
||||
|
|
|
@ -21,10 +21,9 @@
|
|||
*/
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
mov \rp, #0x10000000
|
||||
ldr \rp, [\rp, #0x0]
|
||||
and \rp, \rp, #0xf00000
|
||||
teq \rp, #0x500000 @@ EXYNOS5
|
||||
mrc p15, 0, \tmp, c0, c0, 0
|
||||
and \tmp, \tmp, #0xf0
|
||||
teq \tmp, #0xf0 @@ A15
|
||||
ldreq \rp, =EXYNOS5_PA_UART
|
||||
movne \rp, #EXYNOS4_PA_UART @@ EXYNOS4
|
||||
ldr \rv, =S3C_VA_UART
|
||||
|
|
|
@ -20,9 +20,24 @@ volatile u8 *uart_base;
|
|||
|
||||
#include <plat/uncompress.h>
|
||||
|
||||
static unsigned int __raw_readl(unsigned int ptr)
|
||||
{
|
||||
return *((volatile unsigned int *)ptr);
|
||||
}
|
||||
|
||||
static void arch_detect_cpu(void)
|
||||
{
|
||||
if (machine_is_smdk5250())
|
||||
u32 chip_id = __raw_readl(EXYNOS_PA_CHIPID);
|
||||
|
||||
/*
|
||||
* product_id is bits 31:12
|
||||
* bits 23:20 describe the exynosX family
|
||||
*
|
||||
*/
|
||||
chip_id >>= 20;
|
||||
chip_id &= 0xf;
|
||||
|
||||
if (chip_id == 0x5)
|
||||
uart_base = (volatile u8 *)EXYNOS5_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
||||
else
|
||||
uart_base = (volatile u8 *)EXYNOS4_PA_UART + (S3C_UART_OFFSET * CONFIG_S3C_LOWLEVEL_UART_PORT);
|
||||
|
|
|
@ -662,6 +662,7 @@ static struct clk_lookup lookups[] = {
|
|||
_REGISTER_CLOCK(NULL, "dma", dma_clk)
|
||||
_REGISTER_CLOCK(NULL, "rtic", rtic_clk)
|
||||
_REGISTER_CLOCK(NULL, "brom", brom_clk)
|
||||
_REGISTER_CLOCK(NULL, "emma", emma_clk)
|
||||
_REGISTER_CLOCK("m2m-emmaprp.0", NULL, emma_clk)
|
||||
_REGISTER_CLOCK(NULL, "slcdc", slcdc_clk)
|
||||
_REGISTER_CLOCK("imx27-fec.0", NULL, fec_clk)
|
||||
|
|
|
@ -483,7 +483,7 @@ static struct clk_lookup lookups[] = {
|
|||
_REGISTER_CLOCK("imx2-wdt.0", NULL, wdog_clk)
|
||||
_REGISTER_CLOCK(NULL, "max", max_clk)
|
||||
_REGISTER_CLOCK(NULL, "audmux", audmux_clk)
|
||||
_REGISTER_CLOCK(NULL, "csi", csi_clk)
|
||||
_REGISTER_CLOCK("mx3-camera.0", NULL, csi_clk)
|
||||
_REGISTER_CLOCK(NULL, "iim", iim_clk)
|
||||
_REGISTER_CLOCK(NULL, "gpu2d", gpu2d_clk)
|
||||
_REGISTER_CLOCK("mxc_nand.0", NULL, nfc_clk)
|
||||
|
|
|
@ -38,6 +38,8 @@
|
|||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -479,6 +481,11 @@ static struct platform_device *devices[] __initdata = {
|
|||
&armadillo5x0_smc911x_device,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
/*
|
||||
* Perform board specific initializations
|
||||
*/
|
||||
|
@ -489,6 +496,8 @@ static void __init armadillo5x0_init(void)
|
|||
mxc_iomux_setup_multiple_pins(armadillo5x0_pins,
|
||||
ARRAY_SIZE(armadillo5x0_pins), "armadillo5x0");
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
imx_add_gpio_keys(&armadillo5x0_button_data);
|
||||
imx31_add_imx_i2c1(NULL);
|
||||
|
|
|
@ -24,6 +24,8 @@
|
|||
#include <linux/serial_8250.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/types.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
@ -166,6 +168,11 @@ static struct platform_device kzm_smsc9118_device = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
static int __init kzm_init_smsc9118(void)
|
||||
{
|
||||
/*
|
||||
|
@ -175,6 +182,8 @@ static int __init kzm_init_smsc9118(void)
|
|||
gpio_request(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2), "smsc9118-int");
|
||||
gpio_direction_input(IOMUX_TO_GPIO(MX31_PIN_GPIO1_2));
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
return platform_device_register(&kzm_smsc9118_device);
|
||||
}
|
||||
#else
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
#include <linux/mfd/mc13783.h>
|
||||
#include <linux/usb/otg.h>
|
||||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -242,6 +244,11 @@ static struct platform_device *devices[] __initdata = {
|
|||
static int mx31lilly_baseboard;
|
||||
core_param(mx31lilly_baseboard, mx31lilly_baseboard, int, 0444);
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
static void __init mx31lilly_board_init(void)
|
||||
{
|
||||
imx31_soc_init();
|
||||
|
@ -280,6 +287,8 @@ static void __init mx31lilly_board_init(void)
|
|||
imx31_add_spi_imx1(&spi1_pdata);
|
||||
spi_register_board_info(&mc13783_dev, 1);
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
/* USB */
|
||||
|
|
|
@ -29,6 +29,8 @@
|
|||
#include <linux/usb/ulpi.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
@ -226,6 +228,11 @@ void __init mx31lite_map_io(void)
|
|||
static int mx31lite_baseboard;
|
||||
core_param(mx31lite_baseboard, mx31lite_baseboard, int, 0444);
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
static void __init mx31lite_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
@ -259,6 +266,8 @@ static void __init mx31lite_init(void)
|
|||
if (usbh2_pdata.otg)
|
||||
imx31_add_mxc_ehci_hs(2, &usbh2_pdata);
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
/* SMSC9117 IRQ pin */
|
||||
ret = gpio_request(IOMUX_TO_GPIO(MX31_PIN_SFS6), "sms9117-irq");
|
||||
if (ret)
|
||||
|
|
|
@ -97,7 +97,7 @@ static struct i2c_board_info __initdata i2c_devices_3ds[] = {
|
|||
static int lcd_power_gpio = -ENXIO;
|
||||
|
||||
static int mc9s08dz60_gpiochip_match(struct gpio_chip *chip,
|
||||
void *data)
|
||||
const void *data)
|
||||
{
|
||||
return !strcmp(chip->label, data);
|
||||
}
|
||||
|
|
|
@ -23,6 +23,8 @@
|
|||
#include <linux/delay.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/hardware.h>
|
||||
|
@ -214,6 +216,11 @@ static int weim_cs_config(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x"),
|
||||
};
|
||||
|
||||
void __init imx53_ard_common_init(void)
|
||||
{
|
||||
mxc_iomux_v3_setup_multiple_pads(mx53_ard_pads,
|
||||
|
@ -232,6 +239,7 @@ static void __init mx53_ard_board_init(void)
|
|||
|
||||
imx53_ard_common_init();
|
||||
mx53_ard_io_init();
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
imx53_add_sdhci_esdhc_imx(0, &mx53_ard_sd1_data);
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#ifndef __ASM_ARCH_MSM_UNCOMPRESS_H
|
||||
#define __ASM_ARCH_MSM_UNCOMPRESS_H
|
||||
|
||||
#include <asm/barrier.h>
|
||||
#include <asm/processor.h>
|
||||
#include <mach/msm_iomap.h>
|
||||
|
||||
|
|
|
@ -203,15 +203,9 @@ static ssize_t debug_read(struct file *file, char __user *buf,
|
|||
return simple_read_from_buffer(buf, count, ppos, debug_buffer, bsize);
|
||||
}
|
||||
|
||||
static int debug_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
file->private_data = inode->i_private;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct file_operations debug_ops = {
|
||||
.read = debug_read,
|
||||
.open = debug_open,
|
||||
.open = simple_open,
|
||||
.llseek = default_llseek,
|
||||
};
|
||||
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
* arch/arm/mach-omap1/include/mach/io.h
|
||||
*
|
||||
* IO definitions for TI OMAP processors and boards
|
||||
*
|
||||
* Copied from arch/arm/mach-sa1100/include/mach/io.h
|
||||
* Copyright (C) 1997-1999 Russell King
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the
|
||||
* Free Software Foundation; either version 2 of the License, or (at your
|
||||
* option) any later version.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
|
||||
* NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
||||
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
||||
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*
|
||||
* Modifications:
|
||||
* 06-12-1997 RMK Created.
|
||||
* 07-04-1999 RMK Major cleanup
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARM_ARCH_IO_H
|
||||
#define __ASM_ARM_ARCH_IO_H
|
||||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
|
||||
/*
|
||||
* We don't actually have real ISA nor PCI buses, but there is so many
|
||||
* drivers out there that might just work if we fake them...
|
||||
*/
|
||||
#define __io(a) __typesafe_io(a)
|
||||
|
||||
#endif
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/mmc/host.h>
|
||||
|
||||
|
@ -81,8 +82,23 @@ static struct omap_smsc911x_platform_data sb_t35_smsc911x_cfg = {
|
|||
.flags = SMSC911X_USE_32BIT | SMSC911X_SAVE_MAC_ADDRESS,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply cm_t35_smsc911x_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply sb_t35_smsc911x_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.1"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.1"),
|
||||
};
|
||||
|
||||
static void __init cm_t35_init_ethernet(void)
|
||||
{
|
||||
regulator_register_fixed(0, cm_t35_smsc911x_supplies,
|
||||
ARRAY_SIZE(cm_t35_smsc911x_supplies));
|
||||
regulator_register_fixed(1, sb_t35_smsc911x_supplies,
|
||||
ARRAY_SIZE(sb_t35_smsc911x_supplies));
|
||||
|
||||
gpmc_smsc911x_init(&cm_t35_smsc911x_cfg);
|
||||
gpmc_smsc911x_init(&sb_t35_smsc911x_cfg);
|
||||
}
|
||||
|
|
|
@ -634,8 +634,14 @@ static void __init igep_wlan_bt_init(void)
|
|||
static inline void __init igep_wlan_bt_init(void) { }
|
||||
#endif
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
static void __init igep_init(void)
|
||||
{
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
|
||||
/* Get IGEP2 hardware revision */
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include <linux/err.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/io.h>
|
||||
|
@ -410,8 +411,14 @@ static struct mtd_partition ldp_nand_partitions[] = {
|
|||
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
static void __init omap_ldp_init(void)
|
||||
{
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
ldp_init_smsc911x();
|
||||
omap_i2c_init();
|
||||
|
|
|
@ -114,15 +114,6 @@ static struct omap_smsc911x_platform_data smsc911x_cfg = {
|
|||
|
||||
static inline void __init omap3evm_init_smsc911x(void)
|
||||
{
|
||||
struct clk *l3ck;
|
||||
unsigned int rate;
|
||||
|
||||
l3ck = clk_get(NULL, "l3_ck");
|
||||
if (IS_ERR(l3ck))
|
||||
rate = 100000000;
|
||||
else
|
||||
rate = clk_get_rate(l3ck);
|
||||
|
||||
/* Configure ethernet controller reset gpio */
|
||||
if (cpu_is_omap3430()) {
|
||||
if (get_omap3_evm_rev() == OMAP3EVM_BOARD_GEN_1)
|
||||
|
@ -632,9 +623,15 @@ static void __init omap3_evm_wl12xx_init(void)
|
|||
#endif
|
||||
}
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
static void __init omap3_evm_init(void)
|
||||
{
|
||||
omap3_evm_get_revision();
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
|
||||
if (cpu_is_omap3630())
|
||||
omap3_mux_init(omap36x_board_mux, OMAP_PACKAGE_CBB);
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <linux/i2c/twl.h>
|
||||
|
@ -188,8 +189,14 @@ static struct omap_board_mux board_mux[] __initdata = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
static void __init omap3logic_init(void)
|
||||
{
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
omap3torpedo_fix_pbias_voltage();
|
||||
omap3logic_i2c_init();
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
#include <linux/input.h>
|
||||
#include <linux/gpio_keys.h>
|
||||
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
#include <linux/i2c/twl.h>
|
||||
#include <linux/mmc/host.h>
|
||||
|
@ -72,15 +73,6 @@ static struct omap_smsc911x_platform_data smsc911x_cfg = {
|
|||
|
||||
static inline void __init omap3stalker_init_eth(void)
|
||||
{
|
||||
struct clk *l3ck;
|
||||
unsigned int rate;
|
||||
|
||||
l3ck = clk_get(NULL, "l3_ck");
|
||||
if (IS_ERR(l3ck))
|
||||
rate = 100000000;
|
||||
else
|
||||
rate = clk_get_rate(l3ck);
|
||||
|
||||
omap_mux_init_gpio(19, OMAP_PIN_INPUT_PULLUP);
|
||||
gpmc_smsc911x_init(&smsc911x_cfg);
|
||||
}
|
||||
|
@ -419,8 +411,14 @@ static struct omap_board_mux board_mux[] __initdata = {
|
|||
};
|
||||
#endif
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
static void __init omap3_stalker_init(void)
|
||||
{
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CUS);
|
||||
omap_board_config = omap3_stalker_config;
|
||||
omap_board_config_size = ARRAY_SIZE(omap3_stalker_config);
|
||||
|
|
|
@ -498,10 +498,18 @@ static struct gpio overo_bt_gpios[] __initdata = {
|
|||
{ OVERO_GPIO_BT_NRESET, GPIOF_OUT_INIT_HIGH, "lcd bl enable" },
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.1"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.1"),
|
||||
};
|
||||
|
||||
static void __init overo_init(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
omap3_mux_init(board_mux, OMAP_PACKAGE_CBB);
|
||||
omap_hsmmc_init(mmc);
|
||||
overo_i2c_init();
|
||||
|
|
|
@ -14,6 +14,9 @@
|
|||
#include <linux/smsc911x.h>
|
||||
#include <linux/interrupt.h>
|
||||
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <plat/gpmc.h>
|
||||
#include <plat/gpmc-smsc911x.h>
|
||||
|
||||
|
@ -117,11 +120,17 @@ static struct platform_device *zoom_devices[] __initdata = {
|
|||
&zoom_debugboard_serial_device,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply dummy_supplies[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
int __init zoom_debugboard_init(void)
|
||||
{
|
||||
if (!omap_zoom_debugboard_detect())
|
||||
return 0;
|
||||
|
||||
regulator_register_fixed(0, dummy_supplies, ARRAY_SIZE(dummy_supplies));
|
||||
zoom_init_smsc911x();
|
||||
zoom_init_quaduart();
|
||||
return platform_add_devices(zoom_devices, ARRAY_SIZE(zoom_devices));
|
||||
|
|
|
@ -747,7 +747,7 @@ static struct clk dpll4_m3_ck = {
|
|||
.parent = &dpll4_ck,
|
||||
.init = &omap2_init_clksel_parent,
|
||||
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
|
||||
.clksel_mask = OMAP3430_CLKSEL_TV_MASK,
|
||||
.clksel_mask = OMAP3630_CLKSEL_TV_MASK,
|
||||
.clksel = dpll4_clksel,
|
||||
.clkdm_name = "dpll4_clkdm",
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
|
@ -832,7 +832,7 @@ static struct clk dpll4_m4_ck = {
|
|||
.parent = &dpll4_ck,
|
||||
.init = &omap2_init_clksel_parent,
|
||||
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_DSS_MOD, CM_CLKSEL),
|
||||
.clksel_mask = OMAP3430_CLKSEL_DSS1_MASK,
|
||||
.clksel_mask = OMAP3630_CLKSEL_DSS1_MASK,
|
||||
.clksel = dpll4_clksel,
|
||||
.clkdm_name = "dpll4_clkdm",
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
|
@ -859,7 +859,7 @@ static struct clk dpll4_m5_ck = {
|
|||
.parent = &dpll4_ck,
|
||||
.init = &omap2_init_clksel_parent,
|
||||
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_CAM_MOD, CM_CLKSEL),
|
||||
.clksel_mask = OMAP3430_CLKSEL_CAM_MASK,
|
||||
.clksel_mask = OMAP3630_CLKSEL_CAM_MASK,
|
||||
.clksel = dpll4_clksel,
|
||||
.clkdm_name = "dpll4_clkdm",
|
||||
.set_rate = &omap2_clksel_set_rate,
|
||||
|
@ -886,7 +886,7 @@ static struct clk dpll4_m6_ck = {
|
|||
.parent = &dpll4_ck,
|
||||
.init = &omap2_init_clksel_parent,
|
||||
.clksel_reg = OMAP_CM_REGADDR(OMAP3430_EMU_MOD, CM_CLKSEL1),
|
||||
.clksel_mask = OMAP3430_DIV_DPLL4_MASK,
|
||||
.clksel_mask = OMAP3630_DIV_DPLL4_MASK,
|
||||
.clksel = dpll4_clksel,
|
||||
.clkdm_name = "dpll4_clkdm",
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
|
@ -1394,6 +1394,7 @@ static struct clk cpefuse_fck = {
|
|||
.name = "cpefuse_fck",
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &sys_ck,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
|
||||
.enable_bit = OMAP3430ES2_EN_CPEFUSE_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
|
@ -1403,6 +1404,7 @@ static struct clk ts_fck = {
|
|||
.name = "ts_fck",
|
||||
.ops = &clkops_omap2_dflt,
|
||||
.parent = &omap_32k_fck,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
|
||||
.enable_bit = OMAP3430ES2_EN_TS_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
|
@ -1412,6 +1414,7 @@ static struct clk usbtll_fck = {
|
|||
.name = "usbtll_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &dpll5_m2_ck,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, OMAP3430ES2_CM_FCLKEN3),
|
||||
.enable_bit = OMAP3430ES2_EN_USBTLL_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
|
@ -1617,6 +1620,7 @@ static struct clk fshostusb_fck = {
|
|||
.name = "fshostusb_fck",
|
||||
.ops = &clkops_omap2_dflt_wait,
|
||||
.parent = &core_48m_fck,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_FCLKEN1),
|
||||
.enable_bit = OMAP3430ES1_EN_FSHOSTUSB_SHIFT,
|
||||
.recalc = &followparent_recalc,
|
||||
|
@ -2043,6 +2047,7 @@ static struct clk omapctrl_ick = {
|
|||
.enable_reg = OMAP_CM_REGADDR(CORE_MOD, CM_ICLKEN1),
|
||||
.enable_bit = OMAP3430_EN_OMAPCTRL_SHIFT,
|
||||
.flags = ENABLE_ON_INIT,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.recalc = &followparent_recalc,
|
||||
};
|
||||
|
||||
|
@ -2094,6 +2099,7 @@ static struct clk usb_l4_ick = {
|
|||
.clksel_reg = OMAP_CM_REGADDR(CORE_MOD, CM_CLKSEL),
|
||||
.clksel_mask = OMAP3430ES1_CLKSEL_FSHOSTUSB_MASK,
|
||||
.clksel = usb_l4_clksel,
|
||||
.clkdm_name = "core_l4_clkdm",
|
||||
.recalc = &omap2_clksel_recalc,
|
||||
};
|
||||
|
||||
|
@ -3467,8 +3473,8 @@ static struct omap_clk omap3xxx_clks[] = {
|
|||
CLK(NULL, "ipss_ick", &ipss_ick, CK_AM35XX),
|
||||
CLK(NULL, "rmii_ck", &rmii_ck, CK_AM35XX),
|
||||
CLK(NULL, "pclk_ck", &pclk_ck, CK_AM35XX),
|
||||
CLK("davinci_emac", "emac_clk", &emac_ick, CK_AM35XX),
|
||||
CLK("davinci_emac", "phy_clk", &emac_fck, CK_AM35XX),
|
||||
CLK("davinci_emac", NULL, &emac_ick, CK_AM35XX),
|
||||
CLK("davinci_mdio.0", NULL, &emac_fck, CK_AM35XX),
|
||||
CLK("vpfe-capture", "master", &vpfe_ick, CK_AM35XX),
|
||||
CLK("vpfe-capture", "slave", &vpfe_fck, CK_AM35XX),
|
||||
CLK("musb-am35x", "ick", &hsotgusb_ick_am35xx, CK_AM35XX),
|
||||
|
|
|
@ -957,8 +957,8 @@ static struct dpll_data dpll_usb_dd = {
|
|||
.modes = (1 << DPLL_LOW_POWER_BYPASS) | (1 << DPLL_LOCKED),
|
||||
.autoidle_reg = OMAP4430_CM_AUTOIDLE_DPLL_USB,
|
||||
.idlest_reg = OMAP4430_CM_IDLEST_DPLL_USB,
|
||||
.mult_mask = OMAP4430_DPLL_MULT_MASK,
|
||||
.div1_mask = OMAP4430_DPLL_DIV_MASK,
|
||||
.mult_mask = OMAP4430_DPLL_MULT_USB_MASK,
|
||||
.div1_mask = OMAP4430_DPLL_DIV_0_7_MASK,
|
||||
.enable_mask = OMAP4430_DPLL_EN_MASK,
|
||||
.autoidle_mask = OMAP4430_AUTO_DPLL_MODE_MASK,
|
||||
.idlest_mask = OMAP4430_ST_DPLL_CLK_MASK,
|
||||
|
@ -978,6 +978,7 @@ static struct clk dpll_usb_ck = {
|
|||
.recalc = &omap3_dpll_recalc,
|
||||
.round_rate = &omap2_dpll_round_rate,
|
||||
.set_rate = &omap3_noncore_dpll_set_rate,
|
||||
.clkdm_name = "l3_init_clkdm",
|
||||
};
|
||||
|
||||
static struct clk dpll_usb_clkdcoldo_ck = {
|
||||
|
|
|
@ -390,7 +390,7 @@ static struct clockdomain emu_sys_44xx_clkdm = {
|
|||
.prcm_partition = OMAP4430_PRM_PARTITION,
|
||||
.cm_inst = OMAP4430_PRM_EMU_CM_INST,
|
||||
.clkdm_offs = OMAP4430_PRM_EMU_CM_EMU_CDOFFS,
|
||||
.flags = CLKDM_CAN_HWSUP,
|
||||
.flags = CLKDM_CAN_ENABLE_AUTO | CLKDM_CAN_FORCE_WAKEUP,
|
||||
};
|
||||
|
||||
static struct clockdomain l3_dma_44xx_clkdm = {
|
||||
|
|
|
@ -19,15 +19,11 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/regulator/fixed.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <plat/board.h>
|
||||
#include <plat/gpmc.h>
|
||||
#include <plat/gpmc-smsc911x.h>
|
||||
|
||||
static struct omap_smsc911x_platform_data *gpmc_cfg;
|
||||
|
||||
static struct resource gpmc_smsc911x_resources[] = {
|
||||
[0] = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
|
@ -41,51 +37,6 @@ static struct smsc911x_platform_config gpmc_smsc911x_config = {
|
|||
.phy_interface = PHY_INTERFACE_MODE_MII,
|
||||
.irq_polarity = SMSC911X_IRQ_POLARITY_ACTIVE_LOW,
|
||||
.irq_type = SMSC911X_IRQ_TYPE_OPEN_DRAIN,
|
||||
.flags = SMSC911X_USE_16BIT,
|
||||
};
|
||||
|
||||
static struct regulator_consumer_supply gpmc_smsc911x_supply[] = {
|
||||
REGULATOR_SUPPLY("vddvario", "smsc911x.0"),
|
||||
REGULATOR_SUPPLY("vdd33a", "smsc911x.0"),
|
||||
};
|
||||
|
||||
/* Generic regulator definition to satisfy smsc911x */
|
||||
static struct regulator_init_data gpmc_smsc911x_reg_init_data = {
|
||||
.constraints = {
|
||||
.min_uV = 3300000,
|
||||
.max_uV = 3300000,
|
||||
.valid_modes_mask = REGULATOR_MODE_NORMAL
|
||||
| REGULATOR_MODE_STANDBY,
|
||||
.valid_ops_mask = REGULATOR_CHANGE_MODE
|
||||
| REGULATOR_CHANGE_STATUS,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(gpmc_smsc911x_supply),
|
||||
.consumer_supplies = gpmc_smsc911x_supply,
|
||||
};
|
||||
|
||||
static struct fixed_voltage_config gpmc_smsc911x_fixed_reg_data = {
|
||||
.supply_name = "gpmc_smsc911x",
|
||||
.microvolts = 3300000,
|
||||
.gpio = -EINVAL,
|
||||
.startup_delay = 0,
|
||||
.enable_high = 0,
|
||||
.enabled_at_boot = 1,
|
||||
.init_data = &gpmc_smsc911x_reg_init_data,
|
||||
};
|
||||
|
||||
/*
|
||||
* Platform device id of 42 is a temporary fix to avoid conflicts
|
||||
* with other reg-fixed-voltage devices. The real fix should
|
||||
* involve the driver core providing a way of dynamically
|
||||
* assigning a unique id on registration for platform devices
|
||||
* in the same name space.
|
||||
*/
|
||||
static struct platform_device gpmc_smsc911x_regulator = {
|
||||
.name = "reg-fixed-voltage",
|
||||
.id = 42,
|
||||
.dev = {
|
||||
.platform_data = &gpmc_smsc911x_fixed_reg_data,
|
||||
},
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -93,23 +44,12 @@ static struct platform_device gpmc_smsc911x_regulator = {
|
|||
* assume that pin multiplexing is done in the board-*.c file,
|
||||
* or in the bootloader.
|
||||
*/
|
||||
void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data)
|
||||
void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *gpmc_cfg)
|
||||
{
|
||||
struct platform_device *pdev;
|
||||
unsigned long cs_mem_base;
|
||||
int ret;
|
||||
|
||||
gpmc_cfg = board_data;
|
||||
|
||||
if (!gpmc_cfg->id) {
|
||||
ret = platform_device_register(&gpmc_smsc911x_regulator);
|
||||
if (ret < 0) {
|
||||
pr_err("Unable to register smsc911x regulators: %d\n",
|
||||
ret);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (gpmc_cs_request(gpmc_cfg->cs, SZ_16M, &cs_mem_base) < 0) {
|
||||
pr_err("Failed to request GPMC mem region\n");
|
||||
return;
|
||||
|
@ -139,8 +79,7 @@ void __init gpmc_smsc911x_init(struct omap_smsc911x_platform_data *board_data)
|
|||
gpio_set_value(gpmc_cfg->gpio_reset, 1);
|
||||
}
|
||||
|
||||
if (gpmc_cfg->flags)
|
||||
gpmc_smsc911x_config.flags = gpmc_cfg->flags;
|
||||
gpmc_smsc911x_config.flags = gpmc_cfg->flags ? : SMSC911X_USE_16BIT;
|
||||
|
||||
pdev = platform_device_register_resndata(NULL, "smsc911x", gpmc_cfg->id,
|
||||
gpmc_smsc911x_resources, ARRAY_SIZE(gpmc_smsc911x_resources),
|
||||
|
|
|
@ -506,6 +506,13 @@ static void __init omap_hsmmc_init_one(struct omap2_hsmmc_info *hsmmcinfo,
|
|||
if (oh->dev_attr != NULL) {
|
||||
mmc_dev_attr = oh->dev_attr;
|
||||
mmc_data->controller_flags = mmc_dev_attr->flags;
|
||||
/*
|
||||
* erratum 2.1.1.128 doesn't apply if board has
|
||||
* a transceiver is attached
|
||||
*/
|
||||
if (hsmmcinfo->transceiver)
|
||||
mmc_data->controller_flags &=
|
||||
~OMAP_HSMMC_BROKEN_MULTIBLOCK_READ;
|
||||
}
|
||||
|
||||
pdev = platform_device_alloc(name, ctrl_nr - 1);
|
||||
|
|
|
@ -22,6 +22,8 @@
|
|||
#ifndef __MACH_BARRIERS_H
|
||||
#define __MACH_BARRIERS_H
|
||||
|
||||
#include <asm/outercache.h>
|
||||
|
||||
extern void omap_bus_sync(void);
|
||||
|
||||
#define rmb() dsb()
|
||||
|
|
|
@ -1395,7 +1395,7 @@ static int _read_hardreset(struct omap_hwmod *oh, const char *name)
|
|||
*/
|
||||
static int _ocp_softreset(struct omap_hwmod *oh)
|
||||
{
|
||||
u32 v;
|
||||
u32 v, softrst_mask;
|
||||
int c = 0;
|
||||
int ret = 0;
|
||||
|
||||
|
@ -1427,11 +1427,13 @@ static int _ocp_softreset(struct omap_hwmod *oh)
|
|||
oh->class->sysc->syss_offs)
|
||||
& SYSS_RESETDONE_MASK),
|
||||
MAX_MODULE_SOFTRESET_WAIT, c);
|
||||
else if (oh->class->sysc->sysc_flags & SYSC_HAS_RESET_STATUS)
|
||||
else if (oh->class->sysc->sysc_flags & SYSC_HAS_RESET_STATUS) {
|
||||
softrst_mask = (0x1 << oh->class->sysc->sysc_fields->srst_shift);
|
||||
omap_test_timeout(!(omap_hwmod_read(oh,
|
||||
oh->class->sysc->sysc_offs)
|
||||
& SYSC_TYPE2_SOFTRESET_MASK),
|
||||
& softrst_mask),
|
||||
MAX_MODULE_SOFTRESET_WAIT, c);
|
||||
}
|
||||
|
||||
if (c == MAX_MODULE_SOFTRESET_WAIT)
|
||||
pr_warning("omap_hwmod: %s: softreset failed (waited %d usec)\n",
|
||||
|
@ -1477,6 +1479,11 @@ static int _reset(struct omap_hwmod *oh)
|
|||
|
||||
ret = (oh->class->reset) ? oh->class->reset(oh) : _ocp_softreset(oh);
|
||||
|
||||
if (oh->class->sysc) {
|
||||
_update_sysc_cache(oh);
|
||||
_enable_sysc(oh);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1786,20 +1793,9 @@ static int _setup(struct omap_hwmod *oh, void *data)
|
|||
return 0;
|
||||
}
|
||||
|
||||
if (!(oh->flags & HWMOD_INIT_NO_RESET)) {
|
||||
if (!(oh->flags & HWMOD_INIT_NO_RESET))
|
||||
_reset(oh);
|
||||
|
||||
/*
|
||||
* OCP_SYSCONFIG bits need to be reprogrammed after a softreset.
|
||||
* The _enable() function should be split to
|
||||
* avoid the rewrite of the OCP_SYSCONFIG register.
|
||||
*/
|
||||
if (oh->class->sysc) {
|
||||
_update_sysc_cache(oh);
|
||||
_enable_sysc(oh);
|
||||
}
|
||||
}
|
||||
|
||||
postsetup_state = oh->_postsetup_state;
|
||||
if (postsetup_state == _HWMOD_STATE_UNKNOWN)
|
||||
postsetup_state = _HWMOD_STATE_ENABLED;
|
||||
|
@ -1907,20 +1903,10 @@ void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs)
|
|||
*/
|
||||
int omap_hwmod_softreset(struct omap_hwmod *oh)
|
||||
{
|
||||
u32 v;
|
||||
int ret;
|
||||
|
||||
if (!oh || !(oh->_sysc_cache))
|
||||
if (!oh)
|
||||
return -EINVAL;
|
||||
|
||||
v = oh->_sysc_cache;
|
||||
ret = _set_softreset(oh, &v);
|
||||
if (ret)
|
||||
goto error;
|
||||
_write_sysconfig(v, oh);
|
||||
|
||||
error:
|
||||
return ret;
|
||||
return _ocp_softreset(oh);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -2463,26 +2449,28 @@ int omap_hwmod_del_initiator_dep(struct omap_hwmod *oh,
|
|||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Sets the module OCP socket ENAWAKEUP bit to allow the module to
|
||||
* send wakeups to the PRCM. Eventually this should sets PRCM wakeup
|
||||
* registers to cause the PRCM to receive wakeup events from the
|
||||
* module. Does not set any wakeup routing registers beyond this
|
||||
* point - if the module is to wake up any other module or subsystem,
|
||||
* that must be set separately. Called by omap_device code. Returns
|
||||
* -EINVAL on error or 0 upon success.
|
||||
* send wakeups to the PRCM, and enable I/O ring wakeup events for
|
||||
* this IP block if it has dynamic mux entries. Eventually this
|
||||
* should set PRCM wakeup registers to cause the PRCM to receive
|
||||
* wakeup events from the module. Does not set any wakeup routing
|
||||
* registers beyond this point - if the module is to wake up any other
|
||||
* module or subsystem, that must be set separately. Called by
|
||||
* omap_device code. Returns -EINVAL on error or 0 upon success.
|
||||
*/
|
||||
int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 v;
|
||||
|
||||
if (!oh->class->sysc ||
|
||||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
v = oh->_sysc_cache;
|
||||
_enable_wakeup(oh, &v);
|
||||
_write_sysconfig(v, oh);
|
||||
|
||||
if (oh->class->sysc &&
|
||||
(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) {
|
||||
v = oh->_sysc_cache;
|
||||
_enable_wakeup(oh, &v);
|
||||
_write_sysconfig(v, oh);
|
||||
}
|
||||
|
||||
_set_idle_ioring_wakeup(oh, true);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
|
@ -2494,26 +2482,28 @@ int omap_hwmod_enable_wakeup(struct omap_hwmod *oh)
|
|||
* @oh: struct omap_hwmod *
|
||||
*
|
||||
* Clears the module OCP socket ENAWAKEUP bit to prevent the module
|
||||
* from sending wakeups to the PRCM. Eventually this should clear
|
||||
* PRCM wakeup registers to cause the PRCM to ignore wakeup events
|
||||
* from the module. Does not set any wakeup routing registers beyond
|
||||
* this point - if the module is to wake up any other module or
|
||||
* subsystem, that must be set separately. Called by omap_device
|
||||
* code. Returns -EINVAL on error or 0 upon success.
|
||||
* from sending wakeups to the PRCM, and disable I/O ring wakeup
|
||||
* events for this IP block if it has dynamic mux entries. Eventually
|
||||
* this should clear PRCM wakeup registers to cause the PRCM to ignore
|
||||
* wakeup events from the module. Does not set any wakeup routing
|
||||
* registers beyond this point - if the module is to wake up any other
|
||||
* module or subsystem, that must be set separately. Called by
|
||||
* omap_device code. Returns -EINVAL on error or 0 upon success.
|
||||
*/
|
||||
int omap_hwmod_disable_wakeup(struct omap_hwmod *oh)
|
||||
{
|
||||
unsigned long flags;
|
||||
u32 v;
|
||||
|
||||
if (!oh->class->sysc ||
|
||||
!(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP))
|
||||
return -EINVAL;
|
||||
|
||||
spin_lock_irqsave(&oh->_lock, flags);
|
||||
v = oh->_sysc_cache;
|
||||
_disable_wakeup(oh, &v);
|
||||
_write_sysconfig(v, oh);
|
||||
|
||||
if (oh->class->sysc &&
|
||||
(oh->class->sysc->sysc_flags & SYSC_HAS_ENAWAKEUP)) {
|
||||
v = oh->_sysc_cache;
|
||||
_disable_wakeup(oh, &v);
|
||||
_write_sysconfig(v, oh);
|
||||
}
|
||||
|
||||
_set_idle_ioring_wakeup(oh, false);
|
||||
spin_unlock_irqrestore(&oh->_lock, flags);
|
||||
|
||||
|
|
|
@ -2996,6 +2996,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp1_slaves[] = {
|
|||
&omap44xx_l4_abe__mcbsp1_dma,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_opt_clk mcbsp1_opt_clks[] = {
|
||||
{ .role = "pad_fck", .clk = "pad_clks_ck" },
|
||||
{ .role = "prcm_clk", .clk = "mcbsp1_sync_mux_ck" },
|
||||
};
|
||||
|
||||
static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
|
||||
.name = "mcbsp1",
|
||||
.class = &omap44xx_mcbsp_hwmod_class,
|
||||
|
@ -3012,6 +3017,8 @@ static struct omap_hwmod omap44xx_mcbsp1_hwmod = {
|
|||
},
|
||||
.slaves = omap44xx_mcbsp1_slaves,
|
||||
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp1_slaves),
|
||||
.opt_clks = mcbsp1_opt_clks,
|
||||
.opt_clks_cnt = ARRAY_SIZE(mcbsp1_opt_clks),
|
||||
};
|
||||
|
||||
/* mcbsp2 */
|
||||
|
@ -3071,6 +3078,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp2_slaves[] = {
|
|||
&omap44xx_l4_abe__mcbsp2_dma,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_opt_clk mcbsp2_opt_clks[] = {
|
||||
{ .role = "pad_fck", .clk = "pad_clks_ck" },
|
||||
{ .role = "prcm_clk", .clk = "mcbsp2_sync_mux_ck" },
|
||||
};
|
||||
|
||||
static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
|
||||
.name = "mcbsp2",
|
||||
.class = &omap44xx_mcbsp_hwmod_class,
|
||||
|
@ -3087,6 +3099,8 @@ static struct omap_hwmod omap44xx_mcbsp2_hwmod = {
|
|||
},
|
||||
.slaves = omap44xx_mcbsp2_slaves,
|
||||
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp2_slaves),
|
||||
.opt_clks = mcbsp2_opt_clks,
|
||||
.opt_clks_cnt = ARRAY_SIZE(mcbsp2_opt_clks),
|
||||
};
|
||||
|
||||
/* mcbsp3 */
|
||||
|
@ -3146,6 +3160,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp3_slaves[] = {
|
|||
&omap44xx_l4_abe__mcbsp3_dma,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_opt_clk mcbsp3_opt_clks[] = {
|
||||
{ .role = "pad_fck", .clk = "pad_clks_ck" },
|
||||
{ .role = "prcm_clk", .clk = "mcbsp3_sync_mux_ck" },
|
||||
};
|
||||
|
||||
static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
|
||||
.name = "mcbsp3",
|
||||
.class = &omap44xx_mcbsp_hwmod_class,
|
||||
|
@ -3162,6 +3181,8 @@ static struct omap_hwmod omap44xx_mcbsp3_hwmod = {
|
|||
},
|
||||
.slaves = omap44xx_mcbsp3_slaves,
|
||||
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp3_slaves),
|
||||
.opt_clks = mcbsp3_opt_clks,
|
||||
.opt_clks_cnt = ARRAY_SIZE(mcbsp3_opt_clks),
|
||||
};
|
||||
|
||||
/* mcbsp4 */
|
||||
|
@ -3200,6 +3221,11 @@ static struct omap_hwmod_ocp_if *omap44xx_mcbsp4_slaves[] = {
|
|||
&omap44xx_l4_per__mcbsp4,
|
||||
};
|
||||
|
||||
static struct omap_hwmod_opt_clk mcbsp4_opt_clks[] = {
|
||||
{ .role = "pad_fck", .clk = "pad_clks_ck" },
|
||||
{ .role = "prcm_clk", .clk = "mcbsp4_sync_mux_ck" },
|
||||
};
|
||||
|
||||
static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
|
||||
.name = "mcbsp4",
|
||||
.class = &omap44xx_mcbsp_hwmod_class,
|
||||
|
@ -3216,6 +3242,8 @@ static struct omap_hwmod omap44xx_mcbsp4_hwmod = {
|
|||
},
|
||||
.slaves = omap44xx_mcbsp4_slaves,
|
||||
.slaves_cnt = ARRAY_SIZE(omap44xx_mcbsp4_slaves),
|
||||
.opt_clks = mcbsp4_opt_clks,
|
||||
.opt_clks_cnt = ARRAY_SIZE(mcbsp4_opt_clks),
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
|
@ -64,10 +64,10 @@ int __init omap_init_opp_table(struct omap_opp_def *opp_def,
|
|||
}
|
||||
oh = omap_hwmod_lookup(opp_def->hwmod_name);
|
||||
if (!oh || !oh->od) {
|
||||
pr_warn("%s: no hwmod or odev for %s, [%d] "
|
||||
pr_debug("%s: no hwmod or odev for %s, [%d] "
|
||||
"cannot add OPPs.\n", __func__,
|
||||
opp_def->hwmod_name, i);
|
||||
return -EINVAL;
|
||||
continue;
|
||||
}
|
||||
dev = &oh->od->pdev->dev;
|
||||
|
||||
|
|
|
@ -153,8 +153,7 @@ static void omap3_save_secure_ram_context(void)
|
|||
pwrdm_set_next_pwrst(mpu_pwrdm, mpu_next_state);
|
||||
/* Following is for error tracking, it should not happen */
|
||||
if (ret) {
|
||||
printk(KERN_ERR "save_secure_sram() returns %08x\n",
|
||||
ret);
|
||||
pr_err("save_secure_sram() returns %08x\n", ret);
|
||||
while (1)
|
||||
;
|
||||
}
|
||||
|
@ -289,7 +288,7 @@ void omap_sram_idle(void)
|
|||
break;
|
||||
default:
|
||||
/* Invalid state */
|
||||
printk(KERN_ERR "Invalid mpu state in sram_idle\n");
|
||||
pr_err("Invalid mpu state in sram_idle\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -439,18 +438,17 @@ restore:
|
|||
list_for_each_entry(pwrst, &pwrst_list, node) {
|
||||
state = pwrdm_read_prev_pwrst(pwrst->pwrdm);
|
||||
if (state > pwrst->next_state) {
|
||||
printk(KERN_INFO "Powerdomain (%s) didn't enter "
|
||||
"target state %d\n",
|
||||
pr_info("Powerdomain (%s) didn't enter "
|
||||
"target state %d\n",
|
||||
pwrst->pwrdm->name, pwrst->next_state);
|
||||
ret = -1;
|
||||
}
|
||||
omap_set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);
|
||||
}
|
||||
if (ret)
|
||||
printk(KERN_ERR "Could not enter target state in pm_suspend\n");
|
||||
pr_err("Could not enter target state in pm_suspend\n");
|
||||
else
|
||||
printk(KERN_INFO "Successfully put all powerdomains "
|
||||
"to target state\n");
|
||||
pr_info("Successfully put all powerdomains to target state\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -734,21 +732,22 @@ static int __init omap3_pm_init(void)
|
|||
|
||||
if (ret) {
|
||||
pr_err("pm: Failed to request pm_io irq\n");
|
||||
goto err1;
|
||||
goto err2;
|
||||
}
|
||||
|
||||
ret = pwrdm_for_each(pwrdms_setup, NULL);
|
||||
if (ret) {
|
||||
printk(KERN_ERR "Failed to setup powerdomains\n");
|
||||
goto err2;
|
||||
pr_err("Failed to setup powerdomains\n");
|
||||
goto err3;
|
||||
}
|
||||
|
||||
(void) clkdm_for_each(omap_pm_clkdms_setup, NULL);
|
||||
|
||||
mpu_pwrdm = pwrdm_lookup("mpu_pwrdm");
|
||||
if (mpu_pwrdm == NULL) {
|
||||
printk(KERN_ERR "Failed to get mpu_pwrdm\n");
|
||||
goto err2;
|
||||
pr_err("Failed to get mpu_pwrdm\n");
|
||||
ret = -EINVAL;
|
||||
goto err3;
|
||||
}
|
||||
|
||||
neon_pwrdm = pwrdm_lookup("neon_pwrdm");
|
||||
|
@ -781,8 +780,8 @@ static int __init omap3_pm_init(void)
|
|||
omap3_secure_ram_storage =
|
||||
kmalloc(0x803F, GFP_KERNEL);
|
||||
if (!omap3_secure_ram_storage)
|
||||
printk(KERN_ERR "Memory allocation failed when"
|
||||
"allocating for secure sram context\n");
|
||||
pr_err("Memory allocation failed when "
|
||||
"allocating for secure sram context\n");
|
||||
|
||||
local_irq_disable();
|
||||
local_fiq_disable();
|
||||
|
@ -796,14 +795,17 @@ static int __init omap3_pm_init(void)
|
|||
}
|
||||
|
||||
omap3_save_scratchpad_contents();
|
||||
err1:
|
||||
return ret;
|
||||
err2:
|
||||
free_irq(INT_34XX_PRCM_MPU_IRQ, NULL);
|
||||
|
||||
err3:
|
||||
list_for_each_entry_safe(pwrst, tmp, &pwrst_list, node) {
|
||||
list_del(&pwrst->node);
|
||||
kfree(pwrst);
|
||||
}
|
||||
free_irq(omap_prcm_event_to_irq("io"), omap3_pm_init);
|
||||
err2:
|
||||
free_irq(omap_prcm_event_to_irq("wkup"), NULL);
|
||||
err1:
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
|
@ -144,7 +144,7 @@ static void omap_default_idle(void)
|
|||
static int __init omap4_pm_init(void)
|
||||
{
|
||||
int ret;
|
||||
struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm;
|
||||
struct clockdomain *emif_clkdm, *mpuss_clkdm, *l3_1_clkdm, *l4wkup;
|
||||
struct clockdomain *ducati_clkdm, *l3_2_clkdm, *l4_per_clkdm;
|
||||
|
||||
if (!cpu_is_omap44xx())
|
||||
|
@ -168,14 +168,19 @@ static int __init omap4_pm_init(void)
|
|||
* MPUSS -> L4_PER/L3_* and DUCATI -> L3_* doesn't work as
|
||||
* expected. The hardware recommendation is to enable static
|
||||
* dependencies for these to avoid system lock ups or random crashes.
|
||||
* The L4 wakeup depedency is added to workaround the OCP sync hardware
|
||||
* BUG with 32K synctimer which lead to incorrect timer value read
|
||||
* from the 32K counter. The BUG applies for GPTIMER1 and WDT2 which
|
||||
* are part of L4 wakeup clockdomain.
|
||||
*/
|
||||
mpuss_clkdm = clkdm_lookup("mpuss_clkdm");
|
||||
emif_clkdm = clkdm_lookup("l3_emif_clkdm");
|
||||
l3_1_clkdm = clkdm_lookup("l3_1_clkdm");
|
||||
l3_2_clkdm = clkdm_lookup("l3_2_clkdm");
|
||||
l4_per_clkdm = clkdm_lookup("l4_per_clkdm");
|
||||
l4wkup = clkdm_lookup("l4_wkup_clkdm");
|
||||
ducati_clkdm = clkdm_lookup("ducati_clkdm");
|
||||
if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) ||
|
||||
if ((!mpuss_clkdm) || (!emif_clkdm) || (!l3_1_clkdm) || (!l4wkup) ||
|
||||
(!l3_2_clkdm) || (!ducati_clkdm) || (!l4_per_clkdm))
|
||||
goto err2;
|
||||
|
||||
|
@ -183,6 +188,7 @@ static int __init omap4_pm_init(void)
|
|||
ret |= clkdm_add_wkdep(mpuss_clkdm, l3_1_clkdm);
|
||||
ret |= clkdm_add_wkdep(mpuss_clkdm, l3_2_clkdm);
|
||||
ret |= clkdm_add_wkdep(mpuss_clkdm, l4_per_clkdm);
|
||||
ret |= clkdm_add_wkdep(mpuss_clkdm, l4wkup);
|
||||
ret |= clkdm_add_wkdep(ducati_clkdm, l3_1_clkdm);
|
||||
ret |= clkdm_add_wkdep(ducati_clkdm, l3_2_clkdm);
|
||||
if (ret) {
|
||||
|
|
|
@ -972,7 +972,13 @@ int pwrdm_wait_transition(struct powerdomain *pwrdm)
|
|||
|
||||
int pwrdm_state_switch(struct powerdomain *pwrdm)
|
||||
{
|
||||
return _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW);
|
||||
int ret;
|
||||
|
||||
ret = pwrdm_wait_transition(pwrdm);
|
||||
if (!ret)
|
||||
ret = _pwrdm_state_switch(pwrdm, PWRDM_STATE_NOW);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int pwrdm_clkdm_state_switch(struct clockdomain *clkdm)
|
||||
|
|
|
@ -147,8 +147,9 @@ static inline u32 _read_pending_irq_reg(u16 irqen_offs, u16 irqst_offs)
|
|||
u32 mask, st;
|
||||
|
||||
/* XXX read mask from RAM? */
|
||||
mask = omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, irqen_offs);
|
||||
st = omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST, irqst_offs);
|
||||
mask = omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
irqen_offs);
|
||||
st = omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST, irqst_offs);
|
||||
|
||||
return mask & st;
|
||||
}
|
||||
|
@ -180,7 +181,7 @@ void omap44xx_prm_read_pending_irqs(unsigned long *events)
|
|||
*/
|
||||
void omap44xx_prm_ocp_barrier(void)
|
||||
{
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_REVISION_PRM_OFFSET);
|
||||
}
|
||||
|
||||
|
@ -198,19 +199,19 @@ void omap44xx_prm_ocp_barrier(void)
|
|||
void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask)
|
||||
{
|
||||
saved_mask[0] =
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_PRM_IRQSTATUS_MPU_OFFSET);
|
||||
saved_mask[1] =
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_PRM_IRQSTATUS_MPU_2_OFFSET);
|
||||
|
||||
omap4_prm_write_inst_reg(0, OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_write_inst_reg(0, OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_PRM_IRQENABLE_MPU_OFFSET);
|
||||
omap4_prm_write_inst_reg(0, OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_write_inst_reg(0, OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_PRM_IRQENABLE_MPU_2_OFFSET);
|
||||
|
||||
/* OCP barrier */
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_read_inst_reg(OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_REVISION_PRM_OFFSET);
|
||||
}
|
||||
|
||||
|
@ -226,9 +227,9 @@ void omap44xx_prm_save_and_clear_irqen(u32 *saved_mask)
|
|||
*/
|
||||
void omap44xx_prm_restore_irqen(u32 *saved_mask)
|
||||
{
|
||||
omap4_prm_write_inst_reg(saved_mask[0], OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_write_inst_reg(saved_mask[0], OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_PRM_IRQENABLE_MPU_OFFSET);
|
||||
omap4_prm_write_inst_reg(saved_mask[1], OMAP4430_PRM_DEVICE_INST,
|
||||
omap4_prm_write_inst_reg(saved_mask[1], OMAP4430_PRM_OCP_SOCKET_INST,
|
||||
OMAP4_PRM_IRQENABLE_MPU_2_OFFSET);
|
||||
}
|
||||
|
||||
|
|
|
@ -290,7 +290,7 @@ int omap_prcm_register_chain_handler(struct omap_prcm_irq_setup *irq_setup)
|
|||
goto err;
|
||||
}
|
||||
|
||||
for (i = 0; i <= irq_setup->nr_regs; i++) {
|
||||
for (i = 0; i < irq_setup->nr_regs; i++) {
|
||||
gc = irq_alloc_generic_chip("PRCM", 1,
|
||||
irq_setup->base_irq + i * 32, prm_base,
|
||||
handle_level_irq);
|
||||
|
|
|
@ -54,7 +54,7 @@ static struct omap_device_pm_latency omap_uhhtll_latency[] = {
|
|||
/*
|
||||
* setup_ehci_io_mux - initialize IO pad mux for USBHOST
|
||||
*/
|
||||
static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
static void __init setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
{
|
||||
switch (port_mode[0]) {
|
||||
case OMAP_EHCI_PORT_MODE_PHY:
|
||||
|
@ -197,7 +197,8 @@ static void setup_ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
|||
return;
|
||||
}
|
||||
|
||||
static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
static
|
||||
void __init setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
{
|
||||
switch (port_mode[0]) {
|
||||
case OMAP_EHCI_PORT_MODE_PHY:
|
||||
|
@ -315,7 +316,7 @@ static void setup_4430ehci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
|||
}
|
||||
}
|
||||
|
||||
static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
static void __init setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
{
|
||||
switch (port_mode[0]) {
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
|
||||
|
@ -412,7 +413,8 @@ static void setup_ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
|||
}
|
||||
}
|
||||
|
||||
static void setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
static
|
||||
void __init setup_4430ohci_io_mux(const enum usbhs_omap_port_mode *port_mode)
|
||||
{
|
||||
switch (port_mode[0]) {
|
||||
case OMAP_OHCI_PORT_MODE_PHY_6PIN_DATSE0:
|
||||
|
|
|
@ -113,6 +113,7 @@ config MACH_ARMCORE
|
|||
select IWMMXT
|
||||
select PXA25x
|
||||
select MIGHT_HAVE_PCI
|
||||
select NEED_MACH_IO_H if PCI
|
||||
|
||||
config MACH_EM_X270
|
||||
bool "CompuLab EM-x270 platform"
|
||||
|
|
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* arch/arm/mach-pxa/include/mach/io.h
|
||||
*
|
||||
* Copied from asm/arch/sa1100/io.h
|
||||
*/
|
||||
#ifndef __ASM_ARM_ARCH_IO_H
|
||||
#define __ASM_ARM_ARCH_IO_H
|
||||
|
||||
#define IO_SPACE_LIMIT 0xffffffff
|
||||
|
||||
/*
|
||||
* We don't actually have real ISA nor PCI buses, but there is so many
|
||||
* drivers out there that might just work if we fake them...
|
||||
*/
|
||||
#define __io(a) __typesafe_io(a)
|
||||
|
||||
#endif
|
|
@ -0,0 +1,18 @@
|
|||
/*
|
||||
* Copyright (c) 2012 Samsung Electronics Co., Ltd.
|
||||
* http://www.samsung.com
|
||||
*
|
||||
* Common Header for S3C24XX SoCs
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef __ARCH_ARM_MACH_S3C24XX_COMMON_H
|
||||
#define __ARCH_ARM_MACH_S3C24XX_COMMON_H __FILE__
|
||||
|
||||
void s3c2410_restart(char mode, const char *cmd);
|
||||
void s3c244x_restart(char mode, const char *cmd);
|
||||
|
||||
#endif /* __ARCH_ARM_MACH_S3C24XX_COMMON_H */
|
|
@ -313,6 +313,10 @@ static struct sa1100fb_mach_info collie_lcd_info = {
|
|||
|
||||
.lccr0 = LCCR0_Color | LCCR0_Sngl | LCCR0_Act,
|
||||
.lccr3 = LCCR3_OutEnH | LCCR3_PixRsEdg | LCCR3_ACBsDiv(2),
|
||||
|
||||
#ifdef CONFIG_BACKLIGHT_LOCOMO
|
||||
.lcd_power = locomolcd_power
|
||||
#endif
|
||||
};
|
||||
|
||||
static void __init collie_init(void)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*
|
||||
* arch/arm/mach-sa1100/include/mach/collie.h
|
||||
*
|
||||
* This file contains the hardware specific definitions for Assabet
|
||||
* This file contains the hardware specific definitions for Collie
|
||||
* Only include this file from SA1100-specific files.
|
||||
*
|
||||
* ChangeLog:
|
||||
|
@ -13,6 +13,7 @@
|
|||
#ifndef __ASM_ARCH_COLLIE_H
|
||||
#define __ASM_ARCH_COLLIE_H
|
||||
|
||||
extern void locomolcd_power(int on);
|
||||
|
||||
#define COLLIE_SCOOP_GPIO_BASE (GPIO_MAX + 1)
|
||||
#define COLLIE_GPIO_CHARGE_ON (COLLIE_SCOOP_GPIO_BASE + 0)
|
||||
|
|
|
@ -190,7 +190,7 @@ static struct resource pre_mem = {
|
|||
.flags = IORESOURCE_MEM | IORESOURCE_PREFETCH,
|
||||
};
|
||||
|
||||
static int __init pci_versatile_setup_resources(struct list_head *resources)
|
||||
static int __init pci_versatile_setup_resources(struct pci_sys_data *sys)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
|
@ -218,9 +218,9 @@ static int __init pci_versatile_setup_resources(struct list_head *resources)
|
|||
* the mem resource for this bus
|
||||
* the prefetch mem resource for this bus
|
||||
*/
|
||||
pci_add_resource_offset(resources, &io_mem, sys->io_offset);
|
||||
pci_add_resource_offset(resources, &non_mem, sys->mem_offset);
|
||||
pci_add_resource_offset(resources, &pre_mem, sys->mem_offset);
|
||||
pci_add_resource_offset(&sys->resources, &io_mem, sys->io_offset);
|
||||
pci_add_resource_offset(&sys->resources, &non_mem, sys->mem_offset);
|
||||
pci_add_resource_offset(&sys->resources, &pre_mem, sys->mem_offset);
|
||||
|
||||
goto out;
|
||||
|
||||
|
@ -249,7 +249,7 @@ int __init pci_versatile_setup(int nr, struct pci_sys_data *sys)
|
|||
|
||||
if (nr == 0) {
|
||||
sys->mem_offset = 0;
|
||||
ret = pci_versatile_setup_resources(&sys->resources);
|
||||
ret = pci_versatile_setup_resources(sys);
|
||||
if (ret < 0) {
|
||||
printk("pci_versatile_setup: resources... oops?\n");
|
||||
goto out;
|
||||
|
|
|
@ -80,7 +80,7 @@ static struct smsc911x_platform_config smsc911x_config = {
|
|||
|
||||
static struct platform_device smsc_lan9217_device = {
|
||||
.name = "smsc911x",
|
||||
.id = 0,
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &smsc911x_config,
|
||||
},
|
||||
|
|
|
@ -17,6 +17,7 @@ config ARCH_OMAP1
|
|||
select IRQ_DOMAIN
|
||||
select HAVE_IDE
|
||||
select NEED_MACH_MEMORY_H
|
||||
select NEED_MACH_IO_H if PCCARD
|
||||
help
|
||||
"Systems based on omap7xx, omap15xx or omap16xx"
|
||||
|
||||
|
|
|
@ -441,6 +441,8 @@ static int __init clk_disable_unused(void)
|
|||
return 0;
|
||||
|
||||
pr_info("clock: disabling unused clocks to save power\n");
|
||||
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
list_for_each_entry(ck, &clocks, node) {
|
||||
if (ck->ops == &clkops_null)
|
||||
continue;
|
||||
|
@ -448,10 +450,9 @@ static int __init clk_disable_unused(void)
|
|||
if (ck->usecount > 0 || !ck->enable_reg)
|
||||
continue;
|
||||
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
arch_clock->clk_disable_unused(ck);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
}
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -47,17 +47,17 @@ extern struct omap_hwmod_sysc_fields omap_hwmod_sysc_type2;
|
|||
* with the original PRCM protocol defined for OMAP2420
|
||||
*/
|
||||
#define SYSC_TYPE1_MIDLEMODE_SHIFT 12
|
||||
#define SYSC_TYPE1_MIDLEMODE_MASK (0x3 << SYSC_MIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE1_MIDLEMODE_MASK (0x3 << SYSC_TYPE1_MIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE1_CLOCKACTIVITY_SHIFT 8
|
||||
#define SYSC_TYPE1_CLOCKACTIVITY_MASK (0x3 << SYSC_CLOCKACTIVITY_SHIFT)
|
||||
#define SYSC_TYPE1_CLOCKACTIVITY_MASK (0x3 << SYSC_TYPE1_CLOCKACTIVITY_SHIFT)
|
||||
#define SYSC_TYPE1_SIDLEMODE_SHIFT 3
|
||||
#define SYSC_TYPE1_SIDLEMODE_MASK (0x3 << SYSC_SIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE1_SIDLEMODE_MASK (0x3 << SYSC_TYPE1_SIDLEMODE_SHIFT)
|
||||
#define SYSC_TYPE1_ENAWAKEUP_SHIFT 2
|
||||
#define SYSC_TYPE1_ENAWAKEUP_MASK (1 << SYSC_ENAWAKEUP_SHIFT)
|
||||
#define SYSC_TYPE1_ENAWAKEUP_MASK (1 << SYSC_TYPE1_ENAWAKEUP_SHIFT)
|
||||
#define SYSC_TYPE1_SOFTRESET_SHIFT 1
|
||||
#define SYSC_TYPE1_SOFTRESET_MASK (1 << SYSC_SOFTRESET_SHIFT)
|
||||
#define SYSC_TYPE1_SOFTRESET_MASK (1 << SYSC_TYPE1_SOFTRESET_SHIFT)
|
||||
#define SYSC_TYPE1_AUTOIDLE_SHIFT 0
|
||||
#define SYSC_TYPE1_AUTOIDLE_MASK (1 << SYSC_AUTOIDLE_SHIFT)
|
||||
#define SYSC_TYPE1_AUTOIDLE_MASK (1 << SYSC_TYPE1_AUTOIDLE_SHIFT)
|
||||
|
||||
/*
|
||||
* OCP SYSCONFIG bit shifts/masks TYPE2. These are for IPs compliant
|
||||
|
|
|
@ -8,6 +8,8 @@
|
|||
#ifndef __ASM_AVR32_BARRIER_H
|
||||
#define __ASM_AVR32_BARRIER_H
|
||||
|
||||
#define nop() asm volatile("nop")
|
||||
|
||||
#define mb() asm volatile("" : : : "memory")
|
||||
#define rmb() mb()
|
||||
#define wmb() asm volatile("sync 0" : : : "memory")
|
||||
|
|
|
@ -1,13 +0,0 @@
|
|||
/*
|
||||
* Copyright (C) 2004-2006 Atmel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#ifndef __ASM_AVR32_SPECIAL_INSNS_H
|
||||
#define __ASM_AVR32_SPECIAL_INSNS_H
|
||||
|
||||
#define nop() asm volatile("nop")
|
||||
|
||||
#endif /* __ASM_AVR32_SPECIAL_INSNS_H */
|
|
@ -7,7 +7,7 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/platform_data/macb.h>
|
||||
#include <linux/platform_data/atmel_nand.h>
|
||||
#include <linux/platform_data/atmel.h>
|
||||
|
||||
#define GPIO_PIN_NONE (-1)
|
||||
|
||||
|
|
|
@ -823,7 +823,7 @@ config CACHELINE_ALIGNED_L1
|
|||
bool "Locate cacheline_aligned data to L1 Data Memory"
|
||||
default y if !BF54x
|
||||
default n if BF54x
|
||||
depends on !SMP && !BF531
|
||||
depends on !SMP && !BF531 && !CRC32
|
||||
help
|
||||
If enabled, cacheline_aligned data is linked
|
||||
into L1 data memory. (less latency)
|
||||
|
|
|
@ -147,6 +147,7 @@ CONFIG_USB_OTG_BLACKLIST_HUB=y
|
|||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_MUSB_HDRC=y
|
||||
CONFIG_USB_MUSB_BLACKFIN=y
|
||||
CONFIG_MUSB_PIO_ONLY=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
|
|
|
@ -122,7 +122,8 @@ static inline unsigned long __xchg(unsigned long x, volatile void *ptr,
|
|||
(unsigned long)(n), sizeof(*(ptr))))
|
||||
#define cmpxchg64_local(ptr, o, n) __cmpxchg64_local_generic((ptr), (o), (n))
|
||||
|
||||
#include <asm-generic/cmpxchg.h>
|
||||
#define cmpxchg(ptr, o, n) cmpxchg_local((ptr), (o), (n))
|
||||
#define cmpxchg64(ptr, o, n) cmpxchg64_local((ptr), (o), (n))
|
||||
|
||||
#endif /* !CONFIG_SMP */
|
||||
|
||||
|
|
|
@ -244,16 +244,26 @@ static inline int gpio_set_debounce(unsigned gpio, unsigned debounce)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
static inline int __gpio_get_value(unsigned gpio)
|
||||
{
|
||||
return bfin_gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
static inline void __gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
return bfin_gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
static inline int gpio_get_value(unsigned gpio)
|
||||
{
|
||||
return __gpio_get_value(gpio);
|
||||
}
|
||||
|
||||
static inline void gpio_set_value(unsigned gpio, int value)
|
||||
{
|
||||
return __gpio_set_value(gpio, value);
|
||||
}
|
||||
|
||||
static inline int gpio_to_irq(unsigned gpio)
|
||||
{
|
||||
if (likely(gpio < MAX_BLACKFIN_GPIOS))
|
||||
|
|
|
@ -85,10 +85,7 @@ asmlinkage int do_rt_sigreturn(struct pt_regs *regs)
|
|||
goto badframe;
|
||||
|
||||
sigdelsetmask(&set, ~_BLOCKABLE);
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
current->blocked = set;
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
set_current_blocked(&set);
|
||||
|
||||
if (restore_sigcontext(regs, &frame->uc.uc_mcontext))
|
||||
goto badframe;
|
||||
|
@ -279,15 +276,8 @@ static int handle_signal(int sig,
|
|||
|
||||
/* Set up the stack frame */
|
||||
ret = setup_rt_frame(sig, ka, info, oldset, regs);
|
||||
if (ret == 0) {
|
||||
spin_lock_irq(¤t->sighand->siglock);
|
||||
sigorsets(¤t->blocked, ¤t->blocked,
|
||||
&ka->sa.sa_mask);
|
||||
if (!(ka->sa.sa_flags & SA_NODEFER))
|
||||
sigaddset(¤t->blocked, sig);
|
||||
recalc_sigpending();
|
||||
spin_unlock_irq(¤t->sighand->siglock);
|
||||
}
|
||||
if (ret == 0)
|
||||
block_sigmask(ka, sig);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue