summaryrefslogtreecommitdiff
path: root/tools/i2cset.8
blob: e4e187022708212261f7cdacecbaed474c6c178c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
.TH I2CSET 8 "May 2022"
.SH "NAME"
i2cset \- set I2C registers

.SH SYNOPSIS
.B i2cset
.RB [ -f ]
.RB [ -y ]
.RB [ "-m mask" ]
.RB [ -r ]
.RB [ -a ]
.I i2cbus
.I chip-address
.I data-address
.RI [ value ]
.RI ...
.RI [ mode ]
.br
.B i2cset
.B -V
.br
.B i2cset
.B -h

.SH DESCRIPTION
i2cset is a small helper program to set registers visible through the I2C
bus.

.SH OPTIONS
.TP
.B -V
Display the version and exit.
.TP
.B -h
Display the help and exit.
.TP
.B -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 dangerous, 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're doing.
.TP
.B -y
Disable interactive mode. By default, i2cset will wait for a confirmation
from the user before messing with the I2C bus. When this flag is used, it
will perform the operation directly. This is mainly meant to be used in
scripts.
.TP
.B -m mask
The \fImask\fR parameter, if specified, describes which bits of \fIvalue\fR
will be actually written to \fIdata-address\fR. Bits set to 1 in the mask
are taken from \fIvalue\fR, while bits set to 0 will be read from
\fIdata-address\fR and thus preserved by the operation. Please note that
this parameter assumes that the read and write operations for the specified
mode are symmetrical for the device you are accessing. This may or may not
be the case, as neither I2C nor SMBus guarantees this.
.TP
.B -r
Read back the value right after writing it, and compare the result with the
value written. This used to be the default behavior. The same limitations
apply as those of option \fB-m\fR.
.TP
.B -a
Allow using addresses between 0x00 - 0x07 and 0x78 - 0x7f. Not recommended.
.PP
There are three required options to i2cset. \fIi2cbus\fR indicates the number
or name of the I2C bus to be scanned.  This number should correspond to one of
the busses listed by \fIi2cdetect -l\fR. \fIchip-address\fR specifies the
address of the chip on that bus, and is an integer between 0x08 and 0x77.
\fIdata-address\fR specifies the address on that chip to write to, and is an
integer between 0x00 and 0xFF.
.PP
The \fIvalue\fR parameter, if specified, is the value to write to that
location on the chip. If this parameter is omitted, then a short write is
issued. For most chips, it simply sets an internal pointer to the target
location, but doesn'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. If the mode parameter is \fBs\fP or \fBi\fP, multiple
values can be specified.
.PP
The \fImode\fR parameter, if specified, is one of the letters \fBb\fP,
\fBw\fP, \fBs\fP, or \fBi\fP, corresponding to a write size of a single byte,
a 16-bit word, a SMBus block write, or an I2C block write, respectively.
For SMBus and I2C block writes, the write size is determined by the number
of \fIvalue\fR parameters.
Except for I2C block writes, a \fBp\fP can also be appended to the \fImode\fR
parameter to enable PEC.
If the \fImode\fR parameter is omitted, i2cset defaults to byte
mode without PEC. The \fIvalue\fR provided must be within range for the
specified data type (0x00-0xFF for byte and block writes, 0x0000-0xFFFF
for words).
Another possible mode is \fBc\fP, which doesn't write any value (so-called
short write). You usually don't have to specify this mode, as it is the
default when no value is provided, unless you also want to enable PEC.

.SH WARNING
i2cset can be extremely dangerous if used improperly. It can confuse your
I2C bus, cause data loss, or have more serious side effects. Writing to
a serial EEPROM on a memory DIMM (chip addresses between 0x50 and 0x57) may
DESTROY your memory, leaving your system unbootable!  Be extremely careful
using this program.

.SH EXAMPLES
.PP
Write value 0x42 to 8-bit register 0x11 of the I2C device at 7-bit
address 0x2d on bus 1 (i2c-1), after user confirmation:
.nf
.RS
# i2cset 1 0x2d 0x11 0x42
.RE
.fi
.PP
Immediately clear the 3 least significant bits of 8-bit register 0x11 of the
I2C device at 7-bit address 0x2d on bus 1 (i2c-1) (no user confirmation):
.nf
.RS
# i2cset -y -m 0x07 1 0x2d 0x11 0x00
.RE
.fi
.PP
Write value 0x5000 to 16-bit register 0x02 of the I2C device at 7-bit
address 0x48 on bus 1 (i2c-1), after user confirmation:
.nf
.RS
# i2cset 1 0x48 0x02 0x5000 w
.RE
.fi
.PP
Also see i2cget(8) for examples of combined usage of \fIi2cset\fR and
\fIi2cget\fR.

.SH BUGS
To report bugs or send fixes, please write to the Linux I2C mailing list
<linux-i2c@vger.kernel.org> with Cc to the current maintainer:
Jean Delvare <jdelvare@suse.de>.

.SH SEE ALSO
i2cdetect(8), i2cdump(8), i2cget(8), i2ctransfer(8), isaset(8)

.SH AUTHOR
Frodo Looijaard, Mark D. Studebaker and Jean Delvare

This manual page was originally written by David Z Maze <dmaze@debian.org> for
the Debian GNU/Linux system.