Commit graph android_kernel_sony_sdm845/drivers/base/regmap
Message SHA1
Merge remote-tracking branches 'regmap/topic/ac97', 'regmap/topic/doc' and 'regmap/topic/smbus' into regmap-next
Mark Brown   commited 2015-02-08 11:16:11 +08:00
1aff0310eb
regmap: Fix i2c word access when using SMBus access functions
SMBus access functions assume that 16-bit values are formatted as
little endian numbers. The direct i2c access functions in regmap,
however, assume that 16-bit values are formatted as big endian numbers.
As a result, the current code returns different values if an i2c chip's
16-bit registers are accessed through i2c access functions vs. SMBus
access functions.

Use regmap_smbus_read_word_swapped and regmap_smbus_write_word_swapped
for 16-bit SMBus accesses if a chip is configured as REGMAP_ENDIAN_BIG.
If the chip is configured as REGMAP_ENDIAN_LITTLE, keep using
regmap_smbus_write_word_data and regmap_smbus_read_word_data. Otherwise
reject registration if the controller does not support direct i2c accesses.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Mark Brown <broonie@kernel.org>

Guenter Roeck   authored and   Mark Brown   commited 2015-02-04 20:48:13 +00:00
5892ded23c
regmap: Export regmap_get_val_endian
We'll need to call it from regmap-i2c.c, which can be built as module.

Signed-off-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Mark Brown <broonie@kernel.org>

Guenter Roeck   authored and   Mark Brown   commited 2015-02-04 20:48:11 +00:00
3c174d2926
regmap: ac97: Clean up indentation
Signed-off-by: Mark Brown <broonie@kernel.org>

Mark Brown   commited 2015-02-02 12:13:39 +00:00
927db287ba
regmap: Move spinlock_flags into the union
This patch move struct regmap.spinlock_flags into the union of
spinlock, so that we can shrink struct regmap size.

Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Wang, Yalin   authored and   Mark Brown   commited 2014-12-15 17:41:07 +00:00
f93d1be217
Merge remote-tracking branches 'regmap/topic/ac97' and 'regmap/topic/headers' into regmap-next
Mark Brown   commited 2014-11-21 11:32:36 +00:00
a63b87838a
regmap: ac97: Add generic AC'97 callbacks
Use the recently added support for bus operations to provide a standard
mapping for AC'97 register I/O.

Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>

Mark Brown   commited 2014-11-19 10:28:14 +00:00
22853223d1
regmap: cache: Sort include headers alphabetically
If the inlcude headers aren't sorted alphabetically, then the
logical choice is to append new ones, however that creates a
lot of potential for conflicts or duplicates because every change
will then add new includes in the same location.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Xiubo Li   authored and   Mark Brown   commited 2014-10-20 12:25:06 +01:00
e39be3a31b
regmap: cache: Fix possible ZERO_SIZE_PTR pointer dereferencing error.
When all the registers are volatile(unlikely, but logically and mostly
will happen for some 'device' who has very few registers), then the
count will be euqal to 0, then kmalloc() will return ZERO_SIZE_PTR,
which equals to ((void *)16).

So this patch fix this with just doing the zero check before calling
kmalloc(). If the count == 0, so we can make sure that all the registers
are volatile, so no cache is need.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Xiubo Li   authored and   Mark Brown   commited 2014-10-20 12:25:02 +01:00
fb70067e4a
regmap: cache: use kmalloc_array instead of kmalloc
This patch fixes checkpatch.pl warning for regmap cache.
WARNING : prefer kmalloc_array over kmalloc with multiply

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Xiubo Li   authored and   Mark Brown   commited 2014-10-20 12:25:02 +01:00
06f9c24e55
regmap: cache: speed regcache_hw_init() up.
This may speed regcache_hw_init() up for some cases that there
has volatile registers.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Xiubo Li   authored and   Mark Brown   commited 2014-10-20 12:25:01 +01:00
fbba43c527
regmap: cache: fix errno in regcache_hw_init()
When kmalloc() fails, we should return -ENOMEM.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Xiubo Li   authored and   Mark Brown   commited 2014-10-20 12:25:01 +01:00
ba3f1c85a6
regmap: cache: cleanup regcache_hw_init()
Remove the redundant code for regmap cache.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Xiubo Li   authored and   Mark Brown   commited 2014-10-20 12:25:01 +01:00
5bd83ed098
Merge remote-tracking branch 'regmap/topic/cache' into regmap-next
Mark Brown   commited 2014-09-29 20:49:42 +01:00
f5b313a2bc
Merge remote-tracking branch 'regmap/topic/dt-endian' into regmap-next
Mark Brown   commited 2014-09-29 20:49:42 +01:00
45942c310d
Merge remote-tracking branch 'regmap/topic/core' into regmap-next
Mark Brown   commited 2014-09-29 20:49:41 +01:00
88507a2ba8
Merge remote-tracking branch 'regmap/fix/debugfs' into regmap-linus
Mark Brown   commited 2014-09-29 20:49:40 +01:00
18a64d844c
Merge remote-tracking branch 'regmap/fix/core' into regmap-linus
Mark Brown   commited 2014-09-29 20:49:40 +01:00
25a9487787
regmap: Fix debugfs-file 'registers' mode
The macro "REGMAP_ALLOW_WRITE_DEBUGFS" can be used to enable write
support on the registers file in the debugfs. The mode of the file is
fixed to 0400 so it is not possible to write the file ever.

This patch fixes the mode by setting it to the correct value depending
on the macro.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Signed-off-by: Mark Brown <broonie@kernel.org>

Markus Pargmann   authored and   Mark Brown   commited 2014-09-29 18:22:26 +01:00
18c0301f98
regmap: fix possible ZERO_SIZE_PTR pointer dereferencing error.
Since we cannot make sure the 'val_count' will always be none zero
here, and then if it equals to zero, the kmemdup() will return
ZERO_SIZE_PTR, which equals to ((void *)16).

So this patch fix this with just doing the zero check before calling
kmemdup().

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org

Xiubo Li   authored and   Mark Brown   commited 2014-09-28 11:55:07 +01:00
d6b41cb060
regmap: debugfs: fix possbile NULL pointer dereference
If 'map->dev' is NULL and there will lead dev_name() to be NULL pointer
dereference. So before dev_name(), we need to have check of the map->dev
pionter.

We also should make sure that the 'name' pointer shouldn't be NULL for
debugfs_create_dir(). So here using one default "dummy" debugfs name when
the 'name' pointer and 'map->dev' are both NULL.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org

Xiubo Li   authored and   Mark Brown   commited 2014-09-28 11:49:56 +01:00
2c98e0c1cc
regmap: fix NULL pointer dereference in _regmap_write/read
If LOG_DEVICE is defined and map->dev is NULL it will lead to NULL
pointer dereference. This patch fixes this issue by adding check for
dev->NULL in all such places in regmap.c

Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Cc: stable@vger.kernel.org

Pankaj Dubey   authored and   Mark Brown   commited 2014-09-27 12:21:15 +01:00
5336be8416
regmap: fix NULL pointer dereference in regmap_get_val_endian
Recents commits for getting reg endianness causing NULL pointer
dereference if dev is passed NULL in regmap_init_mmio. This patch
fixes this issue, and allows to parse reg endianness only if dev
and dev->of_node exist.

Signed-off-by: Pankaj Dubey <pankaj.dubey@samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Pankaj Dubey   authored and   Mark Brown   commited 2014-09-18 10:55:31 -07:00
6e64b6ccc1
regmap: cache: Do not fail silently from regcache_sync calls
Call stack of regcache_sync calls may not emit any error message even if
operation was cancelled due an error in I/O driver. One such a silent error
is for instance if I2C bus driver doesn't receive ACK from the I2C device
and returns -EREMOTEIO.

Since many users of regcache_sync() don't check and print the error there is
no any indication that HW registers are potentially out of sync.

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Jarkko Nikula   authored and   Mark Brown   commited 2014-09-16 09:53:40 -07:00
f29a43206a
regmap: Fix registers file debugfs
Ensure that the mode reported for the registers file in debugfs is
 accurate by marking it as read only when the define to enable writes has
 not been set.  This is on the edge of being a bug fix but it's debugfs
 and it makes it much easier for users to spot what's going wrong when
 they forget to enable writeability.
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQEcBAABAgAGBQJUF218AAoJECTWi3JdVIfQDToIAIPpC20A0Tb2+20pxUDO717d
 QOpLymMm9qe4Fwbb8wdzM/D3Usy4CG0vrZg8cFX2qZnfKrMPQy9/IQ6kh0SWMvpb
 5FQRBd8IkEIMxM9Ng+aAarJIS+xQTdgLDjFIapaBNp0DW5eT0ZaEMYri5Wt2Ut4u
 a33GtvXC8Raqbk6A7GpxijVKuApFVz+SH8HB/NqOyNZWXiXcRkZ6bWwgn7YeAqPy
 ABg+CAQhjwzXjZSn8Vbt6TNS7jhJzXx5v1wEsx4mcthj2GlBlFexvYDqYBM8VuGJ
 GO4F1EHCK/bVRGAgfy1EyeYPqEuedJleap5r8/0T6oFi4VDJ2z6funnt8QwwVDo=
 =NVI6
 -----END PGP SIGNATURE-----

Merge tag 'regmap-v3.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap

Pull regmap fix from Mark Brown:
 "Fix registers file in debugfs

  Ensure that the mode reported for the registers file in debugfs is
  accurate by marking it as read only when the define to enable writes
  has not been set.  This is on the edge of being a bug fix but it's
  debugfs and it makes it much easier for users to spot what's going
  wrong when they forget to enable writeability"

* tag 'regmap-v3.17-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
  regmap: Fix debugfs-file 'registers' mode

Linus Torvalds   commited 2014-09-15 16:20:56 -07:00
2324067fa9
regmap: change struct regmap's internal locks as union
this patch change struct regmap->mutex and struct regmap->spinlock
as an union, because these 2 members are only used one of them,
we change it to shrink the struct size.

Signed-off-by: Yalin Wang <yalin.wang@sonymobile.com>
Signed-off-by: Mark Brown <broonie@kernel.org>

Wang, Yalin   authored and   Mark Brown   commited 2014-09-12 14:57:26 +01:00
336fb81b31
regmap: Fix debugfs-file 'registers' mode
The macro "REGMAP_ALLOW_WRITE_DEBUGFS" can be used to enable write
support on the registers file in the debugfs. The mode of the file is
fixed to 0400 so it is not possible to write the file ever.

This patch fixes the mode by setting it to the correct value depending
on the macro.

Signed-off-by: Markus Pargmann <mpa@pengutronix.de>
Signed-off-by: Mark Brown <broonie@kernel.org>

Markus Pargmann   authored and   Mark Brown   commited 2014-09-08 12:16:19 +01:00
ffff7a12ac
Merge remote-tracking branches 'regmap/fix/cache', 'regmap/fix/debugfs' and 'regmap/fix/volatile' into regmap-linus
Mark Brown   commited 2014-08-31 13:23:45 +01:00
d3b0533987
regmap: Don't attempt block writes when syncing cache on single_rw devices
If the device can't support block writes then don't attempt to use raw
syncing which will automatically generate block writes for adjacent
registers, use the existing _single() block syncing implementation.

Reported-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>
Cc: stable@vger.kernel.org

Mark Brown   commited 2014-08-31 13:22:37 +01:00
5c1ebe7f73
regmap: Split regmap_get_endian() in two functions
Split regmap_get_endian() in two functions, regmap_get_reg_endian() and
regmap_get_val_endian().

This allows to:
  - Get rid of the three switch()es on "type", incl. error handling in
    three "default" cases,
  - Get rid of the regmap_endian_type enum,
  - Get rid of the non-NULL check of "config" (regmap_init() already
    checks for that),
  - Get rid of the "endian" output parameters, and just return the
    regmap_endian enum value, as the functions can no longer fail.

This saves 21 lines of code (despite the still-present
one-comment-per-line over-documentation), and 30 bytes of code on ARM
V7.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Geert Uytterhoeven   authored and   Mark Brown   commited 2014-08-27 17:45:56 +01:00
cf673fbc63
regmap: Fix handling of volatile registers for format_write() chips
A previous over-zealous factorisation of code means that we only treat
registers as volatile if they are readable. For most devices this is fine
since normally most registers can be read and volatility implies
readability but for format_write() devices where there is no readback from
the hardware and we use volatility to mean simply uncacheability this means
that we end up treating all registers as cacheble.

A bigger refactoring of the code to clarify this is in order but as a fix
make a minimal change and only check readability when checking volatility
if there is no format_write() operation defined for the device.

Signed-off-by: Mark Brown <broonie@linaro.org>
Tested-by: Lars-Peter Clausen <lars@metafoo.de>
Cc: stable@vger.kernel.org

Mark Brown   commited 2014-08-26 18:34:26 +01:00
5844a8b9d9
regmap: Fix regcache debugfs initialization
Commit 6cfec04bcc ("regmap: Separate regmap dev initialization") moved the
regmap debugfs initialization after regcache initialization. This means
that the regmap debugfs directory is not created yet when the cache
initialization runs and so any debugfs files registered by the regcache are
created in the debugfs root directory rather than the debugfs directory of
the regmap instance. Fix this by adding a separate callback for the
regcache debugfs initialization which will be called after the parent
debugfs entry has been created.

Fixes: 6cfec04bcc (regmap: Separate regmap dev initialization)
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
Cc: stable@vger.kernel.org

Lars-Peter Clausen   authored and   Mark Brown   commited 2014-08-26 09:11:56 +01:00
5e0cbe7876
regmap: of_regmap_get_endian() cleanup
Commit d647c19951 ("regmap: add DT endianness binding support") had
some issues. Commit ba1b53feb8 ("regmap: Fix DT endianess parsing
logic") fixed the main problem. This patch fixes the other.

Specifically, restore the overall default of REGMAP_ENDIAN_BIG if none of
the config, DT, or the bus specify any endianness. Without this,
of_regmap_get_endian() could return REGMAP_ENDIAN_DEFAULT, which the
calling code can't handle. Since all busses do specify an endianness in
the current code, this makes no difference right now, but I saw no
justification in the patch description for removing this final default.

Also, clean up the code a bit:

* s/of_regmap_get_endian/regmap_get_endian/ since the function isn't DT-
  specific, even if the reason it was originally added was to add some
  DT-specific features.
* After potentially reading an endianess specification from DT, the code
  checks whether DT did specify an endianness, and if so, returns it. Move
  this test outside the whole switch statement so that if the
  REGMAP_ENDIAN_REG case ever modifies *endian, this check will pick that
  up. This partially reverts part of commit ba1b53feb8 ("regmap: Fix DT
  endianess parsing logic"), while maintaining the bug-fix that commit
  made to this code.
* Make the comments briefer, and only refer to the specific action taken
  at their location. This makes most of the comments independent of DT,
  and easier to follow.

Cc: Xiubo Li <Li.Xiubo@freescale.com>
Cc: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Cc: Thierry Reding <treding@nvidia.com>
Fixes: d647c19951 ("regmap: add DT endianness binding support")
Signed-off-by: Stephen Warren <swarren@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Stephen Warren   authored and   Mark Brown   commited 2014-08-19 16:16:51 -05:00
45e1a279ce
regmap: Fix DT endianess parsing logic
Commit d647c19951 ("regmap: add DT endianness binding support.")
added support to parse the device endianness from the device tree
but unfortunately the added logic doesn't have the same semantics
than the old code. This leads to a NULL dereference pointer error
when these properties are not provided by the Device Tree:

Unable to handle kernel NULL pointer dereference at virtual address 00000044
pgd = c0004000
[00000044] *pgd=00000000
Internal error: Oops: 5 [#1] PREEMPT SMP ARM
Modules linked in:
CPU: 5 PID: 1 Comm: swapper/0 Not tainted 3.17.0-rc1-next-20140818ccu #671
task: ea412800 ti: ea484000 task.ti: ea484000
PC is at regmap_update_bits+0xc/0x5c

The problem is that platforms that rely on the default value now
gets different values due two related issues in the current code:

a) It only parses the endianness from DT for the regmap registers
   and not for the regmap values but it checks unconditionally in
   both cases if the resulting endiannes is REGMAP_ENDIAN_NATIVE.

b) REGMAP_ENDIAN_NATIVE is not even a valid DT property according
   to the regmap DT binding documentation so it shouldn't be set.

Signed-off-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
Signed-off-by: Mark Brown <broonie@linaro.org>

Javier Martinez Canillas   authored and   Mark Brown   commited 2014-08-18 11:39:27 -05:00
ba1b53feb8
regmap: Add explicit dependencies to catch "select" misuse
Add explicit dependencies for the various regmap modules, so Kconfig
will print a warning message when another module selects a regmap module
without fulfilling its dependencies.

Without this, it's much more difficult to find out which module did the
offending select.

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Mark Brown <broonie@linaro.org>

Geert Uytterhoeven   authored and   Mark Brown   commited 2014-08-17 08:54:14 -05:00
9ba1e456e1
regmap: add DT endianness binding support.
For many drivers which will support rich endianness of Devices
need define DT properties by itself with the binding support.

The endianness using regmap:
Index      Device     Properties if needs bytes-swap,
                      or just ignore it
-------------------------------------------------------------
1          BE         'big-endian'
2          LE         'little-endian'

The properties include all the register values and the buffers.
And these properties are very usful for the MMIO devices:

Such as: a memory-mapped device, on one SoC is in BE mode, while
in another SoC will be in LE mode, and the CPU will always in LE
mode.

For the first case, we must use cpu_to_be32/be32_to_cpu for
32-bit registers accessing, so the 'big-endian' property is needed.

For the second case, we can just ignore the bytes-swap
functions like cpu_to_le32/le32_to_cpu, so the 'little-endian'
property could be abscent.

And vice versa...

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Xiubo Li   authored and   Mark Brown   commited 2014-08-16 16:56:23 -05:00
d647c19951
regmap: Allow regmap_get_device() to be used by modules
Signed-off-by: Mark Brown <broonie@linaro.org>

Mark Brown   commited 2014-07-25 18:30:31 +01:00
fa2fbe4a98
regmap: Add regmap_get_device
Add a new function regmap_get_device to obtain the underlying struct
device from a regmap.

Signed-off-by: Tuomas Tynkkynen <ttynkkynen@nvidia.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Tuomas Tynkkynen   authored and   Mark Brown   commited 2014-07-25 18:29:28 +01:00
8d7d3972a9
Merge remote-tracking branch 'regmap/topic/smbus' into regmap-next
Mark Brown   commited 2014-06-02 17:07:42 +01:00
ef98ae45e6
Merge remote-tracking branches 'regmap/topic/irq', 'regmap/topic/le', 'regmap/topic/mmio' and 'regmap/topic/rbtree' into regmap-next
Mark Brown   commited 2014-06-02 17:07:39 +01:00
522168d178
regmap: mmio: Fix regmap_mmio_write for uneven counts
Commit 932580409a
"regmap: mmio: Add support for 1/2/8 bytes wide register address."
broke regmap_mmio_write for uneven counts, for example 32-bit register
addresses with no padding and 8-byte values (count = 5).
Fix this by allowing all counts large enough to include some value.
This check was BUG_ON(count < 4) before the last change.

Signed-off-by: Philipp Zabel <p.zabel@pengutronix.de>
Signed-off-by: Mark Brown <broonie@linaro.org>

Philipp Zabel   authored and   Mark Brown   commited 2014-05-26 16:56:02 +01:00
2e804b7c72
regmap: irq: Fix possible ZERO_SIZE_PTR pointer dereferencing error.
Since we cannot make sure the 'chip->num_regs' will always be none zero
from the users, and then if 'chip->num_regs' equals to zero by mistake
or other reasons, the kzalloc() will return ZERO_SIZE_PTR, which equals
to ((void *)16).

So this patch fix this with just checking the 'chip->num_regs' before
calling kzalloc().

This also sorts the header files in alphabetical order at the same time.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Xiubo Li   authored and   Mark Brown   commited 2014-05-26 16:37:04 +01:00
e128920701
regmap: Add missing initialization of this_page
drivers/base/regmap/regmap.c: In function ‘_regmap_range_multi_paged_reg_write’:
drivers/base/regmap/regmap.c:1665: warning: ‘this_page’ may be used uninitialized in this function

Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
Signed-off-by: Mark Brown <broonie@linaro.org>

Geert Uytterhoeven   authored and   Mark Brown   commited 2014-04-30 20:45:58 -07:00
b48d13988b
regmap: Fix possible ZERO_SIZE_PTR pointer dereferencing error.
Since we cannot make sure the 'len = pair_size * num_regs' will always
be none zero from the users, and then if 'num_regs' equals to zero by
mistake or other reasons, the kzalloc() will return ZERO_SIZE_PTR, which
equals to ((void *)16).

So this patch fix this with just doing the 'len' zero check before calling
kzalloc().

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Xiubo Li   authored and   Mark Brown   commited 2014-04-30 20:33:57 -07:00
f5727cd312
regmap: i2c: fallback to SMBus if the adapter does not support standard I2C
Some I2C adapters are only compatible with the SMBus protocol and do not
support standard I2C transfers.

Fallback to SMBus transfers if we encounter such kind of adapters.
The transfer type is chosen according to the val_bits field in the regmap
config.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Boris BREZILLON   authored and   Mark Brown   commited 2014-04-22 12:57:28 +01:00
b42261078a
regmap: add reg_read/reg_write callbacks to regmap_bus struct
Some busses do not support sending/receiving multiple registers in one go.
Such kind of busses just unpack the registers that have been previously
packed by the regmap core or pack registers that will be later unpacked by
the core code.

Add reg_write and reg_read callbacks in order to optimize access through
this kind of busses.

Signed-off-by: Boris BREZILLON <boris.brezillon@free-electrons.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Boris BREZILLON   authored and   Mark Brown   commited 2014-04-18 16:07:22 +01:00
3ac170376f
regmap: rbtree: improve 64bits memory alignment
Change regcache_rbtree_node strcuture fields order to align the pointers on
64bits architectures.

Signed-off-by: Jean-Christophe PINCE <jean-christophe.pince@intel.com>
Signed-off-by: David Cohen <david.a.cohen@linux.intel.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Jean-Christophe PINCE   authored and   Mark Brown   commited 2014-04-14 16:59:48 +01:00
70d383b7fe
regmap: mmio: Fix the bug of 'offset' value parsing.
'offset = *(u32 *)reg;'
This will be okey for 32/64-bits register device, but for 8/16-bits
register ones, the 'offset' value will overflow, for example:

The IMX2 Watchdog, whose registers and values are all 16-bits:

If the IO base virtual address is ctx->regs = 0x888c0000, and the now
doing the 0x00 register accessing:
Using 'offset = *(u32 *)reg' the offset value will possiblly be 0x77310000,
Using 'offset = *(u16 *)reg' the offset value will be 0x0000.

In the regmap_mmio_gather_write(), ctx->regs + 0x7731000 will be 0xffbd0000,
but actually it should be ctx->regs + 0x0000 = 0x888c0000.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Xiubo Li   authored and   Mark Brown   commited 2014-04-14 16:58:54 +01:00
88cb32c657
regmap: implement LE formatting/parsing for 16/32-bit values.
Allow busses to request little endianness formatting and
parsing for 16- and 32-bit values. This will be useful to
support regmap-mmio.

For the following the scenarios using the regmap-mmio,
for example:

Index    CPU       Device     Endianess flag for values
----------------------------------------------------------
1        LE        LE         REGMAP_ENDIAN_DEFAULT/NATIVE
2        LE        BE         REGMAP_ENDIAN_BIG
3        BE        BE         REGMAP_ENDIAN_DEFAULT/NATIVE
4        BE        LE         REGMAP_ENDIAN_LITTLE

For one device driver, which will support all the cases above,
needs two boolean properties in DT node like: 'big-endian'
for case 2 and 'little-endian' for case 4, and for cases 1
and 3 they all will be absent.

Signed-off-by: Xiubo Li <Li.Xiubo@freescale.com>
Signed-off-by: Mark Brown <broonie@linaro.org>

Xiubo Li   authored and   Mark Brown   commited 2014-04-14 16:58:15 +01:00
4aa8c0694c
regmap: Fix for nodev mode
Add mising braces so that the nodev mode actually works (which was a bit
 of an oversight).
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABAgAGBQJTR73jAAoJELSic+t+oim9DU4P/0syjNA3/oiZ+HgJZpCELafI
 sbbAV+nKTzOKpYTtGLxpQe67gPrZ5kVw9wydYOhWRZ22wbdJ3dyBcizpGnpPQuEC
 1/MK8GYj9F1bO3FimwRhdu3oyafNRYVAfNZvBzxrqhcq8US5xu3CLMUFOVHreVOi
 +IZn8hrsE9Z6lf/MAJUhsPDvXcqnQAHTODqzIKB38zpwdy22NOfDJgoDRIhKIoun
 xIdvf1pmMvKNc8ClZzBHokMgg37UbsVYPeUP6zH7d0+0Id38v2R94MKFC+uAcgk0
 xj4R9c2biVs8+Vz9TG2eMeVbBU6XlYVkHFrXUKFfpua4aOuLf17wun52Gt8JdBi9
 c4HFzvJXbvvbWk+b24P6+olh0yVmD+2wrsjpEa/nkB3aZMLqrIPX7gCo/3z8TvS7
 iDf6snJiUPOK5OIYJSm28ERrkTjxvXTpFZFwvss7vNZ08Oz4FgCb+UmRAdyXKaec
 slmLqVLDYV2+VrAqHZe5QFjWc2IJ1bqTX7R57Z6REx+s+e+A6K8i9TDzsQ7zLa+d
 +M2oq7Wn3bwXQwwuOvbg0ZrE96PyFbyXqcS5xcByFv24MoX6T9MXlFNhAPXxq+NB
 j854BZbo8OjL3uR91CXsR0a6/UERamnENQdiw3GTEVxjovGRfvRjdsfBjpPXBf3U
 YzFEflwQIU/CqdtELDWQ
 =Kfpr
 -----END PGP SIGNATURE-----

Merge tag 'regmap-v3.15-nodev' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap

Pull regmap fix from Mark Brown:
 "regmap: Fix for nodev mode

  Add mising braces so that the nodev mode actually works (which was a
  bit of an oversight)"

Testing schmesting.  We don't need not steenking testing.  We have
deadlines to beat, and new code to write.

* tag 'regmap-v3.15-nodev' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regmap:
  regmap: adds missing braces in regmap_init()

Linus Torvalds   commited 2014-04-11 13:25:08 -07:00
4b44e7b135