if I2C3 is 3.3V levle and SPI_VCC is 1.8V, you will have to use a levle shifter from 3.3V i2c to 1.8V i2c interface on mc34708, I have done a silimar test, at the time, I2C3 maybe has communications errors. but using GPIO i2c(iomuxed these 2 I2C3 PINs to be 2 GPIOs) can resolve the problem. So if you meet the similar issue, you can use gpio-i2c module in linux kernel to resovle the problems. The following is steps on how to use GPIO to simulate I2C:
Open mx53_loco.c, then add :
(1)include header file
#include <linux/i2c-gpio.h>
(2)define GPIO Number in linux
/* Define 2 gpio pins to simulate I2C3 */
#define MX53_GPIO_3_GPIO_SCL (0*32 + 3) /* GPIO1_3 */
#define MX53_GPIO_6_GPIO_SDA (0*32 + 6) /* GPIO1_6 */
(3)2-PIN IOMUXED as GPIO
static iomux_v3_cfg_t mx53_loco_pads[] = {
....
MX53_PAD_GPIO_3__I2C3_SCL,
MX53_PAD_GPIO_6__I2C3_SDA,
....
}
(4)Initialize GPIO I2C data
struct i2c_gpio_platform_data mx53_gpio_i2c3_data = {
.sda_pin = MX53_GPIO_6_GPIO_SDA,
.scl_pin = MX53_GPIO_3_GPIO_SCL,
};
(5)define GPIO I2C device
static struct platform_device i2c_device[] = {
{
.name = "i2c-gpio",
.id = 2,
.dev = {
.platform_data = &mx53_gpio_i2c3_data,
},
};/*Here we define ID is 2*/
(6)Adjust mx53_loco_pmic_mc34708.c
int __init mx53_loco_init_mc34708(void)
{
return i2c_register_board_info(2, &mc34708_i2c_device, 1);
}
(7)Register GPIO i2c device(Go back to mx53_loco.c)
static void __init mxc_board_init(void)
{
....
platform_device_register(&i2c_device[0]);
mx53_loco_init_mc34708();
....
}