diff options
author | Liu Hui-R64343 <r64343@freescale.com> | 2011-01-03 22:27:40 +0000 |
---|---|---|
committer | Albert Aribaud <albert.aribaud@free.fr> | 2011-02-02 00:54:42 +0100 |
commit | 3382fd48f277a3dc77ad8d3d99d255e88797b045 (patch) | |
tree | f7b3c849d6642040d516d9846a1253033b13eca1 /drivers/misc/fsl_pmic.c | |
parent | 127cec1889c7a9bb3c3eab521779b08657043a9a (diff) | |
download | u-boot-imx-3382fd48f277a3dc77ad8d3d99d255e88797b045.zip u-boot-imx-3382fd48f277a3dc77ad8d3d99d255e88797b045.tar.gz u-boot-imx-3382fd48f277a3dc77ad8d3d99d255e88797b045.tar.bz2 |
fsl_pmic: add I2C interface support
This patch add I2C interface for fsl_pmic driver support
Signed-off-by: Jason Liu <r64343@freescale.com>
Diffstat (limited to 'drivers/misc/fsl_pmic.c')
-rw-r--r-- | drivers/misc/fsl_pmic.c | 45 |
1 files changed, 40 insertions, 5 deletions
diff --git a/drivers/misc/fsl_pmic.c b/drivers/misc/fsl_pmic.c index 5ee1de1..ef80ad9 100644 --- a/drivers/misc/fsl_pmic.c +++ b/drivers/misc/fsl_pmic.c @@ -22,11 +22,48 @@ #include <config.h> #include <common.h> -#include <spi.h> #include <asm/errno.h> #include <linux/types.h> #include <fsl_pmic.h> +static int check_param(u32 reg, u32 write) +{ + if (reg > 63 || write > 1) { + printf("<reg num> = %d is invalid. Should be less then 63\n", + reg); + return -1; + } + + return 0; +} + +#ifdef CONFIG_FSL_PMIC_I2C +#include <i2c.h> + +u32 pmic_reg(u32 reg, u32 val, u32 write) +{ + unsigned char buf[4] = { 0 }; + u32 ret_val = 0; + + if (check_param(reg, write)) + return -1; + + if (write) { + buf[0] = (val >> 16) & 0xff; + buf[1] = (val >> 8) & 0xff; + buf[2] = (val) & 0xff; + if (i2c_write(CONFIG_SYS_FSL_PMIC_I2C_ADDR, reg, 1, buf, 3)) + return -1; + } else { + if (i2c_read(CONFIG_SYS_FSL_PMIC_I2C_ADDR, reg, 1, buf, 3)) + return -1; + ret_val = buf[0] << 16 | buf[1] << 8 | buf[2]; + } + + return ret_val; +} +#else /* SPI interface */ +#include <spi.h> static struct spi_slave *slave; struct spi_slave *pmic_spi_probe(void) @@ -55,11 +92,8 @@ u32 pmic_reg(u32 reg, u32 val, u32 write) return -1; } - if (reg > 63 || write > 1) { - printf("<reg num> = %d is invalid. Should be less then 63\n", - reg); + if (check_param(reg, write)) return -1; - } if (spi_claim_bus(slave)) return -1; @@ -87,6 +121,7 @@ u32 pmic_reg(u32 reg, u32 val, u32 write) spi_release_bus(slave); return cpu_to_be32(pmic_rx); } +#endif void pmic_reg_write(u32 reg, u32 value) { |