regcache.c (78493f2d7b51d6f6d03982cee559c62dfab4c292) regcache.c (f8bd822cbf953299b2957b45f6a43c08e7931ddc)
1/*
2 * Register cache access API
3 *
4 * Copyright 2011 Wolfson Microelectronics plc
5 *
6 * Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 530 unchanged lines hidden (view full) ---

539 r = bsearch(&key, map->reg_defaults, map->num_reg_defaults,
540 sizeof(struct reg_default), regcache_default_cmp);
541
542 if (r)
543 return r - map->reg_defaults;
544 else
545 return -ENOENT;
546}
1/*
2 * Register cache access API
3 *
4 * Copyright 2011 Wolfson Microelectronics plc
5 *
6 * Author: Dimitris Papastamos <dp@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 530 unchanged lines hidden (view full) ---

539 r = bsearch(&key, map->reg_defaults, map->num_reg_defaults,
540 sizeof(struct reg_default), regcache_default_cmp);
541
542 if (r)
543 return r - map->reg_defaults;
544 else
545 return -ENOENT;
546}
547
548int regcache_sync_block(struct regmap *map, void *block,
549 unsigned int block_base, unsigned int start,
550 unsigned int end)
551{
552 unsigned int i, regtmp, val;
553 const void *addr;
554 int ret;
555
556 for (i = start; i < end; i++) {
557 regtmp = block_base + (i * map->reg_stride);
558
559 if (!regcache_reg_present(map, regtmp))
560 continue;
561
562 val = regcache_get_val(map, block, i);
563
564 /* Is this the hardware default? If so skip. */
565 ret = regcache_lookup_reg(map, regtmp);
566 if (ret >= 0 && val == map->reg_defaults[ret].def)
567 continue;
568
569 map->cache_bypass = 1;
570
571 if (regmap_can_raw_write(map)) {
572 addr = regcache_get_val_addr(map, block, i);
573 ret = _regmap_raw_write(map, regtmp, addr,
574 map->format.val_bytes,
575 false);
576 } else {
577 ret = _regmap_write(map, regtmp, val);
578 }
579
580 map->cache_bypass = 0;
581 if (ret != 0)
582 return ret;
583 dev_dbg(map->dev, "Synced register %#x, value %#x\n",
584 regtmp, val);
585 }
586
587 return 0;
588}