Merge branch 'davinci-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci
* 'davinci-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/khilman/linux-davinci: (69 commits) davinci: Initial support for Neuros OSD2 platform. davinci: remove unused variable in arch/arm/mach-davinci/board-sffsdr.c davinci: fix section mismatch warning in arch/arm/mach-davinci/board-dm646x-evm.c DaVinci: DM365: Enable DaVinci RTC support for DM365 EVM DA8xx/OMAP-L1xx: Add high speed SD/MMC capabilities davinci: DA8XX/OMAP-L1XX: enable cpuidle and regulator in defconfig davinci: DA850/OMAP-L138: avoid using separate initcall for initializing regulator davinci: DA850/OMAP-L138 EVM: register for cpuidle support davinci: DA8XX/OMAP-L1XX: add support for cpuidle driver register davinci: add CPU idle driver davinci: DA8XX/OMAP-L1XX: fix compiler warning davinci: DA850/OMAP-L138: eliminate static function declaration davinci: DA850/OMAP-L138 EVM: simplify configuration of emac in MII/RMII mode davinci: DA850/OMAP-L138 EVM: get rid of DA850_UI_EXP config option davinci: DA850/OMAP-L138 EVM: implement autodetect of RMII PHY davinci: DA830/OMAP-L137 EVM: do not configure NAND on UI card when MMC/SD is selected davinci: DA830/OMAP-L137 EVM: use runtime detection for UI card davinci: DA830/OMAP-L137 EVM: remove ifdefs inside da830_evm_init() davinci: DA830/OMAP-L137 EVM: fix warning with default config davinci: Add NAND support for DA830/OMAP-L137 EVM platform ...
This commit is contained in:
commit
aed886ce77
47 changed files with 3057 additions and 1768 deletions
File diff suppressed because it is too large
Load diff
|
@ -1,15 +1,13 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.30-davinci1
|
||||
# Mon Jun 29 07:54:15 2009
|
||||
# Linux kernel version: 2.6.32-rc5
|
||||
# Thu Oct 22 12:19:19 2009
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_MMU=y
|
||||
# CONFIG_NO_IOPORT is not set
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||
|
@ -18,14 +16,14 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
|
|||
CONFIG_HARDIRQS_SW_RESEND=y
|
||||
CONFIG_GENERIC_IRQ_PROBE=y
|
||||
CONFIG_RWSEM_GENERIC_SPINLOCK=y
|
||||
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
|
||||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||
CONFIG_ARCH_HAS_CPUFREQ=y
|
||||
CONFIG_GENERIC_HWEIGHT=y
|
||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||
CONFIG_ZONE_DMA=y
|
||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||
CONFIG_VECTORS_BASE=0xffff0000
|
||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||
CONFIG_CONSTRUCTORS=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
|
@ -48,11 +46,12 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y
|
|||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
CONFIG_TREE_RCU=y
|
||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
|
@ -62,8 +61,7 @@ CONFIG_FAIR_GROUP_SCHED=y
|
|||
CONFIG_USER_SCHED=y
|
||||
# CONFIG_CGROUP_SCHED is not set
|
||||
# CONFIG_CGROUPS is not set
|
||||
CONFIG_SYSFS_DEPRECATED=y
|
||||
CONFIG_SYSFS_DEPRECATED_V2=y
|
||||
# CONFIG_SYSFS_DEPRECATED_V2 is not set
|
||||
# CONFIG_RELAY is not set
|
||||
# CONFIG_NAMESPACES is not set
|
||||
CONFIG_BLK_DEV_INITRD=y
|
||||
|
@ -80,7 +78,6 @@ CONFIG_SYSCTL_SYSCALL=y
|
|||
CONFIG_KALLSYMS=y
|
||||
# CONFIG_KALLSYMS_ALL is not set
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
CONFIG_HOTPLUG=y
|
||||
CONFIG_PRINTK=y
|
||||
CONFIG_BUG=y
|
||||
|
@ -93,6 +90,10 @@ CONFIG_TIMERFD=y
|
|||
CONFIG_EVENTFD=y
|
||||
CONFIG_SHMEM=y
|
||||
CONFIG_AIO=y
|
||||
|
||||
#
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
CONFIG_COMPAT_BRK=y
|
||||
|
@ -100,12 +101,16 @@ CONFIG_COMPAT_BRK=y
|
|||
CONFIG_SLUB=y
|
||||
# CONFIG_SLOB is not set
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_MARKERS is not set
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
CONFIG_HAVE_KRETPROBES=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
|
||||
#
|
||||
# GCOV-based kernel profiling
|
||||
#
|
||||
# CONFIG_GCOV_KERNEL is not set
|
||||
# CONFIG_SLOW_WORK is not set
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_SLABINFO=y
|
||||
|
@ -118,7 +123,7 @@ CONFIG_MODULE_FORCE_UNLOAD=y
|
|||
CONFIG_MODVERSIONS=y
|
||||
# CONFIG_MODULE_SRCVERSION_ALL is not set
|
||||
CONFIG_BLOCK=y
|
||||
# CONFIG_LBD is not set
|
||||
CONFIG_LBDAF=y
|
||||
# CONFIG_BLK_DEV_BSG is not set
|
||||
# CONFIG_BLK_DEV_INTEGRITY is not set
|
||||
|
||||
|
@ -139,19 +144,22 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
CONFIG_MMU=y
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
# CONFIG_ARCH_VERSATILE is not set
|
||||
# CONFIG_ARCH_AT91 is not set
|
||||
# CONFIG_ARCH_CLPS711X is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_EBSA110 is not set
|
||||
# CONFIG_ARCH_EP93XX is not set
|
||||
# CONFIG_ARCH_GEMINI is not set
|
||||
# CONFIG_ARCH_FOOTBRIDGE is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_STMP3XXX is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_IMX is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_IOP13XX is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
|
@ -160,25 +168,27 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_IXP4XX is not set
|
||||
# CONFIG_ARCH_L7200 is not set
|
||||
# CONFIG_ARCH_KIRKWOOD is not set
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_LOKI is not set
|
||||
# CONFIG_ARCH_MV78XX0 is not set
|
||||
# CONFIG_ARCH_MXC is not set
|
||||
# CONFIG_ARCH_ORION5X is not set
|
||||
# CONFIG_ARCH_MMP is not set
|
||||
# CONFIG_ARCH_KS8695 is not set
|
||||
# CONFIG_ARCH_NS9XXX is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_PNX4008 is not set
|
||||
# CONFIG_ARCH_PXA is not set
|
||||
# CONFIG_ARCH_MMP is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_RPC is not set
|
||||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_ARCH_S5PC1XX is not set
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
CONFIG_ARCH_DAVINCI=y
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_MSM is not set
|
||||
# CONFIG_ARCH_W90X900 is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
CONFIG_CP_INTC=y
|
||||
|
||||
#
|
||||
|
@ -191,7 +201,7 @@ CONFIG_CP_INTC=y
|
|||
# CONFIG_ARCH_DAVINCI_DM644x is not set
|
||||
# CONFIG_ARCH_DAVINCI_DM355 is not set
|
||||
# CONFIG_ARCH_DAVINCI_DM646x is not set
|
||||
# CONFIG_ARCH_DAVINCI_DA830 is not set
|
||||
CONFIG_ARCH_DAVINCI_DA830=y
|
||||
CONFIG_ARCH_DAVINCI_DA850=y
|
||||
CONFIG_ARCH_DAVINCI_DA8XX=y
|
||||
# CONFIG_ARCH_DAVINCI_DM365 is not set
|
||||
|
@ -199,7 +209,14 @@ CONFIG_ARCH_DAVINCI_DA8XX=y
|
|||
#
|
||||
# DaVinci Board Type
|
||||
#
|
||||
CONFIG_MACH_DAVINCI_DA830_EVM=y
|
||||
CONFIG_DA830_UI=y
|
||||
CONFIG_DA830_UI_LCD=y
|
||||
# CONFIG_DA830_UI_NAND is not set
|
||||
CONFIG_MACH_DAVINCI_DA850_EVM=y
|
||||
CONFIG_DA850_UI_EXP=y
|
||||
CONFIG_DA850_UI_NONE=y
|
||||
# CONFIG_DA850_UI_RMII is not set
|
||||
CONFIG_DAVINCI_MUX=y
|
||||
# CONFIG_DAVINCI_MUX_DEBUG is not set
|
||||
# CONFIG_DAVINCI_MUX_WARNINGS is not set
|
||||
|
@ -212,7 +229,7 @@ CONFIG_CPU_32=y
|
|||
CONFIG_CPU_ARM926T=y
|
||||
CONFIG_CPU_32v5=y
|
||||
CONFIG_CPU_ABRT_EV5TJ=y
|
||||
CONFIG_CPU_PABRT_NOIFAR=y
|
||||
CONFIG_CPU_PABRT_LEGACY=y
|
||||
CONFIG_CPU_CACHE_VIVT=y
|
||||
CONFIG_CPU_COPY_V4WB=y
|
||||
CONFIG_CPU_TLB_V4WBI=y
|
||||
|
@ -225,9 +242,9 @@ CONFIG_CPU_CP15_MMU=y
|
|||
CONFIG_ARM_THUMB=y
|
||||
# CONFIG_CPU_ICACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
CONFIG_CPU_DCACHE_WRITETHROUGH=y
|
||||
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
|
||||
# CONFIG_OUTER_CACHE is not set
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_COMMON_CLKDEV=y
|
||||
|
||||
#
|
||||
|
@ -248,11 +265,12 @@ CONFIG_VMSPLIT_3G=y
|
|||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
# CONFIG_PREEMPT_NONE is not set
|
||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=100
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
# CONFIG_ARCH_HAS_HOLES_MEMORYMODEL is not set
|
||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
||||
# CONFIG_HIGHMEM is not set
|
||||
|
@ -268,12 +286,14 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
|
|||
CONFIG_ZONE_DMA_FLAG=1
|
||||
CONFIG_BOUNCE=y
|
||||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_UNEVICTABLE_LRU=y
|
||||
CONFIG_HAVE_MLOCK=y
|
||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||
# CONFIG_KSM is not set
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||
CONFIG_LEDS=y
|
||||
# CONFIG_LEDS_CPU is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
# CONFIG_UACCESS_WITH_MEMCPY is not set
|
||||
|
||||
#
|
||||
# Boot options
|
||||
|
@ -287,7 +307,24 @@ CONFIG_CMDLINE=""
|
|||
#
|
||||
# CPU Power Management
|
||||
#
|
||||
# CONFIG_CPU_IDLE is not set
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_TABLE=y
|
||||
# CONFIG_CPU_FREQ_DEBUG is not set
|
||||
CONFIG_CPU_FREQ_STAT=y
|
||||
# CONFIG_CPU_FREQ_STAT_DETAILS is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
|
||||
# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=m
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=m
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=m
|
||||
# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
|
||||
#
|
||||
# Floating point emulation
|
||||
|
@ -401,6 +438,7 @@ CONFIG_NETFILTER_ADVANCED=y
|
|||
# CONFIG_IP6_NF_IPTABLES is not set
|
||||
# CONFIG_IP_DCCP is not set
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_RDS is not set
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
|
@ -415,6 +453,7 @@ CONFIG_NETFILTER_ADVANCED=y
|
|||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
# CONFIG_PHONET is not set
|
||||
# CONFIG_IEEE802154 is not set
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_DCB is not set
|
||||
|
||||
|
@ -440,6 +479,7 @@ CONFIG_NETFILTER_ADVANCED=y
|
|||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_DEVTMPFS is not set
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
|
@ -460,6 +500,7 @@ CONFIG_BLK_DEV_RAM_SIZE=32768
|
|||
# CONFIG_BLK_DEV_XIP is not set
|
||||
# CONFIG_CDROM_PKTCDVD is not set
|
||||
# CONFIG_ATA_OVER_ETH is not set
|
||||
# CONFIG_MG_DISK is not set
|
||||
CONFIG_MISC_DEVICES=y
|
||||
# CONFIG_ICS932S401 is not set
|
||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||
|
@ -471,6 +512,7 @@ CONFIG_MISC_DEVICES=y
|
|||
#
|
||||
CONFIG_EEPROM_AT24=y
|
||||
# CONFIG_EEPROM_LEGACY is not set
|
||||
# CONFIG_EEPROM_MAX6875 is not set
|
||||
# CONFIG_EEPROM_93CX6 is not set
|
||||
CONFIG_HAVE_IDE=y
|
||||
# CONFIG_IDE is not set
|
||||
|
@ -494,10 +536,6 @@ CONFIG_BLK_DEV_SD=m
|
|||
# CONFIG_BLK_DEV_SR is not set
|
||||
# CONFIG_CHR_DEV_SG is not set
|
||||
# CONFIG_CHR_DEV_SCH is not set
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
#
|
||||
# CONFIG_SCSI_MULTI_LUN is not set
|
||||
# CONFIG_SCSI_CONSTANTS is not set
|
||||
# CONFIG_SCSI_LOGGING is not set
|
||||
|
@ -522,7 +560,6 @@ CONFIG_SCSI_LOWLEVEL=y
|
|||
# CONFIG_ATA is not set
|
||||
# CONFIG_MD is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_COMPAT_NET_DEV_OPS=y
|
||||
# CONFIG_DUMMY is not set
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_MACVLAN is not set
|
||||
|
@ -553,7 +590,7 @@ CONFIG_NET_ETHERNET=y
|
|||
CONFIG_MII=y
|
||||
# CONFIG_AX88796 is not set
|
||||
# CONFIG_SMC91X is not set
|
||||
# CONFIG_TI_DAVINCI_EMAC is not set
|
||||
CONFIG_TI_DAVINCI_EMAC=y
|
||||
# CONFIG_DM9000 is not set
|
||||
# CONFIG_ETHOC is not set
|
||||
# CONFIG_SMC911X is not set
|
||||
|
@ -567,12 +604,11 @@ CONFIG_MII=y
|
|||
# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
|
||||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_KS8842 is not set
|
||||
# CONFIG_KS8851_MLL is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
CONFIG_WLAN=y
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
|
||||
|
@ -588,6 +624,7 @@ CONFIG_NETPOLL=y
|
|||
CONFIG_NETPOLL_TRAP=y
|
||||
CONFIG_NET_POLL_CONTROLLER=y
|
||||
# CONFIG_ISDN is not set
|
||||
# CONFIG_PHONE is not set
|
||||
|
||||
#
|
||||
# Input device support
|
||||
|
@ -611,23 +648,30 @@ CONFIG_INPUT_EVBUG=m
|
|||
# Input Device Drivers
|
||||
#
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
# CONFIG_KEYBOARD_ADP5588 is not set
|
||||
CONFIG_KEYBOARD_ATKBD=m
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
# CONFIG_QT2160 is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
CONFIG_KEYBOARD_XTKBD=m
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
# CONFIG_KEYBOARD_MATRIX is not set
|
||||
# CONFIG_KEYBOARD_MAX7359 is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_KEYBOARD_OPENCORES is not set
|
||||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
CONFIG_KEYBOARD_XTKBD=m
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
# CONFIG_INPUT_JOYSTICK is not set
|
||||
# CONFIG_INPUT_TABLET is not set
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
|
||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||
# CONFIG_TOUCHSCREEN_EETI is not set
|
||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
|
||||
# CONFIG_TOUCHSCREEN_MCS5000 is not set
|
||||
# CONFIG_TOUCHSCREEN_MTOUCH is not set
|
||||
# CONFIG_TOUCHSCREEN_INEXIO is not set
|
||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||
|
@ -636,6 +680,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
|
||||
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
|
||||
# CONFIG_TOUCHSCREEN_TSC2007 is not set
|
||||
# CONFIG_TOUCHSCREEN_W90X900 is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
|
@ -684,6 +729,7 @@ CONFIG_HW_RANDOM=m
|
|||
# CONFIG_TCG_TPM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_COMPAT=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
|
||||
|
@ -695,6 +741,7 @@ CONFIG_I2C_HELPER_AUTO=y
|
|||
# I2C system bus drivers (mostly embedded / system-on-chip)
|
||||
#
|
||||
CONFIG_I2C_DAVINCI=y
|
||||
# CONFIG_I2C_DESIGNWARE is not set
|
||||
# CONFIG_I2C_GPIO is not set
|
||||
# CONFIG_I2C_OCORES is not set
|
||||
# CONFIG_I2C_SIMTEC is not set
|
||||
|
@ -715,14 +762,17 @@ CONFIG_I2C_DAVINCI=y
|
|||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_MAX6875 is not set
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
# CONFIG_SPI is not set
|
||||
|
||||
#
|
||||
# PPS support
|
||||
#
|
||||
# CONFIG_PPS is not set
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
|
@ -736,8 +786,8 @@ CONFIG_GPIOLIB=y
|
|||
# I2C GPIO expanders:
|
||||
#
|
||||
# CONFIG_GPIO_MAX732X is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
CONFIG_GPIO_PCF857X=m
|
||||
CONFIG_GPIO_PCA953X=y
|
||||
CONFIG_GPIO_PCF857X=y
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
|
@ -746,11 +796,14 @@ CONFIG_GPIO_PCF857X=m
|
|||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# AC97 GPIO expanders:
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
# CONFIG_HWMON is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
# CONFIG_WATCHDOG_NOWAYOUT is not set
|
||||
|
||||
|
@ -782,31 +835,56 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# CONFIG_MFD_TC6393XB is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM831X is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_PCF50633 is not set
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia core support
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
# CONFIG_DVB_CORE is not set
|
||||
# CONFIG_VIDEO_MEDIA is not set
|
||||
|
||||
#
|
||||
# Multimedia drivers
|
||||
#
|
||||
# CONFIG_DAB is not set
|
||||
# CONFIG_AB3100_CORE is not set
|
||||
CONFIG_REGULATOR=y
|
||||
# CONFIG_REGULATOR_DEBUG is not set
|
||||
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
|
||||
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
||||
# CONFIG_REGULATOR_BQ24022 is not set
|
||||
# CONFIG_REGULATOR_MAX1586 is not set
|
||||
# CONFIG_REGULATOR_LP3971 is not set
|
||||
# CONFIG_REGULATOR_TPS65023 is not set
|
||||
CONFIG_REGULATOR_TPS6507X=y
|
||||
# CONFIG_MEDIA_SUPPORT is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_VGASTATE is not set
|
||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||
# CONFIG_FB is not set
|
||||
CONFIG_FB=y
|
||||
# CONFIG_FIRMWARE_EDID is not set
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||
# CONFIG_FB_SYS_FILLRECT is not set
|
||||
# CONFIG_FB_SYS_COPYAREA is not set
|
||||
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
||||
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||
# CONFIG_FB_SYS_FOPS is not set
|
||||
# CONFIG_FB_SVGALIB is not set
|
||||
# CONFIG_FB_MACMODES is not set
|
||||
# CONFIG_FB_BACKLIGHT is not set
|
||||
# CONFIG_FB_MODE_HELPERS is not set
|
||||
# CONFIG_FB_TILEBLITTING is not set
|
||||
|
||||
#
|
||||
# Frame buffer hardware drivers
|
||||
#
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
# CONFIG_FB_DAVINCI is not set
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
CONFIG_FB_DA8XX=y
|
||||
# CONFIG_FB_METRONOME is not set
|
||||
# CONFIG_FB_MB862XX is not set
|
||||
# CONFIG_FB_BROADSHEET is not set
|
||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||
|
||||
#
|
||||
|
@ -819,6 +897,16 @@ CONFIG_SSB_POSSIBLE=y
|
|||
#
|
||||
# CONFIG_VGA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||
# CONFIG_FONTS is not set
|
||||
CONFIG_FONT_8x8=y
|
||||
CONFIG_FONT_8x16=y
|
||||
CONFIG_LOGO=y
|
||||
CONFIG_LOGO_LINUX_MONO=y
|
||||
CONFIG_LOGO_LINUX_VGA16=y
|
||||
CONFIG_LOGO_LINUX_CLUT224=y
|
||||
CONFIG_SOUND=m
|
||||
# CONFIG_SOUND_OSS_CORE is not set
|
||||
CONFIG_SND=m
|
||||
|
@ -834,6 +922,11 @@ CONFIG_SND_SUPPORT_OLD_API=y
|
|||
CONFIG_SND_VERBOSE_PROCFS=y
|
||||
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||
# CONFIG_SND_DEBUG is not set
|
||||
# CONFIG_SND_RAWMIDI_SEQ is not set
|
||||
# CONFIG_SND_OPL3_LIB_SEQ is not set
|
||||
# CONFIG_SND_OPL4_LIB_SEQ is not set
|
||||
# CONFIG_SND_SBAWE_SEQ is not set
|
||||
# CONFIG_SND_EMU10K1_SEQ is not set
|
||||
CONFIG_SND_DRIVERS=y
|
||||
# CONFIG_SND_DUMMY is not set
|
||||
# CONFIG_SND_MTPAV is not set
|
||||
|
@ -842,6 +935,8 @@ CONFIG_SND_DRIVERS=y
|
|||
CONFIG_SND_ARM=y
|
||||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_DAVINCI_SOC=m
|
||||
# CONFIG_SND_DA830_SOC_EVM is not set
|
||||
# CONFIG_SND_DA850_SOC_EVM is not set
|
||||
CONFIG_SND_SOC_I2C_AND_SPI=m
|
||||
# CONFIG_SND_SOC_ALL_CODECS is not set
|
||||
# CONFIG_SOUND_PRIME is not set
|
||||
|
@ -849,14 +944,17 @@ CONFIG_SND_SOC_I2C_AND_SPI=m
|
|||
# CONFIG_USB_SUPPORT is not set
|
||||
# CONFIG_MMC is not set
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
# CONFIG_NEW_LEDS is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
# CONFIG_RTC_CLASS is not set
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
|
@ -877,14 +975,17 @@ CONFIG_FS_MBCACHE=y
|
|||
# CONFIG_REISERFS_FS is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_FS_POSIX_ACL is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_XFS_FS=m
|
||||
# CONFIG_XFS_QUOTA is not set
|
||||
# CONFIG_XFS_POSIX_ACL is not set
|
||||
# CONFIG_XFS_RT is not set
|
||||
# CONFIG_XFS_DEBUG is not set
|
||||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_FSNOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
CONFIG_INOTIFY=y
|
||||
CONFIG_INOTIFY_USER=y
|
||||
|
@ -943,7 +1044,6 @@ CONFIG_MINIX_FS=m
|
|||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
|
@ -1039,6 +1139,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
|
|||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
# CONFIG_MAGIC_SYSRQ is not set
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
|
@ -1056,6 +1157,7 @@ CONFIG_TIMER_STATS=y
|
|||
# CONFIG_DEBUG_OBJECTS is not set
|
||||
# CONFIG_SLUB_DEBUG_ON is not set
|
||||
# CONFIG_SLUB_STATS is not set
|
||||
# CONFIG_DEBUG_KMEMLEAK is not set
|
||||
CONFIG_DEBUG_PREEMPT=y
|
||||
CONFIG_DEBUG_RT_MUTEXES=y
|
||||
CONFIG_DEBUG_PI_LIST=y
|
||||
|
@ -1076,29 +1178,29 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||
# CONFIG_DEBUG_LIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
# CONFIG_PAGE_POISONING is not set
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_TRACING_SUPPORT=y
|
||||
|
||||
#
|
||||
# Tracers
|
||||
#
|
||||
CONFIG_FTRACE=y
|
||||
# CONFIG_FUNCTION_TRACER is not set
|
||||
# CONFIG_IRQSOFF_TRACER is not set
|
||||
# CONFIG_PREEMPT_TRACER is not set
|
||||
# CONFIG_SCHED_TRACER is not set
|
||||
# CONFIG_CONTEXT_SWITCH_TRACER is not set
|
||||
# CONFIG_EVENT_TRACER is not set
|
||||
# CONFIG_ENABLE_DEFAULT_TRACERS is not set
|
||||
# CONFIG_BOOT_TRACER is not set
|
||||
# CONFIG_TRACE_BRANCH_PROFILING is not set
|
||||
CONFIG_BRANCH_PROFILE_NONE=y
|
||||
# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
|
||||
# CONFIG_PROFILE_ALL_BRANCHES is not set
|
||||
# CONFIG_STACK_TRACER is not set
|
||||
# CONFIG_KMEMTRACE is not set
|
||||
# CONFIG_WORKQUEUE_TRACER is not set
|
||||
|
@ -1125,7 +1227,6 @@ CONFIG_CRYPTO=y
|
|||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
# CONFIG_CRYPTO_MANAGER is not set
|
||||
# CONFIG_CRYPTO_MANAGER2 is not set
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
|
@ -1157,11 +1258,13 @@ CONFIG_CRYPTO=y
|
|||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
# CONFIG_CRYPTO_VMAC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_GHASH is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
# CONFIG_CRYPTO_MD5 is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
|
@ -1,14 +1,13 @@
|
|||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.31-rc3-davinci1
|
||||
# Fri Jul 17 08:26:52 2009
|
||||
# Linux kernel version: 2.6.32-rc4
|
||||
# Mon Oct 12 14:13:12 2009
|
||||
#
|
||||
CONFIG_ARM=y
|
||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||
CONFIG_GENERIC_GPIO=y
|
||||
CONFIG_GENERIC_TIME=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_GENERIC_HARDIRQS=y
|
||||
CONFIG_STACKTRACE_SUPPORT=y
|
||||
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
|
||||
|
@ -46,11 +45,12 @@ CONFIG_POSIX_MQUEUE_SYSCTL=y
|
|||
#
|
||||
# RCU Subsystem
|
||||
#
|
||||
CONFIG_CLASSIC_RCU=y
|
||||
# CONFIG_TREE_RCU is not set
|
||||
# CONFIG_PREEMPT_RCU is not set
|
||||
CONFIG_TREE_RCU=y
|
||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||
# CONFIG_RCU_TRACE is not set
|
||||
CONFIG_RCU_FANOUT=32
|
||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||
# CONFIG_TREE_RCU_TRACE is not set
|
||||
# CONFIG_PREEMPT_RCU_TRACE is not set
|
||||
CONFIG_IKCONFIG=y
|
||||
CONFIG_IKCONFIG_PROC=y
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
|
@ -91,17 +91,15 @@ CONFIG_SHMEM=y
|
|||
CONFIG_AIO=y
|
||||
|
||||
#
|
||||
# Performance Counters
|
||||
# Kernel Performance Events And Counters
|
||||
#
|
||||
CONFIG_VM_EVENT_COUNTERS=y
|
||||
CONFIG_SLUB_DEBUG=y
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
CONFIG_COMPAT_BRK=y
|
||||
# CONFIG_SLAB is not set
|
||||
CONFIG_SLUB=y
|
||||
# CONFIG_SLOB is not set
|
||||
# CONFIG_PROFILING is not set
|
||||
# CONFIG_MARKERS is not set
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
# CONFIG_KPROBES is not set
|
||||
CONFIG_HAVE_KPROBES=y
|
||||
|
@ -145,6 +143,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
#
|
||||
# System Type
|
||||
#
|
||||
CONFIG_MMU=y
|
||||
# CONFIG_ARCH_AAEC2000 is not set
|
||||
# CONFIG_ARCH_INTEGRATOR is not set
|
||||
# CONFIG_ARCH_REALVIEW is not set
|
||||
|
@ -159,6 +158,7 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_STMP3XXX is not set
|
||||
# CONFIG_ARCH_NETX is not set
|
||||
# CONFIG_ARCH_H720X is not set
|
||||
# CONFIG_ARCH_NOMADIK is not set
|
||||
# CONFIG_ARCH_IOP13XX is not set
|
||||
# CONFIG_ARCH_IOP32X is not set
|
||||
# CONFIG_ARCH_IOP33X is not set
|
||||
|
@ -181,11 +181,13 @@ CONFIG_DEFAULT_IOSCHED="anticipatory"
|
|||
# CONFIG_ARCH_SA1100 is not set
|
||||
# CONFIG_ARCH_S3C2410 is not set
|
||||
# CONFIG_ARCH_S3C64XX is not set
|
||||
# CONFIG_ARCH_S5PC1XX is not set
|
||||
# CONFIG_ARCH_SHARK is not set
|
||||
# CONFIG_ARCH_LH7A40X is not set
|
||||
# CONFIG_ARCH_U300 is not set
|
||||
CONFIG_ARCH_DAVINCI=y
|
||||
# CONFIG_ARCH_OMAP is not set
|
||||
# CONFIG_ARCH_BCMRING is not set
|
||||
CONFIG_AINTC=y
|
||||
CONFIG_ARCH_DAVINCI_DMx=y
|
||||
|
||||
|
@ -208,6 +210,7 @@ CONFIG_ARCH_DAVINCI_DM365=y
|
|||
#
|
||||
CONFIG_MACH_DAVINCI_EVM=y
|
||||
CONFIG_MACH_SFFSDR=y
|
||||
CONFIG_MACH_NEUROS_OSD2=y
|
||||
CONFIG_MACH_DAVINCI_DM355_EVM=y
|
||||
CONFIG_MACH_DM355_LEOPARD=y
|
||||
CONFIG_MACH_DAVINCI_DM6467_EVM=y
|
||||
|
@ -224,7 +227,7 @@ CONFIG_CPU_32=y
|
|||
CONFIG_CPU_ARM926T=y
|
||||
CONFIG_CPU_32v5=y
|
||||
CONFIG_CPU_ABRT_EV5TJ=y
|
||||
CONFIG_CPU_PABRT_NOIFAR=y
|
||||
CONFIG_CPU_PABRT_LEGACY=y
|
||||
CONFIG_CPU_CACHE_VIVT=y
|
||||
CONFIG_CPU_COPY_V4WB=y
|
||||
CONFIG_CPU_TLB_V4WBI=y
|
||||
|
@ -239,6 +242,7 @@ CONFIG_ARM_THUMB=y
|
|||
# CONFIG_CPU_DCACHE_DISABLE is not set
|
||||
# CONFIG_CPU_DCACHE_WRITETHROUGH is not set
|
||||
# CONFIG_CPU_CACHE_ROUND_ROBIN is not set
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_COMMON_CLKDEV=y
|
||||
|
||||
#
|
||||
|
@ -259,6 +263,8 @@ CONFIG_VMSPLIT_3G=y
|
|||
# CONFIG_VMSPLIT_2G is not set
|
||||
# CONFIG_VMSPLIT_1G is not set
|
||||
CONFIG_PAGE_OFFSET=0xC0000000
|
||||
# CONFIG_PREEMPT_NONE is not set
|
||||
# CONFIG_PREEMPT_VOLUNTARY is not set
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_HZ=100
|
||||
CONFIG_AEABI=y
|
||||
|
@ -280,6 +286,7 @@ CONFIG_BOUNCE=y
|
|||
CONFIG_VIRT_TO_BUS=y
|
||||
CONFIG_HAVE_MLOCK=y
|
||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
||||
# CONFIG_KSM is not set
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||
CONFIG_LEDS=y
|
||||
# CONFIG_LEDS_CPU is not set
|
||||
|
@ -412,6 +419,7 @@ CONFIG_NETFILTER_ADVANCED=y
|
|||
# CONFIG_IP6_NF_IPTABLES is not set
|
||||
# CONFIG_IP_DCCP is not set
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_RDS is not set
|
||||
# CONFIG_TIPC is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
|
@ -452,6 +460,7 @@ CONFIG_NETFILTER_ADVANCED=y
|
|||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
|
||||
# CONFIG_DEVTMPFS is not set
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_FW_LOADER is not set
|
||||
|
@ -461,9 +470,9 @@ CONFIG_PREVENT_FIRMWARE_BUILD=y
|
|||
# CONFIG_CONNECTOR is not set
|
||||
CONFIG_MTD=m
|
||||
# CONFIG_MTD_DEBUG is not set
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_CONCAT is not set
|
||||
CONFIG_MTD_PARTITIONS=y
|
||||
# CONFIG_MTD_TESTS is not set
|
||||
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||
# CONFIG_MTD_AFS_PARTS is not set
|
||||
# CONFIG_MTD_AR7_PARTS is not set
|
||||
|
@ -499,7 +508,7 @@ CONFIG_MTD_CFI_I1=y
|
|||
CONFIG_MTD_CFI_I2=y
|
||||
# CONFIG_MTD_CFI_I4 is not set
|
||||
# CONFIG_MTD_CFI_I8 is not set
|
||||
# CONFIG_MTD_CFI_INTELEXT is not set
|
||||
CONFIG_MTD_CFI_INTELEXT=m
|
||||
CONFIG_MTD_CFI_AMDSTD=m
|
||||
# CONFIG_MTD_CFI_STAA is not set
|
||||
CONFIG_MTD_CFI_UTIL=m
|
||||
|
@ -694,12 +703,10 @@ CONFIG_DM9000_DEBUGLEVEL=4
|
|||
# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_KS8842 is not set
|
||||
# CONFIG_KS8851_MLL is not set
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
|
||||
#
|
||||
# Wireless LAN
|
||||
#
|
||||
CONFIG_WLAN=y
|
||||
# CONFIG_WLAN_PRE80211 is not set
|
||||
# CONFIG_WLAN_80211 is not set
|
||||
|
||||
|
@ -734,6 +741,7 @@ CONFIG_NETPOLL=y
|
|||
CONFIG_NETPOLL_TRAP=y
|
||||
CONFIG_NET_POLL_CONTROLLER=y
|
||||
# CONFIG_ISDN is not set
|
||||
# CONFIG_PHONE is not set
|
||||
|
||||
#
|
||||
# Input device support
|
||||
|
@ -745,10 +753,7 @@ CONFIG_INPUT=y
|
|||
#
|
||||
# Userland interfaces
|
||||
#
|
||||
CONFIG_INPUT_MOUSEDEV=m
|
||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
CONFIG_INPUT_EVDEV=m
|
||||
CONFIG_INPUT_EVBUG=m
|
||||
|
@ -757,12 +762,16 @@ CONFIG_INPUT_EVBUG=m
|
|||
# Input Device Drivers
|
||||
#
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
# CONFIG_KEYBOARD_ADP5588 is not set
|
||||
CONFIG_KEYBOARD_ATKBD=m
|
||||
# CONFIG_QT2160 is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
CONFIG_KEYBOARD_GPIO=y
|
||||
# CONFIG_KEYBOARD_MATRIX is not set
|
||||
# CONFIG_KEYBOARD_LM8323 is not set
|
||||
# CONFIG_KEYBOARD_MAX7359 is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
# CONFIG_KEYBOARD_OPENCORES is not set
|
||||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
CONFIG_KEYBOARD_XTKBD=m
|
||||
|
@ -777,6 +786,7 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||
# CONFIG_TOUCHSCREEN_ELO is not set
|
||||
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
|
||||
# CONFIG_TOUCHSCREEN_MCS5000 is not set
|
||||
# CONFIG_TOUCHSCREEN_MTOUCH is not set
|
||||
# CONFIG_TOUCHSCREEN_INEXIO is not set
|
||||
# CONFIG_TOUCHSCREEN_MK712 is not set
|
||||
|
@ -787,7 +797,17 @@ CONFIG_INPUT_TOUCHSCREEN=y
|
|||
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
|
||||
# CONFIG_TOUCHSCREEN_TSC2007 is not set
|
||||
# CONFIG_TOUCHSCREEN_W90X900 is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
CONFIG_INPUT_MISC=y
|
||||
# CONFIG_INPUT_ATI_REMOTE is not set
|
||||
# CONFIG_INPUT_ATI_REMOTE2 is not set
|
||||
# CONFIG_INPUT_KEYSPAN_REMOTE is not set
|
||||
# CONFIG_INPUT_POWERMATE is not set
|
||||
# CONFIG_INPUT_YEALINK is not set
|
||||
# CONFIG_INPUT_CM109 is not set
|
||||
# CONFIG_INPUT_UINPUT is not set
|
||||
# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
|
||||
CONFIG_INPUT_DM355EVM=m
|
||||
CONFIG_INPUT_DM365EVM=m
|
||||
|
||||
#
|
||||
# Hardware I/O ports
|
||||
|
@ -828,13 +848,13 @@ CONFIG_UNIX98_PTYS=y
|
|||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
CONFIG_HW_RANDOM=m
|
||||
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
# CONFIG_TCG_TPM is not set
|
||||
CONFIG_I2C=y
|
||||
CONFIG_I2C_BOARDINFO=y
|
||||
CONFIG_I2C_COMPAT=y
|
||||
CONFIG_I2C_CHARDEV=y
|
||||
CONFIG_I2C_HELPER_AUTO=y
|
||||
|
||||
|
@ -868,13 +888,17 @@ CONFIG_I2C_DAVINCI=y
|
|||
# Miscellaneous I2C Chip support
|
||||
#
|
||||
# CONFIG_DS1682 is not set
|
||||
# CONFIG_SENSORS_PCA9539 is not set
|
||||
# CONFIG_SENSORS_TSL2550 is not set
|
||||
# CONFIG_I2C_DEBUG_CORE is not set
|
||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||
# CONFIG_I2C_DEBUG_BUS is not set
|
||||
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||
# CONFIG_SPI is not set
|
||||
|
||||
#
|
||||
# PPS support
|
||||
#
|
||||
# CONFIG_PPS is not set
|
||||
CONFIG_ARCH_REQUIRE_GPIOLIB=y
|
||||
CONFIG_GPIOLIB=y
|
||||
# CONFIG_DEBUG_GPIO is not set
|
||||
|
@ -889,7 +913,7 @@ CONFIG_GPIOLIB=y
|
|||
#
|
||||
# CONFIG_GPIO_MAX732X is not set
|
||||
# CONFIG_GPIO_PCA953X is not set
|
||||
CONFIG_GPIO_PCF857X=m
|
||||
CONFIG_GPIO_PCF857X=y
|
||||
|
||||
#
|
||||
# PCI GPIO expanders:
|
||||
|
@ -898,10 +922,19 @@ CONFIG_GPIO_PCF857X=m
|
|||
#
|
||||
# SPI GPIO expanders:
|
||||
#
|
||||
|
||||
#
|
||||
# AC97 GPIO expanders:
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
# CONFIG_POWER_SUPPLY is not set
|
||||
CONFIG_HWMON=y
|
||||
# CONFIG_HWMON_VID is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
|
||||
#
|
||||
# Native drivers
|
||||
#
|
||||
# CONFIG_SENSORS_AD7414 is not set
|
||||
# CONFIG_SENSORS_AD7418 is not set
|
||||
# CONFIG_SENSORS_ADM1021 is not set
|
||||
|
@ -950,6 +983,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_ADS7828 is not set
|
||||
# CONFIG_SENSORS_THMC50 is not set
|
||||
# CONFIG_SENSORS_TMP401 is not set
|
||||
# CONFIG_SENSORS_TMP421 is not set
|
||||
# CONFIG_SENSORS_VT1211 is not set
|
||||
# CONFIG_SENSORS_W83781D is not set
|
||||
# CONFIG_SENSORS_W83791D is not set
|
||||
|
@ -959,9 +993,7 @@ CONFIG_HWMON=y
|
|||
# CONFIG_SENSORS_W83L786NG is not set
|
||||
# CONFIG_SENSORS_W83627HF is not set
|
||||
# CONFIG_SENSORS_W83627EHF is not set
|
||||
# CONFIG_HWMON_DEBUG_CHIP is not set
|
||||
# CONFIG_THERMAL is not set
|
||||
# CONFIG_THERMAL_HWMON is not set
|
||||
CONFIG_WATCHDOG=y
|
||||
# CONFIG_WATCHDOG_NOWAYOUT is not set
|
||||
|
||||
|
@ -988,7 +1020,7 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# CONFIG_MFD_CORE is not set
|
||||
# CONFIG_MFD_SM501 is not set
|
||||
# CONFIG_MFD_ASIC3 is not set
|
||||
# CONFIG_MFD_DM355EVM_MSP is not set
|
||||
CONFIG_MFD_DM355EVM_MSP=y
|
||||
# CONFIG_HTC_EGPIO is not set
|
||||
# CONFIG_HTC_PASIC3 is not set
|
||||
# CONFIG_TPS65010 is not set
|
||||
|
@ -999,9 +1031,11 @@ CONFIG_SSB_POSSIBLE=y
|
|||
# CONFIG_MFD_TC6393XB is not set
|
||||
# CONFIG_PMIC_DA903X is not set
|
||||
# CONFIG_MFD_WM8400 is not set
|
||||
# CONFIG_MFD_WM831X is not set
|
||||
# CONFIG_MFD_WM8350_I2C is not set
|
||||
# CONFIG_MFD_PCF50633 is not set
|
||||
# CONFIG_AB3100_CORE is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_MEDIA_SUPPORT is not set
|
||||
|
||||
#
|
||||
|
@ -1013,9 +1047,9 @@ CONFIG_FB=y
|
|||
CONFIG_FIRMWARE_EDID=y
|
||||
# CONFIG_FB_DDC is not set
|
||||
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
|
||||
# CONFIG_FB_CFB_FILLRECT is not set
|
||||
# CONFIG_FB_CFB_COPYAREA is not set
|
||||
# CONFIG_FB_CFB_IMAGEBLIT is not set
|
||||
CONFIG_FB_CFB_FILLRECT=y
|
||||
CONFIG_FB_CFB_COPYAREA=y
|
||||
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||
# CONFIG_FB_SYS_FILLRECT is not set
|
||||
# CONFIG_FB_SYS_COPYAREA is not set
|
||||
|
@ -1032,6 +1066,7 @@ CONFIG_FIRMWARE_EDID=y
|
|||
# Frame buffer hardware drivers
|
||||
#
|
||||
# CONFIG_FB_S1D13XXX is not set
|
||||
CONFIG_FB_DAVINCI=y
|
||||
# CONFIG_FB_VIRTUAL is not set
|
||||
# CONFIG_FB_METRONOME is not set
|
||||
# CONFIG_FB_MB862XX is not set
|
||||
|
@ -1101,7 +1136,6 @@ CONFIG_SND_SOC_TLV320AIC3X=m
|
|||
# CONFIG_SOUND_PRIME is not set
|
||||
CONFIG_HID_SUPPORT=y
|
||||
CONFIG_HID=m
|
||||
# CONFIG_HID_DEBUG is not set
|
||||
# CONFIG_HIDRAW is not set
|
||||
|
||||
#
|
||||
|
@ -1130,6 +1164,7 @@ CONFIG_HID_CYPRESS=m
|
|||
CONFIG_HID_EZKEY=m
|
||||
# CONFIG_HID_KYE is not set
|
||||
CONFIG_HID_GYRATION=m
|
||||
# CONFIG_HID_TWINHAN is not set
|
||||
# CONFIG_HID_KENSINGTON is not set
|
||||
CONFIG_HID_LOGITECH=m
|
||||
# CONFIG_LOGITECH_FF is not set
|
||||
|
@ -1176,6 +1211,7 @@ CONFIG_USB_MON=m
|
|||
# CONFIG_USB_OXU210HP_HCD is not set
|
||||
# CONFIG_USB_ISP116X_HCD is not set
|
||||
# CONFIG_USB_ISP1760_HCD is not set
|
||||
# CONFIG_USB_ISP1362_HCD is not set
|
||||
# CONFIG_USB_SL811_HCD is not set
|
||||
# CONFIG_USB_R8A66597_HCD is not set
|
||||
# CONFIG_USB_HWA_HCD is not set
|
||||
|
@ -1269,6 +1305,7 @@ CONFIG_USB_GADGET_SELECTED=y
|
|||
# CONFIG_USB_GADGET_LH7A40X is not set
|
||||
# CONFIG_USB_GADGET_OMAP is not set
|
||||
# CONFIG_USB_GADGET_PXA25X is not set
|
||||
# CONFIG_USB_GADGET_R8A66597 is not set
|
||||
# CONFIG_USB_GADGET_PXA27X is not set
|
||||
# CONFIG_USB_GADGET_S3C_HSOTG is not set
|
||||
# CONFIG_USB_GADGET_IMX is not set
|
||||
|
@ -1286,6 +1323,7 @@ CONFIG_USB_ZERO=m
|
|||
# CONFIG_USB_AUDIO is not set
|
||||
CONFIG_USB_ETH=m
|
||||
CONFIG_USB_ETH_RNDIS=y
|
||||
# CONFIG_USB_ETH_EEM is not set
|
||||
CONFIG_USB_GADGETFS=m
|
||||
CONFIG_USB_FILE_STORAGE=m
|
||||
# CONFIG_USB_FILE_STORAGE_TEST is not set
|
||||
|
@ -1316,8 +1354,10 @@ CONFIG_MMC_BLOCK=m
|
|||
# MMC/SD/SDIO Host Controller Drivers
|
||||
#
|
||||
# CONFIG_MMC_SDHCI is not set
|
||||
# CONFIG_MMC_AT91 is not set
|
||||
# CONFIG_MMC_ATMELMCI is not set
|
||||
CONFIG_MMC_DAVINCI=m
|
||||
# CONFIG_MEMSTICK is not set
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=m
|
||||
|
||||
|
@ -1345,6 +1385,7 @@ CONFIG_LEDS_TRIGGER_HEARTBEAT=m
|
|||
#
|
||||
# iptables trigger is under Netfilter config (LED target)
|
||||
#
|
||||
# CONFIG_ACCESSIBILITY is not set
|
||||
CONFIG_RTC_LIB=y
|
||||
CONFIG_RTC_CLASS=m
|
||||
|
||||
|
@ -1370,6 +1411,7 @@ CONFIG_RTC_INTF_DEV=y
|
|||
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||
# CONFIG_RTC_DRV_M41T80 is not set
|
||||
# CONFIG_RTC_DRV_DM355EVM is not set
|
||||
# CONFIG_RTC_DRV_S35390A is not set
|
||||
# CONFIG_RTC_DRV_FM3130 is not set
|
||||
# CONFIG_RTC_DRV_RX8581 is not set
|
||||
|
@ -1399,8 +1441,11 @@ CONFIG_RTC_INTF_DEV=y
|
|||
#
|
||||
# CONFIG_DMADEVICES is not set
|
||||
# CONFIG_AUXDISPLAY is not set
|
||||
# CONFIG_REGULATOR is not set
|
||||
# CONFIG_UIO is not set
|
||||
|
||||
#
|
||||
# TI VLYNQ
|
||||
#
|
||||
# CONFIG_STAGING is not set
|
||||
|
||||
#
|
||||
|
@ -1429,6 +1474,7 @@ CONFIG_XFS_FS=m
|
|||
# CONFIG_GFS2_FS is not set
|
||||
# CONFIG_OCFS2_FS is not set
|
||||
# CONFIG_BTRFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_FILE_LOCKING=y
|
||||
CONFIG_FSNOTIFY=y
|
||||
CONFIG_DNOTIFY=y
|
||||
|
@ -1500,7 +1546,6 @@ CONFIG_MINIX_FS=m
|
|||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
# CONFIG_NILFS2_FS is not set
|
||||
CONFIG_NETWORK_FILESYSTEMS=y
|
||||
CONFIG_NFS_FS=y
|
||||
CONFIG_NFS_V3=y
|
||||
|
@ -1596,6 +1641,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
|
|||
CONFIG_ENABLE_MUST_CHECK=y
|
||||
CONFIG_FRAME_WARN=1024
|
||||
# CONFIG_MAGIC_SYSRQ is not set
|
||||
# CONFIG_STRIP_ASM_SYMS is not set
|
||||
# CONFIG_UNUSED_SYMBOLS is not set
|
||||
CONFIG_DEBUG_FS=y
|
||||
# CONFIG_HEADERS_CHECK is not set
|
||||
|
@ -1634,11 +1680,14 @@ CONFIG_DEBUG_BUGVERBOSE=y
|
|||
# CONFIG_DEBUG_LIST is not set
|
||||
# CONFIG_DEBUG_SG is not set
|
||||
# CONFIG_DEBUG_NOTIFIERS is not set
|
||||
# CONFIG_DEBUG_CREDENTIALS is not set
|
||||
CONFIG_FRAME_POINTER=y
|
||||
# CONFIG_BOOT_PRINTK_DELAY is not set
|
||||
# CONFIG_RCU_TORTURE_TEST is not set
|
||||
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
|
||||
# CONFIG_BACKTRACE_SELF_TEST is not set
|
||||
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
|
||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||
# CONFIG_FAULT_INJECTION is not set
|
||||
# CONFIG_LATENCYTOP is not set
|
||||
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||
|
@ -1663,7 +1712,7 @@ CONFIG_BRANCH_PROFILE_NONE=y
|
|||
# CONFIG_SAMPLES is not set
|
||||
CONFIG_HAVE_ARCH_KGDB=y
|
||||
# CONFIG_KGDB is not set
|
||||
CONFIG_ARM_UNWIND=y
|
||||
# CONFIG_ARM_UNWIND is not set
|
||||
CONFIG_DEBUG_USER=y
|
||||
CONFIG_DEBUG_ERRORS=y
|
||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||
|
@ -1681,7 +1730,6 @@ CONFIG_CRYPTO=y
|
|||
#
|
||||
# Crypto core or helper
|
||||
#
|
||||
# CONFIG_CRYPTO_FIPS is not set
|
||||
# CONFIG_CRYPTO_MANAGER is not set
|
||||
# CONFIG_CRYPTO_MANAGER2 is not set
|
||||
# CONFIG_CRYPTO_GF128MUL is not set
|
||||
|
@ -1713,11 +1761,13 @@ CONFIG_CRYPTO=y
|
|||
#
|
||||
# CONFIG_CRYPTO_HMAC is not set
|
||||
# CONFIG_CRYPTO_XCBC is not set
|
||||
# CONFIG_CRYPTO_VMAC is not set
|
||||
|
||||
#
|
||||
# Digest
|
||||
#
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_GHASH is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
# CONFIG_CRYPTO_MD5 is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
|
|
|
@ -32,11 +32,13 @@ config ARCH_DAVINCI_DA830
|
|||
bool "DA830/OMAP-L137 based system"
|
||||
select CP_INTC
|
||||
select ARCH_DAVINCI_DA8XX
|
||||
select CPU_DCACHE_WRITETHROUGH # needed on silicon revs 1.0, 1.1
|
||||
|
||||
config ARCH_DAVINCI_DA850
|
||||
bool "DA850/OMAP-L138 based system"
|
||||
select CP_INTC
|
||||
select ARCH_DAVINCI_DA8XX
|
||||
select ARCH_HAS_CPUFREQ
|
||||
|
||||
config ARCH_DAVINCI_DA8XX
|
||||
bool
|
||||
|
@ -63,6 +65,13 @@ config MACH_SFFSDR
|
|||
Say Y here to select the Lyrtech Small Form Factor
|
||||
Software Defined Radio (SFFSDR) board.
|
||||
|
||||
config MACH_NEUROS_OSD2
|
||||
bool "Neuros OSD2 Open Television Set Top Box"
|
||||
depends on ARCH_DAVINCI_DM644x
|
||||
help
|
||||
Configure this option to specify the whether the board used
|
||||
for development is a Neuros OSD2 Open Set Top Box.
|
||||
|
||||
config MACH_DAVINCI_DM355_EVM
|
||||
bool "TI DM355 EVM"
|
||||
default ARCH_DAVINCI_DM355
|
||||
|
@ -98,16 +107,66 @@ config MACH_DAVINCI_DA830_EVM
|
|||
bool "TI DA830/OMAP-L137 Reference Platform"
|
||||
default ARCH_DAVINCI_DA830
|
||||
depends on ARCH_DAVINCI_DA830
|
||||
select GPIO_PCF857X
|
||||
help
|
||||
Say Y here to select the TI DA830/OMAP-L137 Evaluation Module.
|
||||
|
||||
choice
|
||||
prompt "Select DA830/OMAP-L137 UI board peripheral"
|
||||
depends on MACH_DAVINCI_DA830_EVM
|
||||
help
|
||||
The presence of UI card on the DA830/OMAP-L137 EVM is detected
|
||||
automatically based on successful probe of the I2C based GPIO
|
||||
expander on that board. This option selected in this menu has
|
||||
an effect only in case of a successful UI card detection.
|
||||
|
||||
config DA830_UI_LCD
|
||||
bool "LCD"
|
||||
help
|
||||
Say Y here to use the LCD as a framebuffer or simple character
|
||||
display.
|
||||
|
||||
config DA830_UI_NAND
|
||||
bool "NAND flash"
|
||||
help
|
||||
Say Y here to use the NAND flash. Do not forget to setup
|
||||
the switch correctly.
|
||||
endchoice
|
||||
|
||||
config MACH_DAVINCI_DA850_EVM
|
||||
bool "TI DA850/OMAP-L138 Reference Platform"
|
||||
default ARCH_DAVINCI_DA850
|
||||
depends on ARCH_DAVINCI_DA850
|
||||
select GPIO_PCA953X
|
||||
help
|
||||
Say Y here to select the TI DA850/OMAP-L138 Evaluation Module.
|
||||
|
||||
choice
|
||||
prompt "Select peripherals connected to expander on UI board"
|
||||
depends on MACH_DAVINCI_DA850_EVM
|
||||
help
|
||||
The presence of User Interface (UI) card on the DA850/OMAP-L138
|
||||
EVM is detected automatically based on successful probe of the I2C
|
||||
based GPIO expander on that card. This option selected in this
|
||||
menu has an effect only in case of a successful UI card detection.
|
||||
|
||||
config DA850_UI_NONE
|
||||
bool "No peripheral is enabled"
|
||||
help
|
||||
Say Y if you do not want to enable any of the peripherals connected
|
||||
to TCA6416 expander on DA850/OMAP-L138 EVM UI card
|
||||
|
||||
config DA850_UI_RMII
|
||||
bool "RMII Ethernet PHY"
|
||||
help
|
||||
Say Y if you want to use the RMII PHY on the DA850/OMAP-L138 EVM.
|
||||
This PHY is found on the UI daughter card that is supplied with
|
||||
the EVM.
|
||||
NOTE: Please take care while choosing this option, MII PHY will
|
||||
not be functional if RMII mode is selected.
|
||||
|
||||
endchoice
|
||||
|
||||
config DAVINCI_MUX
|
||||
bool "DAVINCI multiplexing support"
|
||||
depends on ARCH_DAVINCI
|
||||
|
|
|
@ -23,9 +23,14 @@ obj-$(CONFIG_CP_INTC) += cp_intc.o
|
|||
# Board specific
|
||||
obj-$(CONFIG_MACH_DAVINCI_EVM) += board-dm644x-evm.o
|
||||
obj-$(CONFIG_MACH_SFFSDR) += board-sffsdr.o
|
||||
obj-$(CONFIG_MACH_NEUROS_OSD2) += board-neuros-osd2.o
|
||||
obj-$(CONFIG_MACH_DAVINCI_DM355_EVM) += board-dm355-evm.o
|
||||
obj-$(CONFIG_MACH_DM355_LEOPARD) += board-dm355-leopard.o
|
||||
obj-$(CONFIG_MACH_DAVINCI_DM6467_EVM) += board-dm646x-evm.o
|
||||
obj-$(CONFIG_MACH_DAVINCI_DM365_EVM) += board-dm365-evm.o
|
||||
obj-$(CONFIG_MACH_DAVINCI_DA830_EVM) += board-da830-evm.o
|
||||
obj-$(CONFIG_MACH_DAVINCI_DA850_EVM) += board-da850-evm.o
|
||||
|
||||
# Power Management
|
||||
obj-$(CONFIG_CPU_FREQ) += cpufreq.o
|
||||
obj-$(CONFIG_CPU_IDLE) += cpuidle.o
|
||||
|
|
|
@ -10,51 +10,194 @@
|
|||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/pcf857x.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/cp_intc.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/nand.h>
|
||||
#include <mach/da8xx.h>
|
||||
#include <mach/asp.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
#define DA830_EVM_PHY_MASK 0x0
|
||||
#define DA830_EVM_MDIO_FREQUENCY 2200000 /* PHY bus frequency */
|
||||
|
||||
static struct at24_platform_data da830_evm_i2c_eeprom_info = {
|
||||
.byte_len = SZ_256K / 8,
|
||||
.page_size = 64,
|
||||
.flags = AT24_FLAG_ADDR16,
|
||||
.setup = davinci_get_mac_addr,
|
||||
.context = (void *)0x7f00,
|
||||
#define DA830_EMIF25_ASYNC_DATA_CE3_BASE 0x62000000
|
||||
#define DA830_EMIF25_CONTROL_BASE 0x68000000
|
||||
|
||||
/*
|
||||
* USB1 VBUS is controlled by GPIO1[15], over-current is reported on GPIO2[4].
|
||||
*/
|
||||
#define ON_BD_USB_DRV GPIO_TO_PIN(1, 15)
|
||||
#define ON_BD_USB_OVC GPIO_TO_PIN(2, 4)
|
||||
|
||||
static const short da830_evm_usb11_pins[] = {
|
||||
DA830_GPIO1_15, DA830_GPIO2_4,
|
||||
-1
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata da830_evm_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c256", 0x50),
|
||||
.platform_data = &da830_evm_i2c_eeprom_info,
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("tlv320aic3x", 0x18),
|
||||
static da8xx_ocic_handler_t da830_evm_usb_ocic_handler;
|
||||
|
||||
static int da830_evm_usb_set_power(unsigned port, int on)
|
||||
{
|
||||
gpio_set_value(ON_BD_USB_DRV, on);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int da830_evm_usb_get_power(unsigned port)
|
||||
{
|
||||
return gpio_get_value(ON_BD_USB_DRV);
|
||||
}
|
||||
|
||||
static int da830_evm_usb_get_oci(unsigned port)
|
||||
{
|
||||
return !gpio_get_value(ON_BD_USB_OVC);
|
||||
}
|
||||
|
||||
static irqreturn_t da830_evm_usb_ocic_irq(int, void *);
|
||||
|
||||
static int da830_evm_usb_ocic_notify(da8xx_ocic_handler_t handler)
|
||||
{
|
||||
int irq = gpio_to_irq(ON_BD_USB_OVC);
|
||||
int error = 0;
|
||||
|
||||
if (handler != NULL) {
|
||||
da830_evm_usb_ocic_handler = handler;
|
||||
|
||||
error = request_irq(irq, da830_evm_usb_ocic_irq, IRQF_DISABLED |
|
||||
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
|
||||
"OHCI over-current indicator", NULL);
|
||||
if (error)
|
||||
printk(KERN_ERR "%s: could not request IRQ to watch "
|
||||
"over-current indicator changes\n", __func__);
|
||||
} else
|
||||
free_irq(irq, NULL);
|
||||
|
||||
return error;
|
||||
}
|
||||
|
||||
static struct da8xx_ohci_root_hub da830_evm_usb11_pdata = {
|
||||
.set_power = da830_evm_usb_set_power,
|
||||
.get_power = da830_evm_usb_get_power,
|
||||
.get_oci = da830_evm_usb_get_oci,
|
||||
.ocic_notify = da830_evm_usb_ocic_notify,
|
||||
|
||||
/* TPS2065 switch @ 5V */
|
||||
.potpgt = (3 + 1) / 2, /* 3 ms max */
|
||||
};
|
||||
|
||||
static irqreturn_t da830_evm_usb_ocic_irq(int irq, void *dev_id)
|
||||
{
|
||||
da830_evm_usb_ocic_handler(&da830_evm_usb11_pdata, 1);
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static __init void da830_evm_usb_init(void)
|
||||
{
|
||||
u32 cfgchip2;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* Set up USB clock/mode in the CFGCHIP2 register.
|
||||
* FYI: CFGCHIP2 is 0x0000ef00 initially.
|
||||
*/
|
||||
cfgchip2 = __raw_readl(DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP2_REG));
|
||||
|
||||
/* USB2.0 PHY reference clock is 24 MHz */
|
||||
cfgchip2 &= ~CFGCHIP2_REFFREQ;
|
||||
cfgchip2 |= CFGCHIP2_REFFREQ_24MHZ;
|
||||
|
||||
/*
|
||||
* Select internal reference clock for USB 2.0 PHY
|
||||
* and use it as a clock source for USB 1.1 PHY
|
||||
* (this is the default setting anyway).
|
||||
*/
|
||||
cfgchip2 &= ~CFGCHIP2_USB1PHYCLKMUX;
|
||||
cfgchip2 |= CFGCHIP2_USB2PHYCLKMUX;
|
||||
|
||||
/*
|
||||
* We have to override VBUS/ID signals when MUSB is configured into the
|
||||
* host-only mode -- ID pin will float if no cable is connected, so the
|
||||
* controller won't be able to drive VBUS thinking that it's a B-device.
|
||||
* Otherwise, we want to use the OTG mode and enable VBUS comparators.
|
||||
*/
|
||||
cfgchip2 &= ~CFGCHIP2_OTGMODE;
|
||||
#ifdef CONFIG_USB_MUSB_HOST
|
||||
cfgchip2 |= CFGCHIP2_FORCE_HOST;
|
||||
#else
|
||||
cfgchip2 |= CFGCHIP2_SESENDEN | CFGCHIP2_VBDTCTEN;
|
||||
#endif
|
||||
|
||||
__raw_writel(cfgchip2, DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP2_REG));
|
||||
|
||||
/* USB_REFCLKIN is not used. */
|
||||
ret = davinci_cfg_reg(DA830_USB0_DRVVBUS);
|
||||
if (ret)
|
||||
pr_warning("%s: USB 2.0 PinMux setup failed: %d\n",
|
||||
__func__, ret);
|
||||
else {
|
||||
/*
|
||||
* TPS2065 switch @ 5V supplies 1 A (sustains 1.5 A),
|
||||
* with the power on to power good time of 3 ms.
|
||||
*/
|
||||
ret = da8xx_register_usb20(1000, 3);
|
||||
if (ret)
|
||||
pr_warning("%s: USB 2.0 registration failed: %d\n",
|
||||
__func__, ret);
|
||||
}
|
||||
};
|
||||
|
||||
static struct davinci_i2c_platform_data da830_evm_i2c_0_pdata = {
|
||||
.bus_freq = 100, /* kHz */
|
||||
.bus_delay = 0, /* usec */
|
||||
};
|
||||
ret = da8xx_pinmux_setup(da830_evm_usb11_pins);
|
||||
if (ret) {
|
||||
pr_warning("%s: USB 1.1 PinMux setup failed: %d\n",
|
||||
__func__, ret);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = gpio_request(ON_BD_USB_DRV, "ON_BD_USB_DRV");
|
||||
if (ret) {
|
||||
printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port "
|
||||
"power control: %d\n", __func__, ret);
|
||||
return;
|
||||
}
|
||||
gpio_direction_output(ON_BD_USB_DRV, 0);
|
||||
|
||||
ret = gpio_request(ON_BD_USB_OVC, "ON_BD_USB_OVC");
|
||||
if (ret) {
|
||||
printk(KERN_ERR "%s: failed to request GPIO for USB 1.1 port "
|
||||
"over-current indicator: %d\n", __func__, ret);
|
||||
return;
|
||||
}
|
||||
gpio_direction_input(ON_BD_USB_OVC);
|
||||
|
||||
ret = da8xx_register_usb11(&da830_evm_usb11_pdata);
|
||||
if (ret)
|
||||
pr_warning("%s: USB 1.1 registration failed: %d\n",
|
||||
__func__, ret);
|
||||
}
|
||||
|
||||
static struct davinci_uart_config da830_evm_uart_config __initdata = {
|
||||
.enabled_uarts = 0x7,
|
||||
};
|
||||
|
||||
static const short da830_evm_mcasp1_pins[] = {
|
||||
DA830_AHCLKX1, DA830_ACLKX1, DA830_AFSX1, DA830_AHCLKR1, DA830_AFSR1,
|
||||
DA830_AMUTE1, DA830_AXR1_0, DA830_AXR1_1, DA830_AXR1_2, DA830_AXR1_5,
|
||||
DA830_ACLKR1, DA830_AXR1_6, DA830_AXR1_7, DA830_AXR1_8, DA830_AXR1_10,
|
||||
DA830_AXR1_11,
|
||||
-1
|
||||
};
|
||||
|
||||
static u8 da830_iis_serializer_direction[] = {
|
||||
RX_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
||||
INACTIVE_MODE, TX_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
||||
|
@ -74,6 +217,271 @@ static struct snd_platform_data da830_evm_snd_data = {
|
|||
.rxnumevt = 1,
|
||||
};
|
||||
|
||||
/*
|
||||
* GPIO2[1] is used as MMC_SD_WP and GPIO2[2] as MMC_SD_INS.
|
||||
*/
|
||||
static const short da830_evm_mmc_sd_pins[] = {
|
||||
DA830_MMCSD_DAT_0, DA830_MMCSD_DAT_1, DA830_MMCSD_DAT_2,
|
||||
DA830_MMCSD_DAT_3, DA830_MMCSD_DAT_4, DA830_MMCSD_DAT_5,
|
||||
DA830_MMCSD_DAT_6, DA830_MMCSD_DAT_7, DA830_MMCSD_CLK,
|
||||
DA830_MMCSD_CMD, DA830_GPIO2_1, DA830_GPIO2_2,
|
||||
-1
|
||||
};
|
||||
|
||||
#define DA830_MMCSD_WP_PIN GPIO_TO_PIN(2, 1)
|
||||
|
||||
static int da830_evm_mmc_get_ro(int index)
|
||||
{
|
||||
return gpio_get_value(DA830_MMCSD_WP_PIN);
|
||||
}
|
||||
|
||||
static struct davinci_mmc_config da830_evm_mmc_config = {
|
||||
.get_ro = da830_evm_mmc_get_ro,
|
||||
.wires = 4,
|
||||
.max_freq = 50000000,
|
||||
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
|
||||
.version = MMC_CTLR_VERSION_2,
|
||||
};
|
||||
|
||||
static inline void da830_evm_init_mmc(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = da8xx_pinmux_setup(da830_evm_mmc_sd_pins);
|
||||
if (ret) {
|
||||
pr_warning("da830_evm_init: mmc/sd mux setup failed: %d\n",
|
||||
ret);
|
||||
return;
|
||||
}
|
||||
|
||||
ret = gpio_request(DA830_MMCSD_WP_PIN, "MMC WP");
|
||||
if (ret) {
|
||||
pr_warning("da830_evm_init: can not open GPIO %d\n",
|
||||
DA830_MMCSD_WP_PIN);
|
||||
return;
|
||||
}
|
||||
gpio_direction_input(DA830_MMCSD_WP_PIN);
|
||||
|
||||
ret = da8xx_register_mmcsd0(&da830_evm_mmc_config);
|
||||
if (ret) {
|
||||
pr_warning("da830_evm_init: mmc/sd registration failed: %d\n",
|
||||
ret);
|
||||
gpio_free(DA830_MMCSD_WP_PIN);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* UI board NAND/NOR flashes only use 8-bit data bus.
|
||||
*/
|
||||
static const short da830_evm_emif25_pins[] = {
|
||||
DA830_EMA_D_0, DA830_EMA_D_1, DA830_EMA_D_2, DA830_EMA_D_3,
|
||||
DA830_EMA_D_4, DA830_EMA_D_5, DA830_EMA_D_6, DA830_EMA_D_7,
|
||||
DA830_EMA_A_0, DA830_EMA_A_1, DA830_EMA_A_2, DA830_EMA_A_3,
|
||||
DA830_EMA_A_4, DA830_EMA_A_5, DA830_EMA_A_6, DA830_EMA_A_7,
|
||||
DA830_EMA_A_8, DA830_EMA_A_9, DA830_EMA_A_10, DA830_EMA_A_11,
|
||||
DA830_EMA_A_12, DA830_EMA_BA_0, DA830_EMA_BA_1, DA830_NEMA_WE,
|
||||
DA830_NEMA_CS_2, DA830_NEMA_CS_3, DA830_NEMA_OE, DA830_EMA_WAIT_0,
|
||||
-1
|
||||
};
|
||||
|
||||
#if defined(CONFIG_MMC_DAVINCI) || defined(CONFIG_MMC_DAVINCI_MODULE)
|
||||
#define HAS_MMC 1
|
||||
#else
|
||||
#define HAS_MMC 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DA830_UI_NAND
|
||||
static struct mtd_partition da830_evm_nand_partitions[] = {
|
||||
/* bootloader (U-Boot, etc) in first sector */
|
||||
[0] = {
|
||||
.name = "bootloader",
|
||||
.offset = 0,
|
||||
.size = SZ_128K,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
},
|
||||
/* bootloader params in the next sector */
|
||||
[1] = {
|
||||
.name = "params",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_128K,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
},
|
||||
/* kernel */
|
||||
[2] = {
|
||||
.name = "kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_2M,
|
||||
.mask_flags = 0,
|
||||
},
|
||||
/* file system */
|
||||
[3] = {
|
||||
.name = "filesystem",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.mask_flags = 0,
|
||||
}
|
||||
};
|
||||
|
||||
/* flash bbt decriptors */
|
||||
static uint8_t da830_evm_nand_bbt_pattern[] = { 'B', 'b', 't', '0' };
|
||||
static uint8_t da830_evm_nand_mirror_pattern[] = { '1', 't', 'b', 'B' };
|
||||
|
||||
static struct nand_bbt_descr da830_evm_nand_bbt_main_descr = {
|
||||
.options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE |
|
||||
NAND_BBT_WRITE | NAND_BBT_2BIT |
|
||||
NAND_BBT_VERSION | NAND_BBT_PERCHIP,
|
||||
.offs = 2,
|
||||
.len = 4,
|
||||
.veroffs = 16,
|
||||
.maxblocks = 4,
|
||||
.pattern = da830_evm_nand_bbt_pattern
|
||||
};
|
||||
|
||||
static struct nand_bbt_descr da830_evm_nand_bbt_mirror_descr = {
|
||||
.options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE |
|
||||
NAND_BBT_WRITE | NAND_BBT_2BIT |
|
||||
NAND_BBT_VERSION | NAND_BBT_PERCHIP,
|
||||
.offs = 2,
|
||||
.len = 4,
|
||||
.veroffs = 16,
|
||||
.maxblocks = 4,
|
||||
.pattern = da830_evm_nand_mirror_pattern
|
||||
};
|
||||
|
||||
static struct davinci_nand_pdata da830_evm_nand_pdata = {
|
||||
.parts = da830_evm_nand_partitions,
|
||||
.nr_parts = ARRAY_SIZE(da830_evm_nand_partitions),
|
||||
.ecc_mode = NAND_ECC_HW,
|
||||
.ecc_bits = 4,
|
||||
.options = NAND_USE_FLASH_BBT,
|
||||
.bbt_td = &da830_evm_nand_bbt_main_descr,
|
||||
.bbt_md = &da830_evm_nand_bbt_mirror_descr,
|
||||
};
|
||||
|
||||
static struct resource da830_evm_nand_resources[] = {
|
||||
[0] = { /* First memory resource is NAND I/O window */
|
||||
.start = DA830_EMIF25_ASYNC_DATA_CE3_BASE,
|
||||
.end = DA830_EMIF25_ASYNC_DATA_CE3_BASE + PAGE_SIZE - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = { /* Second memory resource is AEMIF control registers */
|
||||
.start = DA830_EMIF25_CONTROL_BASE,
|
||||
.end = DA830_EMIF25_CONTROL_BASE + SZ_32K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device da830_evm_nand_device = {
|
||||
.name = "davinci_nand",
|
||||
.id = 1,
|
||||
.dev = {
|
||||
.platform_data = &da830_evm_nand_pdata,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(da830_evm_nand_resources),
|
||||
.resource = da830_evm_nand_resources,
|
||||
};
|
||||
|
||||
static inline void da830_evm_init_nand(int mux_mode)
|
||||
{
|
||||
int ret;
|
||||
|
||||
if (HAS_MMC) {
|
||||
pr_warning("WARNING: both MMC/SD and NAND are "
|
||||
"enabled, but they share AEMIF pins.\n"
|
||||
"\tDisable MMC/SD for NAND support.\n");
|
||||
return;
|
||||
}
|
||||
|
||||
ret = da8xx_pinmux_setup(da830_evm_emif25_pins);
|
||||
if (ret)
|
||||
pr_warning("da830_evm_init: emif25 mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = platform_device_register(&da830_evm_nand_device);
|
||||
if (ret)
|
||||
pr_warning("da830_evm_init: NAND device not registered.\n");
|
||||
|
||||
gpio_direction_output(mux_mode, 1);
|
||||
}
|
||||
#else
|
||||
static inline void da830_evm_init_nand(int mux_mode) { }
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_DA830_UI_LCD
|
||||
static inline void da830_evm_init_lcdc(int mux_mode)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = da8xx_pinmux_setup(da830_lcdcntl_pins);
|
||||
if (ret)
|
||||
pr_warning("da830_evm_init: lcdcntl mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = da8xx_register_lcdc(&sharp_lcd035q3dg01_pdata);
|
||||
if (ret)
|
||||
pr_warning("da830_evm_init: lcd setup failed: %d\n", ret);
|
||||
|
||||
gpio_direction_output(mux_mode, 0);
|
||||
}
|
||||
#else
|
||||
static inline void da830_evm_init_lcdc(int mux_mode) { }
|
||||
#endif
|
||||
|
||||
static struct at24_platform_data da830_evm_i2c_eeprom_info = {
|
||||
.byte_len = SZ_256K / 8,
|
||||
.page_size = 64,
|
||||
.flags = AT24_FLAG_ADDR16,
|
||||
.setup = davinci_get_mac_addr,
|
||||
.context = (void *)0x7f00,
|
||||
};
|
||||
|
||||
static int __init da830_evm_ui_expander_setup(struct i2c_client *client,
|
||||
int gpio, unsigned ngpio, void *context)
|
||||
{
|
||||
gpio_request(gpio + 6, "UI MUX_MODE");
|
||||
|
||||
/* Drive mux mode low to match the default without UI card */
|
||||
gpio_direction_output(gpio + 6, 0);
|
||||
|
||||
da830_evm_init_lcdc(gpio + 6);
|
||||
|
||||
da830_evm_init_nand(gpio + 6);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int da830_evm_ui_expander_teardown(struct i2c_client *client, int gpio,
|
||||
unsigned ngpio, void *context)
|
||||
{
|
||||
gpio_free(gpio + 6);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pcf857x_platform_data __initdata da830_evm_ui_expander_info = {
|
||||
.gpio_base = DAVINCI_N_GPIO,
|
||||
.setup = da830_evm_ui_expander_setup,
|
||||
.teardown = da830_evm_ui_expander_teardown,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata da830_evm_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c256", 0x50),
|
||||
.platform_data = &da830_evm_i2c_eeprom_info,
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("tlv320aic3x", 0x18),
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("pcf8574", 0x3f),
|
||||
.platform_data = &da830_evm_ui_expander_info,
|
||||
},
|
||||
};
|
||||
|
||||
static struct davinci_i2c_platform_data da830_evm_i2c_0_pdata = {
|
||||
.bus_freq = 100, /* kHz */
|
||||
.bus_delay = 0, /* usec */
|
||||
};
|
||||
|
||||
static __init void da830_evm_init(void)
|
||||
{
|
||||
struct davinci_soc_info *soc_info = &davinci_soc_info;
|
||||
|
@ -94,6 +502,8 @@ static __init void da830_evm_init(void)
|
|||
pr_warning("da830_evm_init: i2c0 registration failed: %d\n",
|
||||
ret);
|
||||
|
||||
da830_evm_usb_init();
|
||||
|
||||
soc_info->emac_pdata->phy_mask = DA830_EVM_PHY_MASK;
|
||||
soc_info->emac_pdata->mdio_max_freq = DA830_EVM_MDIO_FREQUENCY;
|
||||
soc_info->emac_pdata->rmii_en = 1;
|
||||
|
@ -117,12 +527,18 @@ static __init void da830_evm_init(void)
|
|||
i2c_register_board_info(1, da830_evm_i2c_devices,
|
||||
ARRAY_SIZE(da830_evm_i2c_devices));
|
||||
|
||||
ret = da8xx_pinmux_setup(da830_mcasp1_pins);
|
||||
ret = da8xx_pinmux_setup(da830_evm_mcasp1_pins);
|
||||
if (ret)
|
||||
pr_warning("da830_evm_init: mcasp1 mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
da8xx_init_mcasp(1, &da830_evm_snd_data);
|
||||
da8xx_register_mcasp(1, &da830_evm_snd_data);
|
||||
|
||||
da830_evm_init_mmc();
|
||||
|
||||
ret = da8xx_register_rtc();
|
||||
if (ret)
|
||||
pr_warning("da830_evm_init: rtc setup failed: %d\n", ret);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||
|
@ -146,7 +562,7 @@ static void __init da830_evm_map_io(void)
|
|||
da830_init();
|
||||
}
|
||||
|
||||
MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP L137 EVM")
|
||||
MACHINE_START(DAVINCI_DA830_EVM, "DaVinci DA830/OMAP-L137 EVM")
|
||||
.phys_io = IO_PHYS,
|
||||
.io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc,
|
||||
.boot_params = (DA8XX_DDR_BASE + 0x100),
|
||||
|
|
|
@ -12,36 +12,38 @@
|
|||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/console.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/i2c/pca953x.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/cp_intc.h>
|
||||
#include <mach/da8xx.h>
|
||||
#include <mach/nand.h>
|
||||
#include <mach/mux.h>
|
||||
|
||||
#define DA850_EVM_PHY_MASK 0x1
|
||||
#define DA850_EVM_MDIO_FREQUENCY 2200000 /* PHY bus frequency */
|
||||
|
||||
#define DA850_LCD_PWR_PIN GPIO_TO_PIN(2, 8)
|
||||
#define DA850_LCD_BL_PIN GPIO_TO_PIN(2, 15)
|
||||
#define DA850_LCD_PWR_PIN GPIO_TO_PIN(8, 10)
|
||||
|
||||
#define DA850_MMCSD_CD_PIN GPIO_TO_PIN(4, 0)
|
||||
#define DA850_MMCSD_WP_PIN GPIO_TO_PIN(4, 1)
|
||||
|
||||
#define DA850_MII_MDIO_CLKEN_PIN GPIO_TO_PIN(2, 6)
|
||||
|
||||
static struct mtd_partition da850_evm_norflash_partition[] = {
|
||||
{
|
||||
.name = "NOR filesystem",
|
||||
|
@ -143,10 +145,149 @@ static struct platform_device da850_evm_nandflash_device = {
|
|||
.resource = da850_evm_nandflash_resource,
|
||||
};
|
||||
|
||||
static struct platform_device *da850_evm_devices[] __initdata = {
|
||||
&da850_evm_nandflash_device,
|
||||
&da850_evm_norflash_device,
|
||||
};
|
||||
|
||||
#define DA8XX_AEMIF_CE2CFG_OFFSET 0x10
|
||||
#define DA8XX_AEMIF_ASIZE_16BIT 0x1
|
||||
|
||||
static void __init da850_evm_init_nor(void)
|
||||
{
|
||||
void __iomem *aemif_addr;
|
||||
|
||||
aemif_addr = ioremap(DA8XX_AEMIF_CTL_BASE, SZ_32K);
|
||||
|
||||
/* Configure data bus width of CS2 to 16 bit */
|
||||
writel(readl(aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET) |
|
||||
DA8XX_AEMIF_ASIZE_16BIT,
|
||||
aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET);
|
||||
|
||||
iounmap(aemif_addr);
|
||||
}
|
||||
|
||||
static u32 ui_card_detected;
|
||||
|
||||
#if defined(CONFIG_MMC_DAVINCI) || \
|
||||
defined(CONFIG_MMC_DAVINCI_MODULE)
|
||||
#define HAS_MMC 1
|
||||
#else
|
||||
#define HAS_MMC 0
|
||||
#endif
|
||||
|
||||
static __init void da850_evm_setup_nor_nand(void)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
if (ui_card_detected & !HAS_MMC) {
|
||||
ret = da8xx_pinmux_setup(da850_nand_pins);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: nand mux setup failed: "
|
||||
"%d\n", ret);
|
||||
|
||||
ret = da8xx_pinmux_setup(da850_nor_pins);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: nor mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
da850_evm_init_nor();
|
||||
|
||||
platform_add_devices(da850_evm_devices,
|
||||
ARRAY_SIZE(da850_evm_devices));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef CONFIG_DA850_UI_RMII
|
||||
static inline void da850_evm_setup_emac_rmii(int rmii_sel)
|
||||
{
|
||||
struct davinci_soc_info *soc_info = &davinci_soc_info;
|
||||
|
||||
soc_info->emac_pdata->rmii_en = 1;
|
||||
gpio_set_value(rmii_sel, 0);
|
||||
}
|
||||
#else
|
||||
static inline void da850_evm_setup_emac_rmii(int rmii_sel) { }
|
||||
#endif
|
||||
|
||||
static int da850_evm_ui_expander_setup(struct i2c_client *client, unsigned gpio,
|
||||
unsigned ngpio, void *c)
|
||||
{
|
||||
int sel_a, sel_b, sel_c, ret;
|
||||
|
||||
sel_a = gpio + 7;
|
||||
sel_b = gpio + 6;
|
||||
sel_c = gpio + 5;
|
||||
|
||||
ret = gpio_request(sel_a, "sel_a");
|
||||
if (ret) {
|
||||
pr_warning("Cannot open UI expander pin %d\n", sel_a);
|
||||
goto exp_setup_sela_fail;
|
||||
}
|
||||
|
||||
ret = gpio_request(sel_b, "sel_b");
|
||||
if (ret) {
|
||||
pr_warning("Cannot open UI expander pin %d\n", sel_b);
|
||||
goto exp_setup_selb_fail;
|
||||
}
|
||||
|
||||
ret = gpio_request(sel_c, "sel_c");
|
||||
if (ret) {
|
||||
pr_warning("Cannot open UI expander pin %d\n", sel_c);
|
||||
goto exp_setup_selc_fail;
|
||||
}
|
||||
|
||||
/* deselect all functionalities */
|
||||
gpio_direction_output(sel_a, 1);
|
||||
gpio_direction_output(sel_b, 1);
|
||||
gpio_direction_output(sel_c, 1);
|
||||
|
||||
ui_card_detected = 1;
|
||||
pr_info("DA850/OMAP-L138 EVM UI card detected\n");
|
||||
|
||||
da850_evm_setup_nor_nand();
|
||||
|
||||
da850_evm_setup_emac_rmii(sel_a);
|
||||
|
||||
return 0;
|
||||
|
||||
exp_setup_selc_fail:
|
||||
gpio_free(sel_b);
|
||||
exp_setup_selb_fail:
|
||||
gpio_free(sel_a);
|
||||
exp_setup_sela_fail:
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int da850_evm_ui_expander_teardown(struct i2c_client *client,
|
||||
unsigned gpio, unsigned ngpio, void *c)
|
||||
{
|
||||
/* deselect all functionalities */
|
||||
gpio_set_value(gpio + 5, 1);
|
||||
gpio_set_value(gpio + 6, 1);
|
||||
gpio_set_value(gpio + 7, 1);
|
||||
|
||||
gpio_free(gpio + 5);
|
||||
gpio_free(gpio + 6);
|
||||
gpio_free(gpio + 7);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct pca953x_platform_data da850_evm_ui_expander_info = {
|
||||
.gpio_base = DAVINCI_N_GPIO,
|
||||
.setup = da850_evm_ui_expander_setup,
|
||||
.teardown = da850_evm_ui_expander_teardown,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata da850_evm_i2c_devices[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tlv320aic3x", 0x18),
|
||||
}
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("tca6416", 0x20),
|
||||
.platform_data = &da850_evm_ui_expander_info,
|
||||
},
|
||||
};
|
||||
|
||||
static struct davinci_i2c_platform_data da850_evm_i2c_0_pdata = {
|
||||
|
@ -158,11 +299,6 @@ static struct davinci_uart_config da850_evm_uart_config __initdata = {
|
|||
.enabled_uarts = 0x7,
|
||||
};
|
||||
|
||||
static struct platform_device *da850_evm_devices[] __initdata = {
|
||||
&da850_evm_nandflash_device,
|
||||
&da850_evm_norflash_device,
|
||||
};
|
||||
|
||||
/* davinci da850 evm audio machine driver */
|
||||
static u8 da850_iis_serializer_direction[] = {
|
||||
INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE, INACTIVE_MODE,
|
||||
|
@ -198,6 +334,8 @@ static struct davinci_mmc_config da850_mmc_config = {
|
|||
.get_ro = da850_evm_mmc_get_ro,
|
||||
.get_cd = da850_evm_mmc_get_cd,
|
||||
.wires = 4,
|
||||
.max_freq = 50000000,
|
||||
.caps = MMC_CAP_MMC_HIGHSPEED | MMC_CAP_SD_HIGHSPEED,
|
||||
.version = MMC_CTLR_VERSION_2,
|
||||
};
|
||||
|
||||
|
@ -233,57 +371,228 @@ static int da850_lcd_hw_init(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define DA8XX_AEMIF_CE2CFG_OFFSET 0x10
|
||||
#define DA8XX_AEMIF_ASIZE_16BIT 0x1
|
||||
/* TPS65070 voltage regulator support */
|
||||
|
||||
static void __init da850_evm_init_nor(void)
|
||||
/* 3.3V */
|
||||
struct regulator_consumer_supply tps65070_dcdc1_consumers[] = {
|
||||
{
|
||||
.supply = "usb0_vdda33",
|
||||
},
|
||||
{
|
||||
.supply = "usb1_vdda33",
|
||||
},
|
||||
};
|
||||
|
||||
/* 3.3V or 1.8V */
|
||||
struct regulator_consumer_supply tps65070_dcdc2_consumers[] = {
|
||||
{
|
||||
.supply = "dvdd3318_a",
|
||||
},
|
||||
{
|
||||
.supply = "dvdd3318_b",
|
||||
},
|
||||
{
|
||||
.supply = "dvdd3318_c",
|
||||
},
|
||||
};
|
||||
|
||||
/* 1.2V */
|
||||
struct regulator_consumer_supply tps65070_dcdc3_consumers[] = {
|
||||
{
|
||||
.supply = "cvdd",
|
||||
},
|
||||
};
|
||||
|
||||
/* 1.8V LDO */
|
||||
struct regulator_consumer_supply tps65070_ldo1_consumers[] = {
|
||||
{
|
||||
.supply = "sata_vddr",
|
||||
},
|
||||
{
|
||||
.supply = "usb0_vdda18",
|
||||
},
|
||||
{
|
||||
.supply = "usb1_vdda18",
|
||||
},
|
||||
{
|
||||
.supply = "ddr_dvdd18",
|
||||
},
|
||||
};
|
||||
|
||||
/* 1.2V LDO */
|
||||
struct regulator_consumer_supply tps65070_ldo2_consumers[] = {
|
||||
{
|
||||
.supply = "sata_vdd",
|
||||
},
|
||||
{
|
||||
.supply = "pll0_vdda",
|
||||
},
|
||||
{
|
||||
.supply = "pll1_vdda",
|
||||
},
|
||||
{
|
||||
.supply = "usbs_cvdd",
|
||||
},
|
||||
{
|
||||
.supply = "vddarnwa1",
|
||||
},
|
||||
};
|
||||
|
||||
struct regulator_init_data tps65070_regulator_data[] = {
|
||||
/* dcdc1 */
|
||||
{
|
||||
.constraints = {
|
||||
.min_uV = 3150000,
|
||||
.max_uV = 3450000,
|
||||
.valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS),
|
||||
.boot_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc1_consumers),
|
||||
.consumer_supplies = tps65070_dcdc1_consumers,
|
||||
},
|
||||
|
||||
/* dcdc2 */
|
||||
{
|
||||
.constraints = {
|
||||
.min_uV = 1710000,
|
||||
.max_uV = 3450000,
|
||||
.valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS),
|
||||
.boot_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc2_consumers),
|
||||
.consumer_supplies = tps65070_dcdc2_consumers,
|
||||
},
|
||||
|
||||
/* dcdc3 */
|
||||
{
|
||||
.constraints = {
|
||||
.min_uV = 950000,
|
||||
.max_uV = 1320000,
|
||||
.valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS),
|
||||
.boot_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(tps65070_dcdc3_consumers),
|
||||
.consumer_supplies = tps65070_dcdc3_consumers,
|
||||
},
|
||||
|
||||
/* ldo1 */
|
||||
{
|
||||
.constraints = {
|
||||
.min_uV = 1710000,
|
||||
.max_uV = 1890000,
|
||||
.valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS),
|
||||
.boot_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(tps65070_ldo1_consumers),
|
||||
.consumer_supplies = tps65070_ldo1_consumers,
|
||||
},
|
||||
|
||||
/* ldo2 */
|
||||
{
|
||||
.constraints = {
|
||||
.min_uV = 1140000,
|
||||
.max_uV = 1320000,
|
||||
.valid_ops_mask = (REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS),
|
||||
.boot_on = 1,
|
||||
},
|
||||
.num_consumer_supplies = ARRAY_SIZE(tps65070_ldo2_consumers),
|
||||
.consumer_supplies = tps65070_ldo2_consumers,
|
||||
},
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata da850evm_tps65070_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("tps6507x", 0x48),
|
||||
.platform_data = &tps65070_regulator_data[0],
|
||||
},
|
||||
};
|
||||
|
||||
static int __init pmic_tps65070_init(void)
|
||||
{
|
||||
void __iomem *aemif_addr;
|
||||
|
||||
aemif_addr = ioremap(DA8XX_AEMIF_CTL_BASE, SZ_32K);
|
||||
|
||||
/* Configure data bus width of CS2 to 16 bit */
|
||||
writel(readl(aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET) |
|
||||
DA8XX_AEMIF_ASIZE_16BIT,
|
||||
aemif_addr + DA8XX_AEMIF_CE2CFG_OFFSET);
|
||||
|
||||
iounmap(aemif_addr);
|
||||
return i2c_register_board_info(1, da850evm_tps65070_info,
|
||||
ARRAY_SIZE(da850evm_tps65070_info));
|
||||
}
|
||||
|
||||
#if defined(CONFIG_MTD_PHYSMAP) || \
|
||||
defined(CONFIG_MTD_PHYSMAP_MODULE)
|
||||
#define HAS_NOR 1
|
||||
#else
|
||||
#define HAS_NOR 0
|
||||
#endif
|
||||
static const short da850_evm_lcdc_pins[] = {
|
||||
DA850_GPIO2_8, DA850_GPIO2_15,
|
||||
-1
|
||||
};
|
||||
|
||||
#if defined(CONFIG_MMC_DAVINCI) || \
|
||||
defined(CONFIG_MMC_DAVINCI_MODULE)
|
||||
#define HAS_MMC 1
|
||||
#else
|
||||
#define HAS_MMC 0
|
||||
#endif
|
||||
static int __init da850_evm_config_emac(void)
|
||||
{
|
||||
void __iomem *cfg_chip3_base;
|
||||
int ret;
|
||||
u32 val;
|
||||
struct davinci_soc_info *soc_info = &davinci_soc_info;
|
||||
u8 rmii_en = soc_info->emac_pdata->rmii_en;
|
||||
|
||||
if (!machine_is_davinci_da850_evm())
|
||||
return 0;
|
||||
|
||||
cfg_chip3_base = DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP3_REG);
|
||||
|
||||
val = __raw_readl(cfg_chip3_base);
|
||||
|
||||
if (rmii_en) {
|
||||
val |= BIT(8);
|
||||
ret = da8xx_pinmux_setup(da850_rmii_pins);
|
||||
pr_info("EMAC: RMII PHY configured, MII PHY will not be"
|
||||
" functional\n");
|
||||
} else {
|
||||
val &= ~BIT(8);
|
||||
ret = da8xx_pinmux_setup(da850_cpgmac_pins);
|
||||
pr_info("EMAC: MII PHY configured, RMII PHY will not be"
|
||||
" functional\n");
|
||||
}
|
||||
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: cpgmac/rmii mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
/* configure the CFGCHIP3 register for RMII or MII */
|
||||
__raw_writel(val, cfg_chip3_base);
|
||||
|
||||
ret = davinci_cfg_reg(DA850_GPIO2_6);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init:GPIO(2,6) mux setup "
|
||||
"failed\n");
|
||||
|
||||
ret = gpio_request(DA850_MII_MDIO_CLKEN_PIN, "mdio_clk_en");
|
||||
if (ret) {
|
||||
pr_warning("Cannot open GPIO %d\n",
|
||||
DA850_MII_MDIO_CLKEN_PIN);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Enable/Disable MII MDIO clock */
|
||||
gpio_direction_output(DA850_MII_MDIO_CLKEN_PIN, rmii_en);
|
||||
|
||||
soc_info->emac_pdata->phy_mask = DA850_EVM_PHY_MASK;
|
||||
soc_info->emac_pdata->mdio_max_freq = DA850_EVM_MDIO_FREQUENCY;
|
||||
|
||||
ret = da8xx_register_emac();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: emac registration failed: %d\n",
|
||||
ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
device_initcall(da850_evm_config_emac);
|
||||
|
||||
static __init void da850_evm_init(void)
|
||||
{
|
||||
struct davinci_soc_info *soc_info = &davinci_soc_info;
|
||||
int ret;
|
||||
|
||||
ret = da8xx_pinmux_setup(da850_nand_pins);
|
||||
ret = pmic_tps65070_init();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: nand mux setup failed: %d\n",
|
||||
pr_warning("da850_evm_init: TPS65070 PMIC init failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = da8xx_pinmux_setup(da850_nor_pins);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: nor mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
da850_evm_init_nor();
|
||||
|
||||
platform_add_devices(da850_evm_devices,
|
||||
ARRAY_SIZE(da850_evm_devices));
|
||||
|
||||
ret = da8xx_register_edma();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: edma registration failed: %d\n",
|
||||
|
@ -299,19 +608,6 @@ static __init void da850_evm_init(void)
|
|||
pr_warning("da850_evm_init: i2c0 registration failed: %d\n",
|
||||
ret);
|
||||
|
||||
soc_info->emac_pdata->phy_mask = DA850_EVM_PHY_MASK;
|
||||
soc_info->emac_pdata->mdio_max_freq = DA850_EVM_MDIO_FREQUENCY;
|
||||
soc_info->emac_pdata->rmii_en = 0;
|
||||
|
||||
ret = da8xx_pinmux_setup(da850_cpgmac_pins);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: cpgmac mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = da8xx_register_emac();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: emac registration failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = da8xx_register_watchdog();
|
||||
if (ret)
|
||||
|
@ -319,11 +615,6 @@ static __init void da850_evm_init(void)
|
|||
ret);
|
||||
|
||||
if (HAS_MMC) {
|
||||
if (HAS_NOR)
|
||||
pr_warning("WARNING: both NOR Flash and MMC/SD are "
|
||||
"enabled, but they share AEMIF pins.\n"
|
||||
"\tDisable one of them.\n");
|
||||
|
||||
ret = da8xx_pinmux_setup(da850_mmcsd0_pins);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: mmcsd0 mux setup failed:"
|
||||
|
@ -365,22 +656,42 @@ static __init void da850_evm_init(void)
|
|||
pr_warning("da850_evm_init: mcasp mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
da8xx_init_mcasp(0, &da850_evm_snd_data);
|
||||
da8xx_register_mcasp(0, &da850_evm_snd_data);
|
||||
|
||||
ret = da8xx_pinmux_setup(da850_lcdcntl_pins);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: lcdcntl mux setup failed: %d\n",
|
||||
ret);
|
||||
|
||||
/* Handle board specific muxing for LCD here */
|
||||
ret = da8xx_pinmux_setup(da850_evm_lcdc_pins);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: evm specific lcd mux setup "
|
||||
"failed: %d\n", ret);
|
||||
|
||||
ret = da850_lcd_hw_init();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: lcd initialization failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = da8xx_register_lcdc();
|
||||
ret = da8xx_register_lcdc(&sharp_lk043t1dg01_pdata);
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: lcdc registration failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = da8xx_register_rtc();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: rtc setup failed: %d\n", ret);
|
||||
|
||||
ret = da850_register_cpufreq();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: cpufreq registration failed: %d\n",
|
||||
ret);
|
||||
|
||||
ret = da8xx_register_cpuidle();
|
||||
if (ret)
|
||||
pr_warning("da850_evm_init: cpuidle registration failed: %d\n",
|
||||
ret);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_SERIAL_8250_CONSOLE
|
||||
|
|
|
@ -9,15 +9,13 @@
|
|||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/videodev2.h>
|
||||
|
@ -25,20 +23,15 @@
|
|||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/eeprom.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/dm355.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/nand.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
|
||||
|
@ -86,8 +79,9 @@ static struct davinci_nand_pdata davinci_nand_data = {
|
|||
.mask_chipsel = BIT(14),
|
||||
.parts = davinci_nand_partitions,
|
||||
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
||||
.ecc_mode = NAND_ECC_HW_SYNDROME,
|
||||
.ecc_mode = NAND_ECC_HW,
|
||||
.options = NAND_USE_FLASH_BBT,
|
||||
.ecc_bits = 4,
|
||||
};
|
||||
|
||||
static struct resource davinci_nand_resources[] = {
|
||||
|
@ -344,7 +338,7 @@ static __init void dm355_evm_init(void)
|
|||
gpio_request(2, "usb_id_toggle");
|
||||
gpio_direction_output(2, USB_ID_VALUE);
|
||||
/* irlml6401 switches over 1A in under 8 msec */
|
||||
setup_usb(500, 8);
|
||||
davinci_setup_usb(1000, 8);
|
||||
|
||||
davinci_setup_mmc(0, &dm355evm_mmc_config);
|
||||
davinci_setup_mmc(1, &dm355evm_mmc_config);
|
||||
|
|
|
@ -8,34 +8,27 @@
|
|||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/spi/spi.h>
|
||||
#include <linux/spi/eeprom.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/dm355.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/nand.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e10000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
|
||||
|
@ -270,7 +263,7 @@ static __init void dm355_leopard_init(void)
|
|||
gpio_request(2, "usb_id_toggle");
|
||||
gpio_direction_output(2, USB_ID_VALUE);
|
||||
/* irlml6401 switches over 1A in under 8 msec */
|
||||
setup_usb(500, 8);
|
||||
davinci_setup_usb(1000, 8);
|
||||
|
||||
davinci_setup_mmc(0, &dm355leopard_mmc_config);
|
||||
davinci_setup_mmc(1, &dm355leopard_mmc_config);
|
||||
|
|
|
@ -13,9 +13,8 @@
|
|||
* GNU General Public License for more details.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk.h>
|
||||
|
@ -24,20 +23,19 @@
|
|||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <asm/setup.h>
|
||||
#include <linux/input.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/mux.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/dm365.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/nand.h>
|
||||
|
||||
#include <mach/keyscan.h>
|
||||
|
||||
static inline int have_imager(void)
|
||||
{
|
||||
|
@ -144,6 +142,7 @@ static struct davinci_nand_pdata davinci_nand_data = {
|
|||
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
||||
.ecc_mode = NAND_ECC_HW,
|
||||
.options = NAND_USE_FLASH_BBT,
|
||||
.ecc_bits = 4,
|
||||
};
|
||||
|
||||
static struct resource davinci_nand_resources[] = {
|
||||
|
@ -176,11 +175,16 @@ static struct at24_platform_data eeprom_info = {
|
|||
.context = (void *)0x7f00,
|
||||
};
|
||||
|
||||
static struct snd_platform_data dm365_evm_snd_data;
|
||||
|
||||
static struct i2c_board_info i2c_info[] = {
|
||||
{
|
||||
I2C_BOARD_INFO("24c256", 0x50),
|
||||
.platform_data = &eeprom_info,
|
||||
},
|
||||
{
|
||||
I2C_BOARD_INFO("tlv320aic3x", 0x18),
|
||||
},
|
||||
};
|
||||
|
||||
static struct davinci_i2c_platform_data i2c_pdata = {
|
||||
|
@ -188,6 +192,38 @@ static struct davinci_i2c_platform_data i2c_pdata = {
|
|||
.bus_delay = 0 /* usec */,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_KEYBOARD_DAVINCI
|
||||
static unsigned short dm365evm_keymap[] = {
|
||||
KEY_KP2,
|
||||
KEY_LEFT,
|
||||
KEY_EXIT,
|
||||
KEY_DOWN,
|
||||
KEY_ENTER,
|
||||
KEY_UP,
|
||||
KEY_KP1,
|
||||
KEY_RIGHT,
|
||||
KEY_MENU,
|
||||
KEY_RECORD,
|
||||
KEY_REWIND,
|
||||
KEY_KPMINUS,
|
||||
KEY_STOP,
|
||||
KEY_FASTFORWARD,
|
||||
KEY_KPPLUS,
|
||||
KEY_PLAYPAUSE,
|
||||
0
|
||||
};
|
||||
|
||||
static struct davinci_ks_platform_data dm365evm_ks_data = {
|
||||
.keymap = dm365evm_keymap,
|
||||
.keymapsize = ARRAY_SIZE(dm365evm_keymap),
|
||||
.rep = 1,
|
||||
/* Scan period = strobe + interval */
|
||||
.strobe = 0x5,
|
||||
.interval = 0x2,
|
||||
.matrix_type = DAVINCI_KEYSCAN_MATRIX_4X4,
|
||||
};
|
||||
#endif
|
||||
|
||||
static int cpld_mmc_get_cd(int module)
|
||||
{
|
||||
if (!cpld)
|
||||
|
@ -472,6 +508,13 @@ static __init void dm365_evm_init(void)
|
|||
|
||||
/* maybe setup mmc1/etc ... _after_ mmc0 */
|
||||
evm_init_cpld();
|
||||
|
||||
dm365_init_asp(&dm365_evm_snd_data);
|
||||
dm365_init_rtc();
|
||||
|
||||
#ifdef CONFIG_KEYBOARD_DAVINCI
|
||||
dm365_init_ks(&dm365evm_ks_data);
|
||||
#endif
|
||||
}
|
||||
|
||||
static __init void dm365_evm_irq_init(void)
|
||||
|
|
|
@ -9,45 +9,34 @@
|
|||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/memory.h>
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/pcf857x.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/phy.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/videodev2.h>
|
||||
|
||||
#include <media/tvp514x.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <mach/dm644x.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/nand.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/emac.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
#define DM644X_EVM_PHY_MASK (0x2)
|
||||
#define DM644X_EVM_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
|
||||
|
@ -477,7 +466,7 @@ evm_u35_setup(struct i2c_client *client, int gpio, unsigned ngpio, void *c)
|
|||
/* irlml6401 switches over 1A, in under 8 msec;
|
||||
* now it can be managed by nDRV_VBUS ...
|
||||
*/
|
||||
setup_usb(500, 8);
|
||||
davinci_setup_usb(1000, 8);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -17,38 +17,28 @@
|
|||
**************************************************************************/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/major.h>
|
||||
#include <linux/root_dev.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/serial.h>
|
||||
#include <linux/serial_8250.h>
|
||||
#include <linux/leds.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/i2c/pcf857x.h>
|
||||
#include <linux/etherdevice.h>
|
||||
|
||||
#include <media/tvp514x.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <mach/dm646x.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/emac.h>
|
||||
#include <mach/nand.h>
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
|
||||
defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE)
|
||||
|
@ -57,6 +47,11 @@
|
|||
#define HAS_ATA 0
|
||||
#endif
|
||||
|
||||
#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x20008000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x42000000
|
||||
|
||||
#define NAND_BLOCK_SIZE SZ_128K
|
||||
|
||||
/* CPLD Register 0 bits to control ATA */
|
||||
#define DM646X_EVM_ATA_RST BIT(0)
|
||||
#define DM646X_EVM_ATA_PWD BIT(1)
|
||||
|
@ -92,6 +87,63 @@ static struct davinci_uart_config uart_config __initdata = {
|
|||
.enabled_uarts = (1 << 0),
|
||||
};
|
||||
|
||||
/* Note: We are setting first partition as 'bootloader' constituting UBL, U-Boot
|
||||
* and U-Boot environment this avoids dependency on any particular combination
|
||||
* of UBL, U-Boot or flashing tools etc.
|
||||
*/
|
||||
static struct mtd_partition davinci_nand_partitions[] = {
|
||||
{
|
||||
/* UBL, U-Boot with environment */
|
||||
.name = "bootloader",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 16 * NAND_BLOCK_SIZE,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
}, {
|
||||
.name = "kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_4M,
|
||||
.mask_flags = 0,
|
||||
}, {
|
||||
.name = "filesystem",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.mask_flags = 0,
|
||||
}
|
||||
};
|
||||
|
||||
static struct davinci_nand_pdata davinci_nand_data = {
|
||||
.mask_cle = 0x80000,
|
||||
.mask_ale = 0x40000,
|
||||
.parts = davinci_nand_partitions,
|
||||
.nr_parts = ARRAY_SIZE(davinci_nand_partitions),
|
||||
.ecc_mode = NAND_ECC_HW,
|
||||
.options = 0,
|
||||
};
|
||||
|
||||
static struct resource davinci_nand_resources[] = {
|
||||
{
|
||||
.start = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE,
|
||||
.end = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_32M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = DAVINCI_ASYNC_EMIF_CONTROL_BASE,
|
||||
.end = DAVINCI_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device davinci_nand_device = {
|
||||
.name = "davinci_nand",
|
||||
.id = 0,
|
||||
|
||||
.num_resources = ARRAY_SIZE(davinci_nand_resources),
|
||||
.resource = davinci_nand_resources,
|
||||
|
||||
.dev = {
|
||||
.platform_data = &davinci_nand_data,
|
||||
},
|
||||
};
|
||||
|
||||
/* CPLD Register 0 Client: used for I/O Control */
|
||||
static int cpld_reg0_probe(struct i2c_client *client,
|
||||
const struct i2c_device_id *id)
|
||||
|
@ -142,7 +194,7 @@ static struct gpio_led evm_leds[] = {
|
|||
{ .name = "DS4", .active_low = 1, },
|
||||
};
|
||||
|
||||
static __initconst struct gpio_led_platform_data evm_led_data = {
|
||||
static const struct gpio_led_platform_data evm_led_data = {
|
||||
.num_leds = ARRAY_SIZE(evm_leds),
|
||||
.leds = evm_leds,
|
||||
};
|
||||
|
@ -647,6 +699,8 @@ static __init void evm_init(void)
|
|||
dm646x_init_mcasp0(&dm646x_evm_snd_data[0]);
|
||||
dm646x_init_mcasp1(&dm646x_evm_snd_data[1]);
|
||||
|
||||
platform_device_register(&davinci_nand_device);
|
||||
|
||||
if (HAS_ATA)
|
||||
dm646x_init_ide();
|
||||
|
||||
|
|
323
arch/arm/mach-davinci/board-neuros-osd2.c
Normal file
323
arch/arm/mach-davinci/board-neuros-osd2.c
Normal file
|
@ -0,0 +1,323 @@
|
|||
/*
|
||||
* Neuros Technologies OSD2 board support
|
||||
*
|
||||
* Modified from original 644X-EVM board support.
|
||||
* 2008 (c) Neuros Technology, LLC.
|
||||
* 2009 (c) Jorge Luis Zapata Muga <jorgeluis.zapata@gmail.com>
|
||||
* 2009 (c) Andrey A. Porodko <Andrey.Porodko@gmail.com>
|
||||
*
|
||||
* The Neuros OSD 2.0 is the hardware component of the Neuros Open
|
||||
* Internet Television Platform. Hardware is very close to TI
|
||||
* DM644X-EVM board. It has:
|
||||
* DM6446M02 module with 256MB NAND, 256MB RAM, TLV320AIC32 AIC,
|
||||
* USB, Ethernet, SD/MMC, UART, THS8200, TVP7000 for video.
|
||||
* Additionaly realtime clock, IR remote control receiver,
|
||||
* IR Blaster based on MSP430 (firmware although is different
|
||||
* from used in DM644X-EVM), internal ATA-6 3.5” HDD drive
|
||||
* with PATA interface, two muxed red-green leds.
|
||||
*
|
||||
* For more information please refer to
|
||||
* http://wiki.neurostechnology.com/index.php/OSD_2.0_HD
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public
|
||||
* License version 2. This program is licensed "as is" without any
|
||||
* warranty of any kind, whether express or implied.
|
||||
*/
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
|
||||
#include <asm/mach-types.h>
|
||||
#include <asm/mach/arch.h>
|
||||
|
||||
#include <mach/dm644x.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/nand.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
#define NEUROS_OSD2_PHY_MASK 0x2
|
||||
#define NEUROS_OSD2_MDIO_FREQUENCY 2200000 /* PHY bus frequency */
|
||||
|
||||
#define DAVINCI_CFC_ATA_BASE 0x01C66000
|
||||
|
||||
#define DAVINCI_ASYNC_EMIF_CONTROL_BASE 0x01e00000
|
||||
#define DAVINCI_ASYNC_EMIF_DATA_CE0_BASE 0x02000000
|
||||
|
||||
#define LXT971_PHY_ID 0x001378e2
|
||||
#define LXT971_PHY_MASK 0xfffffff0
|
||||
|
||||
#define NTOSD2_AUDIOSOC_I2C_ADDR 0x18
|
||||
#define NTOSD2_MSP430_I2C_ADDR 0x59
|
||||
#define NTOSD2_MSP430_IRQ 2
|
||||
|
||||
/* Neuros OSD2 has a Samsung 256 MByte NAND flash (Dev ID of 0xAA,
|
||||
* 2048 blocks in the device, 64 pages per block, 2048 bytes per
|
||||
* page.
|
||||
*/
|
||||
|
||||
#define NAND_BLOCK_SIZE SZ_128K
|
||||
|
||||
struct mtd_partition davinci_ntosd2_nandflash_partition[] = {
|
||||
{
|
||||
/* UBL (a few copies) plus U-Boot */
|
||||
.name = "bootloader",
|
||||
.offset = 0,
|
||||
.size = 15 * NAND_BLOCK_SIZE,
|
||||
.mask_flags = MTD_WRITEABLE, /* force read-only */
|
||||
}, {
|
||||
/* U-Boot environment */
|
||||
.name = "params",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = 1 * NAND_BLOCK_SIZE,
|
||||
.mask_flags = 0,
|
||||
}, {
|
||||
/* Kernel */
|
||||
.name = "kernel",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = SZ_4M,
|
||||
.mask_flags = 0,
|
||||
}, {
|
||||
/* File System */
|
||||
.name = "filesystem",
|
||||
.offset = MTDPART_OFS_APPEND,
|
||||
.size = MTDPART_SIZ_FULL,
|
||||
.mask_flags = 0,
|
||||
}
|
||||
/* A few blocks at end hold a flash Bad Block Table. */
|
||||
};
|
||||
|
||||
static struct davinci_nand_pdata davinci_ntosd2_nandflash_data = {
|
||||
.parts = davinci_ntosd2_nandflash_partition,
|
||||
.nr_parts = ARRAY_SIZE(davinci_ntosd2_nandflash_partition),
|
||||
.ecc_mode = NAND_ECC_HW,
|
||||
.options = NAND_USE_FLASH_BBT,
|
||||
};
|
||||
|
||||
static struct resource davinci_ntosd2_nandflash_resource[] = {
|
||||
{
|
||||
.start = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE,
|
||||
.end = DAVINCI_ASYNC_EMIF_DATA_CE0_BASE + SZ_16M - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
}, {
|
||||
.start = DAVINCI_ASYNC_EMIF_CONTROL_BASE,
|
||||
.end = DAVINCI_ASYNC_EMIF_CONTROL_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device davinci_ntosd2_nandflash_device = {
|
||||
.name = "davinci_nand",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.platform_data = &davinci_ntosd2_nandflash_data,
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(davinci_ntosd2_nandflash_resource),
|
||||
.resource = davinci_ntosd2_nandflash_resource,
|
||||
};
|
||||
|
||||
static u64 davinci_fb_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
static struct platform_device davinci_fb_device = {
|
||||
.name = "davincifb",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.dma_mask = &davinci_fb_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
.num_resources = 0,
|
||||
};
|
||||
|
||||
static struct resource ide_resources[] = {
|
||||
{
|
||||
.start = DAVINCI_CFC_ATA_BASE,
|
||||
.end = DAVINCI_CFC_ATA_BASE + 0x7ff,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = IRQ_IDE,
|
||||
.end = IRQ_IDE,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static u64 ide_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
static struct platform_device ide_dev = {
|
||||
.name = "palm_bk3710",
|
||||
.id = -1,
|
||||
.resource = ide_resources,
|
||||
.num_resources = ARRAY_SIZE(ide_resources),
|
||||
.dev = {
|
||||
.dma_mask = &ide_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
};
|
||||
|
||||
static struct snd_platform_data dm644x_ntosd2_snd_data;
|
||||
|
||||
static struct gpio_led ntosd2_leds[] = {
|
||||
{ .name = "led1_green", .gpio = GPIO(10), },
|
||||
{ .name = "led1_red", .gpio = GPIO(11), },
|
||||
{ .name = "led2_green", .gpio = GPIO(12), },
|
||||
{ .name = "led2_red", .gpio = GPIO(13), },
|
||||
};
|
||||
|
||||
static struct gpio_led_platform_data ntosd2_leds_data = {
|
||||
.num_leds = ARRAY_SIZE(ntosd2_leds),
|
||||
.leds = ntosd2_leds,
|
||||
};
|
||||
|
||||
static struct platform_device ntosd2_leds_dev = {
|
||||
.name = "leds-gpio",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &ntosd2_leds_data,
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
static struct platform_device *davinci_ntosd2_devices[] __initdata = {
|
||||
&davinci_fb_device,
|
||||
&ntosd2_leds_dev,
|
||||
};
|
||||
|
||||
static struct davinci_uart_config uart_config __initdata = {
|
||||
.enabled_uarts = (1 << 0),
|
||||
};
|
||||
|
||||
static void __init davinci_ntosd2_map_io(void)
|
||||
{
|
||||
dm644x_init();
|
||||
}
|
||||
|
||||
/*
|
||||
I2C initialization
|
||||
*/
|
||||
static struct davinci_i2c_platform_data ntosd2_i2c_pdata = {
|
||||
.bus_freq = 20 /* kHz */,
|
||||
.bus_delay = 100 /* usec */,
|
||||
};
|
||||
|
||||
static struct i2c_board_info __initdata ntosd2_i2c_info[] = {
|
||||
};
|
||||
|
||||
static int ntosd2_init_i2c(void)
|
||||
{
|
||||
int status;
|
||||
|
||||
davinci_init_i2c(&ntosd2_i2c_pdata);
|
||||
status = gpio_request(NTOSD2_MSP430_IRQ, ntosd2_i2c_info[0].type);
|
||||
if (status == 0) {
|
||||
status = gpio_direction_input(NTOSD2_MSP430_IRQ);
|
||||
if (status == 0) {
|
||||
status = gpio_to_irq(NTOSD2_MSP430_IRQ);
|
||||
if (status > 0) {
|
||||
ntosd2_i2c_info[0].irq = status;
|
||||
i2c_register_board_info(1,
|
||||
ntosd2_i2c_info,
|
||||
ARRAY_SIZE(ntosd2_i2c_info));
|
||||
}
|
||||
}
|
||||
}
|
||||
return status;
|
||||
}
|
||||
|
||||
static struct davinci_mmc_config davinci_ntosd2_mmc_config = {
|
||||
.wires = 4,
|
||||
.version = MMC_CTLR_VERSION_1
|
||||
};
|
||||
|
||||
|
||||
#if defined(CONFIG_BLK_DEV_PALMCHIP_BK3710) || \
|
||||
defined(CONFIG_BLK_DEV_PALMCHIP_BK3710_MODULE)
|
||||
#define HAS_ATA 1
|
||||
#else
|
||||
#define HAS_ATA 0
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_MTD_NAND_DAVINCI) || \
|
||||
defined(CONFIG_MTD_NAND_DAVINCI_MODULE)
|
||||
#define HAS_NAND 1
|
||||
#else
|
||||
#define HAS_NAND 0
|
||||
#endif
|
||||
|
||||
static __init void davinci_ntosd2_init(void)
|
||||
{
|
||||
struct clk *aemif_clk;
|
||||
struct davinci_soc_info *soc_info = &davinci_soc_info;
|
||||
int status;
|
||||
|
||||
aemif_clk = clk_get(NULL, "aemif");
|
||||
clk_enable(aemif_clk);
|
||||
|
||||
if (HAS_ATA) {
|
||||
if (HAS_NAND)
|
||||
pr_warning("WARNING: both IDE and Flash are "
|
||||
"enabled, but they share AEMIF pins.\n"
|
||||
"\tDisable IDE for NAND/NOR support.\n");
|
||||
davinci_cfg_reg(DM644X_HPIEN_DISABLE);
|
||||
davinci_cfg_reg(DM644X_ATAEN);
|
||||
davinci_cfg_reg(DM644X_HDIREN);
|
||||
platform_device_register(&ide_dev);
|
||||
} else if (HAS_NAND) {
|
||||
davinci_cfg_reg(DM644X_HPIEN_DISABLE);
|
||||
davinci_cfg_reg(DM644X_ATAEN_DISABLE);
|
||||
|
||||
/* only one device will be jumpered and detected */
|
||||
if (HAS_NAND)
|
||||
platform_device_register(
|
||||
&davinci_ntosd2_nandflash_device);
|
||||
}
|
||||
|
||||
platform_add_devices(davinci_ntosd2_devices,
|
||||
ARRAY_SIZE(davinci_ntosd2_devices));
|
||||
|
||||
/* Initialize I2C interface specific for this board */
|
||||
status = ntosd2_init_i2c();
|
||||
if (status < 0)
|
||||
pr_warning("davinci_ntosd2_init: msp430 irq setup failed:"
|
||||
" %d\n", status);
|
||||
|
||||
davinci_serial_init(&uart_config);
|
||||
dm644x_init_asp(&dm644x_ntosd2_snd_data);
|
||||
|
||||
soc_info->emac_pdata->phy_mask = NEUROS_OSD2_PHY_MASK;
|
||||
soc_info->emac_pdata->mdio_max_freq = NEUROS_OSD2_MDIO_FREQUENCY;
|
||||
|
||||
davinci_setup_usb(1000, 8);
|
||||
/*
|
||||
* Mux the pins to be GPIOs, VLYNQEN is already done at startup.
|
||||
* The AEAWx are five new AEAW pins that can be muxed by separately.
|
||||
* They are a bitmask for GPIO management. According TI
|
||||
* documentation (http://www.ti.com/lit/gpn/tms320dm6446) to employ
|
||||
* gpio(10,11,12,13) for leds any combination of bits works except
|
||||
* four last. So we are to reset all five.
|
||||
*/
|
||||
davinci_cfg_reg(DM644X_AEAW0);
|
||||
davinci_cfg_reg(DM644X_AEAW1);
|
||||
davinci_cfg_reg(DM644X_AEAW2);
|
||||
davinci_cfg_reg(DM644X_AEAW3);
|
||||
davinci_cfg_reg(DM644X_AEAW4);
|
||||
|
||||
davinci_setup_mmc(0, &davinci_ntosd2_mmc_config);
|
||||
}
|
||||
|
||||
static __init void davinci_ntosd2_irq_init(void)
|
||||
{
|
||||
davinci_irq_init();
|
||||
}
|
||||
|
||||
MACHINE_START(NEUROS_OSD2, "Neuros OSD2")
|
||||
/* Maintainer: Neuros Technologies <neuros@groups.google.com> */
|
||||
.phys_io = IO_PHYS,
|
||||
.io_pg_offst = (__IO_ADDRESS(IO_PHYS) >> 18) & 0xfffc,
|
||||
.boot_params = (DAVINCI_DDR_BASE + 0x100),
|
||||
.map_io = davinci_ntosd2_map_io,
|
||||
.init_irq = davinci_ntosd2_irq_init,
|
||||
.timer = &davinci_timer,
|
||||
.init_machine = davinci_ntosd2_init,
|
||||
MACHINE_END
|
|
@ -23,35 +23,24 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/gpio.h>
|
||||
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/i2c/at24.h>
|
||||
#include <linux/etherdevice.h>
|
||||
#include <linux/mtd/mtd.h>
|
||||
#include <linux/mtd/nand.h>
|
||||
#include <linux/mtd/partitions.h>
|
||||
#include <linux/mtd/physmap.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/setup.h>
|
||||
#include <asm/mach-types.h>
|
||||
|
||||
#include <asm/mach/arch.h>
|
||||
#include <asm/mach/map.h>
|
||||
#include <asm/mach/flash.h>
|
||||
|
||||
#include <mach/dm644x.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
#define SFFSDR_PHY_MASK (0x2)
|
||||
#define SFFSDR_MDIO_FREQUENCY (2200000) /* PHY bus frequency */
|
||||
|
@ -107,11 +96,6 @@ static struct platform_device davinci_sffsdr_nandflash_device = {
|
|||
.resource = davinci_sffsdr_nandflash_resource,
|
||||
};
|
||||
|
||||
static struct emac_platform_data sffsdr_emac_pdata = {
|
||||
.phy_mask = SFFSDR_PHY_MASK,
|
||||
.mdio_max_freq = SFFSDR_MDIO_FREQUENCY,
|
||||
};
|
||||
|
||||
static struct at24_platform_data eeprom_info = {
|
||||
.byte_len = (64*1024) / 8,
|
||||
.page_size = 32,
|
||||
|
@ -164,7 +148,7 @@ static __init void davinci_sffsdr_init(void)
|
|||
davinci_serial_init(&uart_config);
|
||||
soc_info->emac_pdata->phy_mask = SFFSDR_PHY_MASK;
|
||||
soc_info->emac_pdata->mdio_max_freq = SFFSDR_MDIO_FREQUENCY;
|
||||
setup_usb(0, 0); /* We support only peripheral mode. */
|
||||
davinci_setup_usb(0, 0); /* We support only peripheral mode. */
|
||||
|
||||
/* mux VLYNQ pins */
|
||||
davinci_cfg_reg(DM644X_VLYNQEN);
|
||||
|
|
|
@ -17,8 +17,8 @@
|
|||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
|
||||
|
@ -42,8 +42,7 @@ static void __clk_enable(struct clk *clk)
|
|||
if (clk->parent)
|
||||
__clk_enable(clk->parent);
|
||||
if (clk->usecount++ == 0 && (clk->flags & CLK_PSC))
|
||||
davinci_psc_config(psc_domain(clk), clk->psc_ctlr,
|
||||
clk->lpsc, 1);
|
||||
davinci_psc_config(psc_domain(clk), clk->gpsc, clk->lpsc, 1);
|
||||
}
|
||||
|
||||
static void __clk_disable(struct clk *clk)
|
||||
|
@ -51,8 +50,7 @@ static void __clk_disable(struct clk *clk)
|
|||
if (WARN_ON(clk->usecount == 0))
|
||||
return;
|
||||
if (--clk->usecount == 0 && !(clk->flags & CLK_PLL))
|
||||
davinci_psc_config(psc_domain(clk), clk->psc_ctlr,
|
||||
clk->lpsc, 0);
|
||||
davinci_psc_config(psc_domain(clk), clk->gpsc, clk->lpsc, 0);
|
||||
if (clk->parent)
|
||||
__clk_disable(clk->parent);
|
||||
}
|
||||
|
@ -99,19 +97,73 @@ long clk_round_rate(struct clk *clk, unsigned long rate)
|
|||
if (clk == NULL || IS_ERR(clk))
|
||||
return -EINVAL;
|
||||
|
||||
if (clk->round_rate)
|
||||
return clk->round_rate(clk, rate);
|
||||
|
||||
return clk->rate;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_round_rate);
|
||||
|
||||
/* Propagate rate to children */
|
||||
static void propagate_rate(struct clk *root)
|
||||
{
|
||||
struct clk *clk;
|
||||
|
||||
list_for_each_entry(clk, &root->children, childnode) {
|
||||
if (clk->recalc)
|
||||
clk->rate = clk->recalc(clk);
|
||||
propagate_rate(clk);
|
||||
}
|
||||
}
|
||||
|
||||
int clk_set_rate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
unsigned long flags;
|
||||
int ret = -EINVAL;
|
||||
|
||||
if (clk == NULL || IS_ERR(clk))
|
||||
return ret;
|
||||
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
if (clk->set_rate)
|
||||
ret = clk->set_rate(clk, rate);
|
||||
if (ret == 0) {
|
||||
if (clk->recalc)
|
||||
clk->rate = clk->recalc(clk);
|
||||
propagate_rate(clk);
|
||||
}
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_rate);
|
||||
|
||||
int clk_set_parent(struct clk *clk, struct clk *parent)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
if (clk == NULL || IS_ERR(clk))
|
||||
return -EINVAL;
|
||||
|
||||
/* changing the clk rate is not supported */
|
||||
return -EINVAL;
|
||||
/* Cannot change parent on enabled clock */
|
||||
if (WARN_ON(clk->usecount))
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
clk->parent = parent;
|
||||
list_del_init(&clk->childnode);
|
||||
list_add(&clk->childnode, &clk->parent->children);
|
||||
mutex_unlock(&clocks_mutex);
|
||||
|
||||
spin_lock_irqsave(&clockfw_lock, flags);
|
||||
if (clk->recalc)
|
||||
clk->rate = clk->recalc(clk);
|
||||
propagate_rate(clk);
|
||||
spin_unlock_irqrestore(&clockfw_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(clk_set_rate);
|
||||
EXPORT_SYMBOL(clk_set_parent);
|
||||
|
||||
int clk_register(struct clk *clk)
|
||||
{
|
||||
|
@ -123,16 +175,24 @@ int clk_register(struct clk *clk)
|
|||
clk->name, clk->parent->name))
|
||||
return -EINVAL;
|
||||
|
||||
INIT_LIST_HEAD(&clk->children);
|
||||
|
||||
mutex_lock(&clocks_mutex);
|
||||
list_add_tail(&clk->node, &clocks);
|
||||
if (clk->parent)
|
||||
list_add_tail(&clk->childnode, &clk->parent->children);
|
||||
mutex_unlock(&clocks_mutex);
|
||||
|
||||
/* If rate is already set, use it */
|
||||
if (clk->rate)
|
||||
return 0;
|
||||
|
||||
/* Else, see if there is a way to calculate it */
|
||||
if (clk->recalc)
|
||||
clk->rate = clk->recalc(clk);
|
||||
|
||||
/* Otherwise, default to parent rate */
|
||||
if (clk->parent)
|
||||
else if (clk->parent)
|
||||
clk->rate = clk->parent->rate;
|
||||
|
||||
return 0;
|
||||
|
@ -146,6 +206,7 @@ void clk_unregister(struct clk *clk)
|
|||
|
||||
mutex_lock(&clocks_mutex);
|
||||
list_del(&clk->node);
|
||||
list_del(&clk->childnode);
|
||||
mutex_unlock(&clocks_mutex);
|
||||
}
|
||||
EXPORT_SYMBOL(clk_unregister);
|
||||
|
@ -166,11 +227,11 @@ static int __init clk_disable_unused(void)
|
|||
continue;
|
||||
|
||||
/* ignore if in Disabled or SwRstDisable states */
|
||||
if (!davinci_psc_is_clk_active(ck->psc_ctlr, ck->lpsc))
|
||||
if (!davinci_psc_is_clk_active(ck->gpsc, ck->lpsc))
|
||||
continue;
|
||||
|
||||
pr_info("Clocks: disable unused %s\n", ck->name);
|
||||
davinci_psc_config(psc_domain(ck), ck->psc_ctlr, ck->lpsc, 0);
|
||||
davinci_psc_config(psc_domain(ck), ck->gpsc, ck->lpsc, 0);
|
||||
}
|
||||
spin_unlock_irq(&clockfw_lock);
|
||||
|
||||
|
@ -179,50 +240,62 @@ static int __init clk_disable_unused(void)
|
|||
late_initcall(clk_disable_unused);
|
||||
#endif
|
||||
|
||||
static void clk_sysclk_recalc(struct clk *clk)
|
||||
static unsigned long clk_sysclk_recalc(struct clk *clk)
|
||||
{
|
||||
u32 v, plldiv;
|
||||
struct pll_data *pll;
|
||||
unsigned long rate = clk->rate;
|
||||
|
||||
/* If this is the PLL base clock, no more calculations needed */
|
||||
if (clk->pll_data)
|
||||
return;
|
||||
return rate;
|
||||
|
||||
if (WARN_ON(!clk->parent))
|
||||
return;
|
||||
return rate;
|
||||
|
||||
clk->rate = clk->parent->rate;
|
||||
rate = clk->parent->rate;
|
||||
|
||||
/* Otherwise, the parent must be a PLL */
|
||||
if (WARN_ON(!clk->parent->pll_data))
|
||||
return;
|
||||
return rate;
|
||||
|
||||
pll = clk->parent->pll_data;
|
||||
|
||||
/* If pre-PLL, source clock is before the multiplier and divider(s) */
|
||||
if (clk->flags & PRE_PLL)
|
||||
clk->rate = pll->input_rate;
|
||||
rate = pll->input_rate;
|
||||
|
||||
if (!clk->div_reg)
|
||||
return;
|
||||
return rate;
|
||||
|
||||
v = __raw_readl(pll->base + clk->div_reg);
|
||||
if (v & PLLDIV_EN) {
|
||||
plldiv = (v & PLLDIV_RATIO_MASK) + 1;
|
||||
if (plldiv)
|
||||
clk->rate /= plldiv;
|
||||
rate /= plldiv;
|
||||
}
|
||||
|
||||
return rate;
|
||||
}
|
||||
|
||||
static void __init clk_pll_init(struct clk *clk)
|
||||
static unsigned long clk_leafclk_recalc(struct clk *clk)
|
||||
{
|
||||
if (WARN_ON(!clk->parent))
|
||||
return clk->rate;
|
||||
|
||||
return clk->parent->rate;
|
||||
}
|
||||
|
||||
static unsigned long clk_pllclk_recalc(struct clk *clk)
|
||||
{
|
||||
u32 ctrl, mult = 1, prediv = 1, postdiv = 1;
|
||||
u8 bypass;
|
||||
struct pll_data *pll = clk->pll_data;
|
||||
unsigned long rate = clk->rate;
|
||||
|
||||
pll->base = IO_ADDRESS(pll->phys_base);
|
||||
ctrl = __raw_readl(pll->base + PLLCTL);
|
||||
clk->rate = pll->input_rate = clk->parent->rate;
|
||||
rate = pll->input_rate = clk->parent->rate;
|
||||
|
||||
if (ctrl & PLLCTL_PLLEN) {
|
||||
bypass = 0;
|
||||
|
@ -255,9 +328,9 @@ static void __init clk_pll_init(struct clk *clk)
|
|||
}
|
||||
|
||||
if (!bypass) {
|
||||
clk->rate /= prediv;
|
||||
clk->rate *= mult;
|
||||
clk->rate /= postdiv;
|
||||
rate /= prediv;
|
||||
rate *= mult;
|
||||
rate /= postdiv;
|
||||
}
|
||||
|
||||
pr_debug("PLL%d: input = %lu MHz [ ",
|
||||
|
@ -270,9 +343,91 @@ static void __init clk_pll_init(struct clk *clk)
|
|||
pr_debug("* %d ", mult);
|
||||
if (postdiv > 1)
|
||||
pr_debug("/ %d ", postdiv);
|
||||
pr_debug("] --> %lu MHz output.\n", clk->rate / 1000000);
|
||||
pr_debug("] --> %lu MHz output.\n", rate / 1000000);
|
||||
|
||||
return rate;
|
||||
}
|
||||
|
||||
/**
|
||||
* davinci_set_pllrate - set the output rate of a given PLL.
|
||||
*
|
||||
* Note: Currently tested to work with OMAP-L138 only.
|
||||
*
|
||||
* @pll: pll whose rate needs to be changed.
|
||||
* @prediv: The pre divider value. Passing 0 disables the pre-divider.
|
||||
* @pllm: The multiplier value. Passing 0 leads to multiply-by-one.
|
||||
* @postdiv: The post divider value. Passing 0 disables the post-divider.
|
||||
*/
|
||||
int davinci_set_pllrate(struct pll_data *pll, unsigned int prediv,
|
||||
unsigned int mult, unsigned int postdiv)
|
||||
{
|
||||
u32 ctrl;
|
||||
unsigned int locktime;
|
||||
|
||||
if (pll->base == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* PLL lock time required per OMAP-L138 datasheet is
|
||||
* (2000 * prediv)/sqrt(pllm) OSCIN cycles. We approximate sqrt(pllm)
|
||||
* as 4 and OSCIN cycle as 25 MHz.
|
||||
*/
|
||||
if (prediv) {
|
||||
locktime = ((2000 * prediv) / 100);
|
||||
prediv = (prediv - 1) | PLLDIV_EN;
|
||||
} else {
|
||||
locktime = 20;
|
||||
}
|
||||
if (postdiv)
|
||||
postdiv = (postdiv - 1) | PLLDIV_EN;
|
||||
if (mult)
|
||||
mult = mult - 1;
|
||||
|
||||
ctrl = __raw_readl(pll->base + PLLCTL);
|
||||
|
||||
/* Switch the PLL to bypass mode */
|
||||
ctrl &= ~(PLLCTL_PLLENSRC | PLLCTL_PLLEN);
|
||||
__raw_writel(ctrl, pll->base + PLLCTL);
|
||||
|
||||
/*
|
||||
* Wait for 4 OSCIN/CLKIN cycles to ensure that the PLLC has switched
|
||||
* to bypass mode. Delay of 1us ensures we are good for all > 4MHz
|
||||
* OSCIN/CLKIN inputs. Typically the input is ~25MHz.
|
||||
*/
|
||||
udelay(1);
|
||||
|
||||
/* Reset and enable PLL */
|
||||
ctrl &= ~(PLLCTL_PLLRST | PLLCTL_PLLDIS);
|
||||
__raw_writel(ctrl, pll->base + PLLCTL);
|
||||
|
||||
if (pll->flags & PLL_HAS_PREDIV)
|
||||
__raw_writel(prediv, pll->base + PREDIV);
|
||||
|
||||
__raw_writel(mult, pll->base + PLLM);
|
||||
|
||||
if (pll->flags & PLL_HAS_POSTDIV)
|
||||
__raw_writel(postdiv, pll->base + POSTDIV);
|
||||
|
||||
/*
|
||||
* Wait for PLL to reset properly, OMAP-L138 datasheet says
|
||||
* 'min' time = 125ns
|
||||
*/
|
||||
udelay(1);
|
||||
|
||||
/* Bring PLL out of reset */
|
||||
ctrl |= PLLCTL_PLLRST;
|
||||
__raw_writel(ctrl, pll->base + PLLCTL);
|
||||
|
||||
udelay(locktime);
|
||||
|
||||
/* Remove PLL from bypass mode */
|
||||
ctrl |= PLLCTL_PLLEN;
|
||||
__raw_writel(ctrl, pll->base + PLLCTL);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(davinci_set_pllrate);
|
||||
|
||||
int __init davinci_clk_init(struct davinci_clk *clocks)
|
||||
{
|
||||
struct davinci_clk *c;
|
||||
|
@ -281,12 +436,23 @@ int __init davinci_clk_init(struct davinci_clk *clocks)
|
|||
for (c = clocks; c->lk.clk; c++) {
|
||||
clk = c->lk.clk;
|
||||
|
||||
if (clk->pll_data)
|
||||
clk_pll_init(clk);
|
||||
if (!clk->recalc) {
|
||||
|
||||
/* Calculate rates for PLL-derived clocks */
|
||||
else if (clk->flags & CLK_PLL)
|
||||
clk_sysclk_recalc(clk);
|
||||
/* Check if clock is a PLL */
|
||||
if (clk->pll_data)
|
||||
clk->recalc = clk_pllclk_recalc;
|
||||
|
||||
/* Else, if it is a PLL-derived clock */
|
||||
else if (clk->flags & CLK_PLL)
|
||||
clk->recalc = clk_sysclk_recalc;
|
||||
|
||||
/* Otherwise, it is a leaf clock (PSC clock) */
|
||||
else if (clk->parent)
|
||||
clk->recalc = clk_leafclk_recalc;
|
||||
}
|
||||
|
||||
if (clk->recalc)
|
||||
clk->rate = clk->recalc(clk);
|
||||
|
||||
if (clk->lpsc)
|
||||
clk->flags |= CLK_PSC;
|
||||
|
@ -352,9 +518,8 @@ dump_clock(struct seq_file *s, unsigned nest, struct clk *parent)
|
|||
/* REVISIT show device associations too */
|
||||
|
||||
/* cost is now small, but not linear... */
|
||||
list_for_each_entry(clk, &clocks, node) {
|
||||
if (clk->parent == parent)
|
||||
dump_clock(s, nest + NEST_DELTA, clk);
|
||||
list_for_each_entry(clk, &parent->children, childnode) {
|
||||
dump_clock(s, nest + NEST_DELTA, clk);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,10 @@
|
|||
/* PLL/Reset register offsets */
|
||||
#define PLLCTL 0x100
|
||||
#define PLLCTL_PLLEN BIT(0)
|
||||
#define PLLCTL_PLLPWRDN BIT(1)
|
||||
#define PLLCTL_PLLRST BIT(3)
|
||||
#define PLLCTL_PLLDIS BIT(4)
|
||||
#define PLLCTL_PLLENSRC BIT(5)
|
||||
#define PLLCTL_CLKMODE BIT(8)
|
||||
|
||||
#define PLLM 0x110
|
||||
|
@ -65,15 +69,20 @@ struct clk {
|
|||
const char *name;
|
||||
unsigned long rate;
|
||||
u8 usecount;
|
||||
u8 flags;
|
||||
u8 lpsc;
|
||||
u8 psc_ctlr;
|
||||
u8 gpsc;
|
||||
u32 flags;
|
||||
struct clk *parent;
|
||||
struct list_head children; /* list of children */
|
||||
struct list_head childnode; /* parent's child list node */
|
||||
struct pll_data *pll_data;
|
||||
u32 div_reg;
|
||||
unsigned long (*recalc) (struct clk *);
|
||||
int (*set_rate) (struct clk *clk, unsigned long rate);
|
||||
int (*round_rate) (struct clk *clk, unsigned long rate);
|
||||
};
|
||||
|
||||
/* Clock flags */
|
||||
/* Clock flags: SoC-specific flags start at BIT(16) */
|
||||
#define ALWAYS_ENABLED BIT(1)
|
||||
#define CLK_PSC BIT(2)
|
||||
#define PSC_DSP BIT(3) /* PSC uses DSP domain, not ARM */
|
||||
|
@ -94,6 +103,8 @@ struct davinci_clk {
|
|||
}
|
||||
|
||||
int davinci_clk_init(struct davinci_clk *clocks);
|
||||
int davinci_set_pllrate(struct pll_data *pll, unsigned int prediv,
|
||||
unsigned int mult, unsigned int postdiv);
|
||||
|
||||
extern struct platform_device davinci_wdt_device;
|
||||
|
||||
|
|
|
@ -86,6 +86,8 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)
|
|||
dip = davinci_get_id(davinci_soc_info.jtag_id);
|
||||
if (!dip) {
|
||||
ret = -EINVAL;
|
||||
pr_err("Unknown DaVinci JTAG ID 0x%x\n",
|
||||
davinci_soc_info.jtag_id);
|
||||
goto err;
|
||||
}
|
||||
|
||||
|
@ -104,5 +106,5 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info)
|
|||
return;
|
||||
|
||||
err:
|
||||
pr_err("davinci_common_init: SoC Initialization failed\n");
|
||||
panic("davinci_common_init: SoC Initialization failed\n");
|
||||
}
|
||||
|
|
|
@ -10,9 +10,6 @@
|
|||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
|
|
226
arch/arm/mach-davinci/cpufreq.c
Normal file
226
arch/arm/mach-davinci/cpufreq.c
Normal file
|
@ -0,0 +1,226 @@
|
|||
/*
|
||||
* CPU frequency scaling for DaVinci
|
||||
*
|
||||
* Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/
|
||||
*
|
||||
* Based on linux/arch/arm/plat-omap/cpu-omap.c. Original Copyright follows:
|
||||
*
|
||||
* Copyright (C) 2005 Nokia Corporation
|
||||
* Written by Tony Lindgren <tony@atomide.com>
|
||||
*
|
||||
* Based on cpu-sa1110.c, Copyright (C) 2001 Russell King
|
||||
*
|
||||
* Copyright (C) 2007-2008 Texas Instruments, Inc.
|
||||
* Updated to support OMAP3
|
||||
* Rajendra Nayak <rnayak@ti.com>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
#include <linux/types.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/cpufreq.h>
|
||||
#include <mach/common.h>
|
||||
|
||||
#include "clock.h"
|
||||
|
||||
struct davinci_cpufreq {
|
||||
struct device *dev;
|
||||
struct clk *armclk;
|
||||
};
|
||||
static struct davinci_cpufreq cpufreq;
|
||||
|
||||
static int davinci_verify_speed(struct cpufreq_policy *policy)
|
||||
{
|
||||
struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data;
|
||||
struct cpufreq_frequency_table *freq_table = pdata->freq_table;
|
||||
struct clk *armclk = cpufreq.armclk;
|
||||
|
||||
if (freq_table)
|
||||
return cpufreq_frequency_table_verify(policy, freq_table);
|
||||
|
||||
if (policy->cpu)
|
||||
return -EINVAL;
|
||||
|
||||
cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
|
||||
policy->cpuinfo.max_freq);
|
||||
|
||||
policy->min = clk_round_rate(armclk, policy->min * 1000) / 1000;
|
||||
policy->max = clk_round_rate(armclk, policy->max * 1000) / 1000;
|
||||
cpufreq_verify_within_limits(policy, policy->cpuinfo.min_freq,
|
||||
policy->cpuinfo.max_freq);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int davinci_getspeed(unsigned int cpu)
|
||||
{
|
||||
if (cpu)
|
||||
return 0;
|
||||
|
||||
return clk_get_rate(cpufreq.armclk) / 1000;
|
||||
}
|
||||
|
||||
static int davinci_target(struct cpufreq_policy *policy,
|
||||
unsigned int target_freq, unsigned int relation)
|
||||
{
|
||||
int ret = 0;
|
||||
unsigned int idx;
|
||||
struct cpufreq_freqs freqs;
|
||||
struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data;
|
||||
struct clk *armclk = cpufreq.armclk;
|
||||
|
||||
/*
|
||||
* Ensure desired rate is within allowed range. Some govenors
|
||||
* (ondemand) will just pass target_freq=0 to get the minimum.
|
||||
*/
|
||||
if (target_freq < policy->cpuinfo.min_freq)
|
||||
target_freq = policy->cpuinfo.min_freq;
|
||||
if (target_freq > policy->cpuinfo.max_freq)
|
||||
target_freq = policy->cpuinfo.max_freq;
|
||||
|
||||
freqs.old = davinci_getspeed(0);
|
||||
freqs.new = clk_round_rate(armclk, target_freq * 1000) / 1000;
|
||||
freqs.cpu = 0;
|
||||
|
||||
if (freqs.old == freqs.new)
|
||||
return ret;
|
||||
|
||||
cpufreq_debug_printk(CPUFREQ_DEBUG_DRIVER,
|
||||
dev_driver_string(cpufreq.dev),
|
||||
"transition: %u --> %u\n", freqs.old, freqs.new);
|
||||
|
||||
ret = cpufreq_frequency_table_target(policy, pdata->freq_table,
|
||||
freqs.new, relation, &idx);
|
||||
if (ret)
|
||||
return -EINVAL;
|
||||
|
||||
cpufreq_notify_transition(&freqs, CPUFREQ_PRECHANGE);
|
||||
|
||||
/* if moving to higher frequency, up the voltage beforehand */
|
||||
if (pdata->set_voltage && freqs.new > freqs.old)
|
||||
pdata->set_voltage(idx);
|
||||
|
||||
ret = clk_set_rate(armclk, idx);
|
||||
|
||||
/* if moving to lower freq, lower the voltage after lowering freq */
|
||||
if (pdata->set_voltage && freqs.new < freqs.old)
|
||||
pdata->set_voltage(idx);
|
||||
|
||||
cpufreq_notify_transition(&freqs, CPUFREQ_POSTCHANGE);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int __init davinci_cpu_init(struct cpufreq_policy *policy)
|
||||
{
|
||||
int result = 0;
|
||||
struct davinci_cpufreq_config *pdata = cpufreq.dev->platform_data;
|
||||
struct cpufreq_frequency_table *freq_table = pdata->freq_table;
|
||||
|
||||
if (policy->cpu != 0)
|
||||
return -EINVAL;
|
||||
|
||||
/* Finish platform specific initialization */
|
||||
if (pdata->init) {
|
||||
result = pdata->init();
|
||||
if (result)
|
||||
return result;
|
||||
}
|
||||
|
||||
policy->cur = policy->min = policy->max = davinci_getspeed(0);
|
||||
|
||||
if (freq_table) {
|
||||
result = cpufreq_frequency_table_cpuinfo(policy, freq_table);
|
||||
if (!result)
|
||||
cpufreq_frequency_table_get_attr(freq_table,
|
||||
policy->cpu);
|
||||
} else {
|
||||
policy->cpuinfo.min_freq = policy->min;
|
||||
policy->cpuinfo.max_freq = policy->max;
|
||||
}
|
||||
|
||||
policy->min = policy->cpuinfo.min_freq;
|
||||
policy->max = policy->cpuinfo.max_freq;
|
||||
policy->cur = davinci_getspeed(0);
|
||||
|
||||
/*
|
||||
* Time measurement across the target() function yields ~1500-1800us
|
||||
* time taken with no drivers on notification list.
|
||||
* Setting the latency to 2000 us to accomodate addition of drivers
|
||||
* to pre/post change notification list.
|
||||
*/
|
||||
policy->cpuinfo.transition_latency = 2000 * 1000;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int davinci_cpu_exit(struct cpufreq_policy *policy)
|
||||
{
|
||||
cpufreq_frequency_table_put_attr(policy->cpu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct freq_attr *davinci_cpufreq_attr[] = {
|
||||
&cpufreq_freq_attr_scaling_available_freqs,
|
||||
NULL,
|
||||
};
|
||||
|
||||
static struct cpufreq_driver davinci_driver = {
|
||||
.flags = CPUFREQ_STICKY,
|
||||
.verify = davinci_verify_speed,
|
||||
.target = davinci_target,
|
||||
.get = davinci_getspeed,
|
||||
.init = davinci_cpu_init,
|
||||
.exit = davinci_cpu_exit,
|
||||
.name = "davinci",
|
||||
.attr = davinci_cpufreq_attr,
|
||||
};
|
||||
|
||||
static int __init davinci_cpufreq_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct davinci_cpufreq_config *pdata = pdev->dev.platform_data;
|
||||
|
||||
if (!pdata)
|
||||
return -EINVAL;
|
||||
if (!pdata->freq_table)
|
||||
return -EINVAL;
|
||||
|
||||
cpufreq.dev = &pdev->dev;
|
||||
|
||||
cpufreq.armclk = clk_get(NULL, "arm");
|
||||
if (IS_ERR(cpufreq.armclk)) {
|
||||
dev_err(cpufreq.dev, "Unable to get ARM clock\n");
|
||||
return PTR_ERR(cpufreq.armclk);
|
||||
}
|
||||
|
||||
return cpufreq_register_driver(&davinci_driver);
|
||||
}
|
||||
|
||||
static int __exit davinci_cpufreq_remove(struct platform_device *pdev)
|
||||
{
|
||||
clk_put(cpufreq.armclk);
|
||||
|
||||
return cpufreq_unregister_driver(&davinci_driver);
|
||||
}
|
||||
|
||||
static struct platform_driver davinci_cpufreq_driver = {
|
||||
.driver = {
|
||||
.name = "cpufreq-davinci",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.remove = __exit_p(davinci_cpufreq_remove),
|
||||
};
|
||||
|
||||
static int __init davinci_cpufreq_init(void)
|
||||
{
|
||||
return platform_driver_probe(&davinci_cpufreq_driver,
|
||||
davinci_cpufreq_probe);
|
||||
}
|
||||
late_initcall(davinci_cpufreq_init);
|
||||
|
197
arch/arm/mach-davinci/cpuidle.c
Normal file
197
arch/arm/mach-davinci/cpuidle.c
Normal file
|
@ -0,0 +1,197 @@
|
|||
/*
|
||||
* CPU idle for DaVinci SoCs
|
||||
*
|
||||
* Copyright (C) 2009 Texas Instruments Incorporated. http://www.ti.com/
|
||||
*
|
||||
* Derived from Marvell Kirkwood CPU idle code
|
||||
* (arch/arm/mach-kirkwood/cpuidle.c)
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/cpuidle.h>
|
||||
#include <linux/io.h>
|
||||
#include <asm/proc-fns.h>
|
||||
|
||||
#include <mach/cpuidle.h>
|
||||
|
||||
#define DAVINCI_CPUIDLE_MAX_STATES 2
|
||||
|
||||
struct davinci_ops {
|
||||
void (*enter) (u32 flags);
|
||||
void (*exit) (u32 flags);
|
||||
u32 flags;
|
||||
};
|
||||
|
||||
/* fields in davinci_ops.flags */
|
||||
#define DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN BIT(0)
|
||||
|
||||
static struct cpuidle_driver davinci_idle_driver = {
|
||||
.name = "cpuidle-davinci",
|
||||
.owner = THIS_MODULE,
|
||||
};
|
||||
|
||||
static DEFINE_PER_CPU(struct cpuidle_device, davinci_cpuidle_device);
|
||||
static void __iomem *ddr2_reg_base;
|
||||
|
||||
#define DDR2_SDRCR_OFFSET 0xc
|
||||
#define DDR2_SRPD_BIT BIT(23)
|
||||
#define DDR2_LPMODEN_BIT BIT(31)
|
||||
|
||||
static void davinci_save_ddr_power(int enter, bool pdown)
|
||||
{
|
||||
u32 val;
|
||||
|
||||
val = __raw_readl(ddr2_reg_base + DDR2_SDRCR_OFFSET);
|
||||
|
||||
if (enter) {
|
||||
if (pdown)
|
||||
val |= DDR2_SRPD_BIT;
|
||||
else
|
||||
val &= ~DDR2_SRPD_BIT;
|
||||
val |= DDR2_LPMODEN_BIT;
|
||||
} else {
|
||||
val &= ~(DDR2_SRPD_BIT | DDR2_LPMODEN_BIT);
|
||||
}
|
||||
|
||||
__raw_writel(val, ddr2_reg_base + DDR2_SDRCR_OFFSET);
|
||||
}
|
||||
|
||||
static void davinci_c2state_enter(u32 flags)
|
||||
{
|
||||
davinci_save_ddr_power(1, !!(flags & DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN));
|
||||
}
|
||||
|
||||
static void davinci_c2state_exit(u32 flags)
|
||||
{
|
||||
davinci_save_ddr_power(0, !!(flags & DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN));
|
||||
}
|
||||
|
||||
static struct davinci_ops davinci_states[DAVINCI_CPUIDLE_MAX_STATES] = {
|
||||
[1] = {
|
||||
.enter = davinci_c2state_enter,
|
||||
.exit = davinci_c2state_exit,
|
||||
},
|
||||
};
|
||||
|
||||
/* Actual code that puts the SoC in different idle states */
|
||||
static int davinci_enter_idle(struct cpuidle_device *dev,
|
||||
struct cpuidle_state *state)
|
||||
{
|
||||
struct davinci_ops *ops = cpuidle_get_statedata(state);
|
||||
struct timeval before, after;
|
||||
int idle_time;
|
||||
|
||||
local_irq_disable();
|
||||
do_gettimeofday(&before);
|
||||
|
||||
if (ops && ops->enter)
|
||||
ops->enter(ops->flags);
|
||||
/* Wait for interrupt state */
|
||||
cpu_do_idle();
|
||||
if (ops && ops->exit)
|
||||
ops->exit(ops->flags);
|
||||
|
||||
do_gettimeofday(&after);
|
||||
local_irq_enable();
|
||||
idle_time = (after.tv_sec - before.tv_sec) * USEC_PER_SEC +
|
||||
(after.tv_usec - before.tv_usec);
|
||||
return idle_time;
|
||||
}
|
||||
|
||||
static int __init davinci_cpuidle_probe(struct platform_device *pdev)
|
||||
{
|
||||
int ret;
|
||||
struct cpuidle_device *device;
|
||||
struct davinci_cpuidle_config *pdata = pdev->dev.platform_data;
|
||||
struct resource *ddr2_regs;
|
||||
resource_size_t len;
|
||||
|
||||
device = &per_cpu(davinci_cpuidle_device, smp_processor_id());
|
||||
|
||||
if (!pdata) {
|
||||
dev_err(&pdev->dev, "cannot get platform data\n");
|
||||
return -ENOENT;
|
||||
}
|
||||
|
||||
ddr2_regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
||||
if (!ddr2_regs) {
|
||||
dev_err(&pdev->dev, "cannot get DDR2 controller register base");
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
len = resource_size(ddr2_regs);
|
||||
|
||||
ddr2_regs = request_mem_region(ddr2_regs->start, len, ddr2_regs->name);
|
||||
if (!ddr2_regs)
|
||||
return -EBUSY;
|
||||
|
||||
ddr2_reg_base = ioremap(ddr2_regs->start, len);
|
||||
if (!ddr2_reg_base) {
|
||||
ret = -ENOMEM;
|
||||
goto ioremap_fail;
|
||||
}
|
||||
|
||||
ret = cpuidle_register_driver(&davinci_idle_driver);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to register driver\n");
|
||||
goto driver_register_fail;
|
||||
}
|
||||
|
||||
/* Wait for interrupt state */
|
||||
device->states[0].enter = davinci_enter_idle;
|
||||
device->states[0].exit_latency = 1;
|
||||
device->states[0].target_residency = 10000;
|
||||
device->states[0].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||
strcpy(device->states[0].name, "WFI");
|
||||
strcpy(device->states[0].desc, "Wait for interrupt");
|
||||
|
||||
/* Wait for interrupt and DDR self refresh state */
|
||||
device->states[1].enter = davinci_enter_idle;
|
||||
device->states[1].exit_latency = 10;
|
||||
device->states[1].target_residency = 10000;
|
||||
device->states[1].flags = CPUIDLE_FLAG_TIME_VALID;
|
||||
strcpy(device->states[1].name, "DDR SR");
|
||||
strcpy(device->states[1].desc, "WFI and DDR Self Refresh");
|
||||
if (pdata->ddr2_pdown)
|
||||
davinci_states[1].flags |= DAVINCI_CPUIDLE_FLAGS_DDR2_PWDN;
|
||||
cpuidle_set_statedata(&device->states[1], &davinci_states[1]);
|
||||
|
||||
device->state_count = DAVINCI_CPUIDLE_MAX_STATES;
|
||||
|
||||
ret = cpuidle_register_device(device);
|
||||
if (ret) {
|
||||
dev_err(&pdev->dev, "failed to register device\n");
|
||||
goto device_register_fail;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
device_register_fail:
|
||||
cpuidle_unregister_driver(&davinci_idle_driver);
|
||||
driver_register_fail:
|
||||
iounmap(ddr2_reg_base);
|
||||
ioremap_fail:
|
||||
release_mem_region(ddr2_regs->start, len);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static struct platform_driver davinci_cpuidle_driver = {
|
||||
.driver = {
|
||||
.name = "cpuidle-davinci",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init davinci_cpuidle_init(void)
|
||||
{
|
||||
return platform_driver_probe(&davinci_cpuidle_driver,
|
||||
davinci_cpuidle_probe);
|
||||
}
|
||||
device_initcall(davinci_cpuidle_init);
|
||||
|
|
@ -8,22 +8,17 @@
|
|||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/clock.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/time.h>
|
||||
#include <mach/da8xx.h>
|
||||
#include <mach/asp.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "mux.h"
|
||||
|
@ -193,14 +188,14 @@ static struct clk uart1_clk = {
|
|||
.name = "uart1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_UART1,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk uart2_clk = {
|
||||
.name = "uart2",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_UART2,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk spi0_clk = {
|
||||
|
@ -213,98 +208,98 @@ static struct clk spi1_clk = {
|
|||
.name = "spi1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_SPI1,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk ecap0_clk = {
|
||||
.name = "ecap0",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_ECAP,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk ecap1_clk = {
|
||||
.name = "ecap1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_ECAP,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk ecap2_clk = {
|
||||
.name = "ecap2",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_ECAP,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk pwm0_clk = {
|
||||
.name = "pwm0",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_PWM,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk pwm1_clk = {
|
||||
.name = "pwm1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_PWM,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk pwm2_clk = {
|
||||
.name = "pwm2",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_PWM,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk eqep0_clk = {
|
||||
.name = "eqep0",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA830_LPSC1_EQEP,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk eqep1_clk = {
|
||||
.name = "eqep1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA830_LPSC1_EQEP,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk lcdc_clk = {
|
||||
.name = "lcdc",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_LCDC,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk mcasp0_clk = {
|
||||
.name = "mcasp0",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_McASP0,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk mcasp1_clk = {
|
||||
.name = "mcasp1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA830_LPSC1_McASP1,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk mcasp2_clk = {
|
||||
.name = "mcasp2",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA830_LPSC1_McASP2,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk usb20_clk = {
|
||||
.name = "usb20",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_USB20,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk aemif_clk = {
|
||||
|
@ -332,36 +327,36 @@ static struct clk emac_clk = {
|
|||
.name = "emac",
|
||||
.parent = &pll0_sysclk4,
|
||||
.lpsc = DA8XX_LPSC1_CPGMAC,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk gpio_clk = {
|
||||
.name = "gpio",
|
||||
.parent = &pll0_sysclk4,
|
||||
.lpsc = DA8XX_LPSC1_GPIO,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk i2c1_clk = {
|
||||
.name = "i2c1",
|
||||
.parent = &pll0_sysclk4,
|
||||
.lpsc = DA8XX_LPSC1_I2C,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk usb11_clk = {
|
||||
.name = "usb11",
|
||||
.parent = &pll0_sysclk4,
|
||||
.lpsc = DA8XX_LPSC1_USB11,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk emif3_clk = {
|
||||
.name = "emif3",
|
||||
.parent = &pll0_sysclk5,
|
||||
.lpsc = DA8XX_LPSC1_EMIF3C,
|
||||
.gpsc = 1,
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.psc_ctlr = 1,
|
||||
};
|
||||
|
||||
static struct clk arm_clk = {
|
||||
|
@ -411,7 +406,7 @@ static struct davinci_clk da830_clks[] = {
|
|||
CLK(NULL, "pwm2", &pwm2_clk),
|
||||
CLK("eqep.0", NULL, &eqep0_clk),
|
||||
CLK("eqep.1", NULL, &eqep1_clk),
|
||||
CLK("da830_lcdc", NULL, &lcdc_clk),
|
||||
CLK("da8xx_lcdc.0", NULL, &lcdc_clk),
|
||||
CLK("davinci-mcasp.0", NULL, &mcasp0_clk),
|
||||
CLK("davinci-mcasp.1", NULL, &mcasp1_clk),
|
||||
CLK("davinci-mcasp.2", NULL, &mcasp2_clk),
|
||||
|
@ -1143,7 +1138,21 @@ static struct davinci_id da830_ids[] = {
|
|||
.part_no = 0xb7df,
|
||||
.manufacturer = 0x017, /* 0x02f >> 1 */
|
||||
.cpu_id = DAVINCI_CPU_ID_DA830,
|
||||
.name = "da830/omap l137",
|
||||
.name = "da830/omap-l137 rev1.0",
|
||||
},
|
||||
{
|
||||
.variant = 0x8,
|
||||
.part_no = 0xb7df,
|
||||
.manufacturer = 0x017,
|
||||
.cpu_id = DAVINCI_CPU_ID_DA830,
|
||||
.name = "da830/omap-l137 rev1.1",
|
||||
},
|
||||
{
|
||||
.variant = 0x9,
|
||||
.part_no = 0xb7df,
|
||||
.manufacturer = 0x017,
|
||||
.cpu_id = DAVINCI_CPU_ID_DA830,
|
||||
.name = "da830/omap-l137 rev2.0",
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -1178,13 +1187,11 @@ static struct davinci_timer_info da830_timer_info = {
|
|||
static struct davinci_soc_info davinci_soc_info_da830 = {
|
||||
.io_desc = da830_io_desc,
|
||||
.io_desc_num = ARRAY_SIZE(da830_io_desc),
|
||||
.jtag_id_base = IO_ADDRESS(DA8XX_JTAG_ID_REG),
|
||||
.ids = da830_ids,
|
||||
.ids_num = ARRAY_SIZE(da830_ids),
|
||||
.cpu_clks = da830_clks,
|
||||
.psc_bases = da830_psc_bases,
|
||||
.psc_bases_num = ARRAY_SIZE(da830_psc_bases),
|
||||
.pinmux_base = IO_ADDRESS(DA8XX_BOOT_CFG_BASE + 0x120),
|
||||
.pinmux_pins = da830_pins,
|
||||
.pinmux_pins_num = ARRAY_SIZE(da830_pins),
|
||||
.intc_base = (void __iomem *)DA8XX_CP_INTC_VIRT,
|
||||
|
@ -1201,5 +1208,13 @@ static struct davinci_soc_info davinci_soc_info_da830 = {
|
|||
|
||||
void __init da830_init(void)
|
||||
{
|
||||
da8xx_syscfg_base = ioremap(DA8XX_SYSCFG_BASE, SZ_4K);
|
||||
if (WARN(!da8xx_syscfg_base, "Unable to map syscfg module"))
|
||||
return;
|
||||
|
||||
davinci_soc_info_da830.jtag_id_base =
|
||||
DA8XX_SYSCFG_VIRT(DA8XX_JTAG_ID_REG);
|
||||
davinci_soc_info_da830.pinmux_base = DA8XX_SYSCFG_VIRT(0x120);
|
||||
|
||||
davinci_common_init(&davinci_soc_info_da830);
|
||||
}
|
||||
|
|
|
@ -11,31 +11,41 @@
|
|||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/cpufreq.h>
|
||||
#include <linux/regulator/consumer.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/clock.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/time.h>
|
||||
#include <mach/da8xx.h>
|
||||
#include <mach/cpufreq.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "mux.h"
|
||||
|
||||
/* SoC specific clock flags */
|
||||
#define DA850_CLK_ASYNC3 BIT(16)
|
||||
|
||||
#define DA850_PLL1_BASE 0x01e1a000
|
||||
#define DA850_TIMER64P2_BASE 0x01f0c000
|
||||
#define DA850_TIMER64P3_BASE 0x01f0d000
|
||||
|
||||
#define DA850_REF_FREQ 24000000
|
||||
|
||||
#define CFGCHIP3_ASYNC3_CLKSRC BIT(4)
|
||||
#define CFGCHIP0_PLL_MASTER_LOCK BIT(4)
|
||||
|
||||
static int da850_set_armrate(struct clk *clk, unsigned long rate);
|
||||
static int da850_round_armrate(struct clk *clk, unsigned long rate);
|
||||
static int da850_set_pll0rate(struct clk *clk, unsigned long armrate);
|
||||
|
||||
static struct pll_data pll0_data = {
|
||||
.num = 1,
|
||||
.phys_base = DA8XX_PLL0_BASE,
|
||||
|
@ -52,6 +62,7 @@ static struct clk pll0_clk = {
|
|||
.parent = &ref_clk,
|
||||
.pll_data = &pll0_data,
|
||||
.flags = CLK_PLL,
|
||||
.set_rate = da850_set_pll0rate,
|
||||
};
|
||||
|
||||
static struct clk pll0_aux_clk = {
|
||||
|
@ -210,16 +221,16 @@ static struct clk tpcc1_clk = {
|
|||
.name = "tpcc1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA850_LPSC1_TPCC1,
|
||||
.gpsc = 1,
|
||||
.flags = CLK_PSC | ALWAYS_ENABLED,
|
||||
.psc_ctlr = 1,
|
||||
};
|
||||
|
||||
static struct clk tptc2_clk = {
|
||||
.name = "tptc2",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA850_LPSC1_TPTC2,
|
||||
.gpsc = 1,
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.psc_ctlr = 1,
|
||||
};
|
||||
|
||||
static struct clk uart0_clk = {
|
||||
|
@ -232,14 +243,16 @@ static struct clk uart1_clk = {
|
|||
.name = "uart1",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_UART1,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
.flags = DA850_CLK_ASYNC3,
|
||||
};
|
||||
|
||||
static struct clk uart2_clk = {
|
||||
.name = "uart2",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_UART2,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
.flags = DA850_CLK_ASYNC3,
|
||||
};
|
||||
|
||||
static struct clk aintc_clk = {
|
||||
|
@ -253,22 +266,22 @@ static struct clk gpio_clk = {
|
|||
.name = "gpio",
|
||||
.parent = &pll0_sysclk4,
|
||||
.lpsc = DA8XX_LPSC1_GPIO,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk i2c1_clk = {
|
||||
.name = "i2c1",
|
||||
.parent = &pll0_sysclk4,
|
||||
.lpsc = DA8XX_LPSC1_I2C,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk emif3_clk = {
|
||||
.name = "emif3",
|
||||
.parent = &pll0_sysclk5,
|
||||
.lpsc = DA8XX_LPSC1_EMIF3C,
|
||||
.gpsc = 1,
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.psc_ctlr = 1,
|
||||
};
|
||||
|
||||
static struct clk arm_clk = {
|
||||
|
@ -276,6 +289,8 @@ static struct clk arm_clk = {
|
|||
.parent = &pll0_sysclk6,
|
||||
.lpsc = DA8XX_LPSC0_ARM,
|
||||
.flags = ALWAYS_ENABLED,
|
||||
.set_rate = da850_set_armrate,
|
||||
.round_rate = da850_round_armrate,
|
||||
};
|
||||
|
||||
static struct clk rmii_clk = {
|
||||
|
@ -287,21 +302,22 @@ static struct clk emac_clk = {
|
|||
.name = "emac",
|
||||
.parent = &pll0_sysclk4,
|
||||
.lpsc = DA8XX_LPSC1_CPGMAC,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk mcasp_clk = {
|
||||
.name = "mcasp",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_McASP0,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
.flags = DA850_CLK_ASYNC3,
|
||||
};
|
||||
|
||||
static struct clk lcdc_clk = {
|
||||
.name = "lcdc",
|
||||
.parent = &pll0_sysclk2,
|
||||
.lpsc = DA8XX_LPSC1_LCDC,
|
||||
.psc_ctlr = 1,
|
||||
.gpsc = 1,
|
||||
};
|
||||
|
||||
static struct clk mmcsd_clk = {
|
||||
|
@ -404,6 +420,14 @@ static const struct mux_config da850_pins[] = {
|
|||
MUX_CFG(DA850, MII_RXD_0, 3, 28, 15, 8, false)
|
||||
MUX_CFG(DA850, MDIO_CLK, 4, 0, 15, 8, false)
|
||||
MUX_CFG(DA850, MDIO_D, 4, 4, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_TXD_0, 14, 12, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_TXD_1, 14, 8, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_TXEN, 14, 16, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_CRS_DV, 15, 4, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_RXD_0, 14, 24, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_RXD_1, 14, 20, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_RXER, 14, 28, 15, 8, false)
|
||||
MUX_CFG(DA850, RMII_MHZ_50_CLK, 15, 0, 15, 0, false)
|
||||
/* McASP function */
|
||||
MUX_CFG(DA850, ACLKR, 0, 0, 15, 1, false)
|
||||
MUX_CFG(DA850, ACLKX, 0, 4, 15, 1, false)
|
||||
|
@ -506,8 +530,9 @@ static const struct mux_config da850_pins[] = {
|
|||
MUX_CFG(DA850, EMA_WAIT_1, 6, 24, 15, 1, false)
|
||||
MUX_CFG(DA850, NEMA_CS_2, 7, 0, 15, 1, false)
|
||||
/* GPIO function */
|
||||
MUX_CFG(DA850, GPIO2_6, 6, 4, 15, 8, false)
|
||||
MUX_CFG(DA850, GPIO2_8, 5, 28, 15, 8, false)
|
||||
MUX_CFG(DA850, GPIO2_15, 5, 0, 15, 8, false)
|
||||
MUX_CFG(DA850, GPIO8_10, 18, 28, 15, 8, false)
|
||||
MUX_CFG(DA850, GPIO4_0, 10, 28, 15, 8, false)
|
||||
MUX_CFG(DA850, GPIO4_1, 10, 24, 15, 8, false)
|
||||
#endif
|
||||
|
@ -547,6 +572,14 @@ const short da850_cpgmac_pins[] __initdata = {
|
|||
-1
|
||||
};
|
||||
|
||||
const short da850_rmii_pins[] __initdata = {
|
||||
DA850_RMII_TXD_0, DA850_RMII_TXD_1, DA850_RMII_TXEN,
|
||||
DA850_RMII_CRS_DV, DA850_RMII_RXD_0, DA850_RMII_RXD_1,
|
||||
DA850_RMII_RXER, DA850_RMII_MHZ_50_CLK, DA850_MDIO_CLK,
|
||||
DA850_MDIO_D,
|
||||
-1
|
||||
};
|
||||
|
||||
const short da850_mcasp_pins[] __initdata = {
|
||||
DA850_AHCLKX, DA850_ACLKX, DA850_AFSX,
|
||||
DA850_AHCLKR, DA850_ACLKR, DA850_AFSR, DA850_AMUTE,
|
||||
|
@ -555,12 +588,11 @@ const short da850_mcasp_pins[] __initdata = {
|
|||
};
|
||||
|
||||
const short da850_lcdcntl_pins[] __initdata = {
|
||||
DA850_LCD_D_1, DA850_LCD_D_2, DA850_LCD_D_3, DA850_LCD_D_4,
|
||||
DA850_LCD_D_5, DA850_LCD_D_6, DA850_LCD_D_7, DA850_LCD_D_8,
|
||||
DA850_LCD_D_9, DA850_LCD_D_10, DA850_LCD_D_11, DA850_LCD_D_12,
|
||||
DA850_LCD_D_13, DA850_LCD_D_14, DA850_LCD_D_15, DA850_LCD_PCLK,
|
||||
DA850_LCD_HSYNC, DA850_LCD_VSYNC, DA850_NLCD_AC_ENB_CS, DA850_GPIO2_15,
|
||||
DA850_GPIO8_10,
|
||||
DA850_LCD_D_0, DA850_LCD_D_1, DA850_LCD_D_2, DA850_LCD_D_3,
|
||||
DA850_LCD_D_4, DA850_LCD_D_5, DA850_LCD_D_6, DA850_LCD_D_7,
|
||||
DA850_LCD_D_8, DA850_LCD_D_9, DA850_LCD_D_10, DA850_LCD_D_11,
|
||||
DA850_LCD_D_12, DA850_LCD_D_13, DA850_LCD_D_14, DA850_LCD_D_15,
|
||||
DA850_LCD_PCLK, DA850_LCD_HSYNC, DA850_LCD_VSYNC, DA850_NLCD_AC_ENB_CS,
|
||||
-1
|
||||
};
|
||||
|
||||
|
@ -790,16 +822,221 @@ static struct davinci_timer_info da850_timer_info = {
|
|||
.clocksource_id = T0_TOP,
|
||||
};
|
||||
|
||||
static void da850_set_async3_src(int pllnum)
|
||||
{
|
||||
struct clk *clk, *newparent = pllnum ? &pll1_sysclk2 : &pll0_sysclk2;
|
||||
struct davinci_clk *c;
|
||||
unsigned int v;
|
||||
int ret;
|
||||
|
||||
for (c = da850_clks; c->lk.clk; c++) {
|
||||
clk = c->lk.clk;
|
||||
if (clk->flags & DA850_CLK_ASYNC3) {
|
||||
ret = clk_set_parent(clk, newparent);
|
||||
WARN(ret, "DA850: unable to re-parent clock %s",
|
||||
clk->name);
|
||||
}
|
||||
}
|
||||
|
||||
v = __raw_readl(DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP3_REG));
|
||||
if (pllnum)
|
||||
v |= CFGCHIP3_ASYNC3_CLKSRC;
|
||||
else
|
||||
v &= ~CFGCHIP3_ASYNC3_CLKSRC;
|
||||
__raw_writel(v, DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP3_REG));
|
||||
}
|
||||
|
||||
#ifdef CONFIG_CPU_FREQ
|
||||
/*
|
||||
* Notes:
|
||||
* According to the TRM, minimum PLLM results in maximum power savings.
|
||||
* The OPP definitions below should keep the PLLM as low as possible.
|
||||
*
|
||||
* The output of the PLLM must be between 400 to 600 MHz.
|
||||
* This rules out prediv of anything but divide-by-one for 24Mhz OSC input.
|
||||
*/
|
||||
struct da850_opp {
|
||||
unsigned int freq; /* in KHz */
|
||||
unsigned int prediv;
|
||||
unsigned int mult;
|
||||
unsigned int postdiv;
|
||||
unsigned int cvdd_min; /* in uV */
|
||||
unsigned int cvdd_max; /* in uV */
|
||||
};
|
||||
|
||||
static const struct da850_opp da850_opp_300 = {
|
||||
.freq = 300000,
|
||||
.prediv = 1,
|
||||
.mult = 25,
|
||||
.postdiv = 2,
|
||||
.cvdd_min = 1140000,
|
||||
.cvdd_max = 1320000,
|
||||
};
|
||||
|
||||
static const struct da850_opp da850_opp_200 = {
|
||||
.freq = 200000,
|
||||
.prediv = 1,
|
||||
.mult = 25,
|
||||
.postdiv = 3,
|
||||
.cvdd_min = 1050000,
|
||||
.cvdd_max = 1160000,
|
||||
};
|
||||
|
||||
static const struct da850_opp da850_opp_96 = {
|
||||
.freq = 96000,
|
||||
.prediv = 1,
|
||||
.mult = 20,
|
||||
.postdiv = 5,
|
||||
.cvdd_min = 950000,
|
||||
.cvdd_max = 1050000,
|
||||
};
|
||||
|
||||
#define OPP(freq) \
|
||||
{ \
|
||||
.index = (unsigned int) &da850_opp_##freq, \
|
||||
.frequency = freq * 1000, \
|
||||
}
|
||||
|
||||
static struct cpufreq_frequency_table da850_freq_table[] = {
|
||||
OPP(300),
|
||||
OPP(200),
|
||||
OPP(96),
|
||||
{
|
||||
.index = 0,
|
||||
.frequency = CPUFREQ_TABLE_END,
|
||||
},
|
||||
};
|
||||
|
||||
#ifdef CONFIG_REGULATOR
|
||||
static struct regulator *cvdd;
|
||||
|
||||
static int da850_set_voltage(unsigned int index)
|
||||
{
|
||||
struct da850_opp *opp;
|
||||
|
||||
if (!cvdd)
|
||||
return -ENODEV;
|
||||
|
||||
opp = (struct da850_opp *) da850_freq_table[index].index;
|
||||
|
||||
return regulator_set_voltage(cvdd, opp->cvdd_min, opp->cvdd_max);
|
||||
}
|
||||
|
||||
static int da850_regulator_init(void)
|
||||
{
|
||||
cvdd = regulator_get(NULL, "cvdd");
|
||||
if (WARN(IS_ERR(cvdd), "Unable to obtain voltage regulator for CVDD;"
|
||||
" voltage scaling unsupported\n")) {
|
||||
return PTR_ERR(cvdd);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static struct davinci_cpufreq_config cpufreq_info = {
|
||||
.freq_table = &da850_freq_table[0],
|
||||
#ifdef CONFIG_REGULATOR
|
||||
.init = da850_regulator_init,
|
||||
.set_voltage = da850_set_voltage,
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct platform_device da850_cpufreq_device = {
|
||||
.name = "cpufreq-davinci",
|
||||
.dev = {
|
||||
.platform_data = &cpufreq_info,
|
||||
},
|
||||
};
|
||||
|
||||
int __init da850_register_cpufreq(void)
|
||||
{
|
||||
return platform_device_register(&da850_cpufreq_device);
|
||||
}
|
||||
|
||||
static int da850_round_armrate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
int i, ret = 0, diff;
|
||||
unsigned int best = (unsigned int) -1;
|
||||
|
||||
rate /= 1000; /* convert to kHz */
|
||||
|
||||
for (i = 0; da850_freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
|
||||
diff = da850_freq_table[i].frequency - rate;
|
||||
if (diff < 0)
|
||||
diff = -diff;
|
||||
|
||||
if (diff < best) {
|
||||
best = diff;
|
||||
ret = da850_freq_table[i].frequency;
|
||||
}
|
||||
}
|
||||
|
||||
return ret * 1000;
|
||||
}
|
||||
|
||||
static int da850_set_armrate(struct clk *clk, unsigned long index)
|
||||
{
|
||||
struct clk *pllclk = &pll0_clk;
|
||||
|
||||
return clk_set_rate(pllclk, index);
|
||||
}
|
||||
|
||||
static int da850_set_pll0rate(struct clk *clk, unsigned long index)
|
||||
{
|
||||
unsigned int prediv, mult, postdiv;
|
||||
struct da850_opp *opp;
|
||||
struct pll_data *pll = clk->pll_data;
|
||||
unsigned int v;
|
||||
int ret;
|
||||
|
||||
opp = (struct da850_opp *) da850_freq_table[index].index;
|
||||
prediv = opp->prediv;
|
||||
mult = opp->mult;
|
||||
postdiv = opp->postdiv;
|
||||
|
||||
/* Unlock writing to PLL registers */
|
||||
v = __raw_readl(DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP0_REG));
|
||||
v &= ~CFGCHIP0_PLL_MASTER_LOCK;
|
||||
__raw_writel(v, DA8XX_SYSCFG_VIRT(DA8XX_CFGCHIP0_REG));
|
||||
|
||||
ret = davinci_set_pllrate(pll, prediv, mult, postdiv);
|
||||
if (WARN_ON(ret))
|
||||
return ret;
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
int __init da850_register_cpufreq(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int da850_set_armrate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int da850_set_pll0rate(struct clk *clk, unsigned long armrate)
|
||||
{
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
static int da850_round_armrate(struct clk *clk, unsigned long rate)
|
||||
{
|
||||
return clk->rate;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
static struct davinci_soc_info davinci_soc_info_da850 = {
|
||||
.io_desc = da850_io_desc,
|
||||
.io_desc_num = ARRAY_SIZE(da850_io_desc),
|
||||
.jtag_id_base = IO_ADDRESS(DA8XX_JTAG_ID_REG),
|
||||
.ids = da850_ids,
|
||||
.ids_num = ARRAY_SIZE(da850_ids),
|
||||
.cpu_clks = da850_clks,
|
||||
.psc_bases = da850_psc_bases,
|
||||
.psc_bases_num = ARRAY_SIZE(da850_psc_bases),
|
||||
.pinmux_base = IO_ADDRESS(DA8XX_BOOT_CFG_BASE + 0x120),
|
||||
.pinmux_pins = da850_pins,
|
||||
.pinmux_pins_num = ARRAY_SIZE(da850_pins),
|
||||
.intc_base = (void __iomem *)DA8XX_CP_INTC_VIRT,
|
||||
|
@ -816,5 +1053,22 @@ static struct davinci_soc_info davinci_soc_info_da850 = {
|
|||
|
||||
void __init da850_init(void)
|
||||
{
|
||||
da8xx_syscfg_base = ioremap(DA8XX_SYSCFG_BASE, SZ_4K);
|
||||
if (WARN(!da8xx_syscfg_base, "Unable to map syscfg module"))
|
||||
return;
|
||||
|
||||
davinci_soc_info_da850.jtag_id_base =
|
||||
DA8XX_SYSCFG_VIRT(DA8XX_JTAG_ID_REG);
|
||||
davinci_soc_info_da850.pinmux_base = DA8XX_SYSCFG_VIRT(0x120);
|
||||
|
||||
davinci_common_init(&davinci_soc_info_da850);
|
||||
|
||||
/*
|
||||
* Move the clock source of Async3 domain to PLL1 SYSCLK2.
|
||||
* This helps keeping the peripherals on this domain insulated
|
||||
* from CPU frequency changes caused by DVFS. The firmware sets
|
||||
* both PLL0 and PLL1 to the same frequency so, there should not
|
||||
* be any noticible change even in non-DVFS use cases.
|
||||
*/
|
||||
da850_set_async3_src(1);
|
||||
}
|
||||
|
|
|
@ -10,8 +10,6 @@
|
|||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
@ -21,7 +19,7 @@
|
|||
#include <mach/common.h>
|
||||
#include <mach/time.h>
|
||||
#include <mach/da8xx.h>
|
||||
#include <video/da8xx-fb.h>
|
||||
#include <mach/cpuidle.h>
|
||||
|
||||
#include "clock.h"
|
||||
|
||||
|
@ -30,6 +28,7 @@
|
|||
#define DA8XX_TPTC1_BASE 0x01c08400
|
||||
#define DA8XX_WDOG_BASE 0x01c21000 /* DA8XX_TIMER64P1_BASE */
|
||||
#define DA8XX_I2C0_BASE 0x01c22000
|
||||
#define DA8XX_RTC_BASE 0x01C23000
|
||||
#define DA8XX_EMAC_CPPI_PORT_BASE 0x01e20000
|
||||
#define DA8XX_EMAC_CPGMACSS_BASE 0x01e22000
|
||||
#define DA8XX_EMAC_CPGMAC_BASE 0x01e23000
|
||||
|
@ -43,6 +42,8 @@
|
|||
#define DA8XX_MDIO_REG_OFFSET 0x4000
|
||||
#define DA8XX_EMAC_CTRL_RAM_SIZE SZ_8K
|
||||
|
||||
void __iomem *da8xx_syscfg_base;
|
||||
|
||||
static struct plat_serial8250_port da8xx_serial_pdata[] = {
|
||||
{
|
||||
.mapbase = DA8XX_UART0_BASE,
|
||||
|
@ -282,6 +283,11 @@ static struct platform_device da8xx_emac_device = {
|
|||
.resource = da8xx_emac_resources,
|
||||
};
|
||||
|
||||
int __init da8xx_register_emac(void)
|
||||
{
|
||||
return platform_device_register(&da8xx_emac_device);
|
||||
}
|
||||
|
||||
static struct resource da830_mcasp1_resources[] = {
|
||||
{
|
||||
.name = "mcasp1",
|
||||
|
@ -338,12 +344,7 @@ static struct platform_device da850_mcasp_device = {
|
|||
.resource = da850_mcasp_resources,
|
||||
};
|
||||
|
||||
int __init da8xx_register_emac(void)
|
||||
{
|
||||
return platform_device_register(&da8xx_emac_device);
|
||||
}
|
||||
|
||||
void __init da8xx_init_mcasp(int id, struct snd_platform_data *pdata)
|
||||
void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata)
|
||||
{
|
||||
/* DA830/OMAP-L137 has 3 instances of McASP */
|
||||
if (cpu_is_davinci_da830() && id == 1) {
|
||||
|
@ -379,10 +380,16 @@ static struct lcd_ctrl_config lcd_cfg = {
|
|||
.raster_order = 0,
|
||||
};
|
||||
|
||||
static struct da8xx_lcdc_platform_data da850_evm_lcdc_pdata = {
|
||||
.manu_name = "sharp",
|
||||
.controller_data = &lcd_cfg,
|
||||
.type = "Sharp_LK043T1DG01",
|
||||
struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata = {
|
||||
.manu_name = "sharp",
|
||||
.controller_data = &lcd_cfg,
|
||||
.type = "Sharp_LCD035Q3DG01",
|
||||
};
|
||||
|
||||
struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata = {
|
||||
.manu_name = "sharp",
|
||||
.controller_data = &lcd_cfg,
|
||||
.type = "Sharp_LK043T1DG01",
|
||||
};
|
||||
|
||||
static struct resource da8xx_lcdc_resources[] = {
|
||||
|
@ -398,19 +405,17 @@ static struct resource da8xx_lcdc_resources[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct platform_device da850_lcdc_device = {
|
||||
static struct platform_device da8xx_lcdc_device = {
|
||||
.name = "da8xx_lcdc",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(da8xx_lcdc_resources),
|
||||
.resource = da8xx_lcdc_resources,
|
||||
.dev = {
|
||||
.platform_data = &da850_evm_lcdc_pdata,
|
||||
}
|
||||
};
|
||||
|
||||
int __init da8xx_register_lcdc(void)
|
||||
int __init da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata)
|
||||
{
|
||||
return platform_device_register(&da850_lcdc_device);
|
||||
da8xx_lcdc_device.dev.platform_data = pdata;
|
||||
return platform_device_register(&da8xx_lcdc_device);
|
||||
}
|
||||
|
||||
static struct resource da8xx_mmcsd0_resources[] = {
|
||||
|
@ -448,3 +453,66 @@ int __init da8xx_register_mmcsd0(struct davinci_mmc_config *config)
|
|||
da8xx_mmcsd0_device.dev.platform_data = config;
|
||||
return platform_device_register(&da8xx_mmcsd0_device);
|
||||
}
|
||||
|
||||
static struct resource da8xx_rtc_resources[] = {
|
||||
{
|
||||
.start = DA8XX_RTC_BASE,
|
||||
.end = DA8XX_RTC_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{ /* timer irq */
|
||||
.start = IRQ_DA8XX_RTC,
|
||||
.end = IRQ_DA8XX_RTC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
{ /* alarm irq */
|
||||
.start = IRQ_DA8XX_RTC,
|
||||
.end = IRQ_DA8XX_RTC,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device da8xx_rtc_device = {
|
||||
.name = "omap_rtc",
|
||||
.id = -1,
|
||||
.num_resources = ARRAY_SIZE(da8xx_rtc_resources),
|
||||
.resource = da8xx_rtc_resources,
|
||||
};
|
||||
|
||||
int da8xx_register_rtc(void)
|
||||
{
|
||||
/* Unlock the rtc's registers */
|
||||
__raw_writel(0x83e70b13, IO_ADDRESS(DA8XX_RTC_BASE + 0x6c));
|
||||
__raw_writel(0x95a4f1e0, IO_ADDRESS(DA8XX_RTC_BASE + 0x70));
|
||||
|
||||
return platform_device_register(&da8xx_rtc_device);
|
||||
}
|
||||
|
||||
static struct resource da8xx_cpuidle_resources[] = {
|
||||
{
|
||||
.start = DA8XX_DDR2_CTL_BASE,
|
||||
.end = DA8XX_DDR2_CTL_BASE + SZ_32K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
};
|
||||
|
||||
/* DA8XX devices support DDR2 power down */
|
||||
static struct davinci_cpuidle_config da8xx_cpuidle_pdata = {
|
||||
.ddr2_pdown = 1,
|
||||
};
|
||||
|
||||
|
||||
static struct platform_device da8xx_cpuidle_device = {
|
||||
.name = "cpuidle-davinci",
|
||||
.num_resources = ARRAY_SIZE(da8xx_cpuidle_resources),
|
||||
.resource = da8xx_cpuidle_resources,
|
||||
.dev = {
|
||||
.platform_data = &da8xx_cpuidle_pdata,
|
||||
},
|
||||
};
|
||||
|
||||
int __init da8xx_register_cpuidle(void)
|
||||
{
|
||||
return platform_device_register(&da8xx_cpuidle_device);
|
||||
}
|
||||
|
||||
|
|
|
@ -9,15 +9,11 @@
|
|||
* (at your option) any later version.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/irqs.h>
|
||||
|
@ -177,7 +173,7 @@ void __init davinci_setup_mmc(int module, struct davinci_mmc_config *config)
|
|||
mmcsd1_resources[0].start = DM365_MMCSD1_BASE;
|
||||
mmcsd1_resources[0].end = DM365_MMCSD1_BASE +
|
||||
SZ_4K - 1;
|
||||
mmcsd0_resources[2].start = IRQ_DM365_SDIOINT1;
|
||||
mmcsd1_resources[2].start = IRQ_DM365_SDIOINT1;
|
||||
} else
|
||||
break;
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/serial_8250.h>
|
||||
|
@ -21,7 +20,6 @@
|
|||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/dm355.h>
|
||||
#include <mach/clock.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/edma.h>
|
||||
#include <mach/psc.h>
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
* 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/clk.h>
|
||||
#include <linux/serial_8250.h>
|
||||
|
@ -23,7 +22,6 @@
|
|||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/dm365.h>
|
||||
#include <mach/clock.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/edma.h>
|
||||
#include <mach/psc.h>
|
||||
|
@ -32,6 +30,8 @@
|
|||
#include <mach/time.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/asp.h>
|
||||
#include <mach/keyscan.h>
|
||||
|
||||
#include "clock.h"
|
||||
#include "mux.h"
|
||||
|
@ -369,7 +369,7 @@ static struct clk timer3_clk = {
|
|||
|
||||
static struct clk usb_clk = {
|
||||
.name = "usb",
|
||||
.parent = &pll2_sysclk1,
|
||||
.parent = &pll1_aux_clk,
|
||||
.lpsc = DAVINCI_LPSC_USB,
|
||||
};
|
||||
|
||||
|
@ -456,7 +456,7 @@ static struct davinci_clk dm365_clks[] = {
|
|||
CLK(NULL, "usb", &usb_clk),
|
||||
CLK("davinci_emac.1", NULL, &emac_clk),
|
||||
CLK("voice_codec", NULL, &voicecodec_clk),
|
||||
CLK("soc-audio.0", NULL, &asp0_clk),
|
||||
CLK("davinci-asp.0", NULL, &asp0_clk),
|
||||
CLK(NULL, "rto", &rto_clk),
|
||||
CLK(NULL, "mjcp", &mjcp_clk),
|
||||
CLK(NULL, NULL, NULL),
|
||||
|
@ -531,7 +531,7 @@ MUX_CFG(DM365, EMAC_CRS, 3, 2, 1, 1, false)
|
|||
MUX_CFG(DM365, EMAC_MDIO, 3, 1, 1, 1, false)
|
||||
MUX_CFG(DM365, EMAC_MDCLK, 3, 0, 1, 1, false)
|
||||
|
||||
MUX_CFG(DM365, KEYPAD, 2, 0, 0x3f, 0x3f, false)
|
||||
MUX_CFG(DM365, KEYSCAN, 2, 0, 0x3f, 0x3f, false)
|
||||
|
||||
MUX_CFG(DM365, PWM0, 1, 0, 3, 2, false)
|
||||
MUX_CFG(DM365, PWM0_G23, 3, 26, 3, 3, false)
|
||||
|
@ -603,6 +603,9 @@ INT_CFG(DM365, INT_IMX1_ENABLE, 24, 1, 1, false)
|
|||
INT_CFG(DM365, INT_IMX1_DISABLE, 24, 1, 0, false)
|
||||
INT_CFG(DM365, INT_NSF_ENABLE, 25, 1, 1, false)
|
||||
INT_CFG(DM365, INT_NSF_DISABLE, 25, 1, 0, false)
|
||||
|
||||
EVT_CFG(DM365, EVT2_ASP_TX, 0, 1, 0, false)
|
||||
EVT_CFG(DM365, EVT3_ASP_RX, 1, 1, 0, false)
|
||||
#endif
|
||||
};
|
||||
|
||||
|
@ -696,6 +699,7 @@ static u8 dm365_default_priorities[DAVINCI_N_AINTC_IRQ] = {
|
|||
[IRQ_I2C] = 3,
|
||||
[IRQ_UARTINT0] = 3,
|
||||
[IRQ_UARTINT1] = 3,
|
||||
[IRQ_DM365_RTCINT] = 3,
|
||||
[IRQ_DM365_SPIINT0_0] = 3,
|
||||
[IRQ_DM365_SPIINT3_0] = 3,
|
||||
[IRQ_DM365_GPIO0] = 3,
|
||||
|
@ -806,6 +810,50 @@ static struct platform_device dm365_edma_device = {
|
|||
.resource = edma_resources,
|
||||
};
|
||||
|
||||
static struct resource dm365_asp_resources[] = {
|
||||
{
|
||||
.start = DAVINCI_DM365_ASP0_BASE,
|
||||
.end = DAVINCI_DM365_ASP0_BASE + SZ_8K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = DAVINCI_DMA_ASP0_TX,
|
||||
.end = DAVINCI_DMA_ASP0_TX,
|
||||
.flags = IORESOURCE_DMA,
|
||||
},
|
||||
{
|
||||
.start = DAVINCI_DMA_ASP0_RX,
|
||||
.end = DAVINCI_DMA_ASP0_RX,
|
||||
.flags = IORESOURCE_DMA,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device dm365_asp_device = {
|
||||
.name = "davinci-asp",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(dm365_asp_resources),
|
||||
.resource = dm365_asp_resources,
|
||||
};
|
||||
|
||||
static struct resource dm365_rtc_resources[] = {
|
||||
{
|
||||
.start = DM365_RTC_BASE,
|
||||
.end = DM365_RTC_BASE + SZ_1K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = IRQ_DM365_RTCINT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device dm365_rtc_device = {
|
||||
.name = "rtc_davinci",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(dm365_rtc_resources),
|
||||
.resource = dm365_rtc_resources,
|
||||
};
|
||||
|
||||
static struct map_desc dm365_io_desc[] = {
|
||||
{
|
||||
.virtual = IO_VIRT,
|
||||
|
@ -822,6 +870,28 @@ static struct map_desc dm365_io_desc[] = {
|
|||
},
|
||||
};
|
||||
|
||||
static struct resource dm365_ks_resources[] = {
|
||||
{
|
||||
/* registers */
|
||||
.start = DM365_KEYSCAN_BASE,
|
||||
.end = DM365_KEYSCAN_BASE + SZ_1K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
/* interrupt */
|
||||
.start = IRQ_DM365_KEYINT,
|
||||
.end = IRQ_DM365_KEYINT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static struct platform_device dm365_ks_device = {
|
||||
.name = "davinci_keyscan",
|
||||
.id = 0,
|
||||
.num_resources = ARRAY_SIZE(dm365_ks_resources),
|
||||
.resource = dm365_ks_resources,
|
||||
};
|
||||
|
||||
/* Contents of JTAG ID register used to identify exact cpu type */
|
||||
static struct davinci_id dm365_ids[] = {
|
||||
{
|
||||
|
@ -907,6 +977,33 @@ static struct davinci_soc_info davinci_soc_info_dm365 = {
|
|||
.sram_len = SZ_32K,
|
||||
};
|
||||
|
||||
void __init dm365_init_asp(struct snd_platform_data *pdata)
|
||||
{
|
||||
davinci_cfg_reg(DM365_MCBSP0_BDX);
|
||||
davinci_cfg_reg(DM365_MCBSP0_X);
|
||||
davinci_cfg_reg(DM365_MCBSP0_BFSX);
|
||||
davinci_cfg_reg(DM365_MCBSP0_BDR);
|
||||
davinci_cfg_reg(DM365_MCBSP0_R);
|
||||
davinci_cfg_reg(DM365_MCBSP0_BFSR);
|
||||
davinci_cfg_reg(DM365_EVT2_ASP_TX);
|
||||
davinci_cfg_reg(DM365_EVT3_ASP_RX);
|
||||
dm365_asp_device.dev.platform_data = pdata;
|
||||
platform_device_register(&dm365_asp_device);
|
||||
}
|
||||
|
||||
void __init dm365_init_ks(struct davinci_ks_platform_data *pdata)
|
||||
{
|
||||
davinci_cfg_reg(DM365_KEYSCAN);
|
||||
dm365_ks_device.dev.platform_data = pdata;
|
||||
platform_device_register(&dm365_ks_device);
|
||||
}
|
||||
|
||||
void __init dm365_init_rtc(void)
|
||||
{
|
||||
davinci_cfg_reg(DM365_INT_PRTCSS);
|
||||
platform_device_register(&dm365_rtc_device);
|
||||
}
|
||||
|
||||
void __init dm365_init(void)
|
||||
{
|
||||
davinci_common_init(&davinci_soc_info_dm365);
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/serial_8250.h>
|
||||
|
@ -18,7 +17,6 @@
|
|||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/dm644x.h>
|
||||
#include <mach/clock.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/edma.h>
|
||||
#include <mach/irqs.h>
|
||||
|
@ -370,6 +368,11 @@ MUX_CFG(DM644X, ATAEN_DISABLE, 0, 17, 1, 0, true)
|
|||
MUX_CFG(DM644X, HPIEN_DISABLE, 0, 29, 1, 0, true)
|
||||
|
||||
MUX_CFG(DM644X, AEAW, 0, 0, 31, 31, true)
|
||||
MUX_CFG(DM644X, AEAW0, 0, 0, 1, 0, true)
|
||||
MUX_CFG(DM644X, AEAW1, 0, 1, 1, 0, true)
|
||||
MUX_CFG(DM644X, AEAW2, 0, 2, 1, 0, true)
|
||||
MUX_CFG(DM644X, AEAW3, 0, 3, 1, 0, true)
|
||||
MUX_CFG(DM644X, AEAW4, 0, 4, 1, 0, true)
|
||||
|
||||
MUX_CFG(DM644X, MSTK, 1, 9, 1, 0, false)
|
||||
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
* is licensed "as is" without any warranty of any kind, whether express
|
||||
* or implied.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/serial_8250.h>
|
||||
|
@ -18,7 +17,6 @@
|
|||
#include <asm/mach/map.h>
|
||||
|
||||
#include <mach/dm646x.h>
|
||||
#include <mach/clock.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/edma.h>
|
||||
#include <mach/irqs.h>
|
||||
|
@ -789,7 +787,14 @@ static struct davinci_id dm646x_ids[] = {
|
|||
.part_no = 0xb770,
|
||||
.manufacturer = 0x017,
|
||||
.cpu_id = DAVINCI_CPU_ID_DM6467,
|
||||
.name = "dm6467",
|
||||
.name = "dm6467_rev1.x",
|
||||
},
|
||||
{
|
||||
.variant = 0x1,
|
||||
.part_no = 0xb770,
|
||||
.manufacturer = 0x017,
|
||||
.cpu_id = DAVINCI_CPU_ID_DM6467,
|
||||
.name = "dm6467_rev3.x",
|
||||
},
|
||||
};
|
||||
|
||||
|
|
|
@ -18,22 +18,13 @@
|
|||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/sched.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/compiler.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/memory.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/edma.h>
|
||||
#include <mach/mux.h>
|
||||
|
||||
|
||||
/* Offsets matching "struct edmacc_param" */
|
||||
#define PARM_OPT 0x00
|
||||
|
@ -509,43 +500,59 @@ static irqreturn_t dma_tc1err_handler(int irq, void *data)
|
|||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static int reserve_contiguous_params(int ctlr, unsigned int id,
|
||||
unsigned int num_params,
|
||||
unsigned int start_param)
|
||||
static int reserve_contiguous_slots(int ctlr, unsigned int id,
|
||||
unsigned int num_slots,
|
||||
unsigned int start_slot)
|
||||
{
|
||||
int i, j;
|
||||
unsigned int count = num_params;
|
||||
unsigned int count = num_slots;
|
||||
int stop_slot = start_slot;
|
||||
DECLARE_BITMAP(tmp_inuse, EDMA_MAX_PARAMENTRY);
|
||||
|
||||
for (i = start_param; i < edma_info[ctlr]->num_slots; ++i) {
|
||||
for (i = start_slot; i < edma_info[ctlr]->num_slots; ++i) {
|
||||
j = EDMA_CHAN_SLOT(i);
|
||||
if (!test_and_set_bit(j, edma_info[ctlr]->edma_inuse))
|
||||
if (!test_and_set_bit(j, edma_info[ctlr]->edma_inuse)) {
|
||||
/* Record our current beginning slot */
|
||||
if (count == num_slots)
|
||||
stop_slot = i;
|
||||
|
||||
count--;
|
||||
set_bit(j, tmp_inuse);
|
||||
|
||||
if (count == 0)
|
||||
break;
|
||||
else if (id == EDMA_CONT_PARAMS_FIXED_EXACT)
|
||||
break;
|
||||
else
|
||||
count = num_params;
|
||||
} else {
|
||||
clear_bit(j, tmp_inuse);
|
||||
|
||||
if (id == EDMA_CONT_PARAMS_FIXED_EXACT) {
|
||||
stop_slot = i;
|
||||
break;
|
||||
} else
|
||||
count = num_slots;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* We have to clear any bits that we set
|
||||
* if we run out parameter RAMs, i.e we do find a set
|
||||
* of contiguous parameter RAMs but do not find the exact number
|
||||
* requested as we may reach the total number of parameter RAMs
|
||||
* if we run out parameter RAM slots, i.e we do find a set
|
||||
* of contiguous parameter RAM slots but do not find the exact number
|
||||
* requested as we may reach the total number of parameter RAM slots
|
||||
*/
|
||||
if (count) {
|
||||
for (j = i - num_params + count + 1; j <= i ; ++j)
|
||||
if (i == edma_info[ctlr]->num_slots)
|
||||
stop_slot = i;
|
||||
|
||||
for (j = start_slot; j < stop_slot; j++)
|
||||
if (test_bit(j, tmp_inuse))
|
||||
clear_bit(j, edma_info[ctlr]->edma_inuse);
|
||||
|
||||
if (count)
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
for (j = i - num_params + 1; j <= i; ++j)
|
||||
for (j = i - num_slots + 1; j <= i; ++j)
|
||||
memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(j),
|
||||
&dummy_paramset, PARM_SIZE);
|
||||
|
||||
return EDMA_CTLR_CHAN(ctlr, i - num_params + 1);
|
||||
return EDMA_CTLR_CHAN(ctlr, i - num_slots + 1);
|
||||
}
|
||||
|
||||
/*-----------------------------------------------------------------------*/
|
||||
|
@ -743,26 +750,27 @@ EXPORT_SYMBOL(edma_free_slot);
|
|||
/**
|
||||
* edma_alloc_cont_slots- alloc contiguous parameter RAM slots
|
||||
* The API will return the starting point of a set of
|
||||
* contiguous PARAM's that have been requested
|
||||
* contiguous parameter RAM slots that have been requested
|
||||
*
|
||||
* @id: can only be EDMA_CONT_PARAMS_ANY or EDMA_CONT_PARAMS_FIXED_EXACT
|
||||
* or EDMA_CONT_PARAMS_FIXED_NOT_EXACT
|
||||
* @count: number of contiguous Paramter RAM's
|
||||
* @param - the start value of Parameter RAM that should be passed if id
|
||||
* @count: number of contiguous Paramter RAM slots
|
||||
* @slot - the start value of Parameter RAM slot that should be passed if id
|
||||
* is EDMA_CONT_PARAMS_FIXED_EXACT or EDMA_CONT_PARAMS_FIXED_NOT_EXACT
|
||||
*
|
||||
* If id is EDMA_CONT_PARAMS_ANY then the API starts looking for a set of
|
||||
* contiguous Parameter RAMs from parameter RAM 64 in the case of DaVinci SOCs
|
||||
* and 32 in the case of Primus
|
||||
* contiguous Parameter RAM slots from parameter RAM 64 in the case of
|
||||
* DaVinci SOCs and 32 in the case of DA8xx SOCs.
|
||||
*
|
||||
* If id is EDMA_CONT_PARAMS_FIXED_EXACT then the API starts looking for a
|
||||
* set of contiguous parameter RAMs from the "param" that is passed as an
|
||||
* set of contiguous parameter RAM slots from the "slot" that is passed as an
|
||||
* argument to the API.
|
||||
*
|
||||
* If id is EDMA_CONT_PARAMS_FIXED_NOT_EXACT then the API initially tries
|
||||
* starts looking for a set of contiguous parameter RAMs from the "param"
|
||||
* starts looking for a set of contiguous parameter RAMs from the "slot"
|
||||
* that is passed as an argument to the API. On failure the API will try to
|
||||
* find a set of contiguous Parameter RAMs in the remaining Parameter RAMs
|
||||
* find a set of contiguous Parameter RAM slots from the remaining Parameter
|
||||
* RAM slots
|
||||
*/
|
||||
int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count)
|
||||
{
|
||||
|
@ -771,12 +779,13 @@ int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count)
|
|||
* the number of channels and lesser than the total number
|
||||
* of slots
|
||||
*/
|
||||
if (slot < edma_info[ctlr]->num_channels ||
|
||||
slot >= edma_info[ctlr]->num_slots)
|
||||
if ((id != EDMA_CONT_PARAMS_ANY) &&
|
||||
(slot < edma_info[ctlr]->num_channels ||
|
||||
slot >= edma_info[ctlr]->num_slots))
|
||||
return -EINVAL;
|
||||
|
||||
/*
|
||||
* The number of parameter RAMs requested cannot be less than 1
|
||||
* The number of parameter RAM slots requested cannot be less than 1
|
||||
* and cannot be more than the number of slots minus the number of
|
||||
* channels
|
||||
*/
|
||||
|
@ -786,11 +795,11 @@ int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count)
|
|||
|
||||
switch (id) {
|
||||
case EDMA_CONT_PARAMS_ANY:
|
||||
return reserve_contiguous_params(ctlr, id, count,
|
||||
return reserve_contiguous_slots(ctlr, id, count,
|
||||
edma_info[ctlr]->num_channels);
|
||||
case EDMA_CONT_PARAMS_FIXED_EXACT:
|
||||
case EDMA_CONT_PARAMS_FIXED_NOT_EXACT:
|
||||
return reserve_contiguous_params(ctlr, id, count, slot);
|
||||
return reserve_contiguous_slots(ctlr, id, count, slot);
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -799,21 +808,21 @@ int edma_alloc_cont_slots(unsigned ctlr, unsigned int id, int slot, int count)
|
|||
EXPORT_SYMBOL(edma_alloc_cont_slots);
|
||||
|
||||
/**
|
||||
* edma_free_cont_slots - deallocate DMA parameter RAMs
|
||||
* @slot: first parameter RAM of a set of parameter RAMs to be freed
|
||||
* @count: the number of contiguous parameter RAMs to be freed
|
||||
* edma_free_cont_slots - deallocate DMA parameter RAM slots
|
||||
* @slot: first parameter RAM of a set of parameter RAM slots to be freed
|
||||
* @count: the number of contiguous parameter RAM slots to be freed
|
||||
*
|
||||
* This deallocates the parameter RAM slots allocated by
|
||||
* edma_alloc_cont_slots.
|
||||
* Callers/applications need to keep track of sets of contiguous
|
||||
* parameter RAMs that have been allocated using the edma_alloc_cont_slots
|
||||
* parameter RAM slots that have been allocated using the edma_alloc_cont_slots
|
||||
* API.
|
||||
* Callers are responsible for ensuring the slots are inactive, and will
|
||||
* not be activated.
|
||||
*/
|
||||
int edma_free_cont_slots(unsigned slot, int count)
|
||||
{
|
||||
unsigned ctlr;
|
||||
unsigned ctlr, slot_to_free;
|
||||
int i;
|
||||
|
||||
ctlr = EDMA_CTLR(slot);
|
||||
|
@ -826,11 +835,11 @@ int edma_free_cont_slots(unsigned slot, int count)
|
|||
|
||||
for (i = slot; i < slot + count; ++i) {
|
||||
ctlr = EDMA_CTLR(i);
|
||||
slot = EDMA_CHAN_SLOT(i);
|
||||
slot_to_free = EDMA_CHAN_SLOT(i);
|
||||
|
||||
memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot),
|
||||
memcpy_toio(edmacc_regs_base[ctlr] + PARM_OFFSET(slot_to_free),
|
||||
&dummy_paramset, PARM_SIZE);
|
||||
clear_bit(slot, edma_info[ctlr]->edma_inuse);
|
||||
clear_bit(slot_to_free, edma_info[ctlr]->edma_inuse);
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -12,23 +12,14 @@
|
|||
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/list.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/common.h>
|
||||
#include <mach/gpio.h>
|
||||
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
|
||||
static DEFINE_SPINLOCK(gpio_lock);
|
||||
|
||||
struct davinci_gpio {
|
||||
|
|
|
@ -11,6 +11,9 @@
|
|||
#define DAVINCI_ASP0_BASE 0x01E02000
|
||||
#define DAVINCI_ASP1_BASE 0x01E04000
|
||||
|
||||
/* Bases of dm365 register banks */
|
||||
#define DAVINCI_DM365_ASP0_BASE 0x01D02000
|
||||
|
||||
/* Bases of dm646x register banks */
|
||||
#define DAVINCI_DM646X_MCASP0_REG_BASE 0x01D01000
|
||||
#define DAVINCI_DM646X_MCASP1_REG_BASE 0x01D01800
|
||||
|
|
|
@ -20,12 +20,6 @@ extern void davinci_irq_init(void);
|
|||
extern void __iomem *davinci_intc_base;
|
||||
extern int davinci_intc_type;
|
||||
|
||||
/* parameters describe VBUS sourcing for host mode */
|
||||
extern void setup_usb(unsigned mA, unsigned potpgt_msec);
|
||||
|
||||
/* parameters describe VBUS sourcing for host mode */
|
||||
extern void setup_usb(unsigned mA, unsigned potpgt_msec);
|
||||
|
||||
struct davinci_timer_instance {
|
||||
void __iomem *base;
|
||||
u32 bottom_irq;
|
||||
|
|
26
arch/arm/mach-davinci/include/mach/cpufreq.h
Normal file
26
arch/arm/mach-davinci/include/mach/cpufreq.h
Normal file
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* TI DaVinci CPUFreq platform support.
|
||||
*
|
||||
* Copyright (C) 2009 Texas Instruments, Inc. http://www.ti.com/
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License as
|
||||
* published by the Free Software Foundation version 2.
|
||||
*
|
||||
* This program is distributed "as is" WITHOUT ANY WARRANTY of any
|
||||
* kind, whether express or implied; without even the implied warranty
|
||||
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*/
|
||||
#ifndef _MACH_DAVINCI_CPUFREQ_H
|
||||
#define _MACH_DAVINCI_CPUFREQ_H
|
||||
|
||||
#include <linux/cpufreq.h>
|
||||
|
||||
struct davinci_cpufreq_config {
|
||||
struct cpufreq_frequency_table *freq_table;
|
||||
int (*set_voltage) (unsigned int index);
|
||||
int (*init) (void);
|
||||
};
|
||||
|
||||
#endif
|
17
arch/arm/mach-davinci/include/mach/cpuidle.h
Normal file
17
arch/arm/mach-davinci/include/mach/cpuidle.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
/*
|
||||
* TI DaVinci cpuidle platform support
|
||||
*
|
||||
* 2009 (C) Texas Instruments, Inc. http://www.ti.com/
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public License
|
||||
* version 2. This program is licensed "as is" without any warranty of any
|
||||
* kind, whether express or implied.
|
||||
*/
|
||||
#ifndef _MACH_DAVINCI_CPUIDLE_H
|
||||
#define _MACH_DAVINCI_CPUIDLE_H
|
||||
|
||||
struct davinci_cpuidle_config {
|
||||
u32 ddr2_pdown;
|
||||
};
|
||||
|
||||
#endif
|
|
@ -11,12 +11,17 @@
|
|||
#ifndef __ASM_ARCH_DAVINCI_DA8XX_H
|
||||
#define __ASM_ARCH_DAVINCI_DA8XX_H
|
||||
|
||||
#include <video/da8xx-fb.h>
|
||||
|
||||
#include <mach/serial.h>
|
||||
#include <mach/edma.h>
|
||||
#include <mach/i2c.h>
|
||||
#include <mach/emac.h>
|
||||
#include <mach/asp.h>
|
||||
#include <mach/mmc.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
extern void __iomem *da8xx_syscfg_base;
|
||||
|
||||
/*
|
||||
* The cp_intc interrupt controller for the da8xx isn't in the same
|
||||
|
@ -29,11 +34,15 @@
|
|||
#define DA8XX_CP_INTC_SIZE SZ_8K
|
||||
#define DA8XX_CP_INTC_VIRT (IO_VIRT - DA8XX_CP_INTC_SIZE - SZ_4K)
|
||||
|
||||
#define DA8XX_BOOT_CFG_BASE (IO_PHYS + 0x14000)
|
||||
#define DA8XX_SYSCFG_BASE (IO_PHYS + 0x14000)
|
||||
#define DA8XX_SYSCFG_VIRT(x) (da8xx_syscfg_base + (x))
|
||||
#define DA8XX_JTAG_ID_REG 0x18
|
||||
#define DA8XX_CFGCHIP0_REG 0x17c
|
||||
#define DA8XX_CFGCHIP2_REG 0x184
|
||||
#define DA8XX_CFGCHIP3_REG 0x188
|
||||
|
||||
#define DA8XX_PSC0_BASE 0x01c10000
|
||||
#define DA8XX_PLL0_BASE 0x01c11000
|
||||
#define DA8XX_JTAG_ID_REG 0x01c14018
|
||||
#define DA8XX_TIMER64P0_BASE 0x01c20000
|
||||
#define DA8XX_TIMER64P1_BASE 0x01c21000
|
||||
#define DA8XX_GPIO_BASE 0x01e26000
|
||||
|
@ -43,6 +52,7 @@
|
|||
#define DA8XX_AEMIF_CS2_BASE 0x60000000
|
||||
#define DA8XX_AEMIF_CS3_BASE 0x62000000
|
||||
#define DA8XX_AEMIF_CTL_BASE 0x68000000
|
||||
#define DA8XX_DDR2_CTL_BASE 0xb0000000
|
||||
|
||||
#define PINMUX0 0x00
|
||||
#define PINMUX1 0x04
|
||||
|
@ -71,13 +81,20 @@ void __init da850_init(void);
|
|||
int da8xx_register_edma(void);
|
||||
int da8xx_register_i2c(int instance, struct davinci_i2c_platform_data *pdata);
|
||||
int da8xx_register_watchdog(void);
|
||||
int da8xx_register_usb20(unsigned mA, unsigned potpgt);
|
||||
int da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata);
|
||||
int da8xx_register_emac(void);
|
||||
int da8xx_register_lcdc(void);
|
||||
int da8xx_register_lcdc(struct da8xx_lcdc_platform_data *pdata);
|
||||
int da8xx_register_mmcsd0(struct davinci_mmc_config *config);
|
||||
void __init da8xx_init_mcasp(int id, struct snd_platform_data *pdata);
|
||||
void __init da8xx_register_mcasp(int id, struct snd_platform_data *pdata);
|
||||
int da8xx_register_rtc(void);
|
||||
int da850_register_cpufreq(void);
|
||||
int da8xx_register_cpuidle(void);
|
||||
|
||||
extern struct platform_device da8xx_serial_device;
|
||||
extern struct emac_platform_data da8xx_emac_pdata;
|
||||
extern struct da8xx_lcdc_platform_data sharp_lcd035q3dg01_pdata;
|
||||
extern struct da8xx_lcdc_platform_data sharp_lk043t1dg01_pdata;
|
||||
|
||||
extern const short da830_emif25_pins[];
|
||||
extern const short da830_spi0_pins[];
|
||||
|
@ -110,6 +127,7 @@ extern const short da850_uart2_pins[];
|
|||
extern const short da850_i2c0_pins[];
|
||||
extern const short da850_i2c1_pins[];
|
||||
extern const short da850_cpgmac_pins[];
|
||||
extern const short da850_rmii_pins[];
|
||||
extern const short da850_mcasp_pins[];
|
||||
extern const short da850_lcdcntl_pins[];
|
||||
extern const short da850_mmcsd0_pins[];
|
||||
|
|
|
@ -16,6 +16,8 @@
|
|||
#include <linux/platform_device.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/emac.h>
|
||||
#include <mach/asp.h>
|
||||
#include <mach/keyscan.h>
|
||||
|
||||
#define DM365_EMAC_BASE (0x01D07000)
|
||||
#define DM365_EMAC_CNTRL_OFFSET (0x0000)
|
||||
|
@ -24,6 +26,14 @@
|
|||
#define DM365_EMAC_MDIO_OFFSET (0x4000)
|
||||
#define DM365_EMAC_CNTRL_RAM_SIZE (0x2000)
|
||||
|
||||
/* Base of key scan register bank */
|
||||
#define DM365_KEYSCAN_BASE (0x01C69400)
|
||||
|
||||
#define DM365_RTC_BASE (0x01C69000)
|
||||
|
||||
void __init dm365_init(void);
|
||||
void __init dm365_init_asp(struct snd_platform_data *pdata);
|
||||
void __init dm365_init_ks(struct davinci_ks_platform_data *pdata);
|
||||
void __init dm365_init_rtc(void);
|
||||
|
||||
#endif /* __ASM_ARCH_DM365_H */
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#ifndef __ASM_ARCH_DM644X_H
|
||||
#define __ASM_ARCH_DM644X_H
|
||||
|
||||
#include <linux/platform_device.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/emac.h>
|
||||
#include <mach/asp.h>
|
||||
|
|
|
@ -217,6 +217,7 @@
|
|||
#define IRQ_DM365_SDIOINT0 23
|
||||
#define IRQ_DM365_MMCINT1 27
|
||||
#define IRQ_DM365_PWMINT3 28
|
||||
#define IRQ_DM365_RTCINT 29
|
||||
#define IRQ_DM365_SDIOINT1 31
|
||||
#define IRQ_DM365_SPIINT0_0 42
|
||||
#define IRQ_DM365_SPIINT3_0 43
|
||||
|
|
|
@ -40,6 +40,11 @@ enum davinci_dm644x_index {
|
|||
|
||||
/* AEAW functions */
|
||||
DM644X_AEAW,
|
||||
DM644X_AEAW0,
|
||||
DM644X_AEAW1,
|
||||
DM644X_AEAW2,
|
||||
DM644X_AEAW3,
|
||||
DM644X_AEAW4,
|
||||
|
||||
/* Memory Stick */
|
||||
DM644X_MSTK,
|
||||
|
@ -237,8 +242,8 @@ enum davinci_dm365_index {
|
|||
DM365_EMAC_MDIO,
|
||||
DM365_EMAC_MDCLK,
|
||||
|
||||
/* Keypad */
|
||||
DM365_KEYPAD,
|
||||
/* Key Scan */
|
||||
DM365_KEYSCAN,
|
||||
|
||||
/* PWM */
|
||||
DM365_PWM0,
|
||||
|
@ -774,6 +779,14 @@ enum davinci_da850_index {
|
|||
DA850_MII_RXD_0,
|
||||
DA850_MDIO_CLK,
|
||||
DA850_MDIO_D,
|
||||
DA850_RMII_TXD_0,
|
||||
DA850_RMII_TXD_1,
|
||||
DA850_RMII_TXEN,
|
||||
DA850_RMII_CRS_DV,
|
||||
DA850_RMII_RXD_0,
|
||||
DA850_RMII_RXD_1,
|
||||
DA850_RMII_RXER,
|
||||
DA850_RMII_MHZ_50_CLK,
|
||||
|
||||
/* McASP function */
|
||||
DA850_ACLKR,
|
||||
|
@ -881,8 +894,9 @@ enum davinci_da850_index {
|
|||
DA850_NEMA_CS_2,
|
||||
|
||||
/* GPIO function */
|
||||
DA850_GPIO2_6,
|
||||
DA850_GPIO2_8,
|
||||
DA850_GPIO2_15,
|
||||
DA850_GPIO8_10,
|
||||
DA850_GPIO4_0,
|
||||
DA850_GPIO4_1,
|
||||
};
|
||||
|
|
|
@ -11,9 +11,6 @@
|
|||
#ifndef __ASM_ARCH_SYSTEM_H
|
||||
#define __ASM_ARCH_SYSTEM_H
|
||||
|
||||
#include <linux/io.h>
|
||||
#include <mach/hardware.h>
|
||||
|
||||
extern void davinci_watchdog_reset(void);
|
||||
|
||||
static inline void arch_idle(void)
|
||||
|
|
59
arch/arm/mach-davinci/include/mach/usb.h
Normal file
59
arch/arm/mach-davinci/include/mach/usb.h
Normal file
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
* USB related definitions
|
||||
*
|
||||
* Copyright (C) 2009 MontaVista Software, Inc. <source@mvista.com>
|
||||
*
|
||||
* This file is licensed under the terms of the GNU General Public License
|
||||
* version 2. This program is licensed "as is" without any warranty of any
|
||||
* kind, whether express or implied.
|
||||
*/
|
||||
|
||||
#ifndef __ASM_ARCH_USB_H
|
||||
#define __ASM_ARCH_USB_H
|
||||
|
||||
/* DA8xx CFGCHIP2 (USB 2.0 PHY Control) register bits */
|
||||
#define CFGCHIP2_PHYCLKGD (1 << 17)
|
||||
#define CFGCHIP2_VBUSSENSE (1 << 16)
|
||||
#define CFGCHIP2_RESET (1 << 15)
|
||||
#define CFGCHIP2_OTGMODE (3 << 13)
|
||||
#define CFGCHIP2_NO_OVERRIDE (0 << 13)
|
||||
#define CFGCHIP2_FORCE_HOST (1 << 13)
|
||||
#define CFGCHIP2_FORCE_DEVICE (2 << 13)
|
||||
#define CFGCHIP2_FORCE_HOST_VBUS_LOW (3 << 13)
|
||||
#define CFGCHIP2_USB1PHYCLKMUX (1 << 12)
|
||||
#define CFGCHIP2_USB2PHYCLKMUX (1 << 11)
|
||||
#define CFGCHIP2_PHYPWRDN (1 << 10)
|
||||
#define CFGCHIP2_OTGPWRDN (1 << 9)
|
||||
#define CFGCHIP2_DATPOL (1 << 8)
|
||||
#define CFGCHIP2_USB1SUSPENDM (1 << 7)
|
||||
#define CFGCHIP2_PHY_PLLON (1 << 6) /* override PLL suspend */
|
||||
#define CFGCHIP2_SESENDEN (1 << 5) /* Vsess_end comparator */
|
||||
#define CFGCHIP2_VBDTCTEN (1 << 4) /* Vbus comparator */
|
||||
#define CFGCHIP2_REFFREQ (0xf << 0)
|
||||
#define CFGCHIP2_REFFREQ_12MHZ (1 << 0)
|
||||
#define CFGCHIP2_REFFREQ_24MHZ (2 << 0)
|
||||
#define CFGCHIP2_REFFREQ_48MHZ (3 << 0)
|
||||
|
||||
struct da8xx_ohci_root_hub;
|
||||
|
||||
typedef void (*da8xx_ocic_handler_t)(struct da8xx_ohci_root_hub *hub,
|
||||
unsigned port);
|
||||
|
||||
/* Passed as the platform data to the OHCI driver */
|
||||
struct da8xx_ohci_root_hub {
|
||||
/* Switch the port power on/off */
|
||||
int (*set_power)(unsigned port, int on);
|
||||
/* Read the port power status */
|
||||
int (*get_power)(unsigned port);
|
||||
/* Read the port over-current indicator */
|
||||
int (*get_oci)(unsigned port);
|
||||
/* Over-current indicator change notification (pass NULL to disable) */
|
||||
int (*ocic_notify)(da8xx_ocic_handler_t handler);
|
||||
|
||||
/* Time from power on to power good (in 2 ms units) */
|
||||
u8 potpgt;
|
||||
};
|
||||
|
||||
void davinci_setup_usb(unsigned mA, unsigned potpgt_ms);
|
||||
|
||||
#endif /* ifndef __ASM_ARCH_USB_H */
|
|
@ -19,7 +19,6 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/mux.h>
|
||||
#include <mach/common.h>
|
||||
|
||||
|
|
|
@ -19,14 +19,11 @@
|
|||
*
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/psc.h>
|
||||
#include <mach/mux.h>
|
||||
|
||||
/* PSC register offsets */
|
||||
#define EPCPR 0x070
|
||||
|
|
|
@ -28,14 +28,8 @@
|
|||
#include <linux/clk.h>
|
||||
#include <linux/io.h>
|
||||
|
||||
#include <asm/irq.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/serial.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/common.h>
|
||||
|
||||
#include "clock.h"
|
||||
|
||||
static inline unsigned int serial_read_reg(struct plat_serial8250_port *up,
|
||||
int offset)
|
||||
|
|
|
@ -9,15 +9,12 @@
|
|||
* (at your option) any later version.
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/genalloc.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/memory.h>
|
||||
#include <mach/sram.h>
|
||||
|
||||
|
||||
static struct gen_pool *sram_pool;
|
||||
|
||||
void *sram_alloc(size_t len, dma_addr_t *dma)
|
||||
|
|
|
@ -14,20 +14,14 @@
|
|||
#include <linux/interrupt.h>
|
||||
#include <linux/clocksource.h>
|
||||
#include <linux/clockchips.h>
|
||||
#include <linux/spinlock.h>
|
||||
#include <linux/io.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/err.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/platform_device.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/system.h>
|
||||
#include <asm/irq.h>
|
||||
#include <asm/mach/irq.h>
|
||||
#include <asm/mach/time.h>
|
||||
#include <asm/errno.h>
|
||||
#include <mach/io.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/time.h>
|
||||
#include "clock.h"
|
||||
|
|
|
@ -1,21 +1,21 @@
|
|||
/*
|
||||
* USB
|
||||
*/
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/dma-mapping.h>
|
||||
|
||||
#include <linux/usb/musb.h>
|
||||
#include <linux/usb/otg.h>
|
||||
|
||||
#include <mach/common.h>
|
||||
#include <mach/hardware.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <mach/cputype.h>
|
||||
#include <mach/usb.h>
|
||||
|
||||
#define DAVINCI_USB_OTG_BASE 0x01C64000
|
||||
#define DAVINCI_USB_OTG_BASE 0x01c64000
|
||||
|
||||
#define DA8XX_USB0_BASE 0x01e00000
|
||||
#define DA8XX_USB1_BASE 0x01e25000
|
||||
|
||||
#if defined(CONFIG_USB_MUSB_HDRC) || defined(CONFIG_USB_MUSB_HDRC_MODULE)
|
||||
static struct musb_hdrc_eps_bits musb_eps[] = {
|
||||
|
@ -85,10 +85,10 @@ static struct platform_device usb_dev = {
|
|||
.num_resources = ARRAY_SIZE(usb_resources),
|
||||
};
|
||||
|
||||
void __init setup_usb(unsigned mA, unsigned potpgt_msec)
|
||||
void __init davinci_setup_usb(unsigned mA, unsigned potpgt_ms)
|
||||
{
|
||||
usb_data.power = mA / 2;
|
||||
usb_data.potpgt = potpgt_msec / 2;
|
||||
usb_data.power = mA > 510 ? 255 : mA / 2;
|
||||
usb_data.potpgt = (potpgt_ms + 1) / 2;
|
||||
|
||||
if (cpu_is_davinci_dm646x()) {
|
||||
/* Override the defaults as DM6467 uses different IRQs. */
|
||||
|
@ -100,11 +100,77 @@ void __init setup_usb(unsigned mA, unsigned potpgt_msec)
|
|||
platform_device_register(&usb_dev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DA8XX
|
||||
static struct resource da8xx_usb20_resources[] = {
|
||||
{
|
||||
.start = DA8XX_USB0_BASE,
|
||||
.end = DA8XX_USB0_BASE + SZ_64K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
{
|
||||
.start = IRQ_DA8XX_USB_INT,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
int __init da8xx_register_usb20(unsigned mA, unsigned potpgt)
|
||||
{
|
||||
usb_data.clock = "usb20";
|
||||
usb_data.power = mA > 510 ? 255 : mA / 2;
|
||||
usb_data.potpgt = (potpgt + 1) / 2;
|
||||
|
||||
usb_dev.resource = da8xx_usb20_resources;
|
||||
usb_dev.num_resources = ARRAY_SIZE(da8xx_usb20_resources);
|
||||
|
||||
return platform_device_register(&usb_dev);
|
||||
}
|
||||
#endif /* CONFIG_DAVINCI_DA8XX */
|
||||
|
||||
#else
|
||||
|
||||
void __init setup_usb(unsigned mA, unsigned potpgt_msec)
|
||||
void __init davinci_setup_usb(unsigned mA, unsigned potpgt_ms)
|
||||
{
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DA8XX
|
||||
int __init da8xx_register_usb20(unsigned mA, unsigned potpgt)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_USB_MUSB_HDRC */
|
||||
|
||||
#ifdef CONFIG_ARCH_DAVINCI_DA8XX
|
||||
static struct resource da8xx_usb11_resources[] = {
|
||||
[0] = {
|
||||
.start = DA8XX_USB1_BASE,
|
||||
.end = DA8XX_USB1_BASE + SZ_4K - 1,
|
||||
.flags = IORESOURCE_MEM,
|
||||
},
|
||||
[1] = {
|
||||
.start = IRQ_DA8XX_IRQN,
|
||||
.end = IRQ_DA8XX_IRQN,
|
||||
.flags = IORESOURCE_IRQ,
|
||||
},
|
||||
};
|
||||
|
||||
static u64 da8xx_usb11_dma_mask = DMA_BIT_MASK(32);
|
||||
|
||||
static struct platform_device da8xx_usb11_device = {
|
||||
.name = "ohci",
|
||||
.id = 0,
|
||||
.dev = {
|
||||
.dma_mask = &da8xx_usb11_dma_mask,
|
||||
.coherent_dma_mask = DMA_BIT_MASK(32),
|
||||
},
|
||||
.num_resources = ARRAY_SIZE(da8xx_usb11_resources),
|
||||
.resource = da8xx_usb11_resources,
|
||||
};
|
||||
|
||||
int __init da8xx_register_usb11(struct da8xx_ohci_root_hub *pdata)
|
||||
{
|
||||
da8xx_usb11_device.dev.platform_data = pdata;
|
||||
return platform_device_register(&da8xx_usb11_device);
|
||||
}
|
||||
#endif /* CONFIG_DAVINCI_DA8XX */
|
||||
|
|
Loading…
Reference in a new issue