Skip to content
Snippets Groups Projects
Commit 950a6979 authored by Gregory Nutt's avatar Gregory Nutt
Browse files

SAMA5D4-EK: Add logic to disable the faulty PMIC. This must be done with JP23...

SAMA5D4-EK: Add logic to disable the faulty PMIC.  This must be done with JP23 open.  It is perfomed only from the DRAMBOOT loader
parent 75daeb75
No related branches found
No related tags found
No related merge requests found
......@@ -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
......
......@@ -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.
......
/************************************************************************************
* configs/sama5d4-ek/src/sam_pmic.c
*
* Copyright (C) 2014 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* 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 <nuttx/config.h>
#include <stdbool.h>
#include <stdio.h>
#include <debug.h>
#include <assert.h>
#include <errno.h>
#include <nuttx/i2c.h>
#include <arch/board/board.h>
#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 */
......@@ -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 */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment