mirror of
https://github.com/hanwckf/immortalwrt-mt798x.git
synced 2025-01-09 02:43:53 +08:00
Merge Official Source
This commit is contained in:
commit
e229035c61
@ -223,7 +223,7 @@ define Build/CoreTargets
|
||||
$(STAMP_INSTALLED) : export PATH=$$(TARGET_PATH_PKG)
|
||||
$(STAMP_INSTALLED): $(STAMP_BUILT)
|
||||
rm -rf $(TMP_DIR)/stage-$(PKG_DIR_NAME)
|
||||
mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages $(STAGING_DIR_HOST)/packages
|
||||
mkdir -p $(TMP_DIR)/stage-$(PKG_DIR_NAME)/host $(STAGING_DIR)/packages
|
||||
$(foreach hook,$(Hooks/InstallDev/Pre),\
|
||||
$(call $(hook),$(TMP_DIR)/stage-$(PKG_DIR_NAME),$(TMP_DIR)/stage-$(PKG_DIR_NAME)/host)$(sep)\
|
||||
)
|
||||
@ -342,9 +342,9 @@ clean-build: $(if $(wildcard $(PKG_BUILD_DIR)/.autoremove),force-clean-build)
|
||||
|
||||
clean: force-clean-build
|
||||
$(CleanStaging)
|
||||
$(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR_HOST))
|
||||
$(call Build/UninstallDev,$(STAGING_DIR),$(STAGING_DIR)/host)
|
||||
$(Build/Clean)
|
||||
rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST) $(STAGING_DIR_HOST)/packages/$(STAGING_FILES_LIST)
|
||||
rm -f $(STAGING_DIR)/packages/$(STAGING_FILES_LIST)
|
||||
|
||||
dist:
|
||||
$(Build/Dist)
|
||||
|
@ -72,6 +72,7 @@ define Package/base-files/conffiles
|
||||
/etc/services
|
||||
/etc/shadow
|
||||
/etc/shells
|
||||
/etc/shinit
|
||||
/etc/sysctl.conf
|
||||
/etc/sysupgrade.conf
|
||||
$(call $(TARGET)/conffiles)
|
||||
|
@ -1,4 +1,3 @@
|
||||
#!/bin/sh
|
||||
[ -e /tmp/.failsafe ] && export FAILSAFE=1
|
||||
|
||||
[ -f /etc/banner ] && cat /etc/banner
|
||||
@ -13,6 +12,7 @@ export PATH="%PATH%"
|
||||
export HOME=$(grep -e "^${USER:-root}:" /etc/passwd | cut -d ":" -f 6)
|
||||
export HOME=${HOME:-/root}
|
||||
export PS1='\u@\h:\w\$ '
|
||||
export ENV=/etc/shinit
|
||||
|
||||
case "$TERM" in
|
||||
xterm*|rxvt*)
|
||||
@ -20,16 +20,6 @@ case "$TERM" in
|
||||
;;
|
||||
esac
|
||||
|
||||
[ -x /bin/more ] || alias more=less
|
||||
[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi
|
||||
|
||||
alias ll='ls -alF --color=auto'
|
||||
|
||||
[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc
|
||||
|
||||
[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; }
|
||||
[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
|
||||
|
||||
[ -n "$FAILSAFE" ] || {
|
||||
for FILE in /etc/profile.d/*.sh; do
|
||||
[ -e "$FILE" ] && . "$FILE"
|
||||
@ -48,12 +38,3 @@ in order to prevent unauthorized SSH logins.
|
||||
--------------------------------------------------
|
||||
EOF
|
||||
fi
|
||||
|
||||
service() {
|
||||
[ -f "/etc/init.d/$1" ] || {
|
||||
echo "service "'"'"$1"'"'" not found, the following services are available:"
|
||||
ls "/etc/init.d"
|
||||
return 1
|
||||
}
|
||||
/etc/init.d/$@
|
||||
}
|
||||
|
21
package/base-files/files/etc/shinit
Normal file
21
package/base-files/files/etc/shinit
Normal file
@ -0,0 +1,21 @@
|
||||
[ -x /bin/more ] || alias more=less
|
||||
[ -x /usr/bin/vim ] && alias vi=vim || alias vim=vi
|
||||
|
||||
alias ll='ls -alF --color=auto'
|
||||
|
||||
[ -z "$KSH_VERSION" -o \! -s /etc/mkshrc ] || . /etc/mkshrc
|
||||
|
||||
[ -x /usr/bin/arp -o -x /sbin/arp ] || arp() { cat /proc/net/arp; }
|
||||
[ -x /usr/bin/ldd ] || ldd() { LD_TRACE_LOADED_OBJECTS=1 $*; }
|
||||
|
||||
service() {
|
||||
[ -f "/etc/init.d/$1" ] || {
|
||||
echo "service "'"'"$1"'"'" not found, the following services are available:"
|
||||
ls "/etc/init.d"
|
||||
return 1
|
||||
}
|
||||
/etc/init.d/$@
|
||||
}
|
||||
|
||||
[ -n "$KSH_VERSION" -o \! -s "$HOME/.shinit" ] || . "$HOME/.shinit"
|
||||
[ -z "$KSH_VERSION" -o \! -s "$HOME/.mkshrc" ] || . "$HOME/.mkshrc"
|
@ -6,5 +6,6 @@
|
||||
/etc/profile
|
||||
/etc/shadow
|
||||
/etc/shells
|
||||
/etc/shinit
|
||||
/etc/sysctl.conf
|
||||
/etc/rc.local
|
||||
|
@ -82,6 +82,11 @@ define Host/Configure
|
||||
$(Host/Configure/Default)
|
||||
endef
|
||||
|
||||
define Package/grub2/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-bios-setup $(1)/usr/sbin/
|
||||
endef
|
||||
|
||||
define Package/grub2-editenv/install
|
||||
$(INSTALL_DIR) $(1)/usr/sbin
|
||||
$(INSTALL_BIN) $(PKG_BUILD_DIR)/grub-editenv $(1)/usr/sbin/
|
||||
|
@ -42,11 +42,11 @@ UBOOT_TARGETS:= \
|
||||
Build/Exports:=$(Host/Exports)
|
||||
|
||||
define Build/Configure
|
||||
# enable additional options beyond clearfog_defconfig
|
||||
echo CONFIG_NET_RANDOM_ETHADDR=y >> $(PKG_BUILD_DIR)/configs/$(BUILD_VARIANT)_defconfig
|
||||
echo CONFIG_CMD_SETEXPR=y >> $(PKG_BUILD_DIR)/configs/$(BUILD_VARIANT)_defconfig
|
||||
# enable additional options beyond <device>_defconfig
|
||||
echo CONFIG_NET_RANDOM_ETHADDR=y >> $(PKG_BUILD_DIR)/configs/$(UBOOT_CONFIG)_defconfig
|
||||
echo CONFIG_CMD_SETEXPR=y >> $(PKG_BUILD_DIR)/configs/$(UBOOT_CONFIG)_defconfig
|
||||
|
||||
+$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) $(UBOOT_CONFIGURE_VARS) $(UBOOT_CONFIG)_config
|
||||
$(call Build/Configure/U-Boot)
|
||||
endef
|
||||
|
||||
define Build/InstallDev
|
||||
|
@ -146,6 +146,23 @@ endef
|
||||
$(eval $(call KernelPackage,can-gw))
|
||||
|
||||
|
||||
define KernelPackage/can-mcp251x
|
||||
TITLE:=MCP251x SPI CAN controller
|
||||
KCONFIG:=\
|
||||
CONFIG_SPI=y \
|
||||
CONFIG_CAN_MCP251X
|
||||
FILES:=$(LINUX_DIR)/drivers/net/can/spi/mcp251x.ko
|
||||
AUTOLOAD:=$(call AutoProbe,can-mcp251x)
|
||||
$(call AddDepends/can)
|
||||
endef
|
||||
|
||||
define KernelPackage/can-mcp251x/description
|
||||
Microchip MCP251x SPI CAN controller
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,can-mcp251x))
|
||||
|
||||
|
||||
define KernelPackage/can-raw
|
||||
TITLE:=Raw CAN Protcol
|
||||
KCONFIG:=CONFIG_CAN_RAW
|
||||
|
@ -278,6 +278,60 @@ endef
|
||||
$(eval $(call KernelPackage,iio-si7020))
|
||||
|
||||
|
||||
define KernelPackage/iio-st_accel
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=STMicroelectronics accelerometer 3-Axis Driver
|
||||
DEPENDS:=+kmod-iio-core +kmod-regmap-core
|
||||
KCONFIG:= \
|
||||
CONFIG_IIO_ST_ACCEL_3AXIS \
|
||||
CONFIG_IIO_ST_SENSORS_CORE
|
||||
FILES:= \
|
||||
$(LINUX_DIR)/drivers/iio/accel/st_accel.ko \
|
||||
$(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors.ko
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-st_accel/description
|
||||
This package adds support for STMicroelectronics accelerometers:
|
||||
LSM303DLH, LSM303DLHC, LIS3DH, LSM330D, LSM330DL, LSM330DLC,
|
||||
LIS331DLH, LSM303DL, LSM303DLM, LSM330, LIS2DH12, H3LIS331DL,
|
||||
LNG2DM, LIS3DE, LIS2DE12
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,iio-st_accel))
|
||||
|
||||
|
||||
define KernelPackage/iio-st_sensors-i2c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=STMicroelectronics accelerometer 3-Axis Driver (I2C)
|
||||
DEPENDS:=+kmod-iio-st_accel +kmod-i2c-core
|
||||
KCONFIG:= CONFIG_IIO_ST_ACCEL_I2C_3AXIS
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors_i2c.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,st_sensors_i2c)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-st_sensors-i2c/description
|
||||
This package adds support for STMicroelectronics I2C based accelerometers
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,iio-st_sensors-i2c))
|
||||
|
||||
|
||||
define KernelPackage/iio-st_sensors-spi
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=STMicroelectronics accelerometer 3-Axis Driver (SPI)
|
||||
DEPENDS:=+kmod-iio-st_accel
|
||||
KCONFIG:= CONFIG_IIO_ST_ACCEL_SPI_3AXIS
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/common/st_sensors/st_sensors_spi.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,st_sensors_spi)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-st_sensors-spi/description
|
||||
This package adds support for STMicroelectronics SPI based accelerometers
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,iio-st_sensors-spi))
|
||||
|
||||
|
||||
define KernelPackage/iio-tsl4531
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-i2c-core +kmod-iio-core
|
||||
@ -294,3 +348,53 @@ define KernelPackage/iio-tsl4531/description
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,iio-tsl4531))
|
||||
|
||||
|
||||
define KernelPackage/iio-fxos8700
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=Freescale FXOS8700 3-axis accelerometer driver
|
||||
DEPENDS:=+kmod-iio-core +kmod-regmap-core
|
||||
KCONFIG:= CONFIG_FXOS8700
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/imu/fxos8700_core.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,fxos8700)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxos8700/description
|
||||
Support for Freescale FXOS8700 3-axis accelerometer.
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,iio-fxos8700))
|
||||
|
||||
|
||||
define KernelPackage/iio-fxos8700-i2c
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
TITLE:=Freescale FXOS8700 3-axis acceleromter driver (I2C)
|
||||
DEPENDS:=+kmod-iio-fxos8700 +kmod-i2c-core +kmod-regmap-i2c
|
||||
KCONFIG:= CONFIG_FXOS8700_I2C
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/imu/fxos8700_i2c.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,fxos8700_i2c)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxos8700-i2c/description
|
||||
Support for Freescale FXOS8700 3-axis accelerometer
|
||||
connected via I2C.
|
||||
endef
|
||||
|
||||
|
||||
$(eval $(call KernelPackage,iio-fxos8700-i2c))
|
||||
|
||||
define KernelPackage/iio-fxos8700-spi
|
||||
SUBMENU:=$(IIO_MENU)
|
||||
DEPENDS:=+kmod-iio-fxos8700 +kmod-regmap-spi
|
||||
TITLE:=Freescale FXOS8700 3-axis accelerometer driver (SPI)
|
||||
KCONFIG:= CONFIG_FXOS8700_SPI
|
||||
FILES:=$(LINUX_DIR)/drivers/iio/imu/fxos8700_spi.ko
|
||||
AUTOLOAD:=$(call AutoLoad,56,fxos8700_spi)
|
||||
endef
|
||||
|
||||
define KernelPackage/iio-fxos8700-spi/description
|
||||
Support for Freescale FXOS8700 3-axis accelerometer
|
||||
connected via SPI.
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,iio-fxos8700-spi))
|
||||
|
@ -19,6 +19,7 @@ PKG_HASH:=635237637c5b619bcceba91900666b64d56ecb7be63f298f601ec786ce087094
|
||||
PKG_MAINTAINER:=Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
CMAKE_INSTALL:=1
|
||||
PKG_ASLR_PIE_REGULAR:=1
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
|
||||
PKG_LICENSE:=BSD-3-Clause
|
||||
|
@ -24,6 +24,7 @@ PKG_VERSION:=$(PKG_RELEASE_VERSION)
|
||||
|
||||
PKG_BUILD_DEPENDS:=libpcap
|
||||
|
||||
PKG_ASLR_PIE_REGULAR:=1
|
||||
PKG_BUILD_PARALLEL:=1
|
||||
PKG_INSTALL:=1
|
||||
|
||||
|
@ -12,7 +12,7 @@ cat "$1" | (
|
||||
cd "$2"
|
||||
while read entry; do
|
||||
[ -n "$entry" ] || break
|
||||
[ -f "$entry" ] && rm -f $entry
|
||||
[ ! -d "$entry" ] || [ -L "$entry" ] && rm -f "$entry"
|
||||
done
|
||||
)
|
||||
sort -r "$1" | (
|
||||
|
@ -44,6 +44,9 @@ migrate_leds()
|
||||
board=$(board_name)
|
||||
|
||||
case "$board" in
|
||||
archer-c7)
|
||||
migrate_leds ":blue:=:green:"
|
||||
;;
|
||||
dhp-1565-a1|\
|
||||
dir-825-c1|\
|
||||
dir-835-a1)
|
||||
|
@ -115,7 +115,7 @@ static struct gpio_keys_button fritz450E_gpio_keys[] __initdata = {
|
||||
.code = KEY_WPS_BUTTON,
|
||||
.debounce_interval = FRITZ450E_KEYS_DEBOUNCE_INTERVAL,
|
||||
.gpio = FRITZ450E_GPIO_BTN_WPS,
|
||||
.active_low = 1,
|
||||
.active_low = 0,
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1,21 +1,27 @@
|
||||
CONFIG_64BIT_TIME=y
|
||||
# CONFIG_AIO is not set
|
||||
CONFIG_ALIGNMENT_TRAP=y
|
||||
CONFIG_ARCH_32BIT_OFF_T=y
|
||||
CONFIG_ARCH_BCM=y
|
||||
CONFIG_ARCH_BCM2835=y
|
||||
CONFIG_ARCH_CLOCKSOURCE_DATA=y
|
||||
CONFIG_ARCH_HAS_BINFMT_FLAT=y
|
||||
CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y
|
||||
CONFIG_ARCH_HAS_ELF_RANDOMIZE=y
|
||||
CONFIG_ARCH_HAS_FORTIFY_SOURCE=y
|
||||
CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y
|
||||
CONFIG_ARCH_HAS_KCOV=y
|
||||
CONFIG_ARCH_HAS_KEEPINITRD=y
|
||||
CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y
|
||||
CONFIG_ARCH_HAS_PHYS_TO_DMA=y
|
||||
CONFIG_ARCH_HAS_SETUP_DMA_OPS=y
|
||||
CONFIG_ARCH_HAS_SET_MEMORY=y
|
||||
CONFIG_ARCH_HAS_SG_CHAIN=y
|
||||
CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y
|
||||
CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y
|
||||
CONFIG_ARCH_HAS_TEARDOWN_DMA_OPS=y
|
||||
CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y
|
||||
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
|
||||
CONFIG_ARCH_KEEP_MEMBLOCK=y
|
||||
CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y
|
||||
CONFIG_ARCH_MULTIPLATFORM=y
|
||||
CONFIG_ARCH_MULTI_V6=y
|
||||
@ -27,6 +33,7 @@ CONFIG_ARCH_SUPPORTS_UPROBES=y
|
||||
CONFIG_ARCH_SUSPEND_POSSIBLE=y
|
||||
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
|
||||
CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y
|
||||
CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y
|
||||
CONFIG_ARCH_WANT_GENERAL_HUGETLB=y
|
||||
CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y
|
||||
CONFIG_ARM=y
|
||||
@ -34,7 +41,6 @@ CONFIG_ARM_AMBA=y
|
||||
CONFIG_ARM_BCM2835_CPUFREQ=y
|
||||
CONFIG_ARM_CPU_SUSPEND=y
|
||||
CONFIG_ARM_ERRATA_411920=y
|
||||
CONFIG_ARM_GIC=y
|
||||
CONFIG_ARM_HAS_SG_CHAIN=y
|
||||
CONFIG_ARM_L1_CACHE_SHIFT=5
|
||||
CONFIG_ARM_PATCH_PHYS_VIRT=y
|
||||
@ -44,8 +50,6 @@ CONFIG_ARM_THUMB=y
|
||||
CONFIG_ARM_TIMER_SP804=y
|
||||
CONFIG_ARM_UNWIND=y
|
||||
CONFIG_AUTO_ZRELADDR=y
|
||||
# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
|
||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||
CONFIG_BCM2708_VCMEM=y
|
||||
CONFIG_BCM2835_DEVGPIOMEM=y
|
||||
CONFIG_BCM2835_FAST_MEMCPY=y
|
||||
@ -61,19 +65,22 @@ CONFIG_BCM_VCIO=y
|
||||
CONFIG_BCM_VC_SM=y
|
||||
# CONFIG_BCM_VC_SM_CMA is not set
|
||||
CONFIG_BCM_VIDEOCORE=y
|
||||
CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y
|
||||
# CONFIG_BLK_DEV_INITRD is not set
|
||||
CONFIG_BLK_DEV_LOOP=y
|
||||
CONFIG_BLK_DEV_RAM=y
|
||||
CONFIG_BLK_DEV_RAM_COUNT=16
|
||||
CONFIG_BLK_DEV_RAM_SIZE=4096
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_PM=y
|
||||
CONFIG_BLK_SCSI_REQUEST=y
|
||||
# CONFIG_BRCMSTB_THERMAL is not set
|
||||
CONFIG_BRCM_CHAR_DRIVERS=y
|
||||
CONFIG_BUILD_BIN2C=y
|
||||
# CONFIG_CACHE_L2X0 is not set
|
||||
CONFIG_CC_HAS_KASAN_GENERIC=y
|
||||
CONFIG_CLKDEV_LOOKUP=y
|
||||
CONFIG_CLKSRC_MMIO=y
|
||||
CONFIG_CLK_BCM2835=y
|
||||
# CONFIG_CLK_RASPBERRYPI is not set
|
||||
CONFIG_CLONE_BACKWARDS=y
|
||||
CONFIG_CMA=y
|
||||
@ -87,8 +94,10 @@ CONFIG_CMA_SIZE_SEL_MBYTES=y
|
||||
# CONFIG_CMA_SIZE_SEL_MIN is not set
|
||||
# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set
|
||||
CONFIG_COMMON_CLK=y
|
||||
CONFIG_COMPAT_32BIT_TIME=y
|
||||
CONFIG_CONFIGFS_FS=y
|
||||
CONFIG_CONSOLE_TRANSLATIONS=y
|
||||
CONFIG_CONTIG_ALLOC=y
|
||||
# CONFIG_CPUFREQ_DT is not set
|
||||
CONFIG_CPU_32v6=y
|
||||
CONFIG_CPU_32v6K=y
|
||||
@ -115,6 +124,7 @@ CONFIG_CPU_HAS_ASID=y
|
||||
CONFIG_CPU_IDLE=y
|
||||
CONFIG_CPU_IDLE_GOV_LADDER=y
|
||||
CONFIG_CPU_IDLE_GOV_MENU=y
|
||||
# CONFIG_CPU_IDLE_GOV_TEO is not set
|
||||
CONFIG_CPU_PABRT_V6=y
|
||||
CONFIG_CPU_PM=y
|
||||
# CONFIG_CPU_THERMAL is not set
|
||||
@ -127,21 +137,19 @@ CONFIG_CRYPTO_CRC32C=y
|
||||
CONFIG_CRYPTO_HASH=y
|
||||
CONFIG_CRYPTO_HASH2=y
|
||||
CONFIG_CRYPTO_RNG2=y
|
||||
CONFIG_CRYPTO_WORKQUEUE=y
|
||||
CONFIG_DCACHE_WORD_ACCESS=y
|
||||
CONFIG_DEBUG_BUGVERBOSE=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S"
|
||||
# CONFIG_DEBUG_USER is not set
|
||||
CONFIG_DEFAULT_CFQ=y
|
||||
# CONFIG_DEFAULT_DEADLINE is not set
|
||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||
CONFIG_DMADEVICES=y
|
||||
CONFIG_DMA_BCM2708=y
|
||||
CONFIG_DMA_BCM2835=y
|
||||
CONFIG_DMA_CMA=y
|
||||
CONFIG_DMA_DECLARE_COHERENT=y
|
||||
CONFIG_DMA_ENGINE=y
|
||||
CONFIG_DMA_OF=y
|
||||
CONFIG_DMA_REMAP=y
|
||||
CONFIG_DMA_SHARED_BUFFER=y
|
||||
CONFIG_DMA_VIRTUAL_CHANNELS=y
|
||||
CONFIG_DNOTIFY=y
|
||||
@ -178,16 +186,17 @@ CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
|
||||
CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y
|
||||
CONFIG_FREEZER=y
|
||||
# CONFIG_FSL_QDMA is not set
|
||||
CONFIG_FS_IOMAP=y
|
||||
CONFIG_FS_MBCACHE=y
|
||||
CONFIG_FS_POSIX_ACL=y
|
||||
CONFIG_FW_LOADER_PAGED_BUF=y
|
||||
CONFIG_GENERIC_ALLOCATOR=y
|
||||
CONFIG_GENERIC_BUG=y
|
||||
CONFIG_GENERIC_CLOCKEVENTS=y
|
||||
CONFIG_GENERIC_CPU_AUTOPROBE=y
|
||||
CONFIG_GENERIC_EARLY_IOREMAP=y
|
||||
CONFIG_GENERIC_IDLE_POLL_SETUP=y
|
||||
CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y
|
||||
CONFIG_GENERIC_IRQ_MULTI_HANDLER=y
|
||||
CONFIG_GENERIC_IRQ_SHOW=y
|
||||
CONFIG_GENERIC_IRQ_SHOW_LEVEL=y
|
||||
@ -217,6 +226,7 @@ CONFIG_HAVE_ARCH_TRACEHOOK=y
|
||||
CONFIG_HAVE_CLK=y
|
||||
CONFIG_HAVE_CLK_PREPARE=y
|
||||
CONFIG_HAVE_CONTEXT_TRACKING=y
|
||||
CONFIG_HAVE_COPY_THREAD_TLS=y
|
||||
CONFIG_HAVE_C_RECORDMCOUNT=y
|
||||
CONFIG_HAVE_DEBUG_KMEMLEAK=y
|
||||
CONFIG_HAVE_DMA_CONTIGUOUS=y
|
||||
@ -227,14 +237,13 @@ CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
|
||||
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
|
||||
CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
|
||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
|
||||
CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y
|
||||
CONFIG_HAVE_LD_DEAD_CODE_DATA_ELIMINATION=y
|
||||
CONFIG_HAVE_MEMBLOCK=y
|
||||
CONFIG_HAVE_MOD_ARCH_SPECIFIC=y
|
||||
CONFIG_HAVE_NET_DSA=y
|
||||
CONFIG_HAVE_OPROFILE=y
|
||||
CONFIG_HAVE_OPTPROBES=y
|
||||
CONFIG_HAVE_PCI=y
|
||||
CONFIG_HAVE_PERF_EVENTS=y
|
||||
CONFIG_HAVE_PERF_REGS=y
|
||||
CONFIG_HAVE_PERF_USER_STACK_DUMP=y
|
||||
@ -256,16 +265,14 @@ CONFIG_INPUT_MOUSEDEV=y
|
||||
# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
CONFIG_IRQCHIP=y
|
||||
CONFIG_IRQ_DOMAIN=y
|
||||
CONFIG_IRQ_DOMAIN_HIERARCHY=y
|
||||
CONFIG_IRQ_FORCED_THREADING=y
|
||||
CONFIG_IRQ_WORK=y
|
||||
CONFIG_JBD2=y
|
||||
CONFIG_KASAN_STACK=1
|
||||
CONFIG_KERNEL_GZIP=y
|
||||
# CONFIG_KERNEL_XZ is not set
|
||||
# CONFIG_LCD_CLASS_DEVICE is not set
|
||||
CONFIG_LEDS_GPIO=y
|
||||
CONFIG_LEDS_TRIGGER_INPUT=y
|
||||
CONFIG_LIBFDT=y
|
||||
@ -282,10 +289,12 @@ CONFIG_MAX_RAW_DEVS=256
|
||||
CONFIG_MEMFD_CREATE=y
|
||||
CONFIG_MEMORY_ISOLATION=y
|
||||
CONFIG_MFD_CORE=y
|
||||
# CONFIG_MFD_LOCHNAGAR is not set
|
||||
# CONFIG_MFD_ROHM_BD70528 is not set
|
||||
# CONFIG_MFD_RPISENSE_CORE is not set
|
||||
# CONFIG_MFD_STPMIC1 is not set
|
||||
CONFIG_MFD_SYSCON=y
|
||||
CONFIG_MIGHT_HAVE_CACHE_L2X0=y
|
||||
CONFIG_MIGHT_HAVE_PCI=y
|
||||
CONFIG_MIGRATION=y
|
||||
CONFIG_MMC=y
|
||||
CONFIG_MMC_BCM2835=y
|
||||
@ -303,7 +312,6 @@ CONFIG_NEED_DMA_MAP_STATE=y
|
||||
CONFIG_NEED_PER_CPU_KM=y
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_ASCII=y
|
||||
CONFIG_NO_BOOTMEM=y
|
||||
CONFIG_NO_HZ=y
|
||||
CONFIG_NO_HZ_COMMON=y
|
||||
CONFIG_NO_HZ_IDLE=y
|
||||
@ -350,7 +358,6 @@ CONFIG_REGULATOR=y
|
||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||
CONFIG_RESET_CONTROLLER=y
|
||||
# CONFIG_RPIVID_MEM is not set
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_SCSI=y
|
||||
# CONFIG_SCSI_LOWLEVEL is not set
|
||||
# CONFIG_SCSI_PROC_FS is not set
|
||||
@ -365,6 +372,7 @@ CONFIG_SERIAL_AMBA_PL011=y
|
||||
CONFIG_SERIAL_AMBA_PL011_CONSOLE=y
|
||||
CONFIG_SERIAL_DEV_BUS=y
|
||||
# CONFIG_SERIAL_DEV_CTRL_TTYPORT is not set
|
||||
CONFIG_SERIAL_MCTRL_GPIO=y
|
||||
CONFIG_SERIAL_OF_PLATFORM=y
|
||||
CONFIG_SG_POOL=y
|
||||
CONFIG_SPARSE_IRQ=y
|
||||
@ -384,9 +392,13 @@ CONFIG_TIMER_OF=y
|
||||
CONFIG_TIMER_PROBE=y
|
||||
CONFIG_TINY_SRCU=y
|
||||
CONFIG_TMPFS_POSIX_ACL=y
|
||||
CONFIG_UBSAN_ALIGNMENT=y
|
||||
CONFIG_UEVENT_HELPER_PATH=""
|
||||
# CONFIG_UID16 is not set
|
||||
CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h"
|
||||
CONFIG_UNIX_SCM=y
|
||||
CONFIG_UNWINDER_ARM=y
|
||||
# CONFIG_UNWINDER_FRAME_POINTER is not set
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||
CONFIG_USB_COMMON=y
|
||||
|
@ -0,0 +1,53 @@
|
||||
From afa0459daa7b08c7b2c879705b69d39b734a11d0 Mon Sep 17 00:00:00 2001
|
||||
From: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
Date: Fri, 15 Nov 2019 02:42:21 +0900
|
||||
Subject: [PATCH] modpost: add a helper to get data pointed by a symbol
|
||||
|
||||
When CONFIG_MODULE_REL_CRCS is enabled, the value of __crc_* is not
|
||||
an absolute value, but the address to the CRC data embedded in the
|
||||
.rodata section.
|
||||
|
||||
Getting the data pointed by the symbol value is somewhat complex.
|
||||
Split it out into a new helper, sym_get_data().
|
||||
|
||||
I will reuse it to refactor namespace_from_kstrtabns() in the next
|
||||
commit.
|
||||
|
||||
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
---
|
||||
scripts/mod/modpost.c | 17 +++++++++++++----
|
||||
1 file changed, 13 insertions(+), 4 deletions(-)
|
||||
|
||||
--- a/scripts/mod/modpost.c
|
||||
+++ b/scripts/mod/modpost.c
|
||||
@@ -312,6 +312,18 @@ static const char *sec_name(struct elf_i
|
||||
return sech_name(elf, &elf->sechdrs[secindex]);
|
||||
}
|
||||
|
||||
+static void *sym_get_data(const struct elf_info *info, const Elf_Sym *sym)
|
||||
+{
|
||||
+ Elf_Shdr *sechdr = &info->sechdrs[sym->st_shndx];
|
||||
+ unsigned long offset;
|
||||
+
|
||||
+ offset = sym->st_value;
|
||||
+ if (info->hdr->e_type != ET_REL)
|
||||
+ offset -= sechdr->sh_addr;
|
||||
+
|
||||
+ return (void *)info->hdr + sechdr->sh_offset + offset;
|
||||
+}
|
||||
+
|
||||
#define strstarts(str, prefix) (strncmp(str, prefix, strlen(prefix)) == 0)
|
||||
|
||||
static enum export export_from_secname(struct elf_info *elf, unsigned int sec)
|
||||
@@ -701,10 +713,7 @@ static void handle_modversions(struct mo
|
||||
unsigned int *crcp;
|
||||
|
||||
/* symbol points to the CRC in the ELF object */
|
||||
- crcp = (void *)info->hdr + sym->st_value +
|
||||
- info->sechdrs[sym->st_shndx].sh_offset -
|
||||
- (info->hdr->e_type != ET_REL ?
|
||||
- info->sechdrs[sym->st_shndx].sh_addr : 0);
|
||||
+ crcp = sym_get_data(info, sym);
|
||||
crc = TO_NATIVE(*crcp);
|
||||
}
|
||||
sym_update_crc(symname + strlen("__crc_"), mod, crc,
|
@ -0,0 +1,62 @@
|
||||
From e84f9fbbece1585f45a03ccc11eeabe121cadc1b Mon Sep 17 00:00:00 2001
|
||||
From: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
Date: Fri, 15 Nov 2019 02:42:22 +0900
|
||||
Subject: [PATCH] modpost: refactor namespace_from_kstrtabns() to not hard-code
|
||||
section name
|
||||
|
||||
Currently, namespace_from_kstrtabns() relies on the fact that
|
||||
namespace strings are recorded in the __ksymtab_strings section.
|
||||
Actually, it is coded in include/linux/export.h, but modpost does
|
||||
not need to hard-code the section name.
|
||||
|
||||
Elf_Sym::st_shndx holds the index of the relevant section. Using it is
|
||||
a more portable way to get the namespace string.
|
||||
|
||||
Make namespace_from_kstrtabns() simply call sym_get_data(), and delete
|
||||
the info->ksymtab_strings .
|
||||
|
||||
While I was here, I added more 'const' qualifiers to pointers.
|
||||
|
||||
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
|
||||
---
|
||||
scripts/mod/modpost.c | 10 +++-------
|
||||
scripts/mod/modpost.h | 1 -
|
||||
2 files changed, 3 insertions(+), 8 deletions(-)
|
||||
|
||||
--- a/scripts/mod/modpost.c
|
||||
+++ b/scripts/mod/modpost.c
|
||||
@@ -360,10 +360,10 @@ static enum export export_from_sec(struc
|
||||
return export_unknown;
|
||||
}
|
||||
|
||||
-static const char *namespace_from_kstrtabns(struct elf_info *info,
|
||||
- Elf_Sym *kstrtabns)
|
||||
+static const char *namespace_from_kstrtabns(const struct elf_info *info,
|
||||
+ const Elf_Sym *sym)
|
||||
{
|
||||
- char *value = info->ksymtab_strings + kstrtabns->st_value;
|
||||
+ const char *value = sym_get_data(info, sym);
|
||||
return value[0] ? value : NULL;
|
||||
}
|
||||
|
||||
@@ -605,10 +605,6 @@ static int parse_elf(struct elf_info *in
|
||||
info->export_unused_gpl_sec = i;
|
||||
else if (strcmp(secname, "__ksymtab_gpl_future") == 0)
|
||||
info->export_gpl_future_sec = i;
|
||||
- else if (strcmp(secname, "__ksymtab_strings") == 0)
|
||||
- info->ksymtab_strings = (void *)hdr +
|
||||
- sechdrs[i].sh_offset -
|
||||
- sechdrs[i].sh_addr;
|
||||
|
||||
if (sechdrs[i].sh_type == SHT_SYMTAB) {
|
||||
unsigned int sh_link_idx;
|
||||
--- a/scripts/mod/modpost.h
|
||||
+++ b/scripts/mod/modpost.h
|
||||
@@ -143,7 +143,6 @@ struct elf_info {
|
||||
Elf_Section export_gpl_sec;
|
||||
Elf_Section export_unused_gpl_sec;
|
||||
Elf_Section export_gpl_future_sec;
|
||||
- char *ksymtab_strings;
|
||||
char *strtab;
|
||||
char *modinfo;
|
||||
unsigned int modinfo_len;
|
@ -0,0 +1,60 @@
|
||||
From fb033c95c94ca1ee3d16e04ebdb85d65fb55fff8 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Dooks <ben-linux@fluff.org>
|
||||
Date: Mon, 4 Nov 2019 18:15:15 +0100
|
||||
Subject: [PATCH] ARM: 8918/2: only build return_address() if needed
|
||||
|
||||
The system currently warns if the config conditions for
|
||||
building return_address in arch/arm/kernel/return_address.c
|
||||
are not met, leaving just an EXPORT_SYMBOL_GPL(return_address)
|
||||
of a function defined to be 'static linline'.
|
||||
This is a result of aeea3592a13b ("ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h").
|
||||
|
||||
Since we're not going to build anything other than an exported
|
||||
symbol for something that is already being defined to be an
|
||||
inline-able return of NULL, just avoid building the code to
|
||||
remove the following warning:
|
||||
|
||||
Fixes: aeea3592a13b ("ARM: 8158/1: LLVMLinux: use static inline in ARM ftrace.h")
|
||||
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
|
||||
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
|
||||
---
|
||||
arch/arm/kernel/Makefile | 6 +++++-
|
||||
arch/arm/kernel/return_address.c | 4 ----
|
||||
2 files changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
--- a/arch/arm/kernel/Makefile
|
||||
+++ b/arch/arm/kernel/Makefile
|
||||
@@ -17,10 +17,14 @@ CFLAGS_REMOVE_return_address.o = -pg
|
||||
# Object file lists.
|
||||
|
||||
obj-y := elf.o entry-common.o irq.o opcodes.o \
|
||||
- process.o ptrace.o reboot.o return_address.o \
|
||||
+ process.o ptrace.o reboot.o \
|
||||
setup.o signal.o sigreturn_codes.o \
|
||||
stacktrace.o sys_arm.o time.o traps.o
|
||||
|
||||
+ifneq ($(CONFIG_ARM_UNWIND),y)
|
||||
+obj-$(CONFIG_FRAME_POINTER) += return_address.o
|
||||
+endif
|
||||
+
|
||||
obj-$(CONFIG_ATAGS) += atags_parse.o
|
||||
obj-$(CONFIG_ATAGS_PROC) += atags_proc.o
|
||||
obj-$(CONFIG_DEPRECATED_PARAM_STRUCT) += atags_compat.o
|
||||
--- a/arch/arm/kernel/return_address.c
|
||||
+++ b/arch/arm/kernel/return_address.c
|
||||
@@ -7,8 +7,6 @@
|
||||
*/
|
||||
#include <linux/export.h>
|
||||
#include <linux/ftrace.h>
|
||||
-
|
||||
-#if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND)
|
||||
#include <linux/sched.h>
|
||||
|
||||
#include <asm/stacktrace.h>
|
||||
@@ -53,6 +51,4 @@ void *return_address(unsigned int level)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
-#endif /* if defined(CONFIG_FRAME_POINTER) && !defined(CONFIG_ARM_UNWIND) */
|
||||
-
|
||||
EXPORT_SYMBOL_GPL(return_address);
|
@ -0,0 +1,912 @@
|
||||
From 84e5ddd5c46ea3bf0cad670da32028994cad5936 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Jones <rjones@gateworks.com>
|
||||
Date: Mon, 14 Oct 2019 11:49:21 -0700
|
||||
Subject: [PATCH] iio: imu: Add support for the FXOS8700 IMU
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
FXOS8700CQ is a small, low-power, 3-axis linear accelerometer and 3-axis
|
||||
magnetometer combined into a single package. The device features a
|
||||
selectable I2C or point-to-point SPI serial interface with 14-bit
|
||||
accelerometer and 16-bit magnetometer ADC resolution along with
|
||||
smart-embedded functions.
|
||||
|
||||
FXOS8700CQ has dynamically selectable accelerationfull-scale ranges of
|
||||
±2 g/±4 g/±8 g and a fixed magnetic measurement range of ±1200 μT.
|
||||
Output data rates (ODR) from 1.563 Hz to 800 Hz are selectable by the user
|
||||
for each sensor. Interleaved magnetic and acceleration data is available
|
||||
at ODR rates of up to 400 Hz. FXOS8700CQ is available in a plastic QFN
|
||||
package and it is guaranteed to operate over the extended temperature
|
||||
range of –40 °C to +85 °C.
|
||||
|
||||
TODO: Trigger and IRQ configuration support
|
||||
|
||||
Datasheet:
|
||||
http://cache.freescale.com/files/sensors/doc/data_sheet/FXOS8700CQ.pdf
|
||||
|
||||
Signed-off-by: Robert Jones <rjones@gateworks.com>
|
||||
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
|
||||
---
|
||||
drivers/iio/imu/Kconfig | 27 ++
|
||||
drivers/iio/imu/Makefile | 5 +
|
||||
drivers/iio/imu/fxos8700.h | 10 +
|
||||
drivers/iio/imu/fxos8700_core.c | 649 ++++++++++++++++++++++++++++++++++++++++
|
||||
drivers/iio/imu/fxos8700_i2c.c | 71 +++++
|
||||
drivers/iio/imu/fxos8700_spi.c | 59 ++++
|
||||
6 files changed, 821 insertions(+)
|
||||
create mode 100644 drivers/iio/imu/fxos8700.h
|
||||
create mode 100644 drivers/iio/imu/fxos8700_core.c
|
||||
create mode 100644 drivers/iio/imu/fxos8700_i2c.c
|
||||
create mode 100644 drivers/iio/imu/fxos8700_spi.c
|
||||
|
||||
diff --git a/drivers/iio/imu/Kconfig b/drivers/iio/imu/Kconfig
|
||||
index f3c7282..60bb102 100644
|
||||
--- a/drivers/iio/imu/Kconfig
|
||||
+++ b/drivers/iio/imu/Kconfig
|
||||
@@ -40,6 +40,33 @@ config ADIS16480
|
||||
|
||||
source "drivers/iio/imu/bmi160/Kconfig"
|
||||
|
||||
+config FXOS8700
|
||||
+ tristate
|
||||
+
|
||||
+config FXOS8700_I2C
|
||||
+ tristate "NXP FXOS8700 I2C driver"
|
||||
+ depends on I2C
|
||||
+ select FXOS8700
|
||||
+ select REGMAP_I2C
|
||||
+ help
|
||||
+ Say yes here to build support for the NXP FXOS8700 m+g combo
|
||||
+ sensor on I2C.
|
||||
+
|
||||
+ This driver can also be built as a module. If so, the module will be
|
||||
+ called fxos8700_i2c.
|
||||
+
|
||||
+config FXOS8700_SPI
|
||||
+ tristate "NXP FXOS8700 SPI driver"
|
||||
+ depends on SPI
|
||||
+ select FXOS8700
|
||||
+ select REGMAP_SPI
|
||||
+ help
|
||||
+ Say yes here to build support for the NXP FXOS8700 m+g combo
|
||||
+ sensor on SPI.
|
||||
+
|
||||
+ This driver can also be built as a module. If so, the module will be
|
||||
+ called fxos8700_spi.
|
||||
+
|
||||
config KMX61
|
||||
tristate "Kionix KMX61 6-axis accelerometer and magnetometer"
|
||||
depends on I2C
|
||||
diff --git a/drivers/iio/imu/Makefile b/drivers/iio/imu/Makefile
|
||||
index 4a69588..5237fd4 100644
|
||||
--- a/drivers/iio/imu/Makefile
|
||||
+++ b/drivers/iio/imu/Makefile
|
||||
@@ -14,6 +14,11 @@ adis_lib-$(CONFIG_IIO_ADIS_LIB_BUFFER) += adis_buffer.o
|
||||
obj-$(CONFIG_IIO_ADIS_LIB) += adis_lib.o
|
||||
|
||||
obj-y += bmi160/
|
||||
+
|
||||
+obj-$(CONFIG_FXOS8700) += fxos8700_core.o
|
||||
+obj-$(CONFIG_FXOS8700_I2C) += fxos8700_i2c.o
|
||||
+obj-$(CONFIG_FXOS8700_SPI) += fxos8700_spi.o
|
||||
+
|
||||
obj-y += inv_mpu6050/
|
||||
|
||||
obj-$(CONFIG_KMX61) += kmx61.o
|
||||
diff --git a/drivers/iio/imu/fxos8700.h b/drivers/iio/imu/fxos8700.h
|
||||
new file mode 100644
|
||||
index 00000000..6dfb8d7
|
||||
--- /dev/null
|
||||
+++ b/drivers/iio/imu/fxos8700.h
|
||||
@@ -0,0 +1,10 @@
|
||||
+/* SPDX-License-Identifier: GPL-2.0 */
|
||||
+#ifndef FXOS8700_H_
|
||||
+#define FXOS8700_H_
|
||||
+
|
||||
+extern const struct regmap_config fxos8700_regmap_config;
|
||||
+
|
||||
+int fxos8700_core_probe(struct device *dev, struct regmap *regmap,
|
||||
+ const char *name, bool use_spi);
|
||||
+
|
||||
+#endif /* FXOS8700_H_ */
|
||||
diff --git a/drivers/iio/imu/fxos8700_core.c b/drivers/iio/imu/fxos8700_core.c
|
||||
new file mode 100644
|
||||
index 00000000..7b47be4
|
||||
--- /dev/null
|
||||
+++ b/drivers/iio/imu/fxos8700_core.c
|
||||
@@ -0,0 +1,649 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * FXOS8700 - NXP IMU (accelerometer plus magnetometer)
|
||||
+ *
|
||||
+ * IIO core driver for FXOS8700, with support for I2C/SPI busses
|
||||
+ *
|
||||
+ * TODO: Buffer, trigger, and IRQ support
|
||||
+ */
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/regmap.h>
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/bitops.h>
|
||||
+
|
||||
+#include <linux/iio/iio.h>
|
||||
+#include <linux/iio/sysfs.h>
|
||||
+
|
||||
+#include "fxos8700.h"
|
||||
+
|
||||
+/* Register Definitions */
|
||||
+#define FXOS8700_STATUS 0x00
|
||||
+#define FXOS8700_OUT_X_MSB 0x01
|
||||
+#define FXOS8700_OUT_X_LSB 0x02
|
||||
+#define FXOS8700_OUT_Y_MSB 0x03
|
||||
+#define FXOS8700_OUT_Y_LSB 0x04
|
||||
+#define FXOS8700_OUT_Z_MSB 0x05
|
||||
+#define FXOS8700_OUT_Z_LSB 0x06
|
||||
+#define FXOS8700_F_SETUP 0x09
|
||||
+#define FXOS8700_TRIG_CFG 0x0a
|
||||
+#define FXOS8700_SYSMOD 0x0b
|
||||
+#define FXOS8700_INT_SOURCE 0x0c
|
||||
+#define FXOS8700_WHO_AM_I 0x0d
|
||||
+#define FXOS8700_XYZ_DATA_CFG 0x0e
|
||||
+#define FXOS8700_HP_FILTER_CUTOFF 0x0f
|
||||
+#define FXOS8700_PL_STATUS 0x10
|
||||
+#define FXOS8700_PL_CFG 0x11
|
||||
+#define FXOS8700_PL_COUNT 0x12
|
||||
+#define FXOS8700_PL_BF_ZCOMP 0x13
|
||||
+#define FXOS8700_PL_THS_REG 0x14
|
||||
+#define FXOS8700_A_FFMT_CFG 0x15
|
||||
+#define FXOS8700_A_FFMT_SRC 0x16
|
||||
+#define FXOS8700_A_FFMT_THS 0x17
|
||||
+#define FXOS8700_A_FFMT_COUNT 0x18
|
||||
+#define FXOS8700_TRANSIENT_CFG 0x1d
|
||||
+#define FXOS8700_TRANSIENT_SRC 0x1e
|
||||
+#define FXOS8700_TRANSIENT_THS 0x1f
|
||||
+#define FXOS8700_TRANSIENT_COUNT 0x20
|
||||
+#define FXOS8700_PULSE_CFG 0x21
|
||||
+#define FXOS8700_PULSE_SRC 0x22
|
||||
+#define FXOS8700_PULSE_THSX 0x23
|
||||
+#define FXOS8700_PULSE_THSY 0x24
|
||||
+#define FXOS8700_PULSE_THSZ 0x25
|
||||
+#define FXOS8700_PULSE_TMLT 0x26
|
||||
+#define FXOS8700_PULSE_LTCY 0x27
|
||||
+#define FXOS8700_PULSE_WIND 0x28
|
||||
+#define FXOS8700_ASLP_COUNT 0x29
|
||||
+#define FXOS8700_CTRL_REG1 0x2a
|
||||
+#define FXOS8700_CTRL_REG2 0x2b
|
||||
+#define FXOS8700_CTRL_REG3 0x2c
|
||||
+#define FXOS8700_CTRL_REG4 0x2d
|
||||
+#define FXOS8700_CTRL_REG5 0x2e
|
||||
+#define FXOS8700_OFF_X 0x2f
|
||||
+#define FXOS8700_OFF_Y 0x30
|
||||
+#define FXOS8700_OFF_Z 0x31
|
||||
+#define FXOS8700_M_DR_STATUS 0x32
|
||||
+#define FXOS8700_M_OUT_X_MSB 0x33
|
||||
+#define FXOS8700_M_OUT_X_LSB 0x34
|
||||
+#define FXOS8700_M_OUT_Y_MSB 0x35
|
||||
+#define FXOS8700_M_OUT_Y_LSB 0x36
|
||||
+#define FXOS8700_M_OUT_Z_MSB 0x37
|
||||
+#define FXOS8700_M_OUT_Z_LSB 0x38
|
||||
+#define FXOS8700_CMP_X_MSB 0x39
|
||||
+#define FXOS8700_CMP_X_LSB 0x3a
|
||||
+#define FXOS8700_CMP_Y_MSB 0x3b
|
||||
+#define FXOS8700_CMP_Y_LSB 0x3c
|
||||
+#define FXOS8700_CMP_Z_MSB 0x3d
|
||||
+#define FXOS8700_CMP_Z_LSB 0x3e
|
||||
+#define FXOS8700_M_OFF_X_MSB 0x3f
|
||||
+#define FXOS8700_M_OFF_X_LSB 0x40
|
||||
+#define FXOS8700_M_OFF_Y_MSB 0x41
|
||||
+#define FXOS8700_M_OFF_Y_LSB 0x42
|
||||
+#define FXOS8700_M_OFF_Z_MSB 0x43
|
||||
+#define FXOS8700_M_OFF_Z_LSB 0x44
|
||||
+#define FXOS8700_MAX_X_MSB 0x45
|
||||
+#define FXOS8700_MAX_X_LSB 0x46
|
||||
+#define FXOS8700_MAX_Y_MSB 0x47
|
||||
+#define FXOS8700_MAX_Y_LSB 0x48
|
||||
+#define FXOS8700_MAX_Z_MSB 0x49
|
||||
+#define FXOS8700_MAX_Z_LSB 0x4a
|
||||
+#define FXOS8700_MIN_X_MSB 0x4b
|
||||
+#define FXOS8700_MIN_X_LSB 0x4c
|
||||
+#define FXOS8700_MIN_Y_MSB 0x4d
|
||||
+#define FXOS8700_MIN_Y_LSB 0x4e
|
||||
+#define FXOS8700_MIN_Z_MSB 0x4f
|
||||
+#define FXOS8700_MIN_Z_LSB 0x50
|
||||
+#define FXOS8700_TEMP 0x51
|
||||
+#define FXOS8700_M_THS_CFG 0x52
|
||||
+#define FXOS8700_M_THS_SRC 0x53
|
||||
+#define FXOS8700_M_THS_X_MSB 0x54
|
||||
+#define FXOS8700_M_THS_X_LSB 0x55
|
||||
+#define FXOS8700_M_THS_Y_MSB 0x56
|
||||
+#define FXOS8700_M_THS_Y_LSB 0x57
|
||||
+#define FXOS8700_M_THS_Z_MSB 0x58
|
||||
+#define FXOS8700_M_THS_Z_LSB 0x59
|
||||
+#define FXOS8700_M_THS_COUNT 0x5a
|
||||
+#define FXOS8700_M_CTRL_REG1 0x5b
|
||||
+#define FXOS8700_M_CTRL_REG2 0x5c
|
||||
+#define FXOS8700_M_CTRL_REG3 0x5d
|
||||
+#define FXOS8700_M_INT_SRC 0x5e
|
||||
+#define FXOS8700_A_VECM_CFG 0x5f
|
||||
+#define FXOS8700_A_VECM_THS_MSB 0x60
|
||||
+#define FXOS8700_A_VECM_THS_LSB 0x61
|
||||
+#define FXOS8700_A_VECM_CNT 0x62
|
||||
+#define FXOS8700_A_VECM_INITX_MSB 0x63
|
||||
+#define FXOS8700_A_VECM_INITX_LSB 0x64
|
||||
+#define FXOS8700_A_VECM_INITY_MSB 0x65
|
||||
+#define FXOS8700_A_VECM_INITY_LSB 0x66
|
||||
+#define FXOS8700_A_VECM_INITZ_MSB 0x67
|
||||
+#define FXOS8700_A_VECM_INITZ_LSB 0x68
|
||||
+#define FXOS8700_M_VECM_CFG 0x69
|
||||
+#define FXOS8700_M_VECM_THS_MSB 0x6a
|
||||
+#define FXOS8700_M_VECM_THS_LSB 0x6b
|
||||
+#define FXOS8700_M_VECM_CNT 0x6c
|
||||
+#define FXOS8700_M_VECM_INITX_MSB 0x6d
|
||||
+#define FXOS8700_M_VECM_INITX_LSB 0x6e
|
||||
+#define FXOS8700_M_VECM_INITY_MSB 0x6f
|
||||
+#define FXOS8700_M_VECM_INITY_LSB 0x70
|
||||
+#define FXOS8700_M_VECM_INITZ_MSB 0x71
|
||||
+#define FXOS8700_M_VECM_INITZ_LSB 0x72
|
||||
+#define FXOS8700_A_FFMT_THS_X_MSB 0x73
|
||||
+#define FXOS8700_A_FFMT_THS_X_LSB 0x74
|
||||
+#define FXOS8700_A_FFMT_THS_Y_MSB 0x75
|
||||
+#define FXOS8700_A_FFMT_THS_Y_LSB 0x76
|
||||
+#define FXOS8700_A_FFMT_THS_Z_MSB 0x77
|
||||
+#define FXOS8700_A_FFMT_THS_Z_LSB 0x78
|
||||
+#define FXOS8700_A_TRAN_INIT_MSB 0x79
|
||||
+#define FXOS8700_A_TRAN_INIT_LSB_X 0x7a
|
||||
+#define FXOS8700_A_TRAN_INIT_LSB_Y 0x7b
|
||||
+#define FXOS8700_A_TRAN_INIT_LSB_Z 0x7d
|
||||
+#define FXOS8700_TM_NVM_LOCK 0x7e
|
||||
+#define FXOS8700_NVM_DATA0_35 0x80
|
||||
+#define FXOS8700_NVM_DATA_BNK3 0xa4
|
||||
+#define FXOS8700_NVM_DATA_BNK2 0xa5
|
||||
+#define FXOS8700_NVM_DATA_BNK1 0xa6
|
||||
+#define FXOS8700_NVM_DATA_BNK0 0xa7
|
||||
+
|
||||
+/* Bit definitions for FXOS8700_CTRL_REG1 */
|
||||
+#define FXOS8700_CTRL_ODR_MSK 0x38
|
||||
+#define FXOS8700_CTRL_ODR_MAX 0x00
|
||||
+#define FXOS8700_CTRL_ODR_MIN GENMASK(4, 3)
|
||||
+
|
||||
+/* Bit definitions for FXOS8700_M_CTRL_REG1 */
|
||||
+#define FXOS8700_HMS_MASK GENMASK(1, 0)
|
||||
+#define FXOS8700_OS_MASK GENMASK(4, 2)
|
||||
+
|
||||
+/* Bit definitions for FXOS8700_M_CTRL_REG2 */
|
||||
+#define FXOS8700_MAXMIN_RST BIT(2)
|
||||
+#define FXOS8700_MAXMIN_DIS_THS BIT(3)
|
||||
+#define FXOS8700_MAXMIN_DIS BIT(4)
|
||||
+
|
||||
+#define FXOS8700_ACTIVE 0x01
|
||||
+#define FXOS8700_ACTIVE_MIN_USLEEP 4000 /* from table 6 in datasheet */
|
||||
+
|
||||
+#define FXOS8700_DEVICE_ID 0xC7
|
||||
+#define FXOS8700_PRE_DEVICE_ID 0xC4
|
||||
+#define FXOS8700_DATA_BUF_SIZE 3
|
||||
+
|
||||
+struct fxos8700_data {
|
||||
+ struct regmap *regmap;
|
||||
+ struct iio_trigger *trig;
|
||||
+ __be16 buf[FXOS8700_DATA_BUF_SIZE] ____cacheline_aligned;
|
||||
+};
|
||||
+
|
||||
+/* Regmap info */
|
||||
+static const struct regmap_range read_range[] = {
|
||||
+ {
|
||||
+ .range_min = FXOS8700_STATUS,
|
||||
+ .range_max = FXOS8700_A_FFMT_COUNT,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_TRANSIENT_CFG,
|
||||
+ .range_max = FXOS8700_A_FFMT_THS_Z_LSB,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static const struct regmap_range write_range[] = {
|
||||
+ {
|
||||
+ .range_min = FXOS8700_F_SETUP,
|
||||
+ .range_max = FXOS8700_TRIG_CFG,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_XYZ_DATA_CFG,
|
||||
+ .range_max = FXOS8700_HP_FILTER_CUTOFF,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_PL_CFG,
|
||||
+ .range_max = FXOS8700_A_FFMT_CFG,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_A_FFMT_THS,
|
||||
+ .range_max = FXOS8700_TRANSIENT_CFG,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_TRANSIENT_THS,
|
||||
+ .range_max = FXOS8700_PULSE_CFG,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_PULSE_THSX,
|
||||
+ .range_max = FXOS8700_OFF_Z,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_M_OFF_X_MSB,
|
||||
+ .range_max = FXOS8700_M_OFF_Z_LSB,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_M_THS_CFG,
|
||||
+ .range_max = FXOS8700_M_THS_CFG,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_M_THS_X_MSB,
|
||||
+ .range_max = FXOS8700_M_CTRL_REG3,
|
||||
+ }, {
|
||||
+ .range_min = FXOS8700_A_VECM_CFG,
|
||||
+ .range_max = FXOS8700_A_FFMT_THS_Z_LSB,
|
||||
+ },
|
||||
+};
|
||||
+
|
||||
+static const struct regmap_access_table driver_read_table = {
|
||||
+ .yes_ranges = read_range,
|
||||
+ .n_yes_ranges = ARRAY_SIZE(read_range),
|
||||
+};
|
||||
+
|
||||
+static const struct regmap_access_table driver_write_table = {
|
||||
+ .yes_ranges = write_range,
|
||||
+ .n_yes_ranges = ARRAY_SIZE(write_range),
|
||||
+};
|
||||
+
|
||||
+const struct regmap_config fxos8700_regmap_config = {
|
||||
+ .reg_bits = 8,
|
||||
+ .val_bits = 8,
|
||||
+ .max_register = FXOS8700_NVM_DATA_BNK0,
|
||||
+ .rd_table = &driver_read_table,
|
||||
+ .wr_table = &driver_write_table,
|
||||
+};
|
||||
+EXPORT_SYMBOL(fxos8700_regmap_config);
|
||||
+
|
||||
+#define FXOS8700_CHANNEL(_type, _axis) { \
|
||||
+ .type = _type, \
|
||||
+ .modified = 1, \
|
||||
+ .channel2 = IIO_MOD_##_axis, \
|
||||
+ .info_mask_separate = BIT(IIO_CHAN_INFO_RAW), \
|
||||
+ .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE) | \
|
||||
+ BIT(IIO_CHAN_INFO_SAMP_FREQ), \
|
||||
+}
|
||||
+
|
||||
+enum fxos8700_accel_scale_bits {
|
||||
+ MODE_2G = 0,
|
||||
+ MODE_4G,
|
||||
+ MODE_8G,
|
||||
+};
|
||||
+
|
||||
+/* scan indexes follow DATA register order */
|
||||
+enum fxos8700_scan_axis {
|
||||
+ FXOS8700_SCAN_ACCEL_X = 0,
|
||||
+ FXOS8700_SCAN_ACCEL_Y,
|
||||
+ FXOS8700_SCAN_ACCEL_Z,
|
||||
+ FXOS8700_SCAN_MAGN_X,
|
||||
+ FXOS8700_SCAN_MAGN_Y,
|
||||
+ FXOS8700_SCAN_MAGN_Z,
|
||||
+ FXOS8700_SCAN_RHALL,
|
||||
+ FXOS8700_SCAN_TIMESTAMP,
|
||||
+};
|
||||
+
|
||||
+enum fxos8700_sensor {
|
||||
+ FXOS8700_ACCEL = 0,
|
||||
+ FXOS8700_MAGN,
|
||||
+ FXOS8700_NUM_SENSORS /* must be last */
|
||||
+};
|
||||
+
|
||||
+enum fxos8700_int_pin {
|
||||
+ FXOS8700_PIN_INT1,
|
||||
+ FXOS8700_PIN_INT2
|
||||
+};
|
||||
+
|
||||
+struct fxos8700_scale {
|
||||
+ u8 bits;
|
||||
+ int uscale;
|
||||
+};
|
||||
+
|
||||
+struct fxos8700_odr {
|
||||
+ u8 bits;
|
||||
+ int odr;
|
||||
+ int uodr;
|
||||
+};
|
||||
+
|
||||
+static const struct fxos8700_scale fxos8700_accel_scale[] = {
|
||||
+ { MODE_2G, 244},
|
||||
+ { MODE_4G, 488},
|
||||
+ { MODE_8G, 976},
|
||||
+};
|
||||
+
|
||||
+/*
|
||||
+ * Accellerometer and magnetometer have the same ODR options, set in the
|
||||
+ * CTRL_REG1 register. ODR is halved when using both sensors at once in
|
||||
+ * hybrid mode.
|
||||
+ */
|
||||
+static const struct fxos8700_odr fxos8700_odr[] = {
|
||||
+ {0x00, 800, 0},
|
||||
+ {0x01, 400, 0},
|
||||
+ {0x02, 200, 0},
|
||||
+ {0x03, 100, 0},
|
||||
+ {0x04, 50, 0},
|
||||
+ {0x05, 12, 500000},
|
||||
+ {0x06, 6, 250000},
|
||||
+ {0x07, 1, 562500},
|
||||
+};
|
||||
+
|
||||
+static const struct iio_chan_spec fxos8700_channels[] = {
|
||||
+ FXOS8700_CHANNEL(IIO_ACCEL, X),
|
||||
+ FXOS8700_CHANNEL(IIO_ACCEL, Y),
|
||||
+ FXOS8700_CHANNEL(IIO_ACCEL, Z),
|
||||
+ FXOS8700_CHANNEL(IIO_MAGN, X),
|
||||
+ FXOS8700_CHANNEL(IIO_MAGN, Y),
|
||||
+ FXOS8700_CHANNEL(IIO_MAGN, Z),
|
||||
+ IIO_CHAN_SOFT_TIMESTAMP(FXOS8700_SCAN_TIMESTAMP),
|
||||
+};
|
||||
+
|
||||
+static enum fxos8700_sensor fxos8700_to_sensor(enum iio_chan_type iio_type)
|
||||
+{
|
||||
+ switch (iio_type) {
|
||||
+ case IIO_ACCEL:
|
||||
+ return FXOS8700_ACCEL;
|
||||
+ case IIO_ANGL_VEL:
|
||||
+ return FXOS8700_MAGN;
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_set_active_mode(struct fxos8700_data *data,
|
||||
+ enum fxos8700_sensor t, bool mode)
|
||||
+{
|
||||
+ int ret;
|
||||
+
|
||||
+ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1, mode);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ usleep_range(FXOS8700_ACTIVE_MIN_USLEEP,
|
||||
+ FXOS8700_ACTIVE_MIN_USLEEP + 1000);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_set_scale(struct fxos8700_data *data,
|
||||
+ enum fxos8700_sensor t, int uscale)
|
||||
+{
|
||||
+ int i;
|
||||
+ static const int scale_num = ARRAY_SIZE(fxos8700_accel_scale);
|
||||
+ struct device *dev = regmap_get_device(data->regmap);
|
||||
+
|
||||
+ if (t == FXOS8700_MAGN) {
|
||||
+ dev_err(dev, "Magnetometer scale is locked at 1200uT\n");
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < scale_num; i++)
|
||||
+ if (fxos8700_accel_scale[i].uscale == uscale)
|
||||
+ break;
|
||||
+
|
||||
+ if (i == scale_num)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return regmap_write(data->regmap, FXOS8700_XYZ_DATA_CFG,
|
||||
+ fxos8700_accel_scale[i].bits);
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_get_scale(struct fxos8700_data *data,
|
||||
+ enum fxos8700_sensor t, int *uscale)
|
||||
+{
|
||||
+ int i, ret, val;
|
||||
+ static const int scale_num = ARRAY_SIZE(fxos8700_accel_scale);
|
||||
+
|
||||
+ if (t == FXOS8700_MAGN) {
|
||||
+ *uscale = 1200; /* Magnetometer is locked at 1200uT */
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
+ ret = regmap_read(data->regmap, FXOS8700_XYZ_DATA_CFG, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ for (i = 0; i < scale_num; i++) {
|
||||
+ if (fxos8700_accel_scale[i].bits == (val & 0x3)) {
|
||||
+ *uscale = fxos8700_accel_scale[i].uscale;
|
||||
+ return 0;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ return -EINVAL;
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_get_data(struct fxos8700_data *data, int chan_type,
|
||||
+ int axis, int *val)
|
||||
+{
|
||||
+ u8 base, reg;
|
||||
+ int ret;
|
||||
+ enum fxos8700_sensor type = fxos8700_to_sensor(chan_type);
|
||||
+
|
||||
+ base = type ? FXOS8700_OUT_X_MSB : FXOS8700_M_OUT_X_MSB;
|
||||
+
|
||||
+ /* Block read 6 bytes of device output registers to avoid data loss */
|
||||
+ ret = regmap_bulk_read(data->regmap, base, data->buf,
|
||||
+ FXOS8700_DATA_BUF_SIZE);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Convert axis to buffer index */
|
||||
+ reg = axis - IIO_MOD_X;
|
||||
+
|
||||
+ /* Convert to native endianness */
|
||||
+ *val = sign_extend32(be16_to_cpu(data->buf[reg]), 15);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_set_odr(struct fxos8700_data *data, enum fxos8700_sensor t,
|
||||
+ int odr, int uodr)
|
||||
+{
|
||||
+ int i, ret, val;
|
||||
+ bool active_mode;
|
||||
+ static const int odr_num = ARRAY_SIZE(fxos8700_odr);
|
||||
+
|
||||
+ ret = regmap_read(data->regmap, FXOS8700_CTRL_REG1, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ active_mode = val & FXOS8700_ACTIVE;
|
||||
+
|
||||
+ if (active_mode) {
|
||||
+ /*
|
||||
+ * The device must be in standby mode to change any of the
|
||||
+ * other fields within CTRL_REG1
|
||||
+ */
|
||||
+ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1,
|
||||
+ val & ~FXOS8700_ACTIVE);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ for (i = 0; i < odr_num; i++)
|
||||
+ if (fxos8700_odr[i].odr == odr && fxos8700_odr[i].uodr == uodr)
|
||||
+ break;
|
||||
+
|
||||
+ if (i >= odr_num)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ return regmap_update_bits(data->regmap,
|
||||
+ FXOS8700_CTRL_REG1,
|
||||
+ FXOS8700_CTRL_ODR_MSK + FXOS8700_ACTIVE,
|
||||
+ fxos8700_odr[i].bits << 3 | active_mode);
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_get_odr(struct fxos8700_data *data, enum fxos8700_sensor t,
|
||||
+ int *odr, int *uodr)
|
||||
+{
|
||||
+ int i, val, ret;
|
||||
+ static const int odr_num = ARRAY_SIZE(fxos8700_odr);
|
||||
+
|
||||
+ ret = regmap_read(data->regmap, FXOS8700_CTRL_REG1, &val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ val &= FXOS8700_CTRL_ODR_MSK;
|
||||
+
|
||||
+ for (i = 0; i < odr_num; i++)
|
||||
+ if (val == fxos8700_odr[i].bits)
|
||||
+ break;
|
||||
+
|
||||
+ if (i >= odr_num)
|
||||
+ return -EINVAL;
|
||||
+
|
||||
+ *odr = fxos8700_odr[i].odr;
|
||||
+ *uodr = fxos8700_odr[i].uodr;
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_read_raw(struct iio_dev *indio_dev,
|
||||
+ struct iio_chan_spec const *chan,
|
||||
+ int *val, int *val2, long mask)
|
||||
+{
|
||||
+ int ret;
|
||||
+ struct fxos8700_data *data = iio_priv(indio_dev);
|
||||
+
|
||||
+ switch (mask) {
|
||||
+ case IIO_CHAN_INFO_RAW:
|
||||
+ ret = fxos8700_get_data(data, chan->type, chan->channel2, val);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+ return IIO_VAL_INT;
|
||||
+ case IIO_CHAN_INFO_SCALE:
|
||||
+ *val = 0;
|
||||
+ ret = fxos8700_get_scale(data, fxos8700_to_sensor(chan->type),
|
||||
+ val2);
|
||||
+ return ret ? ret : IIO_VAL_INT_PLUS_MICRO;
|
||||
+ case IIO_CHAN_INFO_SAMP_FREQ:
|
||||
+ ret = fxos8700_get_odr(data, fxos8700_to_sensor(chan->type),
|
||||
+ val, val2);
|
||||
+ return ret ? ret : IIO_VAL_INT_PLUS_MICRO;
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static int fxos8700_write_raw(struct iio_dev *indio_dev,
|
||||
+ struct iio_chan_spec const *chan,
|
||||
+ int val, int val2, long mask)
|
||||
+{
|
||||
+ struct fxos8700_data *data = iio_priv(indio_dev);
|
||||
+
|
||||
+ switch (mask) {
|
||||
+ case IIO_CHAN_INFO_SCALE:
|
||||
+ return fxos8700_set_scale(data, fxos8700_to_sensor(chan->type),
|
||||
+ val2);
|
||||
+ case IIO_CHAN_INFO_SAMP_FREQ:
|
||||
+ return fxos8700_set_odr(data, fxos8700_to_sensor(chan->type),
|
||||
+ val, val2);
|
||||
+ default:
|
||||
+ return -EINVAL;
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
+static IIO_CONST_ATTR(in_accel_sampling_frequency_available,
|
||||
+ "1.5625 6.25 12.5 50 100 200 400 800");
|
||||
+static IIO_CONST_ATTR(in_magn_sampling_frequency_available,
|
||||
+ "1.5625 6.25 12.5 50 100 200 400 800");
|
||||
+static IIO_CONST_ATTR(in_accel_scale_available, "0.000244 0.000488 0.000976");
|
||||
+static IIO_CONST_ATTR(in_magn_scale_available, "0.000001200");
|
||||
+
|
||||
+static struct attribute *fxos8700_attrs[] = {
|
||||
+ &iio_const_attr_in_accel_sampling_frequency_available.dev_attr.attr,
|
||||
+ &iio_const_attr_in_magn_sampling_frequency_available.dev_attr.attr,
|
||||
+ &iio_const_attr_in_accel_scale_available.dev_attr.attr,
|
||||
+ &iio_const_attr_in_magn_scale_available.dev_attr.attr,
|
||||
+ NULL,
|
||||
+};
|
||||
+
|
||||
+static const struct attribute_group fxos8700_attrs_group = {
|
||||
+ .attrs = fxos8700_attrs,
|
||||
+};
|
||||
+
|
||||
+static const struct iio_info fxos8700_info = {
|
||||
+ .read_raw = fxos8700_read_raw,
|
||||
+ .write_raw = fxos8700_write_raw,
|
||||
+ .attrs = &fxos8700_attrs_group,
|
||||
+};
|
||||
+
|
||||
+static int fxos8700_chip_init(struct fxos8700_data *data, bool use_spi)
|
||||
+{
|
||||
+ int ret;
|
||||
+ unsigned int val;
|
||||
+ struct device *dev = regmap_get_device(data->regmap);
|
||||
+
|
||||
+ ret = regmap_read(data->regmap, FXOS8700_WHO_AM_I, &val);
|
||||
+ if (ret) {
|
||||
+ dev_err(dev, "Error reading chip id\n");
|
||||
+ return ret;
|
||||
+ }
|
||||
+ if (val != FXOS8700_DEVICE_ID && val != FXOS8700_PRE_DEVICE_ID) {
|
||||
+ dev_err(dev, "Wrong chip id, got %x expected %x or %x\n",
|
||||
+ val, FXOS8700_DEVICE_ID, FXOS8700_PRE_DEVICE_ID);
|
||||
+ return -ENODEV;
|
||||
+ }
|
||||
+
|
||||
+ ret = fxos8700_set_active_mode(data, FXOS8700_ACCEL, true);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = fxos8700_set_active_mode(data, FXOS8700_MAGN, true);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /*
|
||||
+ * The device must be in standby mode to change any of the other fields
|
||||
+ * within CTRL_REG1
|
||||
+ */
|
||||
+ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1, 0x00);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Set max oversample ratio (OSR) and both devices active */
|
||||
+ ret = regmap_write(data->regmap, FXOS8700_M_CTRL_REG1,
|
||||
+ FXOS8700_HMS_MASK | FXOS8700_OS_MASK);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Disable and rst min/max measurements & threshold */
|
||||
+ ret = regmap_write(data->regmap, FXOS8700_M_CTRL_REG2,
|
||||
+ FXOS8700_MAXMIN_RST | FXOS8700_MAXMIN_DIS_THS |
|
||||
+ FXOS8700_MAXMIN_DIS);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Max ODR (800Hz individual or 400Hz hybrid), active mode */
|
||||
+ ret = regmap_write(data->regmap, FXOS8700_CTRL_REG1,
|
||||
+ FXOS8700_CTRL_ODR_MAX | FXOS8700_ACTIVE);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ /* Set for max full-scale range (+/-8G) */
|
||||
+ return regmap_write(data->regmap, FXOS8700_XYZ_DATA_CFG, MODE_8G);
|
||||
+}
|
||||
+
|
||||
+static void fxos8700_chip_uninit(void *data)
|
||||
+{
|
||||
+ struct fxos8700_data *fxos8700_data = data;
|
||||
+
|
||||
+ fxos8700_set_active_mode(fxos8700_data, FXOS8700_ACCEL, false);
|
||||
+ fxos8700_set_active_mode(fxos8700_data, FXOS8700_MAGN, false);
|
||||
+}
|
||||
+
|
||||
+int fxos8700_core_probe(struct device *dev, struct regmap *regmap,
|
||||
+ const char *name, bool use_spi)
|
||||
+{
|
||||
+ struct iio_dev *indio_dev;
|
||||
+ struct fxos8700_data *data;
|
||||
+ int ret;
|
||||
+
|
||||
+ indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
|
||||
+ if (!indio_dev)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
+ data = iio_priv(indio_dev);
|
||||
+ dev_set_drvdata(dev, indio_dev);
|
||||
+ data->regmap = regmap;
|
||||
+
|
||||
+ ret = fxos8700_chip_init(data, use_spi);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ ret = devm_add_action_or_reset(dev, fxos8700_chip_uninit, data);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ indio_dev->dev.parent = dev;
|
||||
+ indio_dev->channels = fxos8700_channels;
|
||||
+ indio_dev->num_channels = ARRAY_SIZE(fxos8700_channels);
|
||||
+ indio_dev->name = name ? name : "fxos8700";
|
||||
+ indio_dev->modes = INDIO_DIRECT_MODE;
|
||||
+ indio_dev->info = &fxos8700_info;
|
||||
+
|
||||
+ return devm_iio_device_register(dev, indio_dev);
|
||||
+}
|
||||
+EXPORT_SYMBOL_GPL(fxos8700_core_probe);
|
||||
+
|
||||
+MODULE_AUTHOR("Robert Jones <rjones@gateworks.com>");
|
||||
+MODULE_DESCRIPTION("FXOS8700 6-Axis Acc and Mag Combo Sensor driver");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
diff --git a/drivers/iio/imu/fxos8700_i2c.c b/drivers/iio/imu/fxos8700_i2c.c
|
||||
new file mode 100644
|
||||
index 00000000..3ceb763
|
||||
--- /dev/null
|
||||
+++ b/drivers/iio/imu/fxos8700_i2c.c
|
||||
@@ -0,0 +1,71 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * FXOS8700 - NXP IMU, I2C bits
|
||||
+ *
|
||||
+ * 7-bit I2C slave address determined by SA1 and SA0 logic level
|
||||
+ * inputs represented in the following table:
|
||||
+ * SA1 | SA0 | Slave Address
|
||||
+ * 0 | 0 | 0x1E
|
||||
+ * 0 | 1 | 0x1D
|
||||
+ * 1 | 0 | 0x1C
|
||||
+ * 1 | 1 | 0x1F
|
||||
+ */
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/i2c.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/mod_devicetable.h>
|
||||
+#include <linux/regmap.h>
|
||||
+
|
||||
+#include "fxos8700.h"
|
||||
+
|
||||
+static int fxos8700_i2c_probe(struct i2c_client *client,
|
||||
+ const struct i2c_device_id *id)
|
||||
+{
|
||||
+ struct regmap *regmap;
|
||||
+ const char *name = NULL;
|
||||
+
|
||||
+ regmap = devm_regmap_init_i2c(client, &fxos8700_regmap_config);
|
||||
+ if (IS_ERR(regmap)) {
|
||||
+ dev_err(&client->dev, "Failed to register i2c regmap %d\n",
|
||||
+ (int)PTR_ERR(regmap));
|
||||
+ return PTR_ERR(regmap);
|
||||
+ }
|
||||
+
|
||||
+ if (id)
|
||||
+ name = id->name;
|
||||
+
|
||||
+ return fxos8700_core_probe(&client->dev, regmap, name, false);
|
||||
+}
|
||||
+
|
||||
+static const struct i2c_device_id fxos8700_i2c_id[] = {
|
||||
+ {"fxos8700", 0},
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(i2c, fxos8700_i2c_id);
|
||||
+
|
||||
+static const struct acpi_device_id fxos8700_acpi_match[] = {
|
||||
+ {"FXOS8700", 0},
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(acpi, fxos8700_acpi_match);
|
||||
+
|
||||
+static const struct of_device_id fxos8700_of_match[] = {
|
||||
+ { .compatible = "nxp,fxos8700" },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, fxos8700_of_match);
|
||||
+
|
||||
+static struct i2c_driver fxos8700_i2c_driver = {
|
||||
+ .driver = {
|
||||
+ .name = "fxos8700_i2c",
|
||||
+ .acpi_match_table = ACPI_PTR(fxos8700_acpi_match),
|
||||
+ .of_match_table = fxos8700_of_match,
|
||||
+ },
|
||||
+ .probe = fxos8700_i2c_probe,
|
||||
+ .id_table = fxos8700_i2c_id,
|
||||
+};
|
||||
+module_i2c_driver(fxos8700_i2c_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Robert Jones <rjones@gateworks.com>");
|
||||
+MODULE_DESCRIPTION("FXOS8700 I2C driver");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
diff --git a/drivers/iio/imu/fxos8700_spi.c b/drivers/iio/imu/fxos8700_spi.c
|
||||
new file mode 100644
|
||||
index 00000000..57e7bb6
|
||||
--- /dev/null
|
||||
+++ b/drivers/iio/imu/fxos8700_spi.c
|
||||
@@ -0,0 +1,59 @@
|
||||
+// SPDX-License-Identifier: GPL-2.0
|
||||
+/*
|
||||
+ * FXOS8700 - NXP IMU, SPI bits
|
||||
+ */
|
||||
+#include <linux/acpi.h>
|
||||
+#include <linux/module.h>
|
||||
+#include <linux/mod_devicetable.h>
|
||||
+#include <linux/regmap.h>
|
||||
+#include <linux/spi/spi.h>
|
||||
+
|
||||
+#include "fxos8700.h"
|
||||
+
|
||||
+static int fxos8700_spi_probe(struct spi_device *spi)
|
||||
+{
|
||||
+ struct regmap *regmap;
|
||||
+ const struct spi_device_id *id = spi_get_device_id(spi);
|
||||
+
|
||||
+ regmap = devm_regmap_init_spi(spi, &fxos8700_regmap_config);
|
||||
+ if (IS_ERR(regmap)) {
|
||||
+ dev_err(&spi->dev, "Failed to register spi regmap %d\n",
|
||||
+ (int)PTR_ERR(regmap));
|
||||
+ return PTR_ERR(regmap);
|
||||
+ }
|
||||
+
|
||||
+ return fxos8700_core_probe(&spi->dev, regmap, id->name, true);
|
||||
+}
|
||||
+
|
||||
+static const struct spi_device_id fxos8700_spi_id[] = {
|
||||
+ {"fxos8700", 0},
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(spi, fxos8700_spi_id);
|
||||
+
|
||||
+static const struct acpi_device_id fxos8700_acpi_match[] = {
|
||||
+ {"FXOS8700", 0},
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(acpi, fxos8700_acpi_match);
|
||||
+
|
||||
+static const struct of_device_id fxos8700_of_match[] = {
|
||||
+ { .compatible = "nxp,fxos8700" },
|
||||
+ { }
|
||||
+};
|
||||
+MODULE_DEVICE_TABLE(of, fxos8700_of_match);
|
||||
+
|
||||
+static struct spi_driver fxos8700_spi_driver = {
|
||||
+ .probe = fxos8700_spi_probe,
|
||||
+ .id_table = fxos8700_spi_id,
|
||||
+ .driver = {
|
||||
+ .acpi_match_table = ACPI_PTR(fxos8700_acpi_match),
|
||||
+ .of_match_table = fxos8700_of_match,
|
||||
+ .name = "fxos8700_spi",
|
||||
+ },
|
||||
+};
|
||||
+module_spi_driver(fxos8700_spi_driver);
|
||||
+
|
||||
+MODULE_AUTHOR("Robert Jones <rjones@gateworks.com>");
|
||||
+MODULE_DESCRIPTION("FXOS8700 SPI driver");
|
||||
+MODULE_LICENSE("GPL v2");
|
||||
--
|
||||
2.7.4
|
||||
|
@ -135,7 +135,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
|
||||
--- a/scripts/mod/modpost.c
|
||||
+++ b/scripts/mod/modpost.c
|
||||
@@ -2051,7 +2051,9 @@ static void read_symbols(const char *mod
|
||||
@@ -2056,7 +2056,9 @@ static void read_symbols(const char *mod
|
||||
symname = remove_dot(info.strtab + sym->st_name);
|
||||
|
||||
handle_modversions(mod, &info, sym, symname);
|
||||
@ -145,7 +145,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
/* Apply symbol namespaces from __kstrtabns_<symbol> entries. */
|
||||
@@ -2265,8 +2267,10 @@ static void add_header(struct buffer *b,
|
||||
@@ -2270,8 +2272,10 @@ static void add_header(struct buffer *b,
|
||||
buf_printf(b, "\n");
|
||||
buf_printf(b, "BUILD_SALT;\n");
|
||||
buf_printf(b, "\n");
|
||||
@ -156,7 +156,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
buf_printf(b, "\n");
|
||||
buf_printf(b, "__visible struct module __this_module\n");
|
||||
buf_printf(b, "__section(.gnu.linkonce.this_module) = {\n");
|
||||
@@ -2283,8 +2287,10 @@ static void add_header(struct buffer *b,
|
||||
@@ -2288,8 +2292,10 @@ static void add_header(struct buffer *b,
|
||||
|
||||
static void add_intree_flag(struct buffer *b, int is_intree)
|
||||
{
|
||||
@ -167,7 +167,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
/* Cannot check for assembler */
|
||||
@@ -2297,8 +2303,10 @@ static void add_retpoline(struct buffer
|
||||
@@ -2302,8 +2308,10 @@ static void add_retpoline(struct buffer
|
||||
|
||||
static void add_staging_flag(struct buffer *b, const char *name)
|
||||
{
|
||||
@ -178,7 +178,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2382,11 +2390,13 @@ static void add_depends(struct buffer *b
|
||||
@@ -2387,11 +2395,13 @@ static void add_depends(struct buffer *b
|
||||
|
||||
static void add_srcversion(struct buffer *b, struct module *mod)
|
||||
{
|
||||
@ -192,7 +192,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||
}
|
||||
|
||||
static void write_if_changed(struct buffer *b, const char *fname)
|
||||
@@ -2656,7 +2666,9 @@ int main(int argc, char **argv)
|
||||
@@ -2661,7 +2671,9 @@ int main(int argc, char **argv)
|
||||
add_staging_flag(&buf, mod->name);
|
||||
err |= add_versions(&buf, mod);
|
||||
add_depends(&buf, mod);
|
||||
|
@ -8,8 +8,6 @@ Signed-off-by: Kevin Darbyshire-Bryant <ldir@darbyshire-bryant.me.uk>
|
||||
scripts/mod/file2alias.c | 3 +++
|
||||
1 file changed, 3 insertions(+)
|
||||
|
||||
diff --git a/scripts/mod/file2alias.c b/scripts/mod/file2alias.c
|
||||
index c91eba751804..e756fd80b721 100644
|
||||
--- a/scripts/mod/file2alias.c
|
||||
+++ b/scripts/mod/file2alias.c
|
||||
@@ -38,6 +38,9 @@ typedef struct {
|
||||
@ -22,6 +20,3 @@ index c91eba751804..e756fd80b721 100644
|
||||
/* backwards compatibility, don't use in new code */
|
||||
typedef struct {
|
||||
__u8 b[16];
|
||||
--
|
||||
2.21.1 (Apple Git-122.3)
|
||||
|
||||
|
@ -0,0 +1,73 @@
|
||||
From 62e7f0b553038e3a1a1b2b067dd1fbdacd634e37 Mon Sep 17 00:00:00 2001
|
||||
From: Robert Jones <rjones@gateworks.com>
|
||||
Date: Fri, 14 Feb 2020 13:02:41 -0800
|
||||
Subject: [PATCH] ARM: dts: imx6qdl-gw553x: add lsm9ds1 iio imu/magn support
|
||||
|
||||
Add one node for the accel/gyro i2c device and another for the separate
|
||||
magnetometer device in the lsm9ds1.
|
||||
|
||||
Signed-off-by: Robert Jones <rjones@gateworks.com>
|
||||
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
|
||||
---
|
||||
arch/arm/boot/dts/imx6qdl-gw553x.dtsi | 31 +++++++++++++++++++++++++++++++
|
||||
1 file changed, 31 insertions(+)
|
||||
|
||||
diff --git a/arch/arm/boot/dts/imx6qdl-gw553x.dtsi b/arch/arm/boot/dts/imx6qdl-gw553x.dtsi
|
||||
index a106689..ee85031 100644
|
||||
--- a/arch/arm/boot/dts/imx6qdl-gw553x.dtsi
|
||||
+++ b/arch/arm/boot/dts/imx6qdl-gw553x.dtsi
|
||||
@@ -173,6 +173,25 @@
|
||||
pinctrl-0 = <&pinctrl_i2c2>;
|
||||
status = "okay";
|
||||
|
||||
+ magn@1c {
|
||||
+ compatible = "st,lsm9ds1-magn";
|
||||
+ reg = <0x1c>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_mag>;
|
||||
+ interrupt-parent = <&gpio1>;
|
||||
+ interrupts = <2 IRQ_TYPE_EDGE_RISING>;
|
||||
+ };
|
||||
+
|
||||
+ imu@6a {
|
||||
+ compatible = "st,lsm9ds1-imu";
|
||||
+ reg = <0x6a>;
|
||||
+ st,drdy-int-pin = <1>;
|
||||
+ pinctrl-names = "default";
|
||||
+ pinctrl-0 = <&pinctrl_imu>;
|
||||
+ interrupt-parent = <&gpio7>;
|
||||
+ interrupts = <13 IRQ_TYPE_LEVEL_HIGH>;
|
||||
+ };
|
||||
+
|
||||
ltc3676: pmic@3c {
|
||||
compatible = "lltc,ltc3676";
|
||||
reg = <0x3c>;
|
||||
@@ -426,6 +445,12 @@
|
||||
>;
|
||||
};
|
||||
|
||||
+ pinctrl_imu: imugrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_GPIO_18__GPIO7_IO13 0x1b0b0
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
pinctrl_ipu1_csi0: ipu1csi0grp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_CSI0_DAT12__IPU1_CSI0_DATA12 0x1b0b0
|
||||
@@ -449,6 +474,12 @@
|
||||
>;
|
||||
};
|
||||
|
||||
+ pinctrl_mag: maggrp {
|
||||
+ fsl,pins = <
|
||||
+ MX6QDL_PAD_GPIO_2__GPIO1_IO02 0x1b0b0
|
||||
+ >;
|
||||
+ };
|
||||
+
|
||||
pinctrl_pcie: pciegrp {
|
||||
fsl,pins = <
|
||||
MX6QDL_PAD_GPIO_0__GPIO1_IO00 0x1b0b0
|
||||
--
|
||||
2.7.4
|
||||
|
@ -70,14 +70,21 @@ define Build/uDPU-firmware
|
||||
(rm -fR $@-fw; mkdir -p $@-fw)
|
||||
$(CP) $(BIN_DIR)/$(IMAGE_PREFIX)-initramfs.itb $@-fw/recovery.itb
|
||||
$(CP) $@-boot.scr $@-fw/boot.scr
|
||||
(cd $(TARGET_DIR); $(TAR) -cvzf $@-fw/rootfs.tgz .)
|
||||
(cd $@.boot; $(TAR) -cvzf $@-fw/boot.tgz .)
|
||||
(cd $@-fw; $(TAR) -cvzf $(KDIR_TMP)/$(IMAGE_PREFIX)-firmware.tgz .)
|
||||
$(TAR) -cvzp --numeric-owner --owner=0 --group=0 --sort=name \
|
||||
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \
|
||||
-f $@-fw/rootfs.tgz -C $(TARGET_DIR) .
|
||||
$(TAR) -cvzp --numeric-owner --owner=0 --group=0 --sort=name \
|
||||
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \
|
||||
-f $@-fw/boot.tgz -C $@.boot .
|
||||
$(TAR) -cvzp --numeric-owner --owner=0 --group=0 --sort=name \
|
||||
$(if $(SOURCE_DATE_EPOCH),--mtime="@$(SOURCE_DATE_EPOCH)") \
|
||||
-f $(KDIR_TMP)/$(IMAGE_PREFIX)-firmware.tgz -C $@-fw .
|
||||
endef
|
||||
|
||||
define Device/Default
|
||||
PROFILES := Default
|
||||
DEVICE_DTS = $$(SOC)-$(lastword $(subst _, ,$(1)))
|
||||
DEVICE_DTS_DIR := $(DTS_DIR)
|
||||
BOARD_NAME = $$(DEVICE_DTS)
|
||||
KERNEL_NAME := zImage
|
||||
KERNEL := kernel-bin | append-dtb | uImage none
|
||||
@ -93,7 +100,7 @@ DEVICE_VARS += BOOT_SCRIPT UBOOT
|
||||
|
||||
define Device/Default-arm64
|
||||
BOOT_SCRIPT := generic-arm64
|
||||
DTS_DIR := $(DTS_DIR)/marvell
|
||||
DEVICE_DTS_DIR := $(DTS_DIR)/marvell
|
||||
IMAGES := sdcard.img.gz
|
||||
IMAGE/sdcard.img.gz := boot-scr | boot-img-ext4 | sdcard-img-ext4 | gzip | append-metadata
|
||||
KERNEL_NAME := Image
|
||||
|
@ -60,11 +60,9 @@ define Device/methode_udpu
|
||||
DEVICE_MODEL := micro-DPU (uDPU)
|
||||
DEVICE_DTS := armada-3720-uDPU
|
||||
KERNEL_LOADADDR := 0x00080000
|
||||
KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(DTS_DIR)/$$(DEVICE_DTS).dtb
|
||||
KERNEL_INITRAMFS := kernel-bin | gzip | fit gzip $$(KDIR)/image-$$(DEVICE_DTS).dtb
|
||||
KERNEL_INITRAMFS_SUFFIX := .itb
|
||||
DEVICE_PACKAGES := f2fs-tools e2fsprogs fdisk ethtool kmod-usb2 kmod-usb3 \
|
||||
kmod-e100 kmod-e1000 kmod-e1000e kmod-igb kmod-ixgbevf \
|
||||
kmod-mdio-gpio kmod-switch-mvsw61xx kmod-i2c-pxa
|
||||
DEVICE_PACKAGES += f2fs-tools fdisk kmod-i2c-pxa
|
||||
IMAGE_NAME = $$(IMAGE_PREFIX)-$$(2)
|
||||
IMAGES := firmware.tgz
|
||||
IMAGE/firmware.tgz := boot-scr | boot-img-ext4 | uDPU-firmware | append-metadata
|
||||
|
@ -1,10 +0,0 @@
|
||||
--- a/arch/arm64/boot/dts/marvell/Makefile
|
||||
+++ b/arch/arm64/boot/dts/marvell/Makefile
|
||||
@@ -2,6 +2,7 @@
|
||||
# Mvebu SoC Family
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-db.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-espressobin.dtb
|
||||
+dtb-$(CONFIG_ARCH_MVEBU) += armada-3720-uDPU.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-7040-db.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-db.dtb
|
||||
dtb-$(CONFIG_ARCH_MVEBU) += armada-8040-mcbin.dtb
|
@ -611,6 +611,7 @@ define Device/netgear_ex2700
|
||||
DEVICE_VENDOR := NETGEAR
|
||||
DEVICE_MODEL := EX2700
|
||||
SUPPORTED_DEVICES += ex2700
|
||||
DEFAULT := n
|
||||
endef
|
||||
TARGET_DEVICES += netgear_ex2700
|
||||
|
||||
|
@ -0,0 +1,19 @@
|
||||
#!/bin/sh
|
||||
|
||||
upgrade_bootloader() {
|
||||
local diskdev
|
||||
|
||||
. /lib/upgrade/common.sh
|
||||
|
||||
if [ ! -f /boot/grub/upgraded ] && export_bootdevice && export_partdevice diskdev 0; then
|
||||
echo "(hd0) /dev/$diskdev" > /tmp/device.map
|
||||
/usr/sbin/grub-bios-setup \
|
||||
-m "/tmp/device.map" \
|
||||
-d "/boot/grub" \
|
||||
-r "hd0,msdos1" \
|
||||
"/dev/$diskdev" \
|
||||
&& touch /boot/grub/upgraded
|
||||
fi
|
||||
}
|
||||
|
||||
[ "$INITRAMFS" = "1" ] || boot_hook_add preinit_main upgrade_bootloader
|
@ -1,3 +1,5 @@
|
||||
RAMFS_COPY_BIN='grub-bios-setup'
|
||||
|
||||
platform_check_image() {
|
||||
local diskdev partdev diff
|
||||
[ "$#" -gt 1 ] && return 1
|
||||
@ -44,6 +46,27 @@ platform_copy_config() {
|
||||
fi
|
||||
}
|
||||
|
||||
platform_do_bootloader_upgrade() {
|
||||
local bootpart
|
||||
local diskdev="$1"
|
||||
|
||||
if export_partdevice bootpart 1; then
|
||||
mkdir -p /tmp/boot
|
||||
mount -o rw,noatime "/dev/$bootpart" /tmp/boot
|
||||
echo "(hd0) /dev/$diskdev" > /tmp/device.map
|
||||
|
||||
echo "Upgrading bootloader on /dev/$diskdev..."
|
||||
grub-bios-setup \
|
||||
-m "/tmp/device.map" \
|
||||
-d "/tmp/boot/boot/grub" \
|
||||
-r "hd0,msdos1" \
|
||||
"/dev/$diskdev" \
|
||||
&& touch /boot/grub/upgraded
|
||||
|
||||
umount /tmp/boot
|
||||
fi
|
||||
}
|
||||
|
||||
platform_do_upgrade() {
|
||||
local diskdev partdev diff
|
||||
|
||||
@ -92,4 +115,6 @@ platform_do_upgrade() {
|
||||
#copy partition uuid
|
||||
echo "Writing new UUID to /dev/$diskdev..."
|
||||
get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
|
||||
|
||||
platform_do_bootloader_upgrade "$diskdev"
|
||||
}
|
||||
|
@ -60,16 +60,17 @@ ifneq ($(CONFIG_GRUB_IMAGES),)
|
||||
|
||||
define Image/Build/grub2
|
||||
# left here because the image builder doesnt need these
|
||||
rm -fR $(KDIR)/root.grub $(KDIR)/grub2
|
||||
$(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2
|
||||
$(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz
|
||||
grub-mkimage \
|
||||
-p /boot/grub \
|
||||
-d $(STAGING_DIR_HOST)/lib/grub/i386-pc \
|
||||
-o $(KDIR)/grub2/core.img \
|
||||
-o $(KDIR)/root.grub/boot/grub/core.img \
|
||||
-O i386-pc \
|
||||
-c ./grub-early.cfg \
|
||||
$(GRUB2_MODULES)
|
||||
$(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img $(KDIR)/grub2/
|
||||
$(CP) $(STAGING_DIR_HOST)/lib/grub/i386-pc/*.img $(KDIR)/root.grub/boot/grub/
|
||||
echo '(hd0) $(BIN_DIR)/$(IMG_COMBINED)-$(1).img' > $(KDIR)/grub2/device.map
|
||||
sed \
|
||||
-e 's#@SERIAL_CONFIG@#$(strip $(GRUB_SERIAL_CONFIG))#g' \
|
||||
@ -79,6 +80,7 @@ ifneq ($(CONFIG_GRUB_IMAGES),)
|
||||
-e 's#@TITLE@#$(GRUB_TITLE)#g' \
|
||||
./grub.cfg > $(KDIR)/root.grub/boot/grub/grub.cfg
|
||||
-$(CP) $(STAGING_DIR_ROOT)/boot/. $(KDIR)/root.grub/boot/
|
||||
grub-bios-setup -V | cut -d' ' -f3 > $(KDIR)/root.grub/boot/grub/version
|
||||
PADDING="1" SIGNATURE="$(IMG_PART_SIGNATURE)" PATH="$(TARGET_PATH)" $(SCRIPT_DIR)/gen_image_generic.sh \
|
||||
$(BIN_DIR)/$(IMG_COMBINED)-$(1).img \
|
||||
$(CONFIG_TARGET_KERNEL_PARTSIZE) $(KDIR)/root.grub \
|
||||
@ -86,13 +88,14 @@ ifneq ($(CONFIG_GRUB_IMAGES),)
|
||||
256
|
||||
grub-bios-setup \
|
||||
--device-map="$(KDIR)/grub2/device.map" \
|
||||
-d "$(KDIR)/grub2" \
|
||||
-d "$(KDIR)/root.grub/boot/grub" \
|
||||
-r "hd0,msdos1" \
|
||||
"$(BIN_DIR)/$(IMG_COMBINED)-$(1).img"
|
||||
endef
|
||||
endif
|
||||
|
||||
define Image/Build/iso
|
||||
rm -fR $(KDIR)/root.grub $(KDIR)/grub2
|
||||
$(INSTALL_DIR) $(KDIR)/root.grub/boot/grub $(KDIR)/grub2
|
||||
$(CP) $(KDIR)/bzImage $(KDIR)/root.grub/boot/vmlinuz
|
||||
grub-mkimage \
|
||||
|
@ -22,7 +22,7 @@ ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_PACKAGE_b43legacy-firmwar
|
||||
endif
|
||||
|
||||
tools-$(BUILD_TOOLCHAIN) += gmp mpfr mpc libelf expat
|
||||
tools-y += m4 libtool autoconf automake flex bison pkg-config mklibs zlib
|
||||
tools-y += m4 libtool autoconf automake flex bison pkgconf mklibs zlib
|
||||
tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage
|
||||
tools-y += firmware-utils patch-image quilt padjffs2
|
||||
tools-y += mm-macros missing-macros cmake bc findutils gengetopt patchelf
|
||||
@ -50,7 +50,7 @@ $(curdir)/squashfs/compile := $(curdir)/lzma-old/compile
|
||||
$(curdir)/squashfskit4/compile := $(curdir)/xz/compile $(curdir)/zlib/compile
|
||||
$(curdir)/quilt/compile := $(curdir)/autoconf/compile $(curdir)/findutils/compile
|
||||
$(curdir)/autoconf/compile := $(curdir)/m4/compile
|
||||
$(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkg-config/compile $(curdir)/xz/compile
|
||||
$(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkgconf/compile $(curdir)/xz/compile
|
||||
$(curdir)/gmp/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/mpc/compile := $(curdir)/mpfr/compile $(curdir)/gmp/compile
|
||||
$(curdir)/mpfr/compile := $(curdir)/gmp/compile
|
||||
@ -71,7 +71,7 @@ $(curdir)/findutils/compile := $(curdir)/bison/compile
|
||||
$(curdir)/gengetopt/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/patchelf/compile := $(curdir)/libtool/compile
|
||||
$(curdir)/dosfstools/compile := $(curdir)/autoconf/compile $(curdir)/automake/compile
|
||||
$(curdir)/libressl/compile := $(curdir)/pkg-config/compile
|
||||
$(curdir)/libressl/compile := $(curdir)/pkgconf/compile
|
||||
$(curdir)/mkimage/compile += $(curdir)/libressl/compile
|
||||
$(curdir)/firmware-utils/compile += $(curdir)/libressl/compile $(curdir)/zlib/compile
|
||||
$(curdir)/cmake/compile += $(curdir)/libressl/compile
|
||||
@ -140,7 +140,7 @@ $(STAGING_DIR_HOST)/.prepared: $(TMP_DIR)/.build
|
||||
mkdir -p $(BUILD_DIR_HOST)/stamp $(STAGING_DIR_HOST)/include/sys
|
||||
$(INSTALL_DATA) $(TOPDIR)/tools/include/*.h $(STAGING_DIR_HOST)/include/
|
||||
$(INSTALL_DATA) $(TOPDIR)/tools/include/sys/*.h $(STAGING_DIR_HOST)/include/sys/
|
||||
ln -sf lib $(STAGING_DIR_HOST)/lib64
|
||||
ln -snf lib $(STAGING_DIR_HOST)/lib64
|
||||
touch $@
|
||||
|
||||
endif
|
||||
|
@ -317,6 +317,16 @@ int build_image()
|
||||
map_file(&kernel);
|
||||
map_file(&rootfs);
|
||||
|
||||
/* As ZyXEL Web-GUI only accept images with a rootfs equal or larger than the first firmware shipped
|
||||
* for the device, we need to pad rootfs partition to this size. To perform further calculations, we
|
||||
* decide the size of this part here. In case the rootfs we want to integrate in our image is larger,
|
||||
* take it's size, otherwise the supplied size.
|
||||
*
|
||||
* Be careful! We rely on assertion of correct size to be performed beforehand. It is unknown if images
|
||||
* with a to large rootfs are accepted or not.
|
||||
*/
|
||||
rootfs_out.size = rootfs_size < rootfs.size ? rootfs.size : rootfs_size;
|
||||
|
||||
/*
|
||||
* Allocate memory and copy input rootfs for temporary output rootfs.
|
||||
* This is important as we have to generate the rootfs checksum over the
|
||||
@ -451,14 +461,5 @@ int main(int argc, char *argv[])
|
||||
if (ret)
|
||||
usage(EXIT_FAILURE);
|
||||
|
||||
/* As ZyXEL Web-GUI only accept images with a rootfs equal or larger than the first firmware shipped
|
||||
* for the device, we need to pad rootfs partition to this size. To perform further calculations, we
|
||||
* decide the size of this part here. In case the rootfs we want to integrate in our image is larger,
|
||||
* take it's size, otherwise the supplied size.
|
||||
*
|
||||
* Be careful! We rely on assertion of correct size to be performed beforehand. It is unknown if images
|
||||
* with a to large rootfs are accepted or not.
|
||||
*/
|
||||
rootfs_out.size = rootfs_size < rootfs.size ? rootfs.size : rootfs_size;
|
||||
return build_image();
|
||||
}
|
||||
|
@ -1,3 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
pkg-config.real --define-variable=prefix=${STAGING_PREFIX} --define-variable=exec_prefix=${STAGING_PREFIX} --define-variable=bindir=${STAGING_PREFIX}/bin $@
|
@ -6,12 +6,12 @@
|
||||
#
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=pkg-config
|
||||
PKG_VERSION:=0.29.2
|
||||
PKG_NAME:=pkgconf
|
||||
PKG_VERSION:=1.6.3
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
|
||||
PKG_SOURCE_URL:=https://pkgconfig.freedesktop.org/releases/
|
||||
PKG_HASH:=6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
|
||||
PKG_SOURCE_URL:=https://distfiles.dereferenced.org/pkgconf
|
||||
PKG_HASH:=61f0b31b0d5ea0e862b454a80c170f57bad47879c0c42bd8de89200ff62ea210
|
||||
|
||||
HOST_BUILD_PARALLEL:=1
|
||||
|
||||
@ -19,15 +19,9 @@ include $(INCLUDE_DIR)/host-build.mk
|
||||
|
||||
unexport PKG_CONFIG
|
||||
|
||||
HOST_CONFIGURE_ARGS += --with-internal-glib
|
||||
|
||||
ifeq ($(HOST_OS),Darwin)
|
||||
HOST_LDFLAGS += -framework CoreFoundation -framework Carbon
|
||||
endif
|
||||
|
||||
define Host/Install
|
||||
$(MAKE) -C $(HOST_BUILD_DIR) install
|
||||
mv $(STAGING_DIR_HOST)/bin/pkg-config $(STAGING_DIR_HOST)/bin/pkg-config.real
|
||||
mv $(STAGING_DIR_HOST)/bin/pkgconf $(STAGING_DIR_HOST)/bin/pkg-config.real
|
||||
$(INSTALL_BIN) ./files/pkg-config $(STAGING_DIR_HOST)/bin/pkg-config
|
||||
endef
|
||||
|
6
tools/pkgconf/files/pkg-config
Executable file
6
tools/pkgconf/files/pkg-config
Executable file
@ -0,0 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
pkg-config.real \
|
||||
--define-variable=prefix="${STAGING_PREFIX}" \
|
||||
--define-variable=exec_prefix="${STAGING_PREFIX}" \
|
||||
--define-variable=bindir="${STAGING_PREFIX}/bin" "$@"
|
@ -0,0 +1,36 @@
|
||||
From 62bbd3b664d4b03011a4b382ed20353a91c30406 Mon Sep 17 00:00:00 2001
|
||||
From: Ariadne Conill <ariadne@dereferenced.org>
|
||||
Date: Tue, 21 Jan 2020 10:32:36 -0600
|
||||
Subject: [PATCH] cli: remove --version to --modversion remapping
|
||||
|
||||
This has been a source of frequent complaints, so we drop it.
|
||||
Resolves: https://todo.sr.ht/~kaniini/pkgconf/6
|
||||
---
|
||||
cli/main.c | 14 ++------------
|
||||
1 file changed, 2 insertions(+), 12 deletions(-)
|
||||
|
||||
diff --git a/cli/main.c b/cli/main.c
|
||||
index 563ec8f0cfcd..fc698a4f9191 100644
|
||||
--- a/cli/main.c
|
||||
+++ b/cli/main.c
|
||||
@@ -1005,18 +1005,8 @@ main(int argc, char *argv[])
|
||||
|
||||
if ((want_flags & PKG_VERSION) == PKG_VERSION)
|
||||
{
|
||||
- if (argc > 2)
|
||||
- {
|
||||
- fprintf(stderr, "%s: --version specified with other options or module names, assuming --modversion.\n", argv[0]);
|
||||
-
|
||||
- want_flags &= ~PKG_VERSION;
|
||||
- want_flags |= PKG_MODVERSION;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- version();
|
||||
- return EXIT_SUCCESS;
|
||||
- }
|
||||
+ version();
|
||||
+ return EXIT_SUCCESS;
|
||||
}
|
||||
|
||||
if ((want_flags & PKG_HELP) == PKG_HELP)
|
Loading…
x
Reference in New Issue
Block a user