<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux-toradex.git/drivers/base/regmap/internal.h, branch T30_LinuxImageV2.0Beta2_20130626</title>
<subtitle>Linux kernel for Apalis and Colibri modules</subtitle>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/'/>
<entry>
<title>regmap: implement register striding</title>
<updated>2012-04-15T21:58:10+00:00</updated>
<author>
<name>Stephen Warren</name>
<email>swarren@nvidia.com</email>
</author>
<published>2012-04-09T19:40:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=48f282fdd1833460e1ee5fc1a9e3008fcede3b38'/>
<id>48f282fdd1833460e1ee5fc1a9e3008fcede3b38</id>
<content type='text'>
regmap_config.reg_stride is introduced. All extant register addresses
are a multiple of this value. Users of serial-oriented regmap busses will
typically set this to 1. Users of the MMIO regmap bus will typically set
this based on the value size of their registers, in bytes, so 4 for a
32-bit register.

Throughout the regmap code, actual register addresses are used. Wherever
the register address is used to index some array of values, the address
is divided by the stride to determine the index, or vice-versa. Error-
checking is added to all entry-points for register address data to ensure
that register addresses actually satisfy the specified stride. The MMIO
bus ensures that the specified stride is large enough for the register
size.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit f01ee60fffa4dc6c77122121233a793f7f696e67)

Change-Id: I634977dcb0fe9ff95c7932e9195a2c1918eb1c18
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96510
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
regmap_config.reg_stride is introduced. All extant register addresses
are a multiple of this value. Users of serial-oriented regmap busses will
typically set this to 1. Users of the MMIO regmap bus will typically set
this based on the value size of their registers, in bytes, so 4 for a
32-bit register.

Throughout the regmap code, actual register addresses are used. Wherever
the register address is used to index some array of values, the address
is divided by the stride to determine the index, or vice-versa. Error-
checking is added to all entry-points for register address data to ensure
that register addresses actually satisfy the specified stride. The MMIO
bus ensures that the specified stride is large enough for the register
size.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit f01ee60fffa4dc6c77122121233a793f7f696e67)

Change-Id: I634977dcb0fe9ff95c7932e9195a2c1918eb1c18
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96510
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: fix compilation when !CONFIG_DEBUG_FS</title>
<updated>2012-04-15T21:52:56+00:00</updated>
<author>
<name>Stephen Warren</name>
<email>swarren@nvidia.com</email>
</author>
<published>2012-04-06T05:09:20+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=af3575e322c4ae602e90ca006fac8ce00d46d2cc'/>
<id>af3575e322c4ae602e90ca006fac8ce00d46d2cc</id>
<content type='text'>
Commit 79c64d5 "regmap: allow regmap instances to be named" changed the
prototype of regmap_debugfs_init, but didn't update the dummy inline used
when !CONFIG_DEBUGFS. Fix this.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit abec95adefaeb2229cb28de65f3d32cd149b9dd9)

Change-Id: Ieb049fa9ed0dd26d21a37592ecb25488b0909c0b
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96509
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Commit 79c64d5 "regmap: allow regmap instances to be named" changed the
prototype of regmap_debugfs_init, but didn't update the dummy inline used
when !CONFIG_DEBUGFS. Fix this.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit abec95adefaeb2229cb28de65f3d32cd149b9dd9)

Change-Id: Ieb049fa9ed0dd26d21a37592ecb25488b0909c0b
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96509
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: allow regmap instances to be named</title>
<updated>2012-04-15T21:47:14+00:00</updated>
<author>
<name>Stephen Warren</name>
<email>swarren@nvidia.com</email>
</author>
<published>2012-04-04T21:48:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=db10dacb42ddc6c63464ac8d0b069f8f4cfac00a'/>
<id>db10dacb42ddc6c63464ac8d0b069f8f4cfac00a</id>
<content type='text'>
Some devices have multiple separate register regions. Logically, one
regmap would be created per region. One issue that prevents this is that
each instance will attempt to create the same debugfs files. Avoid this
by allowing regmaps to be named, and use the name to construct the
debugfs directory name.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
cherry-picked form mainline d3c242e

Change-Id: Ia3301fb4d28645f1d3593e547f9409ce20c0acfe
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96508
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some devices have multiple separate register regions. Logically, one
regmap would be created per region. One issue that prevents this is that
each instance will attempt to create the same debugfs files. Avoid this
by allowing regmaps to be named, and use the name to construct the
debugfs directory name.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
cherry-picked form mainline d3c242e

Change-Id: Ia3301fb4d28645f1d3593e547f9409ce20c0acfe
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96508
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: introduce fast_io busses, and use a spinlock for them</title>
<updated>2012-04-15T21:18:17+00:00</updated>
<author>
<name>Stephen Warren</name>
<email>swarren@nvidia.com</email>
</author>
<published>2012-04-04T21:48:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=77a38d8012fd6603e25eb3aa7a012856ab0a6ae8'/>
<id>77a38d8012fd6603e25eb3aa7a012856ab0a6ae8</id>
<content type='text'>
Some bus types have very fast IO. For these, acquiring a mutex for every
IO operation is a significant overhead. Allow busses to indicate their IO
is fast, and enhance regmap to use a spinlock for those busses.

[Currently limited to native endian registers -- broonie]

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit bacdbe077342ecc9e7b3e374cc5a41995116706a)

Change-Id: I337f27a09f2b176b46e8f6d05401957a1abc0609
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96503
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some bus types have very fast IO. For these, acquiring a mutex for every
IO operation is a significant overhead. Allow busses to indicate their IO
is fast, and enhance regmap to use a spinlock for those busses.

[Currently limited to native endian registers -- broonie]

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit bacdbe077342ecc9e7b3e374cc5a41995116706a)

Change-Id: I337f27a09f2b176b46e8f6d05401957a1abc0609
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96503
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: introduce explicit bus_context for bus callbacks</title>
<updated>2012-04-15T21:12:19+00:00</updated>
<author>
<name>Stephen Warren</name>
<email>swarren@nvidia.com</email>
</author>
<published>2012-04-04T21:48:30+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=d5a70b9a3304ef71b0a0ba97a9933c579b1fa6b0'/>
<id>d5a70b9a3304ef71b0a0ba97a9933c579b1fa6b0</id>
<content type='text'>
The only context needed by I2C and SPI bus definitions is the device
itself; this can be converted to an i2c_client or spi_device in order
to perform IO on the device. However, other bus types may need more
context in order to perform IO. Enable this by having regmap_init accept
a bus_context parameter, and pass this to all bus callbacks. The
existing callbacks simply pass the struct device here. Future bus types
may pass something else.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit 0135bbcc7a0cc056f0203ff839466236b8e3dc19)

Change-Id: I36b3fb3433af6e6f1e673fc6c73ba21f7eb4d054
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96502
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Stephen Warren &lt;swarren@nvidia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The only context needed by I2C and SPI bus definitions is the device
itself; this can be converted to an i2c_client or spi_device in order
to perform IO on the device. However, other bus types may need more
context in order to perform IO. Enable this by having regmap_init accept
a bus_context parameter, and pass this to all bus callbacks. The
existing callbacks simply pass the struct device here. Future bus types
may pass something else.

Signed-off-by: Stephen Warren &lt;swarren@nvidia.com&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit 0135bbcc7a0cc056f0203ff839466236b8e3dc19)

Change-Id: I36b3fb3433af6e6f1e673fc6c73ba21f7eb4d054
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96502
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Stephen Warren &lt;swarren@nvidia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: Use pad_bits and reg_bits when determining register format.</title>
<updated>2012-04-15T21:06:57+00:00</updated>
<author>
<name>Marc Reilly</name>
<email>marc@cpdesign.com.au</email>
</author>
<published>2012-03-16T01:11:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=7261876e490b84820e62750e75fe59ad1069098c'/>
<id>7261876e490b84820e62750e75fe59ad1069098c</id>
<content type='text'>
This change combines any padding bits into the register address bits when
determining register format handlers to use the next byte-divisible
register size.
A reg_shift member is introduced to the regmap struct to enable fixup
of the reg format.
Format handlers now take an extra parameter specifying the number of
bits to shift the value by.

Signed-off-by: Marc Reilly &lt;marc@cpdesign.com.au&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit d939fb9a78b4743bc4bc3cc415894ed42050c5cc)

Change-Id: I80921cfa4dd6aea5e7038927a313baeb347689e2
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96499
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This change combines any padding bits into the register address bits when
determining register format handlers to use the next byte-divisible
register size.
A reg_shift member is introduced to the regmap struct to enable fixup
of the reg format.
Format handlers now take an extra parameter specifying the number of
bits to shift the value by.

Signed-off-by: Marc Reilly &lt;marc@cpdesign.com.au&gt;
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit d939fb9a78b4743bc4bc3cc415894ed42050c5cc)

Change-Id: I80921cfa4dd6aea5e7038927a313baeb347689e2
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96499
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: Supply ranges to the sync operations</title>
<updated>2012-04-15T20:44:41+00:00</updated>
<author>
<name>Mark Brown</name>
<email>broonie@opensource.wolfsonmicro.com</email>
</author>
<published>2012-02-23T19:31:04+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=9d586b202c93d646167b235864e0cd21b2b2c87c'/>
<id>9d586b202c93d646167b235864e0cd21b2b2c87c</id>
<content type='text'>
In order to allow us to support partial sync operations add minimum and
maximum register arguments to the sync operation and update the rbtree
and lzo caches to use this new information. The LZO implementation is
obviously not good, we could exit the iteration earlier, but there may
be room for more wide reaching optimisation there.

Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit ac8d91c801905a061ca883dca427a5e19602a1e7)

Change-Id: I92ceee1c704ea7c864bff0559d36cf34554c3ba5
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96489
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
In order to allow us to support partial sync operations add minimum and
maximum register arguments to the sync operation and update the rbtree
and lzo caches to use this new information. The LZO implementation is
obviously not good, we could exit the iteration earlier, but there may
be room for more wide reaching optimisation there.

Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit ac8d91c801905a061ca883dca427a5e19602a1e7)

Change-Id: I92ceee1c704ea7c864bff0559d36cf34554c3ba5
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/96489
Reviewed-by: Simone Willett &lt;swillett@nvidia.com&gt;
Tested-by: Simone Willett &lt;swillett@nvidia.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: Don't use bitfields for booleans</title>
<updated>2012-03-05T15:59:49+00:00</updated>
<author>
<name>Mark Brown</name>
<email>broonie@opensource.wolfsonmicro.com</email>
</author>
<published>2012-02-06T18:01:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=baa725e95f8a63df2bb7de735af5c62179cd3357'/>
<id>baa725e95f8a63df2bb7de735af5c62179cd3357</id>
<content type='text'>
This was a cut'n'paste from some older code.

Since we're about to add debugfs support don't do the obvious thing and
use bool, use u32 instead (which debugfs has been using since time
immemorial).
cherry-picked from mainline
	847fb6fdf58c0ef4c207d2853a043a4da3db9c76

Change-Id: I0eff043969a97190e7470bc695ef78323e9cb8d7
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/87587
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This was a cut'n'paste from some older code.

Since we're about to add debugfs support don't do the obvious thing and
use bool, use u32 instead (which debugfs has been using since time
immemorial).
cherry-picked from mainline
	847fb6fdf58c0ef4c207d2853a043a4da3db9c76

Change-Id: I0eff043969a97190e7470bc695ef78323e9cb8d7
Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/87587
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: Support register patch sets</title>
<updated>2012-03-05T15:57:23+00:00</updated>
<author>
<name>Mark Brown</name>
<email>broonie@opensource.wolfsonmicro.com</email>
</author>
<published>2012-01-21T12:01:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=f18eef2d3decfecb68e012414015e5f9fa8ba904'/>
<id>f18eef2d3decfecb68e012414015e5f9fa8ba904</id>
<content type='text'>
Device manufacturers frequently provide register sequences, usually not
fully documented, to be run at startup in order to provide better defaults
for devices (for example, improving performance in the light of silicon
evaluation). Support such updates by allowing drivers to register update
sets with the core. These updates will be written to the device immediately
and will also be rewritten when the cache is synced.

The assumption is that the reason for resyncing the cache will always be
that the device has been powered off. If this turns out to not be the case
then a separate operation can be provided.

Currently the implementation only allows a single set of updates to be
specified for a device, this could be extended in future.

Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit 22f0d90a34827812413bb3fbeda6a2a79bb58423)

Change-Id: I02f4ead9866a90b3635c4b98f1f9c3be3109c5ea
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/87577
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Device manufacturers frequently provide register sequences, usually not
fully documented, to be run at startup in order to provide better defaults
for devices (for example, improving performance in the light of silicon
evaluation). Support such updates by allowing drivers to register update
sets with the core. These updates will be written to the device immediately
and will also be rewritten when the cache is synced.

The assumption is that the reason for resyncing the cache will always be
that the device has been powered off. If this turns out to not be the case
then a separate operation can be provided.

Currently the implementation only allows a single set of updates to be
specified for a device, this could be extended in future.

Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit 22f0d90a34827812413bb3fbeda6a2a79bb58423)

Change-Id: I02f4ead9866a90b3635c4b98f1f9c3be3109c5ea
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/87577
</pre>
</div>
</content>
</entry>
<entry>
<title>regmap: Add support for padding between register and address</title>
<updated>2012-03-05T15:56:32+00:00</updated>
<author>
<name>Mark Brown</name>
<email>broonie@opensource.wolfsonmicro.com</email>
</author>
<published>2012-01-18T10:52:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.toradex.cn/cgit/linux-toradex.git/commit/?id=fa17671aae4c6891ad008c0f4cb8ad2b21b41858'/>
<id>fa17671aae4c6891ad008c0f4cb8ad2b21b41858</id>
<content type='text'>
Some devices, especially those with high speed control interfaces, require
padding between the register and the data. Support this in the regmap API
by providing a pad_bits configuration parameter.

Only devices with integer byte counts are supported.

Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit 82159ba8e6ef8c38e3e0452d90b4ff8da9e4b2c1)

Change-Id: Id9710b92e08ac905f3291715aa457842e60fed3d
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/87575
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Some devices, especially those with high speed control interfaces, require
padding between the register and the data. Support this in the regmap API
by providing a pad_bits configuration parameter.

Only devices with integer byte counts are supported.

Signed-off-by: Mark Brown &lt;broonie@opensource.wolfsonmicro.com&gt;
(cherry picked from commit 82159ba8e6ef8c38e3e0452d90b4ff8da9e4b2c1)

Change-Id: Id9710b92e08ac905f3291715aa457842e60fed3d
Signed-off-by: Laxman Dewangan &lt;ldewangan@nvidia.com&gt;
Reviewed-on: http://git-master/r/87575
</pre>
</div>
</content>
</entry>
</feed>
