From 82d73c21561866231792a8d6e99a1e5d900e2fd8 Mon Sep 17 00:00:00 2001 From: Gregory Nutt Date: Mon, 28 Jul 2014 16:34:19 -0600 Subject: SAMA5D4-EK: Add logic to disable the faulty PMIC. This must be done with JP23 open. It is perfomed only from the DRAMBOOT loader --- nuttx/configs/sama5d4-ek/src/Makefile | 4 + nuttx/configs/sama5d4-ek/src/dram_main.c | 16 +++- nuttx/configs/sama5d4-ek/src/sam_pmic.c | 128 ++++++++++++++++++++++++++++++ nuttx/configs/sama5d4-ek/src/sama5d4-ek.h | 32 +++++++- 4 files changed, 176 insertions(+), 4 deletions(-) create mode 100644 nuttx/configs/sama5d4-ek/src/sam_pmic.c (limited to 'nuttx/configs') diff --git a/nuttx/configs/sama5d4-ek/src/Makefile b/nuttx/configs/sama5d4-ek/src/Makefile index 821edb49a..46e296961 100644 --- a/nuttx/configs/sama5d4-ek/src/Makefile +++ b/nuttx/configs/sama5d4-ek/src/Makefile @@ -84,6 +84,10 @@ endif endif endif +ifeq ($(CONFIG_SAMA5_TWI0),y) +CSRCS += sam_pmic.c +endif + ifeq ($(CONFIG_AUDIO_NULL),y) CSRCS += sam_audio_null.c endif diff --git a/nuttx/configs/sama5d4-ek/src/dram_main.c b/nuttx/configs/sama5d4-ek/src/dram_main.c index 4f2868094..291a07050 100644 --- a/nuttx/configs/sama5d4-ek/src/dram_main.c +++ b/nuttx/configs/sama5d4-ek/src/dram_main.c @@ -93,13 +93,25 @@ typedef void (*dram_entry_t)(void); int dram_main(int argc, char *argv) { - int ret; - /* Here we have a in memory value we can change in the debugger * to begin booting in NOR Flash */ static volatile uint32_t wait = DRAM_BOOT_MODE; + int ret; + + /* Disable the PMC. This is necessary on the SAMA5D4-MB Rev C. board. On + * that board, the PMIC can lock up the I2C bus. The work around is + * difficult: + * + * 1. Open JP23 (disabling the WM8904 data line) + * 2. Execute DRAMBOOT. The PMIC will be disabled while JP23 is closed. + * 3. At the prompt to "Send the Intel HEX file now", close JP23 + * 4. Send the NuttX file. When NuttX starts, the WM8904 is initialized, + * JP23 will be closed and the PMIC will be initialized. + */ + + sam_pmic_initialize() /* DRAM was already initialized at boot time, so we are ready to load the * Intel HEX stream into DRAM. diff --git a/nuttx/configs/sama5d4-ek/src/sam_pmic.c b/nuttx/configs/sama5d4-ek/src/sam_pmic.c new file mode 100644 index 000000000..c74220a0c --- /dev/null +++ b/nuttx/configs/sama5d4-ek/src/sam_pmic.c @@ -0,0 +1,128 @@ +/************************************************************************************ + * configs/sama5d4-ek/src/sam_pmic.c + * + * Copyright (C) 2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * 3. Neither the name NuttX nor the names of its contributors may be + * used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED + * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN + * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + ************************************************************************************/ + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include + +#include +#include +#include +#include +#include + +#include + +#include + +#include "up_arch.h" +#include "sam_twi.h" + +#include "sama5d4-ek.h" + +#ifdef HAVE_PMIC + +/**************************************************************************** + * Pre-Processor Definitions + ****************************************************************************/ + +/**************************************************************************** + * Private Types + ****************************************************************************/ + +/**************************************************************************** + * Private Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Private Functions + ****************************************************************************/ + +/**************************************************************************** + * Public Functions + ****************************************************************************/ + +/**************************************************************************** + * Name: sam_pmic_initialize + * + * Description: + * Currently, this function only disables the PMIC. + * + * Input Parameters: + * None + * + * Returned Value: + * None + * + ****************************************************************************/ + +void sam_pmic_initialize(void) +{ + FAR struct i2c_dev_s *i2c; + uint8_t buffer[2]; + + /* Get an instance of the I2C interface for the PMIC */ + + i2c = up_i2cinitialize(PMIC_TWI_BUS); + if (!i2c) + { + dbg("ERROR: Failed to initialize TWI%d\n", PMIC_TWI_BUS); + } + else + { + /* Configure the I2C instance */ + + (void)I2C_SETADDRESS(i2c, PMIC_I2C_ADDRESS, 7); + (void)I2C_SETFREQUENCY(i2c, PMIC_I2C_FREQUENCY); + + /* Send the disable sequence */ + + buffer[0] = 0x0b; + buffer[1] = 0xee; + (void)I2C_SEND(i2c, buffer, 2); + + buffer[0] = 0x02; + buffer[1] = 0x0f; + (void)I2C_SEND(i2c, buffer, 2); + + buffer[0] = 0x03; + buffer[1] = 0x0f; + (void)I2C_SEND(i2c, buffer, 2); + } +} + +#endif /* HAVE_PMIC */ diff --git a/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h b/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h index bb9a20130..df2403c9e 100644 --- a/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h +++ b/nuttx/configs/sama5d4-ek/src/sama5d4-ek.h @@ -66,6 +66,7 @@ #define HAVE_MAXTOUCH 1 #define HAVE_WM8904 1 #define HAVE_AUDIO_NULL 1 +#define HAVE_PMIC 1 /* HSMCI */ /* Can't support MMC/SD if the card interface(s) are not enable */ @@ -369,6 +370,12 @@ # endif #endif +/* PMIC */ + +#ifndef CONFIG_SAMA5_TWI0 +# undef HAVE_PMIC +#endif + /* LEDs *****************************************************************************/ /* There are 3 LEDs on the SAMA5D4-EK: * @@ -733,8 +740,9 @@ /* ACT8865 power management chip ****************************************************/ /* The PMIC communicates on TWI0, I2C address 0x5b */ -#define PMIC_TWI_BUS 0 -#define PMIC_I2C_ADDRESS 0x5b +#define PMIC_TWI_BUS 0 +#define PMIC_I2C_ADDRESS 0x5b +#define PMIC_I2C_FREQUENCY 400000 /* 400KHz max */ /************************************************************************************ * Public Types @@ -962,6 +970,26 @@ int sam_wm8904_initialize(int minor); int sam_audio_null_initialize(int minor); #endif /* HAVE_AUDIO_NULL */ +/**************************************************************************** + * Name: sam_pmic_initialize + * + * Description: + * Currently, this function only disables the PMIC. + * + * Input Parameters: + * None + * + * Returned Value: + * None + * + ****************************************************************************/ + +#ifdef HAVE_PMIC +void sam_pmic_initialize(void) +#else +# define sam_pmic_initialize() +#endif + #endif /* __ASSEMBLY__ */ #endif /* __CONFIGS_SAMA5D4_EK_SRC_SAMA5D4_EK_H */ -- cgit v1.2.3