Commit ea89be92 authored by Devin Kim's avatar Devin Kim Committed by Iliyan Malchev
Browse files

mako: initial bring up the mako hardware

support the initial mako hardware. enabled basic power, storage,
debug-uart.

Change-Id: Ie9f6d5ef1219cb0c3761bb69a3a8fcfdcbb86f19
parent 04f620de
# CONFIG_ARM_PATCH_PHYS_VIRT is not set
CONFIG_EXPERIMENTAL=y
CONFIG_LOCALVERSION="-perf"
CONFIG_SYSVIPC=y
CONFIG_TASKSTATS=y
CONFIG_TASK_DELAY_ACCT=y
CONFIG_TASK_XACCT=y
CONFIG_TASK_IO_ACCOUNTING=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_DEBUG=y
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_RESOURCE_COUNTERS=y
CONFIG_CGROUP_SCHED=y
CONFIG_RT_GROUP_SCHED=y
CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set
# CONFIG_IPC_NS is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
# CONFIG_NET_NS is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_RD_BZIP2=y
CONFIG_RD_LZMA=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_PANIC_TIMEOUT=5
CONFIG_KALLSYMS_ALL=y
CONFIG_ASHMEM=y
CONFIG_EMBEDDED=y
CONFIG_PROFILING=y
CONFIG_OPROFILE=y
CONFIG_KPROBES=y
CONFIG_MODULES=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
CONFIG_PARTITION_ADVANCED=y
CONFIG_EFI_PARTITION=y
CONFIG_ARCH_MSM=y
CONFIG_ARCH_MSM8960=y
CONFIG_ARCH_MSM8930=y
CONFIG_ARCH_APQ8064=y
CONFIG_MSM_KRAIT_TBB_ABORT_HANDLER=y
CONFIG_MACH_APQ8064_MTP=y
CONFIG_BOARD_HEADER_FILE="mach/lge/board_mako.h"
CONFIG_MACH_APQ8064_MAKO=y
# CONFIG_MSM_STACKED_MEMORY is not set
CONFIG_KERNEL_PMEM_EBI_REGION=y
# CONFIG_MSM_FIQ_SUPPORT is not set
# CONFIG_MSM_PROC_COMM is not set
CONFIG_MSM_SMD=y
CONFIG_MSM_SMD_PKG4=y
CONFIG_MSM_BAM_DMUX=y
CONFIG_MSM_DSPS=y
CONFIG_MSM_IPC_ROUTER=y
CONFIG_MSM_IPC_ROUTER_SMD_XPRT=y
# CONFIG_MSM_HW3D is not set
CONFIG_MSM_PIL_QDSP6V4=y
CONFIG_MSM_PIL_RIVA=y
CONFIG_MSM_PIL_TZAPPS=y
CONFIG_MSM_PIL_DSPS=y
CONFIG_MSM_PIL_VIDC=y
CONFIG_MSM_PIL_GSS=y
CONFIG_MSM_SUBSYSTEM_RESTART=y
CONFIG_MSM_MODEM_8960=y
CONFIG_MSM_LPASS_8960=y
CONFIG_MSM_WCNSS_SSR_8960=y
CONFIG_MSM_GSS_SSR_8064=y
CONFIG_MSM_TZ_LOG=y
CONFIG_MSM_RPM_LOG=y
CONFIG_MSM_RPM_STATS_LOG=y
CONFIG_MSM_BUS_SCALING=y
CONFIG_MSM_BUS_RPM_MULTI_TIER_ENABLED=y
CONFIG_MSM_WATCHDOG=y
CONFIG_MSM_DLOAD_MODE=y
CONFIG_MSM_QDSS=y
CONFIG_MSM_SLEEP_STATS=y
CONFIG_MSM_RTB=y
CONFIG_MSM_RTB_SEPARATE_CPUS=y
CONFIG_MSM_CACHE_ERP=y
CONFIG_MSM_L1_ERR_PANIC=y
CONFIG_MSM_L2_ERP_2BIT_PANIC=y
CONFIG_MSM_DCVS=y
CONFIG_MSM_CACHE_DUMP=y
CONFIG_MSM_CACHE_DUMP_ON_PANIC=y
CONFIG_MSM_HSIC_SYSMON=y
CONFIG_STRICT_MEMORY_RWX=y
CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_SMP=y
# CONFIG_SMP_ON_UP is not set
CONFIG_PREEMPT=y
CONFIG_AEABI=y
CONFIG_HIGHMEM=y
CONFIG_VMALLOC_RESERVE=0x19000000
CONFIG_COMPACTION=y
CONFIG_CC_STACKPROTECTOR=y
CONFIG_CP_ACCESS=y
CONFIG_CPU_FREQ=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
CONFIG_CPU_FREQ_GOV_USERSPACE=y
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
CONFIG_CPU_IDLE=y
CONFIG_VFP=y
CONFIG_NEON=y
# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
CONFIG_WAKELOCK=y
CONFIG_PM_RUNTIME=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_UNIX=y
CONFIG_XFRM_USER=y
CONFIG_XFRM_SUB_POLICY=y
CONFIG_XFRM_MIGRATE=y
CONFIG_XFRM_STATISTICS=y
CONFIG_NET_KEY=y
CONFIG_INET=y
CONFIG_IP_ADVANCED_ROUTER=y
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_IP_ROUTE_VERBOSE=y
CONFIG_IP_PNP=y
CONFIG_IP_PNP_DHCP=y
CONFIG_INET_AH=y
CONFIG_INET_ESP=y
CONFIG_INET_IPCOMP=y
# CONFIG_INET_LRO is not set
CONFIG_IPV6=y
CONFIG_IPV6_PRIVACY=y
CONFIG_IPV6_ROUTER_PREF=y
CONFIG_IPV6_ROUTE_INFO=y
CONFIG_IPV6_OPTIMISTIC_DAD=y
CONFIG_INET6_AH=y
CONFIG_INET6_ESP=y
CONFIG_INET6_IPCOMP=y
CONFIG_IPV6_MIP6=y
CONFIG_IPV6_MULTIPLE_TABLES=y
CONFIG_IPV6_SUBTREES=y
CONFIG_NETFILTER=y
CONFIG_NF_CONNTRACK=y
CONFIG_NF_CONNTRACK_EVENTS=y
CONFIG_NF_CT_PROTO_DCCP=y
CONFIG_NF_CT_PROTO_SCTP=y
CONFIG_NF_CT_PROTO_UDPLITE=y
CONFIG_NF_CONNTRACK_AMANDA=y
CONFIG_NF_CONNTRACK_FTP=y
CONFIG_NF_CONNTRACK_H323=y
CONFIG_NF_CONNTRACK_IRC=y
CONFIG_NF_CONNTRACK_NETBIOS_NS=y
CONFIG_NF_CONNTRACK_PPTP=y
CONFIG_NF_CONNTRACK_SANE=y
CONFIG_NF_CONNTRACK_SIP=y
CONFIG_NF_CONNTRACK_TFTP=y
CONFIG_NF_CT_NETLINK=y
CONFIG_NETFILTER_TPROXY=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
CONFIG_NETFILTER_XT_TARGET_CONNMARK=y
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=y
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
CONFIG_NETFILTER_XT_TARGET_TPROXY=y
CONFIG_NETFILTER_XT_TARGET_TRACE=y
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y
CONFIG_NETFILTER_XT_MATCH_CONNMARK=y
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y
CONFIG_NETFILTER_XT_MATCH_HELPER=y
CONFIG_NETFILTER_XT_MATCH_IPRANGE=y
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
CONFIG_NETFILTER_XT_MATCH_MAC=y
CONFIG_NETFILTER_XT_MATCH_MARK=y
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y
CONFIG_NETFILTER_XT_MATCH_POLICY=y
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
CONFIG_NETFILTER_XT_MATCH_QTAGUID=y
CONFIG_NETFILTER_XT_MATCH_QUOTA=y
CONFIG_NETFILTER_XT_MATCH_QUOTA2=y
CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y
CONFIG_NETFILTER_XT_MATCH_SOCKET=y
CONFIG_NETFILTER_XT_MATCH_STATE=y
CONFIG_NETFILTER_XT_MATCH_STATISTIC=y
CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TIME=y
CONFIG_NETFILTER_XT_MATCH_U32=y
CONFIG_NF_CONNTRACK_IPV4=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_MATCH_AH=y
CONFIG_IP_NF_MATCH_ECN=y
CONFIG_IP_NF_MATCH_TTL=y
CONFIG_IP_NF_FILTER=y
CONFIG_IP_NF_TARGET_REJECT=y
CONFIG_IP_NF_TARGET_REJECT_SKERR=y
CONFIG_NF_NAT=y
CONFIG_IP_NF_TARGET_MASQUERADE=y
CONFIG_IP_NF_TARGET_NETMAP=y
CONFIG_IP_NF_TARGET_REDIRECT=y
CONFIG_IP_NF_MANGLE=y
CONFIG_IP_NF_RAW=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP_NF_ARPFILTER=y
CONFIG_IP_NF_ARP_MANGLE=y
CONFIG_NF_CONNTRACK_IPV6=y
CONFIG_IP6_NF_IPTABLES=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_TARGET_REJECT_SKERR=y
CONFIG_IP6_NF_MANGLE=y
CONFIG_IP6_NF_RAW=y
CONFIG_L2TP=y
CONFIG_NET_SCHED=y
CONFIG_NET_SCH_HTB=y
CONFIG_NET_SCH_PRIO=y
CONFIG_NET_CLS_FW=y
CONFIG_NET_CLS_U32=y
CONFIG_CLS_U32_MARK=y
CONFIG_NET_CLS_FLOW=y
CONFIG_NET_EMATCH=y
CONFIG_NET_EMATCH_CMP=y
CONFIG_NET_EMATCH_NBYTE=y
CONFIG_NET_EMATCH_U32=y
CONFIG_NET_EMATCH_META=y
CONFIG_NET_EMATCH_TEXT=y
CONFIG_NET_CLS_ACT=y
CONFIG_BT=y
CONFIG_BT_RFCOMM=y
CONFIG_BT_RFCOMM_TTY=y
CONFIG_BT_BNEP=y
CONFIG_BT_BNEP_MC_FILTER=y
CONFIG_BT_BNEP_PROTO_FILTER=y
CONFIG_BT_HIDP=y
CONFIG_BT_HCISMD=y
CONFIG_CFG80211=m
# CONFIG_CFG80211_WEXT is not set
CONFIG_RFKILL=y
CONFIG_GENLOCK=y
CONFIG_GENLOCK_MISCDEVICE=y
CONFIG_CONNECTOR=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_BLK_DEV_RAM=y
CONFIG_UID_STAT=y
CONFIG_HAPTIC_ISA1200=y
CONFIG_PMIC8XXX_VIBRATOR=y
CONFIG_QSEECOM=y
CONFIG_USB_HSIC_SMSC_HUB=y
CONFIG_SCSI=y
CONFIG_SCSI_TGT=y
CONFIG_BLK_DEV_SD=y
CONFIG_CHR_DEV_SG=y
CONFIG_CHR_DEV_SCH=y
CONFIG_SCSI_MULTI_LUN=y
CONFIG_SCSI_CONSTANTS=y
CONFIG_SCSI_LOGGING=y
CONFIG_SCSI_SCAN_ASYNC=y
CONFIG_MD=y
CONFIG_BLK_DEV_DM=y
CONFIG_DM_CRYPT=y
CONFIG_NETDEVICES=y
CONFIG_DUMMY=y
CONFIG_KS8851=m
# CONFIG_MSM_RMNET is not set
CONFIG_MSM_RMNET_BAM=y
CONFIG_MSM_RMNET_SMUX=y
CONFIG_USB_USBNET=y
CONFIG_MSM_RMNET_USB=y
CONFIG_WCNSS_CORE=y
CONFIG_INPUT_EVDEV=y
CONFIG_INPUT_EVBUG=m
CONFIG_KEYBOARD_GPIO=y
CONFIG_KEYBOARD_PMIC8XXX=y
CONFIG_INPUT_JOYSTICK=y
CONFIG_JOYSTICK_XPAD=y
CONFIG_INPUT_TOUCHSCREEN=y
CONFIG_INPUT_MISC=y
CONFIG_INPUT_PMIC8XXX_PWRKEY=y
CONFIG_INPUT_KEYCHORD=y
CONFIG_INPUT_UINPUT=y
# CONFIG_LEGACY_PTYS is not set
CONFIG_N_SMUX=y
CONFIG_N_SMUX_LOOPBACK=y
CONFIG_SMUX_CTL=y
CONFIG_SERIAL_MSM_HS=y
CONFIG_SERIAL_MSM_HSL=y
CONFIG_SERIAL_MSM_HSL_CONSOLE=y
CONFIG_DIAG_CHAR=y
CONFIG_HW_RANDOM=y
CONFIG_HW_RANDOM_MSM=y
CONFIG_I2C=y
CONFIG_I2C_CHARDEV=y
# CONFIG_I2C_MSM is not set
CONFIG_I2C_QUP=y
CONFIG_SPI=y
CONFIG_SPI_QUP=y
CONFIG_SPI_SPIDEV=m
CONFIG_SLIMBUS_MSM_CTRL=y
CONFIG_DEBUG_GPIO=y
CONFIG_GPIO_SYSFS=y
CONFIG_GPIO_SX150X=y
CONFIG_POWER_SUPPLY=y
# CONFIG_BATTERY_MSM is not set
CONFIG_ISL9519_CHARGER=y
CONFIG_PM8921_CHARGER=y
CONFIG_PM8921_BMS=y
CONFIG_SENSORS_PM8XXX_ADC=y
CONFIG_THERMAL=y
CONFIG_THERMAL_TSENS8960=y
CONFIG_THERMAL_PM8XXX=y
CONFIG_THERMAL_MONITOR=y
CONFIG_MFD_PM8921_CORE=y
CONFIG_MFD_PM8821_CORE=y
CONFIG_MFD_PM8038_CORE=y
CONFIG_MFD_PM8XXX_SPK=y
CONFIG_MFD_PM8XXX_BATT_ALARM=y
CONFIG_WCD9304_CODEC=y
CONFIG_WCD9310_CODEC=y
CONFIG_REGULATOR_PM8XXX=y
CONFIG_REGULATOR_MSM_GPIO=y
CONFIG_MEDIA_SUPPORT=y
CONFIG_MEDIA_CONTROLLER=y
CONFIG_VIDEO_DEV=y
CONFIG_VIDEO_V4L2_SUBDEV_API=y
# CONFIG_MEDIA_TUNER_CUSTOMISE is not set
CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
CONFIG_USB_VIDEO_CLASS=y
CONFIG_ION=y
CONFIG_ION_MSM=y
CONFIG_MSM_KGSL=y
CONFIG_KGSL_PER_PROCESS_PAGE_TABLE=y
CONFIG_MSM_KGSL_PAGE_TABLE_COUNT=24
CONFIG_FB=y
CONFIG_FB_VIRTUAL=y
CONFIG_FB_MSM=y
# CONFIG_FB_MSM_BACKLIGHT is not set
CONFIG_FB_MSM_LOGO=y
CONFIG_FB_MSM_TRIPLE_BUFFER=y
CONFIG_FB_MSM_MDP40=y
CONFIG_FB_MSM_OVERLAY=y
CONFIG_FB_MSM_OVERLAY0_WRITEBACK=y
CONFIG_FB_MSM_OVERLAY1_WRITEBACK=y
CONFIG_FB_MSM_WRITEBACK_MSM_PANEL=y
CONFIG_FB_MSM_LVDS_MIPI_PANEL_DETECT=y
CONFIG_FB_MSM_HDMI_MSM_PANEL=y
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_DYNAMIC_MINORS=y
# CONFIG_SND_ARM is not set
# CONFIG_SND_SPI is not set
CONFIG_SND_USB_AUDIO=y
CONFIG_SND_SOC=y
CONFIG_SND_SOC_MSM8960=y
CONFIG_HID_APPLE=y
CONFIG_HID_MAGICMOUSE=y
CONFIG_HID_MICROSOFT=y
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
CONFIG_USB_SUSPEND=y
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_EHSET=y
CONFIG_USB_EHCI_MSM=y
CONFIG_USB_EHCI_MSM_HSIC=y
CONFIG_USB_ACM=y
CONFIG_USB_STORAGE=y
CONFIG_USB_STORAGE_DEBUG=y
CONFIG_USB_STORAGE_DATAFAB=y
CONFIG_USB_STORAGE_FREECOM=y
CONFIG_USB_STORAGE_ISD200=y
CONFIG_USB_STORAGE_USBAT=y
CONFIG_USB_STORAGE_SDDR09=y
CONFIG_USB_STORAGE_SDDR55=y
CONFIG_USB_STORAGE_JUMPSHOT=y
CONFIG_USB_STORAGE_ALAUDA=y
CONFIG_USB_STORAGE_ONETOUCH=y
CONFIG_USB_STORAGE_KARMA=y
CONFIG_USB_STORAGE_CYPRESS_ATACB=y
CONFIG_USB_SERIAL=y
CONFIG_USB_SERIAL_QUALCOMM=y
CONFIG_USB_SERIAL_CSVT=y
CONFIG_USB_EHSET_TEST_FIXTURE=y
CONFIG_USB_QCOM_DIAG_BRIDGE=y
CONFIG_USB_QCOM_MDM_BRIDGE=y
CONFIG_USB_GADGET=y
CONFIG_USB_GADGET_DEBUG_FILES=y
CONFIG_USB_CI13XXX_MSM=y
CONFIG_USB_G_ANDROID=y
CONFIG_USB_ANDROID_RMNET_CTRL_SMD=y
CONFIG_MMC=y
CONFIG_MMC_PERF_PROFILING=y
CONFIG_MMC_UNSAFE_RESUME=y
CONFIG_MMC_CLKGATE=y
CONFIG_MMC_PARANOID_SD_INIT=y
CONFIG_MMC_BLOCK_MINORS=32
# CONFIG_MMC_BLOCK_BOUNCE is not set
CONFIG_MMC_MSM=y
CONFIG_MMC_MSM_CARD_HW_DETECTION=y
CONFIG_MMC_MSM_SDC1_8_BIT_SUPPORT=y
# CONFIG_MMC_MSM_SDC2_SUPPORT is not set
CONFIG_MMC_MSM_SDC3_SUPPORT=y
CONFIG_MMC_MSM_SDC3_WP_SUPPORT=y
CONFIG_MMC_MSM_SPS_SUPPORT=y
CONFIG_LEDS_PM8XXX=y
CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_SWITCH=y
CONFIG_RTC_CLASS=y
# CONFIG_RTC_DRV_MSM is not set
CONFIG_RTC_DRV_PM8XXX=y
CONFIG_STAGING=y
CONFIG_ANDROID=y
CONFIG_ANDROID_BINDER_IPC=y
CONFIG_ANDROID_LOGGER=y
CONFIG_ANDROID_RAM_CONSOLE=y
CONFIG_ANDROID_TIMED_GPIO=y
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
CONFIG_MSM_SSBI=y
CONFIG_SPS=y
CONFIG_SPS_SUPPORT_BAMDMA=y
CONFIG_MSM_IOMMU=y
CONFIG_EXT2_FS=y
CONFIG_EXT2_FS_XATTR=y
CONFIG_EXT3_FS=y
# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
CONFIG_EXT4_FS=y
CONFIG_FUSE_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
CONFIG_CIFS=y
CONFIG_CIFS_XATTR=y
CONFIG_CIFS_POSIX=y
CONFIG_NLS_CODEPAGE_437=y
CONFIG_NLS_ASCII=y
CONFIG_NLS_ISO8859_1=y
CONFIG_NLS_UTF8=y
CONFIG_PRINTK_TIME=y
CONFIG_MAGIC_SYSRQ=y
# CONFIG_SCHED_DEBUG is not set
CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_PREEMPT is not set
CONFIG_DEBUG_INFO=y
CONFIG_DEBUG_MEMORY_INIT=y
CONFIG_ENABLE_DEFAULT_TRACERS=y
CONFIG_DYNAMIC_DEBUG=y
CONFIG_DEBUG_USER=y
CONFIG_PID_IN_CONTEXTIDR=y
CONFIG_CRYPTO_TWOFISH=y
CONFIG_CRYPTO_DEV_QCRYPTO=m
CONFIG_CRYPTO_DEV_QCE=m
CONFIG_CRYPTO_DEV_QCEDEV=m
CONFIG_CRC_CCITT=y
......@@ -867,6 +867,8 @@ config MACH_FSM9XXX_SURF
endmenu
source "arch/arm/mach-msm/lge/Kconfig"
config MSM_STACKED_MEMORY
bool "Stacked Memory"
default y
......
......@@ -281,7 +281,9 @@ obj-$(CONFIG_MACH_MSM8930_MTP) += board-8930-all.o board-8930-regulator.o
obj-$(CONFIG_MACH_MSM8930_FLUID) += board-8930-all.o board-8930-regulator.o
obj-$(CONFIG_PM8921_BMS) += bms-batterydata.o bms-batterydata-desay.o
obj-$(CONFIG_MACH_APQ8064_CDP) += board-8064-all.o board-8064-regulator.o
ifndef CONFIG_MACH_LGE # FIXME: will be fixed
obj-$(CONFIG_MACH_APQ8064_MTP) += board-8064-all.o board-8064-regulator.o
endif
obj-$(CONFIG_MACH_APQ8064_LIQUID) += board-8064-all.o board-8064-regulator.o
obj-$(CONFIG_MACH_MPQ8064_HRD) += board-8064-all.o board-8064-regulator.o
obj-$(CONFIG_MACH_MPQ8064_DTV) += board-8064-all.o board-8064-regulator.o
......@@ -300,6 +302,9 @@ obj-$(CONFIG_MACH_SAPPHIRE) += board-sapphire-keypad.o board-sapphire-panel.o
obj-$(CONFIG_MACH_SAPPHIRE) += board-sapphire-mmc.o board-sapphire-wifi.o
obj-$(CONFIG_MACH_SAPPHIRE) += board-sapphire-rfkill.o msm_vibrator.o
obj-$(CONFIG_MACH_LGE) += board-8960-all.o board-8960-regulator.o
obj-$(CONFIG_MACH_LGE) += lge/
CFLAGS_msm_vibrator.o += -Idrivers/staging/android
CFLAGS_board-9615.o += -Idrivers/usb/gadget
......
......@@ -5198,13 +5198,13 @@ static struct clk_lookup msm_clocks_8064[] = {
CLK_LOOKUP("core_clk", gp0_clk.c, ""),
CLK_LOOKUP("core_clk", gp1_clk.c, ""),
CLK_LOOKUP("core_clk", gp2_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi1_uart_clk.c, "msm_serial_hsl.1"),
CLK_LOOKUP("core_clk", gsbi1_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi2_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi3_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi4_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi4_uart_clk.c, "msm_serial_hsl.0"),
CLK_LOOKUP("core_clk", gsbi5_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi6_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi7_uart_clk.c, "msm_serial_hsl.0"),
CLK_LOOKUP("core_clk", gsbi7_uart_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi1_qup_clk.c, "qup_i2c.0"),
CLK_LOOKUP("core_clk", gsbi2_qup_clk.c, ""),
CLK_LOOKUP("core_clk", gsbi3_qup_clk.c, "qup_i2c.3"),
......@@ -5246,10 +5246,11 @@ static struct clk_lookup msm_clocks_8064[] = {
CLK_LOOKUP("ce3_core_src_clk", ce3_src_clk.c, "qce.0"),
CLK_LOOKUP("ce3_core_src_clk", ce3_src_clk.c, "qcrypto.0"),
CLK_LOOKUP("dma_bam_pclk", dma_bam_p_clk.c, NULL),
CLK_LOOKUP("iface_clk", gsbi1_p_clk.c, "msm_serial_hsl.1"),
CLK_LOOKUP("iface_clk", gsbi1_p_clk.c, ""),
CLK_LOOKUP("iface_clk", gsbi1_p_clk.c, "qup_i2c.0"),
CLK_LOOKUP("iface_clk", gsbi2_p_clk.c, ""),
CLK_LOOKUP("iface_clk", gsbi3_p_clk.c, "qup_i2c.3"),
CLK_LOOKUP("iface_clk", gsbi4_p_clk.c, "msm_serial_hsl.0"),
CLK_LOOKUP("iface_clk", gsbi4_p_clk.c, "qup_i2c.4"),
CLK_LOOKUP("iface_clk", gsbi5_p_clk.c, "spi_qsd.0"),
CLK_LOOKUP("iface_clk", gsbi5_p_clk.c, "qup_i2c.5"),
......
......@@ -49,6 +49,7 @@
/* Address of GSBI blocks */
#define MSM_GSBI1_PHYS 0x12440000
#define MSM_GSBI2_PHYS 0x13440000
#define MSM_GSBI3_PHYS 0x16200000
#define MSM_GSBI4_PHYS 0x16300000
#define MSM_GSBI5_PHYS 0x1A200000
......@@ -58,10 +59,13 @@
/* GSBI UART devices */
#define MSM_UART1DM_PHYS (MSM_GSBI1_PHYS + 0x10000)
#define MSM_UART3DM_PHYS (MSM_GSBI3_PHYS + 0x40000)
#define MSM_UART4DM_PHYS (MSM_GSBI4_PHYS + 0x40000)
#define MSM_UART6DM_PHYS (MSM_GSBI6_PHYS + 0x40000)
#define MSM_UART7DM_PHYS (MSM_GSBI7_PHYS + 0x40000)
/* GSBI QUP devices */
#define MSM_GSBI1_QUP_PHYS (MSM_GSBI1_PHYS + 0x20000)
#define MSM_GSBI2_QUP_PHYS (MSM_GSBI2_PHYS + 0x20000)
#define MSM_GSBI3_QUP_PHYS (MSM_GSBI3_PHYS + 0x80000)
#define MSM_GSBI4_QUP_PHYS (MSM_GSBI4_PHYS + 0x80000)
#define MSM_GSBI5_QUP_PHYS (MSM_GSBI5_PHYS + 0x80000)
......@@ -285,6 +289,33 @@ struct platform_device apq8064_device_qup_i2c_gsbi3 = {
.resource = resources_qup_i2c_gsbi3,
};
static struct resource resources_uart_gsbi4[] = {
{
.start = GSBI4_UARTDM_IRQ,
.end = GSBI4_UARTDM_IRQ,
.flags = IORESOURCE_IRQ,
},
{
.start = MSM_UART4DM_PHYS,
.end = MSM_UART4DM_PHYS + PAGE_SIZE - 1,
.name = "uartdm_resource",
.flags = IORESOURCE_MEM,
},
{
.start = MSM_GSBI4_PHYS,
.end = MSM_GSBI4_PHYS + PAGE_SIZE - 1,
.name = "gsbi_resource",
.flags = IORESOURCE_MEM,
},
};
struct platform_device apq8064_device_uart_gsbi4 = {
.name = "msm_serial_hsl",
.id = 0,
.num_resources = ARRAY_SIZE(resources_uart_gsbi4),
.resource = resources_uart_gsbi4,
};
static struct resource resources_qup_i2c_gsbi4[] = {
{
.name = "gsbi_qup_i2c_addr",
......
......@@ -84,6 +84,7 @@ extern struct platform_device msm8960_device_ebi1_ch1_erp;
extern struct platform_device apq8064_device_uart_gsbi1;
extern struct platform_device apq8064_device_uart_gsbi3;
extern struct platform_device apq8064_device_uart_gsbi4;
extern struct platform_device apq8064_device_uart_gsbi7;
extern struct platform_device apq8064_device_qup_i2c_gsbi1;
extern struct platform_device apq8064_device_qup_i2c_gsbi3;
......
/* arch/arm/mach-msm/include/mach/board_lge.h
*
* Copyright (C) 2007 Google, Inc.
* Copyright (c) 2008-2012, Code Aurora Forum. All rights reserved.
* Copyright (c) 2012, LGE Inc.
* Author: Brian Swetland <swetland@google.com>
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __ASM_ARCH_MSM_BOARD_LGE_H
#define __ASM_ARCH_MSM_BOARD_LGE_H
#ifdef CONFIG_ANDROID_RAM_CONSOLE
#define LGE_RAM_CONSOLE_SIZE (124*SZ_1K * 2)
#endif
#ifdef CONFIG_LGE_HANDLE_PANIC
#define LGE_CRASH_LOG_SIZE (4*SZ_1K)
#endif
typedef enum {
HW_REV_EVB1 = 0,
HW_REV_EVB2,
HW_REV_A,
HW_REV_B,
HW_REV_C,
HW_REV_D,
HW_REV_E,
HW_REV_F,
HW_REV_G,
HW_REV_H,
HW_REV_1_0,
HW_REV_1_1,
HW_REV_1_2,
HW_REV_MAX
} hw_rev_type;
hw_rev_type lge_get_board_revno(void);
#ifdef CONFIG_LGE_PM
/*Classified the ADC value for cable detection */
typedef enum {
NO_INIT_CABLE = 0,
CABLE_MHL_1K,
CABLE_U_28P7K,
CABLE_28P7K,
CABLE_56K,
CABLE_100K,
CABLE_130K,
CABLE_180K,
CABLE_200K,
CABLE_220K,
CABLE_270K,
CABLE_330K,
CABLE_620K,
CABLE_910K,
CABLE_NONE
} acc_cable_type;
struct chg_cable_info {
acc_cable_type cable_type;
unsigned ta_ma;
unsigned usb_ma;
};
int lge_pm_get_cable_info(struct chg_cable_info *);
void lge_pm_read_cable_info(void);
acc_cable_type lge_pm_get_cable_type(void);
unsigned lge_pm_get_ta_current(void);
unsigned lge_pm_get_usb_current(void);
#endif
#ifdef CONFIG_LGE_PM_BATTERY_ID_CHECKER
enum {
BATT_UNKNOWN,
BATT_DS2704_N = 17,
BATT_DS2704_L = 32,
BATT_ISL6296_N = 73,
BATT_ISL6296_L = 94,
};
extern int lge_battery_info;
#endif
#ifdef CONFIG_LGE_KCAL
struct kcal_platform_data {
int (*set_values) (int r, int g, int b);
int (*get_values) (int *r, int *g, int *b);
int (*refresh_display) (void);
};
#endif
#ifdef CONFIG_LGE_PM
struct pseudo_batt_info_type {
int mode;
int id;
int therm;
int temp;
int volt;
int capacity;
int charging;
};
#endif
int __init lge_get_uart_mode(void);
#if defined(CONFIG_LGE_NFC_PN544)
void __init lge_add_nfc_devices(void);
#endif
/* from androidboot.mode */
enum lge_boot_mode_type {
LGE_BOOT_MODE_NORMAL = 0,
LGE_BOOT_MODE_CHARGER,
LGE_BOOT_MODE_CHARGERLOGO,
LGE_BOOT_MODE_FACTORY,
LGE_BOOT_MODE_FACTORY2,
LGE_BOOT_MODE_PIFBOOT,
LGE_BOOT_MODE_PIFBOOT2,
};
#ifdef CONFIG_ANDROID_RAM_CONSOLE
void __init lge_add_ramconsole_devices(void);
#endif
#ifdef CONFIG_LGE_HANDLE_PANIC
void __init lge_add_panic_handler_devices(void);
int lge_get_magic_for_subsystem(void);
void lge_set_magic_for_subsystem(const char *subsys_name);
#endif
#ifdef CONFIG_LGE_QFPROM_INTERFACE
void __init lge_add_qfprom_devices(void);
#endif
enum lge_boot_mode_type lge_get_boot_mode(void);
int lge_get_factory_boot(void);
#ifdef CONFIG_LGE_BOOT_TIME_CHECK
void __init lge_add_boot_time_checker(void);
#endif
#ifdef CONFIG_LGE_ECO_MODE
void __init lge_add_lge_kernel_devices(void);
#endif
#endif // __ASM_ARCH_MSM_BOARD_LGE_H
/* arch/arm/mach-msm/include/mach/board_mako.h
*
* Copyright (C) 2007 Google, Inc.
* Copyright (c) 2008-2012, Code Aurora Forum. All rights reserved.
* Copyright (c) 2012, LGE.
* Author: Brian Swetland <swetland@google.com>
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
* may be copied, distributed, and modified under those terms.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#ifndef __ASM_ARCH_MSM_BOARD_MAKO_H
#define __ASM_ARCH_MSM_BOARD_MAKO_H
#ifdef CONFIG_LGE_PM
#define ADC_CHANGE_REV HW_REV_EVB1
#define IBAT_CURRENT 825
/* Ref resistance value = 665K */
#define ADC_NO_INIT_CABLE 0
#define ADC_CABLE_MHL_1K 30000
#define ADC_CABLE_U_28P7K 60000
#define ADC_CABLE_28P7K 110000
#define ADC_CABLE_56K 185000
#define ADC_CABLE_100K 265000
#define ADC_CABLE_130K 340000
#define ADC_CABLE_180K 400000
#define ADC_CABLE_200K 431000
#define ADC_CABLE_220K 485000
#define ADC_CABLE_270K 560000
#define ADC_CABLE_330K 735000
#define ADC_CABLE_620K 955000
#define ADC_CABLE_910K 1140000
#define ADC_CABLE_NONE 1800000
/* Ref resistance value = 200K */
#define ADC_NO_INIT_CABLE2 0
#define ADC_CABLE_MHL_1K2 50000
#define ADC_CABLE_U_28P7K2 200000
#define ADC_CABLE_28P7K2 300000
#define ADC_CABLE_56K2 490000
#define ADC_CABLE_100K2 650000
#define ADC_CABLE_130K2 780000
#define ADC_CABLE_180K2 875000
#define ADC_CABLE_200K2 920000
#define ADC_CABLE_220K2 988000
#define ADC_CABLE_270K2 1077000
#define ADC_CABLE_330K2 1294000
#define ADC_CABLE_620K2 1418000
#define ADC_CABLE_910K2 1600000
#define ADC_CABLE_NONE2 1800000
#define C_NO_INIT_TA_MA 0
#define C_MHL_1K_TA_MA 500
#define C_U_28P7K_TA_MA 500
#define C_28P7K_TA_MA 500
#define C_56K_TA_MA 1500 /* it will be changed in future */
#define C_100K_TA_MA 500
#define C_130K_TA_MA 1500
#define C_180K_TA_MA 700
#define C_200K_TA_MA 700
#define C_220K_TA_MA 900
#define C_270K_TA_MA 800
#define C_330K_TA_MA 500
#define C_620K_TA_MA 500
#define C_910K_TA_MA 1500//[ORG]500
#define C_NONE_TA_MA 900 //900mA for open cable
#define C_NO_INIT_USB_MA 0
#define C_MHL_1K_USB_MA 500
#define C_U_28P7K_USB_MA 500
#define C_28P7K_USB_MA 500
#define C_56K_USB_MA 1500 /* it will be changed in future */
#define C_100K_USB_MA 500
#define C_130K_USB_MA 1500
#define C_180K_USB_MA 500
#define C_200K_USB_MA 500
#define C_220K_USB_MA 500
#define C_270K_USB_MA 500
#define C_330K_USB_MA 500
#define C_620K_USB_MA 500
#define C_910K_USB_MA 1500//[ORG]500
#define C_NONE_USB_MA 500
#endif
#endif // __ASM_ARCH_MSM_BOARD_MAKO_H
config MACH_LGE
bool
menu "LGE Board Selection"
source "arch/arm/mach-msm/lge/Kconfig.board"
endmenu
menu "LGE Specific Patches"
endmenu
#
# Inlcude the specific Kconfig file for LGE board
#
# MAKO
source "arch/arm/mach-msm/lge/mako/Kconfig"
subdir-ccflags-$(CONFIG_ARCH_MSM) += -Iarch/arm/mach-msm
-include $(src)/Makefile.board
obj-$(CONFIG_MACH_LGE) += devices_lge.o
#
# Makefile for the LGE board
#
# MAKO
obj-$(CONFIG_MACH_APQ8064_MAKO) += mako/
/* Copyright (c) 2012, LGE Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include <linux/kernel.h>
#include <linux/platform_device.h>
#include <linux/memory.h>
#include <asm/setup.h>
#include <asm/sizes.h>
#include <asm/system_info.h>
#include <asm/memory.h>
#ifdef CONFIG_LGE_PM
#include <linux/mfd/pm8xxx/pm8921.h>
#include <linux/delay.h>
#endif
#include <mach/board_lge.h>
#ifdef CONFIG_LGE_PM
#include CONFIG_BOARD_HEADER_FILE
#endif
#ifdef CONFIG_LGE_BOOT_TIME_CHECK
#include "lge_boot_time_checker.h"
#endif
/* setting whether uart console is enalbed or disabled */
static int uart_console_mode = 0;
int __init lge_get_uart_mode(void)
{
return uart_console_mode;
}
static int __init lge_uart_mode(char *uart_mode)
{
if (!strncmp("enable", uart_mode, 5)) {
printk(KERN_INFO"UART CONSOLE : enable\n");
uart_console_mode = 1;
}
else
printk(KERN_INFO"UART CONSOLE : disable\n");
return 1;
}
__setup("uart_console=", lge_uart_mode);
#ifdef CONFIG_LGE_PM
/* Implement cable detection */
struct chg_cable_info_table {
int threshhold;
acc_cable_type type;
unsigned ta_ma;
unsigned usb_ma;
};
/* This table is only for J1 */
static struct chg_cable_info_table pm8921_acc_cable_type_data[]={
{ADC_NO_INIT_CABLE, NO_INIT_CABLE, C_NO_INIT_TA_MA, C_NO_INIT_USB_MA},
{ADC_CABLE_MHL_1K, CABLE_MHL_1K, C_MHL_1K_TA_MA, C_MHL_1K_USB_MA},
{ADC_CABLE_U_28P7K, CABLE_U_28P7K, C_U_28P7K_TA_MA, C_U_28P7K_USB_MA},
{ADC_CABLE_28P7K, CABLE_28P7K, C_28P7K_TA_MA, C_28P7K_USB_MA},
{ADC_CABLE_56K, CABLE_56K, C_56K_TA_MA, C_56K_USB_MA},
{ADC_CABLE_100K, CABLE_100K, C_100K_TA_MA, C_100K_USB_MA},
{ADC_CABLE_130K, CABLE_130K, C_130K_TA_MA, C_130K_USB_MA},
{ADC_CABLE_180K, CABLE_180K, C_180K_TA_MA, C_180K_USB_MA},
{ADC_CABLE_200K, CABLE_200K, C_200K_TA_MA, C_200K_USB_MA},
{ADC_CABLE_220K, CABLE_220K, C_220K_TA_MA, C_220K_USB_MA},
{ADC_CABLE_270K, CABLE_270K, C_270K_TA_MA, C_270K_USB_MA},
{ADC_CABLE_330K, CABLE_330K, C_330K_TA_MA, C_330K_USB_MA},
{ADC_CABLE_620K, CABLE_620K, C_620K_TA_MA, C_620K_USB_MA},
{ADC_CABLE_910K, CABLE_910K, C_910K_TA_MA, C_910K_USB_MA},
{ADC_CABLE_NONE, CABLE_NONE, C_NONE_TA_MA, C_NONE_USB_MA},
};
#endif
/* for board revision */
static hw_rev_type lge_bd_rev = HW_REV_EVB1;
static int __init board_revno_setup(char *rev_info)
{
/* CAUTION: These strings are come from LK. */
char *rev_str[] = {"evb1", "evb2", "rev_a", "rev_b", "rev_c", "rev_d",
"rev_e", "rev_f", "rev_g", "rev_h", "rev_10", "rev_11", "rev_12",
"reserved"};
int i;
printk(KERN_INFO "BOARD : LGE input %s \n", rev_info);
for (i=0; i< HW_REV_MAX; i++) {
if( !strncmp(rev_info, rev_str[i], 6)) {
lge_bd_rev = (hw_rev_type) i;
system_rev = lge_bd_rev;
break;
}
}
printk(KERN_INFO "BOARD : LGE matched %s \n", rev_str[lge_bd_rev]);
return 1;
}
__setup("lge.rev=", board_revno_setup);
hw_rev_type lge_get_board_revno(void)
{
return lge_bd_rev;
}
#ifdef CONFIG_LGE_PM
int lge_pm_get_cable_info(struct chg_cable_info *cable_info)
{
char *type_str[] = {"NOT INIT", "MHL 1K", "U_28P7K", "28P7K", "56K",
"100K", "130K", "180K", "200K", "220K", "270K", "330K", "620K", "910K",
"OPEN"};
struct pm8xxx_adc_chan_result result;
struct chg_cable_info *info = cable_info;
struct chg_cable_info_table *table;
int table_size = ARRAY_SIZE(pm8921_acc_cable_type_data);
int acc_read_value = 0;
int i, rc;
int count = 5;
if (!info) {
pr_err("lge_pm_get_cable_info: invalid info parameters\n");
return -1;
}
for (i = 0; i < count; i++) {
rc = pm8xxx_adc_mpp_config_read(PM8XXX_AMUX_MPP_12,
ADC_MPP_1_AMUX6, &result);
if (rc < 0) {
if (rc == -ETIMEDOUT) {
/* reason: adc read timeout, assume it is open cable */
info->cable_type = CABLE_NONE;
info->ta_ma = C_NONE_TA_MA;
info->usb_ma = C_NONE_USB_MA;
pr_err("[DEBUG] lge_pm_get_cable_info : adc read timeout \n");
} else {
pr_err("lge_pm_get_cable_info: adc read error - %d\n", rc);
}
return rc;
}
acc_read_value = (int)result.physical;
pr_info("%s: acc_read_value - %d\n", __func__, (int)result.physical);
mdelay(10);
}
info->cable_type = NO_INIT_CABLE;
info->ta_ma = C_NO_INIT_TA_MA;
info->usb_ma = C_NO_INIT_USB_MA;
/* assume: adc value must be existed in ascending order */
for (i = 0; i < table_size; i++) {
table = &pm8921_acc_cable_type_data[i];
if (acc_read_value <= table->threshhold) {
info->cable_type = table->type;
info->ta_ma = table->ta_ma;
info->usb_ma = table->usb_ma;
break;
}
}
pr_info("\n\n[PM]Cable detected: %d(%s)(%d, %d)\n\n",
acc_read_value, type_str[info->cable_type],
info->ta_ma, info->usb_ma);
return 0;
}
/* Belows are for using in interrupt context */
static struct chg_cable_info lge_cable_info;
acc_cable_type lge_pm_get_cable_type(void)
{
return lge_cable_info.cable_type;
}
unsigned lge_pm_get_ta_current(void)
{
return lge_cable_info.ta_ma;
}
unsigned lge_pm_get_usb_current(void)
{
return lge_cable_info.usb_ma;
}
/* This must be invoked in process context */
void lge_pm_read_cable_info(void)
{
lge_cable_info.cable_type = NO_INIT_CABLE;
lge_cable_info.ta_ma = C_NO_INIT_TA_MA;
lge_cable_info.usb_ma = C_NO_INIT_USB_MA;
lge_pm_get_cable_info(&lge_cable_info);
}
#endif
#ifdef CONFIG_LGE_PM_BATTERY_ID_CHECKER
int lge_battery_info = BATT_UNKNOWN;
static int __init battery_information_setup(char *batt_info)
{
if(!strcmp(batt_info, "ds2704_n"))
lge_battery_info = BATT_DS2704_N;
else if(!strcmp(batt_info, "ds2704_l"))
lge_battery_info = BATT_DS2704_L;
else if(!strcmp(batt_info, "isl6296_n"))
lge_battery_info = BATT_ISL6296_N;
else if(!strcmp(batt_info, "isl6296_l"))
lge_battery_info = BATT_ISL6296_L;
else
lge_battery_info = BATT_UNKNOWN;
printk(KERN_INFO "Battery : %s %d\n", batt_info, lge_battery_info);
return 1;
}
__setup("lge.batt_info=", battery_information_setup);
#endif
#ifdef CONFIG_LGE_KCAL
int g_kcal_r = 255;
int g_kcal_g = 255;
int g_kcal_b = 255;
static int __init display_kcal_setup(char *kcal)
{
char vaild_k = 0;
sscanf(kcal, "%d|%d|%d|%c", &g_kcal_r, &g_kcal_g, &g_kcal_b, &vaild_k );
printk(KERN_INFO "kcal is %d|%d|%d|%c\n",
g_kcal_r, g_kcal_g, g_kcal_b, vaild_k);
if(vaild_k != 'K') {
printk(KERN_INFO "kcal not calibrated yet : %d\n", vaild_k);
g_kcal_r = g_kcal_g = g_kcal_b = 255;
printk(KERN_INFO "set to default : %d\n", g_kcal_r);
}
return 1;
}
__setup("lge.kcal=", display_kcal_setup);
#endif
/* get boot mode information from cmdline.
* If any boot mode is not specified,
* boot mode is normal type.
*/
static enum lge_boot_mode_type lge_boot_mode = LGE_BOOT_MODE_NORMAL;
int __init lge_boot_mode_init(char *s)
{
if (!strcmp(s, "charger"))
lge_boot_mode = LGE_BOOT_MODE_CHARGER;
else if (!strcmp(s, "chargerlogo"))
lge_boot_mode = LGE_BOOT_MODE_CHARGERLOGO;
else if (!strcmp(s, "factory"))
lge_boot_mode = LGE_BOOT_MODE_FACTORY;
else if (!strcmp(s, "factory2"))
lge_boot_mode = LGE_BOOT_MODE_FACTORY2;
else if (!strcmp(s, "pifboot"))
lge_boot_mode = LGE_BOOT_MODE_PIFBOOT;
else if (!strcmp(s, "pifboot2"))
lge_boot_mode = LGE_BOOT_MODE_PIFBOOT2;
return 1;
}
__setup("androidboot.mode=", lge_boot_mode_init);
enum lge_boot_mode_type lge_get_boot_mode(void)
{
return lge_boot_mode;
}
int lge_get_factory_boot(void)
{
int res;
/* if boot mode is factory,
* cable must be factory cable.
*/
switch (lge_boot_mode) {
case LGE_BOOT_MODE_FACTORY:
case LGE_BOOT_MODE_FACTORY2:
case LGE_BOOT_MODE_PIFBOOT:
case LGE_BOOT_MODE_PIFBOOT2:
res = 1;
break;
default:
res = 0;
break;
}
return res;
}
#ifdef CONFIG_ANDROID_RAM_CONSOLE
static struct resource ram_console_resource[] = {
{
.name = "ram_console",
.flags = IORESOURCE_MEM,
}
};
static struct platform_device ram_console_device = {
.name = "ram_console",
.id = -1,
.num_resources = ARRAY_SIZE(ram_console_resource),
.resource = ram_console_resource,
};
void __init lge_add_ramconsole_devices(void)
{
struct resource* res = ram_console_resource;
struct membank* bank = &meminfo.bank[0];
res->start = PHYS_OFFSET + bank->size;
res->end = res->start + LGE_RAM_CONSOLE_SIZE - 1;
printk(KERN_INFO "RAM CONSOLE START ADDR : %X\n", res->start);
printk(KERN_INFO "RAM CONSOLE END ADDR : %X\n", res->end);
platform_device_register(&ram_console_device);
}
#endif // CONFIG_ANDROID_RAM_CONSOLE
#ifdef CONFIG_LGE_HANDLE_PANIC
static struct resource crash_log_resource[] = {
{
.name = "crash_log",
.flags = IORESOURCE_MEM,
}
};
static struct platform_device panic_handler_device = {
.name = "panic-handler",
.num_resources = ARRAY_SIZE(crash_log_resource),
.resource = crash_log_resource,
.dev = {
.platform_data = NULL,
}
};
void __init lge_add_panic_handler_devices(void)
{
struct resource* res = crash_log_resource;
struct membank* bank = &meminfo.bank[0];
res->start = bank->start + bank->size + LGE_RAM_CONSOLE_SIZE;
res->end = res->start + LGE_CRASH_LOG_SIZE - 1;
printk(KERN_INFO "CRASH LOG START ADDR : %X\n", res->start);
printk(KERN_INFO "CRASH LOG END ADDR : %X\n", res->end);
platform_device_register(&panic_handler_device);
}
#endif // CONFIG_LGE_HANDLE_PANIC
#ifdef CONFIG_LGE_ECO_MODE
static struct platform_device lge_kernel_device = {
.name = "lge_kernel_driver",
.id = -1,
};
void __init lge_add_lge_kernel_devices(void)
{
platform_device_register(&lge_kernel_device);
}
#endif
#ifdef CONFIG_LGE_QFPROM_INTERFACE
static struct platform_device qfprom_device = {
.name = "lge-apq8064-qfprom",
.id = -1,
};
void __init lge_add_qfprom_devices(void)
{
platform_device_register(&qfprom_device);
}
#endif
#ifdef CONFIG_LGE_BOOT_TIME_CHECK
static struct platform_device boot_time_device = {
.name = "boot_time",
.id = -1,
.dev = {
.platform_data = NULL,
},
};
void __init lge_add_boot_time_checker(void)
{
platform_device_register(&boot_time_device);
}
#endif
config BOARD_HEADER_FILE
string "LGE board specific header file name"
default ""
config MACH_APQ8064_MAKO
depends on ARCH_APQ8064
select MACH_LGE
bool "MSM8064 MAKO"
help
Support for the LGE MAKO device.
obj-$(CONFIG_MACH_APQ8064_MAKO) += board-mako.o \
board-mako-camera.o \
board-mako-display.o \
board-mako-gpiomux.o \
board-mako-gpu.o \
board-mako-input.o \
board-mako-pmic.o \
board-mako-regulator.o \
board-mako-misc.o \
board-mako-sound.o \
board-mako-storage.o \
board-mako-nfc.o
/* Copyright (c) 2012, Code Aurora Forum. All rights reserved.
* Copyright (c) 2012, LGE Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include <asm/mach-types.h>
#include <linux/i2c.h>
#include <linux/gpio.h>
#include <mach/board.h>
#include <mach/msm_bus_board.h>
#include <mach/gpiomux.h>
#include "devices.h"
#include "board-mako.h"
#ifdef CONFIG_MSM_CAMERA
static struct gpiomux_setting cam_settings[] = {
{
.func = GPIOMUX_FUNC_GPIO, /*suspend*/
.drv = GPIOMUX_DRV_2MA,
.pull = GPIOMUX_PULL_DOWN,
},
{
.func = GPIOMUX_FUNC_1, /*active 1*/
.drv = GPIOMUX_DRV_2MA,
.pull = GPIOMUX_PULL_NONE,
},
{
.func = GPIOMUX_FUNC_GPIO, /*active 2*/
.drv = GPIOMUX_DRV_2MA,
.pull = GPIOMUX_PULL_NONE,
},
{
.func = GPIOMUX_FUNC_1, /*active 3*/
.drv = GPIOMUX_DRV_8MA,
.pull = GPIOMUX_PULL_NONE,
},
{
.func = GPIOMUX_FUNC_4, /*active 4*/
.drv = GPIOMUX_DRV_2MA,
.pull = GPIOMUX_PULL_NONE,
},
{
.func = GPIOMUX_FUNC_6, /*active 5*/
.drv = GPIOMUX_DRV_8MA,
.pull = GPIOMUX_PULL_UP,
},
{
.func = GPIOMUX_FUNC_2, /*active 6*/
.drv = GPIOMUX_DRV_2MA,
.pull = GPIOMUX_PULL_UP,
},
{
.func = GPIOMUX_FUNC_3, /*active 7*/
.drv = GPIOMUX_DRV_8MA,
.pull = GPIOMUX_PULL_UP,
},
{
.func = GPIOMUX_FUNC_GPIO, /*i2c suspend*/
.drv = GPIOMUX_DRV_2MA,
.pull = GPIOMUX_PULL_KEEPER,
},
{
.func = GPIOMUX_FUNC_9, /*active 9*/
.drv = GPIOMUX_DRV_8MA,
.pull = GPIOMUX_PULL_NONE,
},
{
.func = GPIOMUX_FUNC_A, /*active 10*/
.drv = GPIOMUX_DRV_8MA,
.pull = GPIOMUX_PULL_NONE,
},
{
.func = GPIOMUX_FUNC_6, /*active 11*/
.drv = GPIOMUX_DRV_8MA,
.pull = GPIOMUX_PULL_NONE,
},
{
.func = GPIOMUX_FUNC_4, /*active 12*/
.drv = GPIOMUX_DRV_2MA,
.pull = GPIOMUX_PULL_NONE,
},
};
static struct msm_gpiomux_config apq8064_cam_common_configs[] = {
{
.gpio = GPIO_CAM_FLASH_EN, /* 7 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[2],
[GPIOMUX_SUSPENDED] = &cam_settings[0],
},
},
{
.gpio = GPIO_CAM_MCLK0, /* 5 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[1],
[GPIOMUX_SUSPENDED] = &cam_settings[0],
},
},
/* FIXME: for old HW (LGU Rev.A,B VZW Rev.A,B ATT Rev.A) */
#if 1
{
.gpio = GPIO_CAM_MCLK2, /* 2 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[4],
[GPIOMUX_SUSPENDED] = &cam_settings[0],
},
},
#else
{
.gpio = GPIO_CAM_MCLK1, /* 4 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[1],
[GPIOMUX_SUSPENDED] = &cam_settings[0],
},
},
#endif
{
.gpio = GPIO_CAM2_RST_N, /* 34 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[2],
[GPIOMUX_SUSPENDED] = &cam_settings[0],
},
},
{
.gpio = GPIO_CAM1_RST_N, /* 32 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[2],
[GPIOMUX_SUSPENDED] = &cam_settings[0],
},
},
{
.gpio = GPIO_CAM_I2C_SDA, /* 12 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[3],
[GPIOMUX_SUSPENDED] = &cam_settings[8],
},
},
{
.gpio = GPIO_CAM_I2C_SCL, /* 13 */
.settings = {
[GPIOMUX_ACTIVE] = &cam_settings[3],
[GPIOMUX_SUSPENDED] = &cam_settings[8],
},
},
};
#if defined(CONFIG_IMX111) || defined(CONFIG_IMX091)
static struct msm_gpiomux_config apq8064_cam_2d_configs[] = {
};
static struct msm_bus_vectors cam_init_vectors[] = {
{
.src = MSM_BUS_MASTER_VFE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
{
.src = MSM_BUS_MASTER_VPE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
{
.src = MSM_BUS_MASTER_JPEG_ENC,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
};
static struct msm_bus_vectors cam_preview_vectors[] = {
{
.src = MSM_BUS_MASTER_VFE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 27648000,
.ib = 110592000,
},
{
.src = MSM_BUS_MASTER_VPE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
{
.src = MSM_BUS_MASTER_JPEG_ENC,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
};
static struct msm_bus_vectors cam_video_vectors[] = {
{
.src = MSM_BUS_MASTER_VFE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 140451840,
.ib = 561807360,
},
{
.src = MSM_BUS_MASTER_VPE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 206807040,
.ib = 488816640,
},
{
.src = MSM_BUS_MASTER_JPEG_ENC,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
};
static struct msm_bus_vectors cam_snapshot_vectors[] = {
{
.src = MSM_BUS_MASTER_VFE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 274423680,
.ib = 1097694720,
},
{
.src = MSM_BUS_MASTER_VPE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
{
.src = MSM_BUS_MASTER_JPEG_ENC,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 540000000,
.ib = 1350000000,
},
};
static struct msm_bus_vectors cam_zsl_vectors[] = {
{
.src = MSM_BUS_MASTER_VFE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 302071680,
.ib = 1812430080,
},
{
.src = MSM_BUS_MASTER_VPE,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
{
.src = MSM_BUS_MASTER_JPEG_ENC,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 540000000,
.ib = 2025000000,
},
};
static struct msm_bus_paths cam_bus_client_config[] = {
{
ARRAY_SIZE(cam_init_vectors),
cam_init_vectors,
},
{
ARRAY_SIZE(cam_preview_vectors),
cam_preview_vectors,
},
{
ARRAY_SIZE(cam_video_vectors),
cam_video_vectors,
},
{
ARRAY_SIZE(cam_snapshot_vectors),
cam_snapshot_vectors,
},
{
ARRAY_SIZE(cam_zsl_vectors),
cam_zsl_vectors,
},
};
static struct msm_bus_scale_pdata cam_bus_client_pdata = {
cam_bus_client_config,
ARRAY_SIZE(cam_bus_client_config),
.name = "msm_camera",
};
static struct msm_camera_device_platform_data msm_camera_csi_device_data[] = {
{
.csid_core = 0,
.is_csiphy = 1,
.is_csid = 1,
.is_ispif = 1,
.is_vpe = 1,
.cam_bus_scale_table = &cam_bus_client_pdata,
},
{
.csid_core = 1,
.is_csiphy = 1,
.is_csid = 1,
.is_ispif = 1,
.is_vpe = 1,
.cam_bus_scale_table = &cam_bus_client_pdata,
},
};
static struct camera_vreg_t apq_8064_back_cam_vreg[] = {
{"cam1_vdig", REG_LDO, 1200000, 1200000, 105000},
{"cam1_vio", REG_VS, 0, 0, 0},
{"cam1_vana", REG_LDO, 2850000, 2850000, 85600},
#if defined(CONFIG_IMX111) || defined(CONFIG_IMX091)
{"cam1_vaf", REG_LDO, 2800000, 2800000, 300000},
#else
{"cam1_vaf", REG_LDO, 1800000, 1800000, 150000},
#endif
};
#endif
#ifdef CONFIG_IMX119
static struct camera_vreg_t apq_8064_front_cam_vreg[] = {
{"cam2_vio", REG_VS, 0, 0, 0},
{"cam2_vana", REG_LDO, 2800000, 2850000, 85600},
{"cam2_vdig", REG_LDO, 1200000, 1200000, 105000},
};
#endif
#if defined(CONFIG_IMX111) || defined(CONFIG_IMX091)
static struct gpio apq8064_common_cam_gpio[] = {
{12, GPIOF_DIR_IN, "CAMIF_I2C_DATA"},
{13, GPIOF_DIR_IN, "CAMIF_I2C_CLK"},
};
static struct gpio apq8064_back_cam_gpio[] = {
{GPIO_CAM_MCLK0, GPIOF_DIR_IN, "CAMIF_MCLK"},
{GPIO_CAM1_RST_N, GPIOF_DIR_OUT, "CAM_RESET"},
};
static struct msm_gpio_set_tbl apq8064_back_cam_gpio_set_tbl[] = {
{GPIO_CAM1_RST_N, GPIOF_OUT_INIT_LOW, 10000},
{GPIO_CAM1_RST_N, GPIOF_OUT_INIT_HIGH, 10000},
};
static struct msm_camera_gpio_conf apq8064_back_cam_gpio_conf = {
.cam_gpiomux_conf_tbl = apq8064_cam_2d_configs,
.cam_gpiomux_conf_tbl_size = ARRAY_SIZE(apq8064_cam_2d_configs),
.cam_gpio_common_tbl = apq8064_common_cam_gpio,
.cam_gpio_common_tbl_size = ARRAY_SIZE(apq8064_common_cam_gpio),
.cam_gpio_req_tbl = apq8064_back_cam_gpio,
.cam_gpio_req_tbl_size = ARRAY_SIZE(apq8064_back_cam_gpio),
.cam_gpio_set_tbl = apq8064_back_cam_gpio_set_tbl,
.cam_gpio_set_tbl_size = ARRAY_SIZE(apq8064_back_cam_gpio_set_tbl),
};
#endif
#ifdef CONFIG_IMX119
static struct gpio apq8064_front_cam_gpio[] = {
/* FIXME: for old HW (LGU Rev.A,B VZW Rev.A,B ATT Rev.A) */
#if 1
{GPIO_CAM_MCLK2, GPIOF_DIR_IN, "CAMIF_MCLK"},
#else
{GPIO_CAM_MCLK1, GPIOF_DIR_IN, "CAMIF_MCLK"},
#endif
{GPIO_CAM2_RST_N, GPIOF_DIR_OUT, "CAM_RESET"},
};
static struct msm_gpio_set_tbl apq8064_front_cam_gpio_set_tbl[] = {
{GPIO_CAM2_RST_N, GPIOF_OUT_INIT_LOW, 10000},
{GPIO_CAM2_RST_N, GPIOF_OUT_INIT_HIGH, 10000},
};
static struct msm_camera_gpio_conf apq8064_front_cam_gpio_conf = {
.cam_gpiomux_conf_tbl = apq8064_cam_2d_configs,
.cam_gpiomux_conf_tbl_size = ARRAY_SIZE(apq8064_cam_2d_configs),
.cam_gpio_common_tbl = apq8064_common_cam_gpio,
.cam_gpio_common_tbl_size = ARRAY_SIZE(apq8064_common_cam_gpio),
.cam_gpio_req_tbl = apq8064_front_cam_gpio,
.cam_gpio_req_tbl_size = ARRAY_SIZE(apq8064_front_cam_gpio),
.cam_gpio_set_tbl = apq8064_front_cam_gpio_set_tbl,
.cam_gpio_set_tbl_size = ARRAY_SIZE(apq8064_front_cam_gpio_set_tbl),
};
#endif
#if defined (CONFIG_IMX091) || defined (CONFIG_IMX111)
static struct msm_camera_i2c_conf apq8064_back_cam_i2c_conf = {
.use_i2c_mux = 1,
.mux_dev = &msm8960_device_i2c_mux_gsbi4,
.i2c_mux_mode = MODE_L,
};
#endif
#ifdef CONFIG_IMX111_ACT
static struct i2c_board_info msm_act_main_cam_i2c_info = {
I2C_BOARD_INFO("msm_actuator", I2C_SLAVE_ADDR_IMX111_ACT),
};
static struct msm_actuator_info msm_act_main_cam_0_info = {
.board_info = &msm_act_main_cam_i2c_info,
.cam_name = MSM_ACTUATOR_MAIN_CAM_1,
.bus_id = APQ_8064_GSBI4_QUP_I2C_BUS_ID,
.vcm_pwd = 0,
.vcm_enable = 0,
};
#endif
#ifdef CONFIG_IMX111
static struct msm_camera_sensor_flash_data flash_imx111 = {
.flash_type = MSM_CAMERA_FLASH_LED,
};
static struct msm_camera_csi_lane_params imx111_csi_lane_params = {
.csi_lane_assign = 0xE4,
.csi_lane_mask = 0xF,
};
static struct msm_camera_sensor_platform_info sensor_board_info_imx111 = {
.mount_angle = 90,
.cam_vreg = apq_8064_back_cam_vreg,
.num_vreg = ARRAY_SIZE(apq_8064_back_cam_vreg),
.gpio_conf = &apq8064_back_cam_gpio_conf,
.i2c_conf = &apq8064_back_cam_i2c_conf,
.csi_lane_params = &imx111_csi_lane_params,
};
static struct msm_camera_sensor_info msm_camera_sensor_imx111_data = {
.sensor_name = "imx111",
.pdata = &msm_camera_csi_device_data[0],
.flash_data = &flash_imx111,
.sensor_platform_info = &sensor_board_info_imx111,
.csi_if = 1,
.camera_type = BACK_CAMERA_2D,
.sensor_type = BAYER_SENSOR,
#ifdef CONFIG_IMX111_ACT
.actuator_info = &msm_act_main_cam_0_info,
#endif
};
#endif
#ifdef CONFIG_IMX091_ACT
static struct i2c_board_info msm_act_main_cam_i2c_info = {
I2C_BOARD_INFO("msm_actuator", I2C_SLAVE_ADDR_IMX091_ACT), /* 0x18 */
};
static struct msm_actuator_info msm_act_main_cam_0_info = {
.board_info = &msm_act_main_cam_i2c_info,
.cam_name = MSM_ACTUATOR_MAIN_CAM_1,
.bus_id = APQ_8064_GSBI4_QUP_I2C_BUS_ID,
.vcm_pwd = 0,
.vcm_enable = 0,
};
#endif
#ifdef CONFIG_IMX091
static struct msm_camera_sensor_flash_data flash_imx091 = {
.flash_type = MSM_CAMERA_FLASH_LED,
};
static struct msm_camera_csi_lane_params imx091_csi_lane_params = {
.csi_lane_assign = 0xE4,
.csi_lane_mask = 0xF,
};
static struct msm_camera_sensor_platform_info sensor_board_info_imx091 = {
.mount_angle = 90,
.cam_vreg = apq_8064_back_cam_vreg,
.num_vreg = ARRAY_SIZE(apq_8064_back_cam_vreg),
.gpio_conf = &apq8064_back_cam_gpio_conf,
.i2c_conf = &apq8064_back_cam_i2c_conf,
.csi_lane_params = &imx091_csi_lane_params,
};
static struct i2c_board_info imx091_eeprom_i2c_info = {
I2C_BOARD_INFO("imx091_eeprom", 0x21),
};
static struct msm_eeprom_info imx091_eeprom_info = {
.board_info = &imx091_eeprom_i2c_info,
.bus_id = APQ_8064_GSBI4_QUP_I2C_BUS_ID,
};
static struct msm_camera_sensor_info msm_camera_sensor_imx091_data = {
.sensor_name = "imx091",
.pdata = &msm_camera_csi_device_data[0],
.flash_data = &flash_imx091,
.sensor_platform_info = &sensor_board_info_imx091,
.csi_if = 1,
.camera_type = BACK_CAMERA_2D,
.sensor_type = BAYER_SENSOR,
#ifdef CONFIG_IMX091_ACT
.actuator_info = &msm_act_main_cam_0_info,
#endif
.eeprom_info = &imx091_eeprom_info,
};
#endif
#ifdef CONFIG_IMX119
static struct msm_camera_i2c_conf apq8064_front_cam_i2c_conf = {
.use_i2c_mux = 1,
.mux_dev = &msm8960_device_i2c_mux_gsbi4,
.i2c_mux_mode = MODE_L,
};
#endif
#ifdef CONFIG_IMX119
static struct msm_camera_sensor_flash_data flash_imx119 = {
.flash_type = MSM_CAMERA_FLASH_NONE,
};
static struct msm_camera_csi_lane_params imx119_csi_lane_params = {
.csi_lane_assign = 0xE4,
.csi_lane_mask = 0x1,
};
static struct msm_camera_sensor_platform_info sensor_board_info_imx119 = {
.mount_angle = 270,
.cam_vreg = apq_8064_front_cam_vreg,
.num_vreg = ARRAY_SIZE(apq_8064_front_cam_vreg),
.gpio_conf = &apq8064_front_cam_gpio_conf,
.i2c_conf = &apq8064_front_cam_i2c_conf,
.csi_lane_params = &imx119_csi_lane_params,
};
static struct msm_camera_sensor_info msm_camera_sensor_imx119_data = {
.sensor_name = "imx119",
.pdata = &msm_camera_csi_device_data[1],
.flash_data = &flash_imx119,
.sensor_platform_info = &sensor_board_info_imx119,
.csi_if = 1,
.camera_type = FRONT_CAMERA_2D,
.sensor_type = BAYER_SENSOR,
};
#endif
/* Enabling flash LED for camera */
struct led_flash_platform_data {
unsigned gpio_en;
unsigned scl_gpio;
unsigned sda_gpio;
};
static struct led_flash_platform_data lm3559_flash_pdata[] = {
{
.scl_gpio = GPIO_CAM_FLASH_I2C_SCL,
.sda_gpio = GPIO_CAM_FLASH_I2C_SDA,
.gpio_en = GPIO_CAM_FLASH_EN,
}
};
static struct platform_device msm_camera_server = {
.name = "msm_cam_server",
.id = 0,
};
void __init apq8064_init_cam(void)
{
msm_gpiomux_install(apq8064_cam_common_configs,
ARRAY_SIZE(apq8064_cam_common_configs));
platform_device_register(&msm_camera_server);
platform_device_register(&msm8960_device_i2c_mux_gsbi4);
platform_device_register(&msm8960_device_csiphy0);
platform_device_register(&msm8960_device_csiphy1);
platform_device_register(&msm8960_device_csid0);
platform_device_register(&msm8960_device_csid1);
platform_device_register(&msm8960_device_ispif);
platform_device_register(&msm8960_device_vfe);
platform_device_register(&msm8960_device_vpe);
}
#ifdef CONFIG_I2C
static struct i2c_board_info apq8064_camera_i2c_boardinfo[] = {
#ifdef CONFIG_IMX111
{
I2C_BOARD_INFO("imx111", I2C_SLAVE_ADDR_IMX111), /* 0x0D */
.platform_data = &msm_camera_sensor_imx111_data,
},
#endif
#ifdef CONFIG_IMX091
{
I2C_BOARD_INFO("imx091", I2C_SLAVE_ADDR_IMX091), /* 0x0D */
.platform_data = &msm_camera_sensor_imx091_data,
},
#endif
#ifdef CONFIG_IMX119
{
I2C_BOARD_INFO("imx119", I2C_SLAVE_ADDR_IMX119), /* 0x6E */
.platform_data = &msm_camera_sensor_imx119_data,
},
#endif
};
/* Enabling flash LED for camera */
static struct i2c_board_info apq8064_lge_camera_i2c_boardinfo[] = {
{
I2C_BOARD_INFO("lm3559", I2C_SLAVE_ADDR_FLASH),
.platform_data = &lm3559_flash_pdata,
},
};
struct msm_camera_board_info apq8064_camera_board_info = {
.board_info = apq8064_camera_i2c_boardinfo,
.num_i2c_board_info = ARRAY_SIZE(apq8064_camera_i2c_boardinfo),
};
/* Enabling flash LED for camera */
struct msm_camera_board_info apq8064_lge_camera_board_info = {
.board_info = apq8064_lge_camera_i2c_boardinfo,
.num_i2c_board_info = ARRAY_SIZE(apq8064_lge_camera_i2c_boardinfo),
};
#endif
#endif
This diff is collapsed.
This diff is collapsed.
/* Copyright (c) 2012, Code Aurora Forum. All rights reserved.
* Copyright (c) 2012, LGE Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/msm_kgsl.h>
#include <mach/msm_bus_board.h>
#include <mach/board.h>
#include <mach/msm_dcvs.h>
#include "devices.h"
#include "board-mako.h"
#ifdef CONFIG_MSM_DCVS
static struct msm_dcvs_freq_entry grp3d_freq[] = {
{0, 0, 333932},
{0, 0, 497532},
{0, 0, 707610},
{0, 0, 844545},
};
static struct msm_dcvs_core_info grp3d_core_info = {
.freq_tbl = &grp3d_freq[0],
.core_param = {
.max_time_us = 100000,
.num_freq = ARRAY_SIZE(grp3d_freq),
},
.algo_param = {
.slack_time_us = 39000,
.disable_pc_threshold = 86000,
.ss_window_size = 1000000,
.ss_util_pct = 95,
.em_max_util_pct = 97,
.ss_iobusy_conv = 100,
},
};
#endif /* CONFIG_MSM_DCVS */
#ifdef CONFIG_MSM_BUS_SCALING
static struct msm_bus_vectors grp3d_init_vectors[] = {
{
.src = MSM_BUS_MASTER_GRAPHICS_3D,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
{
.src = MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = 0,
},
};
static struct msm_bus_vectors grp3d_low_vectors[] = {
{
.src = MSM_BUS_MASTER_GRAPHICS_3D,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(1000),
},
{
.src = MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(1000),
},
};
static struct msm_bus_vectors grp3d_nominal_low_vectors[] = {
{
.src = MSM_BUS_MASTER_GRAPHICS_3D,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(2000),
},
{
.src = MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(2000),
},
};
static struct msm_bus_vectors grp3d_nominal_high_vectors[] = {
{
.src = MSM_BUS_MASTER_GRAPHICS_3D,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(3200),
},
{
.src = MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(3200),
},
};
static struct msm_bus_vectors grp3d_max_vectors[] = {
{
.src = MSM_BUS_MASTER_GRAPHICS_3D,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(4264),
},
{
.src = MSM_BUS_MASTER_GRAPHICS_3D_PORT1,
.dst = MSM_BUS_SLAVE_EBI_CH0,
.ab = 0,
.ib = KGSL_CONVERT_TO_MBPS(4264),
},
};
static struct msm_bus_paths grp3d_bus_scale_usecases[] = {
{
ARRAY_SIZE(grp3d_init_vectors),
grp3d_init_vectors,
},
{
ARRAY_SIZE(grp3d_low_vectors),
grp3d_low_vectors,
},
{
ARRAY_SIZE(grp3d_nominal_low_vectors),
grp3d_nominal_low_vectors,
},
{
ARRAY_SIZE(grp3d_nominal_high_vectors),
grp3d_nominal_high_vectors,
},
{
ARRAY_SIZE(grp3d_max_vectors),
grp3d_max_vectors,
},
};
static struct msm_bus_scale_pdata grp3d_bus_scale_pdata = {
grp3d_bus_scale_usecases,
ARRAY_SIZE(grp3d_bus_scale_usecases),
.name = "grp3d",
};
#endif
static struct resource kgsl_3d0_resources[] = {
{
.name = KGSL_3D0_REG_MEMORY,
.start = 0x04300000, /* GFX3D address */
.end = 0x0431ffff,
.flags = IORESOURCE_MEM,
},
{
.name = KGSL_3D0_IRQ,
.start = GFX3D_IRQ,
.end = GFX3D_IRQ,
.flags = IORESOURCE_IRQ,
},
};
static const struct kgsl_iommu_ctx kgsl_3d0_iommu0_ctxs[] = {
{ "gfx3d_user", 0 },
{ "gfx3d_priv", 1 },
};
static const struct kgsl_iommu_ctx kgsl_3d0_iommu1_ctxs[] = {
{ "gfx3d1_user", 0 },
{ "gfx3d1_priv", 1 },
};
static struct kgsl_device_iommu_data kgsl_3d0_iommu_data[] = {
{
.iommu_ctxs = kgsl_3d0_iommu0_ctxs,
.iommu_ctx_count = ARRAY_SIZE(kgsl_3d0_iommu0_ctxs),
.physstart = 0x07C00000,
.physend = 0x07C00000 + SZ_1M - 1,
},
{
.iommu_ctxs = kgsl_3d0_iommu1_ctxs,
.iommu_ctx_count = ARRAY_SIZE(kgsl_3d0_iommu1_ctxs),
.physstart = 0x07D00000,
.physend = 0x07D00000 + SZ_1M - 1,
},
};
static struct kgsl_device_platform_data kgsl_3d0_pdata = {
.pwrlevel = {
{
.gpu_freq = 400000000,
.bus_freq = 4,
.io_fraction = 0,
},
{
.gpu_freq = 325000000,
.bus_freq = 3,
.io_fraction = 33,
},
{
.gpu_freq = 200000000,
.bus_freq = 2,
.io_fraction = 100,
},
{
.gpu_freq = 128000000,
.bus_freq = 1,
.io_fraction = 100,
},
{
.gpu_freq = 27000000,
.bus_freq = 0,
},
},
.init_level = 1,
.num_levels = 5,
.set_grp_async = NULL,
.idle_timeout = HZ/10,
.nap_allowed = true,
.clk_map = KGSL_CLK_CORE | KGSL_CLK_IFACE | KGSL_CLK_MEM_IFACE,
#ifdef CONFIG_MSM_BUS_SCALING
.bus_scale_table = &grp3d_bus_scale_pdata,
#endif
.iommu_data = kgsl_3d0_iommu_data,
.iommu_count = ARRAY_SIZE(kgsl_3d0_iommu_data),
#ifdef CONFIG_MSM_DCVS
.core_info = &grp3d_core_info,
#endif
};
struct platform_device device_kgsl_3d0 = {
.name = "kgsl-3d0",
.id = 0,
.num_resources = ARRAY_SIZE(kgsl_3d0_resources),
.resource = kgsl_3d0_resources,
.dev = {
.platform_data = &kgsl_3d0_pdata,
},
};
void __init apq8064_init_gpu(void)
{
platform_device_register(&device_kgsl_3d0);
}
/* Copyright (c) 2009-2010, Code Aurora Forum. All rights reserved.
* Copyright (c) 2012, LGE Inc.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
* only version 2 as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301, USA.
*
*/
#include <linux/kernel.h>
#include <linux/gpio.h>
#include <linux/platform_device.h>
#include <linux/gpio_event.h>
#include <mach/vreg.h>
#include <mach/rpc_server_handset.h>
#include <mach/board.h>
/* keypad */
#include <linux/mfd/pm8xxx/pm8921.h>
/* i2c */
#include <linux/regulator/consumer.h>
#include <linux/i2c.h>
#ifdef CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4
#include <linux/input/touch_synaptics_rmi4_i2c.h>
#include <linux/input/lge_touch_core.h>
#endif
#include <mach/board_lge.h>
#ifdef CONFIG_TOUCHSCREEN_MMS136
#include <linux/i2c/melfas_ts.h>
#endif
#if defined(CONFIG_RMI4_I2C)
#include <linux/rmi.h>
#endif
#include "board-mako.h"
/* TOUCH GPIOS */
#define SYNAPTICS_TS_I2C_SDA 8
#define SYNAPTICS_TS_I2C_SCL 9
#define SYNAPTICS_TS_I2C_INT_GPIO 6
#define TOUCH_RESET 33
#define TOUCH_FW_VERSION 1
/* touch screen device */
#define APQ8064_GSBI3_QUP_I2C_BUS_ID 3
#if defined(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4)
int synaptics_t1320_power_on(int on)
{
int rc = -EINVAL;
static struct regulator *vreg_l15;
static struct regulator *vreg_l22;
vreg_l15 = regulator_get(NULL, "8921_l15"); //3.3V_TOUCH_VDD, VREG_L15: 2.75 ~ 3.3
if (IS_ERR(vreg_l15)) {
pr_err("%s: regulator get of 8921_l15 failed (%ld)\n", __func__,
PTR_ERR(vreg_l15));
rc = PTR_ERR(vreg_l15);
return rc;
}
vreg_l22 = regulator_get(NULL, "8921_l22"); //1.8V_TOUCH_IO, VREG_L22: 1.7 ~ 2.85
if (IS_ERR(vreg_l22)) {
pr_err("%s: regulator get of 8921_l22 failed (%ld)\n", __func__,
PTR_ERR(vreg_l22));
rc = PTR_ERR(vreg_l22);
return rc;
}
rc = regulator_set_voltage(vreg_l15, 3300000, 3300000);
rc = regulator_set_voltage(vreg_l22, 1800000, 1800000);
if (on) {
printk("[Touch D]touch enable\n");
regulator_enable(vreg_l15);
regulator_enable(vreg_l22);
} else {
printk("[Touch D]touch disable\n");
regulator_disable(vreg_l15);
regulator_disable(vreg_l22);
}
if (rc < 0) {
printk(KERN_INFO "[Touch D] %s: cannot request GPIO\n",
__func__);
return rc;
}
return rc;
}
static struct touch_power_module touch_pwr = {
.use_regulator = 0,
.vdd = "8921_l15",
.vdd_voltage = 3300000,
.vio = "8921_l22",
.vio_voltage = 1800000,
.power = synaptics_t1320_power_on,
};
static struct touch_device_caps touch_caps = {
.button_support = 1,
.y_button_boundary = 0,
.number_of_button = 3,
.button_name = {KEY_BACK, KEY_HOMEPAGE, KEY_MENU},
.button_margin = 0,
.is_width_supported = 1,
.is_pressure_supported = 1,
.is_id_supported = 1,
.max_width = 15,
.max_pressure = 0xFF,
.max_id = 10,
.lcd_x = 768,
.lcd_y = 1280,
.x_max = 1100,
.y_max = 1900,
};
static struct touch_operation_role touch_role = {
.operation_mode = INTERRUPT_MODE,
.key_type = TOUCH_HARD_KEY,
.report_mode = CONTINUOUS_REPORT_MODE,
.delta_pos_threshold = 0,
.orientation = 0,
.report_period = 10000000,
.booting_delay = 400,
.reset_delay = 20,
.suspend_pwr = POWER_OFF,
.resume_pwr = POWER_ON,
.jitter_filter_enable = 1,
.jitter_curr_ratio = 30,
.accuracy_filter_enable = 1,
.irqflags = IRQF_TRIGGER_FALLING,
#if defined(CONFIG_TOUCH_REG_MAP_TM2000) || defined(CONFIG_TOUCH_REG_MAP_TM2372)
.show_touches = 0,
.pointer_location = 0,
#endif
};
static struct touch_platform_data mako_ts_data = {
.int_pin = SYNAPTICS_TS_I2C_INT_GPIO,
.reset_pin = TOUCH_RESET,
.maker = "Synaptics",
.caps = &touch_caps,
.role = &touch_role,
.pwr = &touch_pwr,
};
static struct i2c_board_info synaptics_ts_info[] = {
[0] = {
I2C_BOARD_INFO(LGE_TOUCH_NAME, 0x20),
.platform_data = &mako_ts_data,
.irq = MSM_GPIO_TO_INT(SYNAPTICS_TS_I2C_INT_GPIO),
},
};
#endif
#if defined(CONFIG_RMI4_I2C)
struct syna_gpio_data {
u16 gpio_number;
char *gpio_name;
};
static int synaptics_touchpad_gpio_setup(void *gpio_data, bool configure)
{
int rc = -EINVAL;
static struct regulator *vreg_l15;
static struct regulator *vreg_l22;
struct syna_gpio_data *data = gpio_data;
pr_err("%s: [Touch D] S1 \n", __func__);
/* Touch IC Power On */
vreg_l15 = regulator_get(NULL, "8921_l15"); //3.3V_TOUCH_VDD, VREG_L15: 2.75 ~ 3.3
if (IS_ERR(vreg_l15)) {
pr_err("%s: regulator get of 8921_l15 failed (%ld)\n", __func__,
PTR_ERR(vreg_l15));
rc = PTR_ERR(vreg_l15);
return rc;
}
pr_err("%s: [Touch D] S2 \n", __func__);
vreg_l22 = regulator_get(NULL, "8921_l22"); //1.8V_TOUCH_IO, VREG_L22: 1.7 ~ 2.85
if (IS_ERR(vreg_l22)) {
pr_err("%s: regulator get of 8921_l22 failed (%ld)\n", __func__,
PTR_ERR(vreg_l22));
rc = PTR_ERR(vreg_l22);
return rc;
}
pr_err("%s: [Touch D] S3 \n", __func__);
rc = regulator_set_voltage(vreg_l15, 3300000, 3300000);
rc = regulator_set_voltage(vreg_l22, 1800000, 1800000);
regulator_enable(vreg_l15);
regulator_enable(vreg_l22);
if (configure) {
rc = gpio_request(data->gpio_number, "rmi4_attn");
if (rc) {
pr_err("%s: Failed to get attn gpio %d. Code: %d.",
__func__, data->gpio_number, rc);
return rc;
}
gpio_tlmm_config(GPIO_CFG(data->gpio_number, 0, GPIO_CFG_INPUT,
GPIO_CFG_PULL_UP, GPIO_CFG_6MA),
GPIO_CFG_ENABLE);
rc = gpio_direction_input(data->gpio_number);
if (rc) {
pr_err("%s: Failed to setup attn gpio %d. Code: %d.",
__func__, data->gpio_number, rc);
gpio_free(data->gpio_number);
}
} else {
pr_warn("%s: No way to deconfigure gpio %d.",
__func__, data->gpio_number);
}
if (rc < 0) {
printk(KERN_INFO "[Touch D] %s: cannot request GPIO\n",
__func__);
return rc;
}
printk("[Touch D]synaptics_touchpad_gpio_setup -- \n");
return rc;
}
#define AXIS_ALIGNMENT { \
.swap_axes = false, \
.flip_x = false, \
.flip_y = false, \
.clip_X_low = 0, \
.clip_Y_low = 0, \
.offset_X = 0, \
.offset_Y = 0, \
}
#define TM2144_ADDR 0x20
#define TM2144_ATTN 6
static unsigned char tm2144_button_codes[] = {
KEY_BACK, KEY_HOMEPAGE, KEY_MENU
};
static struct rmi_f1a_button_map tm2144_button_map = {
.nbuttons = ARRAY_SIZE(tm2144_button_codes),
.map = tm2144_button_codes,
};
static struct syna_gpio_data tm2144_gpiodata = {
.gpio_number = TM2144_ATTN,
.gpio_name = "ts_int.gpio_6",
};
static struct rmi_device_platform_data tm2144_platformdata = {
.driver_name = "rmi_generic",
.sensor_name = "TM2144",
.attn_gpio = TM2144_ATTN,
.attn_polarity = RMI_ATTN_ACTIVE_LOW,
.gpio_data = &tm2144_gpiodata,
.gpio_config = synaptics_touchpad_gpio_setup,
.axis_align = AXIS_ALIGNMENT,
.f1a_button_map = &tm2144_button_map,
.reset_delay_ms = 100,
};
static struct i2c_board_info synaptics_ds4_rmi_info[] = {
[0] = {
I2C_BOARD_INFO("rmi_i2c", TM2144_ADDR),
.platform_data = &tm2144_platformdata,
},
};
#endif
/* common function */
void __init apq8064_init_input(void)
{
#if defined(CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI4)
printk(KERN_INFO "[Touch D] %s: NOT DCM KDDI, reg synaptics driver \n",
__func__);
i2c_register_board_info(APQ8064_GSBI3_QUP_I2C_BUS_ID,
&synaptics_ts_info[0], 1);
#endif
/* Wireless Debugging Porting */
#if defined(CONFIG_RMI4_I2C)
i2c_register_board_info(APQ8064_GSBI3_QUP_I2C_BUS_ID,
&synaptics_ds4_rmi_info[0], 1);
#endif
}
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment