[U-Boot-Users] [Patch 6/9]U-boot-V2:cmd: I2C commands support
Menon, Nishanth
x0nishan at ti.com
Thu Jun 19 17:12:56 CEST 2008
This adds i2c documentation, build options
for i2c commands and a support header.
Signed-off-by: Nishanth Menon <x0nishan at ti.com>
---
Documentation/commands.dox | 4
commands/Kconfig | 31 +++++
commands/i2c.c | 233 +++++++++++++++++++++++++++++++++++++++++++++
commands/i2c.h | 65 ++++++++++++
4 files changed, 333 insertions(+)
Index: u-boot-v2.git/commands/i2c.h
===================================================================
--- /dev/null 1970-01-01 00:00:00.000000000 +0000
+++ u-boot-v2.git/commands/i2c.h 2008-06-19 09:31:42.000000000 -0500
@@ -0,0 +1,65 @@
+/**
+ * @file
+ * @brief I2C Commands specific header.
+ *
+ * FileName: commands/i2c.h
+ * This provides i2cdump, i2cdetect, i2cset and i2cget appplications
+ * The code originates from the i2c-tools located here:
+ * http://www.lm-sensors.org/wiki/I2CTools
+ * This is used by the c file
+ */
+/*
+ * (C) Copyright 2006-2008
+ * Texas Instruments, <www.ti.com>
+ * Nishanth Menon <x0nishan at ti.com>
+ *
+ * This application is based on the following:
+ *
+ * i2cbusses: Print the installed i2c busses for both 2.4 and 2.6 kernels.
+ * Part of user-space programs to access for I2C
+ * devices.
+ * Copyright (c) 1999-2003 Frodo Looijaard <frodol at dds.nl> and
+ * Mark D. Studebaker <mdsxyz123 at yahoo.com>
+ * Copyright (C) 2008 Jean Delvare <khali at linux-fr.org>
+ * i2cdump.c - a user-space program to dump I2C registers
+ * Copyright (C) 2002-2003 Frodo Looijaard <frodol at dds.nl>, and
+ * Mark D. Studebaker <mdsxyz123 at yahoo.com>
+ * Copyright (C) 2004-2008 Jean Delvare <khali at linux-fr.org>
+ * i2cget.c - A user-space program to read an I2C register.
+ * Copyright (C) 2005-2008 Jean Delvare <khali at linux-fr.org>
+ * i2cset.c - A user-space program to write an I2C register.
+ * Copyright (C) 2001-2003 Frodo Looijaard <frodol at dds.nl>, and
+ * Mark D. Studebaker <mdsxyz123 at yahoo.com>
+ * Copyright (C) 2004-2008 Jean Delvare <khali at linux-fr.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA.
+ */
+
+#ifndef __CMD_I2C_H
+#define __CMD_I2C_H
+
+/*********** "USER SPACE I2C Access APIs" ************/
+
+int lookup_i2c_bus(const char *i2cbus_arg);
+int open_i2c_dev(const int i2cbus, char *filename, const int quiet);
+int parse_i2c_address(const char *address_arg);
+int set_slave_addr(int file, int address, int force);
+int check_funcs(int file, int size, int daddress, int pec);
+int read_i2c(int file, uchar daddr, u16 addr, u8 reg_width, char *buffer,
+ size_t count);
+int write_i2c(int file, uchar daddr, u16 addr, u8 reg_width, char *buffer,
+ size_t count);
+#endif /* __CMD_I2C_H */
Index: u-boot-v2.git/Documentation/commands.dox
===================================================================
--- u-boot-v2.git.orig/Documentation/commands.dox 2008-06-19 09:29:03.000000000 -0500
+++ u-boot-v2.git/Documentation/commands.dox 2008-06-19 09:31:42.000000000 -0500
@@ -20,5 +20,9 @@
- @subpage setenv_command
- @subpage sh_command
- @subpage unprotect_command
+ - @subpage page_do_cmd_i2c_detect
+ - @subpage page_do_cmd_i2c_dump
+ - @subpage page_do_cmd_i2c_get
+ - @subpage page_do_cmd_i2c_set
*/
Index: u-boot-v2.git/commands/Kconfig
===================================================================
--- u-boot-v2.git.orig/commands/Kconfig 2008-06-19 09:29:03.000000000 -0500
+++ u-boot-v2.git/commands/Kconfig 2008-06-19 09:31:42.000000000 -0500
@@ -180,6 +180,37 @@
prompt "nand"
endmenu
+menu "i2c "
+ depends on I2C_CHARDEV
+
+config CMD_I2C
+ bool
+ default n
+
+config CMD_I2C_DETECT
+ tristate
+ default y
+ select CMD_I2C
+ prompt "i2cdetect"
+
+config CMD_I2C_DUMP
+ tristate
+ default y
+ select CMD_I2C
+ prompt "i2cdump"
+
+config CMD_I2C_GET
+ tristate
+ default y
+ select CMD_I2C
+ prompt "i2cget"
+
+config CMD_I2C_SET
+ tristate
+ default y
+ select CMD_I2C
+ prompt "i2cset"
+endmenu
menu "booting "
Index: u-boot-v2.git/commands/i2c.c
===================================================================
--- u-boot-v2.git.orig/commands/i2c.c 2008-06-19 09:31:49.000000000 -0500
+++ u-boot-v2.git/commands/i2c.c 2008-06-19 09:32:57.000000000 -0500
@@ -515,6 +515,64 @@
U_BOOT_CMD_HELP(cmd_i2cdetect_help_s)
U_BOOT_CMD_END
#endif /* CONFIG_CMD_I2C_DETECT */
+/** @page page_do_cmd_i2c_detect i2cdetect detect I2C chips
+SYNOPSIS:
+ at li i2cdetect [-a] [-q|-r] i2cbus [first last]
+ at li i2cdetect -F i2cbus
+
+ at warning
+ This program can confuse your I2C bus, cause data loss and worse!
+
+DESCRIPTION:
+ at verbatim
+ i2cdetect is a program to scan an I2C bus for devices. It
+ outputs a table with the list of detected devices on the specified bus.
+ i2cbus indicates the number of the I2C bus to be scanned, these are
+ present as 'xx' of /dev/i2cdxx. The optional parameters first and
+ last restrict the scanning range (default: from 0x03 to 0x77).
+
+ i2cdetect can also be used to query the functionalities of an I2C bus
+ (see option -F.)
+ at endverbatim
+
+INTERPRETING THE OUTPUT:
+ at verbatim
+ Each cell in the output table will contain one of the following sym
+ bols:
+
+ · "--". The address was probed but no chip answered.
+
+ · "UU". Probing was skipped, because this address is currently in use
+ by a driver. This strongly suggests that there is a chip at this
+ address.
+
+ · An address number in hexadecimal, e.g. "2d" or "4e". A chip was found
+ at this address.
+ at endverbatim
+
+OPTIONS:
+ at verbatim
+ -a Force scanning of non-regular addresses. Not recommended.
+
+ -q Use "quick write" commands for probing. Not recommended.
+
+ -r Use "read byte" commands for probing. Not recommended.
+ This is known to lock on various write-only chips.
+
+ -F Display the list of functionalities implemented by the adapter
+ and exit.
+
+ at endverbatim
+
+AUTHOR:
+ at verbatim
+ Frodo Looijaard, Mark D. Studebaker and Jean Delvare
+
+ This manual page was originally written by Aurelien Jarno
+ <aurel32 at debian.org>, for the Debian GNU/Linux system.
+
+ at endverbatim
+ */
#ifdef CONFIG_CMD_I2C_DUMP
static const __maybe_unused char cmd_i2cdump_help_s[] =
@@ -789,6 +847,66 @@
U_BOOT_CMD_HELP(cmd_i2cdump_help_s)
U_BOOT_CMD_END
#endif /* CONFIG_CMD_I2C_DUMP */
+/** @page page_do_cmd_i2c_dump i2cdump examine I2C registers
+SYNOPSIS
+ at li i2cdump [-f] [-r first-last] i2cbus address [mode]
+
+ at warning
+ i2cdump can be dangerous if used improperly. Most notably, the c mode
+ starts with WRITING a byte to the chip. On most chips it will be stored
+ in the address pointer register, which is OK, but some chips with a
+ single register or no (visible) register at all will most likely see
+ this as a real WRITE, resulting in possible misbehavior or corruption.
+ Do not use i2cdump on random addresses. Anyway, it is of little use
+ unless you have good knowledge of the chip youâ€(tm)re working with and an
+ idea of what you are looking for.
+
+DESCRIPTION:
+ at verbatim
+ i2cdump is a small helper program to examine registers visible through
+ the I2C bus.
+ at endverbatim
+
+OPTIONS:
+ at verbatim
+ -f Force access to the device even if it is already busy. By
+ default, i2cdump will refuse to access a device which is already
+ under the control of a kernel driver. Using this flag is dangerâ€
+ ous, it can seriously confuse the kernel driver in question. It
+ can also cause i2cdump to return invalid results. So use at your
+ own risk and only if you know what youâ€(tm)re doing.
+
+ -r first-last
+ Limit the range of registers being accessed. This option is only
+ available with modes b, w, c and W. For mode W, first must be
+ even and last must be odd.
+
+ At least two options must be provided to i2cdump. i2cbus indicates the
+ number of the I2C bus to be scanned, these are present as 'xx' of
+ /dev/i2cdxx. The optional parameters first and address indicates
+ the address to be scanned on that bus, and is an integer between
+ 0x03 and 0x77.
+
+ The mode parameter, if specified, is one of the letters b, w,
+ corresponding to a read size of a single byte, a 16-bit word,
+ respectively.The W mode is also special, it is similar to w except that
+ a read command will only be issued on even register addresses;
+ this is again mainly useful for EEPROMs.
+
+ A p can also be appended to the mode parameter (except for i and W) to
+ enable PEC. If the mode parameter is omitted, i2cdump defaults to byte
+ access without PEC.
+
+ at endverbatim
+
+AUTHOR
+ at verbatim
+ Frodo Looijaard, Mark D. Studebaker and Jean Delvare
+
+ This manual page was originally written by David Z Maze
+ <dmaze at debian.org> for the Debian GNU/Linux system.
+ at endverbatim
+ */
#ifdef CONFIG_CMD_I2C_GET
static const __maybe_unused char cmd_i2cget_help_s[] =
@@ -992,6 +1110,57 @@
U_BOOT_CMD_HELP(cmd_i2cget_help_s)
U_BOOT_CMD_END
#endif /* CONFIG_CMD_I2C_GET */
+/** @page page_do_cmd_i2c_get i2cget read from I2C chip registers
+SYNOPSIS
+ at li i2cget [-f] [-y] i2cbus chip-address [data-address [mode]]
+
+ at warning
+ i2cget can be extremely dangerous if used improperly.
+ Be extremely careful using this program.
+
+DESCRIPTION:
+ at verbatim
+ i2cget is a small helper program to read registers visible through the
+ I2C bus.
+ at endverbatim
+
+OPTIONS
+ at verbatim
+ -f Force access to the device even if it is already busy. By
+ default, i2cget will refuse to access a device which is already
+ under the control of a kernel driver. Using this flag is danger
+ ous, it can seriously confuse the kernel driver in question. It
+ can also cause i2cget to return an invalid value. So use at your
+ own risk and only if you know what youâ€(tm)re doing.
+
+ -y will allow to set 0x50 to 0x57 with pec enabled
+
+ At least two options must be provided to i2cget. i2cbus indicates the
+ number of the I2C bus to be scanned, these are present as 'xx' of
+ /dev/i2cdxx. chip-address specifies the address of the chip on
+ that bus, and is an integer between 0x03 and 0x77.
+
+ data-address specifies the address on that chip to read from, and is an
+ integer between 0x00 and 0xFF. If omitted, the currently active regis
+ ter will be read (if that makes sense for the considered chip).
+
+ The mode parameter, if specified, is one of the letters b, w or c, cor
+ responding to a read byte data, a read word data or a write byte/read
+ byte transaction, respectively. A p can also be appended to the mode
+ parameter to enable PEC. If the mode parameter is omitted, i2cget
+ defaults to a read byte data transaction, unless data-address is also
+ omitted, in which case the default (and only valid) transaction is a
+ single read byte.
+ at endverbatim
+
+AUTHOR
+ at verbatim
+ Jean Delvare
+
+ This manual page was strongly inspired from those written by David Z
+ Maze for i2cset.
+ at endverbatim
+*/
#ifdef CONFIG_CMD_I2C_SET
static const __maybe_unused char cmd_i2cset_help_s[] =
@@ -1266,3 +1435,67 @@
U_BOOT_CMD_HELP(cmd_i2cset_help_s)
U_BOOT_CMD_END
#endif /* CONFIG_CMD_I2C_SET */
+/** @page page_do_cmd_i2c_set i2cset set I2C registers
+
+SYNOPSIS
+ at li i2cset [-f] [-y] i2cbus chip-address data-address [value [mode [mask]]]
+
+ at warning
+ i2cset can be extremely dangerous if used improperly. It can confuse
+ your I2C bus, cause data loss, or have more serious side effects. Writ
+ ing to a serial EEPROM on a memory DIMM (chip addresses between 0x50
+ and 0x57) may DESTROY your memory! Be extremely careful using this
+ program.
+
+DESCRIPTION
+ at verbatim
+ i2cset is a small helper program to set registers visible through the
+ I2C bus.
+ at endverbatim
+
+OPTIONS
+ at verbatim
+ -f Force access to the device even if it is already busy. By
+ default, i2cset will refuse to access a device which is already
+ under the control of a kernel driver. Using this flag is danger
+ ous, it can seriously confuse the kernel driver in question. It
+ can also cause i2cset to silently write to the wrong register.
+ So use at your own risk and only if you know what you are
+ doing.
+
+ -y will allow to set 0x50 to 0x57 with pec enabled
+
+ There are three required options to i2cset. i2cbus indicates the number
+ of the I2C bus to be scanned, these are present as 'xx' of /dev/i2cdxx.
+ chip-address specifies the address of th chip on that bus, and is
+ an integer between 0x03 and 0x77. data-address specifies the address on
+ that chip to write to, and is an integer between 0x00 and 0xFF.
+
+ The value parameter, if specified, is the value to write to that loca
+ tion on the chip. If this parameter is omited, then a short write is
+ issued. For most chips, it simply sets an internal pointer to the tar
+ get location, but doesnâ€(tm)t actually write to that location. For a few
+ chips though, in particular simple ones with a single register, this
+ short write is an actual write.
+
+ The mode parameter, if specified, is one of the letters b or w, corre
+ sponding to a write size of a single byte or a 16-bit word, respec
+ tively. A p can also be appended to the mode parameter to enable PEC.
+ If the mode parameter is omitted, i2cset defaults to byte mode without
+ PEC. The value provided must be within range for the specified data
+ type (0x00-0xFF for bytes, 0x0000-0xFFFF for words).
+
+ The mask parameter, if specified, describes which bits of value will be
+ actually written to data-address. Bits set to 1 in the mask are taken
+ from value, while bits set to 0 will be read from data-address and thus
+ preserved by the operation.
+ at endverbatim
+
+AUTHOR
+ at verbatim
+ Frodo Looijaard, Mark D. Studebaker and Jean Delvare
+
+ This manual page was originally written by David Z Maze
+ <dmaze at debian.org> for the Debian GNU/Linux system.
+ at endverbatim
+*/
More information about the U-Boot
mailing list