Skip to contentSkip to conversation

common/i2c: Add i2c write command

PATCH New York Sun 4 participants 9 messages Sep 16, 2012 – Oct 16, 2012

lore
Share & tools
lore

York Sun

author
#0 lore raw

PATCH 1/1 common/i2c: Add i2c write command

Add i2c write command to write data from memory to i2c devices.

---
 common/cmd_i2c.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 50 insertions(+)
common/cmd_i2c.c +50 -0
index 2cdc4ed..6099115 100644
@@ -223,6 +223,54 @@ static int do_i2c_read ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv
 	return 0;
 }
 
+static int do_i2c_write(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+	u_char	chip;
+	uint	devaddr, alen, length;
+	u_char  *memaddr;
+
+	if (argc != 5)
+		return cmd_usage(cmdtp);
+
+	/*
+	 * memaddr is the address where to store things in memory
+	 */
+	memaddr = (u_char *)simple_strtoul(argv[1], NULL, 16);
+
+	/*
+	 * I2C chip address
+	 */
+	chip = simple_strtoul(argv[2], NULL, 16);
+
+	/*
+	 * I2C data address within the chip.  This can be 1 or
+	 * 2 bytes long.  Some day it might be 3 bytes long :-).
+	 */
+	devaddr = simple_strtoul(argv[3], NULL, 16);
+	alen = get_alen(argv[3]);
+	if (alen > 3)
+		return cmd_usage(cmdtp);
+
+	/*
+	 * Length is the number of objects, not number of bytes.
+	 */
+	length = simple_strtoul(argv[4], NULL, 16);
+
+	while (length-- > 0) {
+		if (i2c_write(chip, devaddr++, alen, memaddr++, 1) != 0) {
+			puts("Error writing to the chip.\n");
+			return 1;
+		}
+/*
+ * No write delay with FRAM devices.
+ */
+#if !defined(CONFIG_SYS_I2C_FRAM)
+		udelay(11000);
+#endif
+	}
+	return 0;
+}
+
 /*
  * Syntax:
  *	i2c md {i2c_chip} {addr}{.0, .1, .2} {len}
@@ -1282,6 +1330,7 @@ static cmd_tbl_t cmd_i2c_sub[] = {
 	U_BOOT_CMD_MKENT(nm, 2, 1, do_i2c_nm, "", ""),
 	U_BOOT_CMD_MKENT(probe, 0, 1, do_i2c_probe, "", ""),
 	U_BOOT_CMD_MKENT(read, 5, 1, do_i2c_read, "", ""),
+	U_BOOT_CMD_MKENT(write, 5, 0, do_i2c_write, "", ""),
 	U_BOOT_CMD_MKENT(reset, 0, 1, do_i2c_reset, "", ""),
 #if defined(CONFIG_CMD_SDRAM)
 	U_BOOT_CMD_MKENT(sdram, 1, 1, do_sdram, "", ""),
@@ -1333,6 +1382,7 @@ U_BOOT_CMD(
 	"i2c nm chip address[.0, .1, .2] - write to I2C device (constant address)\n"
 	"i2c probe - show devices on the I2C bus\n"
 	"i2c read chip address[.0, .1, .2] length memaddress - read to memory \n"
+	"i2c write memaddress chip address[.0, .1, .2] length - write memory to i2c\n"
 	"i2c reset - re-init the I2C Controller\n"
 #if defined(CONFIG_CMD_SDRAM)
 	"i2c sdram chip - print SDRAM configuration information\n"
Signature · 1 line
1.7.9.5
#1 lore raw

PATCH 1/1 common/i2c: Add i2c write command

Quoted 3 lines · York Sun

Add i2c write command to write data from memory to i2c devices.

This feels like eeprom write, to an i2c-connected eeprom. Is that what you have this for, or something else?

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/20120917/dc99f4a4/attachment.pgp>
#2 lore raw

PATCH 1/1 common/i2c: Add i2c write command

Tom,

It's like eeprom write but it writes to general devices, not specificly to system eeprom. I would have to use i2c mw command a lot without this.

York

-------- Original Message --------
From: Tom Rini
Sent: Mon, Sep 17, 2012 05:16 PM
To: sun york-R58495
CC: u-boot at lists.denx.de; u-boot-release at linux.freescale.net; Heiko Schocher
Subject: Re: [U-Boot] [PATCH] common/i2c: Add i2c write command

Quoted 3 lines · York Sun

Add i2c write command to write data from memory to i2c devices.

This feels like eeprom write, to an i2c-connected eeprom. Is that what you have this for, or something else?

--
Tom

#3 lore raw

PATCH 1/1 common/i2c: Add i2c write command

Quoted 3 lines · On Mon, Sep 17, 2012 at 11:29:00PM +0000, sun york-R58495 wrote:

Tom,

It's like eeprom write but it writes to general devices, not specificly to system eeprom. I would have to use i2c mw command a lot without this.

Right. I guess what I'm getting at is, are you writing to some sort of other device or writing bits to storage attached to i2c? Does it really not make sense to just use 'eeprom write' even if it's not technically for The System EEPROM but rather some storage (or a number of storage chips) attached via i2c?

I'm not objecting to i2c write mind you, I was wishing for something like this when I stumbled on CONFIG_CMD_EEPROM which did what I needed.

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/20120917/104a8b5c/attachment.pgp>
author
#4 lore raw

PATCH 1/1 common/i2c: Add i2c write command

Quoted 6 lines · Tom Rini
Quoted 3 lines · On Mon, Sep 17, 2012 at 11:29:00PM +0000, sun york-R58495 wrote:

Tom,

It's like eeprom write but it writes to general devices, not specificly to system eeprom. I would have to use i2c mw command a lot without this.

Quoted 9 lines

Right. I guess what I'm getting at is, are you writing to some sort of other device or writing bits to storage attached to i2c? Does it really not make sense to just use 'eeprom write' even if it's not technically for The System EEPROM but rather some storage (or a number of storage chips) attached via i2c?

I'm not objecting to i2c write mind you, I was wishing for something like this when I stumbled on CONFIG_CMD_EEPROM which did what I needed.

Tom,

I have a case under debugging where I need to use i2c write to devices. One device (EEPROM) has two-byte address length and most others (including other EEPROMs) have one byte address length. I also have other non-storage devices but I wouldn't use "i2c write" because "i2c mw" will be sufficient. eeprom command has its limitation for the case of variable device address and variable address length.

York

author
#5 lore raw

PATCH 1/1 common/i2c: Add i2c write command

Quoted 7 lines · York Sun

I have a case under debugging where I need to use i2c write to devices. One device (EEPROM) has two-byte address length and most others (including other EEPROMs) have one byte address length. I also have other non-storage devices but I wouldn't use "i2c write" because "i2c mw" will be sufficient. eeprom command has its limitation for the case of variable device address and variable address length.

Tom,

Do I need to change this patch in any way? I see it is still "under review" in patchwork.

York

#6 lore raw

PATCH 1/1 common/i2c: Add i2c write command

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 10 lines · York Sun
Quoted 8 lines · York Sun

I have a case under debugging where I need to use i2c write to devices. One device (EEPROM) has two-byte address length and most others (including other EEPROMs) have one byte address length. I also have other non-storage devices but I wouldn't use "i2c write" because "i2c mw" will be sufficient. eeprom command has its limitation for the case of variable device address and variable address length.

Quoted 4 lines

Tom,

Do I need to change this patch in any way? I see it is still "under review" in patchwork.

I am fine with it. This falls to Heiko now, thanks.

- --
Tom

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQIcBAEBAgAGBQJQYhItAAoJENk4IS6UOR1WsbwP/R8Uuvih8dFBR6TTHyIuyIfF O32bPad2IqlnZngiuiX9YKWjD2ZIr3sKCDClDJnXGqdBZl0A+JABFbWzeqfEgmTW f62NAfNjDWlHzvCr1DbapMb6XCbJ5myHU+Bo0KDc0ObV6/Fl54p4pDmREEGGVfzN o1quFJvBOcQSV8VNrj2YhMfZUkG9TE0+bYvZ4QUR9En8Q7PFQNyrOjni6iudV83Y /61tIsqEQdCp5aOe0CbuWfeeTXDLlIrJ0O78f1enpfzMRxTJ6wt4a4/LCIbeI7JV Ji78P+atTACS3p+6EpyBxLaxofOCgLSmOEB9b8X4jGZjoMrbqpc6fOYLh2xVDS6W oUhRueEdx4NJ9gio/aekn8wnkw3u3WkD3AL+x4+APZrilTiKPtwhfgyVxbgJXAFh VbCJ6CfVkWYpak6roJH627RsHfvBR8PrGb169sKrDPSiWOL/zNmJ6700Vd0VPJZf 462zRxeyobTA1D6YcfAPxoV7fgBho/ze6CHgizOtMGpZS+RlxnewLs0rtmSnU+2s jY/vHQxyN+5ColfvZpvgAfME9HPD1efhTW74rS8MdPbg8iucMz1561mxjvfCGZSg YgHIwR3ls8hb3D1b7zFLG8bs7ESWXagIKJz7Sq2B4Heg9o6JzgY2q4Yk+lway8Ib X8Wwdk3Iv43o4oY4wd4K
=ANCQ
-----END PGP SIGNATURE-----

#7 lore raw

PATCH 1/1 common/i2c: Add i2c write command

Hello Tom, York,

On 25.09.2012 22:21, Tom Rini wrote:
[...]

Quoted 6 lines
Quoted 4 lines

Tom,

Do I need to change this patch in any way? I see it is still "under review" in patchwork.

I am fine with it. This falls to Heiko now, thanks.

It looks good to me too. I add it in the next merge window.

bye,
Heiko

Signature · 2 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
#8 lore raw

PATCH 1/1 common/i2c: Add i2c write command

In reply to York Sun

Hello York Sun,

Quoted 6 lines · York Sun

Add i2c write command to write data from memory to i2c devices.

---
  common/cmd_i2c.c |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
  1 file changed, 50 insertions(+)

Applied to u-boot-i2c master

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