Bring in new I2C framework
Subsystems (11)
cover Bring in new I2C framework
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
Heiko Schocher (3):
i2c: add i2c_core and prepare for new multibus support
i2c: common changes for multibus/multiadapter support i2c, soft-i2c: switch to new multibus/multiadapter support
README | 89 +++++++- arch/arm/include/asm/global_data.h | 3 + arch/arm/lib/board.c | 15 +- arch/avr32/include/asm/global_data.h | 3 + arch/blackfin/include/asm/global_data.h | 4 +- arch/blackfin/lib/board.c | 7 + arch/m68k/include/asm/global_data.h | 3 + arch/m68k/lib/board.c | 15 +- arch/microblaze/include/asm/global_data.h | 3 + arch/mips/include/asm/global_data.h | 3 + arch/mips/lib/board.c | 7 + arch/nds32/include/asm/global_data.h | 3 + arch/nds32/lib/board.c | 10 +- arch/nios2/include/asm/global_data.h | 3 + arch/powerpc/cpu/mpc8xx/video.c | 4 + arch/powerpc/include/asm/global_data.h | 3 + arch/powerpc/lib/board.c | 16 +- arch/sh/include/asm/global_data.h | 3 + arch/sparc/include/asm/global_data.h | 3 + arch/x86/include/asm/global_data.h | 3 + board/BuS/eb_cpux9k2/cpux9k2.c | 2 +- board/BuS/vl_ma2sc/vl_ma2sc.c | 2 +- board/atc/atc.c | 2 +- board/bluewater/snapper9260/snapper9260.c | 2 +- board/cm5200/cm5200.c | 4 +- board/cpu86/cpu86.c | 2 +- board/cpu87/cpu87.c | 2 +- board/emk/top9000/top9000.c | 8 +- board/eukrea/cpuat91/cpuat91.c | 2 +- board/freescale/m52277evb/README | 2 +- board/freescale/m53017evb/README | 2 +- board/freescale/m5373evb/README | 2 +- board/freescale/m54455evb/README | 2 +- board/freescale/m547xevb/README | 2 +- board/ids8247/ids8247.c | 2 +- board/keymile/common/common.c | 3 +- board/keymile/common/ivm.c | 15 +- board/keymile/km82xx/km82xx.c | 2 +- board/keymile/km_arm/km_arm.c | 8 +- board/lwmon/lwmon.c | 2 +- board/lwmon/pcmcia.c | 4 +- board/pm826/pm826.c | 2 +- board/pm828/pm828.c | 2 +- board/sacsng/ioconfig.h | 2 +- board/sandburst/karef/karef.c | 1 - board/siemens/SCM/scm.c | 2 +- board/tqc/tqm8260/tqm8260.c | 2 +- board/tqc/tqm8272/tqm8272.c | 2 +- board/tqc/tqm8272/tqm8272.h | 2 +- common/cmd_date.c | 9 + common/cmd_dtt.c | 9 + common/cmd_eeprom.c | 3 +- common/cmd_i2c.c | 118 ++++++--- common/env_eeprom.c | 14 + common/stdio.c | 14 +- drivers/i2c/Makefile | 3 +- drivers/i2c/i2c_core.c | 367 +++++++++++++++++++++++++++++ drivers/i2c/soft_i2c.c | 122 ++++++---- include/configs/A3000.h | 4 +- include/configs/BSC9131RDB.h | 1 - include/configs/CANBT.h | 4 + include/configs/CPU86.h | 9 +- include/configs/CPU87.h | 9 +- include/configs/DU440.h | 1 - include/configs/GEN860T.h | 36 ++-- include/configs/HIDDEN_DRAGON.h | 10 +- include/configs/IAD210.h | 12 +- include/configs/ICU862.h | 14 +- include/configs/IDS8247.h | 10 +- include/configs/IP860.h | 10 +- include/configs/IPHASE4539.h | 12 +- include/configs/JSE.h | 1 - include/configs/KAREF.h | 1 - include/configs/KUP4K.h | 12 +- include/configs/KUP4X.h | 14 +- include/configs/M5208EVBE.h | 1 - include/configs/M52277EVB.h | 1 - include/configs/M5235EVB.h | 1 - include/configs/M5271EVB.h | 1 - include/configs/M5275EVB.h | 1 - include/configs/M53017EVB.h | 1 - include/configs/M5329EVB.h | 1 - include/configs/M5373EVB.h | 1 - include/configs/M54451EVB.h | 1 - include/configs/M54455EVB.h | 1 - include/configs/M5475EVB.h | 1 - include/configs/M5485EVB.h | 1 - include/configs/METROBOX.h | 1 - include/configs/MHPC.h | 9 +- include/configs/MPC8323ERDB.h | 1 - include/configs/MPC832XEMDS.h | 1 - include/configs/MPC8349EMDS.h | 1 - include/configs/MPC8349ITX.h | 2 - include/configs/MPC8360EMDS.h | 1 - include/configs/MPC8360ERDK.h | 1 - include/configs/MPC837XEMDS.h | 1 - include/configs/MPC837XERDB.h | 1 - include/configs/MPC8536DS.h | 1 - include/configs/MPC8540ADS.h | 1 - include/configs/MPC8541CDS.h | 1 - include/configs/MPC8544DS.h | 1 - include/configs/MPC8548CDS.h | 3 +- include/configs/MPC8555CDS.h | 1 - include/configs/MPC8560ADS.h | 1 - include/configs/MPC8568MDS.h | 1 - include/configs/MPC8569MDS.h | 1 - include/configs/MPC8572DS.h | 1 - include/configs/MPC8610HPCD.h | 1 - include/configs/MPC8641HPCN.h | 1 - include/configs/P1010RDB.h | 1 - include/configs/P1023RDS.h | 1 - include/configs/P1_P2_RDB.h | 1 - include/configs/P2020COME.h | 1 - include/configs/PM826.h | 9 +- include/configs/PM828.h | 9 +- include/configs/PMC440.h | 1 - include/configs/R360MPI.h | 7 +- include/configs/RPXClassic.h | 16 +- include/configs/RPXlite.h | 26 ++ include/configs/RRvision.h | 13 +- include/configs/SBC8540.h | 1 - include/configs/SCM.h | 11 +- include/configs/SXNI855T.h | 8 +- include/configs/Sandpoint8240.h | 10 +- include/configs/Sandpoint8245.h | 14 +- include/configs/TASREG.h | 27 +- include/configs/TK885D.h | 13 +- include/configs/TOP5200.h | 15 +- include/configs/TOP860.h | 11 +- include/configs/TQM8260.h | 9 +- include/configs/TQM8272.h | 13 +- include/configs/TQM834x.h | 1 - include/configs/TQM855M.h | 13 +- include/configs/TQM866M.h | 13 +- include/configs/TQM885D.h | 13 +- include/configs/alpr.h | 1 - include/configs/aria.h | 1 - include/configs/astro_mcf5373l.h | 1 - include/configs/bf533-ezkit.h | 10 +- include/configs/bf533-stamp.h | 47 ++++- include/configs/bf561-ezkit.h | 9 +- include/configs/bfin_adi_common.h | 2 +- include/configs/blackstamp.h | 1 - include/configs/cpuat91.h | 1 - include/configs/debris.h | 10 +- include/configs/eXalion.h | 2 +- include/configs/eb_cpux9k2.h | 14 +- include/configs/ep8260.h | 14 +- include/configs/ethernut5.h | 9 +- include/configs/ibf-dsp561.h | 5 +- include/configs/iocon.h | 11 +- include/configs/km/keymile-common.h | 3 - include/configs/km/km83xx-common.h | 3 + include/configs/km/km_arm.h | 26 ++- include/configs/km82xx.h | 18 +- include/configs/km_kirkwood.h | 14 +- include/configs/korat.h | 1 - include/configs/lwmon.h | 13 +- include/configs/lwmon5.h | 1 - include/configs/mecp5123.h | 1 - include/configs/mpc5121ads.h | 1 - include/configs/nhk8815.h | 8 +- include/configs/otc570.h | 18 +- include/configs/p1_p2_rdb_pc.h | 1 - include/configs/p3p440.h | 1 - include/configs/pcs440ep.h | 1 - include/configs/pdnb3.h | 11 +- include/configs/quad100hd.h | 1 - include/configs/s5p_goni.h | 7 +- include/configs/s5pc210_universal.h | 7 +- include/configs/sacsng.h | 12 +- include/configs/sbc405.h | 1 - include/configs/sbc8349.h | 1 - include/configs/sbc8548.h | 1 - include/configs/sbc8560.h | 1 - include/configs/sbc8641d.h | 1 - include/configs/sc3.h | 1 - include/configs/snapper9260.h | 9 +- include/configs/socrates.h | 1 - include/configs/spc1920.h | 13 +- include/configs/stxgp3.h | 1 - include/configs/stxssa.h | 1 - include/configs/top9000.h | 10 +- include/configs/trats.h | 7 +- include/configs/u8500_href.h | 1 - include/configs/uc100.h | 13 +- include/configs/utx8245.h | 3 +- include/configs/vct.h | 12 +- include/configs/vl_ma2sc.h | 7 +- include/configs/vme8349.h | 1 - include/configs/zeus.h | 1 - include/i2c.h | 196 +++++++++++++++- 192 files changed, 1443 insertions(+), 533 deletions(-) create mode 100644 drivers/i2c/i2c_core.c
Signature · 1 line
1.7.7.6
PATCH 1/3 i2c: add i2c_core and prepare for new multibus support
This Patch introduce the new i2c_core file, which holds the I2C core functions, for the rework of the multibus/ multiadapter support.
Also adds changes in i2c.h for the new I2C multibus/multiadapter support. This new support can be activated with the CONFIG_SYS_I2C define.
---
- changes against Simons patches:
- gd->cur_i2c_adap now used as "struct i2c_bus_hose *"
- get rid of "i2c_cur_bus"
add comments from Mike Frysinger:
- renamed cur_adap to cur_i2c_adap
- use uintx_t types
--- arch/arm/include/asm/global_data.h | 3 + arch/avr32/include/asm/global_data.h | 3 + arch/blackfin/include/asm/global_data.h | 4 +- arch/m68k/include/asm/global_data.h | 3 + arch/microblaze/include/asm/global_data.h | 3 + arch/mips/include/asm/global_data.h | 3 + arch/nds32/include/asm/global_data.h | 3 + arch/nios2/include/asm/global_data.h | 3 + arch/powerpc/include/asm/global_data.h | 3 + arch/sh/include/asm/global_data.h | 3 + arch/sparc/include/asm/global_data.h | 3 + arch/x86/include/asm/global_data.h | 3 + drivers/i2c/Makefile | 1 + drivers/i2c/i2c_core.c | 363 +++++++++++++++++++++++++++++ include/i2c.h | 196 +++++++++++++++- 15 files changed, 588 insertions(+), 9 deletions(-) create mode 100644 drivers/i2c/i2c_core.c
arch/arm/include/asm/global_data.h +3 -0
@@ -82,6 +82,9 @@ typedef struct global_data {unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */ #endif +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/avr32/include/asm/global_data.h +3 -0
@@ -48,6 +48,9 @@ typedef struct global_data {#endif void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/blackfin/include/asm/global_data.h +3 -1
@@ -54,9 +54,11 @@ typedef struct global_data {unsigned long post_log_res;/* success of POST test */ unsigned long post_init_f_time;/* When post_init_f started */ #endif -void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/m68k/include/asm/global_data.h +3 -0
@@ -66,6 +66,9 @@ typedef struct global_data {#endif void **jt;/* Standalone app jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/microblaze/include/asm/global_data.h +3 -0
@@ -46,6 +46,9 @@ typedef struct global_data {unsigned long fb_base;/* base address of frame buffer */ void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/mips/include/asm/global_data.h +3 -0
@@ -59,6 +59,9 @@ typedef struct global_data {unsigned long env_valid;/* Checksum of Environment valid? */ void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/nds32/include/asm/global_data.h +3 -0
@@ -63,6 +63,9 @@ typedef struct global_data {void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/nios2/include/asm/global_data.h +3 -0
@@ -42,6 +42,9 @@ typedef struct global_data {#endif void **jt;/* Standalone app jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/powerpc/include/asm/global_data.h +3 -0
@@ -182,6 +182,9 @@ typedef struct global_data {#endif void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/sh/include/asm/global_data.h +3 -0
@@ -42,6 +42,9 @@ typedef struct global_dataunsigned long env_valid;/* Checksum of Environment valid */ void **jt;/* Standalone app jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/sparc/include/asm/global_data.h +3 -0
@@ -74,6 +74,9 @@ typedef struct global_data {#endif void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;#include <asm-generic/global_data_flags.h>
arch/x86/include/asm/global_data.h +3 -0
@@ -57,6 +57,9 @@ typedef struct global_data {unsigned long reset_status;/* reset status register at boot */ void **jt;/* jump table */ char env_buf[32 ];/* buffer for getenv() before reloc. */ +#if defined(CONFIG_SYS_I2C ) +void *cur_i2c_bus;/* current used i2c bus */ +#endif } gd_t;static inline gd_t *get_fs_gd_ptr (void )
drivers/i2c/Makefile +1 -0
@@ -46,6 +46,7 @@ COBJS-$(CONFIG_TSI108_I2C) += tsi108_i2c.o COBJS-$(CONFIG_U8500_I2C) += u8500_i2c.o COBJS-$(CONFIG_SH_I2C) += sh_i2c.o COBJS-$(CONFIG_SH_SH7734_I2C) += sh_sh7734_i2c.o +COBJS-$(CONFIG_SYS_I2C) += i2c_core.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c)
drivers/i2c/i2c_core.c new file +363 -0
363 lines not on this page · raw message
include/i2c.h +188 -8
226 lines not on this page · raw message
Signature · 1 line
1.7.7.6
PATCH 2/3 i2c: common changes for multibus/multiadapter support
In reply to Heiko Schocher--- README | 82 ++++++++++++++++++++++++++- arch/arm/lib/board.c | 12 ++++- arch/blackfin/lib/board.c | 7 ++ arch/m68k/lib/board.c | 18 +++++- arch/mips/lib/board.c | 7 ++ arch/nds32/lib/board.c | 10 +++- arch/powerpc/cpu/mpc8xx/video.c | 4 + arch/powerpc/lib/board.c | 18 +++++- common/cmd_date.c | 9 +++ common/cmd_dtt.c | 9 +++ common/cmd_i2c.c | 118 ++++++++++++++++++++++++++------------- common/env_eeprom.c | 14 +++++ common/stdio.c | 13 ++++- include/i2c.h | 9 --- 14 files changed, 269 insertions(+), 61 deletions(-)
README +79 -3
@@ -1757,9 +1757,85 @@ The following options need to be configured: on those systems that support this (optional) feature, like the TQM8xxL modules. -- I2C Support: CONFIG_HARD_I2C | CONFIG_SOFT_I2C - - These enable I2C serial bus commands. Defining either of +- I2C Support: CONFIG_SYS_I2C + + This enable the NEW i2c subsystem, and will allow you to use + i2c commands at the u-boot command line (as long as you set + CONFIG_CMD_I2C in CONFIG_COMMANDS) and communicate with i2c + based realtime clock chips or other i2c devices. See + common/cmd_i2c.c for a description of the command line + interface. + + additional defines: + + CONFIG_SYS_NUM_I2C_ADAPTERS + define how many i2c adapters you want to use on your + hardware. If you need only 1 i2c adapter, you can ommit + this define. + + CONFIG_SYS_I2C_ADAPTERS + hold a list of adapters you want to use, for example: + {&soft_i2c_adap[0], &mpc5xxx_i2c_adap[0]} + with this configuration you have one soft_i2c adapter, + and one mpc5xxx i2c adapter. + + No I2C adapters current suppor this new interface. + + You need to define for each adapter a speed and a + slave address. + + CONFIG_SYS_NUM_I2C_BUSSES + Hold the number of i2c busses you want to use. If you + don't use/have i2c muxes on your i2c bus, this + is equal to CONFIG_SYS_NUM_I2C_ADAPTERS, and you can + omit this define. + + CONFIG_SYS_I2C_DIRECT_BUS + define this, if you don't use i2c muxes on your hardware. + if CONFIG_SYS_I2C_MAX_HOPS is not defined or == 0 you can + omit this define. + + CONFIG_SYS_I2C_MAX_HOPS + define how many muxes are maximal consecutively connected + on one i2c bus. + + CONFIG_SYS_I2C_BUSSES + hold a list of busses you want to use, only used if + CONFIG_SYS_I2C_DIRECT_BUS is not defined, for example + a board with CONFIG_SYS_I2C_MAX_HOPS = 1 and + CONFIG_SYS_NUM_I2C_BUSSES = 9: + + CONFIG_SYS_I2C_BUSSES {{0, {I2C_NULL_HOP}}, \ + {0, {{I2C_MUX_PCA9547, 0x70, 1}}}, \ + {0, {{I2C_MUX_PCA9547, 0x70, 2}}}, \ + {0, {{I2C_MUX_PCA9547, 0x70, 3}}}, \ + {0, {{I2C_MUX_PCA9547, 0x70, 4}}}, \ + {0, {{I2C_MUX_PCA9547, 0x70, 5}}}, \ + {1, {I2C_NULL_HOP}}, \ + {1, {{I2C_MUX_PCA9544, 0x72, 1}}}, \ + {1, {{I2C_MUX_PCA9544, 0x72, 2}}}, \ + } + + which defines + bus 0 on adapter 0 without a mux + bus 1 on adapter 0 without a PCA9547 on address 0x70 port 1 + bus 2 on adapter 0 without a PCA9547 on address 0x70 port 2 + bus 3 on adapter 0 without a PCA9547 on address 0x70 port 3 + bus 4 on adapter 0 without a PCA9547 on address 0x70 port 4 + bus 5 on adapter 0 without a PCA9547 on address 0x70 port 5 + bus 6 on adapter 1 without a mux + bus 7 on adapter 1 without a PCA9544 on address 0x72 port 1 + bus 8 on adapter 1 without a PCA9544 on address 0x72 port 2 + +- Legacy I2C Support: CONFIG_HARD_I2C | CONFIG_SOFT_I2C + + NOTE: It is intended to move drivers to CONFIG_SYS_I2C which + provides the following compelling advantages: + 1. Heiko to fill in + + ** Please consider updating your I2C driver now. ** + + These enable legacy I2C serial bus commands. Defining either of (but not both of) CONFIG_HARD_I2C or CONFIG_SOFT_I2C will include the appropriate I2C driver for the selected CPU.
arch/arm/lib/board.c +11 -1
@@ -74,7 +74,8 @@ extern void dataflash_print_info(void);#endif #if defined(CONFIG_HARD_I2C ) || \ - defined(CONFIG_SOFT_I2C ) + defined(CONFIG_SOFT_I2C ) || \ + defined(CONFIG_SYS_I2C )#include <i2c.h> #endif
@@ -174,7 +175,11 @@ static int display_dram_config(void)static int init_func_i2c (void ) {puts ("I2C: " ); +#ifdef CONFIG_SYS_I2C +i2c_init_all (); +#else i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +#endif puts ("ready\n" );return (0 ); }
@@ -559,6 +564,11 @@ void board_init_r(gd_t *id, ulong dest_addr)dataflash_print_info ();#endif +#if defined(CONFIG_SYS_I2C ) && defined(CONFIG_SYS_I2C_ADAPTERS ) +/* Adjust I2C subsystem pointers after relocation */ +i2c_reloc_fixup (); +#endif +/* initialize environment */ env_relocate ();
arch/blackfin/lib/board.c +7 -0
@@ -37,6 +37,10 @@int post_flag;#endif +#if defined(CONFIG_SYS_I2C_ADAPTERS ) +#include <i2c.h> +#endif +DECLARE_GLOBAL_DATA_PTR ; __attribute__((always_inline))
@@ -364,6 +368,9 @@ void board_init_r(gd_t * id, ulong dest_addr)mmc_initialize (bd);#endif +#if defined(CONFIG_SYS_I2C_ADAPTERS ) +i2c_reloc_fixup (); +#endif /* relocate environment function pointers etc. */ env_relocate ();
arch/m68k/lib/board.c +15 -3
@@ -55,7 +55,8 @@#include <version.h> #if defined(CONFIG_HARD_I2C ) || \ - defined(CONFIG_SOFT_I2C ) + defined(CONFIG_SOFT_I2C ) || \ + defined(CONFIG_SYS_I2C_ADAPTERS )#include <i2c.h> #endif
@@ -140,11 +141,16 @@ static int init_func_ram (void)/***********************************************************************/ -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ + || defined(CONFIG_SYS_I2C_ADAPTERS )static int init_func_i2c (void ) {puts ("I2C: " ); +#ifdef CONFIG_SYS_I2C +i2c_init_all (); +#else i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +#endif puts ("ready\n" );return (0 ); }
@@ -176,7 +182,8 @@ init_fnc_t *init_sequence[] = { display_options, checkcpu, checkboard, -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ + || defined(CONFIG_SYS_I2C_ADAPTERS ) init_func_i2c,#endif #if defined(CONFIG_HARD_SPI )
@@ -501,6 +508,11 @@ void board_init_r (gd_t *id, ulong dest_addr)spi_init_r ();#endif +#if defined(CONFIG_SYS_I2C ) && defined(CONFIG_SYS_I2C_ADAPTERS ) +/* Adjust I2C subsystem pointers after relocation */ +i2c_reloc_fixup (); +#endif +/* relocate environment function pointers etc. */ env_relocate ();
arch/mips/lib/board.c +7 -0
@@ -35,6 +35,9 @@#ifdef CONFIG_BITBANGMII #include <miiphy.h> #endif +#if defined(CONFIG_SYS_I2C_ADAPTERS ) +#include <i2c.h> +#endif DECLARE_GLOBAL_DATA_PTR ;
@@ -309,6 +312,10 @@ void board_init_r(gd_t *id, ulong dest_addr)onenand_init ();#endif +#if defined(CONFIG_SYS_I2C_ADAPTERS ) +i2c_reloc_fixup (); +#endif +/* relocate environment function pointers etc. */ env_relocate ();
arch/nds32/lib/board.c +9 -1
@@ -39,6 +39,10 @@DECLARE_GLOBAL_DATA_PTR ; +#if defined(CONFIG_SYS_I2C ) +#include <i2c.h> +#endif +ulong monitor_flash_len;/*
@@ -172,7 +176,7 @@ init_fnc_t *init_sequence[] = {#if defined(CONFIG_DISPLAY_BOARDINFO ) checkboard, /* display board info */#endif -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C ) init_func_i2c, #endif dram_init, /* configure available RAM banks */
@@ -358,6 +362,10 @@ void board_init_r(gd_t *id, ulong dest_addr)mmc_initialize (gd->bd);#endif +#if defined(CONFIG_SYS_I2C_ADAPTERS ) +i2c_reloc_fixup (); +#endif +/* initialize environment */ env_relocate ();
arch/powerpc/cpu/mpc8xx/video.c +4 -0
@@ -809,7 +809,11 @@ static void video_encoder_init (void)/* Initialize the I2C */ debug ("[VIDEO ENCODER] Initializing I2C bus...\n" ); +#ifdef CONFIG_SYS_I2C +i2c_init_all (); +#else i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +#endif #ifdef CONFIG_FADS /* Reset ADV7176 chip */
arch/powerpc/lib/board.c +15 -3
@@ -99,7 +99,8 @@ extern void sc3_read_eeprom(void);void doc_init (void );#endif #if defined(CONFIG_HARD_I2C ) || \ - defined(CONFIG_SOFT_I2C ) + defined(CONFIG_SOFT_I2C ) || \ + defined(CONFIG_SYS_I2C_ADAPTERS )#include <i2c.h> #endif #include <spi.h>
@@ -214,11 +215,16 @@ static int init_func_ram(void)/***********************************************************************/ -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ + || defined(CONFIG_SYS_I2C_ADAPTERS )static int init_func_i2c (void ) {puts ("I2C: " ); +#ifdef CONFIG_SYS_I2C +i2c_init_all (); +#else i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +#endif puts ("ready\n" );return 0 ; }
@@ -317,7 +323,8 @@ init_fnc_t *init_sequence[] = { misc_init_f, #endif INIT_FUNC_WATCHDOG_RESET -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ + || defined(CONFIG_SYS_I2C_ADAPTERS ) init_func_i2c,#endif #if defined(CONFIG_HARD_SPI )
@@ -814,6 +821,11 @@ void board_init_r(gd_t *id, ulong dest_addr)mmc_initialize (bd);#endif +#if defined(CONFIG_SYS_I2C ) && defined(CONFIG_SYS_I2C_ADAPTERS ) +/* Adjust I2C subsystem pointers after relocation */ +i2c_reloc_fixup (); +#endif +/* relocate environment function pointers etc. */ env_relocate ();
common/cmd_date.c +9 -0
@@ -50,8 +50,13 @@ int do_date (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])int old_bus;/* switch to correct I2C bus */ +#ifdef CONFIG_SYS_I2C + old_bus =i2c_get_bus_num (); +i2c_set_bus_num (CONFIG_SYS_RTC_BUS_NUM ); +#else old_bus =I2C_GET_BUS ();I2C_SET_BUS (CONFIG_SYS_RTC_BUS_NUM ); +#endif switch (argc) {case 2 :/* set date & time */
@@ -97,7 +102,11 @@ int do_date (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) }/* switch back to original I2C bus */ +#ifdef CONFIG_SYS_I2C +i2c_set_bus_num (old_bus); +#else I2C_SET_BUS (old_bus); +#endif return rcode; }
common/cmd_dtt.c +9 -0
@@ -69,8 +69,13 @@ int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])/* Force a compilation error, if there are more then 32 sensors */ BUILD_BUG_ON (sizeof (sensors) >32 );/* switch to correct I2C bus */ +#ifdef CONFIG_SYS_I2C + old_bus =i2c_get_bus_num (); +i2c_set_bus_num (CONFIG_SYS_DTT_BUS_NUM ); +#else old_bus =I2C_GET_BUS ();I2C_SET_BUS (CONFIG_SYS_DTT_BUS_NUM ); +#endif _initialize_dtt ();
@@ -82,7 +87,11 @@ int do_dtt (cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])printf ("DTT%d: %i C\n" , i +1 ,dtt_get_temp (sensors[i]));/* switch back to original I2C bus */ +#ifdef CONFIG_SYS_I2C +i2c_set_bus_num (old_bus); +#else I2C_SET_BUS (old_bus); +#endif return 0 ; }/* do_dtt() */
common/cmd_i2c.c +78 -40
216 lines not on this page · raw message
common/env_eeprom.c +14 -0
@@ -49,6 +49,10 @@ static int eeprom_bus_read(unsigned dev_addr, unsigned offset, #if defined(CONFIG_I2C_ENV_EEPROM_BUS) int old_bus = i2c_get_bus_num(); +#if defined(CONFIG_SYS_I2C) + if (old_bus != CONFIG_I2C_ENV_EEPROM_BUS) + i2c_set_bus_num(CONFIG_I2C_ENV_EEPROM_BUS); +#else if (gd->flags & GD_FLG_RELOC) { if (env_eeprom_bus == -1) { I2C_MUX_DEVICE *dev = NULL;
@@ -68,11 +72,16 @@ static int eeprom_bus_read(unsigned dev_addr, unsigned offset, (uchar *)CONFIG_I2C_ENV_EEPROM_BUS); }#endif +#endif rcode =eeprom_read (dev_addr, offset, buffer, cnt);#if defined(CONFIG_I2C_ENV_EEPROM_BUS ) +#if defined(CONFIG_SYS_I2C ) +if (old_bus !=CONFIG_I2C_ENV_EEPROM_BUS ) +#else if (old_bus != env_eeprom_bus) +#endif i2c_set_bus_num (old_bus);#endif return rcode;
@@ -85,8 +94,13 @@ static int eeprom_bus_write(unsigned dev_addr, unsigned offset,#if defined(CONFIG_I2C_ENV_EEPROM_BUS )int old_bus =i2c_get_bus_num (); +#if defined(CONFIG_SYS_I2C ) +if (old_bus !=CONFIG_I2C_ENV_EEPROM_BUS ) +i2c_set_bus_num (CONFIG_I2C_ENV_EEPROM_BUS ); +#else rcode =i2c_mux_ident_muxstring_f ((uchar *)CONFIG_I2C_ENV_EEPROM_BUS );#endif +#endif rcode =eeprom_write (dev_addr, offset, buffer, cnt);#if defined(CONFIG_I2C_ENV_EEPROM_BUS )i2c_set_bus_num (old_bus);
common/stdio.c +12 -1
@@ -1,4 +1,8 @@/* +* Copyright (C) 2009 Sergey Kubushyn <[email protected]> +* +* Changes for multibus/multiadapter I2C support. +* * (C) Copyright 2000 * Paolo Scaffardi, AIRVENT SAM s.p.a - RIMINI(ITALY), arsenio at tin.it *
@@ -30,7 +34,8 @@#ifdef CONFIG_LOGBUFFER #include <logbuff.h> #endif -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ + || defined(CONFIG_SYS_I2C_ADAPTERS )#include <i2c.h> #endif
@@ -211,9 +216,15 @@ int stdio_init (void)#ifdef CONFIG_ARM_DCC_MULTI drv_arm_dcc_init ();#endif +#ifdef CONFIG_SYS_I2C +#ifdef CONFIG_SYS_I2C_ADAPTERS +i2c_init_all (); +#endif +#else #if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C )i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE );#endif +#endif #ifdef CONFIG_LCD drv_lcd_init ();#endif
include/i2c.h +0 -9
@@ -202,15 +202,6 @@ int i2c_mux_ident_muxstring_f (uchar *buf);#ifdef CONFIG_SYS_I2C /* -* Initialization, must be called once on start up, may be called -* repeatedly to change the speed and slave addresses. -*/ -void i2c_init (unsigned int speed,int slaveaddr); -#ifdef CONFIG_SYS_I2C_INIT_BOARD -void i2c_init_board (void ); -#endif - -/* * i2c_get_bus_num: * * Returns index of currently active I2C bus. Zero-based.
Signature · 1 line
1.7.7.6
PATCH 2/3 i2c: common changes for multibus/multiadapter support
m?n 2012-10-22 klockan 19:40 +0200 skrev Heiko Schocher:
README The following options need to be configured: · line 1834
Quoted 5 lines
+- Legacy I2C Support:
CONFIG_HARD_I2C|CONFIG_SOFT_I2CREADME +4
-0+ + NOTE: It is intended to move drivers to CONFIG_SYS_I2C which + provides the following compelling advantages: + 1. Heiko to fill in
Something missing here?
Regards
Henrik
PATCH 2/3 i2c: common changes for multibus/multiadapter support
Hello Henrik Nordstr?m,
Quoted 8 lines · Henrik Nordstr?m
m?n 2012-10-22 klockan 19:40 +0200 skrev Heiko Schocher:
README The following options need to be configured: · line 1834
Quoted 5 lines
+- Legacy I2C Support:
CONFIG_HARD_I2C|CONFIG_SOFT_I2CREADME +4
-0+ + NOTE: It is intended to move drivers to CONFIG_SYS_I2C which + provides the following compelling advantages: + 1. Heiko to fill inSomething missing here?
Oh... this is removed in the 3/3 patch. Update this in the next patchversion, thanks!
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
PATCH 3/3 i2c, soft-i2c: switch to new multibus/multiadapter support
In reply to Heiko Schocher- added to soft_i2c driver new multibus/multiadpater support
- adapted all config files, which uses this driver
--- README | 25 ++++--- arch/arm/lib/board.c | 5 +- arch/m68k/lib/board.c | 9 +-- arch/powerpc/lib/board.c | 10 +-- board/BuS/eb_cpux9k2/cpux9k2.c | 2 +- board/BuS/vl_ma2sc/vl_ma2sc.c | 2 +- board/atc/atc.c | 2 +- board/bluewater/snapper9260/snapper9260.c | 2 +- board/cm5200/cm5200.c | 4 +- board/cpu86/cpu86.c | 2 +- board/cpu87/cpu87.c | 2 +- board/emk/top9000/top9000.c | 8 +- board/eukrea/cpuat91/cpuat91.c | 2 +- board/freescale/m52277evb/README | 2 +- board/freescale/m53017evb/README | 2 +- board/freescale/m5373evb/README | 2 +- board/freescale/m54455evb/README | 2 +- board/freescale/m547xevb/README | 2 +- board/ids8247/ids8247.c | 2 +- board/keymile/common/common.c | 3 +- board/keymile/common/ivm.c | 15 +++- board/keymile/km82xx/km82xx.c | 2 +- board/keymile/km_arm/km_arm.c | 8 +- board/lwmon/lwmon.c | 2 +- board/lwmon/pcmcia.c | 4 +- board/pm826/pm826.c | 2 +- board/pm828/pm828.c | 2 +- board/sacsng/ioconfig.h | 2 +- board/sandburst/karef/karef.c | 1 - board/siemens/SCM/scm.c | 2 +- board/tqc/tqm8260/tqm8260.c | 2 +- board/tqc/tqm8272/tqm8272.c | 2 +- board/tqc/tqm8272/tqm8272.h | 2 +- common/cmd_eeprom.c | 3 +- common/stdio.c | 5 +- drivers/i2c/Makefile | 2 +- drivers/i2c/i2c_core.c | 4 + drivers/i2c/soft_i2c.c | 122 +++++++++++++++++++---------- include/configs/A3000.h | 4 +- include/configs/BSC9131RDB.h | 1 - include/configs/CANBT.h | 4 + include/configs/CPU86.h | 9 +- include/configs/CPU87.h | 9 +- include/configs/DU440.h | 1 - include/configs/GEN860T.h | 36 +++++---- include/configs/HIDDEN_DRAGON.h | 10 ++- include/configs/IAD210.h | 12 ++- include/configs/ICU862.h | 14 ++-- include/configs/IDS8247.h | 10 +- include/configs/IP860.h | 10 +- include/configs/IPHASE4539.h | 12 +-- include/configs/JSE.h | 1 - include/configs/KAREF.h | 1 - include/configs/KUP4K.h | 12 +-- include/configs/KUP4X.h | 14 ++-- include/configs/M5208EVBE.h | 1 - include/configs/M52277EVB.h | 1 - include/configs/M5235EVB.h | 1 - include/configs/M5271EVB.h | 1 - include/configs/M5275EVB.h | 1 - include/configs/M53017EVB.h | 1 - include/configs/M5329EVB.h | 1 - include/configs/M5373EVB.h | 1 - include/configs/M54451EVB.h | 1 - include/configs/M54455EVB.h | 1 - include/configs/M5475EVB.h | 1 - include/configs/M5485EVB.h | 1 - include/configs/METROBOX.h | 1 - include/configs/MHPC.h | 9 +- include/configs/MPC8323ERDB.h | 1 - include/configs/MPC832XEMDS.h | 1 - include/configs/MPC8349EMDS.h | 1 - include/configs/MPC8349ITX.h | 2 - include/configs/MPC8360EMDS.h | 1 - include/configs/MPC8360ERDK.h | 1 - include/configs/MPC837XEMDS.h | 1 - include/configs/MPC837XERDB.h | 1 - include/configs/MPC8536DS.h | 1 - include/configs/MPC8540ADS.h | 1 - include/configs/MPC8541CDS.h | 1 - include/configs/MPC8544DS.h | 1 - include/configs/MPC8548CDS.h | 3 +- include/configs/MPC8555CDS.h | 1 - include/configs/MPC8560ADS.h | 1 - include/configs/MPC8568MDS.h | 1 - include/configs/MPC8569MDS.h | 1 - include/configs/MPC8572DS.h | 1 - include/configs/MPC8610HPCD.h | 1 - include/configs/MPC8641HPCN.h | 1 - include/configs/P1010RDB.h | 1 - include/configs/P1023RDS.h | 1 - include/configs/P1_P2_RDB.h | 1 - include/configs/P2020COME.h | 1 - include/configs/PM826.h | 9 +- include/configs/PM828.h | 9 +- include/configs/PMC440.h | 1 - include/configs/R360MPI.h | 7 ++- include/configs/RPXClassic.h | 16 +++-- include/configs/RPXlite.h | 26 ++++++ include/configs/RRvision.h | 13 +-- include/configs/SBC8540.h | 1 - include/configs/SCM.h | 11 +-- include/configs/SXNI855T.h | 8 +- include/configs/Sandpoint8240.h | 10 ++- include/configs/Sandpoint8245.h | 14 ++- include/configs/TASREG.h | 27 ++++--- include/configs/TK885D.h | 13 +-- include/configs/TOP5200.h | 15 ++-- include/configs/TOP860.h | 11 ++- include/configs/TQM8260.h | 9 +- include/configs/TQM8272.h | 13 ++-- include/configs/TQM834x.h | 1 - include/configs/TQM855M.h | 13 +-- include/configs/TQM866M.h | 13 +-- include/configs/TQM885D.h | 13 +-- include/configs/alpr.h | 1 - include/configs/aria.h | 1 - include/configs/astro_mcf5373l.h | 1 - include/configs/bf533-ezkit.h | 10 ++- include/configs/bf533-stamp.h | 47 ++++++++++- include/configs/bf561-ezkit.h | 9 ++- include/configs/bfin_adi_common.h | 2 +- include/configs/blackstamp.h | 1 - include/configs/cpuat91.h | 1 - include/configs/debris.h | 10 ++- include/configs/eXalion.h | 2 +- include/configs/eb_cpux9k2.h | 14 ++-- include/configs/ep8260.h | 14 ++- include/configs/ethernut5.h | 9 ++- include/configs/ibf-dsp561.h | 5 +- include/configs/iocon.h | 11 ++- include/configs/km/keymile-common.h | 3 - include/configs/km/km83xx-common.h | 3 + include/configs/km/km_arm.h | 26 +++++- include/configs/km82xx.h | 18 +++- include/configs/km_kirkwood.h | 14 ++-- include/configs/korat.h | 1 - include/configs/lwmon.h | 13 +-- include/configs/lwmon5.h | 1 - include/configs/mecp5123.h | 1 - include/configs/mpc5121ads.h | 1 - include/configs/nhk8815.h | 8 ++- include/configs/otc570.h | 18 ++-- include/configs/p1_p2_rdb_pc.h | 1 - include/configs/p3p440.h | 1 - include/configs/pcs440ep.h | 1 - include/configs/pdnb3.h | 11 +-- include/configs/quad100hd.h | 1 - include/configs/s5p_goni.h | 7 +- include/configs/s5pc210_universal.h | 7 +- include/configs/sacsng.h | 12 +-- include/configs/sbc405.h | 1 - include/configs/sbc8349.h | 1 - include/configs/sbc8548.h | 1 - include/configs/sbc8560.h | 1 - include/configs/sbc8641d.h | 1 - include/configs/sc3.h | 1 - include/configs/snapper9260.h | 9 +- include/configs/socrates.h | 1 - include/configs/spc1920.h | 13 +-- include/configs/stxgp3.h | 1 - include/configs/stxssa.h | 1 - include/configs/top9000.h | 10 ++- include/configs/trats.h | 7 +- include/configs/u8500_href.h | 1 - include/configs/uc100.h | 13 +-- include/configs/utx8245.h | 3 +- include/configs/vct.h | 12 ++-- include/configs/vl_ma2sc.h | 7 +- include/configs/vme8349.h | 1 - include/configs/zeus.h | 1 - include/i2c.h | 9 ++ 172 files changed, 619 insertions(+), 496 deletions(-)
README +15 -10
@@ -1779,7 +1779,9 @@ The following options need to be configured: with this configuration you have one soft_i2c adapter, and one mpc5xxx i2c adapter. - No I2C adapters current suppor this new interface. + !! Only the soft i2c adapter currently supports this + new interface. Other i2c adapters should be converted + to it ... You need to define for each adapter a speed and a slave address.
@@ -1818,20 +1820,23 @@ The following options need to be configured: which defines bus 0 on adapter 0 without a mux - bus 1 on adapter 0 without a PCA9547 on address 0x70 port 1 - bus 2 on adapter 0 without a PCA9547 on address 0x70 port 2 - bus 3 on adapter 0 without a PCA9547 on address 0x70 port 3 - bus 4 on adapter 0 without a PCA9547 on address 0x70 port 4 - bus 5 on adapter 0 without a PCA9547 on address 0x70 port 5 + bus 1 on adapter 0 with a PCA9547 on address 0x70 port 1 + bus 2 on adapter 0 with a PCA9547 on address 0x70 port 2 + bus 3 on adapter 0 with a PCA9547 on address 0x70 port 3 + bus 4 on adapter 0 with a PCA9547 on address 0x70 port 4 + bus 5 on adapter 0 with a PCA9547 on address 0x70 port 5 bus 6 on adapter 1 without a mux - bus 7 on adapter 1 without a PCA9544 on address 0x72 port 1 - bus 8 on adapter 1 without a PCA9544 on address 0x72 port 2 + bus 7 on adapter 1 with a PCA9544 on address 0x72 port 1 + bus 8 on adapter 1 with a PCA9544 on address 0x72 port 2 - Legacy I2C Support: CONFIG_HARD_I2C | CONFIG_SOFT_I2C NOTE: It is intended to move drivers to CONFIG_SYS_I2C which provides the following compelling advantages: - 1. Heiko to fill in + + - more than one i2c adapter is usable + - approved multibus support + - better i2c mux support ** Please consider updating your I2C driver now. **
@@ -3222,7 +3227,7 @@ to save the current settings. I2C muxes, you can define here, how to reach this EEPROM. For example: - #define CONFIG_I2C_ENV_EEPROM_BUS "pca9547:70:d\0" + #define CONFIG_I2C_ENV_EEPROM_BUS 1 EEPROM which holds the environment, is reached over a pca9547 i2c mux with address 0x70, channel 3.
arch/arm/lib/board.c +2 -3
@@ -74,7 +74,6 @@ extern void dataflash_print_info(void);#endif #if defined(CONFIG_HARD_I2C ) || \ - defined(CONFIG_SOFT_I2C ) || \ defined(CONFIG_SYS_I2C )#include <i2c.h> #endif
@@ -171,7 +170,7 @@ static int display_dram_config(void)return (0 ); } -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C )static int init_func_i2c (void ) {puts ("I2C: " );
@@ -263,7 +262,7 @@ init_fnc_t *init_sequence[] = {#if defined(CONFIG_DISPLAY_BOARDINFO ) checkboard, /* display board info */#endif -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C ) init_func_i2c, #endif dram_init, /* configure available RAM banks */
arch/m68k/lib/board.c +3 -6
@@ -55,8 +55,7 @@#include <version.h> #if defined(CONFIG_HARD_I2C ) || \ - defined(CONFIG_SOFT_I2C ) || \ - defined(CONFIG_SYS_I2C_ADAPTERS ) + defined(CONFIG_SYS_I2C )#include <i2c.h> #endif
@@ -141,8 +140,7 @@ static int init_func_ram (void)/***********************************************************************/ -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ - || defined(CONFIG_SYS_I2C_ADAPTERS ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C )static int init_func_i2c (void ) {puts ("I2C: " );
@@ -182,8 +180,7 @@ init_fnc_t *init_sequence[] = { display_options, checkcpu, checkboard, -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ - || defined(CONFIG_SYS_I2C_ADAPTERS ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C ) init_func_i2c,#endif #if defined(CONFIG_HARD_SPI )
arch/powerpc/lib/board.c +3 -7
@@ -98,9 +98,7 @@ extern void sc3_read_eeprom(void);#if defined(CONFIG_CMD_DOC )void doc_init (void );#endif -#if defined(CONFIG_HARD_I2C ) || \ - defined(CONFIG_SOFT_I2C ) || \ - defined(CONFIG_SYS_I2C_ADAPTERS ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C )#include <i2c.h> #endif #include <spi.h>
@@ -215,8 +213,7 @@ static int init_func_ram(void)/***********************************************************************/ -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ - || defined(CONFIG_SYS_I2C_ADAPTERS ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C )static int init_func_i2c (void ) {puts ("I2C: " );
@@ -323,8 +320,7 @@ init_fnc_t *init_sequence[] = { misc_init_f, #endif INIT_FUNC_WATCHDOG_RESET -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ - || defined(CONFIG_SYS_I2C_ADAPTERS ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C ) init_func_i2c,#endif #if defined(CONFIG_HARD_SPI )
board/BuS/eb_cpux9k2/cpux9k2.c +1 -1
@@ -288,7 +288,7 @@ int drv_video_init(void) }#endif -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT void i2c_init_board (void ) {
board/BuS/vl_ma2sc/vl_ma2sc.c +1 -1
@@ -323,7 +323,7 @@ int board_eth_init(bd_t *bis)return rc; } -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT void i2c_init_board (void ) {u32 pin;
board/atc/atc.c +1 -1
@@ -170,7 +170,7 @@ 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 */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/bluewater/snapper9260/snapper9260.c +1 -1
@@ -145,7 +145,7 @@ int board_init(void)/* Initialise peripherals */ at91_seriald_hw_init (); -i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +i2c_set_bus_num (0 );nand_hw_init ();macb_hw_init ();
board/cm5200/cm5200.c +2 -2
@@ -326,7 +326,7 @@ int board_early_init_r(void)#ifdef CONFIG_MISC_INIT_R int misc_init_r (void ) { -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C_SOFT )uchar buf[6 ];char str[18 ];char hostname[MODULE_NAME_MAXLEN ];
@@ -349,7 +349,7 @@ int misc_init_r(void)" device at address %02X:%04X\n" ,CONFIG_SYS_I2C_EEPROM , CONFIG_MAC_OFFSET); } -#endif /* defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C) */ +#endif /* defined(CONFIG_HARD_I2C) || defined(CONFIG_SYS_I2C_SOFT) */ if (!getenv ("ethaddr" ))printf (LOG_PREFIX "MAC address not set, networking is not " "operational\n" );
board/cpu86/cpu86.c +1 -1
@@ -161,7 +161,7 @@ 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 */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/cpu87/cpu87.c +1 -1
@@ -163,7 +163,7 @@ 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 */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/emk/top9000/top9000.c +4 -4
@@ -245,7 +245,7 @@ int board_eth_init(bd_t *bis)* However i2c_get_bus_num() cannot be called before * relocation. */ -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT void iic_init (void ) {/* ports are now initialized in board_early_init_f() */
@@ -253,7 +253,7 @@ void iic_init(void)int iic_read (void ) { -switch ((gd->flags &GD_FLG_RELOC ) ?i2c_get_bus_num () :0 ) { +switch (I2C_ADAP_HWNR ) {case 0 :return at91_get_pio_value (I2C0_PORT ,SDA0_PIN );case 1 :
@@ -264,7 +264,7 @@ int iic_read(void)void iic_sda (int bit) { -switch ((gd->flags &GD_FLG_RELOC ) ?i2c_get_bus_num () :0 ) { +switch (I2C_ADAP_HWNR ) {case 0 :at91_set_pio_value (I2C0_PORT ,SDA0_PIN , bit);break ;
@@ -276,7 +276,7 @@ void iic_sda(int bit)void iic_scl (int bit) { -switch ((gd->flags &GD_FLG_RELOC ) ?i2c_get_bus_num () :0 ) { +switch (I2C_ADAP_HWNR ) {case 0 :at91_set_pio_value (I2C0_PORT ,SCL0_PIN , bit);break ;
board/eukrea/cpuat91/cpuat91.c +1 -1
@@ -73,7 +73,7 @@ int board_eth_init(bd_t *bis) }#endif -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT void i2c_init_board (void ) {u32 pin;
board/freescale/m52277evb/README +1 -1
@@ -84,7 +84,7 @@ CONFIG_MCFPIT -- define to use PIT timer CONFIG_FSL_I2C -- define to use FSL common I2C driver CONFIG_HARD_I2C -- define for I2C hardware support -CONFIG_SOFT_I2C -- define for I2C bit-banged +CONFIG_SYS_I2C_SOFT -- define for I2C bit-banged CONFIG_SYS_I2C_SPEED -- define for I2C speed CONFIG_SYS_I2C_SLAVE -- define for I2C slave address CONFIG_SYS_I2C_OFFSET -- define for I2C base address offset
board/freescale/m53017evb/README +1 -1
@@ -92,7 +92,7 @@ CONFIG_MCFPIT -- define to use PIT timer CONFIG_FSL_I2C -- define to use FSL common I2C driver CONFIG_HARD_I2C -- define for I2C hardware support -CONFIG_SOFT_I2C -- define for I2C bit-banged +CONFIG_SYS_I2C_SOFT -- define for I2C bit-banged CONFIG_SYS_I2C_SPEED -- define for I2C speed CONFIG_SYS_I2C_SLAVE -- define for I2C slave address CONFIG_SYS_I2C_OFFSET -- define for I2C base address offset
board/freescale/m5373evb/README +1 -1
@@ -91,7 +91,7 @@ CONFIG_MCFPIT -- define to use PIT timer CONFIG_FSL_I2C -- define to use FSL common I2C driver CONFIG_HARD_I2C -- define for I2C hardware support -CONFIG_SOFT_I2C -- define for I2C bit-banged +CONFIG_SYS_I2C_SOFT -- define for I2C bit-banged CONFIG_SYS_I2C_SPEED -- define for I2C speed CONFIG_SYS_I2C_SLAVE -- define for I2C slave address CONFIG_SYS_I2C_OFFSET -- define for I2C base address offset
board/freescale/m54455evb/README +1 -1
@@ -114,7 +114,7 @@ CONFIG_MCFPIT -- define to use PIT timer CONFIG_FSL_I2C -- define to use FSL common I2C driver CONFIG_HARD_I2C -- define for I2C hardware support -CONFIG_SOFT_I2C -- define for I2C bit-banged +CONFIG_SYS_I2C_SOFT -- define for I2C bit-banged CONFIG_SYS_I2C_SPEED -- define for I2C speed CONFIG_SYS_I2C_SLAVE -- define for I2C slave address CONFIG_SYS_I2C_OFFSET -- define for I2C base address offset
board/freescale/m547xevb/README +1 -1
@@ -99,7 +99,7 @@ CONFIG_SLTTMR -- define to use SLT timer CONFIG_FSL_I2C -- define to use FSL common I2C driver CONFIG_HARD_I2C -- define for I2C hardware support -CONFIG_SOFT_I2C -- define for I2C bit-banged +CONFIG_SYS_I2C_SOFT -- define for I2C bit-banged CONFIG_SYS_I2C_SPEED -- define for I2C speed CONFIG_SYS_I2C_SLAVE -- define for I2C slave address CONFIG_SYS_I2C_OFFSET -- define for I2C base address offset
board/ids8247/ids8247.c +1 -1
@@ -51,7 +51,7 @@ const iop_conf_t iop_conf_tab[4][32] = { /* PA27 */ { 1, 1, 1, 0, 0, 0 }, /* FCC1 RXDV */ /* PA26 */ { 1, 1, 1, 0, 0, 0 }, /* FCC1 RXER */ /* PA25 */ { 0, 0, 0, 0, 1, 0 }, /* 8247_P0 */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PA24 */ { 1, 0, 0, 0, 1, 1 }, /* I2C_SDA2 */ /* PA23 */ { 1, 0, 0, 1, 1, 1 }, /* I2C_SCL2 */ #else /* normal I/O port pins */
board/keymile/common/common.c +2 -1
@@ -38,7 +38,8 @@#include "post.h" #endif #include "common.h" -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_SYS_I2C_ADAPTERS ) || defined(CONFIG_HARD_I2C ) || \ + defined(CONFIG_SYS_I2C_SOFT )#include <i2c.h> #endif
board/keymile/common/ivm.c +10 -5
@@ -306,18 +306,22 @@ int ivm_read_eeprom(void)I2C_MUX_DEVICE *dev =NULL ;#endif uchar i2c_buffer[CONFIG_SYS_IVM_EEPROM_MAX_LEN ]; -uchar *buf; +char *buf;unsigned long dev_addr =CONFIG_SYS_IVM_EEPROM_ADR ;int ret; +#if defined(CONFIG_SYS_I2C) + buf = getenv("EEprom_ivm"); + i2c_set_bus_num(buf ? (int)simple_strtol(buf, NULL, 10) : 0); +#else #if defined(CONFIG_I2C_MUX) /* First init the Bus, select the Bus */ #if defined(CONFIG_SYS_I2C_IVM_BUS) dev = i2c_mux_ident_muxstring((uchar *)CONFIG_SYS_I2C_IVM_BUS); #else - buf = (unsigned char *)getenv ("EEprom_ivm" ); + buf = getenv("EEprom_ivm"); if (buf != NULL) - dev =i2c_mux_ident_muxstring (buf); + dev = i2c_mux_ident_muxstring((unsigned char *)buf); #endif if (dev == NULL) { printf("Error couldnt add Bus for IVM\n");
@@ -325,10 +329,11 @@ int ivm_read_eeprom(void) }i2c_set_bus_num (dev->busid);#endif +#endif /* defined(CONFIG_SYS_I2C) */ - buf = (unsigned char *)getenv ("EEprom_ivm_addr" ); + buf =getenv ("EEprom_ivm_addr" );if (buf !=NULL ) { - ret =strict_strtoul ((char *)buf,16 , &dev_addr); + ret =strict_strtoul (buf,16 , &dev_addr);if (ret !=0 )return -3 ; }
board/keymile/km82xx/km82xx.c +1 -1
@@ -31,7 +31,7 @@#include <libfdt.h> #endif -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C_SOFT )#include <i2c.h> #endif
board/keymile/km_arm/km_arm.c +4 -4
@@ -63,7 +63,7 @@ u32 kwmpp_config[] = { MPP5_NF_IO7, MPP6_SYSRST_OUTn, MPP7_PEX_RST_OUTn, -#if defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_SYS_I2C_SOFT ) MPP8_GPIO, /* SDA */ MPP9_GPIO, /* SCL */#endif
@@ -243,7 +243,7 @@ int misc_init_r(void)int board_early_init_f (void ) { -#if defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_SYS_I2C_SOFT )u32 tmp;/* set the 2 bitbang i2c pins as output gpios */
@@ -274,7 +274,7 @@ int board_init(void)kw_gpio_set_valid (KM_FLASH_GPIO_PIN ,1 );kw_gpio_direction_output (KM_FLASH_GPIO_PIN ,1 ); -#if defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_SYS_I2C_SOFT )/* * Reinit the GPIO for I2C Bitbang driver so that the now * available gpio framework is consistent. The calls to
@@ -454,7 +454,7 @@ int hush_init_var(void) }#endif -#if defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_SYS_I2C_SOFT )void set_sda (int state) {I2C_ACTIVE ;
board/lwmon/lwmon.c +1 -1
@@ -480,7 +480,7 @@ static void kbd_init (void)uchar val, errcd;int i; -i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +i2c_set_bus_num (0 ); gd->kbd_status =0 ;
board/lwmon/pcmcia.c +2 -2
@@ -104,7 +104,7 @@ int pcmcia_hardware_enable(int slot)/* switch VCC on */ val |=MAX1604_OP_SUS |MAX1604_VCCBON ; -i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +i2c_set_bus_num (0 );i2c_write (CONFIG_SYS_I2C_POWER_A_ADDR ,0 ,0 , &val,1 );udelay (500000 );
@@ -193,7 +193,7 @@ int pcmcia_voltage_set(int slot, int vcc, int vpp)*/ debug ("PCMCIA power OFF\n" ); val =MAX1604_VCCBHIZ |MAX1604_VPPBHIZ ; -i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE ); +i2c_set_bus_num (0 );i2c_write (CONFIG_SYS_I2C_POWER_A_ADDR ,0 ,0 , &val,1 ); val =0 ;
board/pm826/pm826.c +1 -1
@@ -169,7 +169,7 @@ const iop_conf_t iop_conf_tab[4][32] = { /* PD18 */ { 0, 0, 0, 1, 0, 0 }, /* PD18 */ /* PD17 */ { 0, 1, 0, 0, 0, 0 }, /* PD17 */ /* PD16 */ { 0, 1, 0, 1, 0, 0 }, /* PD16 */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/pm828/pm828.c +1 -1
@@ -169,7 +169,7 @@ const iop_conf_t iop_conf_tab[4][32] = { /* PD18 */ { 0, 0, 0, 1, 0, 0 }, /* PD18 */ /* PD17 */ { 0, 1, 0, 0, 0, 0 }, /* PD17 */ /* PD16 */ { 0, 1, 0, 1, 0, 0 }, /* PD16 */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/sacsng/ioconfig.h +1 -1
@@ -187,7 +187,7 @@ const iop_conf_t iop_conf_tab[4][32] = { /* PD17 */ { CONF, SPEC, 1, DOUT, ACTV, 0 }, /* SPI_MOSI */ /* PD16 */ { CONF, SPEC, 1, DIN, ACTV, 0 }, /* SPI_MISO */ #endif -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { CONF, GPIO, 0, DOUT, OPEN, 1 }, /* I2C_SDA */ /* PD14 */ { CONF, GPIO, 0, DOUT, ACTV, 1 }, /* I2C_SCL */ #else
board/sandburst/karef/karef.c +0 -1
@@ -32,7 +32,6 @@#include <spd_sdram.h> #include <i2c.h> #include "../common/sb_common.h" -#include "../common/ppc440gx_i2c.h" #if defined(CONFIG_HAS_ETH0 ) || defined(CONFIG_HAS_ETH1 ) || \ defined(CONFIG_HAS_ETH2 ) || defined(CONFIG_HAS_ETH3 )#include <net.h>
board/siemens/SCM/scm.c +1 -1
@@ -174,7 +174,7 @@ const iop_conf_t iop_conf_tab[4][32] = { /* PD18 */ { 1, 1, 1, 0, 0, 0 }, /* SPI SPICLK */ /* PD17 */ { 1, 1, 1, 0, 0, 0 }, /* SPI SPIMOSI */ /* PD16 */ { 1, 1, 1, 0, 0, 0 }, /* SPI SPIMOSO */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/tqc/tqm8260/tqm8260.c +1 -1
@@ -160,7 +160,7 @@ const iop_conf_t iop_conf_tab[4][32] = { /* PD18 */ { 0, 0, 0, 1, 0, 0 }, /* PD19 */ /* PD17 */ { 0, 1, 0, 0, 0, 0 }, /* FCC1 ATMRXPRTY */ /* PD16 */ { 0, 1, 0, 1, 0, 0 }, /* FCC1 ATMTXPRTY */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/tqc/tqm8272/tqm8272.c +1 -1
@@ -180,7 +180,7 @@ const iop_conf_t iop_conf_tab[4][32] = { /* PD18 */ { 0, 0, 0, 1, 0, 0 }, /* PD19 */ /* PD17 */ { 0, 1, 0, 0, 0, 0 }, /* FCC1 ATMRXPRTY */ /* PD16 */ { 0, 1, 0, 1, 0, 0 }, /* FCC1 ATMTXPRTY */ -#if defined(CONFIG_SOFT_I2C) +#if defined(CONFIG_SYS_I2C_SOFT) /* PD15 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SDA */ /* PD14 */ { 1, 0, 0, 1, 1, 1 }, /* I2C SCL */ #else
board/tqc/tqm8272/tqm8272.h +1 -1
@@ -50,4 +50,4 @@ typedef struct{static HWIB_INFO hwinf = {0 ,0 ,1 ,0 ,1 ,0 ,0 ,0 ,0 ,8272 ,0 ,0 ,0 ,0 ,0 ,0 ,0 ,0 }; -#endif +#endif /* __CONFIG_H */
common/cmd_eeprom.c +1 -2
@@ -406,8 +406,7 @@ void eeprom_init (void)#if defined(CONFIG_SPI ) && !defined(CONFIG_ENV_EEPROM_IS_ON_I2C )spi_init_f ();#endif -#if defined(CONFIG_HARD_I2C ) || \ - defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C_SOFT )i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE );#endif }
common/stdio.c +2 -3
@@ -34,8 +34,7 @@#ifdef CONFIG_LOGBUFFER #include <logbuff.h> #endif -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) \ - || defined(CONFIG_SYS_I2C_ADAPTERS ) +#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C )#include <i2c.h> #endif
@@ -221,7 +220,7 @@ int stdio_init (void)i2c_init_all ();#endif #else -#if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_HARD_I2C )i2c_init (CONFIG_SYS_I2C_SPEED ,CONFIG_SYS_I2C_SLAVE );#endif #endif
drivers/i2c/Makefile +1 -1
@@ -40,13 +40,13 @@ COBJS-$(CONFIG_PCA9564_I2C) += pca9564_i2c.o COBJS-$(CONFIG_PPC4XX_I2C) += ppc4xx_i2c.o COBJS-$(CONFIG_DRIVER_S3C24X0_I2C) += s3c24x0_i2c.o COBJS-$(CONFIG_S3C44B0_I2C) += s3c44b0_i2c.o -COBJS-$(CONFIG_SOFT_I2C) += soft_i2c.o COBJS-$(CONFIG_TEGRA_I2C) += tegra_i2c.o COBJS-$(CONFIG_TSI108_I2C) += tsi108_i2c.o COBJS-$(CONFIG_U8500_I2C) += u8500_i2c.o COBJS-$(CONFIG_SH_I2C) += sh_i2c.o COBJS-$(CONFIG_SH_SH7734_I2C) += sh_sh7734_i2c.o COBJS-$(CONFIG_SYS_I2C) += i2c_core.o +COBJS-$(CONFIG_SYS_I2C_SOFT) += soft_i2c.o COBJS := $(COBJS-y) SRCS := $(COBJS:.o=.c)
drivers/i2c/i2c_core.c +4 -0
@@ -6,6 +6,10 @@#include <common.h> #include <i2c.h> +#ifdef CONFIG_SYS_I2C_SOFT +extern struct i2c_adapter soft_i2c_adap[]; +#endif +struct i2c_adapter *i2c_adap[CONFIG_SYS_NUM_I2C_ADAPTERS ] =CONFIG_SYS_I2C_ADAPTERS ;
drivers/i2c/soft_i2c.c +79 -43
177 lines not on this page · raw message
include/configs/A3000.h +2 -2
@@ -86,8 +86,8 @@* PCI stuff *----------------------------------------------------------------------- */ -#define CONFIG_HARD_I2C 1/* To enable I2C support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ +#define CONFIG_HARD_I2C 1/* To enable I2C support */ +#undef CONFIG_SYS_I2C_SOFT/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/BSC9131RDB.h +0 -1
@@ -241,7 +241,6 @@ extern unsigned long get_sdram_size(void);#define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_I2C_CMD_TREE #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address*/
include/configs/CANBT.h +4 -0
@@ -180,6 +180,10 @@/*----------------------------------------------------------------------- * I2C EEPROM (CAT24WC08) for environment */ +#if 0 /* Does not appear to be used?! If it is used, needs to be fixed */ +#define CONFIG_SYS_I2C_SOFT /* Software I2C support enabled */ +#endif +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* Bytes of address */ #define CONFIG_HARD_I2C /* I2C with hardware support */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */
include/configs/CPU86.h +5 -4
@@ -129,10 +129,11 @@/*----------------------------------------------------------------------- * I2C/EEPROM/RTC configuration */ -#define CONFIG_SOFT_I2C /* Software I2C support enabled */ - -# define CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xFE +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
include/configs/CPU87.h +5 -4
@@ -133,10 +133,11 @@/*----------------------------------------------------------------------- * I2C/EEPROM/RTC configuration */ -#define CONFIG_SOFT_I2C /* Software I2C support enabled */ - -# define CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xFE +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
include/configs/DU440.h +0 -1
@@ -171,7 +171,6 @@* I2C */ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 100000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/GEN860T.h +20 -16
@@ -163,26 +163,30 @@/* * Enable I2C and select the hardware/software driver */ -#define CONFIG_HARD_I2C 1/* CPM based I2C */ -#undef CONFIG_SOFT_I2C/* Bit-banged I2C */ +#define CONFIG_HARD_I2C 1/* CPM based I2C */ +#undef CONFIG_SYS_I2C_SOFT/* Bit-banged I2C */ #ifdef CONFIG_HARD_I2C -#define CONFIG_SYS_I2C_SPEED 100000/* clock speed in Hz */ -#define CONFIG_SYS_I2C_SLAVE 0xFE/* I2C slave address */ +#define CONFIG_SYS_I2C_SPEED 100000/* clock speed in Hz */ +#define CONFIG_SYS_I2C_SLAVE 0xFE/* I2C slave address */ #endif -#ifdef CONFIG_SOFT_I2C -#define PB_SCL 0x00000020/* PB 26 */ -#define PB_SDA 0x00000010/* PB 27 */ -#define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL) -#define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA) -#define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) -#define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) -#define I2C_SDA (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \ - else immr->im_cpm.cp_pbdat &= ~PB_SDA -#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ - else immr->im_cpm.cp_pbdat &= ~PB_SCL -#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ +#ifdef CONFIG_SYS_I2C_SOFT +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +#define PB_SCL 0x00000020/* PB 26 */ +#define PB_SDA 0x00000010/* PB 27 */ +#define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL) +#define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA) +#define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) +#define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) +#define I2C_SDA (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \ + else immr->im_cpm.cp_pbdat &= ~PB_SDA +#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ + else immr->im_cpm.cp_pbdat &= ~PB_SCL +#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ #endif /*
include/configs/HIDDEN_DRAGON.h +7 -3
@@ -168,12 +168,16 @@* configuration items that the driver uses to drive the port pins. */ #define CONFIG_HARD_I2C 1/* To enable I2C support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ +#undef CONFIG_SYS_I2C_SOFT/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT #error "Soft I2C is not configured properly. Please review!" +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#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)
@@ -183,7 +187,7 @@#define I2C_SCL (bit) if(bit) iop->pdat |= 0x00020000; \ else iop->pdat &= ~0x00020000#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ +#endif /* CONFIG_SYS_I2C_SOFT */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x57/* EEPROM IS24C02 */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* Bytes of address */
include/configs/IAD210.h +7 -5
@@ -111,11 +111,11 @@#define CONFIG_DOS_PARTITION /* 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 CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xDD -# define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xDD +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -134,6 +134,8 @@#define CONFIG_RTC_MPC8xx/* use internal RTC of MPC8xx */ +#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 +/* * Command line configuration.
include/configs/ICU862.h +8 -6
@@ -106,12 +106,11 @@#define CONFIG_DOS_PARTITION /* 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 CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xFE -# define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 -# define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* Bytes of address */ +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -133,6 +132,9 @@#define CONFIG_RTC_MPC8xx/* use internal RTC of MPC8xx */ +#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50 +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* Bytes of address */ +/* * Command line configuration.
include/configs/IDS8247.h +5 -5
@@ -73,11 +73,11 @@#define CONFIG_MISC_INIT_R 1/* 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 CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F - +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
include/configs/IP860.h +5 -5
@@ -62,8 +62,11 @@/* 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 CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -80,9 +83,6 @@ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ - -# define CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xFE# define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM X24C16 */ # define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* bytes of address */ /* mask of address bits that overflow into the "EEPROM chip address" */
include/configs/IPHASE4539.h +5 -7
@@ -110,15 +110,14 @@* If the software driver is chosen, there are some additional * configuration items that the driver uses to drive the port pins. */ -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C 1/* I2C bit-banged */ -#define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F - +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */ -#ifdef CONFIG_SOFT_I2C #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)
@@ -128,7 +127,6 @@#define I2C_SCL (bit) if(bit) iop->pdat |= 0x00020000; \ else iop->pdat &= ~0x00020000#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ /*
include/configs/JSE.h +0 -1
@@ -211,7 +211,6 @@#define CONFIG_SYS_HZ 1000/* decrementer freq: 1 ms ticks */ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/KAREF.h +0 -1
@@ -134,7 +134,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C hardware support */ -#undef CONFIG_SOFT_I2C/* I2C !bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed 400kHz */ #define CONFIG_SYS_I2C_SLAVE 0x7F/* I2C slave address */
include/configs/KUP4K.h +5 -7
@@ -106,13 +106,12 @@/* * enable I2C and select the hardware/software driver */ -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C /* I2C bit-banged */ +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} -#define CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C /* * Software (bit-bang) I2C driver configuration */
@@ -128,7 +127,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ /*----------------------------------------------------------------------- * I2C Configuration
include/configs/KUP4X.h +7 -7
@@ -114,13 +114,13 @@/* * 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 CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ -#define CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -136,7 +136,7 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ +#endif /* CONFIG_SYS_I2C_SOFT */ /*-----------------------------------------------------------------------
include/configs/M5208EVBE.h +0 -1
@@ -84,7 +84,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/M52277EVB.h +0 -1
@@ -147,7 +147,6 @@/* I2c */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/M5235EVB.h +0 -1
@@ -101,7 +101,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x00000300
include/configs/M5271EVB.h +0 -1
@@ -111,7 +111,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x00000300
include/configs/M5275EVB.h +0 -1
@@ -111,7 +111,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C#define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x00000300
include/configs/M53017EVB.h +0 -1
@@ -103,7 +103,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/M5329EVB.h +0 -1
@@ -97,7 +97,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/M5373EVB.h +0 -1
@@ -97,7 +97,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/M54451EVB.h +0 -1
@@ -158,7 +158,6 @@/* I2c */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/M54455EVB.h +0 -1
@@ -191,7 +191,6 @@/* I2c */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/M5475EVB.h +0 -1
@@ -122,7 +122,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x00008F00
include/configs/M5485EVB.h +0 -1
@@ -119,7 +119,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x00008F00
include/configs/METROBOX.h +0 -1
@@ -196,7 +196,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C hardware support */ -#undef CONFIG_SOFT_I2C/* I2C !bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed 400kHz */ #define CONFIG_SYS_I2C_SLAVE 0x7F/* I2C slave address */
include/configs/MHPC.h +5 -4
@@ -73,8 +73,11 @@#undef CONFIG_UCODE_PATCH/* 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 CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -91,8 +94,6 @@ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -#define CONFIG_SYS_I2C_SPEED 50000 -#define CONFIG_SYS_I2C_SLAVE 0xFE#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM X24C04 */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* bytes of address */ /* mask of address bits that overflow into the "EEPROM chip address" */
include/configs/MPC8323ERDB.h +0 -1
@@ -234,7 +234,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC832XEMDS.h +0 -1
@@ -327,7 +327,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC8349EMDS.h +0 -1
@@ -355,7 +355,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */
include/configs/MPC8349ITX.h +0 -2
@@ -131,8 +131,6 @@#define I2C_8574_PCI66 0x20/* 0=33MHz PCI, 1=66MHz PCI */ #define I2C_8574_FLASHSIDE 0x40/* 0=Reset vector from U4, 1=from U7*/ -#undef CONFIG_SOFT_I2C -#endif /* Compact Flash */
include/configs/MPC8360EMDS.h +0 -1
@@ -424,7 +424,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC8360ERDK.h +0 -1
@@ -288,7 +288,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */
include/configs/MPC837XEMDS.h +0 -1
@@ -342,7 +342,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC837XERDB.h +0 -1
@@ -368,7 +368,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC8536DS.h +0 -1
@@ -435,7 +435,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC8540ADS.h +0 -1
@@ -261,7 +261,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/MPC8541CDS.h +0 -1
@@ -284,7 +284,6 @@ extern unsigned long get_clock_freq(void);*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/MPC8544DS.h +0 -1
@@ -233,7 +233,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);/* I2C */ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x57#define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC8548CDS.h +1 -2
@@ -359,8 +359,7 @@ extern unsigned long get_clock_freq(void);*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ -#define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ +#define CONFIG_SYS_I2C_SPEED 400000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */ #define CONFIG_SYS_I2C_OFFSET 0x3000
include/configs/MPC8555CDS.h +0 -1
@@ -282,7 +282,6 @@ extern unsigned long get_clock_freq(void);*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/MPC8560ADS.h +0 -1
@@ -255,7 +255,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/MPC8568MDS.h +0 -1
@@ -267,7 +267,6 @@ extern unsigned long get_clock_freq(void);*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x52
include/configs/MPC8569MDS.h +0 -1
@@ -303,7 +303,6 @@ extern unsigned long get_clock_freq(void);*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/MPC8572DS.h +0 -1
@@ -432,7 +432,6 @@/* I2C */ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x57
include/configs/MPC8610HPCD.h +0 -1
@@ -253,7 +253,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/MPC8641HPCN.h +0 -1
@@ -300,7 +300,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/P1010RDB.h +0 -1
@@ -477,7 +477,6 @@ extern unsigned long get_sdram_size(void);#define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_I2C_CMD_TREE #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address*/
include/configs/P1023RDS.h +0 -1
@@ -314,7 +314,6 @@ extern unsigned long get_clock_freq(void);/* I2C */ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x51
include/configs/P1_P2_RDB.h +0 -1
@@ -368,7 +368,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);/* I2C */ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_I2C_CMD_TREE #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address*/
include/configs/P2020COME.h +0 -1
@@ -226,7 +226,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);/* I2C */ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_I2C_CMD_TREE #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address*/
include/configs/PM826.h +5 -4
@@ -57,10 +57,11 @@ "bootm"/* enable I2C and select the hardware/software driver */ -#undef CONFIG_HARD_I2C -#define CONFIG_SOFT_I2C 1/* I2C bit-banged */ -# define CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xFE +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
include/configs/PM828.h +5 -4
@@ -57,10 +57,11 @@ "bootm"/* enable I2C and select the hardware/software driver */ -#undef CONFIG_HARD_I2C -#define CONFIG_SOFT_I2C 1/* I2C bit-banged */ -# define CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xFE +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
include/configs/PMC440.h +0 -1
@@ -226,7 +226,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/R360MPI.h +6 -1
@@ -96,10 +96,14 @@#define CONFIG_RTC_MPC8xx/* use internal RTC of MPC8xx */ #define CONFIG_HARD_I2C 1/* To I2C with hardware support */ -#undef CONFIG_SORT_I2C/* To I2C with software support */ +#undef CONFIG_SYS_I2C_SOFT/* To I2C with software support */ #define CONFIG_SYS_I2C_SPEED 4700/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F +#if defined(CONFIG_SYS_I2C_SOFT ) +#define CONFIG_SYS_SYS_I2C_SOFT_SPEED 4700/* I2C speed and slave address */ +#define CONFIG_SYS_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -115,6 +119,7 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(50) +#endif /* #define(CONFIG_SYS_I2C_SOFT) */ #define CONFIG_SYS_I2C_LCD_ADDR 0x8/* LCD Control */ #define CONFIG_SYS_I2C_KEY_ADDR 0x9/* Keyboard coprocessor */
include/configs/RPXClassic.h +10 -6
@@ -148,14 +148,16 @@* I2C Configuration *----------------------------------------------------------------------------- */ -#define CONFIG_I2C 1 -#define CONFIG_SYS_I2C_SPEED 50000 -#define CONFIG_SYS_I2C_SLAVE 0x34 +#define CONFIG_SYS_I2C_SPEED 50000 +#define CONFIG_SYS_I2C_SLAVE 0x34/* enable I2C and select the hardware/software driver */ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ +#undef CONFIG_SYS_I2C_SOFT/* I2C bit-banged */ + +#if defined(CONFIG_SYS_I2C_SOFT ) +#define CONFIG_SYS_I2C 1/* * Software (bit-bang) I2C driver configuration */
@@ -170,8 +172,10 @@#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -# define CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0x34 +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x34 +#endif +# define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM X24C16 */ # define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* bytes of address */ /* mask of address bits that overflow into the "EEPROM chip address" */
include/configs/RPXlite.h +26 -0
@@ -62,6 +62,32 @@#undef CONFIG_SYS_LOADS_BAUD_CHANGE/* don't allow baudrate change */ #define CONFIG_BZIP2 /* Include support for bzip2 compressed images */ + +/* enable I2C and select the hardware/software driver */ +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 40000/* 40 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +/* Software (bit-bang) I2C driver configuration */ +#define PB_SCL 0x00000020/* PB 26 */ +#define PB_SDA 0x00000010/* PB 27 */ + +#define I2C_INIT (immr->im_cpm.cp_pbdir |= PB_SCL) +#define I2C_ACTIVE (immr->im_cpm.cp_pbdir |= PB_SDA) +#define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA) +#define I2C_READ ((immr->im_cpm.cp_pbdat & PB_SDA) != 0) +#define I2C_SDA (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; \ + else immr->im_cpm.cp_pbdat &= ~PB_SDA +#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ + else immr->im_cpm.cp_pbdat &= ~PB_SCL +#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ + +/* M41T11 Serial Access Timekeeper(R) SRAM */ +#define CONFIG_RTC_M41T11 1 +#define CONFIG_SYS_I2C_RTC_ADDR 0x68 +#define CONFIG_SYS_M41T11_BASE_YEAR 1900/* play along with the linux driver */ +#undef CONFIG_WATCHDOG/* watchdog disabled */ /*
include/configs/RRvision.h +5 -8
@@ -120,13 +120,11 @@#endif /* enable I2C and select the hardware/software driver */ -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C /* I2C bit-banged */ - -# define CONFIG_SYS_I2C_SPEED 50000/* 50 kHz is supposed to work */ -# define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -142,7 +140,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(1)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ /*
include/configs/SBC8540.h +0 -1
@@ -223,7 +223,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/SCM.h +5 -6
@@ -75,15 +75,14 @@ "bootm"/* 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 CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F - +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * 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)
include/configs/SXNI855T.h +5 -3
@@ -121,7 +121,11 @@#define CONFIG_RTC_DS1306 /* Dallas 1306 real time clock */ -#define CONFIG_SOFT_I2C /* I2C bit-banged */ +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -138,8 +142,6 @@ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -# define CONFIG_SYS_I2C_SPEED 50000 -# define CONFIG_SYS_I2C_SLAVE 0xFE# define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* Atmel 24C64 */ # define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2/* two byte address */
include/configs/Sandpoint8240.h +7 -3
@@ -202,12 +202,16 @@* configuration items that the driver uses to drive the port pins. */ #define CONFIG_HARD_I2C 1/* To enable I2C support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ +#undef CONFIG_SYS_I2C_SOFT/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT #error "Soft I2C is not configured properly. Please review!" +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#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)
@@ -217,7 +221,7 @@#define I2C_SCL (bit) if(bit) iop->pdat |= 0x00020000; \ else iop->pdat &= ~0x00020000#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ +#endif /* CONFIG_SYS_I2C_SOFT */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x57/* EEPROM IS24C02 */
include/configs/Sandpoint8245.h +9 -5
@@ -172,12 +172,16 @@* configuration items that the driver uses to drive the port pins. */ #define CONFIG_HARD_I2C 1/* To enable I2C support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ -#define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F +#undef CONFIG_SYS_I2C_SOFT/* I2C bit-banged */ +#define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ +#define CONFIG_SYS_I2C_SLAVE 0x7F -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT #error "Soft I2C is not configured properly. Please review!" +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#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)
@@ -187,7 +191,7 @@#define I2C_SCL (bit) if(bit) iop->pdat |= 0x00020000; \ else iop->pdat &= ~0x00020000#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ +#endif /* CONFIG_SYS_I2C_SOFT */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x57/* EEPROM IS24C02 */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* Bytes of address */
include/configs/TASREG.h +14 -13
@@ -136,19 +136,12 @@/*----------------------------------------------------------------------- * I2C */ -#define CONFIG_SOFT_I2C -#define CONFIG_SYS_I2C_SPEED 100000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F -#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM CAT28WC32 */ -#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2/* Bytes of address */ -/* mask of address bits that overflow into the "EEPROM chip address" */ -#define CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW 0x01 -#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 5/* The Catalyst CAT24WC32 has */ -/* 32 byte page write mode using*/ -/* last 5 bits of the address */ -#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10/* and takes up to 10 msec */ +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 100000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} -#if defined (CONFIG_SOFT_I2C )#if 0 /* push-pull */ #define SDA 0x00800000#define SCL 0x00000008
@@ -182,7 +175,15 @@#define I2C_ACTIVE {DIR1|=SDA;}#define I2C_TRISTATE {DIR1&=~SDA;}#endif -#endif + +#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM CAT28WC32 */ +#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2/* Bytes of address */ +/* mask of address bits that overflow into the "EEPROM chip address" */ +#define CONFIG_SYS_I2C_EEPROM_ADDR_OVERFLOW 0x01 +#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 5/* The Catalyst CAT24WC32 has */ +/* 32 byte page write mode using*/ +/* last 5 bits of the address */ +#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 10/* and takes up to 10 msec */ /*----------------------------------------------------------------------- * Definitions for initial stack pointer and data area (in DPRAM)
include/configs/TK885D.h +5 -8
@@ -104,13 +104,11 @@#undef CONFIG_CAN_DRIVER/* CAN Driver support disabled */ /* 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 CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -126,7 +124,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM AT24C?? */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2/* two byte address */
include/configs/TOP5200.h +9 -6
@@ -200,10 +200,14 @@#define CONFIG_ENV_OVERWRITE #define CONFIG_MISC_INIT_R -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C 1/* I2C with softwate support */ - -#if defined (CONFIG_SOFT_I2C ) +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ + +#if defined(CONFIG_SYS_I2C_SOFT ) +# define CONFIG_SYS_I2C +# define CONFIG_SYS_I2C_SOFT_SPEED 100000 +# define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +# define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +/**/ # define SDA0 0x40# define SCL0 0x80# define GPIOE0 *((volatile uchar*)(CONFIG_SYS_MBAR+0x0c00))
@@ -218,8 +222,7 @@# define I2C_DELAY {udelay(5);}# define I2C_ACTIVE {DDR0|=SDA0;}# define I2C_TRISTATE {DDR0&=~SDA0;} -# define CONFIG_SYS_I2C_SPEED 100000 -# define CONFIG_SYS_I2C_SLAVE 0x7F +#define CONFIG_SYS_I2C_EEPROM_ADDR 0x57#define CONFIG_SYS_I2C_FACT_ADDR 0x57#endif
include/configs/TOP860.h +6 -5
@@ -159,7 +159,6 @@* Environment handler * only the first 6k in EEPROM are available for user. Of that we use 256b */ -#define CONFIG_SOFT_I2C #define CONFIG_ENV_IS_IN_EEPROM 1/* turn on EEPROM env feature */ #define CONFIG_ENV_OFFSET 0x1000#define CONFIG_ENV_SIZE 0x0700
@@ -170,13 +169,16 @@#define CONFIG_SYS_EEPROM_PAGE_WRITE_BITS 3#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2#define CONFIG_SYS_EEPROM_SIZE 0x2000 -#define CONFIG_SYS_I2C_SPEED 100000 -#define CONFIG_SYS_I2C_SLAVE 0xFE#define CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS 12#define CONFIG_ENV_OVERWRITE #define CONFIG_MISC_INIT_R -#if defined (CONFIG_SOFT_I2C ) +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 100000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +/**/ #define SDA 0x00010#define SCL 0x00020#define __I2C_DIR immr->im_cpm.cp_pbdir
@@ -193,7 +195,6 @@#define I2C_DELAY { udelay(5); }#define I2C_ACTIVE { __I2C_DIR |= SDA; }#define I2C_TRISTATE { __I2C_DIR &= ~SDA; } -#endif #define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200, 230400 }
include/configs/TQM8260.h +5 -4
@@ -89,10 +89,11 @@#define CONFIG_BOOTCOMMAND "run flash_self"/* 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 CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration
include/configs/TQM8272.h +7 -6
@@ -97,11 +97,11 @@#if CONFIG_I2C /* 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 CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F - +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -135,8 +135,9 @@#define CONFIG_SYS_DTT_HYSTERESIS 3#else +#undef CONFIG_SYS_I2C#undef CONFIG_HARD_I2C -#undef CONFIG_SOFT_I2C +#undef CONFIG_SYS_I2C_SOFT#endif /*
include/configs/TQM834x.h +0 -1
@@ -188,7 +188,6 @@* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed: 400KHz */ #define CONFIG_SYS_I2C_SLAVE 0x7F/* slave address */
include/configs/TQM855M.h +5 -8
@@ -93,13 +93,11 @@#undef CONFIG_CAN_DRIVER/* CAN Driver support disabled */ /* 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 CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -115,7 +113,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM AT24C64 */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2/* two byte address */
include/configs/TQM866M.h +5 -8
@@ -107,13 +107,11 @@#undef CONFIG_CAN_DRIVER/* CAN Driver support disabled */ /* 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 CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -129,7 +127,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM AT24C256 */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2/* two byte address */
include/configs/TQM885D.h +5 -8
@@ -101,13 +101,11 @@#undef CONFIG_CAN_DRIVER/* CAN Driver support disabled */ /* 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 CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -123,7 +121,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50/* EEPROM AT24C?? */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 2/* two byte address */
include/configs/alpr.h +0 -1
@@ -122,7 +122,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 100000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/aria.h +0 -1
@@ -366,7 +366,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* so disable bit-banged I2C */ #define CONFIG_I2C_MULTI_BUS /* I2C speed and slave address */
include/configs/astro_mcf5373l.h +0 -1
@@ -118,7 +118,6 @@/* I2C */ #define CONFIG_FSL_I2C #define CONFIG_HARD_I2C /* I2C with hw support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 80000#define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x58000
include/configs/bf533-ezkit.h +8 -2
@@ -94,10 +94,16 @@/* * I2C Settings */ -#define CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C_SOFT +#ifdef CONFIG_SYS_I2C_SOFT +#define CONFIG_SYS_I2C #define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF0#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF1 - +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0 +#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +#endif /* * Misc Settings
include/configs/bf533-stamp.h +42 -5
79 lines not on this page · raw message
include/configs/bf561-ezkit.h +7 -2
@@ -88,10 +88,15 @@/* * I2C Settings */ -#define CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C_SOFT +#ifdef CONFIG_SYS_I2C_SOFT #define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF0#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF1 - +#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0 +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +#endif /* * Misc Settings
include/configs/bfin_adi_common.h +1 -1
@@ -71,7 +71,7 @@# ifdef CONFIG_SPI_FLASH # define CONFIG_CMD_SF # endif -# if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SOFT_I2C ) +# if defined(CONFIG_HARD_I2C ) || defined(CONFIG_SYS_I2C_SOFT )# define CONFIG_CMD_I2C # define CONFIG_SOFT_I2C_READ_REPEATED_START # endif
include/configs/blackstamp.h +0 -1
@@ -40,7 +40,6 @@#define SHARED_RESOURCES 1/* Is I2C bit-banged? */ -#undef CONFIG_SOFT_I2/* * Clock Settings
include/configs/cpuat91.h +0 -1
@@ -92,7 +92,6 @@#define CONFIG_USART_ID 0/* ignored in arm */ #undef CONFIG_HARD_I2C -#undef CONFIG_SOFT_I2C#define AT91_PIN_SDA (1<<25)#define AT91_PIN_SCL (1<<26)
include/configs/debris.h +7 -3
@@ -272,12 +272,16 @@* configuration items that the driver uses to drive the port pins. */ #define CONFIG_HARD_I2C 1/* To enable I2C support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ +#undef CONFIG_SYS_I2C_SOFT/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT #error "Soft I2C is not configured properly. Please review!" +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#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)
@@ -287,7 +291,7 @@#define I2C_SCL (bit) if(bit) iop->pdat |= 0x00020000; \ else iop->pdat &= ~0x00020000#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ +#endif /* CONFIG_SYS_I2C_SOFT */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x57/* EEPROM IS24C02 */ #define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1/* Bytes of address */
include/configs/eXalion.h +1 -1
@@ -223,7 +223,7 @@* configuration items that the driver uses to drive the port pins. */ #define CONFIG_HARD_I2C 1/* To enable I2C support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ +#undef CONFIG_SYS_I2C_SOFT/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/eb_cpux9k2.h +6 -8
@@ -220,11 +220,11 @@* I2C-Bus */ -#define CONFIG_SYS_I2C_SPEED 50000 -#define CONFIG_SYS_I2C_SLAVE 0/* not used */ - -#ifndef CONFIG_HARD_I2C -#define CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0 +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* Software I2C driver configuration */
@@ -248,9 +248,7 @@ else \ writel(ATMEL_PMX_AA_TWCK, &pio->pioa.codr); -#define I2C_DELAY udelay(2500000/CONFIG_SYS_I2C_SPEED) - -#endif /* CONFIG_HARD_I2C */ +#define I2C_DELAY udelay(2500000/CONFIG_SYS_I2C_SOFT_SPEED)/* I2C-RTC */
include/configs/ep8260.h +9 -5
@@ -227,15 +227,19 @@* If the software driver is chosen, there are some additional * configuration items that the driver uses to drive the port pins. */ -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C 1/* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F +#define CONFIG_SYS_I2C_SLAVE 0x7F/* This is for HARD, must go */ /* * Software (bit-bang) I2C driver configuration */ -#ifdef CONFIG_SOFT_I2C +#ifdef CONFIG_SYS_I2C_SOFT +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#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)
@@ -245,7 +249,7 @@#define I2C_SCL (bit) if(bit) iop->pdat |= 0x00020000; \ else iop->pdat &= ~0x00020000#define I2C_DELAY udelay(5)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ +#endif /* CONFIG_SYS_I2C_SOFT */ /* #define CONFIG_RTC_DS174x */
include/configs/ethernut5.h +6 -3
@@ -210,10 +210,13 @@/* I2C */ #define CONFIG_SYS_MAX_I2C_BUS 1 -#define CONFIG_SYS_I2C_SLAVE 0 -#define CONFIG_SYS_I2C_SPEED 100000 -#define CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 100000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0 +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +#define I2C_SOFT_DECLARATIONS #define GPIO_I2C_SCL AT91_PIO_PORTA, 24
include/configs/ibf-dsp561.h +3 -2
@@ -105,11 +105,12 @@/* * I2C Settings */ -#define CONFIG_SOFT_I2C 1 +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#define CONFIG_SOFT_I2C_GPIO_SCL GPIO_PF0#define CONFIG_SOFT_I2C_GPIO_SDA GPIO_PF1 -/* * Misc Settings */
include/configs/iocon.h +6 -5
@@ -110,11 +110,12 @@/* * I2C stuff */ -#define CONFIG_SYS_I2C_SPEED 400000 - -/* enable I2C and select the hardware/software driver */ -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C 1/* I2C bit-banged */ +#undef CONFIG_HARD_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration
include/configs/km/keymile-common.h +0 -3
@@ -82,10 +82,7 @@#define CONFIG_LOADS_ECHO #define CONFIG_SYS_LOADS_BAUD_CHANGE -#define CONFIG_I2C_MULTI_BUS -#define CONFIG_SYS_MAX_I2C_BUS 1#define CONFIG_SYS_I2C_INIT_BOARD -#define CONFIG_I2C_MUX /* Support the IVM EEprom */ #define CONFIG_SYS_IVM_EEPROM_ADR 0x50
include/configs/km/km83xx-common.h +3 -0
@@ -207,6 +207,9 @@#define CONFIG_SYS_I2C_SPEED 200000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x3000 +#define CONFIG_I2C_MULTI_BUS +#define CONFIG_SYS_MAX_I2C_BUS 1 +#define CONFIG_I2C_MUX /* I2C SYSMON (LM75, AD7414 is almost compatible) */ #define CONFIG_DTT_LM75 /* ON Semi's LM75 */
include/configs/km/km_arm.h +22 -4
@@ -55,7 +55,6 @@#define CONFIG_CMD_NAND #define CONFIG_CMD_SF -#define CONFIG_SOFT_I2C /* I2C bit-banged */ /* SPI NOR Flash default params, used by sf commands */ #define CONFIG_SF_DEFAULT_SPEED 8100000
@@ -184,8 +183,25 @@/* * I2C related stuff */ +#undef CONFIG_I2C_MVTWSI +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_KIRKWOOD_GPIO /* Enable GPIO Support */ -#if defined(CONFIG_SOFT_I2C ) +#if defined(CONFIG_SYS_I2C_SOFT ) + +#define CONFIG_SYS_NUM_I2C_ADAPTERS 1 +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +#define CONFIG_SYS_NUM_I2C_BUSSES 6 +#define CONFIG_SYS_I2C_MAX_HOPS 1 +#define CONFIG_SYS_I2C_BUSSES { {0, {I2C_NULL_HOP} }, \ + {0, {{I2C_MUX_PCA9547, 0x70, 1} } }, \ + {0, {{I2C_MUX_PCA9547, 0x70, 2} } }, \ + {0, {{I2C_MUX_PCA9547, 0x70, 3} } }, \ + {0, {{I2C_MUX_PCA9547, 0x70, 4} } }, \ + {0, {{I2C_MUX_PCA9547, 0x70, 5} } }, \ + } +#ifndef __ASSEMBLY__#include <asm/arch-kirkwood/gpio.h> extern void __set_direction (unsigned pin,int high);
@@ -208,6 +224,8 @@ int get_scl(void);#define I2C_DELAY udelay(1)#define I2C_SOFT_DECLARATIONS +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x0 +#define CONFIG_SYS_I2C_SOFT_SPEED 100000#endif /* EEprom support 24C128, 24C256 valid for environment eeprom */
@@ -237,7 +255,7 @@ int get_scl(void);#define CONFIG_SYS_EEPROM_WREN #define CONFIG_ENV_OFFSET 0x0/* no bracets! */ #define CONFIG_ENV_SIZE (0x2000 - CONFIG_ENV_OFFSET) -#define CONFIG_I2C_ENV_EEPROM_BUS KM_ENV_BUS "\0" +#define CONFIG_I2C_ENV_EEPROM_BUS KM_ENV_BUS#define CONFIG_ENV_OFFSET_REDUND 0x2000/* no bracets! */ #define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SIZE)#endif
@@ -290,7 +308,7 @@ int get_scl(void);CONFIG_KM_DEF_ENV \ CONFIG_KM_NEW_ENV \"arch=arm\0" \ -"EEprom_ivm=" KM_IVM_BUS "\0" \ + "EEprom_ivm=" __stringify(KM_IVM_BUS) "\0" \ ""#if defined(CONFIG_SYS_NO_FLASH )
include/configs/km82xx.h +13 -5
@@ -212,7 +212,7 @@#define CONFIG_EXTRA_ENV_SETTINGS \ CONFIG_KM_BOARD_EXTRA_ENV \ CONFIG_KM_DEF_ENV \ - "EEprom_ivm=pca9544a:70:4 \0" \ + "EEprom_ivm=0\0" \ "unlock=yes\0" \ "newenv=" \ "prot off 0xFE0C0000 +0x40000 && " \
@@ -242,10 +242,18 @@#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 /* I2C bit-banged */ -#define CONFIG_SYS_I2C_SPEED 50000/* I2C speed */ -#define CONFIG_SYS_I2C_SLAVE 0x7F/* I2C slave address */ +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_NUM_I2C_ADAPTERS 1 +#define CONFIG_SYS_NUM_I2C_BUSSES 3 +#define CONFIG_SYS_I2C_MAX_HOPS 1 +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SPEED CONFIG_SYS_I2C_SOFT_SPEED +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +#define CONFIG_SYS_I2C_BUSSES {{0, {I2C_NULL_HOP} }, \ + {0, {{I2C_MUX_PCA9542, 0x70, 0} } }, \ + {0, {{I2C_MUX_PCA9542, 0x70, 1} } } }/* * Software (bit-bang) I2C driver configuration
include/configs/km_kirkwood.h +7 -7
@@ -42,18 +42,18 @@#define CONFIG_IDENT_STRING "\nKeymile Kirkwood"#define CONFIG_HOSTNAME km_kirkwood#define CONFIG_KM_DISABLE_PCIE -#define KM_IVM_BUS "pca9544a:70:9"/* I2C2 (Mux-Port 1)*/ +#define KM_IVM_BUS 1/* I2C2 (Mux-Port 1)*/ /* KM_KIRKWOOD_PCI */ #elif defined(CONFIG_KM_KIRKWOOD_PCI )#define CONFIG_IDENT_STRING "\nKeymile Kirkwood PCI"#define CONFIG_HOSTNAME km_kirkwood_pci -#define KM_IVM_BUS "pca9544a:70:9"/* I2C2 (Mux-Port 1)*/ +#define KM_IVM_BUS 1/* I2C2 (Mux-Port 1)*/ #define CONFIG_KM_FPGA_CONFIG /* KM_NUSA */ #elif defined(CONFIG_KM_NUSA ) -#define KM_IVM_BUS "pca9547:70:9"/* I2C2 (Mux-Port 1)*/ +#define KM_IVM_BUS 1/* I2C2 (Mux-Port 1)*/ #define CONFIG_IDENT_STRING "\nKeymile NUSA"#define CONFIG_HOSTNAME kmnusa#undef CONFIG_SYS_KWD_CONFIG
@@ -69,7 +69,7 @@#elif defined(CONFIG_KM_MGCOGE3UN )#define CONFIG_IDENT_STRING "\nKeymile COGE3UN"#define CONFIG_HOSTNAME mgcoge3un -#define KM_IVM_BUS "pca9547:70:9"/* I2C2 (Mux-Port 1)*/ +#define KM_IVM_BUS 1/* I2C2 (Mux-Port 1)*/ #undef CONFIG_SYS_KWD_CONFIG#define CONFIG_SYS_KWD_CONFIG \ $(SRCTREE)/$(CONFIG_BOARDDIR)/kwbimage-memphis.cfg
@@ -81,7 +81,7 @@/* KMCOGE5UN */ #elif defined(CONFIG_KM_COGE5UN )#define CONFIG_IDENT_STRING "\nKeymile COGE5UN" -#define KM_IVM_BUS "pca9547:70:9"/* I2C2 (Mux-Port 1)*/ +#define KM_IVM_BUS 1/* I2C2 (Mux-Port 1)*/ #undef CONFIG_SYS_KWD_CONFIG#define CONFIG_SYS_KWD_CONFIG \ $(SRCTREE)/$(CONFIG_BOARDDIR)/kwbimage_256M8_1.cfg
@@ -95,7 +95,7 @@#elif defined(CONFIG_KM_PORTL2 )#define CONFIG_IDENT_STRING "\nKeymile Port-L2"#define CONFIG_HOSTNAME portl2 -#define KM_IVM_BUS "pca9544a:70:9"/* I2C2 (Mux-Port 1)*/ +#define KM_IVM_BUS 1/* I2C2 (Mux-Port 1)*/ #define CONFIG_KM_PIGGY4_88E6061 #else
@@ -106,7 +106,7 @@#include "km/km_arm.h" #ifndef CONFIG_KM_ENV_IS_IN_SPI_NOR -#define KM_ENV_BUS "pca9544a:70:d"/* I2C2 (Mux-Port 5)*/ +#define KM_ENV_BUS 5/* I2C2 (Mux-Port 5)*/ #endif #if defined(CONFIG_KM_PIGGY4_88E6352 )
include/configs/korat.h +0 -1
@@ -156,7 +156,6 @@* I2C */ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/lwmon.h +5 -8
@@ -145,13 +145,11 @@#undef CONFIG_STATUS_LED/* Status LED disabled */ /* 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 CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -167,7 +165,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ #define CONFIG_RTC_PCF8563 /* use Philips PCF8563 RTC */
include/configs/lwmon5.h +0 -1
@@ -281,7 +281,6 @@* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 100000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/mecp5123.h +0 -1
@@ -243,7 +243,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* so disable bit-banged I2C */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed */ #define CONFIG_SYS_I2C_SLAVE 0x7F/* slave address */
include/configs/mpc5121ads.h +0 -1
@@ -336,7 +336,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* so disable bit-banged I2C */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 100000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/nhk8815.h +6 -2
@@ -109,8 +109,12 @@#ifndef __ASSEMBLY__#include <asm/arch/gpio.h> #define CONFIG_CMD_I2C -#define CONFIG_SOFT_I2C -#define CONFIG_SYS_I2C_SPEED 400000 +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT 1/* I2C bit-banged */ +#define I2C_SOFT_DEFS +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#define __SDA 63#define __SCL 62#define I2C_SDA (x) nmk_gpio_set(__SDA, x)
include/configs/otc570.h +9 -9
@@ -115,14 +115,14 @@/* RTC and I2C stuff */ #define CONFIG_RTC_DS1338 #define CONFIG_SYS_I2C_RTC_ADDR 0x68 -#undef CONFIG_HARD_I2C -#define CONFIG_SOFT_I2C -#define CONFIG_SYS_I2C_SPEED 100000 -#define CONFIG_SYS_I2C_SLAVE 0x7F - -#ifdef CONFIG_SOFT_I2C -# define CONFIG_I2C_CMD_TREE -# define CONFIG_I2C_MULTI_BUS + +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#ifdef CONFIG_SYS_I2C_SOFT +#define CONFIG_SYS_I2C_SOFT_SPEED 100000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +/* Configure data and clock pins for pio */ # define I2C_INIT { \ at91_set_pio_output(AT91_PIO_PORTB, 4, 0); \
@@ -140,7 +140,7 @@/* Set clock pin */ # define I2C_SCL (bit) at91_set_pio_value(AT91_PIO_PORTB, 5, bit)# define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ +#endif /* CONFIG_SYS_I2C_SOFT */ /* * BOOTP options
include/configs/p1_p2_rdb_pc.h +0 -1
@@ -538,7 +538,6 @@/* I2C */ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_I2C_CMD_TREE #define CONFIG_SYS_I2C_SPEED 400000/* I2C spd and slave address */
include/configs/p3p440.h +0 -1
@@ -98,7 +98,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 100000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/pcs440ep.h +0 -1
@@ -140,7 +140,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 100000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/pdnb3.h +5 -6
@@ -281,12 +281,11 @@*/ /* 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 CONFIG_SYS_I2C_SPEED 83000/* 83 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 83000/* 83 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
include/configs/quad100hd.h +0 -1
@@ -153,7 +153,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/s5p_goni.h +5 -2
@@ -226,8 +226,11 @@#define CONFIG_SOFT_I2C_GPIO_SCL s5pc110_gpio_get_nr(j4, 3)#define CONFIG_SOFT_I2C_GPIO_SDA s5pc110_gpio_get_nr(j4, 0) -#define CONFIG_SOFT_I2C 1 -#define CONFIG_SYS_I2C_SPEED 50000 +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_MAX_I2C_BUS 7#define CONFIG_USB_GADGET
include/configs/s5pc210_universal.h +5 -2
@@ -247,9 +247,12 @@#define CONFIG_SOFT_I2C_GPIO_SCL exynos4_gpio_part1_get_nr(b, 7)#define CONFIG_SOFT_I2C_GPIO_SDA exynos4_gpio_part1_get_nr(b, 6) -#define CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0 +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#define CONFIG_SOFT_I2C_READ_REPEATED_START -#define CONFIG_SYS_I2C_SPEED 50000#define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_MAX_I2C_BUS 7
include/configs/sacsng.h +5 -7
@@ -296,15 +296,14 @@* If the software driver is chosen, there are some additional * configuration items that the driver uses to drive the port pins. */ -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C 1/* I2C bit-banged */ -#define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ -#define CONFIG_SYS_I2C_SLAVE 0x7F - +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */ -#ifdef CONFIG_SOFT_I2C #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)
@@ -314,7 +313,6 @@#define I2C_SCL (bit) if(bit) iop->pdat |= 0x00020000; \ else iop->pdat &= ~0x00020000#define I2C_DELAY udelay(20)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ /* Define this to reserve an entire FLASH sector for * environment variables. Otherwise, the environment will be
include/configs/sbc405.h +0 -1
@@ -169,7 +169,6 @@#define CONFIG_SYS_RX_ETH_BUFFER 16/* use 16 rx buffer on 405 emac */ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/sbc8349.h +0 -1
@@ -305,7 +305,6 @@/* I2C */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/sbc8548.h +0 -1
@@ -445,7 +445,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_EEPROM_ADDR 0x50#define CONFIG_SYS_I2C_SLAVE 0x7F
include/configs/sbc8560.h +0 -1
@@ -215,7 +215,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/sbc8641d.h +0 -1
@@ -290,7 +290,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_NOPROBES {0x69}/* Don't probe these addrs */
include/configs/sc3.h +0 -1
@@ -247,7 +247,6 @@*----------------------------------------------------------------------- */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define I2C_INIT
include/configs/snapper9260.h +5 -4
@@ -106,11 +106,12 @@#define CONFIG_SYS_PROMPT "Snapper> "/* I2C - Bit-bashed */ -#define CONFIG_SOFT_I2C -#define CONFIG_SYS_I2C_SPEED 100000 -#define CONFIG_SYS_I2C_SLAVE 0x7F +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 100000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#define CONFIG_SOFT_I2C_READ_REPEATED_START -#define CONFIG_I2C_MULTI_BUS #define I2C_INIT do { \ at91_set_gpio_output(AT91_PIN_PA23, 1); \ at91_set_gpio_output(AT91_PIN_PA24, 1); \
include/configs/socrates.h +0 -1
@@ -236,7 +236,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 102124/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#define CONFIG_SYS_I2C_OFFSET 0x3000
include/configs/spc1920.h +5 -8
@@ -207,13 +207,11 @@*/ #if defined(CONFIG_CMD_I2C )/* 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 CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -229,7 +227,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ #endif /*-----------------------------------------------------------------------
include/configs/stxgp3.h +0 -1
@@ -180,7 +180,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#if 0
include/configs/stxssa.h +0 -1
@@ -199,7 +199,6 @@*/ #define CONFIG_FSL_I2C /* Use FSL common I2C driver */ #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F#undef CONFIG_SYS_I2C_NOPROBES
include/configs/top9000.h +6 -4
@@ -201,11 +201,13 @@#define CONFIG_CMD_USB /* I2C support must always be enabled */ -#define CONFIG_SOFT_I2C #define CONFIG_CMD_I2C -#define CONFIG_SYS_I2C_SPEED 400000 -#define CONFIG_SYS_I2C_SLAVE 0x7F -#define CONFIG_I2C_MULTI_BUS +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 400000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7F +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]} +#define I2C0_PORT AT91_PIO_PORTA#define SDA0_PIN 23#define SCL0_PIN 24
include/configs/trats.h +5 -2
@@ -212,10 +212,13 @@#define CONFIG_SYS_CACHELINE_SIZE 32 -#define CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 50000 +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}#define CONFIG_SOFT_I2C_READ_REPEATED_START #define CONFIG_SYS_I2C_INIT_BOARD -#define CONFIG_SYS_I2C_SPEED 50000#define CONFIG_I2C_MULTI_BUS #define CONFIG_SOFT_I2C_MULTI_BUS #define CONFIG_SYS_MAX_I2C_BUS 15
include/configs/u8500_href.h +0 -1
@@ -166,7 +166,6 @@*/ #define CONFIG_U8500_I2C #undef CONFIG_HARD_I2C/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_SYS_I2C_SPEED 100000#define CONFIG_SYS_I2C_SLAVE 0/* slave addr of controller */
include/configs/uc100.h +5 -8
@@ -463,13 +463,11 @@*/ /* 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 CONFIG_SYS_I2C_SPEED 93000/* 93 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0xFE - -#ifdef CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 93000/* 93 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0xFE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration */
@@ -485,7 +483,6 @@#define I2C_SCL (bit) if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; \ else immr->im_cpm.cp_pbdat &= ~PB_SCL#define I2C_DELAY udelay(2)/* 1/4 I2C clock duration */ -#endif /* CONFIG_SOFT_I2C */ /*----------------------------------------------------------------------- * I2C EEPROM (24C164)
include/configs/utx8245.h +1 -2
@@ -235,8 +235,7 @@ protect on ${u-boot_startaddr} ${u-boot_endaddr}"*------------------------------------------------------------------*/ #if 1 #define CONFIG_HARD_I2C 1/* To enable I2C support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ -#define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ +#define CONFIG_SYS_I2C_SPEED 400000#define CONFIG_SYS_I2C_SLAVE 0x7F#endif
include/configs/vct.h +6 -6
@@ -246,11 +246,11 @@/* * I2C/EEPROM */ -#undef CONFIG_HARD_I2C/* I2C with hardware support */ -#define CONFIG_SOFT_I2C /* I2C bit-banged */ - -#define CONFIG_SYS_I2C_SPEED 83000/* 83 kHz is supposed to work */ -#define CONFIG_SYS_I2C_SLAVE 0x7f +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED 83000/* 83 kHz is supposed to work */ +#define CONFIG_SYS_I2C_SOFT_SLAVE 0x7f +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* * Software (bit-bang) I2C driver configuration
@@ -338,7 +338,7 @@ int vct_gpio_get(int pin);#undef CONFIG_CMD_USB#undef CONFIG_SMC911X -#undef CONFIG_SOFT_I2C +#undef CONFIG_SYS_I2C_SOFT#undef CONFIG_SOURCE#undef CONFIG_SYS_LONGHELP#undef CONFIG_TIMESTAMP
include/configs/vl_ma2sc.h +5 -2
@@ -147,10 +147,13 @@#define CONFIG_SYS_I2C_SLAVE 0/* not used */ #ifndef CONFIG_HARD_I2C -#define CONFIG_SOFT_I2C +#define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_SOFT /* I2C bit-banged */ +#define CONFIG_SYS_I2C_SOFT_SPEED CONFIG_SYS_I2C_SPEED +#define CONFIG_SYS_I2C_SOFT_SLAVE CONFIG_SYS_I2C_SLAVE +#define CONFIG_SYS_I2C_ADAPTERS {&soft_i2c_adap[0]}/* Software I2C driver configuration */ -#define I2C_DELAY udelay(2500000/CONFIG_SYS_I2C_SPEED)#define AT91_PIN_SDA (1<<4)/* AT91C_PIO_PB4 */
include/configs/vme8349.h +0 -1
@@ -239,7 +239,6 @@/* I2C */ #define CONFIG_I2C_MULTI_BUS #define CONFIG_HARD_I2C /* I2C with hardware support*/ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_FSL_I2C #define CONFIG_I2C_CMD_TREE #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */
include/configs/zeus.h +0 -1
@@ -169,7 +169,6 @@* I2C *----------------------------------------------------------------------*/ #define CONFIG_HARD_I2C 1/* I2C with hardware support */ -#undef CONFIG_SOFT_I2C/* I2C bit-banged */ #define CONFIG_PPC4XX_I2C /* use PPC4xx driver */ #define CONFIG_SYS_I2C_SPEED 400000/* I2C speed and slave address */ #define CONFIG_SYS_I2C_SLAVE 0x7F
include/i2c.h +9 -0
@@ -287,6 +287,15 @@ unsigned int i2c_get_bus_speed(void);* Adjusts I2C pointers after U-Boot is relocated to DRAM */ void i2c_reloc_fixup (void ); +#if defined(CONFIG_SYS_I2C_SOFT ) +void i2c_soft_init (void ); +void i2c_soft_active (void ); +void i2c_soft_tristate (void ); +int i2c_soft_read (void ); +void i2c_soft_sda (int bit); +void i2c_soft_scl (int bit); +void i2c_soft_delay (void ); +#endif #else /*
Signature · 1 line
1.7.7.6
cover Bring in new I2C framework
In reply to Heiko SchocherHi Heiko,
Quoted 10 lines · Heiko Schocher
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
I am very happy to see this, thank you.
I have brought this in and tried to get it running for Tegra. A few points:
1. The methods in struct i2c_adapter should IMO be passed a struct i2c_adapter *, so they can determine which adapter is being accessed. Otherwise I can't see how they would know.
2. The init is a bit odd, in that we can call init() repeatedly. Perhaps that function should be renamed to reset, and the init should be used for calling just once at the start?
3. Rather than each device having to call i2c_get_bus_num() to find out what bus is referred to, why not just pass this information in? In fact the adapter pointer can serve for this.
4. So perhaps the i2c read/write functions should change from:
int i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)
to:
int i2c_read((struct i2c_adapter *adapter, uint addr, int alen, uchar *buffer, int len)
Later, I wonder whether the concept of a 'current' i2c bus should be maintained by the command line interpreter, rather than the i2c system. Because to be honest, most of the drivers I see have to save the current bus number, set the current bus, do the operation, then set the bus back how they found it (to preserve whatever the user things is the current bus).
Granted there is overhead with i2c muxes, but the i2c core can remember the state of these muxes and doesn't have to switch things until there has been a change since the last transaction.
This last suggestion can be dealt with later, but I thought I would bring it up.
Regards,
Simon
Quoted 207 lines
Cc Simon Glass <[email protected]>Cc Piotr Wilczek <[email protected]>Heiko Schocher (3):
i2c: addi2c_coreand prepare for new multibus support
i2c: common changes for multibus/multiadapter support i2c, soft-i2c: switch to new multibus/multiadapter supportREADME | 89 +++++++- arch/arm/include/asm/global_data.h | 3 + arch/arm/lib/board.c | 15 +- arch/avr32/include/asm/global_data.h | 3 + arch/blackfin/include/asm/global_data.h | 4 +- arch/blackfin/lib/board.c | 7 + arch/m68k/include/asm/global_data.h | 3 + arch/m68k/lib/board.c | 15 +- arch/microblaze/include/asm/global_data.h | 3 + arch/mips/include/asm/global_data.h | 3 + arch/mips/lib/board.c | 7 + arch/nds32/include/asm/global_data.h | 3 + arch/nds32/lib/board.c | 10 +- arch/nios2/include/asm/global_data.h | 3 + arch/powerpc/cpu/mpc8xx/video.c | 4 + arch/powerpc/include/asm/global_data.h | 3 + arch/powerpc/lib/board.c | 16 +- arch/sh/include/asm/global_data.h | 3 + arch/sparc/include/asm/global_data.h | 3 + arch/x86/include/asm/global_data.h | 3 + board/BuS/eb_cpux9k2/cpux9k2.c | 2 +- board/BuS/vl_ma2sc/vl_ma2sc.c | 2 +- board/atc/atc.c | 2 +- board/bluewater/snapper9260/snapper9260.c | 2 +- board/cm5200/cm5200.c | 4 +- board/cpu86/cpu86.c | 2 +- board/cpu87/cpu87.c | 2 +- board/emk/top9000/top9000.c | 8 +- board/eukrea/cpuat91/cpuat91.c | 2 +- board/freescale/m52277evb/README | 2 +- board/freescale/m53017evb/README | 2 +- board/freescale/m5373evb/README | 2 +- board/freescale/m54455evb/README | 2 +- board/freescale/m547xevb/README | 2 +- board/ids8247/ids8247.c | 2 +- board/keymile/common/common.c | 3 +- board/keymile/common/ivm.c | 15 +- board/keymile/km82xx/km82xx.c | 2 +- board/keymile/km_arm/km_arm.c | 8 +- board/lwmon/lwmon.c | 2 +- board/lwmon/pcmcia.c | 4 +- board/pm826/pm826.c | 2 +- board/pm828/pm828.c | 2 +- board/sacsng/ioconfig.h | 2 +- board/sandburst/karef/karef.c | 1 - board/siemens/SCM/scm.c | 2 +- board/tqc/tqm8260/tqm8260.c | 2 +- board/tqc/tqm8272/tqm8272.c | 2 +- board/tqc/tqm8272/tqm8272.h | 2 +- common/cmd_date.c | 9 + common/cmd_dtt.c | 9 + common/cmd_eeprom.c | 3 +- common/cmd_i2c.c | 118 ++++++--- common/env_eeprom.c | 14 + common/stdio.c | 14 +- drivers/i2c/Makefile | 3 +- drivers/i2c/i2c_core.c | 367 +++++++++++++++++++++++++++++ drivers/i2c/soft_i2c.c | 122 ++++++---- include/configs/A3000.h | 4 +- include/configs/BSC9131RDB.h | 1 - include/configs/CANBT.h | 4 + include/configs/CPU86.h | 9 +- include/configs/CPU87.h | 9 +- include/configs/DU440.h | 1 - include/configs/GEN860T.h | 36 ++-- include/configs/HIDDEN_DRAGON.h | 10 +- include/configs/IAD210.h | 12 +- include/configs/ICU862.h | 14 +- include/configs/IDS8247.h | 10 +- include/configs/IP860.h | 10 +- include/configs/IPHASE4539.h | 12 +- include/configs/JSE.h | 1 - include/configs/KAREF.h | 1 - include/configs/KUP4K.h | 12 +- include/configs/KUP4X.h | 14 +- include/configs/M5208EVBE.h | 1 - include/configs/M52277EVB.h | 1 - include/configs/M5235EVB.h | 1 - include/configs/M5271EVB.h | 1 - include/configs/M5275EVB.h | 1 - include/configs/M53017EVB.h | 1 - include/configs/M5329EVB.h | 1 - include/configs/M5373EVB.h | 1 - include/configs/M54451EVB.h | 1 - include/configs/M54455EVB.h | 1 - include/configs/M5475EVB.h | 1 - include/configs/M5485EVB.h | 1 - include/configs/METROBOX.h | 1 - include/configs/MHPC.h | 9 +- include/configs/MPC8323ERDB.h | 1 - include/configs/MPC832XEMDS.h | 1 - include/configs/MPC8349EMDS.h | 1 - include/configs/MPC8349ITX.h | 2 - include/configs/MPC8360EMDS.h | 1 - include/configs/MPC8360ERDK.h | 1 - include/configs/MPC837XEMDS.h | 1 - include/configs/MPC837XERDB.h | 1 - include/configs/MPC8536DS.h | 1 - include/configs/MPC8540ADS.h | 1 - include/configs/MPC8541CDS.h | 1 - include/configs/MPC8544DS.h | 1 - include/configs/MPC8548CDS.h | 3 +- include/configs/MPC8555CDS.h | 1 - include/configs/MPC8560ADS.h | 1 - include/configs/MPC8568MDS.h | 1 - include/configs/MPC8569MDS.h | 1 - include/configs/MPC8572DS.h | 1 - include/configs/MPC8610HPCD.h | 1 - include/configs/MPC8641HPCN.h | 1 - include/configs/P1010RDB.h | 1 - include/configs/P1023RDS.h | 1 - include/configs/P1_P2_RDB.h | 1 - include/configs/P2020COME.h | 1 - include/configs/PM826.h | 9 +- include/configs/PM828.h | 9 +- include/configs/PMC440.h | 1 - include/configs/R360MPI.h | 7 +- include/configs/RPXClassic.h | 16 +- include/configs/RPXlite.h | 26 ++ include/configs/RRvision.h | 13 +- include/configs/SBC8540.h | 1 - include/configs/SCM.h | 11 +- include/configs/SXNI855T.h | 8 +- include/configs/Sandpoint8240.h | 10 +- include/configs/Sandpoint8245.h | 14 +- include/configs/TASREG.h | 27 +- include/configs/TK885D.h | 13 +- include/configs/TOP5200.h | 15 +- include/configs/TOP860.h | 11 +- include/configs/TQM8260.h | 9 +- include/configs/TQM8272.h | 13 +- include/configs/TQM834x.h | 1 - include/configs/TQM855M.h | 13 +- include/configs/TQM866M.h | 13 +- include/configs/TQM885D.h | 13 +- include/configs/alpr.h | 1 - include/configs/aria.h | 1 - include/configs/astro_mcf5373l.h | 1 - include/configs/bf533-ezkit.h | 10 +- include/configs/bf533-stamp.h | 47 ++++- include/configs/bf561-ezkit.h | 9 +- include/configs/bfin_adi_common.h | 2 +- include/configs/blackstamp.h | 1 - include/configs/cpuat91.h | 1 - include/configs/debris.h | 10 +- include/configs/eXalion.h | 2 +- include/configs/eb_cpux9k2.h | 14 +- include/configs/ep8260.h | 14 +- include/configs/ethernut5.h | 9 +- include/configs/ibf-dsp561.h | 5 +- include/configs/iocon.h | 11 +- include/configs/km/keymile-common.h | 3 - include/configs/km/km83xx-common.h | 3 + include/configs/km/km_arm.h | 26 ++- include/configs/km82xx.h | 18 +- include/configs/km_kirkwood.h | 14 +- include/configs/korat.h | 1 - include/configs/lwmon.h | 13 +- include/configs/lwmon5.h | 1 - include/configs/mecp5123.h | 1 - include/configs/mpc5121ads.h | 1 - include/configs/nhk8815.h | 8 +- include/configs/otc570.h | 18 +- include/configs/p1_p2_rdb_pc.h | 1 - include/configs/p3p440.h | 1 - include/configs/pcs440ep.h | 1 - include/configs/pdnb3.h | 11 +- include/configs/quad100hd.h | 1 - include/configs/s5p_goni.h | 7 +- include/configs/s5pc210_universal.h | 7 +- include/configs/sacsng.h | 12 +- include/configs/sbc405.h | 1 - include/configs/sbc8349.h | 1 - include/configs/sbc8548.h | 1 - include/configs/sbc8560.h | 1 - include/configs/sbc8641d.h | 1 - include/configs/sc3.h | 1 - include/configs/snapper9260.h | 9 +- include/configs/socrates.h | 1 - include/configs/spc1920.h | 13 +- include/configs/stxgp3.h | 1 - include/configs/stxssa.h | 1 - include/configs/top9000.h | 10 +- include/configs/trats.h | 7 +- include/configs/u8500_href.h | 1 - include/configs/uc100.h | 13 +- include/configs/utx8245.h | 3 +- include/configs/vct.h | 12 +- include/configs/vl_ma2sc.h | 7 +- include/configs/vme8349.h | 1 - include/configs/zeus.h | 1 - include/i2c.h | 196 +++++++++++++++- 192 files changed, 1443 insertions(+), 533 deletions(-) create mode 100644 drivers/i2c/i2c_core.c--
1.7.7.6
cover Bring in new I2C framework
Hello Simon,
Quoted 6 lines · Simon Glass
Quoted 5 lines · Heiko Schocher
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
Quoted 7 lines
Quoted 5 lines
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
I am very happy to see this, thank you.
I am too ;-) and Sorry that I am only now ready ...
Quoted 5 lines
I have brought this in and tried to get it running for Tegra. A few points:
1. The methods in struct
i2c_adaptershould IMO be passed a structi2c_adapter*, so they can determine which adapter is being accessed. Otherwise I can't see how they would know.
They can get the current used adapter through the defines in include/i2c.h:
[...]
#define I2C_ADAP_NR(bus) i2c_adap[i2c_bus[bus].adapter] #define I2C_BUS ((struct i2c_bus_hose *)gd->cur_i2c_bus) #define I2C_ADAP i2c_adap[I2C_BUS->adapter] #define I2C_ADAP_HWNR (I2C_ADAP->hwadapnr)
preparing just the fsl i2c driver and there I do for example:drivers/i2c/fsl_i2c.c
[...]
static const struct fsl_i2c *i2c_dev[2] = {
(struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_FSL_I2C_OFFSET),
#ifdef CONFIG_SYS_FSL_I2C2_OFFSET
(struct fsl_i2c *) (CONFIG_SYS_IMMR + CONFIG_SYS_FSL_I2C2_OFFSET)
#endif
};
[...]
static int fsl_i2c_probe(uchar chip)
{
struct fsl_i2c *dev = (struct fsl_i2c *)i2c_dev[I2C_ADAP_HWNR];[...]
but of course, we still can change the "struct i2c_adapter" if needed ... but we have one more parameter ... Ok, not really a bad problem.
Quoted 3 lines
2. The init is a bit odd, in that we can call
init()repeatedly. Perhaps that function should be renamed to reset, and the init should be used for calling just once at the start?
What do you mean here exactly? I couldn?t parse this ...
Quoted 3 lines
3. Rather than each device having to call
i2c_get_bus_num()to find out what bus is referred to, why not just pass this information in? In fact the adapter pointer can serve for this.
Not the "struct i2c_adapter" must passed, but the "struct i2c_bus"!
And each device should know, which i2c bus it uses, or? So at the end we should have something like i2c_read(struct i2c_bus *bus, ...) calls ... and the i2c core can detect, if this bus is the current, if so go on, if not switch to this bus. So at the end i2c_set_bus_num would be go static ...
Quoted 8 lines
4. So perhaps the i2c read/write functions should change from:
int
i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)to:
int i2c_read((struct
i2c_adapter*adapter, uint addr, int alen, uchar *buffer, int len)
Yep, exactly, see comments to point 3 ...
That would be the best (and I think in previous discussions I defined this as one goal ...), but this would be (another) big change, because this is an *API* change, with maybe a lot of config file changes ...
Let us bring in the new i2c framework with all i2c drivers converted, and then do the next step ... maybe one step more, if mareks device model is ready, we can switch easy to DM ... and maybe get this API change for free ...
Quoted 6 lines
Later, I wonder whether the concept of a 'current' i2c bus should be maintained by the command line interpreter, rather than the i2c system. Because to be honest, most of the drivers I see have to save the current bus number, set the current bus, do the operation, then set the bus back how they found it (to preserve whatever the user things is the current bus).
Yes, suboptimal ... but this is independent from the new i2c framework patches!
It is possible (with old/new i2c bus framework) to introduce a "current commandline i2c bus", and then, before calling i2c_read/write from the commandline, call a i2c_set_bus_num() ... then we can get rid of this store/restore current i2c bus ... waiting for patches ;-)
Quoted 3 lines
Granted there is overhead with i2c muxes, but the i2c core can remember the state of these muxes and doesn't have to switch things until there has been a change since the last transaction.
This exactly do the i2c_set_bus_num() now!
Quoted 1 line
This last suggestion can be dealt with later, but I thought I would bring it up.
I am happy about every comment! :-)
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
Quoted 45 lines · Heiko Schocher
Hello Simon,
Quoted 6 lines · Simon Glass
Quoted 5 lines · Heiko Schocher
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
Quoted 7 lines
Quoted 5 lines
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
I am very happy to see this, thank you.
I am too ;-) and Sorry that I am only now ready ...
Quoted 6 lines
I have brought this in and tried to get it running for Tegra. A few points:
1. The methods in struct
i2c_adaptershould IMO be passed a structi2c_adapter*, so they can determine which adapter is being accessed. Otherwise I can't see how they would know.They can get the current used adapter through the defines in
include/i2c.h:
[...]#define I2C_ADAP_NR(bus) i2c_adap[i2c_bus[bus].adapter] #define I2C_BUS ((struct i2c_bus_hose *)gd->cur_i2c_bus) #define I2C_ADAP i2c_adap[I2C_BUS->adapter] #define I2C_ADAP_HWNR (I2C_ADAP->hwadapnr)preparing just the fsl i2c driver and there I do for example:
drivers/i2c/fsl_i2c.c
[...]
static const structfsl_i2c*i2c_dev[2] = {
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C_OFFSET),
#ifdefCONFIG_SYS_FSL_I2C2_OFFSET
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C2_OFFSET)
#endif
};
[...]
static intfsl_i2c_probe(uchar chip)
Quoted 7 lines
{ struct fsl_i2c *dev = (struct fsl_i2c *)i2c_dev[I2C_ADAP_HWNR];[...]
but of course, we still can change the "struct
i2c_adapter" if needed ... but we have one more parameter ... Ok, not really a bad problem.
That rather relies on their being a concept of a "current" I2C adapter. It seems a little limiting to require that. What if the "current" adapter is the user-selected adapter for commands to operate on, but e.g. some power-management driver wants to use I2C to communicate with a PMIC during the internals of some other command. Sure, you could save and later restore the I2C core's idea of "current" adapter, but it'd surely be cleaner to just pass around the I2C adapter ID or struct pointer everywhere to avoid the need for save/restore.
cover Bring in new I2C framework
Hello Stephen,
Quoted 54 lines · Stephen Warren
Quoted 45 lines · Heiko Schocher
Hello Simon,
Quoted 6 lines · Simon Glass
Quoted 5 lines · Heiko Schocher
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
Quoted 7 lines
Quoted 5 lines
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
I am very happy to see this, thank you.
I am too ;-) and Sorry that I am only now ready ...
Quoted 6 lines
I have brought this in and tried to get it running for Tegra. A few points:
1. The methods in struct
i2c_adaptershould IMO be passed a structi2c_adapter*, so they can determine which adapter is being accessed. Otherwise I can't see how they would know.They can get the current used adapter through the defines in
include/i2c.h:
[...]#define I2C_ADAP_NR(bus) i2c_adap[i2c_bus[bus].adapter] #define I2C_BUS ((struct i2c_bus_hose *)gd->cur_i2c_bus) #define I2C_ADAP i2c_adap[I2C_BUS->adapter] #define I2C_ADAP_HWNR (I2C_ADAP->hwadapnr)preparing just the fsl i2c driver and there I do for example:
drivers/i2c/fsl_i2c.c
[...]
static const structfsl_i2c*i2c_dev[2] = {
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C_OFFSET),
#ifdefCONFIG_SYS_FSL_I2C2_OFFSET
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C2_OFFSET)
#endif
};
[...]
static intfsl_i2c_probe(uchar chip)Quoted 7 lines
{ struct fsl_i2c *dev = (struct fsl_i2c *)i2c_dev[I2C_ADAP_HWNR];[...]
but of course, we still can change the "struct
i2c_adapter" if needed ... but we have one more parameter ... Ok, not really a bad problem.
Quoted 8 lines
That rather relies on their being a concept of a "current" I2C adapter. It seems a little limiting to require that. What if the "current" adapter is the user-selected adapter for commands to operate on, but e.g. some power-management driver wants to use I2C to communicate with a PMIC during the internals of some other command. Sure, you could save and later restore the I2C core's idea of "current" adapter, but it'd surely be cleaner to just pass around the I2C adapter ID or struct pointer everywhere to avoid the need for save/restore.
Yes, you are right, but just the same problem with current code! You mixed here two things!
The idea behind the current i2c adapter was/is, that the i2c core need to know, which bus is "current" because there is the possibility that on one adapter are more i2c busses, because of using i2c muxes ... and we must know, on which bus we are currently, because if we want to switch to another bus, we must first disable the old way (and maybe disable the i2c adapter too). -> If we want this feature, we need a current adapter. If we say,
Ok, we do not want this disabling... we can get rid of it, yes!
But I think it is safer to disable the i2c muxes, before switching to another bus ... so this "current i2c adapter" is an i2c core internal! We should of course change the i2c API that we pass the bus to the i2c API, but, as I said this to simon, this is another big change, and I want to have this step after getting in the new i2c framework (and maybe hope, that when we convert to mareks DM, we get this for free), because we must also adapt for example all dtt, RTC, because they need to know on which bus they resist, and we have to config this ...
The problem from storing/restoring the "current cmdline i2c bus", is another problem, which is an independent patch! You can make with current code a patch, which holds the current i2c cmdline bus in a variable, and then get rid of this store/ restore calls as for example found in cmd_date.c ...
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
Quoted 68 lines · Heiko Schocher
Hello Stephen,
Quoted 56 lines · Stephen Warren
Quoted 47 lines · Heiko Schocher
Hello Simon,
Quoted 6 lines · Simon Glass
Quoted 5 lines · Heiko Schocher
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
Quoted 7 lines
Quoted 5 lines
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
I am very happy to see this, thank you.
I am too ;-) and Sorry that I am only now ready ...
Quoted 6 lines
I have brought this in and tried to get it running for Tegra. A few points:
1. The methods in struct
i2c_adaptershould IMO be passed a structi2c_adapter*, so they can determine which adapter is being accessed. Otherwise I can't see how they would know.They can get the current used adapter through the defines in
include/i2c.h:
[...]#define I2C_ADAP_NR(bus) i2c_adap[i2c_bus[bus].adapter] #define I2C_BUS ((struct i2c_bus_hose *)gd->cur_i2c_bus) #define I2C_ADAP i2c_adap[I2C_BUS->adapter] #define I2C_ADAP_HWNR (I2C_ADAP->hwadapnr)preparing just the fsl i2c driver and there I do for example:
drivers/i2c/fsl_i2c.c
[...]
static const structfsl_i2c*i2c_dev[2] = {
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C_OFFSET),
#ifdefCONFIG_SYS_FSL_I2C2_OFFSET
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C2_OFFSET)
#endif
};
[...]
static intfsl_i2c_probe(uchar chip)Quoted 7 lines
{ struct fsl_i2c *dev = (struct fsl_i2c *)i2c_dev[I2C_ADAP_HWNR];[...]
but of course, we still can change the "struct
i2c_adapter" if needed ... but we have one more parameter ... Ok, not really a bad problem.Quoted 8 lines
That rather relies on their being a concept of a "current" I2C adapter. It seems a little limiting to require that. What if the "current" adapter is the user-selected adapter for commands to operate on, but e.g. some power-management driver wants to use I2C to communicate with a PMIC during the internals of some other command. Sure, you could save and later restore the I2C core's idea of "current" adapter, but it'd surely be cleaner to just pass around the I2C adapter ID or struct pointer everywhere to avoid the need for save/restore.
Quoted 2 lines
Yes, you are right, but just the same problem with current code! You mixed here two things!
I think you're reading more into what I was saying than what I actually said.
If there are e.g. 4 I2C controllers in an SoC, the driver needs to know which one is in use. Passing that information directly to the driver functions is much simple than requiring the SoC I2C driver to go grovel in some I2C core global variables to find out the same information.
This is all unrelated to I2C bus muxes; they shouldn't be implemented as part of an SoC I2C driver anyway, so the driver shouldn't know about bus muxes before or after this patch - the I2C core should manage that.
cover Bring in new I2C framework
Hi Stephen,
Quoted 72 lines · Stephen Warren
Quoted 68 lines · Heiko Schocher
Hello Stephen,
Quoted 56 lines · Stephen Warren
Quoted 47 lines · Heiko Schocher
Hello Simon,
Quoted 6 lines · Simon Glass
Quoted 5 lines · Heiko Schocher
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
Quoted 7 lines
Quoted 5 lines
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
I am very happy to see this, thank you.
I am too ;-) and Sorry that I am only now ready ...
Quoted 6 lines
I have brought this in and tried to get it running for Tegra. A few points:
1. The methods in struct
i2c_adaptershould IMO be passed a structi2c_adapter*, so they can determine which adapter is being accessed. Otherwise I can't see how they would know.They can get the current used adapter through the defines in
include/i2c.h:
[...]#define I2C_ADAP_NR(bus) i2c_adap[i2c_bus[bus].adapter] #define I2C_BUS ((struct i2c_bus_hose *)gd->cur_i2c_bus) #define I2C_ADAP i2c_adap[I2C_BUS->adapter] #define I2C_ADAP_HWNR (I2C_ADAP->hwadapnr)preparing just the fsl i2c driver and there I do for example:
drivers/i2c/fsl_i2c.c
[...]
static const structfsl_i2c*i2c_dev[2] = {
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C_OFFSET),
#ifdefCONFIG_SYS_FSL_I2C2_OFFSET
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C2_OFFSET)
#endif
};
[...]
static intfsl_i2c_probe(uchar chip)Quoted 7 lines
{ struct fsl_i2c *dev = (struct fsl_i2c *)i2c_dev[I2C_ADAP_HWNR];[...]
but of course, we still can change the "struct
i2c_adapter" if needed ... but we have one more parameter ... Ok, not really a bad problem.Quoted 8 lines
That rather relies on their being a concept of a "current" I2C adapter. It seems a little limiting to require that. What if the "current" adapter is the user-selected adapter for commands to operate on, but e.g. some power-management driver wants to use I2C to communicate with a PMIC during the internals of some other command. Sure, you could save and later restore the I2C core's idea of "current" adapter, but it'd surely be cleaner to just pass around the I2C adapter ID or struct pointer everywhere to avoid the need for save/restore.
Quoted 2 lines
Yes, you are right, but just the same problem with current code! You mixed here two things!
Quoted 7 lines
I think you're reading more into what I was saying than what I actually said.
If there are e.g. 4 I2C controllers in an SoC, the driver needs to know which one is in use. Passing that information directly to the driver functions is much simple than requiring the SoC I2C driver to go grovel in some I2C core global variables to find out the same information.
I think Heiko agreed with this, just that he wants to take things a step at a time.
Quoted 4 lines
This is all unrelated to I2C bus muxes; they shouldn't be implemented as part of an SoC I2C driver anyway, so the driver shouldn't know about bus muxes before or after this patch - the I2C core should manage that.
Regards,
Simon
cover Bring in new I2C framework
In reply to Stephen WarrenHello Stephen,
Quoted 9 lines · Stephen Warren
Quoted 8 lines · Heiko Schocher
Hello Stephen,
Quoted 5 lines · Stephen Warren
Quoted 4 lines · Heiko Schocher
Hello Simon,
Quoted 1 line · Simon Glass
On Mon, Oct 22, 2012 at 10:40 AM, Heiko Schocher<[email protected]> wrote:
[...]
Quoted 9 lines
Quoted 9 lines
Quoted 8 lines
That rather relies on their being a concept of a "current" I2C adapter. It seems a little limiting to require that. What if the "current" adapter is the user-selected adapter for commands to operate on, but e.g. some power-management driver wants to use I2C to communicate with a PMIC during the internals of some other command. Sure, you could save and later restore the I2C core's idea of "current" adapter, but it'd surely be cleaner to just pass around the I2C adapter ID or struct pointer everywhere to avoid the need for save/restore.
Quoted 5 lines
Quoted 2 lines
Yes, you are right, but just the same problem with current code! You mixed here two things!
I think you're reading more into what I was saying than what I actually said.
Sorry, maybe I misunderstood you ...
Quoted 4 lines
If there are e.g. 4 I2C controllers in an SoC, the driver needs to know which one is in use. Passing that information directly to the driver functions is much simple than requiring the SoC I2C driver to go grovel in some I2C core global variables to find out the same information.
Ah, do you mean we should change the i2c adapter struct from:
struct i2c_adapter {
void (*init)(int speed, int slaveaddr);
int (*probe)(uint8_t chip);
int (*read)(uint8_t chip, uint addr, int alen,
uint8_t *buffer, int len);
int (*write)(uint8_t chip, uint addr, int alen,
uint8_t *buffer, int len);
uint (*set_bus_speed)(uint speed);[...]
to
struct i2c_adapter {
void (*init)(struct i2c_adapter *adap, int speed, int slaveaddr);
int (*probe)(struct i2c_adapter *adap, uint8_t chip);
int (*read)(struct i2c_adapter *adap, uint8_t chip, uint addr, int alen,
uint8_t *buffer, int len);
int (*write)(struct i2c_adapter *adap, uint8_t chip, uint addr, int alen,
uint8_t *buffer, int len);
uint (*set_bus_speed)(struct i2c_adapter *adap, uint speed);[...]
?
We can do this. Simon suggested this too ...
@Simon: Is this Ok with you?
Nevertheless, we need a "cur_i2c_bus" pointer, as the i2c core, needs to know the current i2c bus for detecting if the bus, which whould be accessed is the current or not and a switching to another bus is needed.
Quoted 3 lines
This is all unrelated to I2C bus muxes; they shouldn't be implemented as part of an SoC I2C driver anyway, so the driver shouldn't know about bus muxes before or after this patch - the I2C core should manage that.
Exactly! And that do the new i2c framework in i2c_core.c!
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
Quoted 3 lines · Heiko Schocher
Hello Stephen,
On 29.10.2012 16:34, Stephen Warren wrote:
...
Quoted 34 lines
Quoted 4 lines
If there are e.g. 4 I2C controllers in an SoC, the driver needs to know which one is in use. Passing that information directly to the driver functions is much simple than requiring the SoC I2C driver to go grovel in some I2C core global variables to find out the same information.
Ah, do you mean we should change the i2c adapter struct from:
struct i2c_adapter { void (*init)(int speed, int slaveaddr); int (*probe)(uint8_t chip); int (*read)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); int (*write)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); uint (*set_bus_speed)(uint speed);[...]
to
struct
i2c_adapter{
void (*init)(structi2c_adapter*adap, int speed, int
slaveaddr);
int (*probe)(structi2c_adapter*adap,uint8_tchip);
int (*read)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
int (*write)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
uint (*set_bus_speed)(structi2c_adapter*adap, uint
speed);
[...]
?
Quoted 1 line
We can do this. Simon suggested this too ...
Yes, exactly. (the functions will need some way to get information out of the struct i2c_adapter; I assume there's some kind of driver_private field in there too).
cover Bring in new I2C framework
Hi,
Quoted 39 lines · Stephen Warren
Quoted 3 lines · Heiko Schocher
Hello Stephen,
On 29.10.2012 16:34, Stephen Warren wrote:
...
Quoted 34 lines
Quoted 4 lines
If there are e.g. 4 I2C controllers in an SoC, the driver needs to know which one is in use. Passing that information directly to the driver functions is much simple than requiring the SoC I2C driver to go grovel in some I2C core global variables to find out the same information.
Ah, do you mean we should change the i2c adapter struct from:
struct i2c_adapter { void (*init)(int speed, int slaveaddr); int (*probe)(uint8_t chip); int (*read)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); int (*write)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); uint (*set_bus_speed)(uint speed);[...]
to
struct
i2c_adapter{
void (*init)(structi2c_adapter*adap, int speed, int
slaveaddr);
int (*probe)(structi2c_adapter*adap,uint8_tchip);
int (*read)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
int (*write)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
uint (*set_bus_speed)(structi2c_adapter*adap, uint
speed);
[...]
?
Quoted 5 lines
Quoted 1 line
We can do this. Simon suggested this too ...
Yes, exactly. (the functions will need some way to get information out of the struct
i2c_adapter; I assume there's some kind ofdriver_privatefield in there too).
Yes.
I will post a few patches to move Tegra over to the new framework as it is, so that people can see the impact. Given that every driver has to change, it would be my preference to set the i2c API once. But I suppose within a short while everything will move to the device model, so perhaps the job of this series is just to move things in the right direction?
Regards,
Simon
cover Bring in new I2C framework
Hello Simon,
Quoted 48 lines · Simon Glass
Hi,
Quoted 39 lines · Stephen Warren
Quoted 3 lines · Heiko Schocher
Hello Stephen,
On 29.10.2012 16:34, Stephen Warren wrote:
...
Quoted 34 lines
Quoted 4 lines
If there are e.g. 4 I2C controllers in an SoC, the driver needs to know which one is in use. Passing that information directly to the driver functions is much simple than requiring the SoC I2C driver to go grovel in some I2C core global variables to find out the same information.
Ah, do you mean we should change the i2c adapter struct from:
struct i2c_adapter { void (*init)(int speed, int slaveaddr); int (*probe)(uint8_t chip); int (*read)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); int (*write)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); uint (*set_bus_speed)(uint speed);[...]
to
struct
i2c_adapter{
void (*init)(structi2c_adapter*adap, int speed, int
slaveaddr);
int (*probe)(structi2c_adapter*adap,uint8_tchip);
int (*read)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
int (*write)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
uint (*set_bus_speed)(structi2c_adapter*adap, uint
speed);
[...]
?Quoted 5 lines
Quoted 1 line
We can do this. Simon suggested this too ...
Yes, exactly. (the functions will need some way to get information out of the struct
i2c_adapter; I assume there's some kind ofdriver_privatefield in there too).
Quoted 8 lines
Yes.
I will post a few patches to move Tegra over to the new framework as it is, so that people can see the impact. Given that every driver has to change, it would be my preference to set the i2c API once. But I suppose within a short while everything will move to the device model, so perhaps the job of this series is just to move things in the right direction?
Yes, but not only, I think the i2c framework needs an update.
bye,
heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
In reply to Simon GlassQuoted 48 lines · Simon Glass
Hi,
Quoted 39 lines · Stephen Warren
Quoted 3 lines · Heiko Schocher
Hello Stephen,
On 29.10.2012 16:34, Stephen Warren wrote:
...
Quoted 34 lines
Quoted 4 lines
If there are e.g. 4 I2C controllers in an SoC, the driver needs to know which one is in use. Passing that information directly to the driver functions is much simple than requiring the SoC I2C driver to go grovel in some I2C core global variables to find out the same information.
Ah, do you mean we should change the i2c adapter struct from:
struct i2c_adapter { void (*init)(int speed, int slaveaddr); int (*probe)(uint8_t chip); int (*read)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); int (*write)(uint8_t chip, uint addr, int alen, uint8_t *buffer, int len); uint (*set_bus_speed)(uint speed);[...]
to
struct
i2c_adapter{
void (*init)(structi2c_adapter*adap, int speed, int
slaveaddr);
int (*probe)(structi2c_adapter*adap,uint8_tchip);
int (*read)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
int (*write)(structi2c_adapter*adap,uint8_tchip,
uint addr, int alen,
uint8_t*buffer, int len);
uint (*set_bus_speed)(structi2c_adapter*adap, uint
speed);
[...]
?Quoted 5 lines
Quoted 1 line
We can do this. Simon suggested this too ...
Yes, exactly. (the functions will need some way to get information out of the struct
i2c_adapter; I assume there's some kind ofdriver_privatefield in there too).
Quoted 8 lines
Yes.
I will post a few patches to move Tegra over to the new framework as it is, so that people can see the impact. Given that every driver has to change, it would be my preference to set the i2c API once. But I suppose within a short while everything will move to the device model, so perhaps the job of this series is just to move things in the right direction?
Funny enough I don't see a UDM-i2c.txt file, so I guess the community gets to think about that one :)
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121030/48d42ea8/attachment.pgp>
cover Bring in new I2C framework
In reply to Heiko SchocherHi Heiko,
Quoted 61 lines · Heiko Schocher
Hello Simon,
Quoted 8 lines · Simon Glass
Quoted 6 lines · Heiko Schocher
rebased/reworked the I2C multibus patches from Simon Glass found here:
http://www.mail-archive.com/u-boot at lists.denx.de/msg75530.html
Quoted 8 lines
Quoted 5 lines
It seems the timing is coming, to bring this in mainline and move boards over to the new i2c framework. As an example I converted the soft-i2c driver (and all boards using it) to the new framework, so this patchseries has to be tested intensively, as I can check compile only ...
I am very happy to see this, thank you.
I am too ;-) and Sorry that I am only now ready ...
Quoted 6 lines
I have brought this in and tried to get it running for Tegra. A few points:
1. The methods in struct
i2c_adaptershould IMO be passed a structi2c_adapter*, so they can determine which adapter is being accessed. Otherwise I can't see how they would know.They can get the current used adapter through the defines in
include/i2c.h:
[...]#define I2C_ADAP_NR(bus) i2c_adap[i2c_bus[bus].adapter] #define I2C_BUS ((struct i2c_bus_hose *)gd->cur_i2c_bus) #define I2C_ADAP i2c_adap[I2C_BUS->adapter] #define I2C_ADAP_HWNR (I2C_ADAP->hwadapnr)preparing just the fsl i2c driver and there I do for example:
drivers/i2c/fsl_i2c.c
[...]
static const structfsl_i2c*i2c_dev[2] = {
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C_OFFSET),
#ifdefCONFIG_SYS_FSL_I2C2_OFFSET
(structfsl_i2c*) (CONFIG_SYS_IMMR+CONFIG_SYS_FSL_I2C2_OFFSET)
#endif
};
[...]
static intfsl_i2c_probe(uchar chip){ struct fsl_i2c *dev = (struct fsl_i2c *)i2c_dev[I2C_ADAP_HWNR];[...]
but of course, we still can change the "struct
i2c_adapter" if needed ... but we have one more parameter ... Ok, not really a bad problem.
Quoted 6 lines
Quoted 3 lines
2. The init is a bit odd, in that we can call
init()repeatedly. Perhaps that function should be renamed to reset, and the init should be used for calling just once at the start?What do you mean here exactly? I couldn?t parse this ...
Well there is start-of-day setup, which I think should be called init. This is done once on boot for each i2c adapter.
And then there is the i2c_init() which seems to be called whenever we feel like it - e.g. to change speed. I suggest that we use init() to mean start-of-day init and reset(), or similar, to mean any post-init. I am not suggest that for this series, just as a future effort.
Quoted 34 lines
Quoted 5 lines
3. Rather than each device having to call
i2c_get_bus_num()to find out what bus is referred to, why not just pass this information in? In fact the adapter pointer can serve for this.Not the "struct
i2c_adapter" must passed, but the "structi2c_bus"!And each device should know, which i2c bus it uses, or? So at the end we should have something like
i2c_read(struct i2c_bus *bus, ...)calls ... and the i2c core can detect, if this bus is the current, if so go on, if not switch to this bus. So at the endi2c_set_bus_numwould be go static ...Quoted 8 lines
4. So perhaps the i2c read/write functions should change from:
int
i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)to:
int i2c_read((struct
i2c_adapter*adapter, uint addr, int alen, uchar *buffer, int len)Yep, exactly, see comments to point 3 ...
That would be the best (and I think in previous discussions I defined this as one goal ...), but this would be (another) big change, because this is an *API* change, with maybe a lot of config file changes ...
Quoted 4 lines
Let us bring in the new i2c framework with all i2c drivers converted, and then do the next step ... maybe one step more, if mareks device model is ready, we can switch easy to DM ... and maybe get this API change for free ...
Yes. I certainly understand the need to fit in with what is already there, and avoid a massive API change, which can be performed as a follow-on patch anyway. With your info above I will adjust the tegra driver to work with this and test it.
Quoted 10 lines
Quoted 8 lines
Later, I wonder whether the concept of a 'current' i2c bus should be maintained by the command line interpreter, rather than the i2c system. Because to be honest, most of the drivers I see have to save the current bus number, set the current bus, do the operation, then set the bus back how they found it (to preserve whatever the user things is the current bus).
Quoted 7 lines
Yes, suboptimal ... but this is independent from the new i2c framework patches!
It is possible (with old/new i2c bus framework) to introduce a "current commandline i2c bus", and then, before calling i2c_read/write from the commandline, call a
i2c_set_bus_num()... then we can get rid of this store/restore current i2c bus ... waiting for patches ;-)
OK.
Quoted 8 lines
Quoted 5 lines
Granted there is overhead with i2c muxes, but the i2c core can remember the state of these muxes and doesn't have to switch things until there has been a change since the last transaction.
This exactly do the
i2c_set_bus_num()now!
Great.
Quoted 7 lines
Quoted 4 lines
This last suggestion can be dealt with later, but I thought I would bring it up.
I am happy about every comment! :-)
Thanks,
Simon
Quoted 6 lines
bye,
Heiko
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
Hello Simon,
Quoted 7 lines · Simon Glass
Quoted 6 lines · Heiko Schocher
Hello Simon,
Quoted 2 lines · Simon Glass
On Mon, Oct 22, 2012 at 10:40 AM, Heiko Schocher<[email protected]> wrote:
[...]
Quoted 9 lines
Quoted 6 lines
Quoted 3 lines
2. The init is a bit odd, in that we can call
init()repeatedly. Perhaps that function should be renamed to reset, and the init should be used for calling just once at the start?What do you mean here exactly? I couldn?t parse this ...
Well there is start-of-day setup, which I think should be called init. This is done once on boot for each i2c adapter.
Hmm... I am not sure if this is only done on boot, because we should "close" or "deinit" an adapter if not used any more in U-Boot as the U-Boot principle says:
http://www.denx.de/wiki/view/U-Boot/DesignPrinciples#2_Keep_it_Fast
So I want to add in future some "deinit" to every adapter, and call it from i2c_set_bus() when switching to another i2c adapter ...
Quoted 4 lines
And then there is the
i2c_init()which seems to be called whenever we feel like it - e.g. to change speed. I suggest that we useinit()to mean start-of-day init andreset(), or similar, to mean any post-init. I am not suggest that for this series, just as a future effort.
Yes, that should be changed. We do not need an init() in the i2c API, as i2c_set_bus_num() do this for us (and later also the deinit())
We just need a set/get_speed() and a deblock()/reset() ?
Maybe a step in the API cleanup?
Quoted 37 lines
Quoted 32 lines
Quoted 3 lines
3. Rather than each device having to call
i2c_get_bus_num()to find out what bus is referred to, why not just pass this information in? In fact the adapter pointer can serve for this.Not the "struct
i2c_adapter" must passed, but the "structi2c_bus"!And each device should know, which i2c bus it uses, or? So at the end we should have something like
i2c_read(struct i2c_bus *bus, ...)calls ... and the i2c core can detect, if this bus is the current, if so go on, if not switch to this bus. So at the endi2c_set_bus_numwould be go static ...Quoted 8 lines
4. So perhaps the i2c read/write functions should change from:
int
i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)to:
int i2c_read((struct
i2c_adapter*adapter, uint addr, int alen, uchar *buffer, int len)Yep, exactly, see comments to point 3 ...
That would be the best (and I think in previous discussions I defined this as one goal ...), but this would be (another) big change, because this is an *API* change, with maybe a lot of config file changes ...
Quoted 4 lines
Let us bring in the new i2c framework with all i2c drivers converted, and then do the next step ... maybe one step more, if mareks device model is ready, we can switch easy to DM ... and maybe get this API change for free ...
Quoted 4 lines
Yes. I certainly understand the need to fit in with what is already there, and avoid a massive API change, which can be performed as a follow-on patch anyway. With your info above I will adjust the tegra driver to work with this and test it.
Ok, great! So I post v2 patches after you tested ...
And Yes, we should do this API change, but I tend to do this step after the new i2c framework is stable and all i2c drivers are converted to it ...
Quoted 31 lines
Quoted 8 lines
Quoted 6 lines
Later, I wonder whether the concept of a 'current' i2c bus should be maintained by the command line interpreter, rather than the i2c system. Because to be honest, most of the drivers I see have to save the current bus number, set the current bus, do the operation, then set the bus back how they found it (to preserve whatever the user things is the current bus).
Quoted 7 lines
Yes, suboptimal ... but this is independent from the new i2c framework patches!
It is possible (with old/new i2c bus framework) to introduce a "current commandline i2c bus", and then, before calling i2c_read/write from the commandline, call a
i2c_set_bus_num()... then we can get rid of this store/restore current i2c bus ... waiting for patches ;-)OK.
Quoted 8 lines
Quoted 5 lines
Granted there is overhead with i2c muxes, but the i2c core can remember the state of these muxes and doesn't have to switch things until there has been a change since the last transaction.
This exactly do the
i2c_set_bus_num()now!Great.
Quoted 2 lines
Quoted 8 lines
Quoted 5 lines
Quoted 2 lines
This last suggestion can be dealt with later, but I thought I would bring it up.
I am happy about every comment! :-)
Thanks,
Simon
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
Hi Heiko,
Quoted 30 lines · Heiko Schocher
Hello Simon,
Quoted 10 lines · Simon Glass
Quoted 8 lines · Heiko Schocher
Hello Simon,
Quoted 3 lines · Simon Glass
On Mon, Oct 22, 2012 at 10:40 AM, Heiko Schocher<[email protected]> wrote:
[...]
Quoted 11 lines
Quoted 7 lines
Quoted 3 lines
2. The init is a bit odd, in that we can call
init()repeatedly. Perhaps that function should be renamed to reset, and the init should be used for calling just once at the start?What do you mean here exactly? I couldn?t parse this ...
Well there is start-of-day setup, which I think should be called init. This is done once on boot for each i2c adapter.
Quoted 8 lines
Hmm... I am not sure if this is only done on boot, because we should "close" or "deinit" an adapter if not used any more in U-Boot as the U-Boot principle says:
http://www.denx.de/wiki/view/U-Boot/DesignPrinciples#2_Keep_it_Fast
So I want to add in future some "deinit" to every adapter, and call it from
i2c_set_bus()when switching to another i2c adapter ...
Well deinit() should be probably be done before finishing U-Boot, not after every transaction, since you don't know that the current transaction will be the last.
When using FDT, you need to look up the available i2c ports in the driver, and this should be done once at the start. If the i2c core can call a suitable init function then this is easier, rather than us having to keep track of whether the init is done or not.
Quoted 8 lines
Quoted 6 lines
And then there is the
i2c_init()which seems to be called whenever we feel like it - e.g. to change speed. I suggest that we useinit()to mean start-of-day init andreset(), or similar, to mean any post-init. I am not suggest that for this series, just as a future effort.
Quoted 6 lines
Yes, that should be changed. We do not need an
init()in the i2c API, asi2c_set_bus_num()do this for us (and later also thedeinit())We just need a set/get_speed() and a deblock()/reset() ?
Maybe a step in the API cleanup?
Yes, a future step I think. I feel that i2c is one of the darker corners of U-Boot and so am keen to get this tidied up.
Quoted 48 lines
Quoted 42 lines
Quoted 36 lines
Quoted 5 lines
3. Rather than each device having to call
i2c_get_bus_num()to find out what bus is referred to, why not just pass this information in? In fact the adapter pointer can serve for this.Not the "struct
i2c_adapter" must passed, but the "structi2c_bus"!And each device should know, which i2c bus it uses, or? So at the end we should have something like
i2c_read(struct i2c_bus *bus, ...)calls ... and the i2c core can detect, if this bus is the current, if so go on, if not switch to this bus. So at the endi2c_set_bus_numwould be go static ...Quoted 8 lines
4. So perhaps the i2c read/write functions should change from:
int
i2c_read(uchar chip, uint addr, int alen, uchar *buffer, int len)to:
int i2c_read((struct
i2c_adapter*adapter, uint addr, int alen, uchar *buffer, int len)Yep, exactly, see comments to point 3 ...
That would be the best (and I think in previous discussions I defined this as one goal ...), but this would be (another) big change, because this is an *API* change, with maybe a lot of config file changes ...
Quoted 4 lines
Let us bring in the new i2c framework with all i2c drivers converted, and then do the next step ... maybe one step more, if mareks device model is ready, we can switch easy to DM ... and maybe get this API change for free ...
Quoted 4 lines
Yes. I certainly understand the need to fit in with what is already there, and avoid a massive API change, which can be performed as a follow-on patch anyway. With your info above I will adjust the tegra driver to work with this and test it.
Quoted 4 lines
Ok, great! So I post v2 patches after you tested ...
And Yes, we should do this API change, but I tend to do this step after the new i2c framework is stable and all i2c drivers are converted to it ...
[snip]
Regards,
Simon
Quoted 5 lines
bye,
Heiko
--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
Hello Simon,
Quoted 37 lines · Simon Glass
Hi Heiko,
Quoted 34 lines · Heiko Schocher
Hello Simon,
Quoted 10 lines · Simon Glass
Quoted 8 lines · Heiko Schocher
Hello Simon,
Quoted 3 lines · Simon Glass
On Mon, Oct 22, 2012 at 10:40 AM, Heiko Schocher<[email protected]> wrote:
[...]
Quoted 11 lines
Quoted 7 lines
Quoted 3 lines
2. The init is a bit odd, in that we can call
init()repeatedly. Perhaps that function should be renamed to reset, and the init should be used for calling just once at the start?What do you mean here exactly? I couldn?t parse this ...
Well there is start-of-day setup, which I think should be called init. This is done once on boot for each i2c adapter.
Hmm... I am not sure if this is only done on boot, because we should "close" or "deinit" an adapter if not used any more in U-Boot as the U-Boot principle says:
Quoted 8 lines
Quoted 4 lines
http://www.denx.de/wiki/view/U-Boot/DesignPrinciples#2_Keep_it_Fast
So I want to add in future some "deinit" to every adapter, and call it from
i2c_set_bus()when switching to another i2c adapter ...Well
deinit()should be probably be done before finishing U-Boot, not after every transaction, since you don't know that the current transaction will be the last.
Not after every transaction, only when switching to another adapter, or before booting linux ...
Quoted 4 lines
When using FDT, you need to look up the available i2c ports in the driver, and this should be done once at the start. If the i2c core can call a suitable init function then this is easier, rather than us having to keep track of whether the init is done or not.
Dummy question, why is this needed when using FDT?
Quoted 9 lines
Quoted 9 lines
Quoted 4 lines
And then there is the
i2c_init()which seems to be called whenever we feel like it - e.g. to change speed. I suggest that we useinit()to mean start-of-day init andreset(), or similar, to mean any post-init. I am not suggest that for this series, just as a future effort.Yes, that should be changed. We do not need an
init()in the i2c API, asi2c_set_bus_num()do this for us (and later also thedeinit())
Quoted 6 lines
Quoted 3 lines
We just need a set/get_speed() and a deblock()/reset() ?
Maybe a step in the API cleanup?
Yes, a future step I think. I feel that i2c is one of the darker corners of U-Boot and so am keen to get this tidied up.
Patches are welcome! Let us bring in the new framework, clean up the i2c API / maybe DM integration, then we are on a good way I think ...
[...]
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
In reply to Simon GlassOn Thu, Oct 25, 2012 at 02:37:08PM -0700, Simon Glass wrote:
[snip]
Quoted 6 lines
Later, I wonder whether the concept of a 'current' i2c bus should be maintained by the command line interpreter, rather than the i2c system. Because to be honest, most of the drivers I see have to save the current bus number, set the current bus, do the operation, then set the bus back how they found it (to preserve whatever the user things is the current bus).
I agree. Lets move the notion of "current" to cmd_i2c and make everything internally pass around the bus to operate on. Or try going down this path and find a fatal problem :)
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121026/f80ee320/attachment.pgp>
cover Bring in new I2C framework
Hello Tom,
Quoted 10 lines · Tom Rini
On Thu, Oct 25, 2012 at 02:37:08PM -0700, Simon Glass wrote:
[snip]
Quoted 6 lines
Later, I wonder whether the concept of a 'current' i2c bus should be maintained by the command line interpreter, rather than the i2c system. Because to be honest, most of the drivers I see have to save the current bus number, set the current bus, do the operation, then set the bus back how they found it (to preserve whatever the user things is the current bus).
Quoted 3 lines
I agree. Lets move the notion of "current" to
cmd_i2cand make everything internally pass around the bus to operate on. Or try going down this path and find a fatal problem :)
As I wrote to simon, stephen, this is an independent problem from the new framework patches!
- There are two steps to do:
- save the curent cmdline bus in a variable, and call i2c_set_bus_num() before you call i2c_* from the commandline, get rid of the store/restore calls ...
- change the i2c API to pass the i2c bus in the i2c_* functions
-> in the new i2c framework, i2c_set_bus() gets static and the
gd->current_i2c_bus is used only in i2c_core.cThis two steps can be done in one step, but the second step is complicated enough, so it is better to do it in two steps (I think)!
Waiting for patches ;-)
The i2c framework change is independent from this! The current_i2c_bus is used i2c_core internally for storing the current active i2c bus, based on the idea of having only one i2c bus active in U-Boot, see therefore the U-Boot principle:
http://www.denx.de/wiki/view/U-Boot/DesignPrinciples#2_Keep_it_Fast
"Initialize devices only when they are needed within U-Boot, i.e. don't initialize the Ethernet interface(s) unless U-Boot performs" [...]", etc. (and don't forget to shut down these devices after using them - otherwise nasty things may happen when you try to boot your OS). "
therefore the "current i2c bus" is needed! If we want to drop this "U-Boot principle", we can get rid of current_i2c_bus ... (Ok, currently U-Boot do not deactivate not used i2c adapters ...)
bye,
Heiko
Signature · 2 lines
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
cover Bring in new I2C framework
Quoted 13 lines · Heiko Schocher
Hello Tom,
Quoted 10 lines · Tom Rini
On Thu, Oct 25, 2012 at 02:37:08PM -0700, Simon Glass wrote:
[snip]
Quoted 6 lines
Later, I wonder whether the concept of a 'current' i2c bus should be maintained by the command line interpreter, rather than the i2c system. Because to be honest, most of the drivers I see have to save the current bus number, set the current bus, do the operation, then set the bus back how they found it (to preserve whatever the user things is the current bus).
Quoted 6 lines
Quoted 3 lines
I agree. Lets move the notion of "current" to
cmd_i2cand make everything internally pass around the bus to operate on. Or try going down this path and find a fatal problem :)As I wrote to simon, stephen, this is an independent problem from the new framework patches!
OK. I was hoping we could just:
- Change init_func_i2c (for ARM/m68k/ppc/nds32, equiv elsewhere) to init all configured busses.
- Change the CLI part to track what bus it is operating on.
It sounds like it's more work than just this, really. Since there is agreement to push things further after this update, yes, OK, we can go one step at a time here. Thanks!
Signature · 8 lines
Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121030/30eda42a/attachment.pgp>