From 7dd9eed2401bcfdf28b93fab004e7e45c2eb0b6f Mon Sep 17 00:00:00 2001 From: zador-blood-stained Date: Sun, 26 Feb 2017 19:05:08 +0300 Subject: [PATCH] Update mainline kernel branch to 4.10.x --- config/kernel/linux-sunxi-next.config | 154 ++-- configuration.sh | 2 +- ...s4.9.patch => 0001-aufs4.9.patch.disabled} | 0 ...s4.9.patch => 0002-aufs4.9.patch.disabled} | 0 .../01-wens-banana-m1plus.patch.disabled | 397 --------- ...viop-bananas-M2-R1-M1-fixes.patch.disabled | 765 ------------------ ...=> add-configfs-overlay-for-v4.10.x.patch} | 28 - ...lime2-emmc-remove-powerseq.patch.disabled} | 0 ...5.1_sun7i-a20-bananapro_dts.patch.disabled | 242 ------ .../spi-sunxi-allow-large-transfers.patch | 158 ---- 10 files changed, 106 insertions(+), 1640 deletions(-) rename patch/kernel/sunxi-next/{0001-aufs4.9.patch => 0001-aufs4.9.patch.disabled} (100%) rename patch/kernel/sunxi-next/{0002-aufs4.9.patch => 0002-aufs4.9.patch.disabled} (100%) delete mode 100644 patch/kernel/sunxi-next/01-wens-banana-m1plus.patch.disabled delete mode 100644 patch/kernel/sunxi-next/Sinoviop-bananas-M2-R1-M1-fixes.patch.disabled rename patch/kernel/sunxi-next/{add_configfs_overlay_for_v4.7.x.patch => add-configfs-overlay-for-v4.10.x.patch} (89%) rename patch/kernel/sunxi-next/{lime2-emmc-remove-powerseq.patch => lime2-emmc-remove-powerseq.patch.disabled} (100%) delete mode 100644 patch/kernel/sunxi-next/linux-vanilla_v4.5.1_sun7i-a20-bananapro_dts.patch.disabled delete mode 100644 patch/kernel/sunxi-next/spi-sunxi-allow-large-transfers.patch diff --git a/config/kernel/linux-sunxi-next.config b/config/kernel/linux-sunxi-next.config index 2cebcd6265..9564602e8d 100644 --- a/config/kernel/linux-sunxi-next.config +++ b/config/kernel/linux-sunxi-next.config @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Linux/arm 4.9.11 Kernel Configuration +# Linux/arm 4.10.1 Kernel Configuration # CONFIG_ARM=y CONFIG_ARM_HAS_SG_CHAIN=y @@ -139,7 +139,9 @@ CONFIG_PROC_PID_CPUSET=y CONFIG_CGROUP_DEVICE=y CONFIG_CGROUP_CPUACCT=y CONFIG_CGROUP_PERF=y +CONFIG_CGROUP_BPF=y # CONFIG_CGROUP_DEBUG is not set +CONFIG_SOCK_CGROUP_DATA=y # CONFIG_CHECKPOINT_RESTORE is not set CONFIG_NAMESPACES=y CONFIG_UTS_NS=y @@ -158,6 +160,7 @@ CONFIG_RD_LZMA=y CONFIG_RD_XZ=y CONFIG_RD_LZO=y CONFIG_RD_LZ4=y +CONFIG_INITRAMFS_COMPRESSION=".gz" CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_SYSCTL=y @@ -170,6 +173,7 @@ CONFIG_MULTIUSER=y # CONFIG_SGETMASK_SYSCALL is not set CONFIG_SYSFS_SYSCALL=y # CONFIG_SYSCTL_SYSCALL is not set +CONFIG_POSIX_TIMERS=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_ALL is not set # CONFIG_KALLSYMS_ABSOLUTE_PERCPU is not set @@ -285,8 +289,12 @@ CONFIG_LBDAF=y CONFIG_BLK_DEV_BSG=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y +# CONFIG_BLK_DEV_ZONED is not set CONFIG_BLK_DEV_THROTTLING=y # CONFIG_BLK_CMDLINE_PARSER is not set +CONFIG_BLK_WBT=y +CONFIG_BLK_WBT_SQ=y +CONFIG_BLK_WBT_MQ=y # # Partition Types @@ -731,6 +739,7 @@ CONFIG_INET_XFRM_MODE_BEET=m CONFIG_INET_DIAG=m CONFIG_INET_TCP_DIAG=m CONFIG_INET_UDP_DIAG=m +CONFIG_INET_RAW_DIAG=m # CONFIG_INET_DIAG_DESTROY is not set CONFIG_TCP_CONG_ADVANCED=y CONFIG_TCP_CONG_BIC=m @@ -781,6 +790,9 @@ CONFIG_IPV6_SUBTREES=y CONFIG_IPV6_MROUTE=y CONFIG_IPV6_MROUTE_MULTIPLE_TABLES=y CONFIG_IPV6_PIMSM_V2=y +CONFIG_IPV6_SEG6_LWTUNNEL=y +CONFIG_IPV6_SEG6_INLINE=y +CONFIG_IPV6_SEG6_HMAC=y # CONFIG_NETLABEL is not set CONFIG_NETWORK_SECMARK=y CONFIG_NET_PTP_CLASSIFY=y @@ -800,6 +812,7 @@ CONFIG_NETFILTER_NETLINK_QUEUE=m CONFIG_NETFILTER_NETLINK_LOG=m CONFIG_NF_CONNTRACK=m CONFIG_NF_LOG_COMMON=m +CONFIG_NF_LOG_NETDEV=m CONFIG_NF_CONNTRACK_MARK=y CONFIG_NF_CONNTRACK_SECMARK=y CONFIG_NF_CONNTRACK_ZONES=y @@ -808,10 +821,10 @@ CONFIG_NF_CONNTRACK_EVENTS=y CONFIG_NF_CONNTRACK_TIMEOUT=y CONFIG_NF_CONNTRACK_TIMESTAMP=y CONFIG_NF_CONNTRACK_LABELS=y -CONFIG_NF_CT_PROTO_DCCP=m +CONFIG_NF_CT_PROTO_DCCP=y CONFIG_NF_CT_PROTO_GRE=m -CONFIG_NF_CT_PROTO_SCTP=m -CONFIG_NF_CT_PROTO_UDPLITE=m +CONFIG_NF_CT_PROTO_SCTP=y +CONFIG_NF_CT_PROTO_UDPLITE=y CONFIG_NF_CONNTRACK_AMANDA=m CONFIG_NF_CONNTRACK_FTP=m CONFIG_NF_CONNTRACK_H323=m @@ -828,9 +841,9 @@ CONFIG_NF_CT_NETLINK_TIMEOUT=m # CONFIG_NETFILTER_NETLINK_GLUE_CT is not set CONFIG_NF_NAT=m CONFIG_NF_NAT_NEEDED=y -CONFIG_NF_NAT_PROTO_DCCP=m -CONFIG_NF_NAT_PROTO_UDPLITE=m -CONFIG_NF_NAT_PROTO_SCTP=m +CONFIG_NF_NAT_PROTO_DCCP=y +CONFIG_NF_NAT_PROTO_UDPLITE=y +CONFIG_NF_NAT_PROTO_SCTP=y CONFIG_NF_NAT_AMANDA=m CONFIG_NF_NAT_FTP=m CONFIG_NF_NAT_IRC=m @@ -843,6 +856,7 @@ CONFIG_NF_TABLES_INET=m CONFIG_NF_TABLES_NETDEV=m CONFIG_NFT_EXTHDR=m CONFIG_NFT_META=m +CONFIG_NFT_RT=m CONFIG_NFT_NUMGEN=m CONFIG_NFT_CT=m CONFIG_NFT_SET_RBTREE=m @@ -853,12 +867,15 @@ CONFIG_NFT_LIMIT=m CONFIG_NFT_MASQ=m CONFIG_NFT_REDIR=m CONFIG_NFT_NAT=m +CONFIG_NFT_OBJREF=m CONFIG_NFT_QUEUE=m CONFIG_NFT_QUOTA=m CONFIG_NFT_REJECT=m CONFIG_NFT_REJECT_INET=m CONFIG_NFT_COMPAT=m CONFIG_NFT_HASH=m +CONFIG_NFT_FIB=m +CONFIG_NFT_FIB_INET=m # CONFIG_NF_DUP_NETDEV is not set # CONFIG_NFT_DUP_NETDEV is not set # CONFIG_NFT_FWD_NETDEV is not set @@ -960,6 +977,7 @@ CONFIG_IP_SET_HASH_IPMARK=m CONFIG_IP_SET_HASH_IPPORT=m CONFIG_IP_SET_HASH_IPPORTIP=m CONFIG_IP_SET_HASH_IPPORTNET=m +CONFIG_IP_SET_HASH_IPMAC=m CONFIG_IP_SET_HASH_MAC=m CONFIG_IP_SET_HASH_NETPORTNET=m CONFIG_IP_SET_HASH_NET=m @@ -1015,10 +1033,12 @@ CONFIG_IP_VS_PE_SIP=m # CONFIG_NF_DEFRAG_IPV4=m CONFIG_NF_CONNTRACK_IPV4=m +CONFIG_NF_SOCKET_IPV4=y CONFIG_NF_TABLES_IPV4=m CONFIG_NFT_CHAIN_ROUTE_IPV4=m CONFIG_NFT_REJECT_IPV4=m CONFIG_NFT_DUP_IPV4=m +CONFIG_NFT_FIB_IPV4=m CONFIG_NF_TABLES_ARP=m CONFIG_NF_DUP_IPV4=m CONFIG_NF_LOG_ARP=m @@ -1060,10 +1080,12 @@ CONFIG_IP_NF_ARP_MANGLE=m # CONFIG_NF_DEFRAG_IPV6=m CONFIG_NF_CONNTRACK_IPV6=m +CONFIG_NF_SOCKET_IPV6=y CONFIG_NF_TABLES_IPV6=m CONFIG_NFT_CHAIN_ROUTE_IPV6=m CONFIG_NFT_REJECT_IPV6=m CONFIG_NFT_DUP_IPV6=m +CONFIG_NFT_FIB_IPV6=m CONFIG_NF_DUP_IPV6=m CONFIG_NF_REJECT_IPV6=m CONFIG_NF_LOG_IPV6=m @@ -1296,7 +1318,6 @@ CONFIG_NET_L3_MASTER_DEV=y CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_XPS=y -CONFIG_SOCK_CGROUP_DATA=y CONFIG_CGROUP_NET_PRIO=y CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y @@ -1504,6 +1525,7 @@ CONFIG_CEPH_LIB=m # CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set # CONFIG_NFC is not set CONFIG_LWTUNNEL=y +CONFIG_LWTUNNEL_BPF=y CONFIG_DST_CACHE=y CONFIG_NET_DEVLINK=m CONFIG_MAY_USE_DEVLINK=m @@ -1533,6 +1555,7 @@ CONFIG_DEV_COREDUMP=y # CONFIG_DEBUG_DRIVER is not set # CONFIG_DEBUG_DEVRES is not set # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set # CONFIG_SYS_HYPERVISOR is not set # CONFIG_GENERIC_CPU_DEVICES is not set CONFIG_REGMAP=y @@ -1541,7 +1564,7 @@ CONFIG_REGMAP_SPI=y CONFIG_REGMAP_MMIO=y CONFIG_REGMAP_IRQ=y CONFIG_DMA_SHARED_BUFFER=y -# CONFIG_FENCE_TRACE is not set +# CONFIG_DMA_FENCE_TRACE is not set CONFIG_DMA_CMA=y # @@ -1653,6 +1676,7 @@ CONFIG_MTD_NAND_IDS=y # CONFIG_MTD_NAND_NANDSIM is not set # CONFIG_MTD_NAND_BRCMNAND is not set CONFIG_MTD_NAND_PLATFORM=y +# CONFIG_MTD_NAND_OXNAS is not set CONFIG_MTD_NAND_SUNXI=y # CONFIG_MTD_NAND_HISI504 is not set # CONFIG_MTD_NAND_MTK is not set @@ -1713,8 +1737,10 @@ CONFIG_BLK_DEV_RBD=m CONFIG_NVME_CORE=m # CONFIG_BLK_DEV_NVME_SCSI is not set CONFIG_NVME_FABRICS=m +# CONFIG_NVME_FC is not set CONFIG_NVME_TARGET=m CONFIG_NVME_TARGET_LOOP=m +# CONFIG_NVME_TARGET_FC is not set # # Misc devices @@ -1893,7 +1919,7 @@ CONFIG_BLK_DEV_DM=m # CONFIG_DM_MQ_DEFAULT is not set # CONFIG_DM_DEBUG is not set CONFIG_DM_BUFIO=m -# CONFIG_DM_DEBUG_BLOCK_STACK_TRACING is not set +# CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set CONFIG_DM_BIO_PRISON=m CONFIG_DM_PERSISTENT_DATA=m CONFIG_DM_CRYPT=m @@ -1966,6 +1992,7 @@ CONFIG_B53_SRAB_DRIVER=m # CONFIG_NET_DSA_MV88E6XXX is not set # CONFIG_NET_DSA_QCA8K is not set CONFIG_ETHERNET=y +# CONFIG_NET_VENDOR_ALACRITECH is not set CONFIG_NET_VENDOR_ALLWINNER=y CONFIG_SUN4I_EMAC=y # CONFIG_ALTERA_TSE is not set @@ -1995,6 +2022,7 @@ CONFIG_ENC28J60_WRITEVERIFY=y # CONFIG_NET_VENDOR_ROCKER is not set # CONFIG_NET_VENDOR_SAMSUNG is not set # CONFIG_NET_VENDOR_SEEQ is not set +# CONFIG_NET_VENDOR_SOLARFLARE is not set # CONFIG_NET_VENDOR_SMSC is not set CONFIG_NET_VENDOR_STMICRO=y CONFIG_STMMAC_ETH=y @@ -2007,6 +2035,7 @@ CONFIG_SYNOPSYS_DWC_ETH_QOS=m # CONFIG_NET_VENDOR_WIZNET is not set CONFIG_PHYLIB=y CONFIG_SWPHY=y +CONFIG_LED_TRIGGER_PHY=y # # MDIO bus device drivers @@ -2111,6 +2140,7 @@ CONFIG_USB_SIERRA_NET=m CONFIG_USB_VL600=m CONFIG_USB_NET_CH9200=m CONFIG_WLAN=y +CONFIG_WIRELESS_WDS=y # CONFIG_WLAN_VENDOR_ADMTEK is not set CONFIG_ATH_COMMON=m CONFIG_WLAN_VENDOR_ATH=y @@ -2465,7 +2495,6 @@ CONFIG_SERIAL_CORE_CONSOLE=y # CONFIG_SERIAL_FSL_LPUART is not set CONFIG_SERIAL_CONEXANT_DIGICOLOR=m # CONFIG_SERIAL_ST_ASC is not set -CONFIG_SERIAL_STM32=m # CONFIG_TTY_PRINTK is not set # CONFIG_PRINTER is not set # CONFIG_PPDEV is not set @@ -2497,6 +2526,7 @@ CONFIG_I2C_MUX_PCA954x=m CONFIG_I2C_MUX_PINCTRL=m CONFIG_I2C_MUX_REG=m CONFIG_I2C_DEMUX_PINCTRL=m +CONFIG_I2C_MUX_MLXCPLD=m CONFIG_I2C_HELPER_AUTO=y CONFIG_I2C_ALGOBIT=m @@ -2608,6 +2638,7 @@ CONFIG_GENERIC_PINCONF=y # CONFIG_DEBUG_PINCTRL is not set # CONFIG_PINCTRL_AMD is not set # CONFIG_PINCTRL_SINGLE is not set +# CONFIG_PINCTRL_SX150X is not set CONFIG_PINCTRL_SUNXI=y CONFIG_PINCTRL_SUN4I_A10=y CONFIG_PINCTRL_SUN5I_A10S=y @@ -2639,7 +2670,6 @@ CONFIG_GPIO_SYSFS=y CONFIG_GPIO_ALTERA=m CONFIG_GPIO_AXP209=y # CONFIG_GPIO_DWAPB is not set -# CONFIG_GPIO_EM is not set # CONFIG_GPIO_GENERIC_PLATFORM is not set # CONFIG_GPIO_GRGPIO is not set # CONFIG_GPIO_MOCKUP is not set @@ -2647,7 +2677,6 @@ CONFIG_GPIO_AXP209=y CONFIG_GPIO_SYSCON=m # CONFIG_GPIO_XILINX is not set # CONFIG_GPIO_ZEVIO is not set -# CONFIG_GPIO_ZX is not set # # I2C GPIO expanders @@ -2660,7 +2689,6 @@ CONFIG_GPIO_SYSCON=m CONFIG_GPIO_PCF857X=m # CONFIG_GPIO_SX150X is not set # CONFIG_GPIO_TPIC2810 is not set -# CONFIG_GPIO_TS4900 is not set # # MFD GPIO expanders @@ -2814,6 +2842,7 @@ CONFIG_SENSORS_MAX6650=m CONFIG_SENSORS_MAX6697=m CONFIG_SENSORS_MAX31790=m CONFIG_SENSORS_MCP3021=m +CONFIG_SENSORS_TC654=m CONFIG_SENSORS_ADCXX=m CONFIG_SENSORS_LM63=m CONFIG_SENSORS_LM70=m @@ -2868,6 +2897,7 @@ CONFIG_SENSORS_TC74=m CONFIG_SENSORS_THMC50=m CONFIG_SENSORS_TMP102=m CONFIG_SENSORS_TMP103=m +CONFIG_SENSORS_TMP108=m CONFIG_SENSORS_TMP401=m CONFIG_SENSORS_TMP421=m CONFIG_SENSORS_VT1211=m @@ -2964,6 +2994,7 @@ CONFIG_BCMA_BLOCKIO=y # CONFIG_MFD_CORE=y # CONFIG_MFD_ACT8945A is not set +CONFIG_MFD_SUN4I_GPADC=y # CONFIG_MFD_AS3711 is not set # CONFIG_MFD_AS3722 is not set # CONFIG_PMIC_ADP5520 is not set @@ -2985,7 +3016,6 @@ CONFIG_MFD_AXP20X_RSB=y # CONFIG_MFD_DA9063 is not set # CONFIG_MFD_DA9150 is not set # CONFIG_MFD_DLN2 is not set -# CONFIG_MFD_EXYNOS_LPASS is not set # CONFIG_MFD_MC13XXX_SPI is not set # CONFIG_MFD_MC13XXX_I2C is not set # CONFIG_MFD_HI6421_PMIC is not set @@ -3012,7 +3042,7 @@ CONFIG_MFD_AXP20X_RSB=y # CONFIG_MFD_RETU is not set # CONFIG_MFD_PCF50633 is not set # CONFIG_UCB1400_CORE is not set -# CONFIG_MFD_PM8921_CORE is not set +# CONFIG_MFD_PM8XXX is not set # CONFIG_MFD_RT5033 is not set # CONFIG_MFD_RTSX_USB is not set # CONFIG_MFD_RC5T583 is not set @@ -3108,6 +3138,7 @@ CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y CONFIG_MEDIA_RADIO_SUPPORT=y CONFIG_MEDIA_SDR_SUPPORT=y CONFIG_MEDIA_RC_SUPPORT=y +# CONFIG_MEDIA_CEC_SUPPORT is not set CONFIG_MEDIA_CEC_EDID=y CONFIG_MEDIA_CONTROLLER=y # CONFIG_MEDIA_CONTROLLER_DVB is not set @@ -3129,6 +3160,7 @@ CONFIG_DVB_NET=y CONFIG_TTPCI_EEPROM=m CONFIG_DVB_MAX_ADAPTERS=8 CONFIG_DVB_DYNAMIC_MINORS=y +# CONFIG_DVB_DEMUX_SECTION_LOSS_LOG is not set # # Media drivers @@ -3160,6 +3192,8 @@ CONFIG_RC_DEVICES=y # CONFIG_RC_LOOPBACK is not set # CONFIG_IR_GPIO_CIR is not set CONFIG_IR_SUNXI=m +CONFIG_IR_SERIAL=m +CONFIG_IR_SERIAL_TRANSMITTER=y CONFIG_MEDIA_USB_SUPPORT=y # @@ -3404,9 +3438,7 @@ CONFIG_VIDEO_SAA6588=m CONFIG_VIDEO_ADV7180=m CONFIG_VIDEO_ADV7183=m CONFIG_VIDEO_ADV7604=m -# CONFIG_VIDEO_ADV7604_CEC is not set CONFIG_VIDEO_ADV7842=m -# CONFIG_VIDEO_ADV7842_CEC is not set CONFIG_VIDEO_BT819=m CONFIG_VIDEO_BT856=m CONFIG_VIDEO_BT866=m @@ -3440,7 +3472,6 @@ CONFIG_VIDEO_ADV7175=m CONFIG_VIDEO_ADV7343=m CONFIG_VIDEO_ADV7393=m CONFIG_VIDEO_ADV7511=m -# CONFIG_VIDEO_ADV7511_CEC is not set CONFIG_VIDEO_AD9389B=m CONFIG_VIDEO_AK881X=m CONFIG_VIDEO_THS8200=m @@ -3870,6 +3901,7 @@ CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y # Allwinner SoC Audio support # CONFIG_SND_SUN4I_CODEC=m +CONFIG_SND_SUN8I_CODEC_ANALOG=m CONFIG_SND_SUN4I_I2S=m CONFIG_SND_SUN4I_SPDIF=m # CONFIG_SND_SOC_XTFPGA_I2S is not set @@ -3890,6 +3922,8 @@ CONFIG_SND_SOC_I2C_AND_SPI=m # CONFIG_SND_SOC_BT_SCO is not set # CONFIG_SND_SOC_CS35L32 is not set # CONFIG_SND_SOC_CS35L33 is not set +# CONFIG_SND_SOC_CS35L34 is not set +# CONFIG_SND_SOC_CS42L42 is not set # CONFIG_SND_SOC_CS42L51_I2C is not set # CONFIG_SND_SOC_CS42L52 is not set # CONFIG_SND_SOC_CS42L56 is not set @@ -3906,6 +3940,7 @@ CONFIG_SND_SOC_I2C_AND_SPI=m # CONFIG_SND_SOC_INNO_RK3036 is not set # CONFIG_SND_SOC_MAX98504 is not set # CONFIG_SND_SOC_MAX9860 is not set +# CONFIG_SND_SOC_MSM8916_WCD_DIGITAL is not set # CONFIG_SND_SOC_PCM1681 is not set # CONFIG_SND_SOC_PCM179X_I2C is not set # CONFIG_SND_SOC_PCM179X_SPI is not set @@ -4021,6 +4056,7 @@ CONFIG_LOGIRUMBLEPAD2_FF=y CONFIG_LOGIG940_FF=y CONFIG_LOGIWHEELS_FF=y CONFIG_HID_MAGICMOUSE=m +# CONFIG_HID_MAYFLASH is not set CONFIG_HID_MICROSOFT=m CONFIG_HID_MONTEREY=m CONFIG_HID_MULTITOUCH=m @@ -4056,6 +4092,7 @@ CONFIG_HID_TOPSEED=m CONFIG_HID_THINGM=m CONFIG_HID_THRUSTMASTER=m CONFIG_THRUSTMASTER_FF=y +# CONFIG_HID_UDRAW_PS3 is not set CONFIG_HID_WACOM=m CONFIG_HID_WIIMOTE=m CONFIG_HID_XINMO=m @@ -4206,6 +4243,7 @@ CONFIG_USB_SERIAL_IR=m CONFIG_USB_SERIAL_EDGEPORT=m CONFIG_USB_SERIAL_EDGEPORT_TI=m CONFIG_USB_SERIAL_F81232=m +CONFIG_USB_SERIAL_F8153X=m CONFIG_USB_SERIAL_GARMIN=m CONFIG_USB_SERIAL_IPW=m CONFIG_USB_SERIAL_IUU=m @@ -4362,10 +4400,6 @@ CONFIG_MMC=y # CONFIG_MMC_DEBUG is not set CONFIG_PWRSEQ_EMMC=m CONFIG_PWRSEQ_SIMPLE=m - -# -# MMC/SD/SDIO Card Drivers -# CONFIG_MMC_BLOCK=y CONFIG_MMC_BLOCK_MINORS=8 CONFIG_MMC_BLOCK_BOUNCE=y @@ -4423,6 +4457,7 @@ CONFIG_LEDS_REGULATOR=m # # CONFIG_LEDS_BLINKM is not set CONFIG_LEDS_SYSCON=y +CONFIG_LEDS_USER=y # # LED Triggers @@ -4548,6 +4583,7 @@ CONFIG_RTC_I2C_AND_SPI=y CONFIG_RTC_DRV_SUN6I=y CONFIG_RTC_DRV_SUNXI=y # CONFIG_RTC_DRV_SNVS is not set +# CONFIG_RTC_DRV_R7301 is not set # # HID Sensor RTC drivers @@ -4658,9 +4694,7 @@ CONFIG_88EU_AP_MODE=y # # Light sensors # -# CONFIG_SENSORS_ISL29018 is not set # CONFIG_SENSORS_ISL29028 is not set -# CONFIG_TSL2583 is not set # CONFIG_TSL2x7x is not set # @@ -4689,14 +4723,10 @@ CONFIG_88EU_AP_MODE=y # CONFIG_SPEAKUP is not set CONFIG_STAGING_MEDIA=y CONFIG_I2C_BCM2048=m -CONFIG_MEDIA_CEC=y -# CONFIG_MEDIA_CEC_DEBUG is not set -CONFIG_USB_PULSE8_CEC=m CONFIG_LIRC_STAGING=y # CONFIG_LIRC_IMON is not set # CONFIG_LIRC_PARALLEL is not set # CONFIG_LIRC_SASEM is not set -# CONFIG_LIRC_SERIAL is not set # CONFIG_LIRC_SIR is not set # CONFIG_LIRC_ZILOG is not set @@ -4776,6 +4806,13 @@ CONFIG_CLK_QORIQ=y CONFIG_COMMON_CLK_PWM=m # CONFIG_COMMON_CLK_PXA is not set # CONFIG_COMMON_CLK_PIC32 is not set +# CONFIG_COMMON_CLK_MT2701 is not set +# CONFIG_COMMON_CLK_MT2701_MMSYS is not set +# CONFIG_COMMON_CLK_MT2701_IMGSYS is not set +# CONFIG_COMMON_CLK_MT2701_VDECSYS is not set +# CONFIG_COMMON_CLK_MT2701_HIFSYS is not set +# CONFIG_COMMON_CLK_MT2701_ETHSYS is not set +# CONFIG_COMMON_CLK_MT2701_BDPSYS is not set CONFIG_SUNXI_CCU=y CONFIG_SUNXI_CCU_DIV=y CONFIG_SUNXI_CCU_FRAC=y @@ -4788,6 +4825,7 @@ CONFIG_SUNXI_CCU_NKM=y CONFIG_SUNXI_CCU_NKMP=y CONFIG_SUNXI_CCU_NM=y CONFIG_SUNXI_CCU_MP=y +CONFIG_SUN50I_A64_CCU=y CONFIG_SUN6I_A31_CCU=y CONFIG_SUN8I_A23_CCU=y CONFIG_SUN8I_A33_CCU=y @@ -4831,7 +4869,7 @@ CONFIG_ARM_SMMU=y # # Remoteproc drivers # -# CONFIG_STE_MODEM_RPROC is not set +# CONFIG_REMOTEPROC is not set # # Rpmsg drivers @@ -4889,8 +4927,11 @@ CONFIG_IIO=y # CONFIG_BMA180 is not set # CONFIG_BMA220 is not set # CONFIG_BMC150_ACCEL is not set +# CONFIG_DA280 is not set +# CONFIG_DA311 is not set # CONFIG_DMARD06 is not set # CONFIG_DMARD09 is not set +# CONFIG_DMARD10 is not set # CONFIG_HID_SENSOR_ACCEL_3D is not set # CONFIG_IIO_ST_ACCEL_3AXIS is not set # CONFIG_KXSD9 is not set @@ -4904,6 +4945,7 @@ CONFIG_IIO=y # CONFIG_MMA9553 is not set # CONFIG_MXC4005 is not set # CONFIG_MXC6255 is not set +# CONFIG_SCA3000 is not set # CONFIG_STK8312 is not set # CONFIG_STK8BA50 is not set @@ -4914,6 +4956,7 @@ CONFIG_IIO=y # CONFIG_AD7291 is not set # CONFIG_AD7298 is not set # CONFIG_AD7476 is not set +# CONFIG_AD7766 is not set # CONFIG_AD7791 is not set # CONFIG_AD7793 is not set # CONFIG_AD7887 is not set @@ -4921,6 +4964,7 @@ CONFIG_IIO=y # CONFIG_AD799X is not set CONFIG_AXP288_ADC=y # CONFIG_CC10001_ADC is not set +# CONFIG_ENVELOPE_DETECTOR is not set # CONFIG_HI8435 is not set # CONFIG_INA2XX_ADC is not set # CONFIG_LTC2485 is not set @@ -4960,6 +5004,10 @@ CONFIG_AXP288_ADC=y # # CONFIG_IIO_SSP_SENSORHUB is not set +# +# Counters +# + # # Digital to analog converters # @@ -4980,6 +5028,7 @@ CONFIG_AXP288_ADC=y # CONFIG_AD5791 is not set # CONFIG_AD7303 is not set # CONFIG_AD8801 is not set +# CONFIG_DPOT_DAC is not set # CONFIG_M62332 is not set # CONFIG_MAX517 is not set # CONFIG_MAX5821 is not set @@ -5015,6 +5064,7 @@ CONFIG_AXP288_ADC=y # CONFIG_ADXRS450 is not set # CONFIG_BMG160 is not set # CONFIG_HID_SENSOR_GYRO_3D is not set +# CONFIG_MPU3050_I2C is not set # CONFIG_IIO_ST_GYRO_3AXIS is not set # CONFIG_ITG3200 is not set @@ -5035,6 +5085,7 @@ CONFIG_AXP288_ADC=y # CONFIG_AM2315 is not set # CONFIG_DHT11 is not set # CONFIG_HDC100X is not set +# CONFIG_HTS221 is not set # CONFIG_HTU21 is not set # CONFIG_SI7005 is not set # CONFIG_SI7020 is not set @@ -5064,6 +5115,7 @@ CONFIG_AXP288_ADC=y # CONFIG_CM3323 is not set # CONFIG_CM36651 is not set # CONFIG_GP2AP020A00F is not set +# CONFIG_SENSORS_ISL29018 is not set # CONFIG_ISL29125 is not set # CONFIG_HID_SENSOR_ALS is not set # CONFIG_HID_SENSOR_PROX is not set @@ -5078,6 +5130,7 @@ CONFIG_AXP288_ADC=y # CONFIG_TCS3414 is not set # CONFIG_TCS3472 is not set # CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL2583 is not set # CONFIG_TSL4531 is not set # CONFIG_US5182D is not set # CONFIG_VCNL4000 is not set @@ -5113,9 +5166,15 @@ CONFIG_AXP288_ADC=y # CONFIG_MCP4531 is not set # CONFIG_TPL0102 is not set +# +# Digital potentiostats +# +# CONFIG_LMP91000 is not set + # # Pressure sensors # +# CONFIG_ABP060MG is not set # CONFIG_BMP280 is not set # CONFIG_HID_SENSOR_PRESS is not set # CONFIG_HP03 is not set @@ -5169,6 +5228,7 @@ CONFIG_RESET_CONTROLLER=y CONFIG_RESET_SUNXI=y # CONFIG_TI_SYSCON_RESET is not set # CONFIG_RESET_ZYNQ is not set +# CONFIG_RESET_TEGRA_BPMP is not set # CONFIG_FMC is not set # @@ -5200,6 +5260,7 @@ CONFIG_STM=m CONFIG_STM_DUMMY=m CONFIG_STM_SOURCE_CONSOLE=m # CONFIG_STM_SOURCE_HEARTBEAT is not set +# CONFIG_STM_SOURCE_FTRACE is not set # CONFIG_INTEL_TH is not set # @@ -5211,11 +5272,16 @@ CONFIG_STM_SOURCE_CONSOLE=m # Firmware Drivers # CONFIG_ARM_PSCI_FW=y +# CONFIG_ARM_PSCI_CHECKER is not set # CONFIG_FIRMWARE_MEMMAP is not set CONFIG_FW_CFG_SYSFS=m # CONFIG_FW_CFG_SYSFS_CMDLINE is not set CONFIG_HAVE_ARM_SMCCC=y +# +# Tegra firmware driver +# + # # File systems # @@ -5289,6 +5355,7 @@ CONFIG_AUTOFS4_FS=y CONFIG_FUSE_FS=m CONFIG_CUSE=m CONFIG_OVERLAY_FS=m +# CONFIG_OVERLAY_FS_REDIRECT_DIR is not set # # Caches @@ -5364,7 +5431,7 @@ CONFIG_UBIFS_FS_ADVANCED_COMPR=y CONFIG_UBIFS_FS_LZO=y CONFIG_UBIFS_FS_ZLIB=y CONFIG_UBIFS_ATIME_SUPPORT=y -# CONFIG_LOGFS is not set +CONFIG_UBIFS_FS_ENCRYPTION=y # CONFIG_CRAMFS is not set CONFIG_SQUASHFS=m CONFIG_SQUASHFS_FILE_CACHE=y @@ -5390,23 +5457,6 @@ CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 # CONFIG_PSTORE is not set # CONFIG_SYSV_FS is not set # CONFIG_UFS_FS is not set -CONFIG_AUFS_FS=m -CONFIG_AUFS_BRANCH_MAX_127=y -# CONFIG_AUFS_BRANCH_MAX_511 is not set -# CONFIG_AUFS_BRANCH_MAX_1023 is not set -# CONFIG_AUFS_BRANCH_MAX_32767 is not set -CONFIG_AUFS_SBILIST=y -# CONFIG_AUFS_HNOTIFY is not set -# CONFIG_AUFS_EXPORT is not set -# CONFIG_AUFS_XATTR is not set -# CONFIG_AUFS_FHSM is not set -# CONFIG_AUFS_RDU is not set -# CONFIG_AUFS_SHWH is not set -# CONFIG_AUFS_BR_RAMFS is not set -# CONFIG_AUFS_BR_FUSE is not set -CONFIG_AUFS_BR_HFSPLUS=y -CONFIG_AUFS_BDEV_LOOP=y -# CONFIG_AUFS_DEBUG is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V2=y @@ -5525,6 +5575,7 @@ CONFIG_NLS_UTF8=y # printk and dmesg options # CONFIG_PRINTK_TIME=y +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=2 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 # CONFIG_BOOT_PRINTK_DELAY is not set # CONFIG_DYNAMIC_DEBUG is not set @@ -5686,6 +5737,7 @@ CONFIG_TEST_HEXDUMP=m # CONFIG_TEST_UDELAY is not set # CONFIG_MEMTEST is not set # CONFIG_TEST_STATIC_KEYS is not set +# CONFIG_BUG_ON_DATA_CORRUPTION is not set # CONFIG_SAMPLES is not set CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set @@ -5788,6 +5840,7 @@ CONFIG_CRYPTO_AKCIPHER2=y CONFIG_CRYPTO_AKCIPHER=m CONFIG_CRYPTO_KPP2=y CONFIG_CRYPTO_KPP=m +CONFIG_CRYPTO_ACOMP2=y CONFIG_CRYPTO_RSA=m CONFIG_CRYPTO_DH=m CONFIG_CRYPTO_ECDH=m @@ -5804,7 +5857,7 @@ CONFIG_CRYPTO_CRYPTD=m CONFIG_CRYPTO_MCRYPTD=m CONFIG_CRYPTO_AUTHENC=y # CONFIG_CRYPTO_TEST is not set -CONFIG_CRYPTO_ABLK_HELPER=m +CONFIG_CRYPTO_SIMD=m # # Authenticated Encryption with Associated Data @@ -5906,6 +5959,7 @@ CONFIG_CRYPTO_USER_API_RNG=m CONFIG_CRYPTO_USER_API_AEAD=m CONFIG_CRYPTO_HASH_INFO=y CONFIG_CRYPTO_HW=y +# CONFIG_CRYPTO_DEV_FSL_CAAM_CRYPTO_API_DESC is not set CONFIG_CRYPTO_DEV_SUN4I_SS=m CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=m @@ -5930,6 +5984,8 @@ CONFIG_CRYPTO_AES_ARM=m CONFIG_CRYPTO_AES_ARM_BS=m CONFIG_CRYPTO_AES_ARM_CE=m CONFIG_CRYPTO_GHASH_ARM_CE=m +CONFIG_CRYPTO_CRCT10DIF_ARM_CE=y +CONFIG_CRYPTO_CRC32_ARM_CE=y CONFIG_BINARY_PRINTF=y # diff --git a/configuration.sh b/configuration.sh index 1d71456293..39c69e0c32 100644 --- a/configuration.sh +++ b/configuration.sh @@ -39,7 +39,7 @@ else MAINLINE_KERNEL_SOURCE='git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git' fi # allow upgrades for same major.minor versions -ARMBIAN_MAINLINE_KERNEL_VERSION='4.9' +ARMBIAN_MAINLINE_KERNEL_VERSION='4.10' MAINLINE_KERNEL_BRANCH=tag:v$(wget -qO- https://www.kernel.org/finger_banner | awk '{print $NF}' | grep -oE "^${ARMBIAN_MAINLINE_KERNEL_VERSION//./\\.}\.?[[:digit:]]*" | tail -1) MAINLINE_KERNEL_DIR='linux-vanilla' diff --git a/patch/kernel/sunxi-next/0001-aufs4.9.patch b/patch/kernel/sunxi-next/0001-aufs4.9.patch.disabled similarity index 100% rename from patch/kernel/sunxi-next/0001-aufs4.9.patch rename to patch/kernel/sunxi-next/0001-aufs4.9.patch.disabled diff --git a/patch/kernel/sunxi-next/0002-aufs4.9.patch b/patch/kernel/sunxi-next/0002-aufs4.9.patch.disabled similarity index 100% rename from patch/kernel/sunxi-next/0002-aufs4.9.patch rename to patch/kernel/sunxi-next/0002-aufs4.9.patch.disabled diff --git a/patch/kernel/sunxi-next/01-wens-banana-m1plus.patch.disabled b/patch/kernel/sunxi-next/01-wens-banana-m1plus.patch.disabled deleted file mode 100644 index c016471b1e..0000000000 --- a/patch/kernel/sunxi-next/01-wens-banana-m1plus.patch.disabled +++ /dev/null @@ -1,397 +0,0 @@ -From 13484d2bc695f2e64aea4829c4d4414ec1fc226a Mon Sep 17 00:00:00 2001 -From: Chen-Yu Tsai -Date: Tue, 7 Jun 2016 12:31:07 +0800 -Subject: [PATCH] ARM: dts: sun7i: Add dts file for Sinovoip BPI-M1+ - -The BPI-M2+ is an A20 development board. It is an improvement over -the original Banana Pi, much like the Raspberry Pi B+ over the RPi B. -The form factor and connectors are similar to the RPi B+. The board -is also similar in design to LeMaker's Banana Pro, but the actual -wiring is different. - -It has 1GB DRAM, a micro SD card slot, HDMI output, 2 USB host connector -and 2 USB Micro OTG connector (1 for OTG, 1 only for power), an IR -receiver, gigabit Ethernet with a Realtek RTL8211E PHY, SDIO WiFi based -on Ampak AP6181. - -The board also has a 3 pin header for (debug) UART, a 40 pin GPIO header -based on the Raspberry Pi B+, but the peripheral signals are not the -same. There are 2 FPC connectors, 1 for connecting BPI's camera, the -other for BPI's LCD screen. - -Standard peripherals on the GPIO header matching the ones found on the -Raspberry Pi B+/2 are enabled by default. This includes i2c2, i2c3, -spi0, uart3. - -Signed-off-by: Chen-Yu Tsai ---- - arch/arm/boot/dts/Makefile | 1 + - .../boot/dts/sun7i-a20-sinovoip-bpi-m1-plus.dts | 347 +++++++++++++++++++++ - 2 files changed, 348 insertions(+) - create mode 100644 arch/arm/boot/dts/sun7i-a20-sinovoip-bpi-m1-plus.dts - -diff --git a/arch/arm/boot/dts/Makefile b/arch/arm/boot/dts/Makefile -index 970e906..42d4ed925 100644 ---- a/arch/arm/boot/dts/Makefile -+++ b/arch/arm/boot/dts/Makefile -@@ -746,6 +746,7 @@ dtb-$(CONFIG_MACH_SUN7I) += \ - sun7i-a20-orangepi-mini.dtb \ - sun7i-a20-pcduino3.dtb \ - sun7i-a20-pcduino3-nano.dtb \ -+ sun7i-a20-sinovoip-bpi-m1-plus.dtb \ - sun7i-a20-wexler-tab7200.dtb \ - sun7i-a20-wits-pro-a20-dkt.dtb - dtb-$(CONFIG_MACH_SUN8I) += \ -diff --git a/arch/arm/boot/dts/sun7i-a20-sinovoip-bpi-m1-plus.dts b/arch/arm/boot/dts/sun7i-a20-sinovoip-bpi-m1-plus.dts -new file mode 100644 -index 0000000..a43cb37 ---- /dev/null -+++ b/arch/arm/boot/dts/sun7i-a20-sinovoip-bpi-m1-plus.dts -@@ -0,0 +1,347 @@ -+/* -+ * Copyright 2016 Chen-Yu Tsai -+ * -+ * Chen-Yu Tsai -+ * -+ * This file is dual-licensed: you can use it either under the terms -+ * of the GPL or the X11 license, at your option. Note that this dual -+ * licensing only applies to this file, and not this project as a -+ * whole. -+ * -+ * a) This file is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of the -+ * License, or (at your option) any later version. -+ * -+ * This file is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * Or, alternatively, -+ * -+ * b) Permission is hereby granted, free of charge, to any person -+ * obtaining a copy of this software and associated documentation -+ * files (the "Software"), to deal in the Software without -+ * restriction, including without limitation the rights to use, -+ * copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following -+ * conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+/dts-v1/; -+#include "sun7i-a20.dtsi" -+#include "sunxi-common-regulators.dtsi" -+ -+#include -+#include -+#include -+ -+/ { -+ model = "Sinovoip BPI-M1-Plus"; -+ compatible = "sinovoip,bpi-m1-plus", "allwinner,sun7i-a20"; -+ -+ aliases { -+ serial0 = &uart0; -+ serial1 = &uart3; -+ }; -+ -+ chosen { -+ stdout-path = "serial0:115200n8"; -+ }; -+ -+ leds { -+ compatible = "gpio-leds"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&led_pins_bpi_m1p>; -+ -+ green { -+ label = "bpi-m1+:green:usr"; -+ gpios = <&pio 7 24 GPIO_ACTIVE_HIGH>; -+ }; -+ -+ pwr { -+ label = "bpi-m1+:pwr:usr"; -+ gpios = <&pio 7 25 GPIO_ACTIVE_HIGH>; -+ /* Designated "pwr" LED, pulled up by default */ -+ default-state = "on"; -+ }; -+ }; -+ -+ mmc3_pwrseq: mmc3_pwrseq { -+ compatible = "mmc-pwrseq-simple"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc3_pwrseq_pin_bpi_m1p>; -+ reset-gpios = <&pio 7 22 GPIO_ACTIVE_LOW>; /* PH22 WL_PMU_EN */ -+ }; -+ -+ reg_gmac_3v3: gmac-3v3 { -+ compatible = "regulator-fixed"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&gmac_power_pin_bpi_m1p>; -+ regulator-name = "gmac-3v3"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ startup-delay-us = <100000>; -+ enable-active-high; -+ gpio = <&pio 7 23 GPIO_ACTIVE_HIGH>; /* PH23 EMAC-PWR-EN */ -+ }; -+}; -+ -+&ahci { -+ status = "okay"; -+}; -+ -+&codec { -+ status = "okay"; -+}; -+ -+&cpu0 { -+ cpu-supply = <®_dcdc2>; -+ -+ /* The custom DVFS table suggests a voltage drop of 25 ~ 50 mV */ -+ operating-points = < -+ /* kHz uV */ -+ 1080000 1450000 -+ 912000 1425000 -+ 864000 1350000 -+ 720000 1250000 -+ 528000 1150000 -+ 312000 1100000 -+ 144000 1050000 -+ >; -+}; -+ -+&ehci0 { -+ status = "okay"; -+}; -+ -+&ehci1 { -+ status = "okay"; -+}; -+ -+&gmac { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&gmac_pins_rgmii_a>; -+ phy = <&phy1>; -+ phy-mode = "rgmii"; -+ phy-supply = <®_gmac_3v3>; -+ status = "okay"; -+ -+ phy1: ethernet-phy@1 { -+ reg = <1>; -+ }; -+}; -+ -+&i2c0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c0_pins_a>; -+ status = "okay"; -+ -+ axp209: pmic@34 { -+ reg = <0x34>; -+ interrupt-parent = <&nmi_intc>; -+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>; -+ }; -+}; -+ -+&i2c1 { -+ /* Designated peripheral on CSI header, externally pulled up */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c1_pins_a>; -+ status = "okay"; -+}; -+ -+&i2c2 { -+ /* Designated peripheral on GPIO header, externally pulled up */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c2_pins_a>; -+ status = "okay"; -+}; -+ -+&i2c3 { -+ /* Designated peripheral on GPIO header, externally pulled up */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c3_pins_a>; -+ status = "okay"; -+}; -+ -+&ir0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ir0_rx_pins_a>; -+ status = "okay"; -+}; -+ -+&mmc0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bpi_m1p>; -+ vmmc-supply = <®_vcc3v3>; -+ bus-width = <4>; -+ cd-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ -+ cd-inverted; -+ status = "okay"; -+}; -+ -+&mmc3 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc3_pins_a>; -+ vmmc-supply = <®_vcc3v3>; -+ mmc-pwrseq = <&mmc3_pwrseq>; -+ bus-width = <4>; -+ non-removable; -+ status = "okay"; -+ -+ brcmf: bcrmf@1 { -+ reg = <1>; -+ compatible = "brcm,bcm4329-fmac"; -+ interrupt-parent = <&pio>; -+ interrupts = <7 15 IRQ_TYPE_LEVEL_LOW>; /* PH15 WL-WAKE-AP */ -+ interrupt-names = "host-wake"; -+ }; -+}; -+ -+&mmc3_pins_a { -+ /* AP6210 requires pull-up */ -+ allwinner,pull = ; -+}; -+ -+&ohci0 { -+ status = "okay"; -+}; -+ -+&ohci1 { -+ status = "okay"; -+}; -+ -+&otg_sram { -+ status = "okay"; -+}; -+ -+&pio { -+ gmac_power_pin_bpi_m1p: gmac_power_pin@0 { -+ allwinner,pins = "PH23"; -+ allwinner,function = "gpio_out"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ led_pins_bpi_m1p: led_pins@0 { -+ allwinner,pins = "PH24", "PH25"; -+ allwinner,function = "gpio_out"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ mmc0_cd_pin_bpi_m1p: mmc0_cd_pin@1 { -+ allwinner,pins = "PH10"; -+ allwinner,function = "gpio_in"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ mmc3_pwrseq_pin_bpi_m1p: mmc3_pwrseq_pin@0 { -+ allwinner,pins = "PH22"; -+ allwinner,function = "gpio_out"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ usb0_id_detect_pin: usb0_id_detect_pin@0 { -+ allwinner,pins = "PH4"; -+ allwinner,function = "gpio_in"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+}; -+ -+#include "axp209.dtsi" -+ -+®_dcdc2 { -+ /* The custom DVFS table suggests a voltage drop of 25 ~ 50 mV */ -+ regulator-always-on; -+ regulator-min-microvolt = <1050000>; -+ regulator-max-microvolt = <1450000>; -+ regulator-name = "vdd-cpu"; -+}; -+ -+®_dcdc3 { -+ regulator-always-on; -+ regulator-min-microvolt = <1000000>; -+ regulator-max-microvolt = <1400000>; -+ regulator-name = "vdd-int-dll"; -+}; -+ -+®_ldo1 { -+ regulator-name = "vdd-rtc"; -+}; -+ -+®_ldo2 { -+ regulator-always-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "avcc"; -+}; -+ -+®_usb0_vbus { -+ /* defaults from sunxi-common-regulators.dtsi */ -+ status = "okay"; -+}; -+ -+&spi0 { -+ /* Designated peripheral on GPIO header */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&spi0_pins_a>, -+ <&spi0_cs0_pins_a>, -+ <&spi0_cs1_pins_a>; -+ status = "okay"; -+}; -+ -+&uart0 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart0_pins_a>; -+ status = "okay"; -+}; -+ -+&uart3 { -+ /* Designated peripheral on GPIO header */ -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart3_pins_b>; -+ status = "okay"; -+}; -+ -+&uart3_pins_b { -+ /* No external pull-ups */ -+ allwinner,pull = ; -+}; -+ -+&usb_otg { -+ dr_mode = "otg"; -+ status = "okay"; -+}; -+ -+&usb_power_supply { -+ status = "okay"; -+}; -+ -+&usbphy { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&usb0_id_detect_pin>; -+ usb0_id_det-gpios = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 USB0-IDDET */ -+ usb0_vbus_power-supply = <&usb_power_supply>; -+ usb0_vbus-supply = <®_usb0_vbus>; -+ /* USB host VBUS is always on */ -+ status = "okay"; -+}; diff --git a/patch/kernel/sunxi-next/Sinoviop-bananas-M2-R1-M1-fixes.patch.disabled b/patch/kernel/sunxi-next/Sinoviop-bananas-M2-R1-M1-fixes.patch.disabled deleted file mode 100644 index 6f0adf96f4..0000000000 --- a/patch/kernel/sunxi-next/Sinoviop-bananas-M2-R1-M1-fixes.patch.disabled +++ /dev/null @@ -1,765 +0,0 @@ -From f0a6e45ae1f7d061ca88156087f5762d4e6dda12 Mon Sep 17 00:00:00 2001 -From: August -Date: Thu, 27 Aug 2015 16:47:51 +0800 -Subject: [PATCH] Bananapi BPI-M1, BPI-M1_Plus, BPI-M2 and BPI-R1 support - ---- - arch/arm/boot/dts/Makefile | 3 + - arch/arm/boot/dts/sun6i-a31.dtsi | 7 + - arch/arm/boot/dts/sun6i-a31s-bananapi-m2.dts | 250 + - arch/arm/boot/dts/sun7i-a20-bananapi-m1-plus.dts | 277 + - arch/arm/boot/dts/sun7i-a20-bananapi-r1.dts | 227 + - arch/arm/boot/dts/sun7i-a20-bananapi.dts | 5 +- - arch/arm/boot/dts/sun7i-a20.dtsi | 2 +- - arch/arm/configs/bpi_defconfig | 7031 ++++++++++++++++++++++ - build.sh | 11 + - drivers/leds/trigger/Kconfig | 18 + - drivers/leds/trigger/Makefile | 3 + - drivers/leds/trigger/ledtrig-morse.c | 366 ++ - drivers/leds/trigger/ledtrig-netdev.c | 438 ++ - drivers/leds/trigger/ledtrig-usbdev.c | 348 ++ - drivers/mmc/host/sunxi-mmc.c | 50 +- - 32 files changed, 14406 insertions(+), 8 deletions(-) - mode change 100644 => 100755 arch/arm/boot/dts/Makefile - mode change 100644 => 100755 arch/arm/boot/dts/sun6i-a31.dtsi - create mode 100755 arch/arm/boot/dts/sun6i-a31s-bananapi-m2.dts - - -diff --git a/arch/arm/boot/dts/sun6i-a31.dtsi b/arch/arm/boot/dts/sun6i-a31.dtsi -old mode 100644 -new mode 100755 -index fa2f403..54fe8bf ---- a/arch/arm/boot/dts/sun6i-a31.dtsi -+++ b/arch/arm/boot/dts/sun6i-a31.dtsi -@@ -581,6 +581,13 @@ - allwinner,pull = ; - }; - -+ mmc2_pins_a: mmc2@0 { -+ allwinner,pins = "PC06","PC07","PC08","PC09","PC10","PC11"; -+ allwinner,function = "mmc2"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ - gmac_pins_mii_a: gmac_mii@0 { - allwinner,pins = "PA0", "PA1", "PA2", "PA3", - "PA8", "PA9", "PA11", - -+/* -+ * Copyright 2014 Hans de Goede -+ * -+ * Hans de Goede -+ * -+ * This file is dual-licensed: you can use it either under the terms -+ * of the GPL or the X11 license, at your option. Note that this dual -+ * licensing only applies to this file, and not this project as a -+ * whole. -+ * -+ * a) This file is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU General Public License as -+ * published by the Free Software Foundation; either version 2 of the -+ * License, or (at your option) any later version. -+ * -+ * This file is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU General Public License for more details. -+ * -+ * You should have received a copy of the GNU General Public -+ * License along with this file; if not, write to the Free -+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, -+ * MA 02110-1301 USA -+ * -+ * Or, alternatively, -+ * -+ * b) Permission is hereby granted, free of charge, to any person -+ * obtaining a copy of this software and associated documentation -+ * files (the "Software"), to deal in the Software without -+ * restriction, including without limitation the rights to use, -+ * copy, modify, merge, publish, distribute, sublicense, and/or -+ * sell copies of the Software, and to permit persons to whom the -+ * Software is furnished to do so, subject to the following -+ * conditions: -+ * -+ * The above copyright notice and this permission notice shall be -+ * included in all copies or substantial portions of the Software. -+ * -+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -+ * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -+ * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT -+ * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -+ * OTHER DEALINGS IN THE SOFTWARE. -+ */ -+ -+/dts-v1/; -+#include "sun7i-a20.dtsi" -+#include "sunxi-common-regulators.dtsi" -+ -+#include -+#include -+#include -+ -+/ { -+ model = "Banana Pi BPI-R1"; -+ compatible = "sinovoip,bpi-r1", "allwinner,sun7i-a20"; -+ -+ aliases { -+ serial0 = &uart0; -+ serial1 = &uart3; -+ serial2 = &uart7; -+ }; -+ -+ -+ leds { -+ compatible = "gpio-leds"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&led_pins_bananapi>; -+ -+ green { -+ label = "bananapi:green:usr"; -+ gpios = <&pio 7 2 GPIO_ACTIVE_HIGH>; -+ linux,default-trigger = "heartbeat"; -+ }; -+ }; -+ -+ soc@01c00000 { -+ spi0: spi@01c05000 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&spi0_pins_a>; -+ status = "okay"; -+ }; -+ -+ mmc0: mmc@01c0f000 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin_bananapi>; -+ vmmc-supply = <®_vcc3v3>; -+ bus-width = <4>; -+ cd-gpios = <&pio 7 10 GPIO_ACTIVE_HIGH>; /* PH10 */ -+ cd-inverted; -+ status = "okay"; -+ }; -+ -+ usbphy: phy@01c13400 { -+ usb1_vbus-supply = <®_usb1_vbus>; -+ usb2_vbus-supply = <®_usb2_vbus>; -+ status = "okay"; -+ }; -+ -+ ehci0: usb@01c14000 { -+ status = "okay"; -+ }; -+ -+ ohci0: usb@01c14400 { -+ status = "okay"; -+ }; -+ -+ ahci: sata@01c18000 { -+ status = "okay"; -+ }; -+ -+ ehci1: usb@01c1c000 { -+ status = "okay"; -+ }; -+ -+ ohci1: usb@01c1c400 { -+ status = "okay"; -+ }; -+ -+ pinctrl@01c20800 { -+ mmc0_cd_pin_bananapi: mmc0_cd_pin@0 { -+ allwinner,pins = "PH10"; -+ allwinner,function = "gpio_in"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ gmac_power_pin_bananapi: gmac_power_pin@0 { -+ allwinner,pins = "PH23"; -+ allwinner,function = "gpio_out"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ -+ led_pins_bananapi: led_pins@0 { -+ allwinner,pins = "PH2"; -+ allwinner,function = "gpio_out"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ }; -+ -+ ir0: ir@01c21800 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ir0_pins_a>; -+ status = "okay"; -+ }; -+ -+ uart0: serial@01c28000 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart0_pins_a>; -+ status = "okay"; -+ }; -+ -+ uart3: serial@01c28c00 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart3_pins_b>; -+ status = "okay"; -+ }; -+ -+ uart7: serial@01c29c00 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&uart7_pins_a>; -+ status = "okay"; -+ }; -+ -+ i2c0: i2c@01c2ac00 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c0_pins_a>; -+ status = "okay"; -+ -+ axp209: pmic@34 { -+ compatible = "x-powers,axp209"; -+ reg = <0x34>; -+ interrupt-parent = <&nmi_intc>; -+ interrupts = <0 IRQ_TYPE_LEVEL_LOW>; -+ -+ interrupt-controller; -+ #interrupt-cells = <1>; -+ }; -+ }; -+ -+ i2c2: i2c@01c2b400 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&i2c2_pins_a>; -+ status = "okay"; -+ }; -+ -+ gmac: ethernet@01c50000 { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&gmac_pins_rgmii_a>; -+ phy = <&phy1>; -+ phy-mode = "rgmii"; -+ phy-supply = <®_gmac_3v3>; -+ status = "okay"; -+ -+ phy1: ethernet-phy@1 { -+ reg = <1>; -+ }; -+ }; -+ }; -+ -+ -+ reg_usb1_vbus: usb1-vbus { -+ status = "okay"; -+ }; -+ -+ reg_usb2_vbus: usb2-vbus { -+ status = "okay"; -+ }; -+ -+ reg_gmac_3v3: gmac-3v3 { -+ compatible = "regulator-fixed"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&gmac_power_pin_bananapi>; -+ regulator-name = "gmac-3v3"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ startup-delay-us = <100000>; -+ enable-active-high; -+ gpio = <&pio 7 23 GPIO_ACTIVE_HIGH>; -+ }; -+}; -diff --git a/arch/arm/boot/dts/sun7i-a20-bananapi.dts b/arch/arm/boot/dts/sun7i-a20-bananapi.dts -old mode 100644 -new mode 100755 -index 5dd139e..6a75ebd ---- a/arch/arm/boot/dts/sun7i-a20-bananapi.dts -+++ b/arch/arm/boot/dts/sun7i-a20-bananapi.dts -@@ -56,8 +56,8 @@ - #include - - / { -- model = "LeMaker Banana Pi"; -- compatible = "lemaker,bananapi", "allwinner,sun7i-a20"; -+ model = "Banana Pi BPI-M1"; -+ compatible = "sinovoip,bpi-m1", "allwinner,sun7i-a20"; - - aliases { - serial0 = &uart0; -@@ -199,6 +199,7 @@ - green { - label = "bananapi:green:usr"; - gpios = <&pio 7 24 GPIO_ACTIVE_HIGH>; -+ linux,default-trigger = "heartbeat"; - }; - }; - -diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi -old mode 100644 -new mode 100755 -index 2b4847c..79e62ee ---- a/arch/arm/boot/dts/sun7i-a20.dtsi -+++ b/arch/arm/boot/dts/sun7i-a20.dtsi -@@ -948,7 +948,7 @@ - allwinner,pins = "PI4","PI5","PI6","PI7","PI8","PI9"; - allwinner,function = "mmc3"; - allwinner,drive = ; -- allwinner,pull = ; -+ allwinner,pull = ; - }; - - ir0_pins_a: ir0@0 { - - -new file mode 100755 -index 0000000..70b0e39 ---- /dev/null -+++ b/drivers/leds/trigger/ledtrig-usbdev.c -@@ -0,0 +1,348 @@ -+/* -+ * LED USB device Trigger -+ * -+ * Toggles the LED to reflect the presence and activity of an USB device -+ * Copyright (C) Gabor Juhos -+ * -+ * derived from ledtrig-netdev.c: -+ * Copyright 2007 Oliver Jowett -+ * -+ * ledtrig-netdev.c derived from ledtrig-timer.c: -+ * Copyright 2005-2006 Openedhand Ltd. -+ * Author: Richard Purdie -+ * -+ * This program is free software; you can redistribute it and/or modify -+ * it under the terms of the GNU General Public License version 2 as -+ * published by the Free Software Foundation. -+ * -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "leds.h" -+ -+#define DEV_BUS_ID_SIZE 32 -+ -+/* -+ * Configurable sysfs attributes: -+ * -+ * device_name - name of the USB device to monitor -+ * activity_interval - duration of LED blink, in milliseconds -+ */ -+ -+struct usbdev_trig_data { -+ rwlock_t lock; -+ -+ struct timer_list timer; -+ struct notifier_block notifier; -+ -+ struct led_classdev *led_cdev; -+ struct usb_device *usb_dev; -+ -+ char device_name[DEV_BUS_ID_SIZE]; -+ unsigned interval; -+ int last_urbnum; -+}; -+ -+static void usbdev_trig_update_state(struct usbdev_trig_data *td) -+{ -+ if (td->usb_dev) -+ led_set_brightness(td->led_cdev, LED_FULL); -+ else -+ led_set_brightness(td->led_cdev, LED_OFF); -+ -+ if (td->interval && td->usb_dev) -+ mod_timer(&td->timer, jiffies + td->interval); -+ else -+ del_timer(&td->timer); -+} -+ -+static ssize_t usbdev_trig_name_show(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct led_classdev *led_cdev = dev_get_drvdata(dev); -+ struct usbdev_trig_data *td = led_cdev->trigger_data; -+ -+ read_lock(&td->lock); -+ sprintf(buf, "%s\n", td->device_name); -+ read_unlock(&td->lock); -+ -+ return strlen(buf) + 1; -+} -+ -+static ssize_t usbdev_trig_name_store(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t size) -+{ -+ struct led_classdev *led_cdev = dev_get_drvdata(dev); -+ struct usbdev_trig_data *td = led_cdev->trigger_data; -+ -+ if (size < 0 || size >= DEV_BUS_ID_SIZE) -+ return -EINVAL; -+ -+ write_lock(&td->lock); -+ -+ strcpy(td->device_name, buf); -+ if (size > 0 && td->device_name[size - 1] == '\n') -+ td->device_name[size - 1] = 0; -+ -+ if (td->device_name[0] != 0) { -+ struct usb_device *usb_dev; -+ -+ /* check for existing device to update from */ -+ usb_dev = usb_find_device_by_name(td->device_name); -+ if (usb_dev) { -+ if (td->usb_dev) -+ usb_put_dev(td->usb_dev); -+ -+ td->usb_dev = usb_dev; -+ td->last_urbnum = atomic_read(&usb_dev->urbnum); -+ } -+ -+ /* updates LEDs, may start timers */ -+ usbdev_trig_update_state(td); -+ } -+ -+ write_unlock(&td->lock); -+ return size; -+} -+ -+static DEVICE_ATTR(device_name, 0644, usbdev_trig_name_show, -+ usbdev_trig_name_store); -+ -+static ssize_t usbdev_trig_interval_show(struct device *dev, -+ struct device_attribute *attr, -+ char *buf) -+{ -+ struct led_classdev *led_cdev = dev_get_drvdata(dev); -+ struct usbdev_trig_data *td = led_cdev->trigger_data; -+ -+ read_lock(&td->lock); -+ sprintf(buf, "%u\n", jiffies_to_msecs(td->interval)); -+ read_unlock(&td->lock); -+ -+ return strlen(buf) + 1; -+} -+ -+static ssize_t usbdev_trig_interval_store(struct device *dev, -+ struct device_attribute *attr, -+ const char *buf, -+ size_t size) -+{ -+ struct led_classdev *led_cdev = dev_get_drvdata(dev); -+ struct usbdev_trig_data *td = led_cdev->trigger_data; -+ int ret = -EINVAL; -+ char *after; -+ unsigned long value = simple_strtoul(buf, &after, 10); -+ size_t count = after - buf; -+ -+ if (*after && isspace(*after)) -+ count++; -+ -+ if (count == size && value <= 10000) { -+ write_lock(&td->lock); -+ td->interval = msecs_to_jiffies(value); -+ usbdev_trig_update_state(td); /* resets timer */ -+ write_unlock(&td->lock); -+ ret = count; -+ } -+ -+ return ret; -+} -+ -+static DEVICE_ATTR(activity_interval, 0644, usbdev_trig_interval_show, -+ usbdev_trig_interval_store); -+ -+static int usbdev_trig_notify(struct notifier_block *nb, -+ unsigned long evt, -+ void *data) -+{ -+ struct usb_device *usb_dev; -+ struct usbdev_trig_data *td; -+ -+ if (evt != USB_DEVICE_ADD && evt != USB_DEVICE_REMOVE) -+ return NOTIFY_DONE; -+ -+ usb_dev = data; -+ td = container_of(nb, struct usbdev_trig_data, notifier); -+ -+ write_lock(&td->lock); -+ -+ if (strcmp(dev_name(&usb_dev->dev), td->device_name)) -+ goto done; -+ -+ if (evt == USB_DEVICE_ADD) { -+ usb_get_dev(usb_dev); -+ if (td->usb_dev != NULL) -+ usb_put_dev(td->usb_dev); -+ td->usb_dev = usb_dev; -+ td->last_urbnum = atomic_read(&usb_dev->urbnum); -+ } else if (evt == USB_DEVICE_REMOVE) { -+ if (td->usb_dev != NULL) { -+ usb_put_dev(td->usb_dev); -+ td->usb_dev = NULL; -+ } -+ } -+ -+ usbdev_trig_update_state(td); -+ -+done: -+ write_unlock(&td->lock); -+ return NOTIFY_DONE; -+} -+ -+/* here's the real work! */ -+static void usbdev_trig_timer(unsigned long arg) -+{ -+ struct usbdev_trig_data *td = (struct usbdev_trig_data *)arg; -+ int new_urbnum; -+ -+ write_lock(&td->lock); -+ -+ if (!td->usb_dev || td->interval == 0) { -+ /* -+ * we don't need to do timer work, just reflect device presence -+ */ -+ if (td->usb_dev) -+ led_set_brightness(td->led_cdev, LED_FULL); -+ else -+ led_set_brightness(td->led_cdev, LED_OFF); -+ -+ goto no_restart; -+ } -+ -+ if (td->interval) -+ new_urbnum = atomic_read(&td->usb_dev->urbnum); -+ else -+ new_urbnum = 0; -+ -+ if (td->usb_dev) { -+ /* -+ * Base state is ON (device is present). If there's no device, -+ * we don't get this far and the LED is off. -+ * OFF -> ON always -+ * ON -> OFF on activity -+ */ -+ if (td->led_cdev->brightness == LED_OFF) -+ led_set_brightness(td->led_cdev, LED_FULL); -+ else if (td->last_urbnum != new_urbnum) -+ led_set_brightness(td->led_cdev, LED_OFF); -+ } else { -+ /* -+ * base state is OFF -+ * ON -> OFF always -+ * OFF -> ON on activity -+ */ -+ if (td->led_cdev->brightness == LED_FULL) -+ led_set_brightness(td->led_cdev, LED_OFF); -+ else if (td->last_urbnum != new_urbnum) -+ led_set_brightness(td->led_cdev, LED_FULL); -+ } -+ -+ td->last_urbnum = new_urbnum; -+ mod_timer(&td->timer, jiffies + td->interval); -+ -+no_restart: -+ write_unlock(&td->lock); -+} -+ -+static void usbdev_trig_activate(struct led_classdev *led_cdev) -+{ -+ struct usbdev_trig_data *td; -+ int rc; -+ -+ td = kzalloc(sizeof(struct usbdev_trig_data), GFP_KERNEL); -+ if (!td) -+ return; -+ -+ rwlock_init(&td->lock); -+ -+ td->notifier.notifier_call = usbdev_trig_notify; -+ td->notifier.priority = 10; -+ -+ setup_timer(&td->timer, usbdev_trig_timer, (unsigned long) td); -+ -+ td->led_cdev = led_cdev; -+ td->interval = msecs_to_jiffies(50); -+ -+ led_cdev->trigger_data = td; -+ -+ rc = device_create_file(led_cdev->dev, &dev_attr_device_name); -+ if (rc) -+ goto err_out; -+ -+ rc = device_create_file(led_cdev->dev, &dev_attr_activity_interval); -+ if (rc) -+ goto err_out_device_name; -+ -+ usb_register_notify(&td->notifier); -+ return; -+ -+err_out_device_name: -+ device_remove_file(led_cdev->dev, &dev_attr_device_name); -+err_out: -+ led_cdev->trigger_data = NULL; -+ kfree(td); -+} -+ -+static void usbdev_trig_deactivate(struct led_classdev *led_cdev) -+{ -+ struct usbdev_trig_data *td = led_cdev->trigger_data; -+ -+ if (td) { -+ usb_unregister_notify(&td->notifier); -+ -+ device_remove_file(led_cdev->dev, &dev_attr_device_name); -+ device_remove_file(led_cdev->dev, &dev_attr_activity_interval); -+ -+ write_lock(&td->lock); -+ -+ if (td->usb_dev) { -+ usb_put_dev(td->usb_dev); -+ td->usb_dev = NULL; -+ } -+ -+ write_unlock(&td->lock); -+ -+ del_timer_sync(&td->timer); -+ -+ kfree(td); -+ } -+} -+ -+static struct led_trigger usbdev_led_trigger = { -+ .name = "usbdev", -+ .activate = usbdev_trig_activate, -+ .deactivate = usbdev_trig_deactivate, -+}; -+ -+static int __init usbdev_trig_init(void) -+{ -+ return led_trigger_register(&usbdev_led_trigger); -+} -+ -+static void __exit usbdev_trig_exit(void) -+{ -+ led_trigger_unregister(&usbdev_led_trigger); -+} -+ -+module_init(usbdev_trig_init); -+module_exit(usbdev_trig_exit); -+ -+MODULE_AUTHOR("Gabor Juhos "); -+MODULE_DESCRIPTION("USB device LED trigger"); -+MODULE_LICENSE("GPL v2"); -diff --git a/drivers/mmc/host/sunxi-mmc.c b/drivers/mmc/host/sunxi-mmc.c -old mode 100644 -new mode 100755 -index 4d3e1ff..8906880 ---- a/drivers/mmc/host/sunxi-mmc.c -+++ b/drivers/mmc/host/sunxi-mmc.c -@@ -243,6 +243,7 @@ struct sunxi_mmc_host { - bool wait_dma; - - struct mmc_request *mrq; -+ struct mmc_request *mrq_cmd53; - struct mmc_request *manual_stop_mrq; - int ferror; - }; -@@ -448,6 +449,7 @@ static irqreturn_t sunxi_mmc_finalize_request(struct sunxi_mmc_host *host) - struct mmc_request *mrq = host->mrq; - struct mmc_data *data = mrq->data; - u32 rval; -+ u32 opcode = 0; - - mmc_writel(host, REG_IMASK, host->sdio_imask); - mmc_writel(host, REG_IDIE, 0); -@@ -493,11 +495,15 @@ static irqreturn_t sunxi_mmc_finalize_request(struct sunxi_mmc_host *host) - - mmc_writel(host, REG_RINTR, 0xffff); - -- host->mrq = NULL; -- host->int_sum = 0; -- host->wait_dma = false; -+ opcode = host->mrq->cmd->opcode; -+ if(opcode == 53){ -+ host->mrq_cmd53 = host->mrq; -+ } -+ host->mrq = NULL; -+ host->int_sum = 0; -+ host->wait_dma = false; - -- return host->manual_stop_mrq ? IRQ_WAKE_THREAD : IRQ_HANDLED; -+ return ((host->manual_stop_mrq)||(opcode==53)) ? IRQ_WAKE_THREAD : IRQ_HANDLED; - } - - static irqreturn_t sunxi_mmc_irq(int irq, void *dev_id) -@@ -557,17 +563,51 @@ static irqreturn_t sunxi_mmc_irq(int irq, void *dev_id) - return ret; - } - -+ -+int sunxi_check_r1_ready(struct sunxi_mmc_host *smc_host, unsigned ms) -+{ -+ //struct sunxi_mmc_host *smc_host = mmc_priv(mmc); -+ unsigned long expire = jiffies + msecs_to_jiffies(ms); -+ //dev_info(mmc_dev(smc_host->mmc), "wrd\n"); -+ do { -+ if (!(mmc_readl(smc_host, REG_STAS) & SDXC_CARD_DATA_BUSY)) -+ break; -+ } while (time_before(jiffies, expire)); -+ -+ if ((mmc_readl(smc_host, REG_STAS) & SDXC_CARD_DATA_BUSY)) { -+ dev_err(mmc_dev(smc_host->mmc), "wait r1 rdy %d ms timeout\n", ms); -+ return -1; -+ } else{ -+ return 0; -+ } -+} -+ -+ -+ - static irqreturn_t sunxi_mmc_handle_manual_stop(int irq, void *dev_id) - { - struct sunxi_mmc_host *host = dev_id; - struct mmc_request *mrq; -+ struct mmc_request *mrq_cmd53 = NULL; - unsigned long iflags; - - spin_lock_irqsave(&host->lock, iflags); - mrq = host->manual_stop_mrq; -+ mrq_cmd53 = host->mrq_cmd53; - spin_unlock_irqrestore(&host->lock, iflags); - -- if (!mrq) { -+ if (mrq_cmd53) { -+ sunxi_check_r1_ready(host,1000); -+ spin_lock_irqsave(&host->lock, iflags); -+ host->mrq_cmd53 = NULL; -+ spin_unlock_irqrestore(&host->lock, iflags); -+ mmc_request_done(host->mmc, mrq_cmd53); -+ return IRQ_HANDLED; -+ }else{ -+ dev_err(mmc_dev(host->mmc), "no request for cmd53 busy\n"); -+ } -+ -+ if (!mrq) { - dev_err(mmc_dev(host->mmc), "no request for manual stop\n"); - return IRQ_HANDLED; - } diff --git a/patch/kernel/sunxi-next/add_configfs_overlay_for_v4.7.x.patch b/patch/kernel/sunxi-next/add-configfs-overlay-for-v4.10.x.patch similarity index 89% rename from patch/kernel/sunxi-next/add_configfs_overlay_for_v4.7.x.patch rename to patch/kernel/sunxi-next/add-configfs-overlay-for-v4.10.x.patch index 226786fa78..006766a229 100644 --- a/patch/kernel/sunxi-next/add_configfs_overlay_for_v4.7.x.patch +++ b/patch/kernel/sunxi-next/add-configfs-overlay-for-v4.10.x.patch @@ -358,31 +358,3 @@ index dca8f9b..ec7e167 100644 { int parent, len; const struct of_bus *bus, *pbus; -diff --git a/drivers/of/resolver.c b/drivers/of/resolver.c -index 46325d6..867d1cf 100644 ---- a/drivers/of/resolver.c -+++ b/drivers/of/resolver.c -@@ -321,8 +321,10 @@ int of_resolve_phandles(struct device_node *resolve) - pr_err("%s: node %s not detached\n", __func__, - resolve->full_name); - /* the resolve node must exist, and be detached */ -- if (!resolve || !of_node_check_flag(resolve, OF_DETACHED)) -+ if (!resolve || !of_node_check_flag(resolve, OF_DETACHED)) { -+ pr_err("%s: resolve node must exist, and be detached\n", __func__); - return -EINVAL; -+ } - - /* first we need to adjust the phandles */ - phandle_delta = of_get_tree_max_phandle() + 1; -@@ -338,8 +340,10 @@ int of_resolve_phandles(struct device_node *resolve) - /* resolve root is guaranteed to be the '/' */ - err = __of_adjust_tree_phandle_references(childroot, - resolve, 0); -- if (err != 0) -+ if (err != 0) { -+ pr_err("%s: __of_adjust_tree_phandle_references failed !\n", __func__); - return err; -+ } - - BUG_ON(__of_adjust_tree_phandle_references(childroot, - resolve, phandle_delta)); diff --git a/patch/kernel/sunxi-next/lime2-emmc-remove-powerseq.patch b/patch/kernel/sunxi-next/lime2-emmc-remove-powerseq.patch.disabled similarity index 100% rename from patch/kernel/sunxi-next/lime2-emmc-remove-powerseq.patch rename to patch/kernel/sunxi-next/lime2-emmc-remove-powerseq.patch.disabled diff --git a/patch/kernel/sunxi-next/linux-vanilla_v4.5.1_sun7i-a20-bananapro_dts.patch.disabled b/patch/kernel/sunxi-next/linux-vanilla_v4.5.1_sun7i-a20-bananapro_dts.patch.disabled deleted file mode 100644 index 5325398bbe..0000000000 --- a/patch/kernel/sunxi-next/linux-vanilla_v4.5.1_sun7i-a20-bananapro_dts.patch.disabled +++ /dev/null @@ -1,242 +0,0 @@ -diff --git a/arch/arm/boot/dts/sun7i-a20-bananapro.dts b/arch/arm/boot/dts/sun7i-a20-bananapro.dts -index 18fcc87..dd8c9bb 100644 ---- a/arch/arm/boot/dts/sun7i-a20-bananapro.dts -+++ b/arch/arm/boot/dts/sun7i-a20-bananapro.dts -@@ -42,9 +42,11 @@ - - /dts-v1/; - #include "sun7i-a20.dtsi" --#include "sunxi-common-regulators.dtsi" -+//#include "sunxi-common-regulators.dtsi" - #include - #include -+#include -+#include - - / { - model = "LeMaker Banana Pro"; -@@ -66,7 +68,7 @@ - pinctrl-0 = <&led_pins_bananapro>; - - blue { -- label = "bananapro:blue:usr"; -+ label = "bananapro:blue:usr"; - gpios = <&pio 6 2 GPIO_ACTIVE_HIGH>; - }; - -@@ -101,6 +103,52 @@ - enable-active-high; - gpio = <&pio 7 22 GPIO_ACTIVE_HIGH>; - }; -+ -+ reg_ahci_5v: ahci-5v { -+ compatible = "regulator-fixed"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&ahci_pwr_pin_a>; -+ regulator-name = "ahci-5v"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ regulator-boot-on; -+ enable-active-high; -+ gpio = <&pio 1 8 GPIO_ACTIVE_HIGH>; -+ status = "disabled"; -+ }; -+ -+ reg_usb0_vbus: usb0-vbus { -+ compatible = "regulator-fixed"; -+ pinctrl-names = "default"; -+ pinctrl-0 = <&usb0_vbus_pin_a>; -+ regulator-name = "usb0-vbus"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ enable-active-high; -+ gpio = <&pio 1 9 GPIO_ACTIVE_HIGH>; -+ status = "disabled"; -+ }; -+ -+ reg_vcc3v0: vcc3v0 { -+ compatible = "regulator-fixed"; -+ regulator-name = "vcc3v0"; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ }; -+ -+ reg_vcc3v3: vcc3v3 { -+ compatible = "regulator-fixed"; -+ regulator-name = "vcc3v3"; -+ regulator-min-microvolt = <3300000>; -+ regulator-max-microvolt = <3300000>; -+ }; -+ -+ reg_vcc5v0: vcc5v0 { -+ compatible = "regulator-fixed"; -+ regulator-name = "vcc5v0"; -+ regulator-min-microvolt = <5000000>; -+ regulator-max-microvolt = <5000000>; -+ }; - }; - - &ahci { -@@ -111,6 +159,20 @@ - status = "okay"; - }; - -+&cpu0 { -+ cpu-supply = <®_dcdc2>; -+ operating-points = < -+ /* kHz uV */ -+ 960000 1400000 -+ 912000 1400000 -+ 864000 1350000 -+ 720000 1250000 -+ 528000 1150000 -+ 312000 1100000 -+ 144000 1050000 -+ >; -+}; -+ - &ehci0 { - status = "okay"; - }; -@@ -180,17 +242,6 @@ - non-removable; - enable-sdio-wakeup; - status = "okay"; -- --/* -- brcmf: bcrmf@1 { -- reg = <1>; -- compatible = "brcm,bcm4329-fmac"; -- interrupt-parent = <&pio>; -- interrupts = <15 8>; -- interrupt-names = "host-wake"; -- }; --*/ -- - }; - - &ohci0 { -@@ -207,57 +258,90 @@ - - &pio { - gmac_power_pin_bananapro: gmac_power_pin@0 { -- allwinner,pins = "PH23"; -+ allwinner,pins = "PH23"; /* EMAC-PWR-EN */ - allwinner,function = "gpio_out"; - allwinner,drive = ; - allwinner,pull = ; - }; - - led_pins_bananapro: led_pins@0 { -- allwinner,pins = "PH24", "PG2"; -+ allwinner,pins = "PH24", "PG2"; /* LED1, LED2 */ - allwinner,function = "gpio_out"; - allwinner,drive = ; - allwinner,pull = ; - }; - - mmc0_cd_pin_bananapro: mmc0_cd_pin@0 { -- allwinner,pins = "PH10"; -+ allwinner,pins = "PH10"; /* SD0-DET */ - allwinner,function = "gpio_in"; - allwinner,drive = ; - allwinner,pull = ; - }; - -- usb1_vbus_pin_bananapro: usb1_vbus_pin@0 { -- allwinner,pins = "PH0"; -+ ahci_pwr_pin_a: ahci_pwr_pin@0 { -+ allwinner,pins = "PB8"; - allwinner,function = "gpio_out"; - allwinner,drive = ; - allwinner,pull = ; - }; - -- usb2_vbus_pin_bananapro: usb2_vbus_pin@0 { -- allwinner,pins = "PH1"; -+ usb0_vbus_pin_a: usb0_vbus_pin@0 { -+ allwinner,pins = "PB9"; - allwinner,function = "gpio_out"; - allwinner,drive = ; - allwinner,pull = ; - }; - -+ usb0_id_detect_pin: usb0_id_detect_pin@0 { -+ allwinner,pins = "PH3"; /* USB0-IDDET */ -+ allwinner,function = "gpio_in"; -+ allwinner,drive = ; -+ allwinner,pull = ; -+ }; -+ - vmmc3_pin_bananapro: vmmc3_pin@0 { -- allwinner,pins = "PH22"; -+ allwinner,pins = "PH22"; /* WIFI-SHDN */ - allwinner,function = "gpio_out"; - allwinner,drive = ; - allwinner,pull = ; - }; - }; - --®_usb1_vbus { -- pinctrl-0 = <&usb1_vbus_pin_bananapro>; -- gpio = <&pio 7 0 GPIO_ACTIVE_HIGH>; /* PH0 */ -- status = "okay"; -+#include "axp209.dtsi" -+ -+®_dcdc2 { -+ regulator-always-on; -+ regulator-min-microvolt = <1000000>; -+ regulator-max-microvolt = <1400000>; -+ regulator-name = "vdd-cpu"; -+}; -+ -+®_dcdc3 { -+ regulator-always-on; -+ regulator-min-microvolt = <1000000>; -+ regulator-max-microvolt = <1400000>; -+ regulator-name = "vdd-int-dll"; -+}; -+ -+®_ldo1 { -+ regulator-name = "vdd-rtc"; -+}; -+ -+®_ldo2 { -+ regulator-always-on; -+ regulator-min-microvolt = <3000000>; -+ regulator-max-microvolt = <3000000>; -+ regulator-name = "avcc"; -+}; -+ -+®_ldo4 { -+ regulator-always-on; -+ regulator-min-microvolt = <2500000>; -+ regulator-max-microvolt = <2500000>; -+ regulator-name = "vcc-sata"; - }; - --®_usb2_vbus { -- pinctrl-0 = <&usb2_vbus_pin_bananapro>; -- gpio = <&pio 7 1 GPIO_ACTIVE_HIGH>; /* PH1 */ -+®_usb0_vbus { - status = "okay"; - }; - -@@ -292,6 +376,15 @@ - status = "okay"; - }; - -+&usb_power_supply { -+ status = "okay"; -+}; -+ - &usbphy { -+ pinctrl-names = "default"; -+ pinctrl-0 = <&usb0_id_detect_pin>; -+ usb0_id_det-gpio = <&pio 7 3 GPIO_ACTIVE_HIGH>; /* PH3 */ -+ usb0_vbus_power-supply = <&usb_power_supply>; -+ usb0_vbus-supply = <®_usb0_vbus>; - status = "okay"; --}; -\ No newline at end of file -+}; diff --git a/patch/kernel/sunxi-next/spi-sunxi-allow-large-transfers.patch b/patch/kernel/sunxi-next/spi-sunxi-allow-large-transfers.patch deleted file mode 100644 index c82100bb89..0000000000 --- a/patch/kernel/sunxi-next/spi-sunxi-allow-large-transfers.patch +++ /dev/null @@ -1,158 +0,0 @@ -diff --git a/drivers/spi/spi-sun4i.c b/drivers/spi/spi-sun4i.c -index 4969dc1..138f224 100644 ---- a/drivers/spi/spi-sun4i.c -+++ b/drivers/spi/spi-sun4i.c -@@ -46,6 +46,8 @@ - #define SUN4I_CTL_TP BIT(18) - - #define SUN4I_INT_CTL_REG 0x0c -+#define SUN4I_INT_CTL_RF_F34 BIT(4) -+#define SUN4I_INT_CTL_TF_E34 BIT(12) - #define SUN4I_INT_CTL_TC BIT(16) - - #define SUN4I_INT_STA_REG 0x10 -@@ -61,11 +63,14 @@ - #define SUN4I_CLK_CTL_CDR1(div) (((div) & SUN4I_CLK_CTL_CDR1_MASK) << 8) - #define SUN4I_CLK_CTL_DRS BIT(12) - -+#define SUN4I_MAX_XFER_SIZE 0xffffff -+ - #define SUN4I_BURST_CNT_REG 0x20 --#define SUN4I_BURST_CNT(cnt) ((cnt) & 0xffffff) -+#define SUN4I_BURST_CNT(cnt) ((cnt) & SUN4I_MAX_XFER_SIZE) - - #define SUN4I_XMIT_CNT_REG 0x24 --#define SUN4I_XMIT_CNT(cnt) ((cnt) & 0xffffff) -+#define SUN4I_XMIT_CNT(cnt) ((cnt) & SUN4I_MAX_XFER_SIZE) -+ - - #define SUN4I_FIFO_STA_REG 0x28 - #define SUN4I_FIFO_STA_RF_CNT_MASK 0x7f -@@ -96,6 +101,31 @@ static inline void sun4i_spi_write(struct sun4i_spi *sspi, u32 reg, u32 value) - writel(value, sspi->base_addr + reg); - } - -+static inline u32 sun4i_spi_get_tx_fifo_count(struct sun4i_spi *sspi) -+{ -+ u32 reg = sun4i_spi_read(sspi, SUN4I_FIFO_STA_REG); -+ -+ reg >>= SUN4I_FIFO_STA_TF_CNT_BITS; -+ -+ return reg & SUN4I_FIFO_STA_TF_CNT_MASK; -+} -+ -+static inline void sun4i_spi_enable_interrupt(struct sun4i_spi *sspi, u32 mask) -+{ -+ u32 reg = sun4i_spi_read(sspi, SUN4I_INT_CTL_REG); -+ -+ reg |= mask; -+ sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, reg); -+} -+ -+static inline void sun4i_spi_disable_interrupt(struct sun4i_spi *sspi, u32 mask) -+{ -+ u32 reg = sun4i_spi_read(sspi, SUN4I_INT_CTL_REG); -+ -+ reg &= ~mask; -+ sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, reg); -+} -+ - static inline void sun4i_spi_drain_fifo(struct sun4i_spi *sspi, int len) - { - u32 reg, cnt; -@@ -118,10 +148,13 @@ static inline void sun4i_spi_drain_fifo(struct sun4i_spi *sspi, int len) - - static inline void sun4i_spi_fill_fifo(struct sun4i_spi *sspi, int len) - { -+ u32 cnt; - u8 byte; - -- if (len > sspi->len) -- len = sspi->len; -+ /* See how much data we can fit */ -+ cnt = SUN4I_FIFO_DEPTH - sun4i_spi_get_tx_fifo_count(sspi); -+ -+ len = min3(len, (int)cnt, sspi->len); - - while (len--) { - byte = sspi->tx_buf ? *sspi->tx_buf++ : 0; -@@ -169,7 +202,7 @@ static void sun4i_spi_set_cs(struct spi_device *spi, bool enable) - - static size_t sun4i_spi_max_transfer_size(struct spi_device *spi) - { -- return SUN4I_FIFO_DEPTH - 1; -+ return SUN4I_MAX_XFER_SIZE - 1; - } - - static int sun4i_spi_transfer_one(struct spi_master *master, -@@ -183,11 +216,10 @@ static int sun4i_spi_transfer_one(struct spi_master *master, - int ret = 0; - u32 reg; - -- /* We don't support transfer larger than the FIFO */ -- if (tfr->len > SUN4I_FIFO_DEPTH) -+ if (tfr->len > SUN4I_MAX_XFER_SIZE) - return -EMSGSIZE; - -- if (tfr->tx_buf && tfr->len >= SUN4I_FIFO_DEPTH) -+ if (tfr->tx_buf && tfr->len >= SUN4I_MAX_XFER_SIZE) - return -EMSGSIZE; - - reinit_completion(&sspi->done); -@@ -286,7 +318,11 @@ static int sun4i_spi_transfer_one(struct spi_master *master, - sun4i_spi_fill_fifo(sspi, SUN4I_FIFO_DEPTH - 1); - - /* Enable the interrupts */ -- sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, SUN4I_INT_CTL_TC); -+ sun4i_spi_enable_interrupt(sspi, SUN4I_INT_CTL_TC | -+ SUN4I_INT_CTL_RF_F34); -+ /* Only enable Tx FIFO interrupt if we really need it */ -+ if (tx_len > SUN4I_FIFO_DEPTH) -+ sun4i_spi_enable_interrupt(sspi, SUN4I_INT_CTL_TF_E34); - - /* Start the transfer */ - reg = sun4i_spi_read(sspi, SUN4I_CTL_REG); -@@ -306,8 +342,6 @@ static int sun4i_spi_transfer_one(struct spi_master *master, - goto out; - } - -- sun4i_spi_drain_fifo(sspi, SUN4I_FIFO_DEPTH); -- - out: - sun4i_spi_write(sspi, SUN4I_INT_CTL_REG, 0); - -@@ -322,10 +356,33 @@ static irqreturn_t sun4i_spi_handler(int irq, void *dev_id) - /* Transfer complete */ - if (status & SUN4I_INT_CTL_TC) { - sun4i_spi_write(sspi, SUN4I_INT_STA_REG, SUN4I_INT_CTL_TC); -+ sun4i_spi_drain_fifo(sspi, SUN4I_FIFO_DEPTH); - complete(&sspi->done); - return IRQ_HANDLED; - } - -+ /* Receive FIFO 3/4 full */ -+ if (status & SUN4I_INT_CTL_RF_F34) { -+ sun4i_spi_drain_fifo(sspi, SUN4I_FIFO_DEPTH); -+ /* Only clear the interrupt _after_ draining the FIFO */ -+ sun4i_spi_write(sspi, SUN4I_INT_STA_REG, SUN4I_INT_CTL_RF_F34); -+ return IRQ_HANDLED; -+ } -+ -+ /* Transmit FIFO 3/4 empty */ -+ if (status & SUN4I_INT_CTL_TF_E34) { -+ sun4i_spi_fill_fifo(sspi, SUN4I_FIFO_DEPTH); -+ -+ if (!sspi->len) -+ /* nothing left to transmit */ -+ sun4i_spi_disable_interrupt(sspi, SUN4I_INT_CTL_TF_E34); -+ -+ /* Only clear the interrupt _after_ re-seeding the FIFO */ -+ sun4i_spi_write(sspi, SUN4I_INT_STA_REG, SUN4I_INT_CTL_TF_E34); -+ -+ return IRQ_HANDLED; -+ } -+ - return IRQ_NONE; - } - -