Commit 4f296d09e13c04a7bca38f6cf1150b9417d054d4
Committed by
Tom Rini
1 parent
8961dac970
Exists in
v2017.01-smarct4x
and in
30 other branches
eeprom: Shuffle code around
Just move the code around so that the forward declarations are not necessary. Also zap a few checkpatch issues where applicable and zap the use of #ifdef CONFIG_CMD_EEPROM in the code, since this is always true. Signed-off-by: Marek Vasut <marex@denx.de> Cc: Simon Glass <sjg@chromium.org> Cc: Tom Rini <trini@konsulko.com> Cc: Heiko Schocher <hs@denx.de> Reviewed-by: Heiko Schocher <hs@denx.de>
Showing 1 changed file with 70 additions and 98 deletions Side-by-side Diff
common/cmd_eeprom.c
... | ... | @@ -25,94 +25,55 @@ |
25 | 25 | #include <command.h> |
26 | 26 | #include <i2c.h> |
27 | 27 | |
28 | -extern void eeprom_init (void); | |
29 | -extern int eeprom_read (unsigned dev_addr, unsigned offset, | |
30 | - uchar *buffer, unsigned cnt); | |
31 | -extern int eeprom_write (unsigned dev_addr, unsigned offset, | |
32 | - uchar *buffer, unsigned cnt); | |
33 | -#if defined(CONFIG_SYS_EEPROM_WREN) | |
34 | -extern int eeprom_write_enable (unsigned dev_addr, int state); | |
28 | +#ifndef CONFIG_SYS_I2C_SPEED | |
29 | +#define CONFIG_SYS_I2C_SPEED 50000 | |
35 | 30 | #endif |
36 | 31 | |
37 | - | |
32 | +/* Maximum number of times to poll for acknowledge after write */ | |
38 | 33 | #if defined(CONFIG_SYS_EEPROM_X40430) |
39 | - /* Maximum number of times to poll for acknowledge after write */ | |
40 | 34 | #define MAX_ACKNOWLEDGE_POLLS 10 |
41 | 35 | #endif |
42 | 36 | |
43 | -/* ------------------------------------------------------------------------- */ | |
44 | - | |
45 | -#if defined(CONFIG_CMD_EEPROM) | |
46 | -static int do_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | |
47 | -{ | |
48 | - const char *const fmt = | |
49 | - "\nEEPROM @0x%lX %s: addr %08lx off %04lx count %ld ... "; | |
50 | - | |
51 | -#if defined(CONFIG_SYS_I2C_MULTI_EEPROMS) | |
52 | - if (argc == 6) { | |
53 | - ulong dev_addr = simple_strtoul (argv[2], NULL, 16); | |
54 | - ulong addr = simple_strtoul (argv[3], NULL, 16); | |
55 | - ulong off = simple_strtoul (argv[4], NULL, 16); | |
56 | - ulong cnt = simple_strtoul (argv[5], NULL, 16); | |
57 | -#else | |
58 | - if (argc == 5) { | |
59 | - ulong dev_addr = CONFIG_SYS_DEF_EEPROM_ADDR; | |
60 | - ulong addr = simple_strtoul (argv[2], NULL, 16); | |
61 | - ulong off = simple_strtoul (argv[3], NULL, 16); | |
62 | - ulong cnt = simple_strtoul (argv[4], NULL, 16); | |
63 | -#endif /* CONFIG_SYS_I2C_MULTI_EEPROMS */ | |
64 | - | |
65 | -# if !defined(CONFIG_SPI) || defined(CONFIG_ENV_EEPROM_IS_ON_I2C) | |
66 | - eeprom_init (); | |
67 | -# endif /* !CONFIG_SPI */ | |
68 | - | |
69 | - if (strcmp (argv[1], "read") == 0) { | |
70 | - int rcode; | |
71 | - | |
72 | - printf (fmt, dev_addr, argv[1], addr, off, cnt); | |
73 | - | |
74 | - rcode = eeprom_read (dev_addr, off, (uchar *) addr, cnt); | |
75 | - | |
76 | - puts ("done\n"); | |
77 | - return rcode; | |
78 | - } else if (strcmp (argv[1], "write") == 0) { | |
79 | - int rcode; | |
80 | - | |
81 | - printf (fmt, dev_addr, argv[1], addr, off, cnt); | |
82 | - | |
83 | - rcode = eeprom_write (dev_addr, off, (uchar *) addr, cnt); | |
84 | - | |
85 | - puts ("done\n"); | |
86 | - return rcode; | |
87 | - } | |
88 | - } | |
89 | - | |
90 | - return CMD_RET_USAGE; | |
91 | -} | |
92 | -#endif | |
93 | - | |
94 | -/*----------------------------------------------------------------------- | |
95 | - * | |
37 | +/* | |
96 | 38 | * for CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 2 (16-bit EEPROM address) offset is |
97 | 39 | * 0x000nxxxx for EEPROM address selectors at n, offset xxxx in EEPROM. |
98 | 40 | * |
99 | 41 | * for CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 1 (8-bit EEPROM page address) offset is |
100 | 42 | * 0x00000nxx for EEPROM address selectors and page number at n. |
101 | 43 | */ |
102 | - | |
103 | 44 | #if !defined(CONFIG_SPI) || defined(CONFIG_ENV_EEPROM_IS_ON_I2C) |
104 | -#if !defined(CONFIG_SYS_I2C_EEPROM_ADDR_LEN) || CONFIG_SYS_I2C_EEPROM_ADDR_LEN < 1 || CONFIG_SYS_I2C_EEPROM_ADDR_LEN > 2 | |
45 | +#if !defined(CONFIG_SYS_I2C_EEPROM_ADDR_LEN) || \ | |
46 | + (CONFIG_SYS_I2C_EEPROM_ADDR_LEN < 1) || \ | |
47 | + (CONFIG_SYS_I2C_EEPROM_ADDR_LEN > 2) | |
105 | 48 | #error CONFIG_SYS_I2C_EEPROM_ADDR_LEN must be 1 or 2 |
106 | 49 | #endif |
107 | 50 | #endif |
108 | 51 | |
52 | +#if defined(CONFIG_SYS_EEPROM_WREN) | |
53 | +extern int eeprom_write_enable (unsigned dev_addr, int state); | |
54 | +#endif | |
55 | + | |
56 | +void eeprom_init(void) | |
57 | +{ | |
58 | + /* SPI EEPROM */ | |
59 | +#if defined(CONFIG_SPI) && !defined(CONFIG_ENV_EEPROM_IS_ON_I2C) | |
60 | + spi_init_f (); | |
61 | +#endif | |
62 | + | |
63 | + /* I2C EEPROM */ | |
64 | +#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SYS_I2C_SOFT) | |
65 | + i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); | |
66 | +#endif | |
67 | +} | |
68 | + | |
109 | 69 | int eeprom_read (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt) |
110 | 70 | { |
111 | 71 | unsigned end = offset + cnt; |
112 | 72 | unsigned blk_off; |
113 | 73 | int rcode = 0; |
114 | 74 | |
115 | - /* Read data until done or would cross a page boundary. | |
75 | + /* | |
76 | + * Read data until done or would cross a page boundary. | |
116 | 77 | * We must write the address again when changing pages |
117 | 78 | * because the next page may be in a different device. |
118 | 79 | */ |
... | ... | @@ -174,15 +135,6 @@ |
174 | 135 | return rcode; |
175 | 136 | } |
176 | 137 | |
177 | -/*----------------------------------------------------------------------- | |
178 | - * | |
179 | - * for CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 2 (16-bit EEPROM address) offset is | |
180 | - * 0x000nxxxx for EEPROM address selectors at n, offset xxxx in EEPROM. | |
181 | - * | |
182 | - * for CONFIG_SYS_I2C_EEPROM_ADDR_LEN == 1 (8-bit EEPROM page address) offset is | |
183 | - * 0x00000nxx for EEPROM address selectors and page number at n. | |
184 | - */ | |
185 | - | |
186 | 138 | int eeprom_write (unsigned dev_addr, unsigned offset, uchar *buffer, unsigned cnt) |
187 | 139 | { |
188 | 140 | unsigned end = offset + cnt; |
... | ... | @@ -200,7 +152,8 @@ |
200 | 152 | #if defined(CONFIG_SYS_EEPROM_WREN) |
201 | 153 | eeprom_write_enable (dev_addr,1); |
202 | 154 | #endif |
203 | - /* Write data until done or would cross a write page boundary. | |
155 | + /* | |
156 | + * Write data until done or would cross a write page boundary. | |
204 | 157 | * We must write the address again when changing pages |
205 | 158 | * because the address counter only increments within a page. |
206 | 159 | */ |
... | ... | @@ -363,8 +316,7 @@ |
363 | 316 | } |
364 | 317 | |
365 | 318 | #if !defined(CONFIG_SPI) || defined(CONFIG_ENV_EEPROM_IS_ON_I2C) |
366 | -int | |
367 | -eeprom_probe (unsigned dev_addr, unsigned offset) | |
319 | +int eeprom_probe(unsigned dev_addr, unsigned offset) | |
368 | 320 | { |
369 | 321 | unsigned char chip; |
370 | 322 | |
371 | 323 | |
372 | 324 | |
373 | 325 | |
374 | 326 | |
375 | 327 | |
376 | 328 | |
... | ... | @@ -382,31 +334,53 @@ |
382 | 334 | } |
383 | 335 | #endif |
384 | 336 | |
385 | -/*----------------------------------------------------------------------- | |
386 | - * Set default values | |
387 | - */ | |
388 | -#ifndef CONFIG_SYS_I2C_SPEED | |
389 | -#define CONFIG_SYS_I2C_SPEED 50000 | |
390 | -#endif | |
391 | - | |
392 | -void eeprom_init (void) | |
337 | +static int do_eeprom(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) | |
393 | 338 | { |
339 | + const char *const fmt = | |
340 | + "\nEEPROM @0x%lX %s: addr %08lx off %04lx count %ld ... "; | |
394 | 341 | |
395 | -#if defined(CONFIG_SPI) && !defined(CONFIG_ENV_EEPROM_IS_ON_I2C) | |
396 | - spi_init_f (); | |
397 | -#endif | |
398 | -#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SYS_I2C_SOFT) | |
399 | - i2c_init (CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE); | |
400 | -#endif | |
401 | -} | |
342 | +#if defined(CONFIG_SYS_I2C_MULTI_EEPROMS) | |
343 | + if (argc == 6) { | |
344 | + ulong dev_addr = simple_strtoul (argv[2], NULL, 16); | |
345 | + ulong addr = simple_strtoul (argv[3], NULL, 16); | |
346 | + ulong off = simple_strtoul (argv[4], NULL, 16); | |
347 | + ulong cnt = simple_strtoul (argv[5], NULL, 16); | |
348 | +#else | |
349 | + if (argc == 5) { | |
350 | + ulong dev_addr = CONFIG_SYS_DEF_EEPROM_ADDR; | |
351 | + ulong addr = simple_strtoul (argv[2], NULL, 16); | |
352 | + ulong off = simple_strtoul (argv[3], NULL, 16); | |
353 | + ulong cnt = simple_strtoul (argv[4], NULL, 16); | |
354 | +#endif /* CONFIG_SYS_I2C_MULTI_EEPROMS */ | |
402 | 355 | |
403 | -/*----------------------------------------------------------------------- | |
404 | - */ | |
356 | +# if !defined(CONFIG_SPI) || defined(CONFIG_ENV_EEPROM_IS_ON_I2C) | |
357 | + eeprom_init (); | |
358 | +# endif /* !CONFIG_SPI */ | |
405 | 359 | |
406 | -/***************************************************/ | |
360 | + if (strcmp (argv[1], "read") == 0) { | |
361 | + int rcode; | |
407 | 362 | |
408 | -#if defined(CONFIG_CMD_EEPROM) | |
363 | + printf (fmt, dev_addr, argv[1], addr, off, cnt); | |
409 | 364 | |
365 | + rcode = eeprom_read (dev_addr, off, (uchar *) addr, cnt); | |
366 | + | |
367 | + puts ("done\n"); | |
368 | + return rcode; | |
369 | + } else if (strcmp (argv[1], "write") == 0) { | |
370 | + int rcode; | |
371 | + | |
372 | + printf (fmt, dev_addr, argv[1], addr, off, cnt); | |
373 | + | |
374 | + rcode = eeprom_write (dev_addr, off, (uchar *) addr, cnt); | |
375 | + | |
376 | + puts ("done\n"); | |
377 | + return rcode; | |
378 | + } | |
379 | + } | |
380 | + | |
381 | + return CMD_RET_USAGE; | |
382 | +} | |
383 | + | |
410 | 384 | #ifdef CONFIG_SYS_I2C_MULTI_EEPROMS |
411 | 385 | U_BOOT_CMD( |
412 | 386 | eeprom, 6, 1, do_eeprom, |
... | ... | @@ -424,6 +398,4 @@ |
424 | 398 | " - read/write `cnt' bytes at EEPROM offset `off'" |
425 | 399 | ) |
426 | 400 | #endif /* CONFIG_SYS_I2C_MULTI_EEPROMS */ |
427 | - | |
428 | -#endif |