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} |
|