mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-08 11:36:21 -04:00
mgcoge, mgsuvd: add I2C support.
Signed-off-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
parent
98aed37958
commit
9661bf9d12
@ -24,11 +24,16 @@
|
||||
#include <common.h>
|
||||
#include <mpc8260.h>
|
||||
#include <ioports.h>
|
||||
#include <malloc.h>
|
||||
|
||||
#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
|
||||
#include <libfdt.h>
|
||||
#endif
|
||||
|
||||
#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
|
||||
#include <i2c.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* I/O Port configuration table
|
||||
*
|
||||
@ -163,8 +168,13 @@ const iop_conf_t iop_conf_tab[4][32] = {
|
||||
/* PD18 */ { 0, 0, 0, 0, 0, 0 }, /* PD18 */
|
||||
/* PD17 */ { 0, 0, 0, 0, 0, 0 }, /* PD17 */
|
||||
/* PD16 */ { 0, 0, 0, 0, 0, 0 }, /* PD16 */
|
||||
/* PD15 */ { 0, 0, 0, 0, 0, 0 }, /* PD15 */
|
||||
/* PD14 */ { 0, 0, 0, 0, 0, 0 }, /* PD14 */
|
||||
#if defined(CONFIG_HARD_I2C)
|
||||
/* PD15 */ { 1, 1, 1, 0, 1, 0 }, /* I2C SDA */
|
||||
/* PD14 */ { 1, 1, 1, 0, 1, 0 }, /* I2C SCL */
|
||||
#else
|
||||
/* PD15 */ { 1, 0, 0, 0, 1, 1 }, /* PD15 */
|
||||
/* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* PD14 */
|
||||
#endif
|
||||
/* PD13 */ { 0, 0, 0, 0, 0, 0 }, /* PD13 */
|
||||
/* PD12 */ { 0, 0, 0, 0, 0, 0 }, /* PD12 */
|
||||
/* PD11 */ { 0, 0, 0, 0, 0, 0 }, /* PD11 */
|
||||
|
@ -225,3 +225,14 @@ void ft_board_setup(void *blob, bd_t *bd)
|
||||
ft_blob_update(blob, bd);
|
||||
}
|
||||
#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
|
||||
|
||||
int i2c_soft_read_pin (void)
|
||||
{
|
||||
int val;
|
||||
|
||||
*(unsigned short *)(I2C_BASE_DIR) &= ~SDA_CONF;
|
||||
udelay(1);
|
||||
val = *(unsigned char *)(I2C_BASE_PORT);
|
||||
|
||||
return ((val & SDA_BIT) == SDA_BIT);
|
||||
}
|
||||
|
@ -82,6 +82,7 @@
|
||||
#include <config_cmd_default.h>
|
||||
|
||||
#define CONFIG_CMD_ECHO
|
||||
#define CONFIG_CMD_I2C
|
||||
#define CONFIG_CMD_IMMAP
|
||||
#define CONFIG_CMD_MII
|
||||
#define CONFIG_CMD_PING
|
||||
@ -176,6 +177,30 @@
|
||||
#define CONFIG_ENV_ADDR (CFG_MONITOR_BASE + CFG_MONITOR_LEN)
|
||||
#endif /* CONFIG_ENV_IS_IN_FLASH */
|
||||
|
||||
/* enable I2C and select the hardware/software driver */
|
||||
#undef CONFIG_HARD_I2C /* I2C with hardware support */
|
||||
#define CONFIG_SOFT_I2C 1 /* I2C bit-banged */
|
||||
#define CFG_I2C_SPEED 50000 /* I2C speed and slave address */
|
||||
#define CFG_I2C_SLAVE 0x7F
|
||||
|
||||
/*
|
||||
* Software (bit-bang) I2C driver configuration
|
||||
*/
|
||||
|
||||
#define I2C_PORT 3 /* Port A=0, B=1, C=2, D=3 */
|
||||
#define I2C_ACTIVE (iop->pdir |= 0x00010000)
|
||||
#define I2C_TRISTATE (iop->pdir &= ~0x00010000)
|
||||
#define I2C_READ ((iop->pdat & 0x00010000) != 0)
|
||||
#define I2C_SDA(bit) if(bit) iop->pdat |= 0x00010000; \
|
||||
else iop->pdat &= ~0x00010000
|
||||
#define I2C_SCL(bit) if(bit) iop->pdat |= 0x00020000; \
|
||||
else iop->pdat &= ~0x00020000
|
||||
#define I2C_DELAY udelay(5) /* 1/4 I2C clock duration */
|
||||
|
||||
#define CONFIG_I2C_MULTI_BUS 1
|
||||
#define CONFIG_I2C_CMD_TREE 1
|
||||
#define CFG_MAX_I2C_BUS 2
|
||||
|
||||
#define CFG_IMMR 0xF0000000
|
||||
|
||||
#define CFG_INIT_RAM_ADDR CFG_IMMR
|
||||
|
@ -113,6 +113,7 @@
|
||||
|
||||
#define CONFIG_CMD_ASKENV
|
||||
#define CONFIG_CMD_DHCP
|
||||
#define CONFIG_CMD_I2C
|
||||
#define CONFIG_CMD_NFS
|
||||
#define CONFIG_CMD_PING
|
||||
|
||||
@ -330,4 +331,46 @@
|
||||
#define OF_TBCLK (bd->bi_busfreq / 4)
|
||||
#define OF_STDOUT_PATH "/soc/cpm/serial@a80"
|
||||
|
||||
/* enable I2C and select the hardware/software driver */
|
||||
#undef CONFIG_HARD_I2C /* I2C with hardware support */
|
||||
#define CONFIG_SOFT_I2C 1 /* I2C bit-banged */
|
||||
#define CFG_I2C_SPEED 50000 /* I2C speed and slave address */
|
||||
#define CFG_I2C_SLAVE 0x7F
|
||||
#define I2C_SOFT_DECLARATIONS
|
||||
|
||||
/*
|
||||
* Software (bit-bang) I2C driver configuration
|
||||
*/
|
||||
#define I2C_BASE_DIR (CFG_PIGGY_BASE + 0x04)
|
||||
#define I2C_BASE_PORT (CFG_PIGGY_BASE + 0x09)
|
||||
|
||||
#define SDA_BIT 0x40
|
||||
#define SCL_BIT 0x80
|
||||
#define SDA_CONF 0x1000
|
||||
#define SCL_CONF 0x2000
|
||||
|
||||
#define I2C_ACTIVE do {} while (0)
|
||||
#define I2C_TRISTATE do {} while (0)
|
||||
#define I2C_READ i2c_soft_read_pin ()
|
||||
#define I2C_SDA(bit) if(bit) { \
|
||||
*(unsigned short *)(I2C_BASE_DIR) &= ~SDA_CONF; \
|
||||
} \
|
||||
else { \
|
||||
*(unsigned char *)(I2C_BASE_PORT) &= ~SDA_BIT; \
|
||||
*(unsigned short *)(I2C_BASE_DIR) |= SDA_CONF; \
|
||||
}
|
||||
#define I2C_SCL(bit) if(bit) { \
|
||||
*(unsigned short *)(I2C_BASE_DIR) &= ~SCL_CONF; \
|
||||
} \
|
||||
else { \
|
||||
*(unsigned char *)(I2C_BASE_PORT) &= ~SCL_BIT; \
|
||||
*(unsigned short *)(I2C_BASE_DIR) |= SCL_CONF; \
|
||||
}
|
||||
#define I2C_DELAY udelay(50) /* 1/4 I2C clock duration */
|
||||
|
||||
#define CONFIG_I2C_MULTI_BUS 1
|
||||
#define CONFIG_I2C_CMD_TREE 1
|
||||
#define CFG_MAX_I2C_BUS 2
|
||||
|
||||
|
||||
#endif /* __CONFIG_H */
|
||||
|
Loading…
x
Reference in New Issue
Block a user