Lines Matching refs:reg

45 static int _regmap_update_bits(struct regmap *map, unsigned int reg,
49 static int _regmap_bus_reg_read(void *context, unsigned int reg,
51 static int _regmap_bus_read(void *context, unsigned int reg,
53 static int _regmap_bus_formatted_write(void *context, unsigned int reg,
55 static int _regmap_bus_reg_write(void *context, unsigned int reg,
57 static int _regmap_bus_raw_write(void *context, unsigned int reg,
60 bool regmap_reg_in_ranges(unsigned int reg,
68 if (regmap_reg_in_range(reg, r))
74 bool regmap_check_range_table(struct regmap *map, unsigned int reg,
78 if (regmap_reg_in_ranges(reg, table->no_ranges, table->n_no_ranges))
81 /* In case zero "yes ranges" are supplied, any reg is OK */
85 return regmap_reg_in_ranges(reg, table->yes_ranges,
90 bool regmap_writeable(struct regmap *map, unsigned int reg)
92 if (map->max_register && reg > map->max_register)
96 return map->writeable_reg(map->dev, reg);
99 return regmap_check_range_table(map, reg, map->wr_table);
104 bool regmap_cached(struct regmap *map, unsigned int reg)
115 if (map->max_register && reg > map->max_register)
119 ret = regcache_read(map, reg, &val);
127 bool regmap_readable(struct regmap *map, unsigned int reg)
132 if (map->max_register && reg > map->max_register)
139 return map->readable_reg(map->dev, reg);
142 return regmap_check_range_table(map, reg, map->rd_table);
147 bool regmap_volatile(struct regmap *map, unsigned int reg)
149 if (!map->format.format_write && !regmap_readable(map, reg))
153 return map->volatile_reg(map->dev, reg);
156 return regmap_check_range_table(map, reg, map->volatile_table);
164 bool regmap_precious(struct regmap *map, unsigned int reg)
166 if (!regmap_readable(map, reg))
170 return map->precious_reg(map->dev, reg);
173 return regmap_check_range_table(map, reg, map->precious_table);
178 bool regmap_writeable_noinc(struct regmap *map, unsigned int reg)
181 return map->writeable_noinc_reg(map->dev, reg);
184 return regmap_check_range_table(map, reg, map->wr_noinc_table);
189 bool regmap_readable_noinc(struct regmap *map, unsigned int reg)
192 return map->readable_noinc_reg(map->dev, reg);
195 return regmap_check_range_table(map, reg, map->rd_noinc_table);
200 static bool regmap_volatile_range(struct regmap *map, unsigned int reg,
206 if (!regmap_volatile(map, reg + regmap_get_offset(map, i)))
213 unsigned int reg, unsigned int val)
217 out[0] = reg >> 4;
218 out[1] = (reg << 4) | (val >> 16);
225 unsigned int reg, unsigned int val)
229 *out = (reg << 6) | val;
233 unsigned int reg, unsigned int val)
236 *out = cpu_to_be16((reg << 12) | val);
240 unsigned int reg, unsigned int val)
243 *out = cpu_to_be16((reg << 9) | val);
247 unsigned int reg, unsigned int val)
252 out[1] = (val >> 8) | (reg << 6);
253 out[0] = reg >> 2;
561 unsigned int reg)
569 if (reg < this->range_min)
571 else if (reg > this->range_max)
1241 rm_field->reg = reg_field.reg;
1555 static int _regmap_select_page(struct regmap *map, unsigned int *reg,
1565 win_offset = (*reg - range->range_min) % range->window_len;
1566 win_page = (*reg - range->range_min) / range->window_len;
1570 if (*reg + val_num - 1 > range->range_max)
1598 *reg = range->window_start + win_offset;
1618 static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg,
1635 if (!regmap_writeable_noinc(map, reg)) {
1638 reg + regmap_get_offset(map, i);
1654 ret = regcache_write(map, reg + offset, ival);
1658 reg + offset, ret);
1668 range = _regmap_range_lookup(map, reg);
1671 int win_offset = (reg - range->range_min) % range->window_len;
1678 ret = _regmap_raw_write_impl(map, reg, val,
1684 reg += win_residue;
1689 win_offset = (reg - range->range_min) %
1694 ret = _regmap_select_page(map, &reg, range, noinc ? 1 : val_num);
1699 map->format.format_reg(map->work_buf, reg, map->reg_shift);
1716 trace_regmap_async_write_start(map, reg, val_len);
1774 trace_regmap_hw_write_start(map, reg, val_len / map->format.val_bytes);
1811 map->cache_ops->drop(map, reg, reg + 1);
1814 trace_regmap_hw_write_done(map, reg, val_len / map->format.val_bytes);
1853 static int _regmap_bus_formatted_write(void *context, unsigned int reg,
1862 range = _regmap_range_lookup(map, reg);
1864 ret = _regmap_select_page(map, &reg, range, 1);
1869 map->format.format_write(map, reg, val);
1871 trace_regmap_hw_write_start(map, reg, 1);
1876 trace_regmap_hw_write_done(map, reg, 1);
1881 static int _regmap_bus_reg_write(void *context, unsigned int reg,
1886 return map->bus->reg_write(map->bus_context, reg, val);
1889 static int _regmap_bus_raw_write(void *context, unsigned int reg,
1898 return _regmap_raw_write_impl(map, reg,
1911 int _regmap_write(struct regmap *map, unsigned int reg,
1917 if (!regmap_writeable(map, reg))
1921 ret = regcache_write(map, reg, val);
1931 dev_info(map->dev, "%x <= %x\n", reg, val);
1933 trace_regmap_reg_write(map, reg, val);
1935 return map->reg_write(context, reg, val);
1942 * @reg: Register to write to
1948 int regmap_write(struct regmap *map, unsigned int reg, unsigned int val)
1952 if (!IS_ALIGNED(reg, map->reg_stride))
1957 ret = _regmap_write(map, reg, val);
1969 * @reg: Register to write to
1975 int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val)
1979 if (!IS_ALIGNED(reg, map->reg_stride))
1986 ret = _regmap_write(map, reg, val);
1996 int _regmap_raw_write(struct regmap *map, unsigned int reg,
2018 ret = _regmap_raw_write_impl(map, reg, val, chunk_bytes, noinc);
2022 reg += regmap_get_offset(map, chunk_regs);
2029 ret = _regmap_raw_write_impl(map, reg, val, val_len, noinc);
2038 * @reg: Initial register to write to
2050 int regmap_raw_write(struct regmap *map, unsigned int reg,
2062 ret = _regmap_raw_write(map, reg, val, val_len, false);
2075 * @reg: Register to write to
2091 int regmap_noinc_write(struct regmap *map, unsigned int reg,
2103 if (!IS_ALIGNED(reg, map->reg_stride))
2110 if (!regmap_volatile(map, reg) || !regmap_writeable_noinc(map, reg)) {
2120 ret = _regmap_raw_write(map, reg, val, write_len, true);
2156 return regmap_update_bits_base(field->regmap, field->reg,
2187 field->reg + (field->id_offset * id),
2197 * @reg: First register to be write from
2207 int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val,
2213 if (!IS_ALIGNED(reg, map->reg_stride))
2246 reg + regmap_get_offset(map, i),
2263 ret = regmap_raw_write(map, reg, wval, val_bytes * val_count);
2304 unsigned int reg = regs[i].reg;
2306 trace_regmap_hw_write_start(map, reg, 1);
2307 map->format.format_reg(u8, reg, map->reg_shift);
2320 int reg = regs[i].reg;
2321 trace_regmap_hw_write_done(map, reg, 1);
2327 unsigned int reg,
2330 unsigned int win_page = (reg - range->range_min) / range->window_len;
2352 unsigned int reg = regs[i].reg;
2355 range = _regmap_range_lookup(map, reg);
2357 unsigned int win_page = _regmap_register_page(map, reg,
2400 &base[n].reg,
2425 ret = _regmap_write(map, regs[i].reg, regs[i].def);
2444 int reg = regs[i].reg;
2445 if (!map->writeable_reg(map->dev, reg))
2447 if (!IS_ALIGNED(reg, map->reg_stride))
2454 unsigned int reg = regs[i].reg;
2455 ret = regcache_write(map, reg, val);
2459 reg, ret);
2472 unsigned int reg = regs[i].reg;
2478 range = _regmap_range_lookup(map, reg);
2574 * @reg: Initial register to write to
2591 int regmap_raw_write_async(struct regmap *map, unsigned int reg,
2598 if (!IS_ALIGNED(reg, map->reg_stride))
2605 ret = _regmap_raw_write(map, reg, val, val_len, false);
2615 static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
2626 range = _regmap_range_lookup(map, reg);
2628 ret = _regmap_select_page(map, &reg, range,
2634 map->format.format_reg(map->work_buf, reg, map->reg_shift);
2637 trace_regmap_hw_read_start(map, reg, val_len / map->format.val_bytes);
2643 trace_regmap_hw_read_done(map, reg, val_len / map->format.val_bytes);
2648 static int _regmap_bus_reg_read(void *context, unsigned int reg,
2653 return map->bus->reg_read(map->bus_context, reg, val);
2656 static int _regmap_bus_read(void *context, unsigned int reg,
2667 ret = _regmap_raw_read(map, reg, work_val, map->format.val_bytes, false);
2674 static int _regmap_read(struct regmap *map, unsigned int reg,
2681 ret = regcache_read(map, reg, val);
2689 if (!regmap_readable(map, reg))
2692 ret = map->reg_read(context, reg, val);
2695 dev_info(map->dev, "%x => %x\n", reg, *val);
2697 trace_regmap_reg_read(map, reg, *val);
2700 regcache_write(map, reg, *val);
2710 * @reg: Register to be read from
2716 int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val)
2720 if (!IS_ALIGNED(reg, map->reg_stride))
2725 ret = _regmap_read(map, reg, val);
2737 * @reg: First register to be read from
2744 int regmap_raw_read(struct regmap *map, unsigned int reg, void *val,
2756 if (!IS_ALIGNED(reg, map->reg_stride))
2763 if (regmap_volatile_range(map, reg, val_count) || map->cache_bypass ||
2783 ret = _regmap_raw_read(map, reg, val, chunk_bytes, false);
2787 reg += regmap_get_offset(map, chunk_regs);
2794 ret = _regmap_raw_read(map, reg, val, val_len, false);
2803 ret = _regmap_read(map, reg + regmap_get_offset(map, i),
2824 * @reg: Register to read from
2840 int regmap_noinc_read(struct regmap *map, unsigned int reg,
2852 if (!IS_ALIGNED(reg, map->reg_stride))
2859 if (!regmap_volatile(map, reg) || !regmap_readable_noinc(map, reg)) {
2869 ret = _regmap_raw_read(map, reg, val, read_len, true);
2895 ret = regmap_read(field->regmap, field->reg, &reg_val);
2927 field->reg + (field->id_offset * id),
2944 * @reg: First register to be read from
2951 int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val,
2956 bool vol = regmap_volatile_range(map, reg, val_count);
2958 if (!IS_ALIGNED(reg, map->reg_stride))
2964 ret = regmap_raw_read(map, reg, val, val_bytes * val_count);
2983 ret = _regmap_read(map, reg + regmap_get_offset(map, i),
3017 static int _regmap_update_bits(struct regmap *map, unsigned int reg,
3027 if (regmap_volatile(map, reg) && map->reg_update_bits) {
3028 ret = map->reg_update_bits(map->bus_context, reg, mask, val);
3032 ret = _regmap_read(map, reg, &orig);
3040 ret = _regmap_write(map, reg, tmp);
3053 * @reg: Register to update
3071 int regmap_update_bits_base(struct regmap *map, unsigned int reg,
3081 ret = _regmap_update_bits(map, reg, mask, val, change, force);
3095 * @reg: Register to read from
3102 int regmap_test_bits(struct regmap *map, unsigned int reg, unsigned int bits)
3106 ret = regmap_read(map, reg, &val);