ARM: Remove mach-msm and associated ARM architecture code
The maintainers for mach-msm no longer have any plans to support or test the platforms supported by this architecture[1]. Most likely there aren't any active users of this code anyway, so let's delete it. [1] http://lkml.kernel.org/r/20150307031212.GA8434@fifo99.com Cc: David Brown <davidb@codeaurora.org> Cc: Bryan Huntsman <bryanh@codeaurora.org> Cc: Daniel Walker <dwalker@fifo99.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> Signed-off-by: Kumar Gala <galak@codeaurora.org>
This commit is contained in:
parent
9eccca0843
commit
c0c89fafa2
61 changed files with 8 additions and 8893 deletions
|
|
@ -10,8 +10,6 @@ IXP4xx
|
|||
- Intel IXP4xx Network processor.
|
||||
Makefile
|
||||
- Build sourcefiles as part of the Documentation-build for arm
|
||||
msm/
|
||||
- MSM specific documentation
|
||||
Netwinder
|
||||
- Netwinder specific documentation
|
||||
Porting
|
||||
|
|
|
|||
|
|
@ -1,176 +0,0 @@
|
|||
This document provides an overview of the msm_gpiomux interface, which
|
||||
is used to provide gpio pin multiplexing and configuration on mach-msm
|
||||
targets.
|
||||
|
||||
History
|
||||
=======
|
||||
|
||||
The first-generation API for gpio configuration & multiplexing on msm
|
||||
is the function gpio_tlmm_config(). This function has a few notable
|
||||
shortcomings, which led to its deprecation and replacement by gpiomux:
|
||||
|
||||
The 'disable' parameter: Setting the second parameter to
|
||||
gpio_tlmm_config to GPIO_CFG_DISABLE tells the peripheral
|
||||
processor in charge of the subsystem to perform a look-up into a
|
||||
low-power table and apply the low-power/sleep setting for the pin.
|
||||
As the msm family evolved this became problematic. Not all pins
|
||||
have sleep settings, not all peripheral processors will accept requests
|
||||
to apply said sleep settings, and not all msm targets have their gpio
|
||||
subsystems managed by a peripheral processor. In order to get consistent
|
||||
behavior on all targets, drivers are forced to ignore this parameter,
|
||||
rendering it useless.
|
||||
|
||||
The 'direction' flag: for all mux-settings other than raw-gpio (0),
|
||||
the output-enable bit of a gpio is hard-wired to a known
|
||||
input (usually VDD or ground). For those settings, the direction flag
|
||||
is meaningless at best, and deceptive at worst. In addition, using the
|
||||
direction flag to change output-enable (OE) directly can cause trouble in
|
||||
gpiolib, which has no visibility into gpio direction changes made
|
||||
in this way. Direction control in gpio mode should be made through gpiolib.
|
||||
|
||||
Key Features of gpiomux
|
||||
=======================
|
||||
|
||||
- A consistent interface across all generations of msm. Drivers can expect
|
||||
the same results on every target.
|
||||
- gpiomux plays nicely with gpiolib. Functions that should belong to gpiolib
|
||||
are left to gpiolib and not duplicated here. gpiomux is written with the
|
||||
intent that gpio_chips will call gpiomux reference-counting methods
|
||||
from their request() and free() hooks, providing full integration.
|
||||
- Tabular configuration. Instead of having to call gpio_tlmm_config
|
||||
hundreds of times, gpio configuration is placed in a single table.
|
||||
- Per-gpio sleep. Each gpio is individually reference counted, allowing only
|
||||
those lines which are in use to be put in high-power states.
|
||||
- 0 means 'do nothing': all flags are designed so that the default memset-zero
|
||||
equates to a sensible default of 'no configuration', preventing users
|
||||
from having to provide hundreds of 'no-op' configs for unused or
|
||||
unwanted lines.
|
||||
|
||||
Usage
|
||||
=====
|
||||
|
||||
To use gpiomux, provide configuration information for relevant gpio lines
|
||||
in the msm_gpiomux_configs table. Since a 0 equates to "unconfigured",
|
||||
only those lines to be managed by gpiomux need to be specified. Here
|
||||
is a completely fictional example:
|
||||
|
||||
struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS] = {
|
||||
[12] = {
|
||||
.active = GPIOMUX_VALID | GPIOMUX_DRV_8MA | GPIOMUX_FUNC_1,
|
||||
.suspended = GPIOMUX_VALID | GPIOMUX_PULL_DOWN,
|
||||
},
|
||||
[34] = {
|
||||
.suspended = GPIOMUX_VALID | GPIOMUX_PULL_DOWN,
|
||||
},
|
||||
};
|
||||
|
||||
To indicate that a gpio is in use, call msm_gpiomux_get() to increase
|
||||
its reference count. To decrease the reference count, call msm_gpiomux_put().
|
||||
|
||||
The effect of this configuration is as follows:
|
||||
|
||||
When the system boots, gpios 12 and 34 will be initialized with their
|
||||
'suspended' configurations. All other gpios, which were left unconfigured,
|
||||
will not be touched.
|
||||
|
||||
When msm_gpiomux_get() is called on gpio 12 to raise its reference count
|
||||
above 0, its active configuration will be applied. Since no other gpio
|
||||
line has a valid active configuration, msm_gpiomux_get() will have no
|
||||
effect on any other line.
|
||||
|
||||
When msm_gpiomux_put() is called on gpio 12 or 34 to drop their reference
|
||||
count to 0, their suspended configurations will be applied.
|
||||
Since no other gpio line has a valid suspended configuration, no other
|
||||
gpio line will be effected by msm_gpiomux_put(). Since gpio 34 has no valid
|
||||
active configuration, this is effectively a no-op for gpio 34 as well,
|
||||
with one small caveat, see the section "About Output-Enable Settings".
|
||||
|
||||
All of the GPIOMUX_VALID flags may seem like unnecessary overhead, but
|
||||
they address some important issues. As unused entries (all those
|
||||
except 12 and 34) are zero-filled, gpiomux needs a way to distinguish
|
||||
the used fields from the unused. In addition, the all-zero pattern
|
||||
is a valid configuration! Therefore, gpiomux defines an additional bit
|
||||
which is used to indicate when a field is used. This has the pleasant
|
||||
side-effect of allowing calls to msm_gpiomux_write to use '0' to indicate
|
||||
that a value should not be changed:
|
||||
|
||||
msm_gpiomux_write(0, GPIOMUX_VALID, 0);
|
||||
|
||||
replaces the active configuration of gpio 0 with an all-zero configuration,
|
||||
but leaves the suspended configuration as it was.
|
||||
|
||||
Static Configurations
|
||||
=====================
|
||||
|
||||
To install a static configuration, which is applied at boot and does
|
||||
not change after that, install a configuration with a suspended component
|
||||
but no active component, as in the previous example:
|
||||
|
||||
[34] = {
|
||||
.suspended = GPIOMUX_VALID | GPIOMUX_PULL_DOWN,
|
||||
},
|
||||
|
||||
The suspended setting is applied during boot, and the lack of any valid
|
||||
active setting prevents any other setting from being applied at runtime.
|
||||
If other subsystems attempting to access the line is a concern, one could
|
||||
*really* anchor the configuration down by calling msm_gpiomux_get on the
|
||||
line at initialization to move the line into active mode. With the line
|
||||
held, it will never be re-suspended, and with no valid active configuration,
|
||||
no new configurations will be applied.
|
||||
|
||||
But then, if having other subsystems grabbing for the line is truly a concern,
|
||||
it should be reserved with gpio_request instead, which carries an implicit
|
||||
msm_gpiomux_get.
|
||||
|
||||
gpiomux and gpiolib
|
||||
===================
|
||||
|
||||
It is expected that msm gpio_chips will call msm_gpiomux_get() and
|
||||
msm_gpiomux_put() from their request and free hooks, like this fictional
|
||||
example:
|
||||
|
||||
static int request(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return msm_gpiomux_get(chip->base + offset);
|
||||
}
|
||||
|
||||
static void free(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
msm_gpiomux_put(chip->base + offset);
|
||||
}
|
||||
|
||||
...somewhere in a gpio_chip declaration...
|
||||
.request = request,
|
||||
.free = free,
|
||||
|
||||
This provides important functionality:
|
||||
- It guarantees that a gpio line will have its 'active' config applied
|
||||
when the line is requested, and will not be suspended while the line
|
||||
remains requested; and
|
||||
- It guarantees that gpio-direction settings from gpiolib behave sensibly.
|
||||
See "About Output-Enable Settings."
|
||||
|
||||
This mechanism allows for "auto-request" of gpiomux lines via gpiolib
|
||||
when it is suitable. Drivers wishing more exact control are, of course,
|
||||
free to also use msm_gpiomux_set and msm_gpiomux_get.
|
||||
|
||||
About Output-Enable Settings
|
||||
============================
|
||||
|
||||
Some msm targets do not have the ability to query the current gpio
|
||||
configuration setting. This means that changes made to the output-enable
|
||||
(OE) bit by gpiolib cannot be consistently detected and preserved by gpiomux.
|
||||
Therefore, when gpiomux applies a configuration setting, any direction
|
||||
settings which may have been applied by gpiolib are lost and the default
|
||||
input settings are re-applied.
|
||||
|
||||
For this reason, drivers should not assume that gpio direction settings
|
||||
continue to hold if they free and then re-request a gpio. This seems like
|
||||
common sense - after all, anybody could have obtained the line in the
|
||||
meantime - but it needs saying.
|
||||
|
||||
This also means that calls to msm_gpiomux_write will reset the OE bit,
|
||||
which means that if the gpio line is held by a client of gpiolib and
|
||||
msm_gpiomux_write is called, the direction setting has been lost and
|
||||
gpiolib's internal state has been broken.
|
||||
Release gpio lines before reconfiguring them.
|
||||
20
MAINTAINERS
20
MAINTAINERS
|
|
@ -1244,22 +1244,6 @@ L: openmoko-kernel@lists.openmoko.org (subscribers-only)
|
|||
W: http://wiki.openmoko.org/wiki/Neo_FreeRunner
|
||||
S: Supported
|
||||
|
||||
ARM/QUALCOMM MSM MACHINE SUPPORT
|
||||
M: David Brown <davidb@codeaurora.org>
|
||||
M: Daniel Walker <dwalker@fifo99.com>
|
||||
M: Bryan Huntsman <bryanh@codeaurora.org>
|
||||
L: linux-arm-msm@vger.kernel.org
|
||||
F: arch/arm/mach-msm/
|
||||
F: drivers/video/fbdev/msm/
|
||||
F: drivers/mmc/host/msm_sdcc.c
|
||||
F: drivers/mmc/host/msm_sdcc.h
|
||||
F: drivers/tty/serial/msm_serial.h
|
||||
F: drivers/tty/serial/msm_serial.c
|
||||
F: drivers/*/pm8???-*
|
||||
F: drivers/mfd/ssbi.c
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davidb/linux-msm.git
|
||||
S: Maintained
|
||||
|
||||
ARM/TOSA MACHINE SUPPORT
|
||||
M: Dmitry Eremin-Solenikov <dbaryshkov@gmail.com>
|
||||
M: Dirk Opfer <dirk@opfer-online.de>
|
||||
|
|
@ -1317,6 +1301,10 @@ L: linux-soc@vger.kernel.org
|
|||
S: Maintained
|
||||
F: arch/arm/mach-qcom/
|
||||
F: drivers/soc/qcom/
|
||||
F: drivers/tty/serial/msm_serial.h
|
||||
F: drivers/tty/serial/msm_serial.c
|
||||
F: drivers/*/pm8???-*
|
||||
F: drivers/mfd/ssbi.c
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/linux-qcom.git
|
||||
|
||||
ARM/RADISYS ENP2611 MACHINE SUPPORT
|
||||
|
|
|
|||
|
|
@ -625,18 +625,6 @@ config ARCH_PXA
|
|||
help
|
||||
Support for Intel/Marvell's PXA2xx/PXA3xx processor line.
|
||||
|
||||
config ARCH_MSM
|
||||
bool "Qualcomm MSM (non-multiplatform)"
|
||||
select ARCH_REQUIRE_GPIOLIB
|
||||
select COMMON_CLK
|
||||
select GENERIC_CLOCKEVENTS
|
||||
help
|
||||
Support for Qualcomm MSM/QSD based systems. This runs on the
|
||||
apps processor of the MSM/QSD and depends on a shared memory
|
||||
interface to the modem processor which runs the baseband
|
||||
stack and controls some vital subsystems
|
||||
(clock and power control, etc).
|
||||
|
||||
config ARCH_SHMOBILE_LEGACY
|
||||
bool "Renesas ARM SoCs (non-multiplatform)"
|
||||
select ARCH_SHMOBILE
|
||||
|
|
@ -890,8 +878,6 @@ source "arch/arm/mach-ks8695/Kconfig"
|
|||
|
||||
source "arch/arm/mach-meson/Kconfig"
|
||||
|
||||
source "arch/arm/mach-msm/Kconfig"
|
||||
|
||||
source "arch/arm/mach-moxart/Kconfig"
|
||||
|
||||
source "arch/arm/mach-mv78xx0/Kconfig"
|
||||
|
|
|
|||
|
|
@ -448,25 +448,6 @@ choice
|
|||
Say Y here if you want kernel low-level debugging support
|
||||
on MMP UART3.
|
||||
|
||||
config DEBUG_MSM_UART
|
||||
bool "Kernel low-level debugging messages via MSM UART"
|
||||
depends on ARCH_MSM
|
||||
help
|
||||
Say Y here if you want the debug print routines to direct
|
||||
their output to the serial port on MSM devices.
|
||||
|
||||
ARCH DEBUG_UART_PHYS DEBUG_UART_VIRT #
|
||||
MSM7X00A, QSD8X50 0xa9a00000 0xe1000000 UART1
|
||||
MSM7X00A, QSD8X50 0xa9b00000 0xe1000000 UART2
|
||||
MSM7X00A, QSD8X50 0xa9c00000 0xe1000000 UART3
|
||||
|
||||
MSM7X30 0xaca00000 0xe1000000 UART1
|
||||
MSM7X30 0xacb00000 0xe1000000 UART2
|
||||
MSM7X30 0xacc00000 0xe1000000 UART3
|
||||
|
||||
Please adjust DEBUG_UART_PHYS and DEBUG_UART_BASE configuration
|
||||
options based on your needs.
|
||||
|
||||
config DEBUG_QCOM_UARTDM
|
||||
bool "Kernel low-level debugging messages via QCOM UARTDM"
|
||||
depends on ARCH_QCOM
|
||||
|
|
@ -1295,7 +1276,7 @@ config DEBUG_LL_INCLUDE
|
|||
DEBUG_IMX6SL_UART || \
|
||||
DEBUG_IMX6SX_UART
|
||||
default "debug/ks8695.S" if DEBUG_KS8695_UART
|
||||
default "debug/msm.S" if DEBUG_MSM_UART || DEBUG_QCOM_UARTDM
|
||||
default "debug/msm.S" if DEBUG_QCOM_UARTDM
|
||||
default "debug/netx.S" if DEBUG_NETX_UART
|
||||
default "debug/omap2plus.S" if DEBUG_OMAP2PLUS_UART
|
||||
default "debug/renesas-scif.S" if DEBUG_R7S72100_SCIF2
|
||||
|
|
@ -1388,7 +1369,6 @@ config DEBUG_UART_PHYS
|
|||
default 0x80230000 if DEBUG_PICOXCELL_UART
|
||||
default 0x808c0000 if ARCH_EP93XX
|
||||
default 0x90020000 if DEBUG_NSPIRE_CLASSIC_UART || DEBUG_NSPIRE_CX_UART
|
||||
default 0xa9a00000 if DEBUG_MSM_UART
|
||||
default 0xb0060000 if DEBUG_SIRFPRIMA2_UART1
|
||||
default 0xb0090000 if DEBUG_VEXPRESS_UART0_CRX
|
||||
default 0xc0013000 if DEBUG_U300_UART
|
||||
|
|
@ -1433,7 +1413,7 @@ config DEBUG_UART_PHYS
|
|||
DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
|
||||
DEBUG_LL_UART_EFM32 || \
|
||||
DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \
|
||||
DEBUG_MSM_UART || DEBUG_NETX_UART || \
|
||||
DEBUG_NETX_UART || \
|
||||
DEBUG_QCOM_UARTDM || DEBUG_R7S72100_SCIF2 || \
|
||||
DEBUG_RCAR_GEN1_SCIF0 || DEBUG_RCAR_GEN1_SCIF2 || \
|
||||
DEBUG_RCAR_GEN2_SCIF0 || DEBUG_RCAR_GEN2_SCIF2 || \
|
||||
|
|
@ -1446,7 +1426,6 @@ config DEBUG_UART_VIRT
|
|||
hex "Virtual base address of debug UART"
|
||||
default 0xe0000a00 if DEBUG_NETX_UART
|
||||
default 0xe0010fe0 if ARCH_RPC
|
||||
default 0xe1000000 if DEBUG_MSM_UART
|
||||
default 0xf0000be0 if ARCH_EBSA110
|
||||
default 0xf0010000 if DEBUG_ASM9260_UART
|
||||
default 0xf01fb000 if DEBUG_NOMADIK_UART
|
||||
|
|
@ -1526,7 +1505,7 @@ config DEBUG_UART_VIRT
|
|||
default DEBUG_UART_PHYS if !MMU
|
||||
depends on DEBUG_LL_UART_8250 || DEBUG_LL_UART_PL01X || \
|
||||
DEBUG_UART_8250 || DEBUG_UART_PL01X || DEBUG_MESON_UARTAO || \
|
||||
DEBUG_MSM_UART || DEBUG_NETX_UART || \
|
||||
DEBUG_NETX_UART || \
|
||||
DEBUG_QCOM_UARTDM || DEBUG_S3C24XX_UART || \
|
||||
DEBUG_UART_BCM63XX || DEBUG_ASM9260_UART || \
|
||||
DEBUG_SIRFSOC_UART || DEBUG_DIGICOLOR_UA0
|
||||
|
|
@ -1556,7 +1535,7 @@ config DEBUG_UART_8250_FLOW_CONTROL
|
|||
|
||||
config DEBUG_UNCOMPRESS
|
||||
bool
|
||||
depends on ARCH_MULTIPLATFORM || ARCH_MSM || PLAT_SAMSUNG
|
||||
depends on ARCH_MULTIPLATFORM || PLAT_SAMSUNG
|
||||
default y if DEBUG_LL && !DEBUG_OMAP2PLUS_UART && \
|
||||
(!DEBUG_TEGRA_UART || !ZBOOT_ROM)
|
||||
help
|
||||
|
|
|
|||
|
|
@ -136,7 +136,6 @@ textofs-$(CONFIG_PM_H1940) := 0x00108000
|
|||
ifeq ($(CONFIG_ARCH_SA1100),y)
|
||||
textofs-$(CONFIG_SA1111) := 0x00208000
|
||||
endif
|
||||
textofs-$(CONFIG_ARCH_MSM7X30) := 0x00208000
|
||||
textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000
|
||||
textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000
|
||||
textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000
|
||||
|
|
@ -170,7 +169,6 @@ machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx
|
|||
machine-$(CONFIG_ARCH_MESON) += meson
|
||||
machine-$(CONFIG_ARCH_MMP) += mmp
|
||||
machine-$(CONFIG_ARCH_MOXART) += moxart
|
||||
machine-$(CONFIG_ARCH_MSM) += msm
|
||||
machine-$(CONFIG_ARCH_MV78XX0) += mv78xx0
|
||||
machine-$(CONFIG_ARCH_MVEBU) += mvebu
|
||||
machine-$(CONFIG_ARCH_MXC) += imx
|
||||
|
|
|
|||
|
|
@ -1,121 +0,0 @@
|
|||
CONFIG_SYSVIPC=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
CONFIG_SYSCTL_SYSCALL=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
# CONFIG_COMPAT_BRK is not set
|
||||
CONFIG_PROFILING=y
|
||||
CONFIG_OPROFILE=y
|
||||
CONFIG_KPROBES=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_MODVERSIONS=y
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_ARCH_MSM=y
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_HIGHPTE=y
|
||||
CONFIG_CLEANCACHE=y
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
CONFIG_VFP=y
|
||||
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_IP_ROUTE_VERBOSE=y
|
||||
CONFIG_IP_PNP=y
|
||||
CONFIG_IP_PNP_DHCP=y
|
||||
# CONFIG_INET_XFRM_MODE_TRANSPORT is not set
|
||||
# CONFIG_INET_XFRM_MODE_TUNNEL is not set
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_CFG80211=y
|
||||
CONFIG_RFKILL=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_CHR_DEV_SG=y
|
||||
CONFIG_CHR_DEV_SCH=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_SCSI_CONSTANTS=y
|
||||
CONFIG_SCSI_LOGGING=y
|
||||
CONFIG_SCSI_SCAN_ASYNC=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=y
|
||||
CONFIG_SLIP=y
|
||||
CONFIG_SLIP_COMPRESSED=y
|
||||
CONFIG_SLIP_MODE_SLIP6=y
|
||||
CONFIG_USB_USBNET=y
|
||||
# CONFIG_USB_NET_AX8817X is not set
|
||||
# CONFIG_USB_NET_ZAURUS is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_MOUSE_PS2 is not set
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
CONFIG_SERIO_LIBPS2=y
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_MSM=y
|
||||
CONFIG_SERIAL_MSM_CONSOLE=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DEBUG_GPIO=y
|
||||
CONFIG_GPIO_SYSFS=y
|
||||
CONFIG_THERMAL=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_MEDIA_SUPPORT=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
CONFIG_SND_DYNAMIC_MINORS=y
|
||||
# CONFIG_SND_ARM is not set
|
||||
# CONFIG_SND_SPI is not set
|
||||
# CONFIG_SND_USB is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_MON=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_ACM=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_DEBUG_FILES=y
|
||||
CONFIG_USB_GADGET_VBUS_DRAW=500
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_EXT2_FS=y
|
||||
CONFIG_EXT2_FS_XATTR=y
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
|
||||
CONFIG_EXT4_FS=y
|
||||
CONFIG_FUSE_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3_ACL=y
|
||||
CONFIG_NFS_V4=y
|
||||
CONFIG_CIFS=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_DYNAMIC_DEBUG=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_LOCKUP_DETECTOR=y
|
||||
# CONFIG_DETECT_HUNG_TASK is not set
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
CONFIG_TIMER_STATS=y
|
||||
|
|
@ -16,24 +16,17 @@
|
|||
*/
|
||||
|
||||
.macro addruart, rp, rv, tmp
|
||||
#ifdef CONFIG_DEBUG_UART_PHYS
|
||||
ldr \rp, =CONFIG_DEBUG_UART_PHYS
|
||||
ldr \rv, =CONFIG_DEBUG_UART_VIRT
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro senduart, rd, rx
|
||||
ARM_BE8(rev \rd, \rd )
|
||||
#ifdef CONFIG_DEBUG_QCOM_UARTDM
|
||||
@ Write the 1 character to UARTDM_TF
|
||||
str \rd, [\rx, #0x70]
|
||||
#else
|
||||
str \rd, [\rx, #0x0C]
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro waituart, rd, rx
|
||||
#ifdef CONFIG_DEBUG_QCOM_UARTDM
|
||||
@ check for TX_EMT in UARTDM_SR
|
||||
ldr \rd, [\rx, #0x08]
|
||||
ARM_BE8(rev \rd, \rd )
|
||||
|
|
@ -55,13 +48,6 @@ ARM_BE8(rev \rd, \rd )
|
|||
str \rd, [\rx, #0x40]
|
||||
@ UARTDM reg. Read to induce delay
|
||||
ldr \rd, [\rx, #0x08]
|
||||
#else
|
||||
@ wait for TX_READY
|
||||
1001: ldr \rd, [\rx, #0x08]
|
||||
ARM_BE8(rev \rd, \rd )
|
||||
tst \rd, #0x04
|
||||
beq 1001b
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.macro busyuart, rd, rx
|
||||
|
|
|
|||
|
|
@ -1,109 +0,0 @@
|
|||
if ARCH_MSM
|
||||
|
||||
choice
|
||||
prompt "Qualcomm MSM SoC Type"
|
||||
default ARCH_MSM7X00A
|
||||
depends on ARCH_MSM
|
||||
|
||||
config ARCH_MSM7X00A
|
||||
bool "MSM7x00A / MSM7x01A"
|
||||
select ARCH_MSM_ARM11
|
||||
select CPU_V6
|
||||
select GPIO_MSM_V1
|
||||
select MACH_TROUT if !MACH_HALIBUT
|
||||
select MSM_PROC_COMM
|
||||
select MSM_SMD
|
||||
select CLKSRC_QCOM
|
||||
select MSM_SMD_PKG3
|
||||
|
||||
config ARCH_MSM7X30
|
||||
bool "MSM7x30"
|
||||
select ARCH_MSM_SCORPION
|
||||
select CPU_V7
|
||||
select GPIO_MSM_V1
|
||||
select MACH_MSM7X30_SURF # if !
|
||||
select MSM_GPIOMUX
|
||||
select MSM_PROC_COMM
|
||||
select MSM_SMD
|
||||
select CLKSRC_QCOM
|
||||
select MSM_VIC
|
||||
|
||||
config ARCH_QSD8X50
|
||||
bool "QSD8X50"
|
||||
select ARCH_MSM_SCORPION
|
||||
select CPU_V7
|
||||
select GPIO_MSM_V1
|
||||
select MACH_QSD8X50_SURF if !MACH_QSD8X50A_ST1_5
|
||||
select MSM_GPIOMUX
|
||||
select MSM_PROC_COMM
|
||||
select MSM_SMD
|
||||
select CLKSRC_QCOM
|
||||
select MSM_VIC
|
||||
|
||||
endchoice
|
||||
|
||||
config MSM_SOC_REV_A
|
||||
bool
|
||||
|
||||
config ARCH_MSM_ARM11
|
||||
bool
|
||||
|
||||
config ARCH_MSM_SCORPION
|
||||
bool
|
||||
|
||||
config MSM_VIC
|
||||
bool
|
||||
|
||||
menu "Qualcomm MSM Board Type"
|
||||
depends on ARCH_MSM
|
||||
|
||||
config MACH_HALIBUT
|
||||
depends on ARCH_MSM
|
||||
depends on ARCH_MSM7X00A
|
||||
bool "Halibut Board (QCT SURF7201A)"
|
||||
help
|
||||
Support for the Qualcomm SURF7201A eval board.
|
||||
|
||||
config MACH_TROUT
|
||||
depends on ARCH_MSM
|
||||
depends on ARCH_MSM7X00A
|
||||
bool "HTC Dream (aka trout)"
|
||||
help
|
||||
Support for the HTC Dream, T-Mobile G1, Android ADP1 devices.
|
||||
|
||||
config MACH_MSM7X30_SURF
|
||||
depends on ARCH_MSM7X30
|
||||
bool "MSM7x30 SURF"
|
||||
help
|
||||
Support for the Qualcomm MSM7x30 SURF eval board.
|
||||
|
||||
config MACH_QSD8X50_SURF
|
||||
depends on ARCH_QSD8X50
|
||||
bool "QSD8x50 SURF"
|
||||
help
|
||||
Support for the Qualcomm QSD8x50 SURF eval board.
|
||||
|
||||
config MACH_QSD8X50A_ST1_5
|
||||
depends on ARCH_QSD8X50
|
||||
bool "QSD8x50A ST1.5"
|
||||
select MSM_SOC_REV_A
|
||||
help
|
||||
Support for the Qualcomm ST1.5.
|
||||
|
||||
endmenu
|
||||
|
||||
config MSM_SMD_PKG3
|
||||
bool
|
||||
|
||||
config MSM_PROC_COMM
|
||||
bool
|
||||
|
||||
config MSM_SMD
|
||||
bool
|
||||
|
||||
config MSM_GPIOMUX
|
||||
bool
|
||||
help
|
||||
Support for MSM V1 TLMM GPIOMUX architecture.
|
||||
|
||||
endif
|
||||
|
|
@ -1,23 +0,0 @@
|
|||
obj-$(CONFIG_MSM_PROC_COMM) += clock.o
|
||||
|
||||
obj-$(CONFIG_MSM_VIC) += irq-vic.o
|
||||
|
||||
obj-$(CONFIG_ARCH_MSM7X00A) += irq.o
|
||||
obj-$(CONFIG_ARCH_QSD8X50) += sirc.o
|
||||
|
||||
obj-$(CONFIG_MSM_PROC_COMM) += proc_comm.o clock-pcom.o vreg.o
|
||||
|
||||
obj-$(CONFIG_ARCH_MSM7X00A) += dma.o io.o
|
||||
obj-$(CONFIG_ARCH_MSM7X30) += dma.o io.o
|
||||
obj-$(CONFIG_ARCH_QSD8X50) += dma.o io.o
|
||||
|
||||
obj-$(CONFIG_MSM_SMD) += smd.o smd_debug.o
|
||||
obj-$(CONFIG_MSM_SMD) += last_radio_log.o
|
||||
|
||||
obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o devices-msm7x00.o
|
||||
obj-$(CONFIG_MACH_TROUT) += board-trout.o board-trout-gpio.o board-trout-mmc.o board-trout-panel.o devices-msm7x00.o
|
||||
obj-$(CONFIG_MACH_HALIBUT) += board-halibut.o devices-msm7x00.o
|
||||
obj-$(CONFIG_ARCH_MSM7X30) += board-msm7x30.o devices-msm7x30.o
|
||||
obj-$(CONFIG_ARCH_QSD8X50) += board-qsd8x50.o devices-qsd8x50.o
|
||||
obj-$(CONFIG_MSM_GPIOMUX) += gpiomux.o
|
||||
obj-$(CONFIG_ARCH_QSD8X50) += gpiomux-8x50.o
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
zreladdr-y += 0x10008000
|
||||
params_phys-y := 0x10000100
|
||||
initrd_phys-y := 0x10800000
|
||||
|
|
@ -1,110 +0,0 @@
|
|||
/* linux/arch/arm/mach-msm/board-halibut.c
|
||||
*
|
||||
* Copyright (C) 2007 Google, Inc.
|
||||
* Author: Brian Swetland <swetland@google.com>
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/smc91x.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/msm_iomap.h>
|
||||
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include "devices.h"
|
||||
#include "common.h"
|
||||
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
.start = 0x9C004300,
|
||||
.end = 0x9C004400,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = MSM_GPIO_TO_INT(49),
|
||||
.end = MSM_GPIO_TO_INT(49),
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smc91x_platdata smc91x_platdata = {
|
||||
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||
.resource = smc91x_resources,
|
||||
.dev.platform_data = &smc91x_platdata,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&msm_clock_7x01a,
|
||||
&msm_device_gpio_7201,
|
||||
&msm_device_uart3,
|
||||
&msm_device_smd,
|
||||
&msm_device_nand,
|
||||
&msm_device_hsusb,
|
||||
&msm_device_i2c,
|
||||
&smc91x_device,
|
||||
};
|
||||
|
||||
static void __init halibut_init_early(void)
|
||||
{
|
||||
arch_ioremap_caller = __msm_ioremap_caller;
|
||||
}
|
||||
|
||||
static void __init halibut_init_irq(void)
|
||||
{
|
||||
msm_init_irq();
|
||||
}
|
||||
|
||||
static void __init halibut_init(void)
|
||||
{
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
static void __init halibut_map_io(void)
|
||||
{
|
||||
msm_map_common_io();
|
||||
}
|
||||
|
||||
static void __init halibut_init_late(void)
|
||||
{
|
||||
smd_debugfs_init();
|
||||
}
|
||||
|
||||
MACHINE_START(HALIBUT, "Halibut Board (QCT SURF7200A)")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = halibut_map_io,
|
||||
.init_early = halibut_init_early,
|
||||
.init_irq = halibut_init_irq,
|
||||
.init_machine = halibut_init,
|
||||
.init_late = halibut_init_late,
|
||||
.init_time = msm7x01_timer_init,
|
||||
MACHINE_END
|
||||
|
|
@ -1,191 +0,0 @@
|
|||
/* Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/smsc911x.h>
|
||||
#include <linux/usb/msm_hsusb.h>
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/memblock.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/memory.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <mach/clk.h>
|
||||
#include <mach/msm_iomap.h>
|
||||
#include <mach/dma.h>
|
||||
|
||||
#include <mach/vreg.h>
|
||||
#include "devices.h"
|
||||
#include "gpiomux.h"
|
||||
#include "proc_comm.h"
|
||||
#include "common.h"
|
||||
|
||||
static void __init msm7x30_fixup(struct tag *tag, char **cmdline)
|
||||
{
|
||||
for (; tag->hdr.size; tag = tag_next(tag))
|
||||
if (tag->hdr.tag == ATAG_MEM && tag->u.mem.start == 0x200000) {
|
||||
tag->u.mem.start = 0;
|
||||
tag->u.mem.size += SZ_2M;
|
||||
}
|
||||
}
|
||||
|
||||
static void __init msm7x30_reserve(void)
|
||||
{
|
||||
memblock_remove(0x0, SZ_2M);
|
||||
}
|
||||
|
||||
static int hsusb_phy_init_seq[] = {
|
||||
0x30, 0x32, /* Enable and set Pre-Emphasis Depth to 20% */
|
||||
0x02, 0x36, /* Disable CDR Auto Reset feature */
|
||||
-1
|
||||
};
|
||||
|
||||
static int hsusb_link_clk_reset(struct clk *link_clk, bool assert)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (assert) {
|
||||
ret = clk_reset(link_clk, CLK_RESET_ASSERT);
|
||||
if (ret)
|
||||
pr_err("usb hs_clk assert failed\n");
|
||||
} else {
|
||||
ret = clk_reset(link_clk, CLK_RESET_DEASSERT);
|
||||
if (ret)
|
||||
pr_err("usb hs_clk deassert failed\n");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hsusb_phy_clk_reset(struct clk *phy_clk)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = clk_reset(phy_clk, CLK_RESET_ASSERT);
|
||||
if (ret) {
|
||||
pr_err("usb phy clk assert failed\n");
|
||||
return ret;
|
||||
}
|
||||
usleep_range(10000, 12000);
|
||||
ret = clk_reset(phy_clk, CLK_RESET_DEASSERT);
|
||||
if (ret)
|
||||
pr_err("usb phy clk deassert failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct msm_otg_platform_data msm_otg_pdata = {
|
||||
.phy_init_seq = hsusb_phy_init_seq,
|
||||
.mode = USB_DR_MODE_PERIPHERAL,
|
||||
.otg_control = OTG_PHY_CONTROL,
|
||||
.link_clk_reset = hsusb_link_clk_reset,
|
||||
.phy_clk_reset = hsusb_phy_clk_reset,
|
||||
};
|
||||
|
||||
struct msm_gpiomux_config msm_gpiomux_configs[GPIOMUX_NGPIOS] = {
|
||||
#ifdef CONFIG_SERIAL_MSM_CONSOLE
|
||||
[49] = { /* UART2 RFR */
|
||||
.suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
|
||||
GPIOMUX_FUNC_2 | GPIOMUX_VALID,
|
||||
},
|
||||
[50] = { /* UART2 CTS */
|
||||
.suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
|
||||
GPIOMUX_FUNC_2 | GPIOMUX_VALID,
|
||||
},
|
||||
[51] = { /* UART2 RX */
|
||||
.suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
|
||||
GPIOMUX_FUNC_2 | GPIOMUX_VALID,
|
||||
},
|
||||
[52] = { /* UART2 TX */
|
||||
.suspended = GPIOMUX_DRV_2MA | GPIOMUX_PULL_DOWN |
|
||||
GPIOMUX_FUNC_2 | GPIOMUX_VALID,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&msm_clock_7x30,
|
||||
&msm_device_gpio_7x30,
|
||||
#if defined(CONFIG_SERIAL_MSM)
|
||||
&msm_device_uart2,
|
||||
#endif
|
||||
&msm_device_smd,
|
||||
&msm_device_otg,
|
||||
&msm_device_hsusb,
|
||||
&msm_device_hsusb_host,
|
||||
};
|
||||
|
||||
static void __init msm7x30_init_irq(void)
|
||||
{
|
||||
msm_init_irq();
|
||||
}
|
||||
|
||||
static void __init msm7x30_init(void)
|
||||
{
|
||||
msm_device_otg.dev.platform_data = &msm_otg_pdata;
|
||||
msm_device_hsusb.dev.parent = &msm_device_otg.dev;
|
||||
msm_device_hsusb_host.dev.parent = &msm_device_otg.dev;
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
static void __init msm7x30_map_io(void)
|
||||
{
|
||||
msm_map_msm7x30_io();
|
||||
}
|
||||
|
||||
static void __init msm7x30_init_late(void)
|
||||
{
|
||||
smd_debugfs_init();
|
||||
}
|
||||
|
||||
MACHINE_START(MSM7X30_SURF, "QCT MSM7X30 SURF")
|
||||
.atag_offset = 0x100,
|
||||
.fixup = msm7x30_fixup,
|
||||
.reserve = msm7x30_reserve,
|
||||
.map_io = msm7x30_map_io,
|
||||
.init_irq = msm7x30_init_irq,
|
||||
.init_machine = msm7x30_init,
|
||||
.init_late = msm7x30_init_late,
|
||||
.init_time = msm7x30_timer_init,
|
||||
MACHINE_END
|
||||
|
||||
MACHINE_START(MSM7X30_FFA, "QCT MSM7X30 FFA")
|
||||
.atag_offset = 0x100,
|
||||
.fixup = msm7x30_fixup,
|
||||
.reserve = msm7x30_reserve,
|
||||
.map_io = msm7x30_map_io,
|
||||
.init_irq = msm7x30_init_irq,
|
||||
.init_machine = msm7x30_init,
|
||||
.init_late = msm7x30_init_late,
|
||||
.init_time = msm7x30_timer_init,
|
||||
MACHINE_END
|
||||
|
||||
MACHINE_START(MSM7X30_FLUID, "QCT MSM7X30 FLUID")
|
||||
.atag_offset = 0x100,
|
||||
.fixup = msm7x30_fixup,
|
||||
.reserve = msm7x30_reserve,
|
||||
.map_io = msm7x30_map_io,
|
||||
.init_irq = msm7x30_init_irq,
|
||||
.init_machine = msm7x30_init,
|
||||
.init_late = msm7x30_init_late,
|
||||
.init_time = msm7x30_timer_init,
|
||||
MACHINE_END
|
||||
|
|
@ -1,254 +0,0 @@
|
|||
/* Copyright (c) 2009-2011, Code Aurora Forum. All rights reserved.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 and
|
||||
* only version 2 as published by the Free Software Foundation.
|
||||
*
|
||||
* 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., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
* 02110-1301, USA.
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/usb/msm_hsusb.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/smc91x.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/sirc.h>
|
||||
#include <mach/vreg.h>
|
||||
#include <mach/clk.h>
|
||||
#include <linux/platform_data/mmc-msm_sdcc.h>
|
||||
|
||||
#include "devices.h"
|
||||
#include "common.h"
|
||||
|
||||
static const resource_size_t qsd8x50_surf_smc91x_base __initconst = 0x70000300;
|
||||
static const unsigned qsd8x50_surf_smc91x_gpio __initconst = 156;
|
||||
|
||||
/* Leave smc91x resources empty here, as we'll fill them in
|
||||
* at run-time: they vary from board to board, and the true
|
||||
* configuration won't be known until boot.
|
||||
*/
|
||||
static struct resource smc91x_resources[] = {
|
||||
[0] = {
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
|
||||
},
|
||||
};
|
||||
|
||||
static struct smc91x_platdata smc91x_platdata = {
|
||||
.flags = SMC91X_USE_16BIT | SMC91X_NOWAIT,
|
||||
};
|
||||
|
||||
static struct platform_device smc91x_device = {
|
||||
.name = "smc91x",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(smc91x_resources),
|
||||
.resource = smc91x_resources,
|
||||
.dev.platform_data = &smc91x_platdata,
|
||||
};
|
||||
|
||||
static int __init msm_init_smc91x(void)
|
||||
{
|
||||
if (machine_is_qsd8x50_surf()) {
|
||||
smc91x_resources[0].start = qsd8x50_surf_smc91x_base;
|
||||
smc91x_resources[0].end = qsd8x50_surf_smc91x_base + 0xff;
|
||||
smc91x_resources[1].start =
|
||||
gpio_to_irq(qsd8x50_surf_smc91x_gpio);
|
||||
smc91x_resources[1].end =
|
||||
gpio_to_irq(qsd8x50_surf_smc91x_gpio);
|
||||
platform_device_register(&smc91x_device);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(msm_init_smc91x);
|
||||
|
||||
static int hsusb_phy_init_seq[] = {
|
||||
0x08, 0x31, /* Increase HS Driver Amplitude */
|
||||
0x20, 0x32, /* Enable and set Pre-Emphasis Depth to 10% */
|
||||
-1
|
||||
};
|
||||
|
||||
static int hsusb_link_clk_reset(struct clk *link_clk, bool assert)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (assert) {
|
||||
ret = clk_reset(link_clk, CLK_RESET_ASSERT);
|
||||
if (ret)
|
||||
pr_err("usb hs_clk assert failed\n");
|
||||
} else {
|
||||
ret = clk_reset(link_clk, CLK_RESET_DEASSERT);
|
||||
if (ret)
|
||||
pr_err("usb hs_clk deassert failed\n");
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int hsusb_phy_clk_reset(struct clk *phy_clk)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = clk_reset(phy_clk, CLK_RESET_ASSERT);
|
||||
if (ret) {
|
||||
pr_err("usb phy clk assert failed\n");
|
||||
return ret;
|
||||
}
|
||||
usleep_range(10000, 12000);
|
||||
ret = clk_reset(phy_clk, CLK_RESET_DEASSERT);
|
||||
if (ret)
|
||||
pr_err("usb phy clk deassert failed\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct msm_otg_platform_data msm_otg_pdata = {
|
||||
.phy_init_seq = hsusb_phy_init_seq,
|
||||
.mode = USB_DR_MODE_PERIPHERAL,
|
||||
.otg_control = OTG_PHY_CONTROL,
|
||||
.link_clk_reset = hsusb_link_clk_reset,
|
||||
.phy_clk_reset = hsusb_phy_clk_reset,
|
||||
};
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&msm_clock_8x50,
|
||||
&msm_device_gpio_8x50,
|
||||
&msm_device_uart3,
|
||||
&msm_device_smd,
|
||||
&msm_device_otg,
|
||||
&msm_device_hsusb,
|
||||
&msm_device_hsusb_host,
|
||||
};
|
||||
|
||||
static struct msm_mmc_gpio sdc1_gpio_cfg[] = {
|
||||
{51, "sdc1_dat_3"},
|
||||
{52, "sdc1_dat_2"},
|
||||
{53, "sdc1_dat_1"},
|
||||
{54, "sdc1_dat_0"},
|
||||
{55, "sdc1_cmd"},
|
||||
{56, "sdc1_clk"}
|
||||
};
|
||||
|
||||
static struct vreg *vreg_mmc;
|
||||
static unsigned long vreg_sts;
|
||||
|
||||
static uint32_t msm_sdcc_setup_power(struct device *dv, unsigned int vdd)
|
||||
{
|
||||
int rc = 0;
|
||||
struct platform_device *pdev;
|
||||
|
||||
pdev = container_of(dv, struct platform_device, dev);
|
||||
|
||||
if (vdd == 0) {
|
||||
if (!vreg_sts)
|
||||
return 0;
|
||||
|
||||
clear_bit(pdev->id, &vreg_sts);
|
||||
|
||||
if (!vreg_sts) {
|
||||
rc = vreg_disable(vreg_mmc);
|
||||
if (rc)
|
||||
pr_err("vreg_mmc disable failed for slot "
|
||||
"%d: %d\n", pdev->id, rc);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!vreg_sts) {
|
||||
rc = vreg_set_level(vreg_mmc, 2900);
|
||||
if (rc)
|
||||
pr_err("vreg_mmc set level failed for slot %d: %d\n",
|
||||
pdev->id, rc);
|
||||
rc = vreg_enable(vreg_mmc);
|
||||
if (rc)
|
||||
pr_err("vreg_mmc enable failed for slot %d: %d\n",
|
||||
pdev->id, rc);
|
||||
}
|
||||
set_bit(pdev->id, &vreg_sts);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct msm_mmc_gpio_data sdc1_gpio = {
|
||||
.gpio = sdc1_gpio_cfg,
|
||||
.size = ARRAY_SIZE(sdc1_gpio_cfg),
|
||||
};
|
||||
|
||||
static struct msm_mmc_platform_data qsd8x50_sdc1_data = {
|
||||
.ocr_mask = MMC_VDD_27_28 | MMC_VDD_28_29,
|
||||
.translate_vdd = msm_sdcc_setup_power,
|
||||
.gpio_data = &sdc1_gpio,
|
||||
};
|
||||
|
||||
static void __init qsd8x50_init_mmc(void)
|
||||
{
|
||||
vreg_mmc = vreg_get(NULL, "gp5");
|
||||
|
||||
if (IS_ERR(vreg_mmc)) {
|
||||
pr_err("vreg get for vreg_mmc failed (%ld)\n",
|
||||
PTR_ERR(vreg_mmc));
|
||||
return;
|
||||
}
|
||||
|
||||
msm_add_sdcc(1, &qsd8x50_sdc1_data, 0, 0);
|
||||
}
|
||||
|
||||
static void __init qsd8x50_map_io(void)
|
||||
{
|
||||
msm_map_qsd8x50_io();
|
||||
}
|
||||
|
||||
static void __init qsd8x50_init_irq(void)
|
||||
{
|
||||
msm_init_irq();
|
||||
msm_init_sirc();
|
||||
}
|
||||
|
||||
static void __init qsd8x50_init(void)
|
||||
{
|
||||
msm_device_otg.dev.platform_data = &msm_otg_pdata;
|
||||
msm_device_hsusb.dev.parent = &msm_device_otg.dev;
|
||||
msm_device_hsusb_host.dev.parent = &msm_device_otg.dev;
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
qsd8x50_init_mmc();
|
||||
}
|
||||
|
||||
static void __init qsd8x50_init_late(void)
|
||||
{
|
||||
smd_debugfs_init();
|
||||
}
|
||||
|
||||
MACHINE_START(QSD8X50_SURF, "QCT QSD8X50 SURF")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = qsd8x50_map_io,
|
||||
.init_irq = qsd8x50_init_irq,
|
||||
.init_machine = qsd8x50_init,
|
||||
.init_late = qsd8x50_init_late,
|
||||
.init_time = qsd8x50_timer_init,
|
||||
MACHINE_END
|
||||
|
||||
MACHINE_START(QSD8X50A_ST1_5, "QCT QSD8X50A ST1.5")
|
||||
.atag_offset = 0x100,
|
||||
.map_io = qsd8x50_map_io,
|
||||
.init_irq = qsd8x50_init_irq,
|
||||
.init_machine = qsd8x50_init,
|
||||
.init_late = qsd8x50_init_late,
|
||||
.init_time = qsd8x50_timer_init,
|
||||
MACHINE_END
|
||||
|
|
@ -1,114 +0,0 @@
|
|||
/* linux/arch/arm/mach-msm/board-sapphire.c
|
||||
* Copyright (C) 2007-2009 HTC Corporation.
|
||||
* Author: Thomas Tsai <thomas_tsai@htc.com>
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/device.h>
|
||||
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
#include <mach/vreg.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/delay.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/memblock.h>
|
||||
|
||||
#include "gpio_chip.h"
|
||||
#include "board-sapphire.h"
|
||||
#include "proc_comm.h"
|
||||
#include "devices.h"
|
||||
#include "common.h"
|
||||
|
||||
void msm_init_irq(void);
|
||||
void msm_init_gpio(void);
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&msm_device_smd,
|
||||
&msm_device_dmov,
|
||||
&msm_device_nand,
|
||||
&msm_device_uart1,
|
||||
&msm_device_uart3,
|
||||
};
|
||||
|
||||
void msm_timer_init(void);
|
||||
|
||||
static void __init sapphire_init_irq(void)
|
||||
{
|
||||
msm_init_irq();
|
||||
}
|
||||
|
||||
static void __init sapphire_init(void)
|
||||
{
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
}
|
||||
|
||||
static struct map_desc sapphire_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = SAPPHIRE_CPLD_BASE,
|
||||
.pfn = __phys_to_pfn(SAPPHIRE_CPLD_START),
|
||||
.length = SAPPHIRE_CPLD_SIZE,
|
||||
.type = MT_DEVICE_NONSHARED
|
||||
}
|
||||
};
|
||||
|
||||
static void __init sapphire_fixup(struct tag *tags, char **cmdline)
|
||||
{
|
||||
int smi_sz = parse_tag_smi((const struct tag *)tags);
|
||||
|
||||
if (smi_sz == 32) {
|
||||
memblock_add(PHYS_OFFSET, 84*SZ_1M);
|
||||
} else if (smi_sz == 64) {
|
||||
memblock_add(PHYS_OFFSET, 101*SZ_1M);
|
||||
} else {
|
||||
memblock_add(PHYS_OFFSET, 101*SZ_1M);
|
||||
/* Give a default value when not get smi size */
|
||||
smi_sz = 64;
|
||||
}
|
||||
}
|
||||
|
||||
static void __init sapphire_map_io(void)
|
||||
{
|
||||
msm_map_common_io();
|
||||
iotable_init(sapphire_io_desc, ARRAY_SIZE(sapphire_io_desc));
|
||||
msm_clock_init();
|
||||
}
|
||||
|
||||
static void __init sapphire_init_late(void)
|
||||
{
|
||||
smd_debugfs_init();
|
||||
}
|
||||
|
||||
MACHINE_START(SAPPHIRE, "sapphire")
|
||||
/* Maintainer: Brian Swetland <swetland@google.com> */
|
||||
.atag_offset = 0x100,
|
||||
.fixup = sapphire_fixup,
|
||||
.map_io = sapphire_map_io,
|
||||
.init_irq = sapphire_init_irq,
|
||||
.init_machine = sapphire_init,
|
||||
.init_late = sapphire_init_late,
|
||||
.init_time = msm_timer_init,
|
||||
MACHINE_END
|
||||
|
|
@ -1,233 +0,0 @@
|
|||
/*
|
||||
* linux/arch/arm/mach-msm/gpio.c
|
||||
*
|
||||
* Copyright (C) 2005 HP Labs
|
||||
* Copyright (C) 2008 Google, Inc.
|
||||
* Copyright (C) 2009 Pavel Machek <pavel@ucw.cz>
|
||||
*
|
||||
* 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.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include "board-trout.h"
|
||||
|
||||
static uint8_t trout_int_mask[2] = {
|
||||
[0] = 0xff, /* mask all interrupts */
|
||||
[1] = 0xff,
|
||||
};
|
||||
static uint8_t trout_sleep_int_mask[] = {
|
||||
[0] = 0xff,
|
||||
[1] = 0xff,
|
||||
};
|
||||
|
||||
struct msm_gpio_chip {
|
||||
struct gpio_chip chip;
|
||||
void __iomem *reg; /* Base of register bank */
|
||||
u8 shadow;
|
||||
};
|
||||
|
||||
#define to_msm_gpio_chip(c) container_of(c, struct msm_gpio_chip, chip)
|
||||
|
||||
static int msm_gpiolib_get(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct msm_gpio_chip *msm_gpio = to_msm_gpio_chip(chip);
|
||||
unsigned mask = 1 << offset;
|
||||
|
||||
return !!(readb(msm_gpio->reg) & mask);
|
||||
}
|
||||
|
||||
static void msm_gpiolib_set(struct gpio_chip *chip, unsigned offset, int val)
|
||||
{
|
||||
struct msm_gpio_chip *msm_gpio = to_msm_gpio_chip(chip);
|
||||
unsigned mask = 1 << offset;
|
||||
|
||||
if (val)
|
||||
msm_gpio->shadow |= mask;
|
||||
else
|
||||
msm_gpio->shadow &= ~mask;
|
||||
|
||||
writeb(msm_gpio->shadow, msm_gpio->reg);
|
||||
}
|
||||
|
||||
static int msm_gpiolib_direction_input(struct gpio_chip *chip,
|
||||
unsigned offset)
|
||||
{
|
||||
msm_gpiolib_set(chip, offset, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int msm_gpiolib_direction_output(struct gpio_chip *chip,
|
||||
unsigned offset, int val)
|
||||
{
|
||||
msm_gpiolib_set(chip, offset, val);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int trout_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
return TROUT_GPIO_TO_INT(offset + chip->base);
|
||||
}
|
||||
|
||||
#define TROUT_GPIO_BANK(name, reg_num, base_gpio, shadow_val) \
|
||||
{ \
|
||||
.chip = { \
|
||||
.label = name, \
|
||||
.direction_input = msm_gpiolib_direction_input,\
|
||||
.direction_output = msm_gpiolib_direction_output, \
|
||||
.get = msm_gpiolib_get, \
|
||||
.set = msm_gpiolib_set, \
|
||||
.to_irq = trout_gpio_to_irq, \
|
||||
.base = base_gpio, \
|
||||
.ngpio = 8, \
|
||||
}, \
|
||||
.reg = reg_num + TROUT_CPLD_BASE, \
|
||||
.shadow = shadow_val, \
|
||||
}
|
||||
|
||||
static struct msm_gpio_chip msm_gpio_banks[] = {
|
||||
#if defined(CONFIG_DEBUG_MSM_UART) && (CONFIG_DEBUG_UART_PHYS == 0xa9a00000)
|
||||
/* H2W pins <-> UART1 */
|
||||
TROUT_GPIO_BANK("MISC2", 0x00, TROUT_GPIO_MISC2_BASE, 0x40),
|
||||
#else
|
||||
/* H2W pins <-> UART3, Bluetooth <-> UART1 */
|
||||
TROUT_GPIO_BANK("MISC2", 0x00, TROUT_GPIO_MISC2_BASE, 0x80),
|
||||
#endif
|
||||
/* I2C pull */
|
||||
TROUT_GPIO_BANK("MISC3", 0x02, TROUT_GPIO_MISC3_BASE, 0x04),
|
||||
TROUT_GPIO_BANK("MISC4", 0x04, TROUT_GPIO_MISC4_BASE, 0),
|
||||
/* mmdi 32k en */
|
||||
TROUT_GPIO_BANK("MISC5", 0x06, TROUT_GPIO_MISC5_BASE, 0x04),
|
||||
TROUT_GPIO_BANK("INT2", 0x08, TROUT_GPIO_INT2_BASE, 0),
|
||||
TROUT_GPIO_BANK("MISC1", 0x0a, TROUT_GPIO_MISC1_BASE, 0),
|
||||
TROUT_GPIO_BANK("VIRTUAL", 0x12, TROUT_GPIO_VIRTUAL_BASE, 0),
|
||||
};
|
||||
|
||||
static void trout_gpio_irq_ack(struct irq_data *d)
|
||||
{
|
||||
int bank = TROUT_INT_TO_BANK(d->irq);
|
||||
uint8_t mask = TROUT_INT_TO_MASK(d->irq);
|
||||
int reg = TROUT_BANK_TO_STAT_REG(bank);
|
||||
/*printk(KERN_INFO "trout_gpio_irq_ack irq %d\n", d->irq);*/
|
||||
writeb(mask, TROUT_CPLD_BASE + reg);
|
||||
}
|
||||
|
||||
static void trout_gpio_irq_mask(struct irq_data *d)
|
||||
{
|
||||
unsigned long flags;
|
||||
uint8_t reg_val;
|
||||
int bank = TROUT_INT_TO_BANK(d->irq);
|
||||
uint8_t mask = TROUT_INT_TO_MASK(d->irq);
|
||||
int reg = TROUT_BANK_TO_MASK_REG(bank);
|
||||
|
||||
local_irq_save(flags);
|
||||
reg_val = trout_int_mask[bank] |= mask;
|
||||
/*printk(KERN_INFO "trout_gpio_irq_mask irq %d => %d:%02x\n",
|
||||
d->irq, bank, reg_val);*/
|
||||
writeb(reg_val, TROUT_CPLD_BASE + reg);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
static void trout_gpio_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
unsigned long flags;
|
||||
uint8_t reg_val;
|
||||
int bank = TROUT_INT_TO_BANK(d->irq);
|
||||
uint8_t mask = TROUT_INT_TO_MASK(d->irq);
|
||||
int reg = TROUT_BANK_TO_MASK_REG(bank);
|
||||
|
||||
local_irq_save(flags);
|
||||
reg_val = trout_int_mask[bank] &= ~mask;
|
||||
/*printk(KERN_INFO "trout_gpio_irq_unmask irq %d => %d:%02x\n",
|
||||
d->irq, bank, reg_val);*/
|
||||
writeb(reg_val, TROUT_CPLD_BASE + reg);
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
int trout_gpio_irq_set_wake(struct irq_data *d, unsigned int on)
|
||||
{
|
||||
unsigned long flags;
|
||||
int bank = TROUT_INT_TO_BANK(d->irq);
|
||||
uint8_t mask = TROUT_INT_TO_MASK(d->irq);
|
||||
|
||||
local_irq_save(flags);
|
||||
if(on)
|
||||
trout_sleep_int_mask[bank] &= ~mask;
|
||||
else
|
||||
trout_sleep_int_mask[bank] |= mask;
|
||||
local_irq_restore(flags);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void trout_gpio_irq_handler(unsigned int irq, struct irq_desc *desc)
|
||||
{
|
||||
int j, m;
|
||||
unsigned v;
|
||||
int bank;
|
||||
int stat_reg;
|
||||
int int_base = TROUT_INT_START;
|
||||
uint8_t int_mask;
|
||||
|
||||
for (bank = 0; bank < 2; bank++) {
|
||||
stat_reg = TROUT_BANK_TO_STAT_REG(bank);
|
||||
v = readb(TROUT_CPLD_BASE + stat_reg);
|
||||
int_mask = trout_int_mask[bank];
|
||||
if (v & int_mask) {
|
||||
writeb(v & int_mask, TROUT_CPLD_BASE + stat_reg);
|
||||
printk(KERN_ERR "trout_gpio_irq_handler: got masked "
|
||||
"interrupt: %d:%02x\n", bank, v & int_mask);
|
||||
}
|
||||
v &= ~int_mask;
|
||||
while (v) {
|
||||
m = v & -v;
|
||||
j = fls(m) - 1;
|
||||
/*printk(KERN_INFO "msm_gpio_irq_handler %d:%02x %02x b"
|
||||
"it %d irq %d\n", bank, v, m, j, int_base + j);*/
|
||||
v &= ~m;
|
||||
generic_handle_irq(int_base + j);
|
||||
}
|
||||
int_base += TROUT_INT_BANK0_COUNT;
|
||||
}
|
||||
desc->irq_data.chip->irq_ack(&desc->irq_data);
|
||||
}
|
||||
|
||||
static struct irq_chip trout_gpio_irq_chip = {
|
||||
.name = "troutgpio",
|
||||
.irq_ack = trout_gpio_irq_ack,
|
||||
.irq_mask = trout_gpio_irq_mask,
|
||||
.irq_unmask = trout_gpio_irq_unmask,
|
||||
.irq_set_wake = trout_gpio_irq_set_wake,
|
||||
};
|
||||
|
||||
/*
|
||||
* Called from the processor-specific init to enable GPIO pin support.
|
||||
*/
|
||||
int __init trout_init_gpio(void)
|
||||
{
|
||||
int i;
|
||||
for(i = TROUT_INT_START; i <= TROUT_INT_END; i++) {
|
||||
irq_set_chip_and_handler(i, &trout_gpio_irq_chip,
|
||||
handle_edge_irq);
|
||||
set_irq_flags(i, IRQF_VALID);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(msm_gpio_banks); i++)
|
||||
gpiochip_add(&msm_gpio_banks[i].chip);
|
||||
|
||||
irq_set_irq_type(MSM_GPIO_TO_INT(17), IRQF_TRIGGER_HIGH);
|
||||
irq_set_chained_handler(MSM_GPIO_TO_INT(17), trout_gpio_irq_handler);
|
||||
irq_set_irq_wake(MSM_GPIO_TO_INT(17), 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
postcore_initcall(trout_init_gpio);
|
||||
|
||||
|
|
@ -1,185 +0,0 @@
|
|||
/* linux/arch/arm/mach-msm/board-trout-mmc.c
|
||||
** Author: Brian Swetland <swetland@google.com>
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/mmc/host.h>
|
||||
#include <linux/mmc/sdio_ids.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/debugfs.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
|
||||
#include <mach/vreg.h>
|
||||
|
||||
#include <linux/platform_data/mmc-msm_sdcc.h>
|
||||
|
||||
#include "devices.h"
|
||||
|
||||
#include "board-trout.h"
|
||||
|
||||
#include "proc_comm.h"
|
||||
|
||||
#define DEBUG_SDSLOT_VDD 1
|
||||
|
||||
/* ---- COMMON ---- */
|
||||
static void config_gpio_table(uint32_t *table, int len)
|
||||
{
|
||||
int n;
|
||||
unsigned id;
|
||||
for(n = 0; n < len; n++) {
|
||||
id = table[n];
|
||||
msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &id, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* ---- SDCARD ---- */
|
||||
|
||||
static uint32_t sdcard_on_gpio_table[] = {
|
||||
PCOM_GPIO_CFG(62, 2, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_8MA), /* CLK */
|
||||
PCOM_GPIO_CFG(63, 2, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_8MA), /* CMD */
|
||||
PCOM_GPIO_CFG(64, 2, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_8MA), /* DAT3 */
|
||||
PCOM_GPIO_CFG(65, 2, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_8MA), /* DAT2 */
|
||||
PCOM_GPIO_CFG(66, 2, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_4MA), /* DAT1 */
|
||||
PCOM_GPIO_CFG(67, 2, GPIO_OUTPUT, GPIO_PULL_UP, GPIO_4MA), /* DAT0 */
|
||||
};
|
||||
|
||||
static uint32_t sdcard_off_gpio_table[] = {
|
||||
PCOM_GPIO_CFG(62, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* CLK */
|
||||
PCOM_GPIO_CFG(63, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* CMD */
|
||||
PCOM_GPIO_CFG(64, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT3 */
|
||||
PCOM_GPIO_CFG(65, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT2 */
|
||||
PCOM_GPIO_CFG(66, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT1 */
|
||||
PCOM_GPIO_CFG(67, 0, GPIO_OUTPUT, GPIO_NO_PULL, GPIO_4MA), /* DAT0 */
|
||||
};
|
||||
|
||||
static uint opt_disable_sdcard;
|
||||
|
||||
static int __init trout_disablesdcard_setup(char *str)
|
||||
{
|
||||
int cal = simple_strtol(str, NULL, 0);
|
||||
|
||||
opt_disable_sdcard = cal;
|
||||
return 1;
|
||||
}
|
||||
|
||||
__setup("board_trout.disable_sdcard=", trout_disablesdcard_setup);
|
||||
|
||||
static struct vreg *vreg_sdslot; /* SD slot power */
|
||||
|
||||
struct mmc_vdd_xlat {
|
||||
int mask;
|
||||
int level;
|
||||
};
|
||||
|
||||
static struct mmc_vdd_xlat mmc_vdd_table[] = {
|
||||
{ MMC_VDD_165_195, 1800 },
|
||||
{ MMC_VDD_20_21, 2050 },
|
||||
{ MMC_VDD_21_22, 2150 },
|
||||
{ MMC_VDD_22_23, 2250 },
|
||||
{ MMC_VDD_23_24, 2350 },
|
||||
{ MMC_VDD_24_25, 2450 },
|
||||
{ MMC_VDD_25_26, 2550 },
|
||||
{ MMC_VDD_26_27, 2650 },
|
||||
{ MMC_VDD_27_28, 2750 },
|
||||
{ MMC_VDD_28_29, 2850 },
|
||||
{ MMC_VDD_29_30, 2950 },
|
||||
};
|
||||
|
||||
static unsigned int sdslot_vdd = 0xffffffff;
|
||||
static unsigned int sdslot_vreg_enabled;
|
||||
|
||||
static uint32_t trout_sdslot_switchvdd(struct device *dev, unsigned int vdd)
|
||||
{
|
||||
int i, rc;
|
||||
|
||||
BUG_ON(!vreg_sdslot);
|
||||
|
||||
if (vdd == sdslot_vdd)
|
||||
return 0;
|
||||
|
||||
sdslot_vdd = vdd;
|
||||
|
||||
if (vdd == 0) {
|
||||
#if DEBUG_SDSLOT_VDD
|
||||
printk("%s: Disabling SD slot power\n", __func__);
|
||||
#endif
|
||||
config_gpio_table(sdcard_off_gpio_table,
|
||||
ARRAY_SIZE(sdcard_off_gpio_table));
|
||||
vreg_disable(vreg_sdslot);
|
||||
sdslot_vreg_enabled = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (!sdslot_vreg_enabled) {
|
||||
rc = vreg_enable(vreg_sdslot);
|
||||
if (rc) {
|
||||
printk(KERN_ERR "%s: Error enabling vreg (%d)\n",
|
||||
__func__, rc);
|
||||
}
|
||||
config_gpio_table(sdcard_on_gpio_table,
|
||||
ARRAY_SIZE(sdcard_on_gpio_table));
|
||||
sdslot_vreg_enabled = 1;
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(mmc_vdd_table); i++) {
|
||||
if (mmc_vdd_table[i].mask == (1 << vdd)) {
|
||||
#if DEBUG_SDSLOT_VDD
|
||||
printk("%s: Setting level to %u\n",
|
||||
__func__, mmc_vdd_table[i].level);
|
||||
#endif
|
||||
rc = vreg_set_level(vreg_sdslot,
|
||||
mmc_vdd_table[i].level);
|
||||
if (rc) {
|
||||
printk(KERN_ERR
|
||||
"%s: Error setting vreg level (%d)\n",
|
||||
__func__, rc);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
printk(KERN_ERR "%s: Invalid VDD %d specified\n", __func__, vdd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int trout_sdslot_status(struct device *dev)
|
||||
{
|
||||
unsigned int status;
|
||||
|
||||
status = (unsigned int) gpio_get_value(TROUT_GPIO_SDMC_CD_N);
|
||||
return (!status);
|
||||
}
|
||||
|
||||
#define TROUT_MMC_VDD MMC_VDD_165_195 | MMC_VDD_20_21 | MMC_VDD_21_22 \
|
||||
| MMC_VDD_22_23 | MMC_VDD_23_24 | MMC_VDD_24_25 \
|
||||
| MMC_VDD_25_26 | MMC_VDD_26_27 | MMC_VDD_27_28 \
|
||||
| MMC_VDD_28_29 | MMC_VDD_29_30
|
||||
|
||||
static struct msm_mmc_platform_data trout_sdslot_data = {
|
||||
.ocr_mask = TROUT_MMC_VDD,
|
||||
.status = trout_sdslot_status,
|
||||
.translate_vdd = trout_sdslot_switchvdd,
|
||||
};
|
||||
|
||||
int __init trout_init_mmc(unsigned int sys_rev)
|
||||
{
|
||||
sdslot_vreg_enabled = 0;
|
||||
|
||||
vreg_sdslot = vreg_get(0, "gp6");
|
||||
if (IS_ERR(vreg_sdslot))
|
||||
return PTR_ERR(vreg_sdslot);
|
||||
|
||||
irq_set_irq_wake(TROUT_GPIO_TO_INT(TROUT_GPIO_SDMC_CD_N), 1);
|
||||
|
||||
if (!opt_disable_sdcard)
|
||||
msm_add_sdcc(2, &trout_sdslot_data,
|
||||
TROUT_GPIO_TO_INT(TROUT_GPIO_SDMC_CD_N), 0);
|
||||
else
|
||||
printk(KERN_INFO "trout: SD-Card interface disabled\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -1,292 +0,0 @@
|
|||
/* linux/arch/arm/mach-msm/board-trout-mddi.c
|
||||
** Author: Brian Swetland <swetland@google.com>
|
||||
*/
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/err.h>
|
||||
|
||||
#include <asm/io.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/system_info.h>
|
||||
|
||||
#include <linux/platform_data/video-msm_fb.h>
|
||||
#include <mach/vreg.h>
|
||||
|
||||
#include "board-trout.h"
|
||||
#include "proc_comm.h"
|
||||
#include "clock-pcom.h"
|
||||
#include "devices.h"
|
||||
|
||||
#define TROUT_DEFAULT_BACKLIGHT_BRIGHTNESS 255
|
||||
|
||||
#define MDDI_CLIENT_CORE_BASE 0x108000
|
||||
#define LCD_CONTROL_BLOCK_BASE 0x110000
|
||||
#define SPI_BLOCK_BASE 0x120000
|
||||
#define I2C_BLOCK_BASE 0x130000
|
||||
#define PWM_BLOCK_BASE 0x140000
|
||||
#define GPIO_BLOCK_BASE 0x150000
|
||||
#define SYSTEM_BLOCK1_BASE 0x160000
|
||||
#define SYSTEM_BLOCK2_BASE 0x170000
|
||||
|
||||
|
||||
#define DPSUS (MDDI_CLIENT_CORE_BASE|0x24)
|
||||
#define SYSCLKENA (MDDI_CLIENT_CORE_BASE|0x2C)
|
||||
#define PWM0OFF (PWM_BLOCK_BASE|0x1C)
|
||||
|
||||
#define V_VDDE2E_VDD2_GPIO 0
|
||||
#define MDDI_RST_N 82
|
||||
|
||||
#define MDDICAP0 (MDDI_CLIENT_CORE_BASE|0x00)
|
||||
#define MDDICAP1 (MDDI_CLIENT_CORE_BASE|0x04)
|
||||
#define MDDICAP2 (MDDI_CLIENT_CORE_BASE|0x08)
|
||||
#define MDDICAP3 (MDDI_CLIENT_CORE_BASE|0x0C)
|
||||
#define MDCAPCHG (MDDI_CLIENT_CORE_BASE|0x10)
|
||||
#define MDCRCERC (MDDI_CLIENT_CORE_BASE|0x14)
|
||||
#define TTBUSSEL (MDDI_CLIENT_CORE_BASE|0x18)
|
||||
#define DPSET0 (MDDI_CLIENT_CORE_BASE|0x1C)
|
||||
#define DPSET1 (MDDI_CLIENT_CORE_BASE|0x20)
|
||||
#define DPSUS (MDDI_CLIENT_CORE_BASE|0x24)
|
||||
#define DPRUN (MDDI_CLIENT_CORE_BASE|0x28)
|
||||
#define SYSCKENA (MDDI_CLIENT_CORE_BASE|0x2C)
|
||||
#define TESTMODE (MDDI_CLIENT_CORE_BASE|0x30)
|
||||
#define FIFOMONI (MDDI_CLIENT_CORE_BASE|0x34)
|
||||
#define INTMONI (MDDI_CLIENT_CORE_BASE|0x38)
|
||||
#define MDIOBIST (MDDI_CLIENT_CORE_BASE|0x3C)
|
||||
#define MDIOPSET (MDDI_CLIENT_CORE_BASE|0x40)
|
||||
#define BITMAP0 (MDDI_CLIENT_CORE_BASE|0x44)
|
||||
#define BITMAP1 (MDDI_CLIENT_CORE_BASE|0x48)
|
||||
#define BITMAP2 (MDDI_CLIENT_CORE_BASE|0x4C)
|
||||
#define BITMAP3 (MDDI_CLIENT_CORE_BASE|0x50)
|
||||
#define BITMAP4 (MDDI_CLIENT_CORE_BASE|0x54)
|
||||
|
||||
#define SRST (LCD_CONTROL_BLOCK_BASE|0x00)
|
||||
#define PORT_ENB (LCD_CONTROL_BLOCK_BASE|0x04)
|
||||
#define START (LCD_CONTROL_BLOCK_BASE|0x08)
|
||||
#define PORT (LCD_CONTROL_BLOCK_BASE|0x0C)
|
||||
#define CMN (LCD_CONTROL_BLOCK_BASE|0x10)
|
||||
#define GAMMA (LCD_CONTROL_BLOCK_BASE|0x14)
|
||||
#define INTFLG (LCD_CONTROL_BLOCK_BASE|0x18)
|
||||
#define INTMSK (LCD_CONTROL_BLOCK_BASE|0x1C)
|
||||
#define MPLFBUF (LCD_CONTROL_BLOCK_BASE|0x20)
|
||||
#define HDE_LEFT (LCD_CONTROL_BLOCK_BASE|0x24)
|
||||
#define VDE_TOP (LCD_CONTROL_BLOCK_BASE|0x28)
|
||||
#define PXL (LCD_CONTROL_BLOCK_BASE|0x30)
|
||||
#define HCYCLE (LCD_CONTROL_BLOCK_BASE|0x34)
|
||||
#define HSW (LCD_CONTROL_BLOCK_BASE|0x38)
|
||||
#define HDE_START (LCD_CONTROL_BLOCK_BASE|0x3C)
|
||||
#define HDE_SIZE (LCD_CONTROL_BLOCK_BASE|0x40)
|
||||
#define VCYCLE (LCD_CONTROL_BLOCK_BASE|0x44)
|
||||
#define VSW (LCD_CONTROL_BLOCK_BASE|0x48)
|
||||
#define VDE_START (LCD_CONTROL_BLOCK_BASE|0x4C)
|
||||
#define VDE_SIZE (LCD_CONTROL_BLOCK_BASE|0x50)
|
||||
#define WAKEUP (LCD_CONTROL_BLOCK_BASE|0x54)
|
||||
#define WSYN_DLY (LCD_CONTROL_BLOCK_BASE|0x58)
|
||||
#define REGENB (LCD_CONTROL_BLOCK_BASE|0x5C)
|
||||
#define VSYNIF (LCD_CONTROL_BLOCK_BASE|0x60)
|
||||
#define WRSTB (LCD_CONTROL_BLOCK_BASE|0x64)
|
||||
#define RDSTB (LCD_CONTROL_BLOCK_BASE|0x68)
|
||||
#define ASY_DATA (LCD_CONTROL_BLOCK_BASE|0x6C)
|
||||
#define ASY_DATB (LCD_CONTROL_BLOCK_BASE|0x70)
|
||||
#define ASY_DATC (LCD_CONTROL_BLOCK_BASE|0x74)
|
||||
#define ASY_DATD (LCD_CONTROL_BLOCK_BASE|0x78)
|
||||
#define ASY_DATE (LCD_CONTROL_BLOCK_BASE|0x7C)
|
||||
#define ASY_DATF (LCD_CONTROL_BLOCK_BASE|0x80)
|
||||
#define ASY_DATG (LCD_CONTROL_BLOCK_BASE|0x84)
|
||||
#define ASY_DATH (LCD_CONTROL_BLOCK_BASE|0x88)
|
||||
#define ASY_CMDSET (LCD_CONTROL_BLOCK_BASE|0x8C)
|
||||
|
||||
#define SSICTL (SPI_BLOCK_BASE|0x00)
|
||||
#define SSITIME (SPI_BLOCK_BASE|0x04)
|
||||
#define SSITX (SPI_BLOCK_BASE|0x08)
|
||||
#define SSIRX (SPI_BLOCK_BASE|0x0C)
|
||||
#define SSIINTC (SPI_BLOCK_BASE|0x10)
|
||||
#define SSIINTS (SPI_BLOCK_BASE|0x14)
|
||||
#define SSIDBG1 (SPI_BLOCK_BASE|0x18)
|
||||
#define SSIDBG2 (SPI_BLOCK_BASE|0x1C)
|
||||
#define SSIID (SPI_BLOCK_BASE|0x20)
|
||||
|
||||
#define WKREQ (SYSTEM_BLOCK1_BASE|0x00)
|
||||
#define CLKENB (SYSTEM_BLOCK1_BASE|0x04)
|
||||
#define DRAMPWR (SYSTEM_BLOCK1_BASE|0x08)
|
||||
#define INTMASK (SYSTEM_BLOCK1_BASE|0x0C)
|
||||
#define GPIOSEL (SYSTEM_BLOCK2_BASE|0x00)
|
||||
|
||||
#define GPIODATA (GPIO_BLOCK_BASE|0x00)
|
||||
#define GPIODIR (GPIO_BLOCK_BASE|0x04)
|
||||
#define GPIOIS (GPIO_BLOCK_BASE|0x08)
|
||||
#define GPIOIBE (GPIO_BLOCK_BASE|0x0C)
|
||||
#define GPIOIEV (GPIO_BLOCK_BASE|0x10)
|
||||
#define GPIOIE (GPIO_BLOCK_BASE|0x14)
|
||||
#define GPIORIS (GPIO_BLOCK_BASE|0x18)
|
||||
#define GPIOMIS (GPIO_BLOCK_BASE|0x1C)
|
||||
#define GPIOIC (GPIO_BLOCK_BASE|0x20)
|
||||
#define GPIOOMS (GPIO_BLOCK_BASE|0x24)
|
||||
#define GPIOPC (GPIO_BLOCK_BASE|0x28)
|
||||
#define GPIOID (GPIO_BLOCK_BASE|0x30)
|
||||
|
||||
#define SPI_WRITE(reg, val) \
|
||||
{ SSITX, 0x00010000 | (((reg) & 0xff) << 8) | ((val) & 0xff) }, \
|
||||
{ 0, 5 },
|
||||
|
||||
#define SPI_WRITE1(reg) \
|
||||
{ SSITX, (reg) & 0xff }, \
|
||||
{ 0, 5 },
|
||||
|
||||
struct mddi_table {
|
||||
uint32_t reg;
|
||||
uint32_t value;
|
||||
};
|
||||
static struct mddi_table mddi_toshiba_init_table[] = {
|
||||
{ DPSET0, 0x09e90046 },
|
||||
{ DPSET1, 0x00000118 },
|
||||
{ DPSUS, 0x00000000 },
|
||||
{ DPRUN, 0x00000001 },
|
||||
{ 1, 14 }, /* msleep 14 */
|
||||
{ SYSCKENA, 0x00000001 },
|
||||
{ CLKENB, 0x0000A1EF }, /* # SYS.CLKENB # Enable clocks for each module (without DCLK , i2cCLK) */
|
||||
|
||||
{ GPIODATA, 0x02000200 }, /* # GPI .GPIODATA # GPIO2(RESET_LCD_N) set to 0 , GPIO3(eDRAM_Power) set to 0 */
|
||||
{ GPIODIR, 0x000030D }, /* 24D # GPI .GPIODIR # Select direction of GPIO port (0,2,3,6,9 output) */
|
||||
{ GPIOSEL, 0/*0x00000173*/}, /* # SYS.GPIOSEL # GPIO port multiplexing control */
|
||||
{ GPIOPC, 0x03C300C0 }, /* # GPI .GPIOPC # GPIO2,3 PD cut */
|
||||
{ WKREQ, 0x00000000 }, /* # SYS.WKREQ # Wake-up request event is VSYNC alignment */
|
||||
|
||||
{ GPIOIBE, 0x000003FF },
|
||||
{ GPIOIS, 0x00000000 },
|
||||
{ GPIOIC, 0x000003FF },
|
||||
{ GPIOIE, 0x00000000 },
|
||||
|
||||
{ GPIODATA, 0x00040004 }, /* # GPI .GPIODATA # eDRAM VD supply */
|
||||
{ 1, 1 }, /* msleep 1 */
|
||||
{ GPIODATA, 0x02040004 }, /* # GPI .GPIODATA # eDRAM VD supply */
|
||||
{ DRAMPWR, 0x00000001 }, /* eDRAM power */
|
||||
};
|
||||
|
||||
#define GPIOSEL_VWAKEINT (1U << 0)
|
||||
#define INTMASK_VWAKEOUT (1U << 0)
|
||||
|
||||
|
||||
static int trout_new_backlight = 1;
|
||||
static struct vreg *vreg_mddi_1v5;
|
||||
static struct vreg *vreg_lcm_2v85;
|
||||
|
||||
static void trout_process_mddi_table(struct msm_mddi_client_data *client_data,
|
||||
struct mddi_table *table, size_t count)
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < count; i++) {
|
||||
uint32_t reg = table[i].reg;
|
||||
uint32_t value = table[i].value;
|
||||
|
||||
if (reg == 0)
|
||||
udelay(value);
|
||||
else if (reg == 1)
|
||||
msleep(value);
|
||||
else
|
||||
client_data->remote_write(client_data, value, reg);
|
||||
}
|
||||
}
|
||||
|
||||
static int trout_mddi_toshiba_client_init(
|
||||
struct msm_mddi_bridge_platform_data *bridge_data,
|
||||
struct msm_mddi_client_data *client_data)
|
||||
{
|
||||
int panel_id;
|
||||
|
||||
client_data->auto_hibernate(client_data, 0);
|
||||
trout_process_mddi_table(client_data, mddi_toshiba_init_table,
|
||||
ARRAY_SIZE(mddi_toshiba_init_table));
|
||||
client_data->auto_hibernate(client_data, 1);
|
||||
panel_id = (client_data->remote_read(client_data, GPIODATA) >> 4) & 3;
|
||||
if (panel_id > 1) {
|
||||
printk(KERN_WARNING "unknown panel id at mddi_enable\n");
|
||||
return -1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int trout_mddi_toshiba_client_uninit(
|
||||
struct msm_mddi_bridge_platform_data *bridge_data,
|
||||
struct msm_mddi_client_data *client_data)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct resource resources_msm_fb[] = {
|
||||
{
|
||||
.start = MSM_FB_BASE,
|
||||
.end = MSM_FB_BASE + MSM_FB_SIZE,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
struct msm_mddi_bridge_platform_data toshiba_client_data = {
|
||||
.init = trout_mddi_toshiba_client_init,
|
||||
.uninit = trout_mddi_toshiba_client_uninit,
|
||||
.fb_data = {
|
||||
.xres = 320,
|
||||
.yres = 480,
|
||||
.width = 45,
|
||||
.height = 67,
|
||||
.output_format = 0,
|
||||
},
|
||||
};
|
||||
|
||||
static struct msm_mddi_platform_data mddi_pdata = {
|
||||
.clk_rate = 122880000,
|
||||
.fb_resource = resources_msm_fb,
|
||||
.num_clients = 1,
|
||||
.client_platform_data = {
|
||||
{
|
||||
.product_id = (0xd263 << 16 | 0),
|
||||
.name = "mddi_c_d263_0000",
|
||||
.id = 0,
|
||||
.client_data = &toshiba_client_data,
|
||||
.clk_rate = 0,
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
int __init trout_init_panel(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
if (!machine_is_trout())
|
||||
return 0;
|
||||
vreg_mddi_1v5 = vreg_get(0, "gp2");
|
||||
if (IS_ERR(vreg_mddi_1v5))
|
||||
return PTR_ERR(vreg_mddi_1v5);
|
||||
vreg_lcm_2v85 = vreg_get(0, "gp4");
|
||||
if (IS_ERR(vreg_lcm_2v85))
|
||||
return PTR_ERR(vreg_lcm_2v85);
|
||||
|
||||
trout_new_backlight = system_rev >= 5;
|
||||
if (trout_new_backlight) {
|
||||
uint32_t config = PCOM_GPIO_CFG(27, 0, GPIO_OUTPUT,
|
||||
GPIO_NO_PULL, GPIO_8MA);
|
||||
msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
|
||||
} else {
|
||||
uint32_t config = PCOM_GPIO_CFG(27, 1, GPIO_OUTPUT,
|
||||
GPIO_NO_PULL, GPIO_8MA);
|
||||
uint32_t id = P_GP_CLK;
|
||||
uint32_t rate = 19200000;
|
||||
|
||||
msm_proc_comm(PCOM_RPC_GPIO_TLMM_CONFIG_EX, &config, 0);
|
||||
|
||||
msm_proc_comm(PCOM_CLKCTL_RPC_SET_RATE, &id, &rate);
|
||||
if (id < 0)
|
||||
pr_err("trout_init_panel: set clock rate failed\n");
|
||||
}
|
||||
|
||||
rc = platform_device_register(&msm_device_mdp);
|
||||
if (rc)
|
||||
return rc;
|
||||
msm_device_mddi0.dev.platform_data = &mddi_pdata;
|
||||
return platform_device_register(&msm_device_mddi0);
|
||||
}
|
||||
|
||||
device_initcall(trout_init_panel);
|
||||
|
|
@ -1,111 +0,0 @@
|
|||
/* linux/arch/arm/mach-msm/board-trout.c
|
||||
*
|
||||
* Copyright (C) 2009 Google, Inc.
|
||||
* Author: Brian Swetland <swetland@google.com>
|
||||
*
|
||||
* This software is licensed under the terms of the GNU General Public
|
||||
* License version 2, as published by the Free Software Foundation, and
|
||||
* may be copied, distributed, and modified under those terms.
|
||||
*
|
||||
* 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.
|
||||
*
|
||||
*/
|
||||
#define pr_fmt(fmt) "%s: " fmt, __func__
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/clkdev.h>
|
||||
#include <linux/memblock.h>
|
||||
|
||||
#include <asm/system_info.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/setup.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/msm_iomap.h>
|
||||
|
||||
#include "devices.h"
|
||||
#include "board-trout.h"
|
||||
#include "common.h"
|
||||
|
||||
extern int trout_init_mmc(unsigned int);
|
||||
|
||||
static struct platform_device *devices[] __initdata = {
|
||||
&msm_clock_7x01a,
|
||||
&msm_device_gpio_7201,
|
||||
&msm_device_uart3,
|
||||
&msm_device_smd,
|
||||
&msm_device_nand,
|
||||
&msm_device_hsusb,
|
||||
&msm_device_i2c,
|
||||
};
|
||||
|
||||
static void __init trout_init_early(void)
|
||||
{
|
||||
arch_ioremap_caller = __msm_ioremap_caller;
|
||||
}
|
||||
|
||||
static void __init trout_init_irq(void)
|
||||
{
|
||||
msm_init_irq();
|
||||
}
|
||||
|
||||
static void __init trout_fixup(struct tag *tags, char **cmdline)
|
||||
{
|
||||
memblock_add(PHYS_OFFSET, 101*SZ_1M);
|
||||
}
|
||||
|
||||
static void __init trout_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
||||
platform_add_devices(devices, ARRAY_SIZE(devices));
|
||||
|
||||
if (IS_ENABLED(CONFIG_MMC)) {
|
||||
rc = trout_init_mmc(system_rev);
|
||||
if (rc)
|
||||
pr_crit("MMC init failure (%d)\n", rc);
|
||||
}
|
||||
}
|
||||
|
||||
static struct map_desc trout_io_desc[] __initdata = {
|
||||
{
|
||||
.virtual = (unsigned long)TROUT_CPLD_BASE,
|
||||
.pfn = __phys_to_pfn(TROUT_CPLD_START),
|
||||
.length = TROUT_CPLD_SIZE,
|
||||
.type = MT_DEVICE_NONSHARED
|
||||
}
|
||||
};
|
||||
|
||||
static void __init trout_map_io(void)
|
||||
{
|
||||
msm_map_common_io();
|
||||
iotable_init(trout_io_desc, ARRAY_SIZE(trout_io_desc));
|
||||
|
||||
#if defined(CONFIG_DEBUG_MSM_UART) && (CONFIG_DEBUG_UART_PHYS == 0xa9c00000)
|
||||
/* route UART3 to the "H2W" extended usb connector */
|
||||
writeb(0x80, TROUT_CPLD_BASE + 0x00);
|
||||
#endif
|
||||
}
|
||||
|
||||
static void __init trout_init_late(void)
|
||||
{
|
||||
smd_debugfs_init();
|
||||
}
|
||||
|
||||
MACHINE_START(TROUT, "HTC Dream")
|
||||
.atag_offset = 0x100,
|
||||
.fixup = trout_fixup,
|
||||
.map_io = trout_map_io,
|
||||
.init_early = trout_init_early,
|
||||
.init_irq = trout_init_irq,
|
||||
.init_machine = trout_init,
|
||||
.init_late = trout_init_late,
|
||||
.init_time = msm7x01_timer_init,
|
||||
MACHINE_END
|
||||
|
|
@ -1,162 +0,0 @@
|
|||
/* linux/arch/arm/mach-msm/board-trout.h
|
||||
** Author: Brian Swetland <swetland@google.com>
|
||||
*/
|
||||
#ifndef __ARCH_ARM_MACH_MSM_BOARD_TROUT_H
|
||||
#define __ARCH_ARM_MACH_MSM_BOARD_TROUT_H
|
||||
|
||||
#include "common.h"
|
||||
|
||||
#define MSM_SMI_BASE 0x00000000
|
||||
#define MSM_SMI_SIZE 0x00800000
|
||||
|
||||
#define MSM_EBI_BASE 0x10000000
|
||||
#define MSM_EBI_SIZE 0x06e00000
|
||||
|
||||
#define MSM_PMEM_GPU0_BASE 0x00000000
|
||||
#define MSM_PMEM_GPU0_SIZE 0x00700000
|
||||
|
||||
#define MSM_PMEM_MDP_BASE 0x02000000
|
||||
#define MSM_PMEM_MDP_SIZE 0x00800000
|
||||
|
||||
#define MSM_PMEM_ADSP_BASE 0x02800000
|
||||
#define MSM_PMEM_ADSP_SIZE 0x00800000
|
||||
|
||||
#define MSM_PMEM_CAMERA_BASE 0x03000000
|
||||
#define MSM_PMEM_CAMERA_SIZE 0x00800000
|
||||
|
||||
#define MSM_FB_BASE 0x03800000
|
||||
#define MSM_FB_SIZE 0x00100000
|
||||
|
||||
#define MSM_LINUX_BASE MSM_EBI_BASE
|
||||
#define MSM_LINUX_SIZE 0x06500000
|
||||
|
||||
#define MSM_PMEM_GPU1_SIZE 0x800000
|
||||
#define MSM_PMEM_GPU1_BASE (MSM_RAM_CONSOLE_BASE - MSM_PMEM_GPU1_SIZE)
|
||||
|
||||
#define MSM_RAM_CONSOLE_BASE (MSM_EBI_BASE + 0x6d00000)
|
||||
#define MSM_RAM_CONSOLE_SIZE (128 * SZ_1K)
|
||||
|
||||
#if (MSM_FB_BASE + MSM_FB_SIZE) >= (MSM_PMEM_GPU1_BASE)
|
||||
#error invalid memory map
|
||||
#endif
|
||||
|
||||
#define DECLARE_MSM_IOMAP
|
||||
#include <mach/msm_iomap.h>
|
||||
|
||||
#define TROUT_4_BALL_UP_0 1
|
||||
#define TROUT_4_BALL_LEFT_0 18
|
||||
#define TROUT_4_BALL_DOWN_0 57
|
||||
#define TROUT_4_BALL_RIGHT_0 91
|
||||
|
||||
#define TROUT_5_BALL_UP_0 94
|
||||
#define TROUT_5_BALL_LEFT_0 18
|
||||
#define TROUT_5_BALL_DOWN_0 90
|
||||
#define TROUT_5_BALL_RIGHT_0 19
|
||||
|
||||
#define TROUT_POWER_KEY 20
|
||||
|
||||
#define TROUT_4_TP_LS_EN 19
|
||||
#define TROUT_5_TP_LS_EN 1
|
||||
|
||||
#define TROUT_CPLD_BASE IOMEM(0xE8100000)
|
||||
#define TROUT_CPLD_START 0x98000000
|
||||
#define TROUT_CPLD_SIZE SZ_4K
|
||||
|
||||
#define TROUT_GPIO_CABLE_IN1 (83)
|
||||
#define TROUT_GPIO_CABLE_IN2 (49)
|
||||
|
||||
#define TROUT_GPIO_START (128)
|
||||
|
||||
#define TROUT_GPIO_INT_MASK0_REG (0x0c)
|
||||
#define TROUT_GPIO_INT_STAT0_REG (0x0e)
|
||||
#define TROUT_GPIO_INT_MASK1_REG (0x14)
|
||||
#define TROUT_GPIO_INT_STAT1_REG (0x10)
|
||||
|
||||
#define TROUT_GPIO_HAPTIC_PWM (28)
|
||||
#define TROUT_GPIO_PS_HOLD (25)
|
||||
|
||||
#define TROUT_GPIO_MISC2_BASE (TROUT_GPIO_START + 0x00)
|
||||
#define TROUT_GPIO_MISC3_BASE (TROUT_GPIO_START + 0x08)
|
||||
#define TROUT_GPIO_MISC4_BASE (TROUT_GPIO_START + 0x10)
|
||||
#define TROUT_GPIO_MISC5_BASE (TROUT_GPIO_START + 0x18)
|
||||
#define TROUT_GPIO_INT2_BASE (TROUT_GPIO_START + 0x20)
|
||||
#define TROUT_GPIO_MISC1_BASE (TROUT_GPIO_START + 0x28)
|
||||
#define TROUT_GPIO_VIRTUAL_BASE (TROUT_GPIO_START + 0x30)
|
||||
#define TROUT_GPIO_INT5_BASE (TROUT_GPIO_START + 0x48)
|
||||
|
||||
#define TROUT_GPIO_CHARGER_EN (TROUT_GPIO_MISC2_BASE + 0)
|
||||
#define TROUT_GPIO_ISET (TROUT_GPIO_MISC2_BASE + 1)
|
||||
#define TROUT_GPIO_H2W_DAT_DIR (TROUT_GPIO_MISC2_BASE + 2)
|
||||
#define TROUT_GPIO_H2W_CLK_DIR (TROUT_GPIO_MISC2_BASE + 3)
|
||||
#define TROUT_GPIO_H2W_DAT_GPO (TROUT_GPIO_MISC2_BASE + 4)
|
||||
#define TROUT_GPIO_H2W_CLK_GPO (TROUT_GPIO_MISC2_BASE + 5)
|
||||
#define TROUT_GPIO_H2W_SEL0 (TROUT_GPIO_MISC2_BASE + 6)
|
||||
#define TROUT_GPIO_H2W_SEL1 (TROUT_GPIO_MISC2_BASE + 7)
|
||||
|
||||
#define TROUT_GPIO_SPOTLIGHT_EN (TROUT_GPIO_MISC3_BASE + 0)
|
||||
#define TROUT_GPIO_FLASH_EN (TROUT_GPIO_MISC3_BASE + 1)
|
||||
#define TROUT_GPIO_I2C_PULL (TROUT_GPIO_MISC3_BASE + 2)
|
||||
#define TROUT_GPIO_TP_I2C_PULL (TROUT_GPIO_MISC3_BASE + 3)
|
||||
#define TROUT_GPIO_TP_EN (TROUT_GPIO_MISC3_BASE + 4)
|
||||
#define TROUT_GPIO_JOG_EN (TROUT_GPIO_MISC3_BASE + 5)
|
||||
#define TROUT_GPIO_UI_LED_EN (TROUT_GPIO_MISC3_BASE + 6)
|
||||
#define TROUT_GPIO_QTKEY_LED_EN (TROUT_GPIO_MISC3_BASE + 7)
|
||||
|
||||
#define TROUT_GPIO_VCM_PWDN (TROUT_GPIO_MISC4_BASE + 0)
|
||||
#define TROUT_GPIO_USB_H2W_SW (TROUT_GPIO_MISC4_BASE + 1)
|
||||
#define TROUT_GPIO_COMPASS_RST_N (TROUT_GPIO_MISC4_BASE + 2)
|
||||
#define TROUT_GPIO_HAPTIC_EN_UP (TROUT_GPIO_MISC4_BASE + 3)
|
||||
#define TROUT_GPIO_HAPTIC_EN_MAIN (TROUT_GPIO_MISC4_BASE + 4)
|
||||
#define TROUT_GPIO_USB_PHY_RST_N (TROUT_GPIO_MISC4_BASE + 5)
|
||||
#define TROUT_GPIO_WIFI_PA_RESETX (TROUT_GPIO_MISC4_BASE + 6)
|
||||
#define TROUT_GPIO_WIFI_EN (TROUT_GPIO_MISC4_BASE + 7)
|
||||
|
||||
#define TROUT_GPIO_BT_32K_EN (TROUT_GPIO_MISC5_BASE + 0)
|
||||
#define TROUT_GPIO_MAC_32K_EN (TROUT_GPIO_MISC5_BASE + 1)
|
||||
#define TROUT_GPIO_MDDI_32K_EN (TROUT_GPIO_MISC5_BASE + 2)
|
||||
#define TROUT_GPIO_COMPASS_32K_EN (TROUT_GPIO_MISC5_BASE + 3)
|
||||
|
||||
#define TROUT_GPIO_NAVI_ACT_N (TROUT_GPIO_INT2_BASE + 0)
|
||||
#define TROUT_GPIO_COMPASS_IRQ (TROUT_GPIO_INT2_BASE + 1)
|
||||
#define TROUT_GPIO_SLIDING_DET (TROUT_GPIO_INT2_BASE + 2)
|
||||
#define TROUT_GPIO_AUD_HSMIC_DET_N (TROUT_GPIO_INT2_BASE + 3)
|
||||
#define TROUT_GPIO_SD_DOOR_N (TROUT_GPIO_INT2_BASE + 4)
|
||||
#define TROUT_GPIO_CAM_BTN_STEP1_N (TROUT_GPIO_INT2_BASE + 5)
|
||||
#define TROUT_GPIO_CAM_BTN_STEP2_N (TROUT_GPIO_INT2_BASE + 6)
|
||||
#define TROUT_GPIO_TP_ATT_N (TROUT_GPIO_INT2_BASE + 7)
|
||||
#define TROUT_GPIO_BANK0_FIRST_INT_SOURCE (TROUT_GPIO_NAVI_ACT_N)
|
||||
#define TROUT_GPIO_BANK0_LAST_INT_SOURCE (TROUT_GPIO_TP_ATT_N)
|
||||
|
||||
#define TROUT_GPIO_H2W_DAT_GPI (TROUT_GPIO_MISC1_BASE + 0)
|
||||
#define TROUT_GPIO_H2W_CLK_GPI (TROUT_GPIO_MISC1_BASE + 1)
|
||||
#define TROUT_GPIO_CPLD128_VER_0 (TROUT_GPIO_MISC1_BASE + 4)
|
||||
#define TROUT_GPIO_CPLD128_VER_1 (TROUT_GPIO_MISC1_BASE + 5)
|
||||
#define TROUT_GPIO_CPLD128_VER_2 (TROUT_GPIO_MISC1_BASE + 6)
|
||||
#define TROUT_GPIO_CPLD128_VER_3 (TROUT_GPIO_MISC1_BASE + 7)
|
||||
|
||||
#define TROUT_GPIO_SDMC_CD_N (TROUT_GPIO_VIRTUAL_BASE + 0)
|
||||
#define TROUT_GPIO_END (TROUT_GPIO_SDMC_CD_N)
|
||||
#define TROUT_GPIO_BANK1_FIRST_INT_SOURCE (TROUT_GPIO_SDMC_CD_N)
|
||||
#define TROUT_GPIO_BANK1_LAST_INT_SOURCE (TROUT_GPIO_SDMC_CD_N)
|
||||
|
||||
#define TROUT_GPIO_VIRTUAL_TO_REAL_OFFSET \
|
||||
(TROUT_GPIO_INT5_BASE - TROUT_GPIO_VIRTUAL_BASE)
|
||||
|
||||
#define TROUT_INT_START (NR_MSM_IRQS + NR_GPIO_IRQS)
|
||||
#define TROUT_INT_BANK0_COUNT (8)
|
||||
#define TROUT_INT_BANK1_START (TROUT_INT_START + TROUT_INT_BANK0_COUNT)
|
||||
#define TROUT_INT_BANK1_COUNT (1)
|
||||
#define TROUT_INT_END (TROUT_INT_START + TROUT_INT_BANK0_COUNT + \
|
||||
TROUT_INT_BANK1_COUNT - 1)
|
||||
#define TROUT_GPIO_TO_INT(n) (((n) <= TROUT_GPIO_BANK0_LAST_INT_SOURCE) ? \
|
||||
(TROUT_INT_START - TROUT_GPIO_BANK0_FIRST_INT_SOURCE + (n)) : \
|
||||
(TROUT_INT_BANK1_START - TROUT_GPIO_BANK1_FIRST_INT_SOURCE + (n)))
|
||||
|
||||
#define TROUT_INT_TO_BANK(n) ((n - TROUT_INT_START) / TROUT_INT_BANK0_COUNT)
|
||||
#define TROUT_INT_TO_MASK(n) (1U << ((n - TROUT_INT_START) & 7))
|
||||
#define TROUT_BANK_TO_MASK_REG(bank) \
|
||||
(bank ? TROUT_GPIO_INT_MASK1_REG : TROUT_GPIO_INT_MASK0_REG)
|
||||
#define TROUT_BANK_TO_STAT_REG(bank) \
|
||||
(bank ? TROUT_GPIO_INT_STAT1_REG : TROUT_GPIO_INT_STAT0_REG)
|
||||
|
||||
#endif /* GUARD */
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue