1. 05 10月, 2015 1 次提交
  2. 30 8月, 2015 1 次提交
  3. 22 8月, 2015 1 次提交
  4. 17 7月, 2015 1 次提交
  5. 06 5月, 2015 1 次提交
    • K
      regmap: Use regcache_mark_dirty() to indicate power loss or reset · 1c79771a
      Kevin Cernekee 提交于
      Existing regmap users call regcache_mark_dirty() as part of the
      suspend/resume sequence, to tell regcache that non-default values need to
      be resynced post-resume.  Add an internal "no_sync_defaults" regmap flag
      to remember this state, so that regcache_sync() can differentiate between
      these two cases:
      
      1) HW was reset, so any cache values that match map->reg_defaults can be
      safely skipped.  On some chips there are a lot of registers in the
      reg_defaults list, so this optimization speeds things up quite a bit.
      
      2) HW was not reset (maybe it was just clock-gated), so if we cached
      any writes, they should be sent to the hardware regardless of whether
      they match the HW default.  Currently this will write out all values in
      the regcache, since we don't maintain per-register dirty bits.
      Suggested-by: NMark Brown <broonie@kernel.org>
      Signed-off-by: NKevin Cernekee <cernekee@chromium.org>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      1c79771a
  6. 20 3月, 2015 1 次提交
    • P
      regmap: introduce regmap_name to fix syscon regmap trace events · c6b570d9
      Philipp Zabel 提交于
      This patch fixes a NULL pointer dereference when enabling regmap event
      tracing in the presence of a syscon regmap, introduced by commit bdb0066d
      ("mfd: syscon: Decouple syscon interface from platform devices").
      That patch introduced syscon regmaps that have their dev field set to NULL.
      The regmap trace events expect it to point to a valid struct device and feed
      it to dev_name():
      
        $ echo 1 > /sys/kernel/debug/tracing/events/regmap/enable
      
        Unable to handle kernel NULL pointer dereference at virtual address 0000002c
        pgd = 80004000
        [0000002c] *pgd=00000000
        Internal error: Oops: 17 [#1] SMP ARM
        Modules linked in: coda videobuf2_vmalloc
        CPU: 0 PID: 304 Comm: kworker/0:2 Not tainted 4.0.0-rc2+ #9197
        Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
        Workqueue: events_freezable thermal_zone_device_check
        task: 9f25a200 ti: 9f1ee000 task.ti: 9f1ee000
        PC is at ftrace_raw_event_regmap_block+0x3c/0xe4
        LR is at _regmap_raw_read+0x1bc/0x1cc
        pc : [<803636e8>]    lr : [<80365f2c>]    psr: 600f0093
        sp : 9f1efd78  ip : 9f1efdb8  fp : 9f1efdb4
        r10: 00000004  r9 : 00000001  r8 : 00000001
        r7 : 00000180  r6 : 00000000  r5 : 9f00e3c0  r4 : 00000003
        r3 : 00000001  r2 : 00000180  r1 : 00000000  r0 : 9f00e3c0
        Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment kernel
        Control: 10c5387d  Table: 2d91004a  DAC: 00000015
        Process kworker/0:2 (pid: 304, stack limit = 0x9f1ee210)
        Stack: (0x9f1efd78 to 0x9f1f0000)
        fd60:                                                       9f1efda4 9f1efd88
        fd80: 800708c0 805f9510 80927140 800f0013 9f1fc800 9eb2f490 00000000 00000180
        fda0: 808e3840 00000001 9f1efdfc 9f1efdb8 80365f2c 803636b8 805f8958 800708e0
        fdc0: a00f0013 803636ac 9f16de00 00000180 80927140 9f1fc800 9f1fc800 9f1efe6c
        fde0: 9f1efe6c 9f732400 00000000 00000000 9f1efe1c 9f1efe00 80365f70 80365d7c
        fe00: 80365f3c 9f1fc800 9f1fc800 00000180 9f1efe44 9f1efe20 803656a4 80365f48
        fe20: 9f1fc800 00000180 9f1efe6c 9f1efe6c 9f732400 00000000 9f1efe64 9f1efe48
        fe40: 803657bc 80365634 00000001 9e95f910 9f1fc800 9f1efeb4 9f1efe8c 9f1efe68
        fe60: 80452ac0 80365778 9f1efe8c 9f1efe78 9e93d400 9e93d5e8 9f1efeb4 9f72ef40
        fe80: 9f1efeac 9f1efe90 8044e11c 80452998 8045298c 9e93d608 9e93d400 808e1978
        fea0: 9f1efecc 9f1efeb0 8044fd14 8044e0d0 ffffffff 9f25a200 9e93d608 9e481380
        fec0: 9f1efedc 9f1efed0 8044fde8 8044fcec 9f1eff1c 9f1efee0 80038d50 8044fdd8
        fee0: 9f1ee020 9f72ef40 9e481398 00000000 00000008 9f72ef54 9f1ee020 9f72ef40
        ff00: 9e481398 9e481380 00000008 9f72ef40 9f1eff5c 9f1eff20 80039754 80038bfc
        ff20: 00000000 9e481380 80894100 808e1662 00000000 9e4f2ec0 00000000 9e481380
        ff40: 800396f8 00000000 00000000 00000000 9f1effac 9f1eff60 8003e020 80039704
        ff60: ffffffff 00000000 ffffffff 9e481380 00000000 00000000 9f1eff78 9f1eff78
        ff80: 00000000 00000000 9f1eff88 9f1eff88 9e4f2ec0 8003df30 00000000 00000000
        ffa0: 00000000 9f1effb0 8000eb60 8003df3c 00000000 00000000 00000000 00000000
        ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
        ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 ffffffff ffffffff
        Backtrace:
        [<803636ac>] (ftrace_raw_event_regmap_block) from [<80365f2c>] (_regmap_raw_read+0x1bc/0x1cc)
         r9:00000001 r8:808e3840 r7:00000180 r6:00000000 r5:9eb2f490 r4:9f1fc800
        [<80365d70>] (_regmap_raw_read) from [<80365f70>] (_regmap_bus_read+0x34/0x6c)
         r10:00000000 r9:00000000 r8:9f732400 r7:9f1efe6c r6:9f1efe6c r5:9f1fc800
         r4:9f1fc800
        [<80365f3c>] (_regmap_bus_read) from [<803656a4>] (_regmap_read+0x7c/0x144)
         r6:00000180 r5:9f1fc800 r4:9f1fc800 r3:80365f3c
        [<80365628>] (_regmap_read) from [<803657bc>] (regmap_read+0x50/0x70)
         r9:00000000 r8:9f732400 r7:9f1efe6c r6:9f1efe6c r5:00000180 r4:9f1fc800
        [<8036576c>] (regmap_read) from [<80452ac0>] (imx_get_temp+0x134/0x1a4)
         r6:9f1efeb4 r5:9f1fc800 r4:9e95f910 r3:00000001
        [<8045298c>] (imx_get_temp) from [<8044e11c>] (thermal_zone_get_temp+0x58/0x74)
         r7:9f72ef40 r6:9f1efeb4 r5:9e93d5e8 r4:9e93d400
        [<8044e0c4>] (thermal_zone_get_temp) from [<8044fd14>] (thermal_zone_device_update+0x34/0xec)
         r6:808e1978 r5:9e93d400 r4:9e93d608 r3:8045298c
        [<8044fce0>] (thermal_zone_device_update) from [<8044fde8>] (thermal_zone_device_check+0x1c/0x20)
         r5:9e481380 r4:9e93d608
        [<8044fdcc>] (thermal_zone_device_check) from [<80038d50>] (process_one_work+0x160/0x3d4)
        [<80038bf0>] (process_one_work) from [<80039754>] (worker_thread+0x5c/0x4f4)
         r10:9f72ef40 r9:00000008 r8:9e481380 r7:9e481398 r6:9f72ef40 r5:9f1ee020
         r4:9f72ef54
        [<800396f8>] (worker_thread) from [<8003e020>] (kthread+0xf0/0x108)
         r10:00000000 r9:00000000 r8:00000000 r7:800396f8 r6:9e481380 r5:00000000
         r4:9e4f2ec0
        [<8003df30>] (kthread) from [<8000eb60>] (ret_from_fork+0x14/0x34)
         r7:00000000 r6:00000000 r5:8003df30 r4:9e4f2ec0
        Code: e3140040 1a00001a e3140020 1a000016 (e596002c)
        ---[ end trace 193c15c2494ec960 ]---
      
      Fixes: bdb0066d (mfd: syscon: Decouple syscon interface from platform devices)
      Signed-off-by: NPhilipp Zabel <p.zabel@pengutronix.de>
      Signed-off-by: NMark Brown <broonie@kernel.org>
      Cc: stable@vger.kernel.org
      c6b570d9
  7. 05 2月, 2015 1 次提交
  8. 16 12月, 2014 1 次提交
  9. 12 9月, 2014 1 次提交
  10. 26 8月, 2014 1 次提交
    • L
      regmap: Fix regcache debugfs initialization · 5e0cbe78
      Lars-Peter Clausen 提交于
      Commit 6cfec04b ("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: 6cfec04b (regmap: Separate regmap dev initialization)
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      Cc: stable@vger.kernel.org
      5e0cbe78
  11. 11 3月, 2014 1 次提交
  12. 09 10月, 2013 1 次提交
  13. 08 10月, 2013 1 次提交
  14. 17 9月, 2013 1 次提交
    • K
      regmap: Add regmap_fields APIs · a0102375
      Kuninori Morimoto 提交于
      Current Linux kernel is supporting regmap_field method
      and it is very useful feature.
      It needs one regmap_filed for one register access.
      
      OTOH, there is multi port device which
      has many same registers in the market.
      The difference for each register access is
      only its address offset.
      
      Current API needs many regmap_field for such device,
      but it is not good.
      This patch adds new regmap_fileds API which can care
      about multi port/offset access via regmap.
      Signed-off-by: NKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      a0102375
  15. 29 8月, 2013 1 次提交
    • L
      regmap: rbtree: Make cache_present bitmap per node · 3f4ff561
      Lars-Peter Clausen 提交于
      With devices which have a dense and small register map but placed at a large
      offset the global cache_present bitmap imposes a huge memory overhead. Making
      the cache_present per rbtree node avoids the issue and easily reduces the memory
      footprint by a factor of ten. For devices with a more sparse map or without a
      large base register offset the memory usage might increase slightly by a few
      bytes, but not significantly. E.g. for a device which has ~50 registers at
      offset 0x4000 the memory footprint of the register cache goes down form 2496
      bytes to 175 bytes.
      
      Moving the bitmap to a per node basis means that the handling of the bitmap is
      now cache implementation specific and can no longer be managed by the core. The
      regcache_sync_block() function is extended by a additional parameter so that the
      cache implementation can tell the core which registers in the block are set and
      which are not. The parameter is optional and if NULL the core assumes that all
      registers are set. The rbtree cache also needs to implement its own drop
      callback instead of relying on the core to handle this.
      Signed-off-by: NLars-Peter Clausen <lars@metafoo.de>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      3f4ff561
  16. 09 8月, 2013 1 次提交
  17. 12 6月, 2013 1 次提交
    • S
      regmap: Add regmap_field APIs · 67252287
      Srinivas Kandagatla 提交于
      It is common to access regmap registers at bit level, using
      regmap_update_bits or regmap_read functions, however the end user has to
      take care of a mask or shifting. This becomes overhead when such use
      cases are high. Having a common function to do this is much convenient
      and less error prone.
      
      The idea of regmap_field is simple, regmap_field gives a logical
      structure to bits of the regmap register, and the driver can use this
      logical entity without the knowledge of the bit positions and masks all
      over the code. This way code looks much neat and it need not handle the
      masks, shifts every time it access the those entities.
      
      With this new regmap_field_read/write apis the end user can setup a
      regmap field using regmap_field_init and use the return regmap_field to
      read write the register field without worrying about the masks or
      shifts.
      
      Also this apis will be useful for drivers which are based on regmaps,
      like some clocks or pinctrls which can work on the regmap_fields
      directly without having to worry about bit positions.
      Signed-off-by: NSrinivas Kandagatla <srinivas.kandagatla@st.com>
      Signed-off-by: NMark Brown <broonie@linaro.org>
      67252287
  18. 25 5月, 2013 1 次提交
  19. 12 5月, 2013 1 次提交
  20. 30 3月, 2013 2 次提交
  21. 27 3月, 2013 2 次提交
  22. 04 3月, 2013 3 次提交
  23. 11 2月, 2013 1 次提交
  24. 29 1月, 2013 2 次提交
  25. 14 1月, 2013 2 次提交
  26. 02 1月, 2013 1 次提交
    • M
      regmap: flat: Add flat cache type · 2ac902ce
      Mark Brown 提交于
      While for I2C and SPI devices the overhead of using rbtree for devices with
      only one block of registers is negligible the same isn't always going to
      be true for MMIO devices where the I/O costs are very much lower. Cater
      for these devices by adding a simple flat array type for them where the
      lookups are simple array accesses, taking us right back to the original
      ASoC cache implementation.
      
      Thanks to Magnus Damm for the discussion which prompted this.
      Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
      2ac902ce
  27. 11 12月, 2012 1 次提交
    • M
      regmap: debugfs: Cache offsets of valid regions for dump · 5166b7c0
      Mark Brown 提交于
      Avoid doing a linear scan of the entire register map for each read() of
      the debugfs register dump by recording the offsets where valid registers
      exist when we first read the registers file. This assumes the set of
      valid registers never changes, if this is not the case invalidation of
      the cache will be required.
      
      This could be further improved for large blocks of contiguous registers
      by calculating the register we will read from within the block - currently
      we do a linear scan of the block. An rbtree may also be worthwhile.
      Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
      5166b7c0
  28. 06 12月, 2012 1 次提交
  29. 21 11月, 2012 1 次提交
  30. 17 10月, 2012 1 次提交
  31. 15 10月, 2012 2 次提交
  32. 18 6月, 2012 1 次提交
    • K
      regmap: Add support for register indirect addressing. · 6863ca62
      Krystian Garbaciak 提交于
      Devices with register paging or indirectly accessed registers can configure
      register mapping to map those on virtual address range. During access to
      virtually mapped register range, indirect addressing is processed
      automatically, in following steps:
        1. selector for page or indirect register is updated (when needed);
        2. register in data window is accessed.
      
      Configuration should provide minimum and maximum register for virtual range,
      details of selector field for page selection, minimum and maximum register of
      data window for indirect access.
      
      Virtual range registers are managed by cache as well as direct access
      registers. In order to make indirect access more efficient, selector register
      should be declared as non-volatile, if possible.
      
      struct regmap_config is extended with the following:
      struct regmap_range_cfg	*ranges;
      unsigned int		n_ranges;
      
      [Also reordered debugfs init to later on since the cleanup code was
      conflicting with the new cleanup code for ranges anyway -- broonie]
      Signed-off-by: NKrystian Garbaciak <krystian.garbaciak@diasemi.com>
      Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
      6863ca62
  33. 09 5月, 2012 1 次提交