diff --git a/arch/arm/src/cxd56xx/cxd56_cisif.c b/arch/arm/src/cxd56xx/cxd56_cisif.c index d863369a3b..5a8bffd4cc 100644 --- a/arch/arm/src/cxd56xx/cxd56_cisif.c +++ b/arch/arm/src/cxd56xx/cxd56_cisif.c @@ -37,6 +37,8 @@ #include #include #include "arm_internal.h" + +#include "cxd56_pinconfig.h" #include "cxd56_clock.h" #include "hardware/cxd56_cisif.h" @@ -772,6 +774,8 @@ static int cxd56_cisif_init(void) return -EPERM; } + CXD56_PIN_CONFIGS(PINCONFS_IS); + /* enable CISIF clock */ cxd56_img_cisif_clock_enable(); @@ -825,6 +829,8 @@ static int cxd56_cisif_uninit(void) cxd56_img_cisif_clock_disable(); + CXD56_PIN_CONFIGS(PINCONFS_IS_GPIO); + g_state = STATE_STANDBY; return OK; } diff --git a/boards/arm/cxd56xx/common/src/cxd56_i2cdev.c b/boards/arm/cxd56xx/common/src/cxd56_i2cdev.c index c54d02de2f..521acd8c24 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_i2cdev.c +++ b/boards/arm/cxd56xx/common/src/cxd56_i2cdev.c @@ -65,5 +65,7 @@ int board_i2cdev_initialize(int port) cxd56_i2cbus_uninitialize(i2c); } + cxd56_i2cbus_uninitialize(i2c); + return ret; } diff --git a/boards/arm/cxd56xx/common/src/cxd56_isx012.c b/boards/arm/cxd56xx/common/src/cxd56_isx012.c index b013455162..553b3fcb95 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_isx012.c +++ b/boards/arm/cxd56xx/common/src/cxd56_isx012.c @@ -58,12 +58,6 @@ #define POWER_CHECK_RETRY (10) -/**************************************************************************** - * Private Data - ****************************************************************************/ - -struct i2c_master_s *i2c; - /**************************************************************************** * Public Functions ****************************************************************************/ @@ -160,10 +154,8 @@ void board_isx012_release_sleep(void) int isx012_register(struct i2c_master_s *i2c); int isx012_unregister(void); -int board_isx012_initialize(int i2c_bus_num) +struct i2c_master_s *board_isx012_initialize(void) { - int ret; - _info("Initializing ISX012...\n"); #ifdef IMAGER_ALERT @@ -178,22 +170,10 @@ int board_isx012_initialize(int i2c_bus_num) /* Initialize i2c device */ - i2c = cxd56_i2cbus_initialize(i2c_bus_num); - if (!i2c) - { - return -ENODEV; - } - - ret = isx012_initialize(i2c); - if (ret < 0) - { - _err("Failed to initialize ISX012.\n"); - } - - return ret; + return cxd56_i2cbus_initialize(IMAGER_I2C); } -int board_isx012_uninitialize(void) +int board_isx012_uninitialize(struct i2c_master_s *i2c) { int ret; diff --git a/boards/arm/cxd56xx/spresense/include/cxd56_isx012.h b/boards/arm/cxd56xx/spresense/include/cxd56_isx012.h index a804a1e256..a108d0d185 100644 --- a/boards/arm/cxd56xx/spresense/include/cxd56_isx012.h +++ b/boards/arm/cxd56xx/spresense/include/cxd56_isx012.h @@ -28,6 +28,7 @@ #include #include #include +#include /**************************************************************************** * Public Types @@ -120,7 +121,7 @@ void board_isx012_release_sleep(void); * ****************************************************************************/ -int board_isx012_initialize(int i2c_bus_num); +struct i2c_master_s *board_isx012_initialize(void); /**************************************************************************** * Name: board_isx012_uninitialize @@ -130,7 +131,7 @@ int board_isx012_initialize(int i2c_bus_num); * ****************************************************************************/ -int board_isx012_uninitialize(void); +int board_isx012_uninitialize(struct i2c_master_s *i2c); #undef EXTERN #if defined(__cplusplus) diff --git a/boards/arm/cxd56xx/spresense/src/cxd56_bringup.c b/boards/arm/cxd56xx/spresense/src/cxd56_bringup.c index 780682cce6..e38a400adb 100644 --- a/boards/arm/cxd56xx/spresense/src/cxd56_bringup.c +++ b/boards/arm/cxd56xx/spresense/src/cxd56_bringup.c @@ -373,7 +373,7 @@ int cxd56_bringup(void) #endif #ifdef CONFIG_VIDEO_ISX012 - ret = board_isx012_initialize(IMAGER_I2C); + ret = isx012_initialize(); if (ret < 0) { _err("ERROR: Failed to initialize ISX012 board. %d\n", errno); diff --git a/drivers/video/isx012.c b/drivers/video/isx012.c index e644954906..ea4658e8f1 100644 --- a/drivers/video/isx012.c +++ b/drivers/video/isx012.c @@ -1241,6 +1241,10 @@ static int isx012_init(void) FAR struct isx012_dev_s *priv = &g_isx012_private; int ret = 0; + priv->i2c = board_isx012_initialize(); + priv->i2c_addr = ISX012_I2C_SLV_ADDR; + priv->i2c_freq = I2CFREQ_STANDARD; + ret = board_isx012_power_on(); if (ret < 0) { @@ -1280,6 +1284,8 @@ static int isx012_uninit(void) return ret; } + board_isx012_uninitialize(priv->i2c); + priv->i2c_freq = I2CFREQ_STANDARD; priv->state = STATE_ISX012_POWEROFF; @@ -2877,16 +2883,10 @@ static int isx012_set_shd(FAR isx012_dev_t *priv) * Public Functions ****************************************************************************/ -int isx012_initialize(FAR struct i2c_master_s *i2c) +int isx012_initialize(void) { FAR struct isx012_dev_s *priv = &g_isx012_private; - /* Save i2c information */ - - priv->i2c = i2c; - priv->i2c_addr = ISX012_I2C_SLV_ADDR; - priv->i2c_freq = I2CFREQ_STANDARD; - /* Regiser image sensor operations variable */ imgsensor_register(&g_isx012_ops); diff --git a/include/nuttx/video/isx012.h b/include/nuttx/video/isx012.h index 7130a4035b..faddc56532 100644 --- a/include/nuttx/video/isx012.h +++ b/include/nuttx/video/isx012.h @@ -25,6 +25,8 @@ * Included Files ****************************************************************************/ +#include + /**************************************************************************** * Pre-processor Definitions ****************************************************************************/ @@ -49,7 +51,7 @@ extern "C" * Public Function Prototypes ****************************************************************************/ -int isx012_initialize(FAR struct i2c_master_s *i2c); +int isx012_initialize(void); int isx012_uninitialize(void); #undef EXTERN