int rp23xx_common_bringup()

in boards/arm/rp23xx/common/src/rp23xx_common_bringup.c [73:524]


int rp23xx_common_bringup(void)
{
  int ret = 0;

#ifdef CONFIG_RP23XX_I2C_DRIVER
  #ifdef CONFIG_RP23XX_I2C0
  ret = board_i2cdev_initialize(0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize I2C0.\n");
    }
  #endif

  #ifdef CONFIG_RP23XX_I2C1
  ret = board_i2cdev_initialize(1);
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize I2C1.\n");
    }
  #endif
#endif

#ifdef CONFIG_RP23XX_SPI_DRIVER
  #ifdef CONFIG_RP23XX_SPI0
  ret = board_spidev_initialize(0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize SPI0.\n");
    }
  #endif

  #ifdef CONFIG_RP23XX_SPI1
  ret = board_spidev_initialize(1);
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize SPI1.\n");
    }
  #endif
#endif

#ifdef CONFIG_RP23XX_PWM
#  ifdef CONFIG_RP23XX_PWM0
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(0,
                                 CONFIG_RP23XX_PWM0A_GPIO,
                                 CONFIG_RP23XX_PWM0B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM0A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM0B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM0_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    else
  ret = rp23xx_pwmdev_initialize(0,
                                 CONFIG_RP23XX_PWM0A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM0A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM0_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM0.\n");
    }
#  endif

#  ifdef CONFIG_RP23XX_PWM1
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(1,
                                 CONFIG_RP23XX_PWM1A_GPIO,
                                 CONFIG_RP23XX_PWM1B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM1A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM1B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM1_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    else
  ret = rp23xx_pwmdev_initialize(1,
                                 CONFIG_RP23XX_PWM1A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM1A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM1_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM1.\n");
    }
#  endif

#  ifdef CONFIG_RP23XX_PWM2
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(2,
                                 CONFIG_RP23XX_PWM2A_GPIO,
                                 CONFIG_RP23XX_PWM2B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM2A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM2B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM2_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    else
  ret = rp23xx_pwmdev_initialize(2,
                                 CONFIG_RP23XX_PWM2A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM2A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM2_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM2.\n");
    }
#  endif

#  ifdef CONFIG_RP23XX_PWM3
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(3,
                                 CONFIG_RP23XX_PWM3A_GPIO,
                                 CONFIG_RP23XX_PWM3B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM3A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM3B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM3_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    else
  ret = rp23xx_pwmdev_initialize(3,
                                 CONFIG_RP23XX_PWM3A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM3A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM3_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM3.\n");
    }
#  endif

#  ifdef CONFIG_RP23XX_PWM4
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(4,
                                 CONFIG_RP23XX_PWM4A_GPIO,
                                 CONFIG_RP23XX_PWM4B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM4A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM4B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM4_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    else
  ret = rp23xx_pwmdev_initialize(4,
                                 CONFIG_RP23XX_PWM4A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM4A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM4_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM4.\n");
    }
#  endif

#  ifdef CONFIG_RP23XX_PWM5
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(5,
                                 CONFIG_RP23XX_PWM5A_GPIO,
                                 CONFIG_RP23XX_PWM5B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM5A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM5B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM5_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#  else
  ret = rp23xx_pwmdev_initialize(5,
                                 CONFIG_RP23XX_PWM5A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM5A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM5_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#  endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM5.\n");
    }
#  endif

#  ifdef CONFIG_RP23XX_PWM6
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(6,
                                 CONFIG_RP23XX_PWM6A_GPIO,
                                 CONFIG_RP23XX_PWM6B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM6A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM6B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM6_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    else
  ret = rp23xx_pwmdev_initialize(6,
                                 CONFIG_RP23XX_PWM6A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM6A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM6_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM6.\n");
    }
#  endif

#  ifdef CONFIG_RP23XX_PWM7
#    if defined(CONFIG_PWM_NCHANNELS) && CONFIG_PWM_NCHANNELS == 2
  ret = rp23xx_pwmdev_initialize(7,
                                 CONFIG_RP23XX_PWM7A_GPIO,
                                 CONFIG_RP23XX_PWM7B_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM7A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM7B_INVERT
                                  | RP23XX_PWM_CSR_B_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM7_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    else
  ret = rp23xx_pwmdev_initialize(7,
                                 CONFIG_RP23XX_PWM7A_GPIO,
                                 (0
#      ifdef CONFIG_RP23XX_PWM7A_INVERT
                                  | RP23XX_PWM_CSR_A_INV
#      endif
#      ifdef CONFIG_RP23XX_PWM7_PHASE_CORRECT
                                  | RP23XX_PWM_CSR_PH_CORRECT
#      endif
                                 ));
#    endif
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize PWM7.\n");
    }
#  endif
#endif

#ifdef CONFIG_RP23XX_SPISD
  /* Mount the SPI-based MMC/SD block driver */

  ret = board_spisd_initialize(0, CONFIG_RP23XX_SPISD_SPI_CH);
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize SPI device to MMC/SD: %d\n",
           ret);
    }
#endif

#ifdef CONFIG_FS_PROCFS
  /* Mount the procfs file system */

  ret = nx_mount(NULL, "/proc", "procfs", 0, NULL);
  if (ret < 0)
    {
      serr("ERROR: Failed to mount procfs at %s: %d\n", "/proc", ret);
    }
#endif

#ifdef CONFIG_RP23XX_I2S
  ret = board_i2sdev_initialize(0);
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize I2S.\n");
    }
#endif

#ifdef CONFIG_DEV_GPIO
  ret = rp23xx_dev_gpio_init();
  if (ret < 0)
    {
      syslog(LOG_ERR, "Failed to initialize GPIO Driver: %d\n", ret);
    }
#endif

  /* Initialize ADC */

#if defined(CONFIG_ADC) && defined(CONFIG_RP23XX_ADC)

#  ifdef CONFIG_RP23XX_ADC_CHANNEL0
#    define ADC_0 true
#  else
#    define ADC_0 false
#  endif

#  ifdef CONFIG_RP23XX_ADC_CHANNEL1
#    define ADC_1 true
#  else
#    define ADC_1 false
#  endif

#  ifdef CONFIG_RP23XX_ADC_CHANNEL2
#    define ADC_2 true
#  else
#    define ADC_2 false
#  endif

#  ifdef CONFIG_RP23XX_ADC_CHANNEL3
#    define ADC_3 true
#  else
#    define ADC_3 false
#  endif

#  ifdef CONFIG_RP23XX_ADC_TEMPERATURE
#    define ADC_TEMP true
#  else
#    define ADC_TEMP false
#  endif

  ret = rp23xx_adc_setup("/dev/adc0", ADC_0, ADC_1, ADC_2, ADC_3, ADC_TEMP);
  if (ret != OK)
    {
      syslog(LOG_ERR, "Failed to initialize ADC Driver: %d\n", ret);
    }

#endif /* defined(CONFIG_ADC) && defined(CONFIG_RP23XX_ADC) */

  /* Initialize board neo-pixel */

#if defined(CONFIG_RP23XX_BOARD_HAS_WS2812) && defined(CONFIG_WS2812)

  if (rp23xx_ws2812_setup("/dev/leds0",
                          CONFIG_RP23XX_WS2812_GPIO_PIN,
                          CONFIG_RP23XX_WS2812_PWR_GPIO,
                          CONFIG_WS2812_LED_COUNT,
                          HAS_WHITE) == NULL)
    {
      syslog(LOG_ERR, "Failed to initialize WS2812: %d\n", errno);
    }
#endif

#ifdef CONFIG_WATCHDOG
  /* Configure watchdog timer */

  ret = rp23xx_wdt_init();
  if (ret < 0)
    {
      syslog(LOG_ERR,
             "ERROR: Failed to initialize watchdog drivers: %d\n",
             ret);
    }
#endif

#if defined(CONFIG_RP23XX_ROMFS_ROMDISK_DEVNAME)
  /* Register the ROM disk */

  ret = romdisk_register(CONFIG_RP23XX_ROMFS_ROMDISK_MINOR,
                         rp23xx_romfs_img,
                         NSECTORS(rp23xx_romfs_img_len),
                         CONFIG_RP23XX_ROMFS_ROMDISK_SECTSIZE);
  if (ret < 0)
    {
      syslog(LOG_ERR, "ERROR: romdisk_register failed: %d\n", -ret);
    }
  else
    {
      /* Mount the file system */

      ret = nx_mount(CONFIG_RP23XX_ROMFS_ROMDISK_DEVNAME,
                     CONFIG_RP23XX_ROMFS_MOUNT_MOUNTPOINT,
                     "romfs",
                     MS_RDONLY,
                     NULL);
      if (ret < 0)
        {
          syslog(LOG_ERR,
                 "ERROR: nx_mount(%s,%s,romfs) failed: %d\n",
                 CONFIG_RP23XX_ROMFS_ROMDISK_DEVNAME,
                 CONFIG_RP23XX_ROMFS_MOUNT_MOUNTPOINT,
                 ret);
        }
    }

#endif
  return ret;
}