dm: i2c: tegra: Convert to driver model
This converts all Tegra boards over to use driver model for I2C. The driver is adjusted to use driver model and the following obsolete CONFIGs are removed: - CONFIG_SYS_I2C_INIT_BOARD - CONFIG_I2C_MULTI_BUS - CONFIG_SYS_MAX_I2C_BUS - CONFIG_SYS_I2C_SPEED - CONFIG_SYS_I2C This has been tested on: - trimslice (no I2C) - beaver - Jetson-TK1 It has not been tested on Tegra 114 as I don't have that board. Acked-by: Heiko Schocher <hs@denx.de> Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <asm/arch/pinmux.h>
|
||||
#include <asm/arch/gp_padctrl.h>
|
||||
#include "pinmux-config-cardhu.h"
|
||||
@@ -37,17 +38,23 @@ void pinmux_init(void)
|
||||
*/
|
||||
void board_sdmmc_voltage_init(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
uchar reg, data_buffer[1];
|
||||
int ret;
|
||||
int i;
|
||||
|
||||
i2c_set_bus_num(0); /* PMU is on bus 0 */
|
||||
ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, &dev);
|
||||
if (ret) {
|
||||
debug("%s: Cannot find PMIC I2C chip\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/* TPS659110: LDO5_REG = 3.3v, ACTIVE to SDMMC1 */
|
||||
data_buffer[0] = 0x65;
|
||||
reg = 0x32;
|
||||
|
||||
for (i = 0; i < MAX_I2C_RETRY; ++i) {
|
||||
if (i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1))
|
||||
if (i2c_write(dev, reg, data_buffer, 1))
|
||||
udelay(100);
|
||||
}
|
||||
|
||||
@@ -56,7 +63,7 @@ void board_sdmmc_voltage_init(void)
|
||||
reg = 0x67;
|
||||
|
||||
for (i = 0; i < MAX_I2C_RETRY; ++i) {
|
||||
if (i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1))
|
||||
if (i2c_write(dev, reg, data_buffer, 1))
|
||||
udelay(100);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,10 +113,6 @@ int board_init(void)
|
||||
power_det_init();
|
||||
|
||||
#ifdef CONFIG_SYS_I2C_TEGRA
|
||||
#ifndef CONFIG_SYS_I2C_INIT_BOARD
|
||||
#error "You must define CONFIG_SYS_I2C_INIT_BOARD to use i2c on Nvidia boards"
|
||||
#endif
|
||||
i2c_init_board();
|
||||
# ifdef CONFIG_TEGRA_PMU
|
||||
if (pmu_set_nominal())
|
||||
debug("Failed to select nominal voltages\n");
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <asm/arch/pinmux.h>
|
||||
#include <asm/arch/gp_padctrl.h>
|
||||
#include "pinmux-config-dalmore.h"
|
||||
@@ -50,18 +51,21 @@ void pinmux_init(void)
|
||||
*/
|
||||
void board_sdmmc_voltage_init(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
uchar reg, data_buffer[1];
|
||||
int ret;
|
||||
|
||||
ret = i2c_set_bus_num(0);/* PMU is on bus 0 */
|
||||
if (ret)
|
||||
printf("%s: i2c_set_bus_num returned %d\n", __func__, ret);
|
||||
ret = i2c_get_chip_for_busnum(0, PMU_I2C_ADDRESS, &dev);
|
||||
if (ret) {
|
||||
debug("%s: Cannot find PMIC I2C chip\n", __func__);
|
||||
return;
|
||||
}
|
||||
|
||||
/* TPS65913: LDO9_VOLTAGE = 3.3V */
|
||||
data_buffer[0] = 0x31;
|
||||
reg = 0x61;
|
||||
|
||||
ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1);
|
||||
ret = i2c_write(dev, reg, data_buffer, 1);
|
||||
if (ret)
|
||||
printf("%s: PMU i2c_write %02X<-%02X returned %d\n",
|
||||
__func__, reg, data_buffer[0], ret);
|
||||
@@ -70,7 +74,7 @@ void board_sdmmc_voltage_init(void)
|
||||
data_buffer[0] = 0x01;
|
||||
reg = 0x60;
|
||||
|
||||
ret = i2c_write(PMU_I2C_ADDRESS, reg, 1, data_buffer, 1);
|
||||
ret = i2c_write(dev, reg, data_buffer, 1);
|
||||
if (ret)
|
||||
printf("%s: PMU i2c_write %02X<-%02X returned %d\n",
|
||||
__func__, reg, data_buffer[0], ret);
|
||||
@@ -79,7 +83,12 @@ void board_sdmmc_voltage_init(void)
|
||||
data_buffer[0] = 0x03;
|
||||
reg = 0x14;
|
||||
|
||||
ret = i2c_write(BAT_I2C_ADDRESS, reg, 1, data_buffer, 1);
|
||||
ret = i2c_get_chip_for_busnum(0, BAT_I2C_ADDRESS, &dev);
|
||||
if (ret) {
|
||||
debug("%s: Cannot find charger I2C chip\n", __func__);
|
||||
return;
|
||||
}
|
||||
ret = i2c_write(dev, reg, data_buffer, 1);
|
||||
if (ret)
|
||||
printf("%s: BAT i2c_write %02X<-%02X returned %d\n",
|
||||
__func__, reg, data_buffer[0], ret);
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <dm.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/arch/tegra.h>
|
||||
#include <asm/arch/clock.h>
|
||||
@@ -21,23 +22,26 @@
|
||||
*/
|
||||
void pin_mux_mmc(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
uchar val;
|
||||
int ret;
|
||||
|
||||
/* Turn on MAX8907B LDO12 to 2.8V for J40 power */
|
||||
ret = i2c_set_bus_num(0);
|
||||
if (ret)
|
||||
printf("i2c_set_bus_num failed: %d\n", ret);
|
||||
ret = i2c_get_chip_for_busnum(0, 0x3c, &dev);
|
||||
if (ret) {
|
||||
printf("%s: Cannot find MAX8907B I2C chip\n", __func__);
|
||||
return;
|
||||
}
|
||||
val = 0x29;
|
||||
ret = i2c_write(0x3c, 0x46, 1, &val, 1);
|
||||
ret = i2c_write(dev, 0x46, &val, 1);
|
||||
if (ret)
|
||||
printf("i2c_write 0 0x3c 0x46 failed: %d\n", ret);
|
||||
val = 0x00;
|
||||
ret = i2c_write(0x3c, 0x45, 1, &val, 1);
|
||||
ret = i2c_write(dev, 0x45, &val, 1);
|
||||
if (ret)
|
||||
printf("i2c_write 0 0x3c 0x45 failed: %d\n", ret);
|
||||
val = 0x1f;
|
||||
ret = i2c_write(0x3c, 0x44, 1, &val, 1);
|
||||
ret = i2c_write(dev, 0x44, &val, 1);
|
||||
if (ret)
|
||||
printf("i2c_write 0 0x3c 0x44 failed: %d\n", ret);
|
||||
|
||||
@@ -49,6 +53,7 @@ void pin_mux_mmc(void)
|
||||
/* this is a weak define that we are overriding */
|
||||
void pin_mux_usb(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
uchar val;
|
||||
int ret;
|
||||
|
||||
@@ -59,15 +64,17 @@ void pin_mux_usb(void)
|
||||
*/
|
||||
|
||||
/* Turn on TAC6416's GPIO 0+1 for USB1/3's VBUS */
|
||||
ret = i2c_set_bus_num(0);
|
||||
if (ret)
|
||||
printf("i2c_set_bus_num failed: %d\n", ret);
|
||||
ret = i2c_get_chip_for_busnum(0, 0x20, &dev);
|
||||
if (ret) {
|
||||
printf("%s: Cannot find TAC6416 I2C chip\n", __func__);
|
||||
return;
|
||||
}
|
||||
val = 0x03;
|
||||
ret = i2c_write(0x20, 2, 1, &val, 1);
|
||||
ret = i2c_write(dev, 2, &val, 1);
|
||||
if (ret)
|
||||
printf("i2c_write 0 0x20 2 failed: %d\n", ret);
|
||||
val = 0xfc;
|
||||
ret = i2c_write(0x20, 6, 1, &val, 1);
|
||||
ret = i2c_write(dev, 6, &val, 1);
|
||||
if (ret)
|
||||
printf("i2c_write 0 0x20 6 failed: %d\n", ret);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user