···252252 struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);253253 struct regmap *map = d->map;254254 const struct regmap_irq *irq_data = irq_to_regmap_irq(d, data->hwirq);255255+ unsigned int reg = irq_data->reg_offset / map->reg_stride;255256 unsigned int mask, type;256257257258 type = irq_data->type.type_falling_val | irq_data->type.type_rising_val;···269268 * at the corresponding offset in regmap_irq_set_type().270269 */271270 if (d->chip->type_in_mask && type)272272- mask = d->type_buf[irq_data->reg_offset / map->reg_stride];271271+ mask = d->type_buf[reg] & irq_data->mask;273272 else274273 mask = irq_data->mask;275274276275 if (d->chip->clear_on_unmask)277276 d->clear_status = true;278277279279- d->mask_buf[irq_data->reg_offset / map->reg_stride] &= ~mask;278278+ d->mask_buf[reg] &= ~mask;280279}281280282281static void regmap_irq_disable(struct irq_data *data)···387386 subreg = &chip->sub_reg_offsets[b];388387 for (i = 0; i < subreg->num_regs; i++) {389388 unsigned int offset = subreg->offset[i];389389+ unsigned int index = offset / map->reg_stride;390390391391 if (chip->not_fixed_stride)392392 ret = regmap_read(map,···396394 else397395 ret = regmap_read(map,398396 chip->status_base + offset,399399- &data->status_buf[offset]);397397+ &data->status_buf[index]);400398401399 if (ret)402400 break;
+8-7
drivers/base/regmap/regmap.c
···18801880 */18811881bool regmap_can_raw_write(struct regmap *map)18821882{18831883- return map->bus && map->bus->write && map->format.format_val &&18841884- map->format.format_reg;18831883+ return map->write && map->format.format_val && map->format.format_reg;18851884}18861885EXPORT_SYMBOL_GPL(regmap_can_raw_write);18871886···21542155 size_t write_len;21552156 int ret;2156215721572157- if (!map->bus)21582158- return -EINVAL;21592159- if (!map->bus->write)21582158+ if (!map->write)21602159 return -ENOTSUPP;21602160+21612161 if (val_len % map->format.val_bytes)21622162 return -EINVAL;21632163 if (!IS_ALIGNED(reg, map->reg_stride))···22982300 * Some devices don't support bulk write, for them we have a series of22992301 * single write operations.23002302 */23012301- if (!map->bus || !map->format.parse_inplace) {23032303+ if (!map->write || !map->format.parse_inplace) {23022304 map->lock(map->lock_arg);23032305 for (i = 0; i < val_count; i++) {23042306 unsigned int ival;···29242926 size_t read_len;29252927 int ret;2926292829292929+ if (!map->read)29302930+ return -ENOTSUPP;29312931+29272932 if (val_len % map->format.val_bytes)29282933 return -EINVAL;29292934 if (!IS_ALIGNED(reg, map->reg_stride))···30403039 if (val_count == 0)30413040 return -EINVAL;3042304130433043- if (map->format.parse_inplace && (vol || map->cache_type == REGCACHE_NONE)) {30423042+ if (map->read && map->format.parse_inplace && (vol || map->cache_type == REGCACHE_NONE)) {30443043 ret = regmap_raw_read(map, reg, val, val_bytes * val_count);30453044 if (ret != 0)30463045 return ret;