|
@@ -22,6 +22,8 @@
|
|
|
#include <i2c.h>
|
|
|
#include <watchdog.h>
|
|
|
|
|
|
+DECLARE_GLOBAL_DATA_PTR;
|
|
|
+
|
|
|
#ifdef I2C_QUIRK_REG
|
|
|
struct mxc_i2c_regs {
|
|
|
uint8_t iadr;
|
|
@@ -411,12 +413,6 @@ struct sram_data {
|
|
|
struct i2c_parms i2c_data[3];
|
|
|
};
|
|
|
|
|
|
-/*
|
|
|
- * For SPL boot some boards need i2c before SDRAM is initialized so force
|
|
|
- * variables to live in SRAM
|
|
|
- */
|
|
|
-static struct sram_data __attribute__((section(".data"))) srdata;
|
|
|
-
|
|
|
static void * const i2c_bases[] = {
|
|
|
#if defined(CONFIG_MX25)
|
|
|
(void *)IMX_I2C_BASE,
|
|
@@ -445,9 +441,10 @@ void *i2c_get_base(struct i2c_adapter *adap)
|
|
|
|
|
|
static struct i2c_parms *i2c_get_parms(void *base)
|
|
|
{
|
|
|
+ struct sram_data *srdata = (void *)gd->srdata;
|
|
|
int i = 0;
|
|
|
- struct i2c_parms *p = srdata.i2c_data;
|
|
|
- while (i < ARRAY_SIZE(srdata.i2c_data)) {
|
|
|
+ struct i2c_parms *p = srdata->i2c_data;
|
|
|
+ while (i < ARRAY_SIZE(srdata->i2c_data)) {
|
|
|
if (p->base == base)
|
|
|
return p;
|
|
|
p++;
|
|
@@ -490,8 +487,9 @@ static int mxc_i2c_probe(struct i2c_adapter *adap, uint8_t chip)
|
|
|
void bus_i2c_init(void *base, int speed, int unused,
|
|
|
int (*idle_bus_fn)(void *p), void *idle_bus_data)
|
|
|
{
|
|
|
+ struct sram_data *srdata = (void *)gd->srdata;
|
|
|
int i = 0;
|
|
|
- struct i2c_parms *p = srdata.i2c_data;
|
|
|
+ struct i2c_parms *p = srdata->i2c_data;
|
|
|
if (!base)
|
|
|
return;
|
|
|
for (;;) {
|
|
@@ -505,7 +503,7 @@ void bus_i2c_init(void *base, int speed, int unused,
|
|
|
}
|
|
|
p++;
|
|
|
i++;
|
|
|
- if (i >= ARRAY_SIZE(srdata.i2c_data))
|
|
|
+ if (i >= ARRAY_SIZE(srdata->i2c_data))
|
|
|
return;
|
|
|
}
|
|
|
bus_i2c_set_bus_speed(base, speed);
|