mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
Merge remote-tracking branch 'origin/develop-3.0' into develop-3.0-jb
This commit is contained in:
commit
728ae3fd2c
407
arch/arm/configs/rk30_ds1001b_defconfig
Normal file
407
arch/arm/configs/rk30_ds1001b_defconfig
Normal file
|
|
@ -0,0 +1,407 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_KERNEL_LZO=y
|
||||
CONFIG_LOG_BUF_SHIFT=19
|
||||
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_BLK_DEV_INITRD=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_PANIC_TIMEOUT=1
|
||||
# CONFIG_SYSCTL_SYSCALL is not set
|
||||
# CONFIG_ELF_CORE is not set
|
||||
CONFIG_ASHMEM=y
|
||||
# CONFIG_AIO is not set
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_ARCH_RK30=y
|
||||
CONFIG_DDR_SDRAM_FREQ=400
|
||||
CONFIG_WIFI_CONTROL_FUNC=y
|
||||
CONFIG_MACH_RK30_DS1001B=y
|
||||
# CONFIG_SWP_EMULATE is not set
|
||||
CONFIG_FIQ_DEBUGGER=y
|
||||
CONFIG_FIQ_DEBUGGER_NO_SLEEP=y
|
||||
CONFIG_FIQ_DEBUGGER_CONSOLE=y
|
||||
CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_SMP=y
|
||||
# CONFIG_SMP_ON_UP is not set
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_COMPACTION=y
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyFIQ0 androidboot.console=ttyFIQ0 init=/init"
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_HOTPLUG=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_WAKELOCK=y
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_SUSPEND_TIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_INET_ESP=y
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IPV6_PRIVACY=y
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_IPV6_OPTIMISTIC_DAD=y
|
||||
CONFIG_INET6_AH=y
|
||||
CONFIG_INET6_ESP=y
|
||||
CONFIG_INET6_IPCOMP=y
|
||||
CONFIG_IPV6_MIP6=y
|
||||
CONFIG_IPV6_TUNNEL=y
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=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_CONNBYTES=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_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_IP_NF_TARGET_LOG=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_TARGET_LOG=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_BRIDGE=y
|
||||
# CONFIG_BRIDGE_IGMP_SNOOPING is not set
|
||||
CONFIG_PHONET=y
|
||||
CONFIG_NET_SCHED=y
|
||||
CONFIG_NET_SCH_HTB=y
|
||||
CONFIG_NET_SCH_INGRESS=y
|
||||
CONFIG_NET_CLS_U32=y
|
||||
CONFIG_NET_EMATCH=y
|
||||
CONFIG_NET_EMATCH_U32=y
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
CONFIG_NET_ACT_POLICE=y
|
||||
CONFIG_NET_ACT_GACT=y
|
||||
CONFIG_NET_ACT_MIRRED=y
|
||||
CONFIG_BT=y
|
||||
CONFIG_BT_L2CAP=y
|
||||
CONFIG_BT_SCO=y
|
||||
CONFIG_BT_RFCOMM=y
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_BNEP=y
|
||||
CONFIG_BT_HIDP=y
|
||||
CONFIG_BT_HCIUART=y
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_LL=y
|
||||
CONFIG_BT_AUTOSLEEP=y
|
||||
CONFIG_RFKILL=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_NAND_IDS=y
|
||||
CONFIG_MTD_RKNAND=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_MISC_DEVICES=y
|
||||
CONFIG_UID_STAT=y
|
||||
CONFIG_APANIC=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
CONFIG_DM_CRYPT=y
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_PHYLIB=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
CONFIG_WLAN_80211=y
|
||||
CONFIG_RKWIFI=y
|
||||
CONFIG_RK903=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_ASYNC=y
|
||||
CONFIG_PPP_SYNC_TTY=y
|
||||
CONFIG_PPP_DEFLATE=y
|
||||
CONFIG_PPP_BSDCOMP=y
|
||||
CONFIG_PPP_MPPE=y
|
||||
CONFIG_PPPOLAC=y
|
||||
CONFIG_PPPOPNS=y
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_KEYRESET=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
CONFIG_INPUT_TABLET=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_GT8XX=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_KEYCHORD=y
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
CONFIG_MAG_SENSORS=y
|
||||
CONFIG_G_SENSOR_DEVICE=y
|
||||
CONFIG_GS_MMA8452=y
|
||||
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_CONSOLE_TRANSLATIONS is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_RK29=y
|
||||
CONFIG_UART0_RK29=y
|
||||
CONFIG_UART0_CTS_RTS_RK29=y
|
||||
CONFIG_UART3_RK29=y
|
||||
CONFIG_UART3_CTS_RTS_RK29=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
# CONFIG_I2C_COMPAT is not set
|
||||
CONFIG_I2C0_CONTROLLER_RK30=y
|
||||
CONFIG_I2C1_CONTROLLER_RK30=y
|
||||
CONFIG_I2C2_CONTROLLER_RK30=y
|
||||
CONFIG_I2C3_CONTROLLER_RK30=y
|
||||
CONFIG_I2C4_CONTROLLER_RK30=y
|
||||
CONFIG_GPIO_WM831X=y
|
||||
CONFIG_EXPANDED_GPIO_NUM=0
|
||||
CONFIG_EXPANDED_GPIO_IRQ_NUM=0
|
||||
CONFIG_SPI_FPGA_GPIO_NUM=0
|
||||
CONFIG_SPI_FPGA_GPIO_IRQ_NUM=0
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_BATTERY_RK30_ADC=y
|
||||
CONFIG_BATTERY_RK30_AC_CHARGE=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_MFD_WM831X_I2C=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_WM831X=y
|
||||
CONFIG_MEDIA_SUPPORT=y
|
||||
CONFIG_VIDEO_DEV=y
|
||||
CONFIG_SOC_CAMERA=y
|
||||
CONFIG_SOC_CAMERA_OV2655=y
|
||||
CONFIG_VIDEO_RK29=y
|
||||
CONFIG_VIDEO_RK29_CAMMEM_ION=y
|
||||
CONFIG_ION=y
|
||||
CONFIG_ION_ROCKCHIP=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||
CONFIG_DISPLAY_SUPPORT=y
|
||||
CONFIG_LCD_B101EW05=y
|
||||
CONFIG_FB_ROCKCHIP=y
|
||||
CONFIG_LCDC_RK30=y
|
||||
CONFIG_HDMI_RK30=y
|
||||
CONFIG_RGA_RK30=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
# CONFIG_SND_ARM is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_RK29_SOC=y
|
||||
CONFIG_SND_I2S_DMA_EVENT_STATIC=y
|
||||
CONFIG_SND_RK29_SOC_RT5631=y
|
||||
CONFIG_SND_RK29_CODEC_SOC_SLAVE=y
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_ACRUX=y
|
||||
CONFIG_HID_ACRUX_FF=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
CONFIG_HID_CHERRY=y
|
||||
CONFIG_HID_CHICONY=y
|
||||
CONFIG_HID_CYPRESS=y
|
||||
CONFIG_HID_DRAGONRISE=y
|
||||
CONFIG_DRAGONRISE_FF=y
|
||||
CONFIG_HID_EMS_FF=y
|
||||
CONFIG_HID_ELECOM=y
|
||||
CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_KEYTOUCH=y
|
||||
CONFIG_HID_KYE=y
|
||||
CONFIG_HID_UCLOGIC=y
|
||||
CONFIG_HID_WALTOP=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
CONFIG_HID_TWINHAN=y
|
||||
CONFIG_HID_KENSINGTON=y
|
||||
CONFIG_HID_LCPOWER=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
CONFIG_LOGITECH_FF=y
|
||||
CONFIG_LOGIRUMBLEPAD2_FF=y
|
||||
CONFIG_LOGIG940_FF=y
|
||||
CONFIG_LOGIWII_FF=y
|
||||
CONFIG_HID_MAGICMOUSE=y
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
CONFIG_HID_MONTEREY=y
|
||||
CONFIG_HID_MULTITOUCH=y
|
||||
CONFIG_HID_NTRIG=y
|
||||
CONFIG_HID_ORTEK=y
|
||||
CONFIG_HID_PANTHERLORD=y
|
||||
CONFIG_PANTHERLORD_FF=y
|
||||
CONFIG_HID_PETALYNX=y
|
||||
CONFIG_HID_PICOLCD=y
|
||||
CONFIG_HID_QUANTA=y
|
||||
CONFIG_HID_ROCCAT_ARVO=y
|
||||
CONFIG_HID_ROCCAT_KONE=y
|
||||
CONFIG_HID_ROCCAT_KONEPLUS=y
|
||||
CONFIG_HID_ROCCAT_KOVAPLUS=y
|
||||
CONFIG_HID_ROCCAT_PYRA=y
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SONY=y
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
CONFIG_HID_GREENASIA=y
|
||||
CONFIG_GREENASIA_FF=y
|
||||
CONFIG_HID_SMARTJOYPLUS=y
|
||||
CONFIG_SMARTJOYPLUS_FF=y
|
||||
CONFIG_HID_TOPSEED=y
|
||||
CONFIG_HID_THRUSTMASTER=y
|
||||
CONFIG_THRUSTMASTER_FF=y
|
||||
CONFIG_HID_WACOM=y
|
||||
CONFIG_HID_ZEROPLUS=y
|
||||
CONFIG_ZEROPLUS_FF=y
|
||||
CONFIG_HID_ZYDACRON=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_OTG_BLACKLIST_HUB=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
CONFIG_USB_SERIAL_OPTION=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB20_HOST=y
|
||||
CONFIG_USB20_OTG=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_UNSAFE_RESUME=y
|
||||
CONFIG_MMC_EMBEDDED_SDIO=y
|
||||
CONFIG_MMC_PARANOID_SD_INIT=y
|
||||
CONFIG_SDMMC_RK29=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_SWITCH=y
|
||||
CONFIG_SWITCH_GPIO=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_WM831X=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_ANDROID=y
|
||||
CONFIG_ANDROID_BINDER_IPC=y
|
||||
CONFIG_ANDROID_LOGGER=y
|
||||
CONFIG_ANDROID_TIMED_GPIO=y
|
||||
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
|
||||
# CONFIG_CMMB is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_EXT4_FS=y
|
||||
# CONFIG_EXT4_FS_XATTR is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_FUSE_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_EFI_PARTITION=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
CONFIG_SCHEDSTATS=y
|
||||
CONFIG_TIMER_STATS=y
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
# CONFIG_FTRACE is not set
|
||||
CONFIG_CRYPTO_TWOFISH=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
412
arch/arm/configs/rk30_phonepad_defconfig
Normal file
412
arch/arm/configs/rk30_phonepad_defconfig
Normal file
|
|
@ -0,0 +1,412 @@
|
|||
CONFIG_EXPERIMENTAL=y
|
||||
# CONFIG_LOCALVERSION_AUTO is not set
|
||||
CONFIG_KERNEL_LZO=y
|
||||
CONFIG_LOG_BUF_SHIFT=19
|
||||
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_BLK_DEV_INITRD=y
|
||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||
CONFIG_PANIC_TIMEOUT=1
|
||||
# CONFIG_SYSCTL_SYSCALL is not set
|
||||
# CONFIG_ELF_CORE is not set
|
||||
CONFIG_ASHMEM=y
|
||||
# CONFIG_AIO is not set
|
||||
CONFIG_EMBEDDED=y
|
||||
# CONFIG_SLUB_DEBUG is not set
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
CONFIG_MODULE_FORCE_UNLOAD=y
|
||||
CONFIG_ARCH_RK30=y
|
||||
CONFIG_WIFI_CONTROL_FUNC=y
|
||||
CONFIG_MACH_RK30_PHONE_PAD=y
|
||||
# CONFIG_SWP_EMULATE is not set
|
||||
CONFIG_FIQ_DEBUGGER=y
|
||||
CONFIG_FIQ_DEBUGGER_NO_SLEEP=y
|
||||
CONFIG_FIQ_DEBUGGER_CONSOLE=y
|
||||
CONFIG_FIQ_DEBUGGER_CONSOLE_DEFAULT_ENABLE=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_HIGH_RES_TIMERS=y
|
||||
CONFIG_SMP=y
|
||||
# CONFIG_SMP_ON_UP is not set
|
||||
CONFIG_NR_CPUS=2
|
||||
CONFIG_PREEMPT=y
|
||||
CONFIG_AEABI=y
|
||||
# CONFIG_OABI_COMPAT is not set
|
||||
CONFIG_HIGHMEM=y
|
||||
CONFIG_COMPACTION=y
|
||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=32768
|
||||
CONFIG_ZBOOT_ROM_TEXT=0x0
|
||||
CONFIG_ZBOOT_ROM_BSS=0x0
|
||||
CONFIG_CMDLINE="console=ttyFIQ0 androidboot.console=ttyFIQ0 init=/init"
|
||||
CONFIG_CPU_FREQ=y
|
||||
CONFIG_CPU_FREQ_DEFAULT_GOV_INTERACTIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
|
||||
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
|
||||
CONFIG_CPU_FREQ_GOV_USERSPACE=y
|
||||
CONFIG_CPU_FREQ_GOV_ONDEMAND=y
|
||||
CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
|
||||
CONFIG_CPU_FREQ_GOV_HOTPLUG=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_VFP=y
|
||||
CONFIG_NEON=y
|
||||
CONFIG_WAKELOCK=y
|
||||
CONFIG_PM_RUNTIME=y
|
||||
CONFIG_SUSPEND_TIME=y
|
||||
CONFIG_NET=y
|
||||
CONFIG_PACKET=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_NET_KEY=y
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
CONFIG_IP_ADVANCED_ROUTER=y
|
||||
CONFIG_IP_MULTIPLE_TABLES=y
|
||||
CONFIG_INET_ESP=y
|
||||
# CONFIG_INET_XFRM_MODE_BEET is not set
|
||||
# CONFIG_INET_LRO is not set
|
||||
CONFIG_IPV6=y
|
||||
CONFIG_IPV6_PRIVACY=y
|
||||
CONFIG_IPV6_ROUTER_PREF=y
|
||||
CONFIG_IPV6_OPTIMISTIC_DAD=y
|
||||
CONFIG_INET6_AH=y
|
||||
CONFIG_INET6_ESP=y
|
||||
CONFIG_INET6_IPCOMP=y
|
||||
CONFIG_IPV6_MIP6=y
|
||||
CONFIG_IPV6_TUNNEL=y
|
||||
CONFIG_IPV6_MULTIPLE_TABLES=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_CONNBYTES=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_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_IP_NF_TARGET_LOG=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_TARGET_LOG=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_BRIDGE=y
|
||||
# CONFIG_BRIDGE_IGMP_SNOOPING is not set
|
||||
CONFIG_PHONET=y
|
||||
CONFIG_NET_SCHED=y
|
||||
CONFIG_NET_SCH_HTB=y
|
||||
CONFIG_NET_SCH_INGRESS=y
|
||||
CONFIG_NET_CLS_U32=y
|
||||
CONFIG_NET_EMATCH=y
|
||||
CONFIG_NET_EMATCH_U32=y
|
||||
CONFIG_NET_CLS_ACT=y
|
||||
CONFIG_NET_ACT_POLICE=y
|
||||
CONFIG_NET_ACT_GACT=y
|
||||
CONFIG_NET_ACT_MIRRED=y
|
||||
CONFIG_BT=y
|
||||
CONFIG_BT_L2CAP=y
|
||||
CONFIG_BT_SCO=y
|
||||
CONFIG_BT_RFCOMM=y
|
||||
CONFIG_BT_RFCOMM_TTY=y
|
||||
CONFIG_BT_BNEP=y
|
||||
CONFIG_BT_HIDP=y
|
||||
CONFIG_BT_HCIUART=y
|
||||
CONFIG_BT_HCIUART_H4=y
|
||||
CONFIG_BT_HCIUART_LL=y
|
||||
CONFIG_BT_HCIBCM4325=y
|
||||
CONFIG_BT_AUTOSLEEP=y
|
||||
CONFIG_RFKILL=y
|
||||
CONFIG_RFKILL_RK=y
|
||||
CONFIG_DEVTMPFS=y
|
||||
CONFIG_DEVTMPFS_MOUNT=y
|
||||
# CONFIG_FIRMWARE_IN_KERNEL is not set
|
||||
CONFIG_MTD=y
|
||||
CONFIG_MTD_CMDLINE_PARTS=y
|
||||
CONFIG_MTD_CHAR=y
|
||||
CONFIG_MTD_BLOCK=y
|
||||
CONFIG_MTD_NAND_IDS=y
|
||||
CONFIG_MTD_RKNAND=y
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_MISC_DEVICES=y
|
||||
CONFIG_UID_STAT=y
|
||||
CONFIG_APANIC=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_SCSI_MULTI_LUN=y
|
||||
CONFIG_MD=y
|
||||
CONFIG_BLK_DEV_DM=y
|
||||
CONFIG_DM_CRYPT=y
|
||||
CONFIG_DM_UEVENT=y
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_PHYLIB=y
|
||||
# CONFIG_NETDEV_1000 is not set
|
||||
# CONFIG_NETDEV_10000 is not set
|
||||
CONFIG_WLAN_80211=y
|
||||
CONFIG_RKWIFI=y
|
||||
CONFIG_USB_USBNET=y
|
||||
CONFIG_PPP=y
|
||||
CONFIG_PPP_MULTILINK=y
|
||||
CONFIG_PPP_FILTER=y
|
||||
CONFIG_PPP_ASYNC=y
|
||||
CONFIG_PPP_SYNC_TTY=y
|
||||
CONFIG_PPP_DEFLATE=y
|
||||
CONFIG_PPP_BSDCOMP=y
|
||||
CONFIG_PPP_MPPE=y
|
||||
CONFIG_PPPOLAC=y
|
||||
CONFIG_PPPOPNS=y
|
||||
# CONFIG_INPUT_MOUSEDEV is not set
|
||||
CONFIG_INPUT_EVDEV=y
|
||||
CONFIG_INPUT_KEYRESET=y
|
||||
# CONFIG_KEYBOARD_ATKBD is not set
|
||||
# CONFIG_INPUT_MOUSE is not set
|
||||
CONFIG_INPUT_JOYSTICK=y
|
||||
CONFIG_INPUT_TABLET=y
|
||||
CONFIG_INPUT_TOUCHSCREEN=y
|
||||
CONFIG_TOUCHSCREEN_GT8XX=y
|
||||
CONFIG_INPUT_MISC=y
|
||||
CONFIG_INPUT_KEYCHORD=y
|
||||
CONFIG_INPUT_UINPUT=y
|
||||
CONFIG_COMPASS_AK8975=y
|
||||
CONFIG_GS_MMA8452=y
|
||||
CONFIG_GYRO_L3G4200D=y
|
||||
CONFIG_LS_CM3217=y
|
||||
CONFIG_SENSOR_DEVICE=y
|
||||
CONFIG_GSENSOR_DEVICE=y
|
||||
CONFIG_COMPASS_DEVICE=y
|
||||
CONFIG_GYROSCOPE_DEVICE=y
|
||||
CONFIG_LIGHT_DEVICE=y
|
||||
# CONFIG_SERIO is not set
|
||||
# CONFIG_CONSOLE_TRANSLATIONS is not set
|
||||
# CONFIG_LEGACY_PTYS is not set
|
||||
CONFIG_SERIAL_RK29=y
|
||||
CONFIG_UART0_RK29=y
|
||||
CONFIG_UART0_CTS_RTS_RK29=y
|
||||
CONFIG_UART3_RK29=y
|
||||
CONFIG_UART3_CTS_RTS_RK29=y
|
||||
# CONFIG_HW_RANDOM is not set
|
||||
CONFIG_I2C=y
|
||||
# CONFIG_I2C_COMPAT is not set
|
||||
CONFIG_I2C0_CONTROLLER_RK30=y
|
||||
CONFIG_I2C1_CONTROLLER_RK30=y
|
||||
CONFIG_I2C2_CONTROLLER_RK30=y
|
||||
CONFIG_I2C3_CONTROLLER_RK30=y
|
||||
CONFIG_I2C4_CONTROLLER_RK30=y
|
||||
CONFIG_GPIO_WM831X=y
|
||||
CONFIG_EXPANDED_GPIO_NUM=0
|
||||
CONFIG_EXPANDED_GPIO_IRQ_NUM=0
|
||||
CONFIG_SPI_FPGA_GPIO_NUM=0
|
||||
CONFIG_SPI_FPGA_GPIO_IRQ_NUM=0
|
||||
CONFIG_POWER_SUPPLY=y
|
||||
CONFIG_TEST_POWER=y
|
||||
# CONFIG_HWMON is not set
|
||||
CONFIG_MFD_WM831X_I2C=y
|
||||
CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_WM831X=y
|
||||
CONFIG_MEDIA_SUPPORT=y
|
||||
CONFIG_VIDEO_DEV=y
|
||||
CONFIG_SOC_CAMERA=y
|
||||
CONFIG_SOC_CAMERA_OV2659=y
|
||||
CONFIG_SOC_CAMERA_OV5642=y
|
||||
CONFIG_VIDEO_RK29=y
|
||||
CONFIG_VIDEO_RK29_CAMMEM_ION=y
|
||||
CONFIG_ION=y
|
||||
CONFIG_ION_ROCKCHIP=y
|
||||
CONFIG_FB=y
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
CONFIG_BACKLIGHT_CLASS_DEVICE=y
|
||||
# CONFIG_BACKLIGHT_GENERIC is not set
|
||||
CONFIG_DISPLAY_SUPPORT=y
|
||||
CONFIG_LCD_B101EW05=y
|
||||
CONFIG_FB_ROCKCHIP=y
|
||||
CONFIG_LCDC_RK30=y
|
||||
CONFIG_HDMI_RK30=y
|
||||
CONFIG_RGA_RK30=y
|
||||
CONFIG_LOGO=y
|
||||
# CONFIG_LOGO_LINUX_MONO is not set
|
||||
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||
CONFIG_SOUND=y
|
||||
CONFIG_SND=y
|
||||
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||
# CONFIG_SND_DRIVERS is not set
|
||||
# CONFIG_SND_ARM is not set
|
||||
CONFIG_SND_SOC=y
|
||||
CONFIG_SND_RK29_SOC=y
|
||||
CONFIG_SND_I2S_DMA_EVENT_STATIC=y
|
||||
CONFIG_SND_RK29_SOC_RT5631=y
|
||||
CONFIG_SND_RK29_CODEC_SOC_SLAVE=y
|
||||
CONFIG_HID_A4TECH=y
|
||||
CONFIG_HID_ACRUX=y
|
||||
CONFIG_HID_ACRUX_FF=y
|
||||
CONFIG_HID_APPLE=y
|
||||
CONFIG_HID_BELKIN=y
|
||||
CONFIG_HID_CHERRY=y
|
||||
CONFIG_HID_CHICONY=y
|
||||
CONFIG_HID_CYPRESS=y
|
||||
CONFIG_HID_DRAGONRISE=y
|
||||
CONFIG_DRAGONRISE_FF=y
|
||||
CONFIG_HID_EMS_FF=y
|
||||
CONFIG_HID_ELECOM=y
|
||||
CONFIG_HID_EZKEY=y
|
||||
CONFIG_HID_KEYTOUCH=y
|
||||
CONFIG_HID_KYE=y
|
||||
CONFIG_HID_UCLOGIC=y
|
||||
CONFIG_HID_WALTOP=y
|
||||
CONFIG_HID_GYRATION=y
|
||||
CONFIG_HID_TWINHAN=y
|
||||
CONFIG_HID_KENSINGTON=y
|
||||
CONFIG_HID_LCPOWER=y
|
||||
CONFIG_HID_LOGITECH=y
|
||||
CONFIG_LOGITECH_FF=y
|
||||
CONFIG_LOGIRUMBLEPAD2_FF=y
|
||||
CONFIG_LOGIG940_FF=y
|
||||
CONFIG_LOGIWII_FF=y
|
||||
CONFIG_HID_MAGICMOUSE=y
|
||||
CONFIG_HID_MICROSOFT=y
|
||||
CONFIG_HID_MONTEREY=y
|
||||
CONFIG_HID_MULTITOUCH=y
|
||||
CONFIG_HID_NTRIG=y
|
||||
CONFIG_HID_ORTEK=y
|
||||
CONFIG_HID_PANTHERLORD=y
|
||||
CONFIG_PANTHERLORD_FF=y
|
||||
CONFIG_HID_PETALYNX=y
|
||||
CONFIG_HID_PICOLCD=y
|
||||
CONFIG_HID_QUANTA=y
|
||||
CONFIG_HID_ROCCAT_ARVO=y
|
||||
CONFIG_HID_ROCCAT_KONE=y
|
||||
CONFIG_HID_ROCCAT_KONEPLUS=y
|
||||
CONFIG_HID_ROCCAT_KOVAPLUS=y
|
||||
CONFIG_HID_ROCCAT_PYRA=y
|
||||
CONFIG_HID_SAMSUNG=y
|
||||
CONFIG_HID_SONY=y
|
||||
CONFIG_HID_SUNPLUS=y
|
||||
CONFIG_HID_GREENASIA=y
|
||||
CONFIG_GREENASIA_FF=y
|
||||
CONFIG_HID_SMARTJOYPLUS=y
|
||||
CONFIG_SMARTJOYPLUS_FF=y
|
||||
CONFIG_HID_TOPSEED=y
|
||||
CONFIG_HID_THRUSTMASTER=y
|
||||
CONFIG_THRUSTMASTER_FF=y
|
||||
CONFIG_HID_WACOM=y
|
||||
CONFIG_HID_ZEROPLUS=y
|
||||
CONFIG_ZEROPLUS_FF=y
|
||||
CONFIG_HID_ZYDACRON=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_OTG_BLACKLIST_HUB=y
|
||||
CONFIG_USB_STORAGE=y
|
||||
CONFIG_USB_SERIAL=y
|
||||
CONFIG_USB_SERIAL_GENERIC=y
|
||||
CONFIG_USB_SERIAL_OPTION=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB20_HOST=y
|
||||
CONFIG_USB20_OTG=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_UNSAFE_RESUME=y
|
||||
CONFIG_MMC_EMBEDDED_SDIO=y
|
||||
CONFIG_MMC_PARANOID_SD_INIT=y
|
||||
CONFIG_SDMMC_RK29=y
|
||||
CONFIG_NEW_LEDS=y
|
||||
CONFIG_LEDS_CLASS=y
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_SWITCH=y
|
||||
CONFIG_SWITCH_GPIO=y
|
||||
CONFIG_RTC_CLASS=y
|
||||
CONFIG_RTC_DRV_WM831X=y
|
||||
CONFIG_STAGING=y
|
||||
CONFIG_ANDROID=y
|
||||
CONFIG_ANDROID_BINDER_IPC=y
|
||||
CONFIG_ANDROID_LOGGER=y
|
||||
CONFIG_ANDROID_TIMED_GPIO=y
|
||||
CONFIG_ANDROID_LOW_MEMORY_KILLER=y
|
||||
# CONFIG_CMMB is not set
|
||||
CONFIG_EXT3_FS=y
|
||||
# CONFIG_EXT3_FS_XATTR is not set
|
||||
CONFIG_EXT4_FS=y
|
||||
# CONFIG_EXT4_FS_XATTR is not set
|
||||
# CONFIG_DNOTIFY is not set
|
||||
CONFIG_FUSE_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_MISC_FILESYSTEMS is not set
|
||||
# CONFIG_NETWORK_FILESYSTEMS is not set
|
||||
CONFIG_PARTITION_ADVANCED=y
|
||||
CONFIG_EFI_PARTITION=y
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NLS_ISO8859_1=y
|
||||
CONFIG_PRINTK_TIME=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
CONFIG_DEBUG_FS=y
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DETECT_HUNG_TASK=y
|
||||
# CONFIG_SCHED_DEBUG is not set
|
||||
CONFIG_SCHEDSTATS=y
|
||||
CONFIG_TIMER_STATS=y
|
||||
# CONFIG_DEBUG_PREEMPT is not set
|
||||
# CONFIG_FTRACE is not set
|
||||
CONFIG_CRYPTO_TWOFISH=y
|
||||
# CONFIG_CRYPTO_ANSI_CPRNG is not set
|
||||
|
|
@ -10,6 +10,12 @@ config MACH_RK30_SDK
|
|||
config MACH_RK3066_SDK
|
||||
bool "RK3066 SDK board"
|
||||
|
||||
config MACH_RK30_DS1001B
|
||||
bool "RK30 DS1001B board"
|
||||
|
||||
config MACH_RK30_PHONE_PAD
|
||||
bool "RK30 smart phone pad board"
|
||||
|
||||
config MACH_RK30_PHONE
|
||||
bool "RK30 smart phone board"
|
||||
|
||||
|
|
|
|||
|
|
@ -23,6 +23,8 @@ obj-$(CONFIG_DDR_FREQ) += ddr_freq.o
|
|||
obj-$(CONFIG_MACH_RK3066_SDK) += board-rk30-sdk.o board-rk30-sdk-key.o
|
||||
obj-$(CONFIG_MACH_RK30_SDK) += board-rk30-sdk.o board-rk30-sdk-key.o
|
||||
obj-$(CONFIG_MACH_RK30_PHONE) += board-rk30-phone.o board-rk30-phone-key.o
|
||||
obj-$(CONFIG_MACH_RK30_PHONE_PAD) += board-rk30-phonepad.o board-rk30-phonepad-key.o board-rk30-phonepad-rfkill.o
|
||||
obj-$(CONFIG_MACH_RK30_PHONE_LOQUAT) += board-rk30-phone-loquat.o board-rk30-phone-loquat-key.o
|
||||
obj-$(CONFIG_MACH_RK30_DS1001B) += board-rk30-ds1001b.o board-rk30-ds1001b-key.o board-rk30-ds1001b-rfkill.o
|
||||
obj-$(CONFIG_MACH_RK30_PHONE_A22) += board-rk30-phone-a22.o board-rk30-phone-a22-key.o
|
||||
|
||||
|
|
|
|||
119
arch/arm/mach-rk30/board-rk30-ds1001b-key.c
Normal file
119
arch/arm/mach-rk30/board-rk30-ds1001b-key.c
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
#include <mach/gpio.h>
|
||||
#include <plat/key.h>
|
||||
|
||||
#define EV_ENCALL KEY_F4
|
||||
#define EV_MENU KEY_F1
|
||||
|
||||
#define PRESS_LEV_LOW 1
|
||||
#define PRESS_LEV_HIGH 0
|
||||
|
||||
static struct rk29_keys_button key_button[] = {
|
||||
#if 0
|
||||
{
|
||||
.desc = "menu",
|
||||
.code = EV_MENU,
|
||||
.gpio = RK30_PIN6_PA0,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "vol+",
|
||||
.code = KEY_VOLUMEUP,
|
||||
.gpio = RK30_PIN6_PA1,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.desc = "vol-",
|
||||
.code = KEY_VOLUMEDOWN,
|
||||
.gpio = RK30_PIN4_PC5,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#if 0
|
||||
{
|
||||
.desc = "home",
|
||||
.code = KEY_HOME,
|
||||
.gpio = RK30_PIN6_PA3,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "search",
|
||||
.code = KEY_SEARCH,
|
||||
.gpio = RK30_PIN6_PA4,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "esc",
|
||||
.code = KEY_BACK,
|
||||
.gpio = RK30_PIN6_PA5,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "sensor",
|
||||
.code = KEY_CAMERA,
|
||||
.gpio = RK30_PIN6_PA6,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.desc = "play",
|
||||
.code = KEY_POWER,
|
||||
.gpio = RK30_PIN6_PA2,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
//.code_long_press = EV_ENCALL,
|
||||
.wakeup = 1,
|
||||
},
|
||||
#if 1
|
||||
{
|
||||
.desc = "vol+",
|
||||
.code = KEY_VOLUMEUP,
|
||||
.adc_value = 1,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#if 0
|
||||
{
|
||||
.desc = "vol-",
|
||||
.code = KEY_VOLUMEUP,
|
||||
.adc_value = 249,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.desc = "menu",
|
||||
.code = EV_MENU,
|
||||
.adc_value = 135,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "home",
|
||||
.code = KEY_HOME,
|
||||
.adc_value = 498,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "esc",
|
||||
.code = KEY_BACK,
|
||||
.adc_value = 333,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#if 0
|
||||
{
|
||||
.desc = "camera",
|
||||
.code = KEY_CAMERA,
|
||||
.adc_value = 827,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
#endif
|
||||
};
|
||||
struct rk29_keys_platform_data rk29_keys_pdata = {
|
||||
.buttons = key_button,
|
||||
.nbuttons = ARRAY_SIZE(key_button),
|
||||
.chn = 1, //chn: 0-7, if do not use ADC,set 'chn' -1
|
||||
};
|
||||
|
||||
439
arch/arm/mach-rk30/board-rk30-ds1001b-rfkill.c
Normal file
439
arch/arm/mach-rk30/board-rk30-ds1001b-rfkill.c
Normal file
|
|
@ -0,0 +1,439 @@
|
|||
/*
|
||||
* Copyright (C) 2010 ROCKCHIP, Inc.
|
||||
* Author: roger_chen <cz@rock-chips.com>
|
||||
*
|
||||
* This program is the bluetooth device bcm4329's driver,
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/rfkill.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/wakelock.h>
|
||||
#include <linux/fs.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <asm/irq.h>
|
||||
#include <mach/iomux.h>
|
||||
#include <linux/wakelock.h>
|
||||
#include <linux/timer.h>
|
||||
#include <mach/board.h>
|
||||
|
||||
#if 0
|
||||
#define DBG(x...) printk(KERN_INFO "[BT_RFKILL]: "x)
|
||||
#else
|
||||
#define DBG(x...)
|
||||
#endif
|
||||
|
||||
#define LOG(x...) printk(KERN_INFO "[BT_RFKILL]: "x)
|
||||
|
||||
#ifdef CONFIG_BCM4329
|
||||
#define WIFI_BT_POWER_TOGGLE 1
|
||||
#else
|
||||
#define WIFI_BT_POWER_TOGGLE 0
|
||||
#endif
|
||||
|
||||
#define BT_WAKE_LOCK_TIMEOUT 10 //s
|
||||
|
||||
#define BT_AUTO_SLEEP_TIMEOUT 3
|
||||
|
||||
/*
|
||||
* IO Configuration for RK29
|
||||
*/
|
||||
#ifdef CONFIG_ARCH_RK29
|
||||
|
||||
#define BT_WAKE_HOST_SUPPORT 0
|
||||
|
||||
/* IO configuration */
|
||||
// BT power pin
|
||||
#define BT_GPIO_POWER RK29_PIN5_PD6
|
||||
#define IOMUX_BT_GPIO_POWER() rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME, GPIO5H_GPIO5D6);
|
||||
|
||||
// BT reset pin
|
||||
#define BT_GPIO_RESET RK29_PIN6_PC4
|
||||
#define IOMUX_BT_GPIO_RESET()
|
||||
|
||||
// BT wakeup pin
|
||||
#define BT_GPIO_WAKE_UP RK29_PIN6_PC5
|
||||
#define IOMUX_BT_GPIO_WAKE_UP()
|
||||
|
||||
// BT wakeup host pin
|
||||
#define BT_GPIO_WAKE_UP_HOST
|
||||
#define IOMUX_BT_GPIO_WAKE_UP_HOST()
|
||||
|
||||
//bt cts paired to uart rts
|
||||
#define UART_RTS RK29_PIN2_PA7
|
||||
#define IOMUX_UART_RTS_GPIO() rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_GPIO2A7)
|
||||
#define IOMUX_UART_RTS() rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_UART2_RTS_N)
|
||||
|
||||
/*
|
||||
* IO Configuration for RK30
|
||||
*/
|
||||
#elif defined (CONFIG_ARCH_RK30)
|
||||
|
||||
#define BT_WAKE_HOST_SUPPORT 1
|
||||
|
||||
/* IO configuration */
|
||||
// BT power pin
|
||||
#define BT_GPIO_POWER RK30_PIN3_PC7
|
||||
#define IOMUX_BT_GPIO_POWER() rk30_mux_api_set(GPIO3C7_SDMMC1WRITEPRT_NAME, GPIO3C_GPIO3C7);
|
||||
|
||||
// BT reset pin
|
||||
#define BT_GPIO_RESET RK30_PIN3_PD1
|
||||
#define IOMUX_BT_GPIO_RESET() rk30_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
|
||||
|
||||
// BT wakeup pin
|
||||
#define BT_GPIO_WAKE_UP RK30_PIN3_PC6
|
||||
#define IOMUX_BT_GPIO_WAKE_UP() rk30_mux_api_set(GPIO3C6_SDMMC1DETECTN_NAME, GPIO3C_GPIO3C6);
|
||||
|
||||
// BT wakeup host pin
|
||||
#define BT_GPIO_WAKE_UP_HOST RK30_PIN6_PA7
|
||||
#define BT_IRQ_WAKE_UP_HOST gpio_to_irq(BT_GPIO_WAKE_UP_HOST)
|
||||
#define IOMUX_BT_GPIO_WAKE_UP_HOST()
|
||||
|
||||
//bt cts paired to uart rts
|
||||
#define UART_RTS RK30_PIN1_PA3
|
||||
#define IOMUX_UART_RTS_GPIO() rk30_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_GPIO1A3)
|
||||
#define IOMUX_UART_RTS() rk30_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_UART0_RTS_N)
|
||||
|
||||
#endif
|
||||
|
||||
struct bt_ctrl
|
||||
{
|
||||
struct rfkill *bt_rfk;
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
struct timer_list tl;
|
||||
bool b_HostWake;
|
||||
struct wake_lock bt_wakelock;
|
||||
#endif
|
||||
};
|
||||
|
||||
static const char bt_name[] =
|
||||
#if defined(CONFIG_RKWIFI)
|
||||
#if defined(CONFIG_RKWIFI_26M)
|
||||
"rk903_26M"
|
||||
#else
|
||||
"rk903"
|
||||
#endif
|
||||
#elif defined(CONFIG_BCM4329)
|
||||
"bcm4329"
|
||||
#elif defined(CONFIG_MV8787)
|
||||
"mv8787"
|
||||
#else
|
||||
"bt_default"
|
||||
#endif
|
||||
;
|
||||
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
extern int rk29sdk_bt_power_state;
|
||||
extern int rk29sdk_wifi_power_state;
|
||||
#endif
|
||||
|
||||
struct bt_ctrl gBtCtrl;
|
||||
struct timer_list bt_sleep_tl;
|
||||
|
||||
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
void resetBtHostSleepTimer(void)
|
||||
{
|
||||
mod_timer(&(gBtCtrl.tl),jiffies + BT_WAKE_LOCK_TIMEOUT*HZ);//再重新设置超时值。
|
||||
}
|
||||
|
||||
void btWakeupHostLock(void)
|
||||
{
|
||||
if(gBtCtrl.b_HostWake == false){
|
||||
DBG("** Lock **\n");
|
||||
wake_lock(&(gBtCtrl.bt_wakelock));
|
||||
gBtCtrl.b_HostWake = true;
|
||||
}
|
||||
}
|
||||
|
||||
void btWakeupHostUnlock(void)
|
||||
{
|
||||
if(gBtCtrl.b_HostWake == true){
|
||||
DBG("** UnLock **\n");
|
||||
wake_unlock(&(gBtCtrl.bt_wakelock)); //让系统睡眠
|
||||
gBtCtrl.b_HostWake = false;
|
||||
}
|
||||
}
|
||||
|
||||
static void timer_hostSleep(unsigned long arg)
|
||||
{
|
||||
DBG("b_HostWake=%d\n", gBtCtrl.b_HostWake);
|
||||
btWakeupHostUnlock();
|
||||
}
|
||||
|
||||
void bcm4325_sleep(unsigned long bSleep);
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static irqreturn_t bcm4329_wake_host_irq(int irq, void *dev)
|
||||
{
|
||||
DBG("%s\n",__FUNCTION__);
|
||||
|
||||
btWakeupHostLock();
|
||||
resetBtHostSleepTimer();
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void rfkill_do_wakeup(struct work_struct *work)
|
||||
{
|
||||
// disable bt wakeup host
|
||||
DBG("** free irq\n");
|
||||
free_irq(BT_IRQ_WAKE_UP_HOST, NULL);
|
||||
|
||||
DBG("Enable UART_RTS\n");
|
||||
gpio_set_value(UART_RTS, GPIO_LOW);
|
||||
IOMUX_UART_RTS();
|
||||
}
|
||||
|
||||
static DECLARE_DELAYED_WORK(wakeup_work, rfkill_do_wakeup);
|
||||
|
||||
static int bcm4329_rfkill_suspend(struct platform_device *pdev, pm_message_t state)
|
||||
{
|
||||
DBG("%s\n",__FUNCTION__);
|
||||
|
||||
cancel_delayed_work(&wakeup_work);
|
||||
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
bcm4325_sleep(1);
|
||||
#endif
|
||||
|
||||
DBG("Disable UART_RTS\n");
|
||||
//To prevent uart to receive bt data when suspended
|
||||
IOMUX_UART_RTS_GPIO();
|
||||
gpio_request(UART_RTS, "uart_rts");
|
||||
gpio_set_value(UART_RTS, GPIO_HIGH);
|
||||
|
||||
// enable bt wakeup host
|
||||
DBG("Request irq for bt wakeup host\n");
|
||||
if (0 == request_irq(BT_IRQ_WAKE_UP_HOST,
|
||||
bcm4329_wake_host_irq,
|
||||
IRQF_TRIGGER_FALLING,
|
||||
"bt_wake",
|
||||
NULL))
|
||||
enable_irq_wake(BT_IRQ_WAKE_UP_HOST);
|
||||
else
|
||||
LOG("Failed to request BT_WAKE_UP_HOST irq\n");
|
||||
|
||||
#ifdef CONFIG_RFKILL_RESET
|
||||
extern void rfkill_set_block(struct rfkill *rfkill, bool blocked);
|
||||
rfkill_set_block(gBtCtrl.bt_rfk, true);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bcm4329_rfkill_resume(struct platform_device *pdev)
|
||||
{
|
||||
DBG("%s\n",__FUNCTION__);
|
||||
|
||||
// 系统退出二级睡眠后需要拉低RTS,从而才允许BT发数据过来
|
||||
// 但是目前发现在resume函数中直接拉低RTS会导致BT数据丢失
|
||||
// 所以延迟1s后再拉低RTS
|
||||
// 系统退出二级睡眠时释放掉BT_IRQ_WAKE_UP_HOST,在睡眠时候再
|
||||
// 次申请,目前发现中断回调函数比resume更晚执行,如果resume
|
||||
// 时直接free掉IRQ,会导致中断回调函数不会被执行,
|
||||
DBG("delay 1s\n");
|
||||
schedule_delayed_work(&wakeup_work, HZ);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define bcm4329_rfkill_suspend NULL
|
||||
#define bcm4329_rfkill_resume NULL
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
void bcm4325_sleep(unsigned long bSleep)
|
||||
{
|
||||
DBG("*** bt sleep: %d ***\n", bSleep);
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
del_timer(&bt_sleep_tl);// cmy: 确保在唤醒BT时,不会因触发bt_sleep_tl而马上睡眠
|
||||
#endif
|
||||
|
||||
IOMUX_BT_GPIO_WAKE_UP();
|
||||
gpio_set_value(BT_GPIO_WAKE_UP, bSleep?GPIO_LOW:GPIO_HIGH);
|
||||
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
if(!bSleep)
|
||||
mod_timer(&bt_sleep_tl, jiffies + BT_AUTO_SLEEP_TIMEOUT*HZ);//再重新设置超时值。
|
||||
#endif
|
||||
}
|
||||
|
||||
static int bcm4329_set_block(void *data, bool blocked)
|
||||
{
|
||||
DBG("set blocked :%d\n", blocked);
|
||||
|
||||
IOMUX_BT_GPIO_POWER();
|
||||
IOMUX_BT_GPIO_RESET();
|
||||
|
||||
if (false == blocked) {
|
||||
gpio_set_value(BT_GPIO_POWER, GPIO_HIGH); /* bt power on */
|
||||
mdelay(20);
|
||||
|
||||
gpio_set_value(BT_GPIO_RESET, GPIO_LOW);
|
||||
mdelay(20);
|
||||
gpio_set_value(BT_GPIO_RESET, GPIO_HIGH); /* bt reset deactive*/
|
||||
|
||||
mdelay(20);
|
||||
bcm4325_sleep(0); // ensure bt is wakeup
|
||||
|
||||
pr_info("bt turn on power\n");
|
||||
} else {
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
if (!rk29sdk_wifi_power_state) {
|
||||
#endif
|
||||
gpio_set_value(BT_GPIO_POWER, GPIO_LOW); /* bt power off */
|
||||
mdelay(20);
|
||||
pr_info("bt shut off power\n");
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
}else {
|
||||
pr_info("bt shouldn't shut off power, wifi is using it!\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
gpio_set_value(BT_GPIO_RESET, GPIO_LOW); /* bt reset active*/
|
||||
mdelay(20);
|
||||
}
|
||||
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
rk29sdk_bt_power_state = !blocked;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct rfkill_ops bcm4329_rfk_ops = {
|
||||
.set_block = bcm4329_set_block,
|
||||
};
|
||||
|
||||
static int __devinit bcm4329_rfkill_probe(struct platform_device *pdev)
|
||||
{
|
||||
int rc = 0;
|
||||
bool default_state = true;
|
||||
|
||||
DBG("Enter %s\n",__FUNCTION__);
|
||||
|
||||
/* default to bluetooth off */
|
||||
bcm4329_set_block(NULL, default_state); /* blocked -> bt off */
|
||||
|
||||
gBtCtrl.bt_rfk = rfkill_alloc(bt_name,
|
||||
NULL,
|
||||
RFKILL_TYPE_BLUETOOTH,
|
||||
&bcm4329_rfk_ops,
|
||||
NULL);
|
||||
|
||||
if (!gBtCtrl.bt_rfk)
|
||||
{
|
||||
LOG("fail to rfkill_allocate\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
rfkill_set_states(gBtCtrl.bt_rfk, default_state, false);
|
||||
|
||||
rc = rfkill_register(gBtCtrl.bt_rfk);
|
||||
if (rc)
|
||||
{
|
||||
LOG("failed to rfkill_register,rc=0x%x\n",rc);
|
||||
rfkill_destroy(gBtCtrl.bt_rfk);
|
||||
}
|
||||
|
||||
gpio_request(BT_GPIO_POWER, NULL);
|
||||
gpio_request(BT_GPIO_RESET, NULL);
|
||||
gpio_request(BT_GPIO_WAKE_UP, NULL);
|
||||
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
init_timer(&bt_sleep_tl);
|
||||
bt_sleep_tl.expires = 0;
|
||||
bt_sleep_tl.function = bcm4325_sleep;
|
||||
bt_sleep_tl.data = 1;
|
||||
add_timer(&bt_sleep_tl);
|
||||
#endif
|
||||
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
init_timer(&(gBtCtrl.tl));
|
||||
gBtCtrl.tl.expires = 0;
|
||||
gBtCtrl.tl.function = timer_hostSleep;
|
||||
add_timer(&(gBtCtrl.tl));
|
||||
gBtCtrl.b_HostWake = false;
|
||||
|
||||
wake_lock_init(&(gBtCtrl.bt_wakelock), WAKE_LOCK_SUSPEND, "bt_wake");
|
||||
|
||||
rc = gpio_request(BT_GPIO_WAKE_UP_HOST, "bt_wake");
|
||||
if (rc) {
|
||||
LOG("Failed to request BT_WAKE_UP_HOST\n");
|
||||
}
|
||||
|
||||
IOMUX_BT_GPIO_WAKE_UP_HOST();
|
||||
gpio_pull_updown(BT_GPIO_WAKE_UP_HOST,GPIOPullUp);
|
||||
#endif
|
||||
|
||||
LOG("bcm4329 module has been initialized,rc=0x%x\n",rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static int __devexit bcm4329_rfkill_remove(struct platform_device *pdev)
|
||||
{
|
||||
if (gBtCtrl.bt_rfk)
|
||||
rfkill_unregister(gBtCtrl.bt_rfk);
|
||||
gBtCtrl.bt_rfk = NULL;
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
del_timer(&(gBtCtrl.tl));//删掉定时器
|
||||
btWakeupHostUnlock();
|
||||
wake_lock_destroy(&(gBtCtrl.bt_wakelock));
|
||||
#endif
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
del_timer(&bt_sleep_tl);
|
||||
#endif
|
||||
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
DBG("Enter %s\n",__FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver bcm4329_rfkill_driver = {
|
||||
.probe = bcm4329_rfkill_probe,
|
||||
.remove = __devexit_p(bcm4329_rfkill_remove),
|
||||
.driver = {
|
||||
.name = "rk29sdk_rfkill",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
.suspend = bcm4329_rfkill_suspend,
|
||||
.resume = bcm4329_rfkill_resume,
|
||||
#endif
|
||||
};
|
||||
|
||||
/*
|
||||
* Module initialization
|
||||
*/
|
||||
static int __init bcm4329_mod_init(void)
|
||||
{
|
||||
int ret;
|
||||
DBG("Enter %s\n",__FUNCTION__);
|
||||
ret = platform_driver_register(&bcm4329_rfkill_driver);
|
||||
LOG("ret=0x%x\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit bcm4329_mod_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&bcm4329_rfkill_driver);
|
||||
}
|
||||
|
||||
module_init(bcm4329_mod_init);
|
||||
module_exit(bcm4329_mod_exit);
|
||||
MODULE_DESCRIPTION("bcm4329 Bluetooth driver");
|
||||
MODULE_AUTHOR("roger_chen cz@rock-chips.com, cmy@rock-chips.com");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
1534
arch/arm/mach-rk30/board-rk30-ds1001b.c
Normal file
1534
arch/arm/mach-rk30/board-rk30-ds1001b.c
Normal file
File diff suppressed because it is too large
Load Diff
146
arch/arm/mach-rk30/board-rk30-phonepad-key.c
Executable file
146
arch/arm/mach-rk30/board-rk30-phonepad-key.c
Executable file
|
|
@ -0,0 +1,146 @@
|
|||
#include <mach/gpio.h>
|
||||
#include <plat/key.h>
|
||||
|
||||
#define EV_ENCALL KEY_F4
|
||||
#define EV_MENU KEY_F1
|
||||
|
||||
#define PRESS_LEV_LOW 1
|
||||
#define PRESS_LEV_HIGH 0
|
||||
|
||||
static struct rk29_keys_button key_button[] = {
|
||||
#if 0
|
||||
{
|
||||
.desc = "menu",
|
||||
.code = EV_MENU,
|
||||
.gpio = RK30_PIN6_PA0,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "vol+",
|
||||
.code = KEY_VOLUMEUP,
|
||||
.gpio = RK30_PIN6_PA1,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.desc = "vol-",
|
||||
.code = KEY_VOLUMEDOWN,
|
||||
.gpio = RK30_PIN4_PC5,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#if 0
|
||||
{
|
||||
.desc = "home",
|
||||
.code = KEY_HOME,
|
||||
.gpio = RK30_PIN6_PA3,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "search",
|
||||
.code = KEY_SEARCH,
|
||||
.gpio = RK30_PIN6_PA4,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "esc",
|
||||
.code = KEY_BACK,
|
||||
.gpio = RK30_PIN6_PA5,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "sensor",
|
||||
.code = KEY_CAMERA,
|
||||
.gpio = RK30_PIN6_PA6,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.desc = "play",
|
||||
.code = KEY_POWER,
|
||||
.gpio = RK30_PIN6_PA2,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
//.code_long_press = EV_ENCALL,
|
||||
.wakeup = 1,
|
||||
},
|
||||
{
|
||||
.desc = "vol+",
|
||||
.code = KEY_VOLUMEUP,
|
||||
.adc_value = 1,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#if 0
|
||||
{
|
||||
.desc = "vol-",
|
||||
.code = KEY_VOLUMEUP,
|
||||
.adc_value = 249,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
#ifdef CONFIG_MACH_RK3066_SDK
|
||||
{
|
||||
.desc = "menu",
|
||||
.code = EV_MENU,
|
||||
.adc_value = 135,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "home",
|
||||
.code = KEY_HOME,
|
||||
.adc_value = 550,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "esc",
|
||||
.code = KEY_BACK,
|
||||
.adc_value = 334,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "camera",
|
||||
.code = KEY_CAMERA,
|
||||
.adc_value = 743,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#else
|
||||
{
|
||||
.desc = "menu",
|
||||
.code = EV_MENU,
|
||||
.adc_value = 155,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "home",
|
||||
.code = KEY_HOME,
|
||||
.adc_value = 630,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "esc",
|
||||
.code = KEY_BACK,
|
||||
.adc_value = 386,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
{
|
||||
.desc = "camera",
|
||||
.code = KEY_CAMERA,
|
||||
.adc_value = 827,
|
||||
.gpio = INVALID_GPIO,
|
||||
.active_low = PRESS_LEV_LOW,
|
||||
},
|
||||
#endif
|
||||
};
|
||||
struct rk29_keys_platform_data rk29_keys_pdata = {
|
||||
.buttons = key_button,
|
||||
.nbuttons = ARRAY_SIZE(key_button),
|
||||
.chn = 1, //chn: 0-7, if do not use ADC,set 'chn' -1
|
||||
};
|
||||
|
||||
449
arch/arm/mach-rk30/board-rk30-phonepad-rfkill.c
Executable file
449
arch/arm/mach-rk30/board-rk30-phonepad-rfkill.c
Executable file
|
|
@ -0,0 +1,449 @@
|
|||
/*
|
||||
* Copyright (C) 2010 ROCKCHIP, Inc.
|
||||
* Author: roger_chen <cz@rock-chips.com>
|
||||
*
|
||||
* This program is the bluetooth device bcm4329's driver,
|
||||
*
|
||||
*/
|
||||
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/rfkill.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/init.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/wakelock.h>
|
||||
#include <linux/fs.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <asm/irq.h>
|
||||
#include <mach/iomux.h>
|
||||
#include <linux/wakelock.h>
|
||||
#include <linux/timer.h>
|
||||
#include <mach/board.h>
|
||||
|
||||
#if 0
|
||||
#define DBG(x...) printk(KERN_INFO "[BT_RFKILL]: "x)
|
||||
#else
|
||||
#define DBG(x...)
|
||||
#endif
|
||||
|
||||
#define LOG(x...) printk(KERN_INFO "[BT_RFKILL]: "x)
|
||||
|
||||
#ifdef CONFIG_BCM4329
|
||||
#define WIFI_BT_POWER_TOGGLE 1
|
||||
#else
|
||||
#define WIFI_BT_POWER_TOGGLE 0
|
||||
#endif
|
||||
|
||||
#define BT_WAKE_LOCK_TIMEOUT 10 //s
|
||||
|
||||
#define BT_AUTO_SLEEP_TIMEOUT 3
|
||||
|
||||
/*
|
||||
* IO Configuration for RK29
|
||||
*/
|
||||
#ifdef CONFIG_ARCH_RK29
|
||||
|
||||
#define BT_WAKE_HOST_SUPPORT 0
|
||||
|
||||
/* IO configuration */
|
||||
// BT power pin
|
||||
#define BT_GPIO_POWER RK29_PIN5_PD6
|
||||
#define IOMUX_BT_GPIO_POWER() rk29_mux_api_set(GPIO5D6_SDMMC1PWREN_NAME, GPIO5H_GPIO5D6);
|
||||
|
||||
// BT reset pin
|
||||
#define BT_GPIO_RESET RK29_PIN6_PC4
|
||||
#define IOMUX_BT_GPIO_RESET()
|
||||
|
||||
// BT wakeup pin
|
||||
#define BT_GPIO_WAKE_UP RK29_PIN6_PC5
|
||||
#define IOMUX_BT_GPIO_WAKE_UP()
|
||||
|
||||
// BT wakeup host pin
|
||||
#define BT_GPIO_WAKE_UP_HOST
|
||||
#define IOMUX_BT_GPIO_WAKE_UP_HOST()
|
||||
|
||||
//bt cts paired to uart rts
|
||||
#define UART_RTS RK29_PIN2_PA7
|
||||
#define IOMUX_UART_RTS_GPIO() rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_GPIO2A7)
|
||||
#define IOMUX_UART_RTS() rk29_mux_api_set(GPIO2A7_UART2RTSN_NAME, GPIO2L_UART2_RTS_N)
|
||||
|
||||
/*
|
||||
* IO Configuration for RK30
|
||||
*/
|
||||
#elif defined (CONFIG_ARCH_RK30)
|
||||
|
||||
#define BT_WAKE_HOST_SUPPORT 1
|
||||
|
||||
/* IO configuration */
|
||||
// BT power pin
|
||||
#define BT_GPIO_POWER RK30_PIN3_PC7
|
||||
#define IOMUX_BT_GPIO_POWER() rk29_mux_api_set(GPIO3C7_SDMMC1WRITEPRT_NAME, GPIO3C_GPIO3C7);
|
||||
|
||||
// BT reset pin
|
||||
#define BT_GPIO_RESET RK30_PIN3_PD1
|
||||
#define IOMUX_BT_GPIO_RESET() rk29_mux_api_set(GPIO3D1_SDMMC1BACKENDPWR_NAME, GPIO3D_GPIO3D1);
|
||||
|
||||
// BT wakeup pin
|
||||
#define BT_GPIO_WAKE_UP RK30_PIN3_PC6
|
||||
#define IOMUX_BT_GPIO_WAKE_UP() rk29_mux_api_set(GPIO3C6_SDMMC1DETECTN_NAME, GPIO3C_GPIO3C6);
|
||||
|
||||
// BT wakeup host pin
|
||||
#define BT_GPIO_WAKE_UP_HOST RK30_PIN6_PA7
|
||||
#define BT_IRQ_WAKE_UP_HOST gpio_to_irq(BT_GPIO_WAKE_UP_HOST)
|
||||
#define IOMUX_BT_GPIO_WAKE_UP_HOST()
|
||||
|
||||
//bt cts paired to uart rts
|
||||
#define UART_RTS RK30_PIN1_PA3
|
||||
#define IOMUX_UART_RTS_GPIO() rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_GPIO1A3)
|
||||
#define IOMUX_UART_RTS() rk29_mux_api_set(GPIO1A3_UART0RTSN_NAME, GPIO1A_UART0_RTS_N)
|
||||
|
||||
#endif
|
||||
|
||||
struct bt_ctrl
|
||||
{
|
||||
struct rfkill *bt_rfk;
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
struct timer_list tl;
|
||||
bool b_HostWake;
|
||||
struct wake_lock bt_wakelock;
|
||||
#endif
|
||||
};
|
||||
|
||||
static const char bt_name[] =
|
||||
#if defined(CONFIG_RKWIFI)
|
||||
#if defined(CONFIG_RKWIFI_26M)
|
||||
"rk903_26M"
|
||||
#else
|
||||
"rk903"
|
||||
#endif
|
||||
#elif defined(CONFIG_BCM4329)
|
||||
"bcm4329"
|
||||
#elif defined(CONFIG_MV8787)
|
||||
"mv8787"
|
||||
#else
|
||||
"bt_default"
|
||||
#endif
|
||||
;
|
||||
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
extern int rk29sdk_bt_power_state;
|
||||
extern int rk29sdk_wifi_power_state;
|
||||
#endif
|
||||
|
||||
struct bt_ctrl gBtCtrl;
|
||||
struct timer_list bt_sleep_tl;
|
||||
|
||||
void bcm4325_sleep(unsigned long bSleep);
|
||||
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
void resetBtHostSleepTimer(void)
|
||||
{
|
||||
mod_timer(&(gBtCtrl.tl),jiffies + BT_WAKE_LOCK_TIMEOUT*HZ);//再重新设置超时值。
|
||||
}
|
||||
|
||||
void btWakeupHostLock(void)
|
||||
{
|
||||
if(gBtCtrl.b_HostWake == false){
|
||||
DBG("** Lock **\n");
|
||||
wake_lock(&(gBtCtrl.bt_wakelock));
|
||||
gBtCtrl.b_HostWake = true;
|
||||
}
|
||||
}
|
||||
|
||||
void btWakeupHostUnlock(void)
|
||||
{
|
||||
if(gBtCtrl.b_HostWake == true){
|
||||
DBG("** UnLock **\n");
|
||||
wake_unlock(&(gBtCtrl.bt_wakelock)); //让系统睡眠
|
||||
gBtCtrl.b_HostWake = false;
|
||||
}
|
||||
}
|
||||
|
||||
static void timer_hostSleep(unsigned long arg)
|
||||
{
|
||||
DBG("b_HostWake=%d\n", gBtCtrl.b_HostWake);
|
||||
btWakeupHostUnlock();
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static irqreturn_t bcm4329_wake_host_irq(int irq, void *dev)
|
||||
{
|
||||
DBG("%s\n",__FUNCTION__);
|
||||
|
||||
btWakeupHostLock();
|
||||
resetBtHostSleepTimer();
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
static void rfkill_do_wakeup(struct work_struct *work)
|
||||
{
|
||||
// disable bt wakeup host
|
||||
DBG("** free irq\n");
|
||||
free_irq(BT_IRQ_WAKE_UP_HOST, NULL);
|
||||
|
||||
DBG("Enable UART_RTS\n");
|
||||
gpio_set_value(UART_RTS, GPIO_LOW);
|
||||
IOMUX_UART_RTS();
|
||||
}
|
||||
|
||||
static DECLARE_DELAYED_WORK(wakeup_work, rfkill_do_wakeup);
|
||||
|
||||
static int bcm4329_rfkill_suspend(struct platform_device *pdev, pm_message_t state)
|
||||
{
|
||||
DBG("%s\n",__FUNCTION__);
|
||||
|
||||
cancel_delayed_work(&wakeup_work);
|
||||
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
bcm4325_sleep(1);
|
||||
#endif
|
||||
|
||||
DBG("Disable UART_RTS\n");
|
||||
//To prevent uart to receive bt data when suspended
|
||||
IOMUX_UART_RTS_GPIO();
|
||||
gpio_request(UART_RTS, "uart_rts");
|
||||
gpio_set_value(UART_RTS, GPIO_HIGH);
|
||||
|
||||
// enable bt wakeup host
|
||||
DBG("Request irq for bt wakeup host\n");
|
||||
if (0 == request_irq(BT_IRQ_WAKE_UP_HOST,
|
||||
bcm4329_wake_host_irq,
|
||||
IRQF_TRIGGER_FALLING,
|
||||
"bt_wake",
|
||||
NULL))
|
||||
enable_irq_wake(BT_IRQ_WAKE_UP_HOST);
|
||||
else
|
||||
LOG("Failed to request BT_WAKE_UP_HOST irq\n");
|
||||
|
||||
#ifdef CONFIG_RFKILL_RESET
|
||||
extern void rfkill_set_block(struct rfkill *rfkill, bool blocked);
|
||||
rfkill_set_block(gBtCtrl.bt_rfk, true);
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bcm4329_rfkill_resume(struct platform_device *pdev)
|
||||
{
|
||||
DBG("%s\n",__FUNCTION__);
|
||||
|
||||
// 系统退出二级睡眠后需要拉低RTS,从而才允许BT发数据过来
|
||||
// 但是目前发现在resume函数中直接拉低RTS会导致BT数据丢失
|
||||
// 所以延迟1s后再拉低RTS
|
||||
// 系统退出二级睡眠时释放掉BT_IRQ_WAKE_UP_HOST,在睡眠时候再
|
||||
// 次申请,目前发现中断回调函数比resume更晚执行,如果resume
|
||||
// 时直接free掉IRQ,会导致中断回调函数不会被执行,
|
||||
DBG("delay 1s\n");
|
||||
schedule_delayed_work(&wakeup_work, HZ);
|
||||
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define bcm4329_rfkill_suspend NULL
|
||||
#define bcm4329_rfkill_resume NULL
|
||||
#endif
|
||||
|
||||
#else
|
||||
#ifdef CONFIG_PM
|
||||
static int bcm4329_rfkill_suspend(struct platform_device *pdev, pm_message_t state)
|
||||
{
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
bcm4325_sleep(1);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
#define bcm4329_rfkill_suspend NULL
|
||||
#endif
|
||||
#define bcm4329_rfkill_resume NULL
|
||||
#endif
|
||||
|
||||
void bcm4325_sleep(unsigned long bSleep)
|
||||
{
|
||||
DBG("*** bt sleep: %d ***\n", bSleep);
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
del_timer(&bt_sleep_tl);// cmy: 确保在唤醒BT时,不会因触发bt_sleep_tl而马上睡眠
|
||||
#endif
|
||||
|
||||
IOMUX_BT_GPIO_WAKE_UP();
|
||||
gpio_set_value(BT_GPIO_WAKE_UP, bSleep?GPIO_LOW:GPIO_HIGH);
|
||||
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
if(!bSleep)
|
||||
mod_timer(&bt_sleep_tl, jiffies + BT_AUTO_SLEEP_TIMEOUT*HZ);//再重新设置超时值。
|
||||
#endif
|
||||
}
|
||||
|
||||
static int bcm4329_set_block(void *data, bool blocked)
|
||||
{
|
||||
DBG("set blocked :%d\n", blocked);
|
||||
|
||||
IOMUX_BT_GPIO_POWER();
|
||||
IOMUX_BT_GPIO_RESET();
|
||||
|
||||
if (false == blocked) {
|
||||
gpio_set_value(BT_GPIO_POWER, GPIO_HIGH); /* bt power on */
|
||||
mdelay(20);
|
||||
|
||||
gpio_set_value(BT_GPIO_RESET, GPIO_LOW);
|
||||
mdelay(20);
|
||||
gpio_set_value(BT_GPIO_RESET, GPIO_HIGH); /* bt reset deactive*/
|
||||
|
||||
mdelay(20);
|
||||
bcm4325_sleep(0); // ensure bt is wakeup
|
||||
|
||||
pr_info("bt turn on power\n");
|
||||
} else {
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
if (!rk29sdk_wifi_power_state) {
|
||||
#endif
|
||||
gpio_set_value(BT_GPIO_POWER, GPIO_LOW); /* bt power off */
|
||||
mdelay(20);
|
||||
pr_info("bt shut off power\n");
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
}else {
|
||||
pr_info("bt shouldn't shut off power, wifi is using it!\n");
|
||||
}
|
||||
#endif
|
||||
|
||||
gpio_set_value(BT_GPIO_RESET, GPIO_LOW); /* bt reset active*/
|
||||
mdelay(20);
|
||||
}
|
||||
|
||||
#if WIFI_BT_POWER_TOGGLE
|
||||
rk29sdk_bt_power_state = !blocked;
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct rfkill_ops bcm4329_rfk_ops = {
|
||||
.set_block = bcm4329_set_block,
|
||||
};
|
||||
|
||||
static int __devinit bcm4329_rfkill_probe(struct platform_device *pdev)
|
||||
{
|
||||
int rc = 0;
|
||||
bool default_state = true;
|
||||
|
||||
DBG("Enter %s\n",__FUNCTION__);
|
||||
|
||||
/* default to bluetooth off */
|
||||
bcm4329_set_block(NULL, default_state); /* blocked -> bt off */
|
||||
|
||||
gBtCtrl.bt_rfk = rfkill_alloc(bt_name,
|
||||
NULL,
|
||||
RFKILL_TYPE_BLUETOOTH,
|
||||
&bcm4329_rfk_ops,
|
||||
NULL);
|
||||
|
||||
if (!gBtCtrl.bt_rfk)
|
||||
{
|
||||
LOG("fail to rfkill_allocate\n");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
rfkill_set_states(gBtCtrl.bt_rfk, default_state, false);
|
||||
|
||||
rc = rfkill_register(gBtCtrl.bt_rfk);
|
||||
if (rc)
|
||||
{
|
||||
LOG("failed to rfkill_register,rc=0x%x\n",rc);
|
||||
rfkill_destroy(gBtCtrl.bt_rfk);
|
||||
}
|
||||
|
||||
gpio_request(BT_GPIO_POWER, NULL);
|
||||
gpio_request(BT_GPIO_RESET, NULL);
|
||||
gpio_request(BT_GPIO_WAKE_UP, NULL);
|
||||
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
init_timer(&bt_sleep_tl);
|
||||
bt_sleep_tl.expires = 0;
|
||||
bt_sleep_tl.function = bcm4325_sleep;
|
||||
bt_sleep_tl.data = 1;
|
||||
add_timer(&bt_sleep_tl);
|
||||
#endif
|
||||
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
init_timer(&(gBtCtrl.tl));
|
||||
gBtCtrl.tl.expires = 0;
|
||||
gBtCtrl.tl.function = timer_hostSleep;
|
||||
add_timer(&(gBtCtrl.tl));
|
||||
gBtCtrl.b_HostWake = false;
|
||||
|
||||
wake_lock_init(&(gBtCtrl.bt_wakelock), WAKE_LOCK_SUSPEND, "bt_wake");
|
||||
|
||||
rc = gpio_request(BT_GPIO_WAKE_UP_HOST, "bt_wake");
|
||||
if (rc) {
|
||||
LOG("Failed to request BT_WAKE_UP_HOST\n");
|
||||
}
|
||||
|
||||
IOMUX_BT_GPIO_WAKE_UP_HOST();
|
||||
gpio_pull_updown(BT_GPIO_WAKE_UP_HOST,GPIOPullUp);
|
||||
#endif
|
||||
|
||||
LOG("bcm4329 module has been initialized,rc=0x%x\n",rc);
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
||||
static int __devexit bcm4329_rfkill_remove(struct platform_device *pdev)
|
||||
{
|
||||
if (gBtCtrl.bt_rfk)
|
||||
rfkill_unregister(gBtCtrl.bt_rfk);
|
||||
gBtCtrl.bt_rfk = NULL;
|
||||
#if BT_WAKE_HOST_SUPPORT
|
||||
del_timer(&(gBtCtrl.tl));//删掉定时器
|
||||
btWakeupHostUnlock();
|
||||
wake_lock_destroy(&(gBtCtrl.bt_wakelock));
|
||||
#endif
|
||||
#ifdef CONFIG_BT_AUTOSLEEP
|
||||
del_timer(&bt_sleep_tl);
|
||||
#endif
|
||||
|
||||
platform_set_drvdata(pdev, NULL);
|
||||
|
||||
DBG("Enter %s\n",__FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct platform_driver bcm4329_rfkill_driver = {
|
||||
.probe = bcm4329_rfkill_probe,
|
||||
.remove = __devexit_p(bcm4329_rfkill_remove),
|
||||
.driver = {
|
||||
.name = "rk29sdk_rfkill",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
.suspend = bcm4329_rfkill_suspend,
|
||||
.resume = bcm4329_rfkill_resume,
|
||||
};
|
||||
|
||||
/*
|
||||
* Module initialization
|
||||
*/
|
||||
static int __init bcm4329_mod_init(void)
|
||||
{
|
||||
int ret;
|
||||
DBG("Enter %s\n",__FUNCTION__);
|
||||
ret = platform_driver_register(&bcm4329_rfkill_driver);
|
||||
LOG("ret=0x%x\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __exit bcm4329_mod_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&bcm4329_rfkill_driver);
|
||||
}
|
||||
|
||||
module_init(bcm4329_mod_init);
|
||||
module_exit(bcm4329_mod_exit);
|
||||
MODULE_DESCRIPTION("bcm4329 Bluetooth driver");
|
||||
MODULE_AUTHOR("roger_chen cz@rock-chips.com, cmy@rock-chips.com");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
1737
arch/arm/mach-rk30/board-rk30-phonepad.c
Executable file
1737
arch/arm/mach-rk30/board-rk30-phonepad.c
Executable file
File diff suppressed because it is too large
Load Diff
|
|
@ -60,11 +60,18 @@
|
|||
#if defined(CONFIG_MT6229)
|
||||
#include <linux/mt6229.h>
|
||||
#endif
|
||||
#if defined(CONFIG_SEW868)
|
||||
#include <linux/sew868.h>
|
||||
#endif
|
||||
#if defined(CONFIG_ANDROID_TIMED_GPIO)
|
||||
#include "../../../drivers/staging/android/timed_gpio.h"
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_THREE_FB_BUFFER
|
||||
#define RK30_FB0_MEM_SIZE 12*SZ_1M
|
||||
#else
|
||||
#define RK30_FB0_MEM_SIZE 8*SZ_1M
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_VIDEO_RK29
|
||||
/*---------------- Camera Sensor Macro Define Begin ------------------------*/
|
||||
|
|
@ -776,7 +783,7 @@ struct rk29_mt6229_data rk29_mt6229_info = {
|
|||
.io_init = mt6229_io_init,
|
||||
.io_deinit = mt6229_io_deinit,
|
||||
.modem_power_en = RK30_PIN6_PB2,
|
||||
.bp_power = RK30_PIN2_PB7,//RK30_PIN2_PB6,
|
||||
.bp_power = RK30_PIN2_PB7,
|
||||
.bp_reset = RK30_PIN4_PD2,
|
||||
.ap_wakeup_bp = RK30_PIN2_PC0,
|
||||
.bp_wakeup_ap = RK30_PIN6_PA0,
|
||||
|
|
@ -789,6 +796,38 @@ struct platform_device rk29_device_mt6229 = {
|
|||
}
|
||||
};
|
||||
#endif
|
||||
#if defined(CONFIG_SEW868)
|
||||
static int sew868_io_init(void)
|
||||
{
|
||||
rk30_mux_api_set(GPIO2B6_LCDC1DATA14_SMCADDR18_TSSYNC_NAME, GPIO2B_GPIO2B6);
|
||||
rk30_mux_api_set(GPIO4D2_SMCDATA10_TRACEDATA10_NAME, GPIO4D_GPIO4D2);
|
||||
rk30_mux_api_set(GPIO4D4_SMCDATA12_TRACEDATA12_NAME, GPIO4D_GPIO4D4);
|
||||
return 0;
|
||||
}
|
||||
static int sew868_io_deinit(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
struct rk30_sew868_data rk30_sew868_info = {
|
||||
.io_init = sew868_io_init,
|
||||
.io_deinit = sew868_io_deinit,
|
||||
.bp_power = RK30_PIN6_PB2,
|
||||
.bp_power_active_low = 1,
|
||||
.bp_sys = RK30_PIN2_PB6,
|
||||
.bp_reset = RK30_PIN4_PD2,
|
||||
.bp_reset_active_low = 1,
|
||||
.bp_wakeup_ap = RK30_PIN4_PD4,
|
||||
.ap_wakeup_bp = NULL,
|
||||
};
|
||||
|
||||
struct platform_device rk30_device_sew868 = {
|
||||
.name = "sew868",
|
||||
.id = -1,
|
||||
.dev = {
|
||||
.platform_data = &rk30_sew868_info,
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
/*MMA8452 gsensor*/
|
||||
#if defined (CONFIG_GS_MMA8452)
|
||||
|
|
@ -1397,6 +1436,9 @@ static struct platform_device *devices[] __initdata = {
|
|||
#if defined(CONFIG_MT6229)
|
||||
&rk29_device_mt6229,
|
||||
#endif
|
||||
#if defined(CONFIG_SEW868)
|
||||
&rk30_device_sew868,
|
||||
#endif
|
||||
#ifdef CONFIG_BATTERY_RK30_ADC
|
||||
&rk30_device_adc_battery,
|
||||
#endif
|
||||
|
|
@ -1649,14 +1691,14 @@ static void __init rk30_reserve(void)
|
|||
*/
|
||||
static struct dvfs_arm_table dvfs_cpu_logic_table[] = {
|
||||
{.frequency = 252 * 1000, .cpu_volt = 1075 * 1000, .logic_volt = 1125 * 1000},//0.975V/1.000V
|
||||
{.frequency = 504 * 1000, .cpu_volt = 1075 * 1000, .logic_volt = 1125 * 1000},//0.975V/1.000V
|
||||
{.frequency = 816 * 1000, .cpu_volt = 1100 * 1000, .logic_volt = 1150 * 1000},//1.000V/1.025V
|
||||
{.frequency = 504 * 1000, .cpu_volt = 1100 * 1000, .logic_volt = 1125 * 1000},//0.975V/1.000V
|
||||
{.frequency = 816 * 1000, .cpu_volt = 1125 * 1000, .logic_volt = 1150 * 1000},//1.000V/1.025V
|
||||
{.frequency = 1008 * 1000, .cpu_volt = 1125 * 1000, .logic_volt = 1150 * 1000},//1.025V/1.050V
|
||||
{.frequency = 1200 * 1000, .cpu_volt = 1175 * 1000, .logic_volt = 1200 * 1000},//1.100V/1.050V
|
||||
{.frequency = 1272 * 1000, .cpu_volt = 1225 * 1000, .logic_volt = 1200 * 1000},//1.150V/1.100V
|
||||
{.frequency = 1416 * 1000, .cpu_volt = 1300 * 1000, .logic_volt = 1200 * 1000},//1.225V/1.100V
|
||||
{.frequency = 1512 * 1000, .cpu_volt = 1350 * 1000, .logic_volt = 1250 * 1000},//1.300V/1.150V
|
||||
{.frequency = 1608 * 1000, .cpu_volt = 1375 * 1000, .logic_volt = 1300 * 1000},//1.325V/1.175V
|
||||
{.frequency = 1608 * 1000, .cpu_volt = 1425 * 1000, .logic_volt = 1300 * 1000},//1.325V/1.175V
|
||||
{.frequency = CPUFREQ_TABLE_END},
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -2458,7 +2458,7 @@ static int pd_display_mode(struct clk *clk, int on)
|
|||
static struct clk pd_display = {
|
||||
.name = "pd_display",
|
||||
.flags = IS_PD,
|
||||
// .mode = pd_display_mode,
|
||||
.mode = pd_display_mode,
|
||||
.gate_idx = PD_VIO,
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -159,6 +159,10 @@ static struct attribute_group stats_attr_group = {
|
|||
static int freq_table_get_index(struct cpufreq_stats *stat, unsigned int freq)
|
||||
{
|
||||
int index;
|
||||
#ifdef CONFIG_PLAT_RK
|
||||
if (!stat->freq_table)
|
||||
return -1;
|
||||
#endif
|
||||
for (index = 0; index < stat->max_state; index++)
|
||||
if (stat->freq_table[index] == freq)
|
||||
return index;
|
||||
|
|
@ -215,7 +219,9 @@ static int cpufreq_stats_create_table(struct cpufreq_policy *policy,
|
|||
goto error_out;
|
||||
|
||||
stat->cpu = cpu;
|
||||
#ifndef CONFIG_PLAT_RK
|
||||
per_cpu(cpufreq_stats_table, cpu) = stat;
|
||||
#endif
|
||||
|
||||
for (i = 0; table[i].frequency != CPUFREQ_TABLE_END; i++) {
|
||||
unsigned int freq = table[i].frequency;
|
||||
|
|
@ -253,6 +259,9 @@ static int cpufreq_stats_create_table(struct cpufreq_policy *policy,
|
|||
stat->last_time = get_jiffies_64();
|
||||
stat->last_index = freq_table_get_index(stat, policy->cur);
|
||||
spin_unlock(&cpufreq_stats_lock);
|
||||
#ifdef CONFIG_PLAT_RK
|
||||
per_cpu(cpufreq_stats_table, cpu) = stat;
|
||||
#endif
|
||||
cpufreq_cpu_put(data);
|
||||
return 0;
|
||||
error_out:
|
||||
|
|
|
|||
28
drivers/misc/3g_module/Kconfig
Normal file
28
drivers/misc/3g_module/Kconfig
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
#
|
||||
# 3G device configuration
|
||||
#
|
||||
|
||||
menuconfig 3G_MODULE
|
||||
tristate "3G module for phonepad"
|
||||
---help---
|
||||
Say Y here if you have a support modem
|
||||
|
||||
choice
|
||||
depends on 3G_MODULE
|
||||
prompt "Select 3G Module"
|
||||
|
||||
config MU509
|
||||
bool "MU509"
|
||||
|
||||
config MT6229
|
||||
bool "MT6229"
|
||||
|
||||
config MW100
|
||||
bool "MW100"
|
||||
|
||||
config SEW868
|
||||
bool "SEW868"
|
||||
|
||||
|
||||
endchoice
|
||||
|
||||
5
drivers/misc/3g_module/Makefile
Normal file
5
drivers/misc/3g_module/Makefile
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
obj-$(CONFIG_MU509) += mu509.o
|
||||
obj-$(CONFIG_MW100) += mw100.o
|
||||
obj-$(CONFIG_MT6229) += mt6229.o
|
||||
obj-$(CONFIG_SEW868) += sew868.o
|
||||
|
||||
|
|
@ -67,7 +67,6 @@ static irqreturn_t detect_irq_handler(int irq, void *dev_id)
|
|||
if(do_wakeup_irq)
|
||||
{
|
||||
do_wakeup_irq = 0;
|
||||
// MODEMDBG("%s[%d]: %s\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
wake_lock_timeout(&modem_wakelock, 10 * HZ);
|
||||
schedule_delayed_work(&wakeup_work, 2*HZ);
|
||||
}
|
||||
|
|
@ -78,10 +77,6 @@ int modem_poweron_off(int on_off)
|
|||
struct rk29_mt6229_data *pdata = gpdata;
|
||||
if(on_off)
|
||||
{
|
||||
MODEMDBG("------------modem_poweron\n");
|
||||
//gpio_set_value(pdata->bp_reset, GPIO_HIGH);
|
||||
//msleep(100);
|
||||
//gpio_set_value(pdata->bp_reset, GPIO_LOW);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
gpio_set_value(pdata->bp_power, GPIO_HIGH);
|
||||
msleep(10);
|
||||
|
|
@ -90,7 +85,6 @@ int modem_poweron_off(int on_off)
|
|||
}
|
||||
else
|
||||
{
|
||||
MODEMDBG("------------modem_poweroff\n");
|
||||
gpio_set_value(pdata->bp_power, GPIO_HIGH);
|
||||
gpio_set_value(pdata->ap_wakeup_bp, GPIO_HIGH);
|
||||
}
|
||||
|
|
@ -98,30 +92,22 @@ int modem_poweron_off(int on_off)
|
|||
}
|
||||
static int mt6229_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
struct rk29_mt6229_data *pdata = gpdata;
|
||||
// struct platform_data *pdev = container_of(pdata, struct device, platform_data);
|
||||
device_init_wakeup(pdata->dev, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mt6229_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long mt6229_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct rk29_mt6229_data *pdata = gpdata;
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
switch(cmd)
|
||||
{
|
||||
case MT6229_RESET:
|
||||
//gpio_set_value(pdata->bp_reset, GPIO_HIGH);
|
||||
//msleep(100);
|
||||
//gpio_set_value(pdata->bp_reset, GPIO_LOW);
|
||||
//msleep(100);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
gpio_set_value(pdata->bp_power, GPIO_HIGH);
|
||||
msleep(10);
|
||||
|
|
@ -179,14 +165,12 @@ static ssize_t modem_status_write(struct class *cls, const char *_buf, size_t _c
|
|||
static CLASS_ATTR(modem_status, 0777, modem_status_read, modem_status_write);
|
||||
static void rk29_early_suspend(struct early_suspend *h)
|
||||
{
|
||||
printk("*********************mt6229____suspend\n");
|
||||
|
||||
}
|
||||
static void rk29_early_resume(struct early_suspend *h)
|
||||
{
|
||||
if(suspend_int)
|
||||
{
|
||||
printk("***************mt6229____resume\n");
|
||||
gpio_set_value(gpdata->ap_wakeup_bp, 0);
|
||||
suspend_int = 0;
|
||||
}
|
||||
|
|
@ -202,8 +186,6 @@ static int mt6229_probe(struct platform_device *pdev)
|
|||
struct rk29_mt6229_data *pdata = gpdata = pdev->dev.platform_data;
|
||||
struct modem_dev *mt6229_data = NULL;
|
||||
int result, irq = 0;
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
|
||||
pdata->dev = &pdev->dev;
|
||||
if(pdata->io_init)
|
||||
pdata->io_init();
|
||||
|
|
@ -238,7 +220,7 @@ static int mt6229_probe(struct platform_device *pdev)
|
|||
}
|
||||
wake_lock_init(&modem_wakelock, WAKE_LOCK_SUSPEND, "bp_wakeup_ap");
|
||||
gpio_direction_input(pdata->bp_wakeup_ap);
|
||||
gpio_pull_updown(pdata->bp_wakeup_ap, 1);
|
||||
gpio_pull_updown(pdata->bp_wakeup_ap, 1);
|
||||
result = request_irq(irq, detect_irq_handler, IRQ_BB_WAKEUP_AP_TRIGGER, "bp_wakeup_ap", NULL);
|
||||
if (result < 0) {
|
||||
printk("%s: request_irq(%d) failed\n", __func__, irq);
|
||||
|
|
@ -267,32 +249,13 @@ int mt6229_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
{
|
||||
suspend_int = 1;
|
||||
do_wakeup_irq = 1;
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
ap_wakeup_bp(pdev, 1);
|
||||
#if defined(CONFIG_ARCH_RK29)
|
||||
rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME, GPIO1H_GPIO1C1);
|
||||
//gpio_direction_output(RK29_PIN1_PC1, 1);
|
||||
#endif
|
||||
#if defined(CONFIG_ARCH_RK30)
|
||||
rk30_mux_api_set(GPIO1A7_UART1RTSN_SPI0TXD_NAME, GPIO1A_GPIO1A7);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
int mt6229_resume(struct platform_device *pdev)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
//ap_wakeup_bp(pdev, 0);
|
||||
#if defined(CONFIG_ARCH_RK29)
|
||||
rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME, GPIO1H_UART0_RTS_N);
|
||||
#endif
|
||||
#if defined(CONFIG_ARCH_RK30)
|
||||
rk30_mux_api_set(GPIO1A7_UART1RTSN_SPI0TXD_NAME, GPIO1A_UART1_RTS_N);
|
||||
#endif
|
||||
if(gpio_get_value(gpdata->bp_wakeup_ap))
|
||||
{
|
||||
schedule_delayed_work(&wakeup_work, 2*HZ);
|
||||
}
|
||||
ap_wakeup_bp(pdev, 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -301,7 +264,6 @@ void mt6229_shutdown(struct platform_device *pdev)
|
|||
struct rk29_mt6229_data *pdata = pdev->dev.platform_data;
|
||||
struct modem_dev *mt6229_data = platform_get_drvdata(pdev);
|
||||
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
modem_poweron_off(0);
|
||||
|
||||
if(pdata->io_deinit)
|
||||
|
|
@ -328,10 +290,7 @@ static struct platform_driver mt6229_driver = {
|
|||
|
||||
static int __init mt6229_init(void)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
int ret ;
|
||||
|
||||
|
||||
int ret ;
|
||||
modem_class = class_create(THIS_MODULE, "rk291x_modem");
|
||||
ret = class_create_file(modem_class, &class_attr_modem_status);
|
||||
if (ret)
|
||||
|
|
@ -343,7 +302,6 @@ static int __init mt6229_init(void)
|
|||
|
||||
static void __exit mt6229_exit(void)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
platform_driver_unregister(&mt6229_driver);
|
||||
class_remove_file(modem_class, &class_attr_modem_status);
|
||||
}
|
||||
|
|
@ -36,20 +36,11 @@ MODULE_LICENSE("GPL");
|
|||
static struct wake_lock modem_wakelock;
|
||||
#define IRQ_BB_WAKEUP_AP_TRIGGER IRQF_TRIGGER_FALLING
|
||||
//#define IRQ_BB_WAKEUP_AP_TRIGGER IRQF_TRIGGER_RISING
|
||||
#if defined(CONFIG_ARCH_RK29)
|
||||
#define airplane_mode RK29_PIN6_PC1
|
||||
#endif
|
||||
#if defined(CONFIG_ARCH_RK30)
|
||||
#define airplane_mode RK30_PIN2_PC0
|
||||
#endif
|
||||
#define MU509_RESET 0x01
|
||||
#define AIRPLANE_MODE_OFF 0x03
|
||||
#define AIRPLANE_MODE_ON 0x00
|
||||
struct rk29_mu509_data *gpdata = NULL;
|
||||
struct class *modem_class = NULL;
|
||||
static int do_wakeup_irq = 0;
|
||||
static int modem_status;
|
||||
static int online = 0;
|
||||
int suspend_int =0;
|
||||
static void ap_wakeup_bp(struct platform_device *pdev, int wake)
|
||||
{
|
||||
|
|
@ -87,7 +78,6 @@ int modem_poweron_off(int on_off)
|
|||
struct rk29_mu509_data *pdata = gpdata;
|
||||
if(on_off)
|
||||
{
|
||||
MODEMDBG("------------modem_poweron\n");
|
||||
gpio_set_value(pdata->bp_reset, GPIO_HIGH);
|
||||
msleep(100);
|
||||
gpio_set_value(pdata->bp_reset, GPIO_LOW);
|
||||
|
|
@ -97,11 +87,9 @@ int modem_poweron_off(int on_off)
|
|||
msleep(700);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
gpio_set_value(pdata->ap_wakeup_bp, GPIO_LOW);
|
||||
gpio_set_value(airplane_mode, GPIO_HIGH);
|
||||
}
|
||||
else
|
||||
{
|
||||
MODEMDBG("------------modem_poweroff\n");
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
gpio_set_value(pdata->bp_power, GPIO_HIGH);
|
||||
msleep(2500);
|
||||
|
|
@ -111,23 +99,19 @@ int modem_poweron_off(int on_off)
|
|||
}
|
||||
static int mu509_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
struct rk29_mu509_data *pdata = gpdata;
|
||||
// struct platform_data *pdev = container_of(pdata, struct device, platform_data);
|
||||
device_init_wakeup(pdata->dev, 1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mu509_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long mu509_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct rk29_mu509_data *pdata = gpdata;
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
switch(cmd)
|
||||
{
|
||||
case MU509_RESET:
|
||||
|
|
@ -141,13 +125,6 @@ static long mu509_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
msleep(700);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
gpio_set_value(pdata->ap_wakeup_bp, GPIO_LOW);
|
||||
gpio_set_value(airplane_mode, GPIO_HIGH);
|
||||
break;
|
||||
case AIRPLANE_MODE_ON:
|
||||
gpio_set_value(airplane_mode, GPIO_LOW);
|
||||
break;
|
||||
case AIRPLANE_MODE_OFF:
|
||||
gpio_set_value(airplane_mode, GPIO_HIGH);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
@ -198,37 +175,14 @@ static ssize_t modem_status_write(struct class *cls, const char *_buf, size_t _c
|
|||
return _count;
|
||||
}
|
||||
static CLASS_ATTR(modem_status, 0777, modem_status_read, modem_status_write);
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37))
|
||||
static ssize_t online_read(struct class *cls, struct class_attribute *attr, char *_buf)
|
||||
#else
|
||||
static ssize_t online_read(struct class *cls, char *_buf)
|
||||
#endif
|
||||
{
|
||||
return sprintf(_buf, "%d\n", online);
|
||||
|
||||
}
|
||||
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 37))
|
||||
static ssize_t online_write(struct class *cls, struct class_attribute *attr, const char *_buf, size_t _count)
|
||||
#else
|
||||
static ssize_t online_write(struct class *cls, const char *_buf, size_t _count)
|
||||
#endif
|
||||
{
|
||||
int new_value = simple_strtoul(_buf, NULL, 16);
|
||||
if(new_value == online) return _count;
|
||||
online = new_value;
|
||||
return _count;
|
||||
}
|
||||
static CLASS_ATTR(online, 0777, online_read, online_write);
|
||||
static void rk29_early_suspend(struct early_suspend *h)
|
||||
{
|
||||
printk("*********************509____suspend\n");
|
||||
|
||||
}
|
||||
static void rk29_early_resume(struct early_suspend *h)
|
||||
{
|
||||
if(suspend_int)
|
||||
{
|
||||
printk("***************509____resume\n");
|
||||
gpio_set_value(gpdata->ap_wakeup_bp, 0);
|
||||
suspend_int = 0;
|
||||
}
|
||||
|
|
@ -244,7 +198,6 @@ static int mu509_probe(struct platform_device *pdev)
|
|||
struct rk29_mu509_data *pdata = gpdata = pdev->dev.platform_data;
|
||||
struct modem_dev *mu509_data = NULL;
|
||||
int result, irq = 0;
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
|
||||
pdata->dev = &pdev->dev;
|
||||
if(pdata->io_init)
|
||||
|
|
@ -309,12 +262,9 @@ int mu509_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
{
|
||||
suspend_int = 1;
|
||||
do_wakeup_irq = 1;
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
if(!online)
|
||||
ap_wakeup_bp(pdev, 1);
|
||||
#if defined(CONFIG_ARCH_RK29)
|
||||
rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME, GPIO1H_GPIO1C1);
|
||||
//gpio_direction_output(RK29_PIN1_PC1, 1);
|
||||
#endif
|
||||
#if defined(CONFIG_ARCH_RK30)
|
||||
rk30_mux_api_set(GPIO1A7_UART1RTSN_SPI0TXD_NAME, GPIO1A_GPIO1A7);
|
||||
|
|
@ -324,8 +274,6 @@ int mu509_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
|
||||
int mu509_resume(struct platform_device *pdev)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
//ap_wakeup_bp(pdev, 0);
|
||||
#if defined(CONFIG_ARCH_RK29)
|
||||
rk29_mux_api_set(GPIO1C1_UART0RTSN_SDMMC1WRITEPRT_NAME, GPIO1H_UART0_RTS_N);
|
||||
#endif
|
||||
|
|
@ -344,7 +292,6 @@ void mu509_shutdown(struct platform_device *pdev)
|
|||
struct rk29_mu509_data *pdata = pdev->dev.platform_data;
|
||||
struct modem_dev *mu509_data = platform_get_drvdata(pdev);
|
||||
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
modem_poweron_off(0);
|
||||
|
||||
if(pdata->io_deinit)
|
||||
|
|
@ -371,13 +318,9 @@ static struct platform_driver mu509_driver = {
|
|||
|
||||
static int __init mu509_init(void)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
int ret ;
|
||||
|
||||
|
||||
int ret ;
|
||||
modem_class = class_create(THIS_MODULE, "rk291x_modem");
|
||||
ret = class_create_file(modem_class, &class_attr_modem_status);
|
||||
ret = class_create_file(modem_class, &class_attr_online);
|
||||
if (ret)
|
||||
{
|
||||
printk("Fail to class rk291x_modem.\n");
|
||||
|
|
@ -387,10 +330,8 @@ static int __init mu509_init(void)
|
|||
|
||||
static void __exit mu509_exit(void)
|
||||
{
|
||||
//MODEMDBG("-------------%s\n",__FUNCTION__);
|
||||
platform_driver_unregister(&mu509_driver);
|
||||
class_remove_file(modem_class, &class_attr_modem_status);
|
||||
class_remove_file(modem_class, &class_attr_online);
|
||||
}
|
||||
|
||||
module_init(mu509_init);
|
||||
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
//#define DEBUG
|
||||
#ifdef DEBUG
|
||||
#define MODEMDBG(x...) printk(x)
|
||||
#else
|
||||
|
|
@ -47,54 +46,26 @@ static int bp_wakeup_ap_irq = 0;
|
|||
static struct wake_lock bp_wakelock;
|
||||
static bool bpstatus_irq_enable = false;
|
||||
|
||||
#if 0
|
||||
static void ap_wakeup_bp(struct platform_device *pdev, int wake)
|
||||
{
|
||||
struct rk29_mw100_data *pdata = pdev->dev.platform_data;
|
||||
MODEMDBG("ap_wakeup_bp\n");
|
||||
|
||||
gpio_set_value(pdata->ap_wakeup_bp, wake);
|
||||
}
|
||||
#endif
|
||||
|
||||
static void do_wakeup(struct work_struct *work)
|
||||
{
|
||||
MODEMDBG("%s[%d]: %s\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
enable_irq(bp_wakeup_ap_irq);
|
||||
}
|
||||
|
||||
static DECLARE_DELAYED_WORK(wakeup_work, do_wakeup);
|
||||
static irqreturn_t detect_irq_handler(int irq, void *dev_id)
|
||||
{
|
||||
printk("%s[%d]: %s\n", __FILE__, __LINE__, __FUNCTION__);
|
||||
wake_lock_timeout(&bp_wakelock, 10 * HZ);
|
||||
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
int modem_poweron_off(int on_off)
|
||||
{
|
||||
if(on_off)
|
||||
{
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
}
|
||||
else
|
||||
{
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mw100_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
//modem_poweron_off(1);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mw100_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
//modem_poweron_off(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -104,7 +75,6 @@ static long mw100_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
|||
switch(cmd)
|
||||
{
|
||||
case MW_IOCTL_RESET:
|
||||
printk("%s::%d--bruins--ioctl mw100 reset\n",__func__,__LINE__);
|
||||
gpio_direction_output(pdata->bp_reset,GPIO_LOW);
|
||||
mdelay(120);
|
||||
gpio_set_value(pdata->bp_reset, GPIO_HIGH);
|
||||
|
|
@ -141,9 +111,6 @@ static int mw100_probe(struct platform_device *pdev)
|
|||
gpio_request(pdata->ap_wakeup_bp,"ap_wakeup_bp");
|
||||
gpio_set_value(pdata->modem_power_en, GPIO_HIGH);
|
||||
msleep(1000);
|
||||
#if defined(CONFIG_ARCH_RK29)
|
||||
rk29_mux_api_set(GPIO6C76_CPUTRACEDATA76_NAME, GPIO4H_GPIO6C76);
|
||||
#endif
|
||||
gpio_direction_output(pdata->bp_reset,GPIO_LOW);
|
||||
mdelay(120);
|
||||
gpio_set_value(pdata->bp_reset, GPIO_HIGH);
|
||||
|
|
@ -157,14 +124,6 @@ static int mw100_probe(struct platform_device *pdev)
|
|||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
gpio_direction_output(pdata->bp_power,GPIO_LOW);
|
||||
|
||||
|
||||
//±£Áô
|
||||
/* gpio_set_value(pdata->bp_reset, GPIO_LOW);
|
||||
gpio_direction_output(pdata->bp_reset,GPIO_LOW);
|
||||
mdelay(120);
|
||||
gpio_set_value(pdata->bp_reset, GPIO_HIGH);
|
||||
gpio_direction_output(pdata->bp_reset,GPIO_HIGH);
|
||||
*/
|
||||
mw100_data = kzalloc(sizeof(struct modem_dev), GFP_KERNEL);
|
||||
if(mw100_data == NULL){
|
||||
printk("failed to request mw100_data\n");
|
||||
|
|
@ -209,7 +168,6 @@ int mw100_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
|
||||
struct rk29_mw100_data *pdata = pdev->dev.platform_data;
|
||||
int irq;
|
||||
MODEMDBG("%s::%d--\n",__func__,__LINE__);
|
||||
gpio_set_value(pdata->ap_wakeup_bp, GPIO_LOW);
|
||||
irq = gpio_to_irq(pdata->bp_wakeup_ap);
|
||||
if (irq < 0) {
|
||||
|
|
@ -217,7 +175,6 @@ int mw100_suspend(struct platform_device *pdev, pm_message_t state)
|
|||
}
|
||||
else
|
||||
{
|
||||
printk("enable pdata->bp_statue irq_wake!! \n");
|
||||
bpstatus_irq_enable = true;
|
||||
enable_irq_wake(irq);
|
||||
}
|
||||
|
|
@ -228,11 +185,9 @@ int mw100_resume(struct platform_device *pdev)
|
|||
{
|
||||
struct rk29_mw100_data *pdata = pdev->dev.platform_data;
|
||||
int irq;
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
gpio_set_value(pdata->ap_wakeup_bp, GPIO_HIGH);
|
||||
irq = gpio_to_irq(pdata->bp_wakeup_ap);
|
||||
if (irq ) {
|
||||
printk("enable pdata->bp_statue irq_wake!! \n");
|
||||
disable_irq_wake(irq);
|
||||
bpstatus_irq_enable = false;
|
||||
}
|
||||
|
|
@ -244,7 +199,6 @@ void mw100_shutdown(struct platform_device *pdev)
|
|||
struct rk29_mw100_data *pdata = pdev->dev.platform_data;
|
||||
struct modem_dev *mw100_data = platform_get_drvdata(pdev);
|
||||
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
gpio_set_value(pdata->bp_power, GPIO_HIGH);
|
||||
mdelay(2010);
|
||||
gpio_free(pdata->modem_power_en);
|
||||
|
|
@ -268,13 +222,11 @@ static struct platform_driver mw100_driver = {
|
|||
|
||||
static int __init mw100_init(void)
|
||||
{
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
return platform_driver_register(&mw100_driver);
|
||||
}
|
||||
|
||||
static void __exit mw100_exit(void)
|
||||
{
|
||||
MODEMDBG("%s::%d--bruins--\n",__func__,__LINE__);
|
||||
platform_driver_unregister(&mw100_driver);
|
||||
}
|
||||
|
||||
228
drivers/misc/3g_module/sew868.c
Executable file
228
drivers/misc/3g_module/sew868.c
Executable file
|
|
@ -0,0 +1,228 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/circ_buf.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <mach/iomux.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/poll.h>
|
||||
#include <linux/wait.h>
|
||||
#include <linux/wakelock.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/sew868.h>
|
||||
#include<linux/ioctl.h>
|
||||
#include<linux/slab.h>
|
||||
|
||||
MODULE_LICENSE("GPL");
|
||||
|
||||
#define DEBUG
|
||||
#ifdef DEBUG
|
||||
#define MODEMDBG(x...) printk(x)
|
||||
#else
|
||||
#define MODEMDBG(fmt,argss...)
|
||||
#endif
|
||||
#define SLEEP 1
|
||||
#define READY 0
|
||||
#define SEW868_RESET 0x01
|
||||
#define SEW868_POWON 0x02
|
||||
#define SEW868_POWOFF 0x03
|
||||
static struct wake_lock modem_wakelock;
|
||||
#define IRQ_BB_WAKEUP_AP_TRIGGER IRQF_TRIGGER_FALLING
|
||||
//#define IRQ_BB_WAKEUP_AP_TRIGGER IRQF_TRIGGER_RISING
|
||||
struct rk30_sew868_data *gpdata = NULL;
|
||||
static int do_wakeup_irq = 0;
|
||||
|
||||
extern void rk28_send_wakeup_key(void);
|
||||
|
||||
static void do_wakeup(struct work_struct *work)
|
||||
{
|
||||
rk28_send_wakeup_key();
|
||||
}
|
||||
|
||||
static DECLARE_DELAYED_WORK(wakeup_work, do_wakeup);
|
||||
static irqreturn_t detect_irq_handler(int irq, void *dev_id)
|
||||
{
|
||||
printk("%s\n", __FUNCTION__);
|
||||
if(do_wakeup_irq)
|
||||
{
|
||||
do_wakeup_irq = 0;
|
||||
wake_lock_timeout(&modem_wakelock, 10 * HZ);
|
||||
schedule_delayed_work(&wakeup_work, HZ / 10);
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
int modem_poweron_off(int on_off)
|
||||
{
|
||||
struct rk30_sew868_data *pdata = gpdata;
|
||||
if(on_off)
|
||||
{
|
||||
gpio_direction_output(pdata->bp_sys, GPIO_HIGH);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
msleep(200);//for charge
|
||||
gpio_set_value(pdata->bp_power, GPIO_HIGH);
|
||||
msleep(4000);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
msleep(200);
|
||||
}
|
||||
else
|
||||
{
|
||||
gpio_set_value(pdata->bp_power, GPIO_HIGH);
|
||||
msleep(4000);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
gpio_set_value(pdata->bp_sys, GPIO_LOW);
|
||||
msleep(50);
|
||||
gpio_set_value(pdata->bp_power, GPIO_LOW);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
static int sew868_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int sew868_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static long sew868_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
struct rk30_sew868_data *pdata = gpdata;
|
||||
switch(cmd)
|
||||
{
|
||||
case SEW868_RESET:
|
||||
gpio_set_value(pdata->bp_reset, GPIO_HIGH);
|
||||
mdelay(100);
|
||||
gpio_set_value(pdata->bp_reset, GPIO_LOW);
|
||||
mdelay(200);
|
||||
modem_poweron_off(1);
|
||||
break;
|
||||
case SEW868_POWON:
|
||||
modem_poweron_off(1);
|
||||
break;
|
||||
case SEW868_POWOFF:
|
||||
modem_poweron_off(0);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_operations sew868_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = sew868_open,
|
||||
.release = sew868_release,
|
||||
.unlocked_ioctl = sew868_ioctl
|
||||
};
|
||||
|
||||
static struct miscdevice sew868_misc = {
|
||||
.minor = MISC_DYNAMIC_MINOR,
|
||||
.name = MODEM_NAME,
|
||||
.fops = &sew868_fops
|
||||
};
|
||||
|
||||
static int sew868_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct rk30_sew868_data *pdata = gpdata = pdev->dev.platform_data;
|
||||
struct modem_dev *sew868_data = NULL;
|
||||
int result, irq = 0;
|
||||
|
||||
if(pdata->io_init)
|
||||
pdata->io_init();
|
||||
|
||||
modem_poweron_off(1);
|
||||
sew868_data = kzalloc(sizeof(struct modem_dev), GFP_KERNEL);
|
||||
if(sew868_data == NULL)
|
||||
{
|
||||
printk("failed to request sew868_data\n");
|
||||
goto err1;
|
||||
}
|
||||
platform_set_drvdata(pdev, sew868_data);
|
||||
|
||||
irq = gpio_to_irq(pdata->bp_wakeup_ap);
|
||||
if(irq < 0)
|
||||
{
|
||||
gpio_free(pdata->bp_wakeup_ap);
|
||||
printk("failed to request bp_wakeup_ap\n");
|
||||
}
|
||||
|
||||
wake_lock_init(&modem_wakelock, WAKE_LOCK_SUSPEND, "bp_wakeup_ap");
|
||||
gpio_direction_input(pdata->bp_wakeup_ap);
|
||||
gpio_pull_updown(pdata->bp_wakeup_ap, GPIONormal);
|
||||
result = request_irq(irq, detect_irq_handler, IRQ_BB_WAKEUP_AP_TRIGGER, "bp_wakeup_ap", NULL);
|
||||
if (result < 0) {
|
||||
printk("%s: request_irq(%d) failed\n", __func__, irq);
|
||||
gpio_free(pdata->bp_wakeup_ap);
|
||||
goto err0;
|
||||
}
|
||||
enable_irq_wake(gpio_to_irq(pdata->bp_wakeup_ap));
|
||||
result = misc_register(&sew868_misc);
|
||||
if(result)
|
||||
{
|
||||
MODEMDBG("misc_register err\n");
|
||||
}
|
||||
|
||||
return result;
|
||||
err0:
|
||||
cancel_work_sync(&sew868_data->work);
|
||||
err1:
|
||||
kfree(sew868_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sew868_suspend(struct platform_device *pdev, pm_message_t state)
|
||||
{
|
||||
do_wakeup_irq = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
int sew868_resume(struct platform_device *pdev)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
void sew868_shutdown(struct platform_device *pdev)
|
||||
{
|
||||
struct rk30_sew868_data *pdata = pdev->dev.platform_data;
|
||||
struct modem_dev *sew868_data = platform_get_drvdata(pdev);
|
||||
modem_poweron_off(0);
|
||||
if(pdata->io_deinit)
|
||||
pdata->io_deinit();
|
||||
cancel_work_sync(&sew868_data->work);
|
||||
kfree(sew868_data);
|
||||
}
|
||||
|
||||
static struct platform_driver sew868_driver = {
|
||||
.probe = sew868_probe,
|
||||
.shutdown = sew868_shutdown,
|
||||
.suspend = sew868_suspend,
|
||||
.resume = sew868_resume,
|
||||
.driver = {
|
||||
.name = "sew868",
|
||||
.owner = THIS_MODULE,
|
||||
},
|
||||
};
|
||||
|
||||
static int __init sew868_init(void)
|
||||
{
|
||||
return platform_driver_register(&sew868_driver);
|
||||
}
|
||||
|
||||
static void __exit sew868_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&sew868_driver);
|
||||
}
|
||||
|
||||
module_init(sew868_init);
|
||||
|
||||
module_exit(sew868_exit);
|
||||
|
|
@ -525,9 +525,6 @@ config APANIC_PLABEL
|
|||
If your platform uses a different flash partition label for storing
|
||||
crashdumps, enter it here.
|
||||
|
||||
config STE
|
||||
bool "STE modem control driver"
|
||||
|
||||
config MTK23D
|
||||
bool "MTK6223D modem control driver"
|
||||
default n
|
||||
|
|
@ -535,14 +532,6 @@ config MTK23D
|
|||
config FM580X
|
||||
bool "FM rda580x driver"
|
||||
|
||||
config MU509
|
||||
bool "MU509 modem control driver"
|
||||
|
||||
config MW100
|
||||
bool "MW100 modem control driver"
|
||||
|
||||
config MT6229
|
||||
bool "MT6229 modem control driver"
|
||||
|
||||
config RK29_NEWTON
|
||||
bool "RK29_NEWTON misc driver"
|
||||
|
|
@ -566,5 +555,6 @@ source "drivers/misc/iwmc3200top/Kconfig"
|
|||
source "drivers/misc/ti-st/Kconfig"
|
||||
source "drivers/misc/lis3lv02d/Kconfig"
|
||||
source "drivers/misc/carma/Kconfig"
|
||||
source "drivers/misc/3g_module/Kconfig"
|
||||
|
||||
endif # MISC_DEVICES
|
||||
|
|
|
|||
|
|
@ -52,11 +52,8 @@ obj-$(CONFIG_APANIC) += apanic.o
|
|||
obj-$(CONFIG_SENSORS_AK8975) += akm8975.o
|
||||
obj-$(CONFIG_MTK23D) += mtk23d.o
|
||||
obj-$(CONFIG_FM580X) += fm580x.o
|
||||
obj-$(CONFIG_MU509) += mu509.o
|
||||
obj-$(CONFIG_MW100) += mw100.o
|
||||
obj-$(CONFIG_MT6229) += mt6229.o
|
||||
obj-$(CONFIG_STE) += ste.o
|
||||
obj-$(CONFIG_RK29_SUPPORT_MODEM) += rk29_modem/
|
||||
obj-$(CONFIG_3G_MODULE) += 3g_module/
|
||||
obj-$(CONFIG_GPS_GNS7560) += gps/
|
||||
obj-y += inv_mpu/
|
||||
obj-$(CONFIG_RK29_NEWTON) += newton.o
|
||||
|
|
|
|||
|
|
@ -1,203 +0,0 @@
|
|||
#include <linux/module.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/i2c.h>
|
||||
#include <linux/irq.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/input.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/ste.h>
|
||||
#include <linux/fs.h>
|
||||
#include <linux/uaccess.h>
|
||||
#include <linux/miscdevice.h>
|
||||
#include <linux/circ_buf.h>
|
||||
#include <linux/interrupt.h>
|
||||
#include <mach/spi_fpga.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#if 1
|
||||
#define D(x...) printk(x)
|
||||
#else
|
||||
#define D(x...)
|
||||
#endif
|
||||
|
||||
static int misc_opened;
|
||||
|
||||
#define AP_TD_UNDEFINED_GBIN5 FPGA_PIO2_02
|
||||
#define AP_RESET_TD FPGA_PIO2_04
|
||||
#define AP_SHUTDOWN_TD_PMU FPGA_PIO2_05
|
||||
#define AP_PW_EN_TD FPGA_PIO2_03
|
||||
|
||||
#define PIN_BPSEND_ACK RK2818_PIN_PE0
|
||||
#define PIN_APSEND_ACK RK2818_PIN_PF7
|
||||
|
||||
static int bp_power_on(void)
|
||||
{
|
||||
int ret=0;
|
||||
|
||||
ret = gpio_request(AP_TD_UNDEFINED_GBIN5, NULL);
|
||||
if (ret) {
|
||||
printk("%s:failed to request fpga s %d\n",__FUNCTION__,__LINE__);
|
||||
goto err;
|
||||
}
|
||||
ret = gpio_request(AP_RESET_TD, NULL);
|
||||
if (ret) {
|
||||
printk("%s:failed to request fpga s %d\n",__FUNCTION__,__LINE__);
|
||||
goto err0;
|
||||
}
|
||||
|
||||
|
||||
ret = gpio_request(AP_SHUTDOWN_TD_PMU, NULL);
|
||||
if (ret) {
|
||||
printk("%s:failed to request fpga %d\n",__FUNCTION__,__LINE__);
|
||||
goto err1;
|
||||
}
|
||||
|
||||
ret = gpio_request(AP_PW_EN_TD, NULL);
|
||||
if (ret) {
|
||||
printk("%s:failed to request fpga %d\n",__FUNCTION__,__LINE__);
|
||||
goto err2;
|
||||
}
|
||||
|
||||
gpio_set_value(AP_TD_UNDEFINED_GBIN5, 1);
|
||||
gpio_direction_output(AP_TD_UNDEFINED_GBIN5, 1);
|
||||
gpio_direction_input(AP_RESET_TD);
|
||||
|
||||
gpio_set_value(AP_SHUTDOWN_TD_PMU, 0);
|
||||
gpio_direction_output(AP_SHUTDOWN_TD_PMU, 0);
|
||||
|
||||
gpio_set_value(AP_PW_EN_TD, 0);
|
||||
gpio_direction_output(AP_PW_EN_TD, 0);
|
||||
mdelay(1);
|
||||
gpio_set_value(AP_PW_EN_TD, 1);
|
||||
mdelay(1200);
|
||||
gpio_set_value(AP_PW_EN_TD, 0);
|
||||
|
||||
return true;
|
||||
err2:
|
||||
gpio_free(AP_SHUTDOWN_TD_PMU);
|
||||
err1:
|
||||
gpio_free(AP_RESET_TD);
|
||||
err0:
|
||||
gpio_free(AP_TD_UNDEFINED_GBIN5);
|
||||
err:
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static int bp_power_off(void)
|
||||
{
|
||||
D("+++--++++++%s_________ \r\n",__FUNCTION__);
|
||||
|
||||
gpio_set_value(AP_TD_UNDEFINED_GBIN5, 0);
|
||||
|
||||
gpio_set_value(AP_PW_EN_TD, 0);
|
||||
//gpio_direction_output(AP_PW_EN_TD, 0);
|
||||
mdelay(1);
|
||||
gpio_set_value(AP_PW_EN_TD, 1);
|
||||
mdelay(1200);
|
||||
gpio_set_value(AP_PW_EN_TD, 0);
|
||||
|
||||
mdelay(5000);
|
||||
gpio_set_value(AP_SHUTDOWN_TD_PMU, 1);
|
||||
mdelay(1200);
|
||||
// gpio_free(AP_PW_EN_TD);
|
||||
D("++++--+++++%s ok_________\r\n",__FUNCTION__);
|
||||
return 0;
|
||||
}
|
||||
//add end
|
||||
|
||||
static int ste_open(struct inode *inode, struct file *file)
|
||||
{
|
||||
D("%s\n", __func__);
|
||||
if (misc_opened)
|
||||
return -EBUSY;
|
||||
misc_opened = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ste_release(struct inode *inode, struct file *file)
|
||||
{
|
||||
D("%s\n", __func__);
|
||||
misc_opened = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ste_ioctl(struct inode *inode,struct file *file, unsigned int cmd, unsigned long arg)
|
||||
{
|
||||
int val;
|
||||
D("%s cmd %d\n", __func__, _IOC_NR(cmd));
|
||||
switch (cmd) {
|
||||
case STE_IOCTL_EN_APSEND_ACK:
|
||||
D("%s:STE_IOCTL_EN_APSEND_ACK\n");
|
||||
gpio_direction_output(PIN_APSEND_ACK,GPIO_LOW);
|
||||
msleep(50);
|
||||
gpio_direction_output(PIN_APSEND_ACK,GPIO_HIGH);
|
||||
msleep(50);
|
||||
break;
|
||||
case STE_IOCTL_GET_ACK:
|
||||
val = gpio_get_value(PIN_BPSEND_ACK);
|
||||
D("%s:STE_IOCTL_GET_ACK pin status is %d\n",__func__,val);
|
||||
return put_user(val, (unsigned long __user *)arg);
|
||||
break;
|
||||
case STE_IOCTL_POWER_ON:
|
||||
D("%s:STE_IOCTL_POWER_ON\n",__func__);
|
||||
bp_power_on();
|
||||
break;
|
||||
case STE_IOCTL_POWER_OFF:
|
||||
D("%s:STE_IOCTL_POWER_OFF\n",__func__);
|
||||
bp_power_off();
|
||||
break;
|
||||
default:
|
||||
pr_err("%s: invalid cmd %d\n", __func__, _IOC_NR(cmd));
|
||||
return -EINVAL;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct file_operations ste_fops = {
|
||||
.owner = THIS_MODULE,
|
||||
.open = ste_open,
|
||||
.release = ste_release,
|
||||
.ioctl = ste_ioctl
|
||||
};
|
||||
|
||||
static struct miscdevice ste_misc = {
|
||||
.minor = MISC_DYNAMIC_MINOR,
|
||||
.name = STE_NAME,
|
||||
.fops = &ste_fops
|
||||
};
|
||||
|
||||
static int ste_probe(struct platform_device *pdev)
|
||||
{
|
||||
int rc = -EIO;
|
||||
D("%s-----------\n",__FUNCTION__);
|
||||
|
||||
rc = misc_register(&ste_misc);
|
||||
if (rc < 0) {
|
||||
pr_err("%s: could not register misc device\n", __func__);
|
||||
// goto err_unregister_input_device;
|
||||
}
|
||||
return rc;
|
||||
}
|
||||
|
||||
static struct platform_driver ste_driver = {
|
||||
.probe = ste_probe,
|
||||
.driver = {
|
||||
.name = "ste",
|
||||
.owner = THIS_MODULE
|
||||
},
|
||||
};
|
||||
|
||||
static int __init ste_init(void)
|
||||
{
|
||||
return platform_driver_register(&ste_driver);
|
||||
}
|
||||
|
||||
static void __exit ste_exit(void)
|
||||
{
|
||||
platform_driver_unregister(&ste_driver);
|
||||
}
|
||||
|
||||
module_init(ste_init);
|
||||
module_exit(ste_exit);
|
||||
|
|
@ -61,6 +61,12 @@
|
|||
#include <asm/io.h>
|
||||
#include <asm/sizes.h>
|
||||
|
||||
#ifdef CONFIG_MACH_RK30_DS1001B
|
||||
#include <mach/io.h>
|
||||
#include <mach/gpio.h>
|
||||
#include <mach/iomux.h>
|
||||
#endif
|
||||
|
||||
#include "linux/dwc_otg_plat.h"
|
||||
#include <linux/platform_device.h>
|
||||
#include "dwc_otg_attr.h"
|
||||
|
|
@ -2203,6 +2209,15 @@ static __devinit int host20_driver_probe(struct platform_device *pdev)
|
|||
#endif
|
||||
#ifdef CONFIG_ARCH_RK30
|
||||
USB_IOMUX_INIT(GPIO0A6_HOSTDRVVBUS_NAME, GPIO0A_HOST_DRV_VBUS);
|
||||
#ifdef CONFIG_MACH_RK30_DS1001B
|
||||
USB_IOMUX_INIT(GPIO0A5_OTGDRVVBUS_NAME, GPIO0A_GPIO0A5);
|
||||
if(gpio_request(RK30_PIN0_PA5,"host_drv")<0){
|
||||
DWC_ERROR("request of host power control failed\n");
|
||||
gpio_free(RK30_PIN0_PA5);
|
||||
}
|
||||
gpio_direction_output(RK30_PIN0_PA5, GPIO_HIGH);
|
||||
gpio_set_value(RK30_PIN0_PA5, GPIO_HIGH);
|
||||
#endif
|
||||
#endif
|
||||
/*
|
||||
* Initialize the DWC_otg core.
|
||||
|
|
|
|||
|
|
@ -65,6 +65,10 @@ static int MW100_USB = 0;
|
|||
static int MT6229_USB = 0;
|
||||
#define MT6229_USB_PORT (SERIAL_TTY_MINORS - 10)
|
||||
#endif
|
||||
#ifdef CONFIG_SEW868
|
||||
static int SEW868_USB = 0;
|
||||
#define SEW868_USB_PORT (SERIAL_TTY_MINORS - 10)
|
||||
#endif
|
||||
|
||||
/* There is no MODULE_DEVICE_TABLE for usbserial.c. Instead
|
||||
the MODULE_DEVICE_TABLE declarations in each serial driver
|
||||
|
|
@ -126,6 +130,10 @@ static struct usb_serial *get_free_serial(struct usb_serial *serial,
|
|||
#ifdef CONFIG_MT6229
|
||||
if (MT6229_USB)
|
||||
a= MT6229_USB_PORT;
|
||||
#endif
|
||||
#ifdef CONFIG_SEW868
|
||||
if (SEW868_USB)
|
||||
a= SEW868_USB_PORT;
|
||||
#endif
|
||||
for (i = a; i < SERIAL_TTY_MINORS; ++i) {
|
||||
if (serial_table[i])
|
||||
|
|
@ -1103,6 +1111,12 @@ int usb_serial_probe(struct usb_interface *interface,
|
|||
else
|
||||
MT6229_USB = 0;
|
||||
#endif
|
||||
#ifdef CONFIG_SEW868
|
||||
if ((le16_to_cpu(dev->descriptor.idVendor) == 0x19d2) && (le16_to_cpu(dev->descriptor.idProduct) == 0xffeb))
|
||||
SEW868_USB =1;
|
||||
else
|
||||
SEW868_USB = 0;
|
||||
#endif
|
||||
|
||||
/* Avoid race with tty_open and serial_install by setting the
|
||||
* disconnected flag and not clearing it until all ports have been
|
||||
|
|
|
|||
|
|
@ -35,7 +35,11 @@
|
|||
|
||||
|
||||
#define PWM_DIV PWM_DIV2
|
||||
#ifdef CONFIG_MACH_RK30_DS1001B
|
||||
#define PWM_APB_PRE_DIV 20000
|
||||
#else
|
||||
#define PWM_APB_PRE_DIV 1000
|
||||
#endif
|
||||
#define BL_STEP 255
|
||||
|
||||
#endif /* __ASM_ARCH_RK2818_BACKLIGHT_H */
|
||||
|
|
|
|||
|
|
@ -40,5 +40,12 @@ config DUAL_DISP_IN_KERNEL
|
|||
default y if HDMI_RK30
|
||||
help
|
||||
select y will implement dual screen display in kernel
|
||||
|
||||
config THREE_FB_BUFFER
|
||||
bool "Three fb buffer support"
|
||||
depends on FB_ROCKCHIP
|
||||
default y
|
||||
help
|
||||
select y if android support three buffer,like Jelly Bean
|
||||
source "drivers/video/rockchip/hdmi/Kconfig"
|
||||
source "drivers/video/rockchip/rga/Kconfig"
|
||||
|
|
|
|||
|
|
@ -47,12 +47,14 @@ static int init_rk30_lcdc(struct rk_lcdc_device_driver *dev_drv)
|
|||
struct rk30_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk30_lcdc_device,driver);
|
||||
if(lcdc_dev->id == 0) //lcdc0
|
||||
{
|
||||
lcdc_dev->pd = clk_get(NULL,"pd_lcdc0");
|
||||
lcdc_dev->hclk = clk_get(NULL,"hclk_lcdc0");
|
||||
lcdc_dev->aclk = clk_get(NULL,"aclk_lcdc0");
|
||||
lcdc_dev->dclk = clk_get(NULL,"dclk_lcdc0");
|
||||
}
|
||||
else if(lcdc_dev->id == 1)
|
||||
{
|
||||
lcdc_dev->pd = clk_get(NULL,"pd_lcdc1");
|
||||
lcdc_dev->hclk = clk_get(NULL,"hclk_lcdc1");
|
||||
lcdc_dev->aclk = clk_get(NULL,"aclk_lcdc1");
|
||||
lcdc_dev->dclk = clk_get(NULL,"dclk_lcdc1");
|
||||
|
|
@ -62,10 +64,11 @@ static int init_rk30_lcdc(struct rk_lcdc_device_driver *dev_drv)
|
|||
printk(KERN_ERR "invalid lcdc device!\n");
|
||||
return -EINVAL;
|
||||
}
|
||||
if ((IS_ERR(lcdc_dev->aclk)) ||(IS_ERR(lcdc_dev->dclk)) || (IS_ERR(lcdc_dev->hclk)))
|
||||
if (IS_ERR(lcdc_dev->pd) || (IS_ERR(lcdc_dev->aclk)) ||(IS_ERR(lcdc_dev->dclk)) || (IS_ERR(lcdc_dev->hclk)))
|
||||
{
|
||||
printk(KERN_ERR "failed to get lcdc%d clk source\n",lcdc_dev->id);
|
||||
}
|
||||
clk_enable(lcdc_dev->pd);
|
||||
clk_enable(lcdc_dev->hclk); //enable aclk and hclk for register config
|
||||
clk_enable(lcdc_dev->aclk);
|
||||
lcdc_dev->clk_on = 1;
|
||||
|
|
@ -79,19 +82,30 @@ static int init_rk30_lcdc(struct rk_lcdc_device_driver *dev_drv)
|
|||
LcdMskReg(lcdc_dev,INT_STATUS,m_FRM_START_INT_CLEAR | m_BUS_ERR_INT_CLEAR | m_LINE_FLAG_INT_EN |
|
||||
m_FRM_START_INT_EN | m_HOR_START_INT_EN,v_FRM_START_INT_CLEAR(1) | v_BUS_ERR_INT_CLEAR(0) |
|
||||
v_LINE_FLAG_INT_EN(0) | v_FRM_START_INT_EN(0) | v_HOR_START_INT_EN(0)); //enable frame start interrupt for sync
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01); // write any value to REG_CFG_DONE let config become effective
|
||||
LCDC_REG_CFG_DONE(); // write any value to REG_CFG_DONE let config become effective
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rk30_lcdc_deinit(struct rk30_lcdc_device *lcdc_dev)
|
||||
{
|
||||
LcdSetBit(lcdc_dev,SYS_CTRL0,m_LCDC_STANDBY);
|
||||
clk_disable(lcdc_dev->aclk);
|
||||
clk_disable(lcdc_dev->dclk);
|
||||
clk_disable(lcdc_dev->hclk);
|
||||
clk_put(lcdc_dev->aclk);
|
||||
clk_put(lcdc_dev->dclk);
|
||||
clk_put(lcdc_dev->hclk);
|
||||
spin_lock(&lcdc_dev->reg_lock);
|
||||
if(likely(lcdc_dev->clk_on))
|
||||
{
|
||||
lcdc_dev->clk_on = 0;
|
||||
LcdMskReg(lcdc_dev, INT_STATUS, m_FRM_START_INT_CLEAR, v_FRM_START_INT_CLEAR(1));
|
||||
LcdMskReg(lcdc_dev, INT_STATUS, m_HOR_START_INT_EN | m_FRM_START_INT_EN |
|
||||
m_LINE_FLAG_INT_EN | m_BUS_ERR_INT_EN,v_HOR_START_INT_EN(0) | v_FRM_START_INT_EN(0) |
|
||||
v_LINE_FLAG_INT_EN(0) | v_BUS_ERR_INT_EN(0)); //disable all lcdc interrupt
|
||||
LcdSetBit(lcdc_dev,SYS_CTRL0,m_LCDC_STANDBY);
|
||||
LCDC_REG_CFG_DONE();
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
}
|
||||
else //clk already disabled
|
||||
{
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
return 0;
|
||||
}
|
||||
mdelay(1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -195,7 +209,7 @@ static int rk30_load_screen(struct rk_lcdc_device_driver *dev_drv, bool initscre
|
|||
LcdWrReg(lcdc_dev, DSP_VACT_ST_END, v_VAEP(screen->vsync_len + screen->upper_margin+y_res)|
|
||||
v_VASP(screen->vsync_len + screen->upper_margin));
|
||||
// let above to take effect
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
|
||||
|
|
@ -238,9 +252,26 @@ static int win0_open(struct rk30_lcdc_device *lcdc_dev,bool open)
|
|||
spin_lock(&lcdc_dev->reg_lock);
|
||||
if(likely(lcdc_dev->clk_on))
|
||||
{
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL1, m_W0_EN, v_W0_EN(open));
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
if(open)
|
||||
{
|
||||
if(!lcdc_dev->atv_layer_cnt)
|
||||
{
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(0));
|
||||
}
|
||||
lcdc_dev->atv_layer_cnt++;
|
||||
}
|
||||
else
|
||||
{
|
||||
lcdc_dev->atv_layer_cnt--;
|
||||
}
|
||||
lcdc_dev->driver.layer_par[0]->state = open;
|
||||
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL1, m_W0_EN, v_W0_EN(open));
|
||||
if(!lcdc_dev->atv_layer_cnt) //if no layer used,disable lcdc
|
||||
{
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(1));
|
||||
}
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
printk(KERN_INFO "lcdc%d win0 %s\n",lcdc_dev->id,open?"open":"closed");
|
||||
|
|
@ -251,9 +282,28 @@ static int win1_open(struct rk30_lcdc_device *lcdc_dev,bool open)
|
|||
spin_lock(&lcdc_dev->reg_lock);
|
||||
if(likely(lcdc_dev->clk_on))
|
||||
{
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL1, m_W1_EN, v_W1_EN(open));
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
if(open)
|
||||
{
|
||||
if(!lcdc_dev->atv_layer_cnt)
|
||||
{
|
||||
printk("lcdc%d wakeup from stanby\n",lcdc_dev->id);
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(0));
|
||||
}
|
||||
lcdc_dev->atv_layer_cnt++;
|
||||
}
|
||||
else
|
||||
{
|
||||
lcdc_dev->atv_layer_cnt--;
|
||||
}
|
||||
lcdc_dev->driver.layer_par[1]->state = open;
|
||||
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL1, m_W1_EN, v_W1_EN(open));
|
||||
if(!lcdc_dev->atv_layer_cnt) //if no layer used,disable lcdc
|
||||
{
|
||||
printk(KERN_INFO "no layer of lcdc%d is used,go to standby!",lcdc_dev->id);
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(1));
|
||||
}
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
printk(KERN_INFO "lcdc%d win1 %s\n",lcdc_dev->id,open?"open":"closed");
|
||||
|
|
@ -282,7 +332,7 @@ static int rk30_lcdc_blank(struct rk_lcdc_device_driver*lcdc_drv,int layer_id,in
|
|||
LcdMskReg(lcdc_dev,DSP_CTRL1,m_BLANK_MODE ,v_BLANK_MODE(1));
|
||||
break;
|
||||
}
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
|
||||
|
|
@ -302,7 +352,7 @@ static int win0_display(struct rk30_lcdc_device *lcdc_dev,struct layer_par *par
|
|||
{
|
||||
LcdWrReg(lcdc_dev, WIN0_YRGB_MST0, y_addr);
|
||||
LcdWrReg(lcdc_dev, WIN0_CBR_MST0, uv_addr);
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
|
||||
|
|
@ -323,7 +373,7 @@ static int win1_display(struct rk30_lcdc_device *lcdc_dev,struct layer_par *par
|
|||
{
|
||||
LcdWrReg(lcdc_dev, WIN1_YRGB_MST, y_addr);
|
||||
LcdWrReg(lcdc_dev, WIN1_CBR_MST, uv_addr);
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
|
||||
|
|
@ -403,7 +453,7 @@ static int win0_set_par(struct rk30_lcdc_device *lcdc_dev,rk_screen *screen,
|
|||
break;
|
||||
}
|
||||
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
|
||||
|
|
@ -484,7 +534,7 @@ static int win1_set_par(struct rk30_lcdc_device *lcdc_dev,rk_screen *screen,
|
|||
break;
|
||||
}
|
||||
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
return 0;
|
||||
|
|
@ -556,22 +606,21 @@ int rk30_lcdc_pan_display(struct rk_lcdc_device_driver * dev_drv,int layer_id)
|
|||
dev_drv->first_frame = 0;
|
||||
LcdMskReg(lcdc_dev,INT_STATUS,m_FRM_START_INT_CLEAR |m_FRM_START_INT_EN ,
|
||||
v_FRM_START_INT_CLEAR(1) | v_FRM_START_INT_EN(1));
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01); // write any value to REG_CFG_DONE let config become effective
|
||||
LCDC_REG_CFG_DONE(); // write any value to REG_CFG_DONE let config become effective
|
||||
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&dev_drv->cpl_lock,flags);
|
||||
init_completion(&dev_drv->frame_done);
|
||||
spin_unlock_irqrestore(&dev_drv->cpl_lock,flags);
|
||||
timeout = wait_for_completion_interruptible_timeout(&dev_drv->frame_done,msecs_to_jiffies(dev_drv->screen->ft+5));
|
||||
if(!timeout)
|
||||
if(dev_drv->num_buf < 3) //3buffer ,no need to wait for sysn
|
||||
{
|
||||
printk(KERN_ERR "wait for new frame start time out!\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
else if(timeout < 0)
|
||||
{
|
||||
return timeout;
|
||||
spin_lock_irqsave(&dev_drv->cpl_lock,flags);
|
||||
init_completion(&dev_drv->frame_done);
|
||||
spin_unlock_irqrestore(&dev_drv->cpl_lock,flags);
|
||||
timeout = wait_for_completion_timeout(&dev_drv->frame_done,msecs_to_jiffies(dev_drv->screen->ft+5));
|
||||
if(!timeout&&(!dev_drv->frame_done.done))
|
||||
{
|
||||
printk(KERN_ERR "wait for new frame start time out!\n");
|
||||
return -ETIMEDOUT;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
@ -638,6 +687,7 @@ static int rk30_lcdc_ovl_mgr(struct rk_lcdc_device_driver *dev_drv,int swap,bool
|
|||
{
|
||||
LcdMskReg(lcdc_dev,DSP_CTRL0,m_W0W1_POSITION_SWAP,v_W0W1_POSITION_SWAP(swap));
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
LCDC_REG_CFG_DONE();
|
||||
ovl = swap;
|
||||
}
|
||||
else //get overlay
|
||||
|
|
@ -700,11 +750,27 @@ int rk30_lcdc_early_suspend(struct rk_lcdc_device_driver *dev_drv)
|
|||
struct rk30_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk30_lcdc_device,driver);
|
||||
|
||||
spin_lock(&lcdc_dev->reg_lock);
|
||||
lcdc_dev->clk_on = 0;
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(1));
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
if(likely(lcdc_dev->clk_on))
|
||||
{
|
||||
lcdc_dev->clk_on = 0;
|
||||
LcdMskReg(lcdc_dev, INT_STATUS, m_FRM_START_INT_CLEAR, v_FRM_START_INT_CLEAR(1));
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(1));
|
||||
LCDC_REG_CFG_DONE();
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
}
|
||||
else //clk already disabled
|
||||
{
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
mdelay(1);
|
||||
clk_disable(lcdc_dev->dclk);
|
||||
clk_disable(lcdc_dev->hclk);
|
||||
clk_disable(lcdc_dev->aclk);
|
||||
clk_disable(lcdc_dev->pd);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -713,9 +779,21 @@ int rk30_lcdc_early_resume(struct rk_lcdc_device_driver *dev_drv)
|
|||
{
|
||||
struct rk30_lcdc_device *lcdc_dev = container_of(dev_drv,struct rk30_lcdc_device,driver);
|
||||
|
||||
if(!lcdc_dev->clk_on)
|
||||
{
|
||||
clk_enable(lcdc_dev->pd);
|
||||
clk_enable(lcdc_dev->hclk);
|
||||
clk_enable(lcdc_dev->dclk);
|
||||
clk_enable(lcdc_dev->aclk);
|
||||
}
|
||||
memcpy((u8*)lcdc_dev->preg, (u8*)&lcdc_dev->regbak, 0xc4); //resume reg
|
||||
|
||||
spin_lock(&lcdc_dev->reg_lock);
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(0));
|
||||
LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01);
|
||||
if(lcdc_dev->atv_layer_cnt)
|
||||
{
|
||||
LcdMskReg(lcdc_dev, SYS_CTRL0,m_LCDC_STANDBY,v_LCDC_STANDBY(0));
|
||||
LCDC_REG_CFG_DONE();
|
||||
}
|
||||
lcdc_dev->clk_on = 1;
|
||||
spin_unlock(&lcdc_dev->reg_lock);
|
||||
|
||||
|
|
@ -724,11 +802,17 @@ int rk30_lcdc_early_resume(struct rk_lcdc_device_driver *dev_drv)
|
|||
static irqreturn_t rk30_lcdc_isr(int irq, void *dev_id)
|
||||
{
|
||||
struct rk30_lcdc_device *lcdc_dev = (struct rk30_lcdc_device *)dev_id;
|
||||
|
||||
LcdMskReg(lcdc_dev, INT_STATUS, m_FRM_START_INT_CLEAR, v_FRM_START_INT_CLEAR(1));
|
||||
LCDC_REG_CFG_DONE();
|
||||
//LcdMskReg(lcdc_dev, INT_STATUS, m_LINE_FLAG_INT_CLEAR, v_LINE_FLAG_INT_CLEAR(1));
|
||||
spin_lock(&(lcdc_dev->driver.cpl_lock));
|
||||
complete(&(lcdc_dev->driver.frame_done));
|
||||
spin_unlock(&(lcdc_dev->driver.cpl_lock));
|
||||
|
||||
if(lcdc_dev->driver.num_buf < 3) //three buffer ,no need to wait for sync
|
||||
{
|
||||
spin_lock(&(lcdc_dev->driver.cpl_lock));
|
||||
complete(&(lcdc_dev->driver.frame_done));
|
||||
spin_unlock(&(lcdc_dev->driver.cpl_lock));
|
||||
}
|
||||
return IRQ_HANDLED;
|
||||
}
|
||||
|
||||
|
|
@ -766,25 +850,11 @@ static struct rk_lcdc_device_driver lcdc_driver = {
|
|||
#ifdef CONFIG_PM
|
||||
static int rk30_lcdc_suspend(struct platform_device *pdev, pm_message_t state)
|
||||
{
|
||||
struct rk30_lcdc_device *lcdc_dev = platform_get_drvdata(pdev);
|
||||
|
||||
|
||||
clk_disable(lcdc_dev->dclk);
|
||||
clk_disable(lcdc_dev->hclk);
|
||||
clk_disable(lcdc_dev->aclk);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int rk30_lcdc_resume(struct platform_device *pdev)
|
||||
{
|
||||
struct rk30_lcdc_device *lcdc_dev = platform_get_drvdata(pdev);
|
||||
|
||||
clk_enable(lcdc_dev->hclk);
|
||||
clk_enable(lcdc_dev->dclk);
|
||||
clk_enable(lcdc_dev->aclk);
|
||||
memcpy((u8*)lcdc_dev->preg, (u8*)&lcdc_dev->regbak, 0xc4); //resume reg
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@
|
|||
#define LcdClrBit(inf, addr, msk) inf->preg->addr=((inf->regbak.addr) &= ~(msk))
|
||||
#define LcdSetRegBit(inf, addr, msk) inf->preg->addr=((inf->preg->addr) |= (msk))
|
||||
#define LcdMskReg(inf, addr, msk, val) (inf->regbak.addr)&=~(msk); inf->preg->addr=(inf->regbak.addr|=(val))
|
||||
#define LCDC_REG_CFG_DONE() LcdWrReg(lcdc_dev, REG_CFG_DONE, 0x01); dsb()
|
||||
|
||||
/********************************************************************
|
||||
** ½á¹¹¶¨Òå *
|
||||
|
|
@ -483,9 +484,11 @@ struct rk30_lcdc_device{
|
|||
u32 len; // physical map length of lcdc register
|
||||
spinlock_t reg_lock; //one time only one process allowed to config the register
|
||||
bool clk_on; //if aclk or hclk is closed ,acess to register is not allowed
|
||||
u8 atv_layer_cnt; //active layer counter,when atv_layer_cnt = 0,disable lcdc
|
||||
|
||||
unsigned int irq;
|
||||
|
||||
|
||||
struct clk *pd; //lcdc power domain
|
||||
struct clk *hclk; //lcdc AHP clk
|
||||
struct clk *dclk; //lcdc dclk
|
||||
struct clk *aclk; //lcdc share memory frequency
|
||||
|
|
|
|||
|
|
@ -249,6 +249,7 @@ static int rk_fb_ioctl(struct fb_info *info, unsigned int cmd,unsigned long arg)
|
|||
int layer_id = get_fb_layer_id(&info->fix);
|
||||
int enable; // enable fb:1 enable;0 disable
|
||||
int ovl; //overlay:0 win1 on the top of win0;1,win0 on the top of win1
|
||||
int num_buf; //buffer_number
|
||||
void __user *argp = (void __user *)arg;
|
||||
|
||||
switch(cmd)
|
||||
|
|
@ -278,10 +279,17 @@ static int rk_fb_ioctl(struct fb_info *info, unsigned int cmd,unsigned long arg)
|
|||
if (copy_from_user(&ovl, argp, sizeof(ovl)))
|
||||
return -EFAULT;
|
||||
dev_drv->ovl_mgr(dev_drv,ovl,1);
|
||||
break;
|
||||
case FBIOGET_OVERLAY_STATE:
|
||||
ovl = dev_drv->ovl_mgr(dev_drv,0,0);
|
||||
if (copy_to_user(argp, &ovl, sizeof(ovl)))
|
||||
return -EFAULT;
|
||||
break;
|
||||
case FBIOPUT_NUM_BUFFERS:
|
||||
if (copy_from_user(&num_buf, argp, sizeof(num_buf)))
|
||||
return -EFAULT;
|
||||
dev_drv->num_buf = num_buf;
|
||||
break;
|
||||
case FBIOGET_SCREEN_STATE:
|
||||
case FBIOPUT_SET_CURSOR_EN:
|
||||
case FBIOPUT_SET_CURSOR_POS:
|
||||
|
|
@ -637,7 +645,10 @@ int rk_fb_switch_screen(rk_screen *screen ,int enable ,int lcdc_id)
|
|||
layer_id = get_fb_layer_id(&info->fix);
|
||||
if(!enable)
|
||||
{
|
||||
dev_drv->open(dev_drv,layer_id,enable); //disable the layer which attached to this fb
|
||||
if(dev_drv->layer_par[layer_id]->state)
|
||||
{
|
||||
dev_drv->open(dev_drv,layer_id,enable); //disable the layer which attached to this fb
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -662,8 +673,8 @@ int rk_fb_switch_screen(rk_screen *screen ,int enable ,int lcdc_id)
|
|||
#endif
|
||||
hdmi_var->grayscale &= 0xff;
|
||||
hdmi_var->grayscale |= (dev_drv->screen->x_res<<8) + (dev_drv->screen->y_res<<20);
|
||||
ret = dev_drv->load_screen(dev_drv,1);
|
||||
ret = info->fbops->fb_open(info,1);
|
||||
ret = dev_drv->load_screen(dev_drv,1);
|
||||
ret = info->fbops->fb_set_par(info);
|
||||
#if defined(CONFIG_DUAL_DISP_IN_KERNEL)
|
||||
if(likely(inf->num_lcdc == 2))
|
||||
|
|
@ -888,7 +899,7 @@ int rk_fb_register(struct rk_lcdc_device_driver *dev_drv,
|
|||
if(NULL==fb_inf->lcdc_dev_drv[i])
|
||||
{
|
||||
fb_inf->lcdc_dev_drv[i] = dev_drv;
|
||||
fb_inf->lcdc_dev_drv[i]->id = i;
|
||||
fb_inf->lcdc_dev_drv[i]->id = id;
|
||||
fb_inf->num_lcdc++;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@
|
|||
#define FBIOPUT_SET_CURSOR_CMAP 0x460c
|
||||
#define FBIOPUT_GET_CURSOR_RESOLUTION 0x460d
|
||||
#define FBIOPUT_GET_CURSOR_EN 0x460e
|
||||
#define FBIOPUT_NUM_BUFFERS 0x4625
|
||||
|
||||
#ifdef __KERNEL__
|
||||
#define FBIO_CURSOR _IOWR('F', 0x08, struct fb_cursor_user)
|
||||
#else
|
||||
|
|
|
|||
|
|
@ -191,6 +191,7 @@ struct rk_lcdc_device_driver{
|
|||
struct layer_par *layer_par[RK_MAX_FB_SUPPORT];
|
||||
struct layer_par *def_layer_par;
|
||||
int num_layer;
|
||||
int num_buf; //the num_of buffer
|
||||
int fb_index_base; //the first fb index of the lcdc device
|
||||
rk_screen *screen;
|
||||
u32 pixclock;
|
||||
|
|
|
|||
25
include/linux/sew868.h
Executable file
25
include/linux/sew868.h
Executable file
|
|
@ -0,0 +1,25 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/ioctl.h>
|
||||
#include <linux/miscdevice.h>
|
||||
|
||||
struct modem_dev
|
||||
{
|
||||
const char *name;
|
||||
struct miscdevice miscdev;
|
||||
struct work_struct work;
|
||||
};
|
||||
|
||||
/* 耳机数据结构体 */
|
||||
struct rk30_sew868_data {
|
||||
int (*io_init)(void);
|
||||
int (*io_deinit)(void);
|
||||
unsigned int bp_sys;
|
||||
unsigned int bp_power;
|
||||
unsigned int bp_power_active_low;
|
||||
unsigned int bp_reset;
|
||||
unsigned int bp_reset_active_low;
|
||||
unsigned int bp_wakeup_ap;
|
||||
unsigned int ap_wakeup_bp;
|
||||
};
|
||||
|
||||
#define MODEM_NAME "sew868"
|
||||
Loading…
Reference in New Issue
Block a user