Merge branches 'regmap-core', 'regmap-irq' and 'regmap-page' into regmap-next
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 22 Jul 2012 18:26:07 +0000 (19:26 +0100)
committerMark Brown <broonie@opensource.wolfsonmicro.com>
Sun, 22 Jul 2012 18:26:07 +0000 (19:26 +0100)
Conflicts (trivial context stuff):
drivers/base/regmap/regmap.c
include/linux/regmap.h

1  2  3 
drivers/base/regmap/regmap-irq.c
drivers/base/regmap/regmap.c
include/linux/regmap.h

Simple merge
index f8a937654af292e46401a15e25406e0295b85a01,0bcda488f11cd45e6252e113ffd025b058309e99,d912eb2d19cec9687655759e98003b25865dff28..c241ae2f2f10b91e8998e5b657d5f739cc0c0b7b
   
   #include "internal.h"
   
 ++/*
 ++ * Sometimes for failures during very early init the trace
 ++ * infrastructure isn't available early enough to be used.  For this
 ++ * sort of problem defining LOG_DEVICE will add printks for basic
 ++ * register I/O on a specific device.
 ++ */
 ++#undef LOG_DEVICE
 ++
 + static int _regmap_update_bits(struct regmap *map, unsigned int reg,
 +                             unsigned int mask, unsigned int val,
 +                             bool *change);
 + 
   bool regmap_writeable(struct regmap *map, unsigned int reg)
   {
        if (map->max_register && reg > map->max_register)
@@@@ -261,7 -227,6 -293,7 +323,8 @@@@ struct regmap *regmap_init(struct devic
   {
        struct regmap *map, **m;
        int ret = -EINVAL;
 ++     enum regmap_endian reg_endian, val_endian;
++      int i, j;
   
        if (!bus || !config)
                goto err;
index 4191a42815876365fa18d27df3940c08e538af48,58ec0cba0ae6d37ffb5f6372b82a075c4943e332,5f69d4ad3eb190aa59c2b1baf57521ece11f5b0a..7f7e00df3adf9991ce844a280c4c5c03a9d7bcb6
@@@@ -92,12 -84,6 -86,9 +94,15 @@@@ enum regmap_endian 
    * @reg_defaults_raw: Power on reset values for registers (for use with
    *                    register cache support).
    * @num_reg_defaults_raw: Number of elements in reg_defaults_raw.
 ++ * @reg_format_endian: Endianness for formatted register addresses. If this is
 ++ *                     DEFAULT, the @reg_format_endian_default value from the
 ++ *                     regmap bus is used.
 ++ * @val_format_endian: Endianness for formatted register values. If this is
 ++ *                     DEFAULT, the @reg_format_endian_default value from the
 ++ *                     regmap bus is used.
++  *
++  * @ranges: Array of configuration entries for virtual address ranges.
++  * @num_ranges: Number of range configuration entries.
    */
   struct regmap_config {
        const char *name;
        u8 write_flag_mask;
   
        bool use_single_rw;
 + 
 ++     enum regmap_endian reg_format_endian;
 ++     enum regmap_endian val_format_endian;
+++
++      const struct regmap_range_cfg *ranges;
++      unsigned int n_ranges;
++ };
++ 
++ /**
++  * Configuration for indirectly accessed or paged registers.
++  * Registers, mapped to this virtual range, are accessed in two steps:
++  *     1. page selector register update;
++  *     2. access through data window registers.
++  *
++  * @range_min: Address of the lowest register address in virtual range.
++  * @range_max: Address of the highest register in virtual range.
++  *
++  * @page_sel_reg: Register with selector field.
++  * @page_sel_mask: Bit shift for selector value.
++  * @page_sel_shift: Bit mask for selector value.
++  *
++  * @window_start: Address of first (lowest) register in data window.
++  * @window_len: Number of registers in data window.
++  */
++ struct regmap_range_cfg {
++      /* Registers of virtual address range */
++      unsigned int range_min;
++      unsigned int range_max;
++ 
++      /* Page selector for indirect addressing */
++      unsigned int selector_reg;
++      unsigned int selector_mask;
++      int selector_shift;
++ 
++      /* Data window (per each page) */
++      unsigned int window_start;
++      unsigned int window_len;
   };
   
   typedef int (*regmap_hw_write)(void *context, const void *data,