diff --git a/boards/arm64/a64/pinephone/configs/sensor/defconfig b/boards/arm64/a64/pinephone/configs/sensor/defconfig new file mode 100644 index 00000000000..a416f9f0296 --- /dev/null +++ b/boards/arm64/a64/pinephone/configs/sensor/defconfig @@ -0,0 +1,73 @@ +# +# This file is autogenerated: PLEASE DO NOT EDIT IT. +# +# You can use "make menuconfig" to make any modifications to the installed .config file. +# You can then do "make savedefconfig" to generate a new defconfig file that includes your +# modifications. +# +CONFIG_A64_RSB=y +CONFIG_A64_TWI1=y +CONFIG_A64_UART=y +CONFIG_ARCH="arm64" +CONFIG_ARCH_ARM64=y +CONFIG_ARCH_BOARD="pinephone" +CONFIG_ARCH_BOARD_PINEPHONE=y +CONFIG_ARCH_CHIP="a64" +CONFIG_ARCH_CHIP_A64=y +CONFIG_ARCH_INTERRUPTSTACK=4096 +CONFIG_BOARDCTL_RESET=y +CONFIG_BOARD_LOOPSPERMSEC=116524 +CONFIG_BUILTIN=y +CONFIG_DEBUG_ASSERTIONS=y +CONFIG_DEBUG_ERROR=y +CONFIG_DEBUG_FEATURES=y +CONFIG_DEBUG_FULLOPT=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUG_SCHED=y +CONFIG_DEBUG_SCHED_ERROR=y +CONFIG_DEBUG_SCHED_WARN=y +CONFIG_DEBUG_SYMBOLS=y +CONFIG_DEBUG_WARN=y +CONFIG_DEFAULT_TASK_STACKSIZE=8192 +CONFIG_DEV_ZERO=y +CONFIG_EXAMPLES_HELLO=y +CONFIG_EXAMPLES_LEDS=y +CONFIG_EXPERIMENTAL=y +CONFIG_FS_PROCFS=y +CONFIG_FS_ROMFS=y +CONFIG_HAVE_CXX=y +CONFIG_HAVE_CXXINITIALIZE=y +CONFIG_IDLETHREAD_STACKSIZE=8192 +CONFIG_INIT_ENTRYPOINT="nsh_main" +CONFIG_INTELHEX_BINARY=y +CONFIG_MPU60X0_I2C=y +CONFIG_NSH_ARCHINIT=y +CONFIG_NSH_BUILTIN_APPS=y +CONFIG_NSH_FILEIOSIZE=512 +CONFIG_NSH_READLINE=y +CONFIG_NSH_ROMFSETC=y +CONFIG_PREALLOC_TIMERS=4 +CONFIG_PTHREAD_STACK_MIN=8192 +CONFIG_RAMLOG=y +CONFIG_RAM_SIZE=134217728 +CONFIG_RAM_START=0x40000000 +CONFIG_RAW_BINARY=y +CONFIG_READLINE_CMD_HISTORY=y +CONFIG_RR_INTERVAL=200 +CONFIG_SCHED_HPWORK=y +CONFIG_SCHED_HPWORKPRIORITY=192 +CONFIG_SENSORS=y +CONFIG_SENSORS_MPU60X0=y +CONFIG_SPINLOCK=y +CONFIG_STACK_COLORATION=y +CONFIG_START_MONTH=11 +CONFIG_START_YEAR=2022 +CONFIG_SYMTAB_ORDEREDBYNAME=y +CONFIG_SYSTEM_NSH=y +CONFIG_SYSTEM_SYSTEM=y +CONFIG_TESTING_GETPRIME=y +CONFIG_TESTING_OSTEST=y +CONFIG_UART1_SERIAL_CONSOLE=y +CONFIG_USEC_PER_TICK=1000 +CONFIG_USERLED=y +CONFIG_USERLED_LOWER=y diff --git a/boards/arm64/a64/pinephone/src/Makefile b/boards/arm64/a64/pinephone/src/Makefile index 3c9fc78abee..4b3911798d3 100644 --- a/boards/arm64/a64/pinephone/src/Makefile +++ b/boards/arm64/a64/pinephone/src/Makefile @@ -20,7 +20,7 @@ include $(TOPDIR)/Make.defs -CSRCS = pinephone_boardinit.c pinephone_bringup.c +CSRCS = pinephone_boardinit.c pinephone_bringup.c pinephone_pmic.c ifeq ($(CONFIG_BOARDCTL),y) CSRCS += pinephone_appinit.c @@ -38,7 +38,7 @@ CSRCS += pinephone_userleds.c endif ifeq ($(CONFIG_VIDEO_FB),y) -CSRCS += pinephone_display.c pinephone_lcd.c pinephone_pmic.c +CSRCS += pinephone_display.c pinephone_lcd.c endif include $(TOPDIR)/boards/Board.mk diff --git a/boards/arm64/a64/pinephone/src/pinephone_bringup.c b/boards/arm64/a64/pinephone/src/pinephone_bringup.c index 56029a21760..4694343db77 100644 --- a/boards/arm64/a64/pinephone/src/pinephone_bringup.c +++ b/boards/arm64/a64/pinephone/src/pinephone_bringup.c @@ -25,6 +25,13 @@ #include #include #include +#ifdef CONFIG_I2C +# include +#endif +#include +#ifdef CONFIG_MPU60X0_I2C +# include +#endif #ifdef CONFIG_FS_PROCFS # include @@ -39,7 +46,9 @@ # include "pinephone_display.h" #endif +#include "a64_twi.h" #include "pinephone.h" +#include "pinephone_pmic.h" /**************************************************************************** * Public Functions @@ -56,6 +65,13 @@ int pinephone_bringup(void) { int ret; +#ifdef CONFIG_I2C + int i2c_bus; + struct i2c_master_s *i2c; +#ifdef CONFIG_MPU60X0_I2C + struct mpu_config_s *mpu_config; +#endif +#endif #ifdef CONFIG_USERLED /* Register the LED driver */ @@ -91,6 +107,53 @@ int pinephone_bringup(void) pinephone_display_test_pattern(); #endif +#if defined(CONFIG_I2C) && defined(CONFIG_A64_TWI1) + i2c_bus = 1; + i2c = a64_i2cbus_initialize(i2c_bus); + if (i2c == NULL) + { + syslog(LOG_ERR, "ERROR: Failed to get I2C%d interface\n", i2c_bus); + } + else + { +#if defined(CONFIG_SYSTEM_I2CTOOL) + ret = i2c_register(i2c, i2c_bus); + if (ret < 0) + { + syslog(LOG_ERR, "ERROR: Failed to register I2C%d driver: %d\n", + i2c_bus, ret); + } +#endif + +#ifdef CONFIG_MPU60X0_I2C + /* Init PMIC */ + + ret = pinephone_pmic_init(); + if (ret < 0) + { + syslog(LOG_ERR, "Init PMIC failed: %d\n", ret); + return ret; + } + + /* Wait 15 milliseconds for power supply and power-on init */ + + up_mdelay(15); + + mpu_config = kmm_zalloc(sizeof(struct mpu_config_s)); + if (mpu_config == NULL) + { + syslog(LOG_ERR, "ERROR: Failed to allocate mpu60x0 driver\n"); + } + else + { + mpu_config->i2c = i2c; + mpu_config->addr = 0x68; + mpu60x0_register("/dev/imu0", mpu_config); + } +#endif + } +#endif + UNUSED(ret); return OK; }