Merge pull request #1570 from Andre-ARM/allwinner/pmic-fixes
Allwinner PMIC fixes
This commit is contained in:
commit
6254241994
|
@ -15,6 +15,7 @@
|
||||||
#include <delay_timer.h>
|
#include <delay_timer.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <mentor/mi2cv.h>
|
#include <mentor/mi2cv.h>
|
||||||
|
#include <mentor_i2c_plat.h>
|
||||||
#include <mmio.h>
|
#include <mmio.h>
|
||||||
|
|
||||||
#if LOG_LEVEL >= LOG_LEVEL_VERBOSE
|
#if LOG_LEVEL >= LOG_LEVEL_VERBOSE
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
* https://spdx.org/licenses
|
* https://spdx.org/licenses
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* This driver provides I2C support for Allwinner sunXi SoCs */
|
/* This driver provides I2C support for Allwinner sunXi SoCs */
|
||||||
|
|
||||||
#include <mmio.h>
|
#ifndef SUNXI_I2C_H
|
||||||
|
#define SUNXI_I2C_H
|
||||||
|
|
||||||
#define CONFIG_SYS_TCLK 24000000
|
#define CONFIG_SYS_TCLK 24000000
|
||||||
#define CONFIG_SYS_I2C_SPEED 100000
|
#define CONFIG_SYS_I2C_SPEED 100000
|
||||||
|
@ -25,4 +25,4 @@ struct mentor_i2c_regs {
|
||||||
uint32_t soft_reset;
|
uint32_t soft_reset;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "../mentor/i2c/mi2cv.c"
|
#endif
|
|
@ -15,8 +15,8 @@ PLAT_INCLUDES := -Iinclude/plat/arm/common \
|
||||||
-I${AW_PLAT}/${PLAT}/include
|
-I${AW_PLAT}/${PLAT}/include
|
||||||
|
|
||||||
PLAT_BL_COMMON_SOURCES := drivers/console/${ARCH}/console.S \
|
PLAT_BL_COMMON_SOURCES := drivers/console/${ARCH}/console.S \
|
||||||
|
drivers/mentor/i2c/mi2cv.c \
|
||||||
drivers/ti/uart/${ARCH}/16550_console.S \
|
drivers/ti/uart/${ARCH}/16550_console.S \
|
||||||
${AW_DRIVERS}/sunxi_i2c.c \
|
|
||||||
${XLAT_TABLES_LIB_SRCS} \
|
${XLAT_TABLES_LIB_SRCS} \
|
||||||
${AW_PLAT}/common/plat_helpers.S \
|
${AW_PLAT}/common/plat_helpers.S \
|
||||||
${AW_PLAT}/common/sunxi_common.c
|
${AW_PLAT}/common/sunxi_common.c
|
||||||
|
|
|
@ -28,13 +28,8 @@ static int sunxi_init_r_i2c(void)
|
||||||
{
|
{
|
||||||
uint32_t reg;
|
uint32_t reg;
|
||||||
|
|
||||||
/* get currently configured function for pins PL0 and PL1 */
|
|
||||||
reg = mmio_read_32(SUNXI_R_PIO_BASE + 0x00);
|
|
||||||
if ((reg & 0xff) == 0x33) {
|
|
||||||
NOTICE("PMIC: already configured for TWI\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
/* switch pins PL0 and PL1 to I2C */
|
/* switch pins PL0 and PL1 to I2C */
|
||||||
|
reg = mmio_read_32(SUNXI_R_PIO_BASE + 0x00);
|
||||||
mmio_write_32(SUNXI_R_PIO_BASE + 0x00, (reg & ~0xff) | 0x33);
|
mmio_write_32(SUNXI_R_PIO_BASE + 0x00, (reg & ~0xff) | 0x33);
|
||||||
|
|
||||||
/* level 2 drive strength */
|
/* level 2 drive strength */
|
||||||
|
@ -47,13 +42,11 @@ static int sunxi_init_r_i2c(void)
|
||||||
|
|
||||||
/* assert & de-assert reset of R_I2C */
|
/* assert & de-assert reset of R_I2C */
|
||||||
reg = mmio_read_32(SUNXI_R_PRCM_BASE + 0x19c);
|
reg = mmio_read_32(SUNXI_R_PRCM_BASE + 0x19c);
|
||||||
mmio_write_32(SUNXI_R_PRCM_BASE + 0x19c, 0);
|
mmio_write_32(SUNXI_R_PRCM_BASE + 0x19c, reg & ~BIT(16));
|
||||||
reg = mmio_read_32(SUNXI_R_PRCM_BASE + 0x19c);
|
mmio_write_32(SUNXI_R_PRCM_BASE + 0x19c, reg | BIT(16));
|
||||||
mmio_write_32(SUNXI_R_PRCM_BASE + 0x19c, reg | 0x00010000);
|
|
||||||
|
|
||||||
/* un-gate R_I2C clock */
|
/* un-gate R_I2C clock */
|
||||||
reg = mmio_read_32(SUNXI_R_PRCM_BASE + 0x19c);
|
mmio_write_32(SUNXI_R_PRCM_BASE + 0x19c, reg | BIT(16) | BIT(0));
|
||||||
mmio_write_32(SUNXI_R_PRCM_BASE + 0x19c, reg | 0x00000001);
|
|
||||||
|
|
||||||
/* call mi2cv driver */
|
/* call mi2cv driver */
|
||||||
i2c_init((void *)SUNXI_R_I2C_BASE);
|
i2c_init((void *)SUNXI_R_I2C_BASE);
|
||||||
|
@ -127,10 +120,9 @@ void __dead2 sunxi_power_down(void)
|
||||||
|
|
||||||
switch (pmic) {
|
switch (pmic) {
|
||||||
case AXP805:
|
case AXP805:
|
||||||
val = 0x26; /* Default value for REG 32H */
|
sunxi_init_r_i2c();
|
||||||
axp_i2c_read(AXP805_ADDR, 0x32, &val);
|
axp_i2c_read(AXP805_ADDR, 0x32, &val);
|
||||||
val |= 0x80;
|
axp_i2c_write(AXP805_ADDR, 0x32, val | 0x80);
|
||||||
axp_i2c_write(AXP805_ADDR, 0x32, val);
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -57,9 +57,9 @@ BLE_PORTING_SOURCES := $(PLAT_FAMILY_BASE)/$(PLAT)/board/dram_port.c \
|
||||||
|
|
||||||
MARVELL_MOCHI_DRV += $(MARVELL_DRV_BASE)/mochi/cp110_setup.c
|
MARVELL_MOCHI_DRV += $(MARVELL_DRV_BASE)/mochi/cp110_setup.c
|
||||||
|
|
||||||
BLE_SOURCES := $(PLAT_COMMON_BASE)/plat_ble_setup.c \
|
BLE_SOURCES := drivers/mentor/i2c/mi2cv.c \
|
||||||
|
$(PLAT_COMMON_BASE)/plat_ble_setup.c \
|
||||||
$(MARVELL_MOCHI_DRV) \
|
$(MARVELL_MOCHI_DRV) \
|
||||||
$(MARVELL_DRV_BASE)/i2c/a8k_i2c.c \
|
|
||||||
$(PLAT_COMMON_BASE)/plat_pm.c \
|
$(PLAT_COMMON_BASE)/plat_pm.c \
|
||||||
$(MARVELL_DRV_BASE)/thermal.c \
|
$(MARVELL_DRV_BASE)/thermal.c \
|
||||||
$(PLAT_COMMON_BASE)/plat_thermal.c \
|
$(PLAT_COMMON_BASE)/plat_thermal.c \
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
* SPDX-License-Identifier: BSD-3-Clause
|
* SPDX-License-Identifier: BSD-3-Clause
|
||||||
* https://spdx.org/licenses
|
* https://spdx.org/licenses
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* This driver provides I2C support for Marvell A8K and compatible SoCs */
|
/* This driver provides I2C support for Marvell A8K and compatible SoCs */
|
||||||
|
|
||||||
#include <mmio.h>
|
#ifndef A8K_I2C_H
|
||||||
|
#define A8K_I2C_H
|
||||||
|
|
||||||
#define CONFIG_SYS_TCLK 250000000
|
#define CONFIG_SYS_TCLK 250000000
|
||||||
#define CONFIG_SYS_I2C_SPEED 100000
|
#define CONFIG_SYS_I2C_SPEED 100000
|
||||||
|
@ -30,4 +30,4 @@ struct mentor_i2c_regs {
|
||||||
uint32_t unstuck;
|
uint32_t unstuck;
|
||||||
};
|
};
|
||||||
|
|
||||||
#include "../../mentor/i2c/mi2cv.c"
|
#endif
|
Loading…
Reference in New Issue