1 // SPDX-License-Identifier: GPL-2.0 2 // 3 // Register map access API 4 // 5 // Copyright 2011 Wolfson Microelectronics plc 6 // 7 // Author: Mark Brown <[email protected]> 8 9 #include <linux/device.h> 10 #include <linux/slab.h> 11 #include <linux/export.h> 12 #include <linux/mutex.h> 13 #include <linux/err.h> 14 #include <linux/property.h> 15 #include <linux/rbtree.h> 16 #include <linux/sched.h> 17 #include <linux/delay.h> 18 #include <linux/log2.h> 19 #include <linux/hwspinlock.h> 20 #include <asm/unaligned.h> 21 22 #define CREATE_TRACE_POINTS 23 #include "trace.h" 24 25 #include "internal.h" 26 27 /* 28 * Sometimes for failures during very early init the trace 29 * infrastructure isn't available early enough to be used. For this 30 * sort of problem defining LOG_DEVICE will add printks for basic 31 * register I/O on a specific device. 32 */ 33 #undef LOG_DEVICE 34 35 #ifdef LOG_DEVICE 36 static inline bool regmap_should_log(struct regmap *map) 37 { 38 return (map->dev && strcmp(dev_name(map->dev), LOG_DEVICE) == 0); 39 } 40 #else 41 static inline bool regmap_should_log(struct regmap *map) { return false; } 42 #endif 43 44 45 static int _regmap_update_bits(struct regmap *map, unsigned int reg, 46 unsigned int mask, unsigned int val, 47 bool *change, bool force_write); 48 49 static int _regmap_bus_reg_read(void *context, unsigned int reg, 50 unsigned int *val); 51 static int _regmap_bus_read(void *context, unsigned int reg, 52 unsigned int *val); 53 static int _regmap_bus_formatted_write(void *context, unsigned int reg, 54 unsigned int val); 55 static int _regmap_bus_reg_write(void *context, unsigned int reg, 56 unsigned int val); 57 static int _regmap_bus_raw_write(void *context, unsigned int reg, 58 unsigned int val); 59 60 bool regmap_reg_in_ranges(unsigned int reg, 61 const struct regmap_range *ranges, 62 unsigned int nranges) 63 { 64 const struct regmap_range *r; 65 int i; 66 67 for (i = 0, r = ranges; i < nranges; i++, r++) 68 if (regmap_reg_in_range(reg, r)) 69 return true; 70 return false; 71 } 72 EXPORT_SYMBOL_GPL(regmap_reg_in_ranges); 73 74 bool regmap_check_range_table(struct regmap *map, unsigned int reg, 75 const struct regmap_access_table *table) 76 { 77 /* Check "no ranges" first */ 78 if (regmap_reg_in_ranges(reg, table->no_ranges, table->n_no_ranges)) 79 return false; 80 81 /* In case zero "yes ranges" are supplied, any reg is OK */ 82 if (!table->n_yes_ranges) 83 return true; 84 85 return regmap_reg_in_ranges(reg, table->yes_ranges, 86 table->n_yes_ranges); 87 } 88 EXPORT_SYMBOL_GPL(regmap_check_range_table); 89 90 bool regmap_writeable(struct regmap *map, unsigned int reg) 91 { 92 if (map->max_register && reg > map->max_register) 93 return false; 94 95 if (map->writeable_reg) 96 return map->writeable_reg(map->dev, reg); 97 98 if (map->wr_table) 99 return regmap_check_range_table(map, reg, map->wr_table); 100 101 return true; 102 } 103 104 bool regmap_cached(struct regmap *map, unsigned int reg) 105 { 106 int ret; 107 unsigned int val; 108 109 if (map->cache_type == REGCACHE_NONE) 110 return false; 111 112 if (!map->cache_ops) 113 return false; 114 115 if (map->max_register && reg > map->max_register) 116 return false; 117 118 map->lock(map->lock_arg); 119 ret = regcache_read(map, reg, &val); 120 map->unlock(map->lock_arg); 121 if (ret) 122 return false; 123 124 return true; 125 } 126 127 bool regmap_readable(struct regmap *map, unsigned int reg) 128 { 129 if (!map->reg_read) 130 return false; 131 132 if (map->max_register && reg > map->max_register) 133 return false; 134 135 if (map->format.format_write) 136 return false; 137 138 if (map->readable_reg) 139 return map->readable_reg(map->dev, reg); 140 141 if (map->rd_table) 142 return regmap_check_range_table(map, reg, map->rd_table); 143 144 return true; 145 } 146 147 bool regmap_volatile(struct regmap *map, unsigned int reg) 148 { 149 if (!map->format.format_write && !regmap_readable(map, reg)) 150 return false; 151 152 if (map->volatile_reg) 153 return map->volatile_reg(map->dev, reg); 154 155 if (map->volatile_table) 156 return regmap_check_range_table(map, reg, map->volatile_table); 157 158 if (map->cache_ops) 159 return false; 160 else 161 return true; 162 } 163 164 bool regmap_precious(struct regmap *map, unsigned int reg) 165 { 166 if (!regmap_readable(map, reg)) 167 return false; 168 169 if (map->precious_reg) 170 return map->precious_reg(map->dev, reg); 171 172 if (map->precious_table) 173 return regmap_check_range_table(map, reg, map->precious_table); 174 175 return false; 176 } 177 178 bool regmap_writeable_noinc(struct regmap *map, unsigned int reg) 179 { 180 if (map->writeable_noinc_reg) 181 return map->writeable_noinc_reg(map->dev, reg); 182 183 if (map->wr_noinc_table) 184 return regmap_check_range_table(map, reg, map->wr_noinc_table); 185 186 return true; 187 } 188 189 bool regmap_readable_noinc(struct regmap *map, unsigned int reg) 190 { 191 if (map->readable_noinc_reg) 192 return map->readable_noinc_reg(map->dev, reg); 193 194 if (map->rd_noinc_table) 195 return regmap_check_range_table(map, reg, map->rd_noinc_table); 196 197 return true; 198 } 199 200 static bool regmap_volatile_range(struct regmap *map, unsigned int reg, 201 size_t num) 202 { 203 unsigned int i; 204 205 for (i = 0; i < num; i++) 206 if (!regmap_volatile(map, reg + regmap_get_offset(map, i))) 207 return false; 208 209 return true; 210 } 211 212 static void regmap_format_12_20_write(struct regmap *map, 213 unsigned int reg, unsigned int val) 214 { 215 u8 *out = map->work_buf; 216 217 out[0] = reg >> 4; 218 out[1] = (reg << 4) | (val >> 16); 219 out[2] = val >> 8; 220 out[3] = val; 221 } 222 223 224 static void regmap_format_2_6_write(struct regmap *map, 225 unsigned int reg, unsigned int val) 226 { 227 u8 *out = map->work_buf; 228 229 *out = (reg << 6) | val; 230 } 231 232 static void regmap_format_4_12_write(struct regmap *map, 233 unsigned int reg, unsigned int val) 234 { 235 __be16 *out = map->work_buf; 236 *out = cpu_to_be16((reg << 12) | val); 237 } 238 239 static void regmap_format_7_9_write(struct regmap *map, 240 unsigned int reg, unsigned int val) 241 { 242 __be16 *out = map->work_buf; 243 *out = cpu_to_be16((reg << 9) | val); 244 } 245 246 static void regmap_format_7_17_write(struct regmap *map, 247 unsigned int reg, unsigned int val) 248 { 249 u8 *out = map->work_buf; 250 251 out[2] = val; 252 out[1] = val >> 8; 253 out[0] = (val >> 16) | (reg << 1); 254 } 255 256 static void regmap_format_10_14_write(struct regmap *map, 257 unsigned int reg, unsigned int val) 258 { 259 u8 *out = map->work_buf; 260 261 out[2] = val; 262 out[1] = (val >> 8) | (reg << 6); 263 out[0] = reg >> 2; 264 } 265 266 static void regmap_format_8(void *buf, unsigned int val, unsigned int shift) 267 { 268 u8 *b = buf; 269 270 b[0] = val << shift; 271 } 272 273 static void regmap_format_16_be(void *buf, unsigned int val, unsigned int shift) 274 { 275 put_unaligned_be16(val << shift, buf); 276 } 277 278 static void regmap_format_16_le(void *buf, unsigned int val, unsigned int shift) 279 { 280 put_unaligned_le16(val << shift, buf); 281 } 282 283 static void regmap_format_16_native(void *buf, unsigned int val, 284 unsigned int shift) 285 { 286 u16 v = val << shift; 287 288 memcpy(buf, &v, sizeof(v)); 289 } 290 291 static void regmap_format_24_be(void *buf, unsigned int val, unsigned int shift) 292 { 293 put_unaligned_be24(val << shift, buf); 294 } 295 296 static void regmap_format_32_be(void *buf, unsigned int val, unsigned int shift) 297 { 298 put_unaligned_be32(val << shift, buf); 299 } 300 301 static void regmap_format_32_le(void *buf, unsigned int val, unsigned int shift) 302 { 303 put_unaligned_le32(val << shift, buf); 304 } 305 306 static void regmap_format_32_native(void *buf, unsigned int val, 307 unsigned int shift) 308 { 309 u32 v = val << shift; 310 311 memcpy(buf, &v, sizeof(v)); 312 } 313 314 static void regmap_parse_inplace_noop(void *buf) 315 { 316 } 317 318 static unsigned int regmap_parse_8(const void *buf) 319 { 320 const u8 *b = buf; 321 322 return b[0]; 323 } 324 325 static unsigned int regmap_parse_16_be(const void *buf) 326 { 327 return get_unaligned_be16(buf); 328 } 329 330 static unsigned int regmap_parse_16_le(const void *buf) 331 { 332 return get_unaligned_le16(buf); 333 } 334 335 static void regmap_parse_16_be_inplace(void *buf) 336 { 337 u16 v = get_unaligned_be16(buf); 338 339 memcpy(buf, &v, sizeof(v)); 340 } 341 342 static void regmap_parse_16_le_inplace(void *buf) 343 { 344 u16 v = get_unaligned_le16(buf); 345 346 memcpy(buf, &v, sizeof(v)); 347 } 348 349 static unsigned int regmap_parse_16_native(const void *buf) 350 { 351 u16 v; 352 353 memcpy(&v, buf, sizeof(v)); 354 return v; 355 } 356 357 static unsigned int regmap_parse_24_be(const void *buf) 358 { 359 return get_unaligned_be24(buf); 360 } 361 362 static unsigned int regmap_parse_32_be(const void *buf) 363 { 364 return get_unaligned_be32(buf); 365 } 366 367 static unsigned int regmap_parse_32_le(const void *buf) 368 { 369 return get_unaligned_le32(buf); 370 } 371 372 static void regmap_parse_32_be_inplace(void *buf) 373 { 374 u32 v = get_unaligned_be32(buf); 375 376 memcpy(buf, &v, sizeof(v)); 377 } 378 379 static void regmap_parse_32_le_inplace(void *buf) 380 { 381 u32 v = get_unaligned_le32(buf); 382 383 memcpy(buf, &v, sizeof(v)); 384 } 385 386 static unsigned int regmap_parse_32_native(const void *buf) 387 { 388 u32 v; 389 390 memcpy(&v, buf, sizeof(v)); 391 return v; 392 } 393 394 static void regmap_lock_hwlock(void *__map) 395 { 396 struct regmap *map = __map; 397 398 hwspin_lock_timeout(map->hwlock, UINT_MAX); 399 } 400 401 static void regmap_lock_hwlock_irq(void *__map) 402 { 403 struct regmap *map = __map; 404 405 hwspin_lock_timeout_irq(map->hwlock, UINT_MAX); 406 } 407 408 static void regmap_lock_hwlock_irqsave(void *__map) 409 { 410 struct regmap *map = __map; 411 412 hwspin_lock_timeout_irqsave(map->hwlock, UINT_MAX, 413 &map->spinlock_flags); 414 } 415 416 static void regmap_unlock_hwlock(void *__map) 417 { 418 struct regmap *map = __map; 419 420 hwspin_unlock(map->hwlock); 421 } 422 423 static void regmap_unlock_hwlock_irq(void *__map) 424 { 425 struct regmap *map = __map; 426 427 hwspin_unlock_irq(map->hwlock); 428 } 429 430 static void regmap_unlock_hwlock_irqrestore(void *__map) 431 { 432 struct regmap *map = __map; 433 434 hwspin_unlock_irqrestore(map->hwlock, &map->spinlock_flags); 435 } 436 437 static void regmap_lock_unlock_none(void *__map) 438 { 439 440 } 441 442 static void regmap_lock_mutex(void *__map) 443 { 444 struct regmap *map = __map; 445 mutex_lock(&map->mutex); 446 } 447 448 static void regmap_unlock_mutex(void *__map) 449 { 450 struct regmap *map = __map; 451 mutex_unlock(&map->mutex); 452 } 453 454 static void regmap_lock_spinlock(void *__map) 455 __acquires(&map->spinlock) 456 { 457 struct regmap *map = __map; 458 unsigned long flags; 459 460 spin_lock_irqsave(&map->spinlock, flags); 461 map->spinlock_flags = flags; 462 } 463 464 static void regmap_unlock_spinlock(void *__map) 465 __releases(&map->spinlock) 466 { 467 struct regmap *map = __map; 468 spin_unlock_irqrestore(&map->spinlock, map->spinlock_flags); 469 } 470 471 static void regmap_lock_raw_spinlock(void *__map) 472 __acquires(&map->raw_spinlock) 473 { 474 struct regmap *map = __map; 475 unsigned long flags; 476 477 raw_spin_lock_irqsave(&map->raw_spinlock, flags); 478 map->raw_spinlock_flags = flags; 479 } 480 481 static void regmap_unlock_raw_spinlock(void *__map) 482 __releases(&map->raw_spinlock) 483 { 484 struct regmap *map = __map; 485 raw_spin_unlock_irqrestore(&map->raw_spinlock, map->raw_spinlock_flags); 486 } 487 488 static void dev_get_regmap_release(struct device *dev, void *res) 489 { 490 /* 491 * We don't actually have anything to do here; the goal here 492 * is not to manage the regmap but to provide a simple way to 493 * get the regmap back given a struct device. 494 */ 495 } 496 497 static bool _regmap_range_add(struct regmap *map, 498 struct regmap_range_node *data) 499 { 500 struct rb_root *root = &map->range_tree; 501 struct rb_node **new = &(root->rb_node), *parent = NULL; 502 503 while (*new) { 504 struct regmap_range_node *this = 505 rb_entry(*new, struct regmap_range_node, node); 506 507 parent = *new; 508 if (data->range_max < this->range_min) 509 new = &((*new)->rb_left); 510 else if (data->range_min > this->range_max) 511 new = &((*new)->rb_right); 512 else 513 return false; 514 } 515 516 rb_link_node(&data->node, parent, new); 517 rb_insert_color(&data->node, root); 518 519 return true; 520 } 521 522 static struct regmap_range_node *_regmap_range_lookup(struct regmap *map, 523 unsigned int reg) 524 { 525 struct rb_node *node = map->range_tree.rb_node; 526 527 while (node) { 528 struct regmap_range_node *this = 529 rb_entry(node, struct regmap_range_node, node); 530 531 if (reg < this->range_min) 532 node = node->rb_left; 533 else if (reg > this->range_max) 534 node = node->rb_right; 535 else 536 return this; 537 } 538 539 return NULL; 540 } 541 542 static void regmap_range_exit(struct regmap *map) 543 { 544 struct rb_node *next; 545 struct regmap_range_node *range_node; 546 547 next = rb_first(&map->range_tree); 548 while (next) { 549 range_node = rb_entry(next, struct regmap_range_node, node); 550 next = rb_next(&range_node->node); 551 rb_erase(&range_node->node, &map->range_tree); 552 kfree(range_node); 553 } 554 555 kfree(map->selector_work_buf); 556 } 557 558 static int regmap_set_name(struct regmap *map, const struct regmap_config *config) 559 { 560 if (config->name) { 561 const char *name = kstrdup_const(config->name, GFP_KERNEL); 562 563 if (!name) 564 return -ENOMEM; 565 566 kfree_const(map->name); 567 map->name = name; 568 } 569 570 return 0; 571 } 572 573 int regmap_attach_dev(struct device *dev, struct regmap *map, 574 const struct regmap_config *config) 575 { 576 struct regmap **m; 577 int ret; 578 579 map->dev = dev; 580 581 ret = regmap_set_name(map, config); 582 if (ret) 583 return ret; 584 585 regmap_debugfs_exit(map); 586 regmap_debugfs_init(map); 587 588 /* Add a devres resource for dev_get_regmap() */ 589 m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); 590 if (!m) { 591 regmap_debugfs_exit(map); 592 return -ENOMEM; 593 } 594 *m = map; 595 devres_add(dev, m); 596 597 return 0; 598 } 599 EXPORT_SYMBOL_GPL(regmap_attach_dev); 600 601 static enum regmap_endian regmap_get_reg_endian(const struct regmap_bus *bus, 602 const struct regmap_config *config) 603 { 604 enum regmap_endian endian; 605 606 /* Retrieve the endianness specification from the regmap config */ 607 endian = config->reg_format_endian; 608 609 /* If the regmap config specified a non-default value, use that */ 610 if (endian != REGMAP_ENDIAN_DEFAULT) 611 return endian; 612 613 /* Retrieve the endianness specification from the bus config */ 614 if (bus && bus->reg_format_endian_default) 615 endian = bus->reg_format_endian_default; 616 617 /* If the bus specified a non-default value, use that */ 618 if (endian != REGMAP_ENDIAN_DEFAULT) 619 return endian; 620 621 /* Use this if no other value was found */ 622 return REGMAP_ENDIAN_BIG; 623 } 624 625 enum regmap_endian regmap_get_val_endian(struct device *dev, 626 const struct regmap_bus *bus, 627 const struct regmap_config *config) 628 { 629 struct fwnode_handle *fwnode = dev ? dev_fwnode(dev) : NULL; 630 enum regmap_endian endian; 631 632 /* Retrieve the endianness specification from the regmap config */ 633 endian = config->val_format_endian; 634 635 /* If the regmap config specified a non-default value, use that */ 636 if (endian != REGMAP_ENDIAN_DEFAULT) 637 return endian; 638 639 /* If the firmware node exist try to get endianness from it */ 640 if (fwnode_property_read_bool(fwnode, "big-endian")) 641 endian = REGMAP_ENDIAN_BIG; 642 else if (fwnode_property_read_bool(fwnode, "little-endian")) 643 endian = REGMAP_ENDIAN_LITTLE; 644 else if (fwnode_property_read_bool(fwnode, "native-endian")) 645 endian = REGMAP_ENDIAN_NATIVE; 646 647 /* If the endianness was specified in fwnode, use that */ 648 if (endian != REGMAP_ENDIAN_DEFAULT) 649 return endian; 650 651 /* Retrieve the endianness specification from the bus config */ 652 if (bus && bus->val_format_endian_default) 653 endian = bus->val_format_endian_default; 654 655 /* If the bus specified a non-default value, use that */ 656 if (endian != REGMAP_ENDIAN_DEFAULT) 657 return endian; 658 659 /* Use this if no other value was found */ 660 return REGMAP_ENDIAN_BIG; 661 } 662 EXPORT_SYMBOL_GPL(regmap_get_val_endian); 663 664 struct regmap *__regmap_init(struct device *dev, 665 const struct regmap_bus *bus, 666 void *bus_context, 667 const struct regmap_config *config, 668 struct lock_class_key *lock_key, 669 const char *lock_name) 670 { 671 struct regmap *map; 672 int ret = -EINVAL; 673 enum regmap_endian reg_endian, val_endian; 674 int i, j; 675 676 if (!config) 677 goto err; 678 679 map = kzalloc(sizeof(*map), GFP_KERNEL); 680 if (map == NULL) { 681 ret = -ENOMEM; 682 goto err; 683 } 684 685 ret = regmap_set_name(map, config); 686 if (ret) 687 goto err_map; 688 689 ret = -EINVAL; /* Later error paths rely on this */ 690 691 if (config->disable_locking) { 692 map->lock = map->unlock = regmap_lock_unlock_none; 693 map->can_sleep = config->can_sleep; 694 regmap_debugfs_disable(map); 695 } else if (config->lock && config->unlock) { 696 map->lock = config->lock; 697 map->unlock = config->unlock; 698 map->lock_arg = config->lock_arg; 699 map->can_sleep = config->can_sleep; 700 } else if (config->use_hwlock) { 701 map->hwlock = hwspin_lock_request_specific(config->hwlock_id); 702 if (!map->hwlock) { 703 ret = -ENXIO; 704 goto err_name; 705 } 706 707 switch (config->hwlock_mode) { 708 case HWLOCK_IRQSTATE: 709 map->lock = regmap_lock_hwlock_irqsave; 710 map->unlock = regmap_unlock_hwlock_irqrestore; 711 break; 712 case HWLOCK_IRQ: 713 map->lock = regmap_lock_hwlock_irq; 714 map->unlock = regmap_unlock_hwlock_irq; 715 break; 716 default: 717 map->lock = regmap_lock_hwlock; 718 map->unlock = regmap_unlock_hwlock; 719 break; 720 } 721 722 map->lock_arg = map; 723 } else { 724 if ((bus && bus->fast_io) || 725 config->fast_io) { 726 /* 727 * fast_io is incompatible with REGCACHE_RBTREE and REGCACHE_MAPLE 728 * since both need to dynamically allocate memory. 729 */ 730 if (config->cache_type == REGCACHE_RBTREE || 731 config->cache_type == REGCACHE_MAPLE) { 732 ret = -EINVAL; 733 goto err_name; 734 } 735 if (config->use_raw_spinlock) { 736 raw_spin_lock_init(&map->raw_spinlock); 737 map->lock = regmap_lock_raw_spinlock; 738 map->unlock = regmap_unlock_raw_spinlock; 739 lockdep_set_class_and_name(&map->raw_spinlock, 740 lock_key, lock_name); 741 } else { 742 spin_lock_init(&map->spinlock); 743 map->lock = regmap_lock_spinlock; 744 map->unlock = regmap_unlock_spinlock; 745 lockdep_set_class_and_name(&map->spinlock, 746 lock_key, lock_name); 747 } 748 } else { 749 mutex_init(&map->mutex); 750 map->lock = regmap_lock_mutex; 751 map->unlock = regmap_unlock_mutex; 752 map->can_sleep = true; 753 lockdep_set_class_and_name(&map->mutex, 754 lock_key, lock_name); 755 } 756 map->lock_arg = map; 757 } 758 759 /* 760 * When we write in fast-paths with regmap_bulk_write() don't allocate 761 * scratch buffers with sleeping allocations. 762 */ 763 if ((bus && bus->fast_io) || config->fast_io) 764 map->alloc_flags = GFP_ATOMIC; 765 else 766 map->alloc_flags = GFP_KERNEL; 767 768 map->reg_base = config->reg_base; 769 770 map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8); 771 map->format.pad_bytes = config->pad_bits / 8; 772 map->format.reg_shift = config->reg_shift; 773 map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8); 774 map->format.buf_size = DIV_ROUND_UP(config->reg_bits + 775 config->val_bits + config->pad_bits, 8); 776 map->reg_shift = config->pad_bits % 8; 777 if (config->reg_stride) 778 map->reg_stride = config->reg_stride; 779 else 780 map->reg_stride = 1; 781 if (is_power_of_2(map->reg_stride)) 782 map->reg_stride_order = ilog2(map->reg_stride); 783 else 784 map->reg_stride_order = -1; 785 map->use_single_read = config->use_single_read || !(config->read || (bus && bus->read)); 786 map->use_single_write = config->use_single_write || !(config->write || (bus && bus->write)); 787 map->can_multi_write = config->can_multi_write && (config->write || (bus && bus->write)); 788 if (bus) { 789 map->max_raw_read = bus->max_raw_read; 790 map->max_raw_write = bus->max_raw_write; 791 } else if (config->max_raw_read && config->max_raw_write) { 792 map->max_raw_read = config->max_raw_read; 793 map->max_raw_write = config->max_raw_write; 794 } 795 map->dev = dev; 796 map->bus = bus; 797 map->bus_context = bus_context; 798 map->max_register = config->max_register; 799 map->wr_table = config->wr_table; 800 map->rd_table = config->rd_table; 801 map->volatile_table = config->volatile_table; 802 map->precious_table = config->precious_table; 803 map->wr_noinc_table = config->wr_noinc_table; 804 map->rd_noinc_table = config->rd_noinc_table; 805 map->writeable_reg = config->writeable_reg; 806 map->readable_reg = config->readable_reg; 807 map->volatile_reg = config->volatile_reg; 808 map->precious_reg = config->precious_reg; 809 map->writeable_noinc_reg = config->writeable_noinc_reg; 810 map->readable_noinc_reg = config->readable_noinc_reg; 811 map->cache_type = config->cache_type; 812 813 spin_lock_init(&map->async_lock); 814 INIT_LIST_HEAD(&map->async_list); 815 INIT_LIST_HEAD(&map->async_free); 816 init_waitqueue_head(&map->async_waitq); 817 818 if (config->read_flag_mask || 819 config->write_flag_mask || 820 config->zero_flag_mask) { 821 map->read_flag_mask = config->read_flag_mask; 822 map->write_flag_mask = config->write_flag_mask; 823 } else if (bus) { 824 map->read_flag_mask = bus->read_flag_mask; 825 } 826 827 if (config && config->read && config->write) { 828 map->reg_read = _regmap_bus_read; 829 if (config->reg_update_bits) 830 map->reg_update_bits = config->reg_update_bits; 831 832 /* Bulk read/write */ 833 map->read = config->read; 834 map->write = config->write; 835 836 reg_endian = REGMAP_ENDIAN_NATIVE; 837 val_endian = REGMAP_ENDIAN_NATIVE; 838 } else if (!bus) { 839 map->reg_read = config->reg_read; 840 map->reg_write = config->reg_write; 841 map->reg_update_bits = config->reg_update_bits; 842 843 map->defer_caching = false; 844 goto skip_format_initialization; 845 } else if (!bus->read || !bus->write) { 846 map->reg_read = _regmap_bus_reg_read; 847 map->reg_write = _regmap_bus_reg_write; 848 map->reg_update_bits = bus->reg_update_bits; 849 850 map->defer_caching = false; 851 goto skip_format_initialization; 852 } else { 853 map->reg_read = _regmap_bus_read; 854 map->reg_update_bits = bus->reg_update_bits; 855 /* Bulk read/write */ 856 map->read = bus->read; 857 map->write = bus->write; 858 859 reg_endian = regmap_get_reg_endian(bus, config); 860 val_endian = regmap_get_val_endian(dev, bus, config); 861 } 862 863 switch (config->reg_bits + map->reg_shift) { 864 case 2: 865 switch (config->val_bits) { 866 case 6: 867 map->format.format_write = regmap_format_2_6_write; 868 break; 869 default: 870 goto err_hwlock; 871 } 872 break; 873 874 case 4: 875 switch (config->val_bits) { 876 case 12: 877 map->format.format_write = regmap_format_4_12_write; 878 break; 879 default: 880 goto err_hwlock; 881 } 882 break; 883 884 case 7: 885 switch (config->val_bits) { 886 case 9: 887 map->format.format_write = regmap_format_7_9_write; 888 break; 889 case 17: 890 map->format.format_write = regmap_format_7_17_write; 891 break; 892 default: 893 goto err_hwlock; 894 } 895 break; 896 897 case 10: 898 switch (config->val_bits) { 899 case 14: 900 map->format.format_write = regmap_format_10_14_write; 901 break; 902 default: 903 goto err_hwlock; 904 } 905 break; 906 907 case 12: 908 switch (config->val_bits) { 909 case 20: 910 map->format.format_write = regmap_format_12_20_write; 911 break; 912 default: 913 goto err_hwlock; 914 } 915 break; 916 917 case 8: 918 map->format.format_reg = regmap_format_8; 919 break; 920 921 case 16: 922 switch (reg_endian) { 923 case REGMAP_ENDIAN_BIG: 924 map->format.format_reg = regmap_format_16_be; 925 break; 926 case REGMAP_ENDIAN_LITTLE: 927 map->format.format_reg = regmap_format_16_le; 928 break; 929 case REGMAP_ENDIAN_NATIVE: 930 map->format.format_reg = regmap_format_16_native; 931 break; 932 default: 933 goto err_hwlock; 934 } 935 break; 936 937 case 24: 938 switch (reg_endian) { 939 case REGMAP_ENDIAN_BIG: 940 map->format.format_reg = regmap_format_24_be; 941 break; 942 default: 943 goto err_hwlock; 944 } 945 break; 946 947 case 32: 948 switch (reg_endian) { 949 case REGMAP_ENDIAN_BIG: 950 map->format.format_reg = regmap_format_32_be; 951 break; 952 case REGMAP_ENDIAN_LITTLE: 953 map->format.format_reg = regmap_format_32_le; 954 break; 955 case REGMAP_ENDIAN_NATIVE: 956 map->format.format_reg = regmap_format_32_native; 957 break; 958 default: 959 goto err_hwlock; 960 } 961 break; 962 963 default: 964 goto err_hwlock; 965 } 966 967 if (val_endian == REGMAP_ENDIAN_NATIVE) 968 map->format.parse_inplace = regmap_parse_inplace_noop; 969 970 switch (config->val_bits) { 971 case 8: 972 map->format.format_val = regmap_format_8; 973 map->format.parse_val = regmap_parse_8; 974 map->format.parse_inplace = regmap_parse_inplace_noop; 975 break; 976 case 16: 977 switch (val_endian) { 978 case REGMAP_ENDIAN_BIG: 979 map->format.format_val = regmap_format_16_be; 980 map->format.parse_val = regmap_parse_16_be; 981 map->format.parse_inplace = regmap_parse_16_be_inplace; 982 break; 983 case REGMAP_ENDIAN_LITTLE: 984 map->format.format_val = regmap_format_16_le; 985 map->format.parse_val = regmap_parse_16_le; 986 map->format.parse_inplace = regmap_parse_16_le_inplace; 987 break; 988 case REGMAP_ENDIAN_NATIVE: 989 map->format.format_val = regmap_format_16_native; 990 map->format.parse_val = regmap_parse_16_native; 991 break; 992 default: 993 goto err_hwlock; 994 } 995 break; 996 case 24: 997 switch (val_endian) { 998 case REGMAP_ENDIAN_BIG: 999 map->format.format_val = regmap_format_24_be; 1000 map->format.parse_val = regmap_parse_24_be; 1001 break; 1002 default: 1003 goto err_hwlock; 1004 } 1005 break; 1006 case 32: 1007 switch (val_endian) { 1008 case REGMAP_ENDIAN_BIG: 1009 map->format.format_val = regmap_format_32_be; 1010 map->format.parse_val = regmap_parse_32_be; 1011 map->format.parse_inplace = regmap_parse_32_be_inplace; 1012 break; 1013 case REGMAP_ENDIAN_LITTLE: 1014 map->format.format_val = regmap_format_32_le; 1015 map->format.parse_val = regmap_parse_32_le; 1016 map->format.parse_inplace = regmap_parse_32_le_inplace; 1017 break; 1018 case REGMAP_ENDIAN_NATIVE: 1019 map->format.format_val = regmap_format_32_native; 1020 map->format.parse_val = regmap_parse_32_native; 1021 break; 1022 default: 1023 goto err_hwlock; 1024 } 1025 break; 1026 } 1027 1028 if (map->format.format_write) { 1029 if ((reg_endian != REGMAP_ENDIAN_BIG) || 1030 (val_endian != REGMAP_ENDIAN_BIG)) 1031 goto err_hwlock; 1032 map->use_single_write = true; 1033 } 1034 1035 if (!map->format.format_write && 1036 !(map->format.format_reg && map->format.format_val)) 1037 goto err_hwlock; 1038 1039 map->work_buf = kzalloc(map->format.buf_size, GFP_KERNEL); 1040 if (map->work_buf == NULL) { 1041 ret = -ENOMEM; 1042 goto err_hwlock; 1043 } 1044 1045 if (map->format.format_write) { 1046 map->defer_caching = false; 1047 map->reg_write = _regmap_bus_formatted_write; 1048 } else if (map->format.format_val) { 1049 map->defer_caching = true; 1050 map->reg_write = _regmap_bus_raw_write; 1051 } 1052 1053 skip_format_initialization: 1054 1055 map->range_tree = RB_ROOT; 1056 for (i = 0; i < config->num_ranges; i++) { 1057 const struct regmap_range_cfg *range_cfg = &config->ranges[i]; 1058 struct regmap_range_node *new; 1059 1060 /* Sanity check */ 1061 if (range_cfg->range_max < range_cfg->range_min) { 1062 dev_err(map->dev, "Invalid range %d: %d < %d\n", i, 1063 range_cfg->range_max, range_cfg->range_min); 1064 goto err_range; 1065 } 1066 1067 if (range_cfg->range_max > map->max_register) { 1068 dev_err(map->dev, "Invalid range %d: %d > %d\n", i, 1069 range_cfg->range_max, map->max_register); 1070 goto err_range; 1071 } 1072 1073 if (range_cfg->selector_reg > map->max_register) { 1074 dev_err(map->dev, 1075 "Invalid range %d: selector out of map\n", i); 1076 goto err_range; 1077 } 1078 1079 if (range_cfg->window_len == 0) { 1080 dev_err(map->dev, "Invalid range %d: window_len 0\n", 1081 i); 1082 goto err_range; 1083 } 1084 1085 /* Make sure, that this register range has no selector 1086 or data window within its boundary */ 1087 for (j = 0; j < config->num_ranges; j++) { 1088 unsigned int sel_reg = config->ranges[j].selector_reg; 1089 unsigned int win_min = config->ranges[j].window_start; 1090 unsigned int win_max = win_min + 1091 config->ranges[j].window_len - 1; 1092 1093 /* Allow data window inside its own virtual range */ 1094 if (j == i) 1095 continue; 1096 1097 if (range_cfg->range_min <= sel_reg && 1098 sel_reg <= range_cfg->range_max) { 1099 dev_err(map->dev, 1100 "Range %d: selector for %d in window\n", 1101 i, j); 1102 goto err_range; 1103 } 1104 1105 if (!(win_max < range_cfg->range_min || 1106 win_min > range_cfg->range_max)) { 1107 dev_err(map->dev, 1108 "Range %d: window for %d in window\n", 1109 i, j); 1110 goto err_range; 1111 } 1112 } 1113 1114 new = kzalloc(sizeof(*new), GFP_KERNEL); 1115 if (new == NULL) { 1116 ret = -ENOMEM; 1117 goto err_range; 1118 } 1119 1120 new->map = map; 1121 new->name = range_cfg->name; 1122 new->range_min = range_cfg->range_min; 1123 new->range_max = range_cfg->range_max; 1124 new->selector_reg = range_cfg->selector_reg; 1125 new->selector_mask = range_cfg->selector_mask; 1126 new->selector_shift = range_cfg->selector_shift; 1127 new->window_start = range_cfg->window_start; 1128 new->window_len = range_cfg->window_len; 1129 1130 if (!_regmap_range_add(map, new)) { 1131 dev_err(map->dev, "Failed to add range %d\n", i); 1132 kfree(new); 1133 goto err_range; 1134 } 1135 1136 if (map->selector_work_buf == NULL) { 1137 map->selector_work_buf = 1138 kzalloc(map->format.buf_size, GFP_KERNEL); 1139 if (map->selector_work_buf == NULL) { 1140 ret = -ENOMEM; 1141 goto err_range; 1142 } 1143 } 1144 } 1145 1146 ret = regcache_init(map, config); 1147 if (ret != 0) 1148 goto err_range; 1149 1150 if (dev) { 1151 ret = regmap_attach_dev(dev, map, config); 1152 if (ret != 0) 1153 goto err_regcache; 1154 } else { 1155 regmap_debugfs_init(map); 1156 } 1157 1158 return map; 1159 1160 err_regcache: 1161 regcache_exit(map); 1162 err_range: 1163 regmap_range_exit(map); 1164 kfree(map->work_buf); 1165 err_hwlock: 1166 if (map->hwlock) 1167 hwspin_lock_free(map->hwlock); 1168 err_name: 1169 kfree_const(map->name); 1170 err_map: 1171 kfree(map); 1172 err: 1173 return ERR_PTR(ret); 1174 } 1175 EXPORT_SYMBOL_GPL(__regmap_init); 1176 1177 static void devm_regmap_release(struct device *dev, void *res) 1178 { 1179 regmap_exit(*(struct regmap **)res); 1180 } 1181 1182 struct regmap *__devm_regmap_init(struct device *dev, 1183 const struct regmap_bus *bus, 1184 void *bus_context, 1185 const struct regmap_config *config, 1186 struct lock_class_key *lock_key, 1187 const char *lock_name) 1188 { 1189 struct regmap **ptr, *regmap; 1190 1191 ptr = devres_alloc(devm_regmap_release, sizeof(*ptr), GFP_KERNEL); 1192 if (!ptr) 1193 return ERR_PTR(-ENOMEM); 1194 1195 regmap = __regmap_init(dev, bus, bus_context, config, 1196 lock_key, lock_name); 1197 if (!IS_ERR(regmap)) { 1198 *ptr = regmap; 1199 devres_add(dev, ptr); 1200 } else { 1201 devres_free(ptr); 1202 } 1203 1204 return regmap; 1205 } 1206 EXPORT_SYMBOL_GPL(__devm_regmap_init); 1207 1208 static void regmap_field_init(struct regmap_field *rm_field, 1209 struct regmap *regmap, struct reg_field reg_field) 1210 { 1211 rm_field->regmap = regmap; 1212 rm_field->reg = reg_field.reg; 1213 rm_field->shift = reg_field.lsb; 1214 rm_field->mask = GENMASK(reg_field.msb, reg_field.lsb); 1215 1216 WARN_ONCE(rm_field->mask == 0, "invalid empty mask defined\n"); 1217 1218 rm_field->id_size = reg_field.id_size; 1219 rm_field->id_offset = reg_field.id_offset; 1220 } 1221 1222 /** 1223 * devm_regmap_field_alloc() - Allocate and initialise a register field. 1224 * 1225 * @dev: Device that will be interacted with 1226 * @regmap: regmap bank in which this register field is located. 1227 * @reg_field: Register field with in the bank. 1228 * 1229 * The return value will be an ERR_PTR() on error or a valid pointer 1230 * to a struct regmap_field. The regmap_field will be automatically freed 1231 * by the device management code. 1232 */ 1233 struct regmap_field *devm_regmap_field_alloc(struct device *dev, 1234 struct regmap *regmap, struct reg_field reg_field) 1235 { 1236 struct regmap_field *rm_field = devm_kzalloc(dev, 1237 sizeof(*rm_field), GFP_KERNEL); 1238 if (!rm_field) 1239 return ERR_PTR(-ENOMEM); 1240 1241 regmap_field_init(rm_field, regmap, reg_field); 1242 1243 return rm_field; 1244 1245 } 1246 EXPORT_SYMBOL_GPL(devm_regmap_field_alloc); 1247 1248 1249 /** 1250 * regmap_field_bulk_alloc() - Allocate and initialise a bulk register field. 1251 * 1252 * @regmap: regmap bank in which this register field is located. 1253 * @rm_field: regmap register fields within the bank. 1254 * @reg_field: Register fields within the bank. 1255 * @num_fields: Number of register fields. 1256 * 1257 * The return value will be an -ENOMEM on error or zero for success. 1258 * Newly allocated regmap_fields should be freed by calling 1259 * regmap_field_bulk_free() 1260 */ 1261 int regmap_field_bulk_alloc(struct regmap *regmap, 1262 struct regmap_field **rm_field, 1263 const struct reg_field *reg_field, 1264 int num_fields) 1265 { 1266 struct regmap_field *rf; 1267 int i; 1268 1269 rf = kcalloc(num_fields, sizeof(*rf), GFP_KERNEL); 1270 if (!rf) 1271 return -ENOMEM; 1272 1273 for (i = 0; i < num_fields; i++) { 1274 regmap_field_init(&rf[i], regmap, reg_field[i]); 1275 rm_field[i] = &rf[i]; 1276 } 1277 1278 return 0; 1279 } 1280 EXPORT_SYMBOL_GPL(regmap_field_bulk_alloc); 1281 1282 /** 1283 * devm_regmap_field_bulk_alloc() - Allocate and initialise a bulk register 1284 * fields. 1285 * 1286 * @dev: Device that will be interacted with 1287 * @regmap: regmap bank in which this register field is located. 1288 * @rm_field: regmap register fields within the bank. 1289 * @reg_field: Register fields within the bank. 1290 * @num_fields: Number of register fields. 1291 * 1292 * The return value will be an -ENOMEM on error or zero for success. 1293 * Newly allocated regmap_fields will be automatically freed by the 1294 * device management code. 1295 */ 1296 int devm_regmap_field_bulk_alloc(struct device *dev, 1297 struct regmap *regmap, 1298 struct regmap_field **rm_field, 1299 const struct reg_field *reg_field, 1300 int num_fields) 1301 { 1302 struct regmap_field *rf; 1303 int i; 1304 1305 rf = devm_kcalloc(dev, num_fields, sizeof(*rf), GFP_KERNEL); 1306 if (!rf) 1307 return -ENOMEM; 1308 1309 for (i = 0; i < num_fields; i++) { 1310 regmap_field_init(&rf[i], regmap, reg_field[i]); 1311 rm_field[i] = &rf[i]; 1312 } 1313 1314 return 0; 1315 } 1316 EXPORT_SYMBOL_GPL(devm_regmap_field_bulk_alloc); 1317 1318 /** 1319 * regmap_field_bulk_free() - Free register field allocated using 1320 * regmap_field_bulk_alloc. 1321 * 1322 * @field: regmap fields which should be freed. 1323 */ 1324 void regmap_field_bulk_free(struct regmap_field *field) 1325 { 1326 kfree(field); 1327 } 1328 EXPORT_SYMBOL_GPL(regmap_field_bulk_free); 1329 1330 /** 1331 * devm_regmap_field_bulk_free() - Free a bulk register field allocated using 1332 * devm_regmap_field_bulk_alloc. 1333 * 1334 * @dev: Device that will be interacted with 1335 * @field: regmap field which should be freed. 1336 * 1337 * Free register field allocated using devm_regmap_field_bulk_alloc(). Usually 1338 * drivers need not call this function, as the memory allocated via devm 1339 * will be freed as per device-driver life-cycle. 1340 */ 1341 void devm_regmap_field_bulk_free(struct device *dev, 1342 struct regmap_field *field) 1343 { 1344 devm_kfree(dev, field); 1345 } 1346 EXPORT_SYMBOL_GPL(devm_regmap_field_bulk_free); 1347 1348 /** 1349 * devm_regmap_field_free() - Free a register field allocated using 1350 * devm_regmap_field_alloc. 1351 * 1352 * @dev: Device that will be interacted with 1353 * @field: regmap field which should be freed. 1354 * 1355 * Free register field allocated using devm_regmap_field_alloc(). Usually 1356 * drivers need not call this function, as the memory allocated via devm 1357 * will be freed as per device-driver life-cyle. 1358 */ 1359 void devm_regmap_field_free(struct device *dev, 1360 struct regmap_field *field) 1361 { 1362 devm_kfree(dev, field); 1363 } 1364 EXPORT_SYMBOL_GPL(devm_regmap_field_free); 1365 1366 /** 1367 * regmap_field_alloc() - Allocate and initialise a register field. 1368 * 1369 * @regmap: regmap bank in which this register field is located. 1370 * @reg_field: Register field with in the bank. 1371 * 1372 * The return value will be an ERR_PTR() on error or a valid pointer 1373 * to a struct regmap_field. The regmap_field should be freed by the 1374 * user once its finished working with it using regmap_field_free(). 1375 */ 1376 struct regmap_field *regmap_field_alloc(struct regmap *regmap, 1377 struct reg_field reg_field) 1378 { 1379 struct regmap_field *rm_field = kzalloc(sizeof(*rm_field), GFP_KERNEL); 1380 1381 if (!rm_field) 1382 return ERR_PTR(-ENOMEM); 1383 1384 regmap_field_init(rm_field, regmap, reg_field); 1385 1386 return rm_field; 1387 } 1388 EXPORT_SYMBOL_GPL(regmap_field_alloc); 1389 1390 /** 1391 * regmap_field_free() - Free register field allocated using 1392 * regmap_field_alloc. 1393 * 1394 * @field: regmap field which should be freed. 1395 */ 1396 void regmap_field_free(struct regmap_field *field) 1397 { 1398 kfree(field); 1399 } 1400 EXPORT_SYMBOL_GPL(regmap_field_free); 1401 1402 /** 1403 * regmap_reinit_cache() - Reinitialise the current register cache 1404 * 1405 * @map: Register map to operate on. 1406 * @config: New configuration. Only the cache data will be used. 1407 * 1408 * Discard any existing register cache for the map and initialize a 1409 * new cache. This can be used to restore the cache to defaults or to 1410 * update the cache configuration to reflect runtime discovery of the 1411 * hardware. 1412 * 1413 * No explicit locking is done here, the user needs to ensure that 1414 * this function will not race with other calls to regmap. 1415 */ 1416 int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config) 1417 { 1418 int ret; 1419 1420 regcache_exit(map); 1421 regmap_debugfs_exit(map); 1422 1423 map->max_register = config->max_register; 1424 map->writeable_reg = config->writeable_reg; 1425 map->readable_reg = config->readable_reg; 1426 map->volatile_reg = config->volatile_reg; 1427 map->precious_reg = config->precious_reg; 1428 map->writeable_noinc_reg = config->writeable_noinc_reg; 1429 map->readable_noinc_reg = config->readable_noinc_reg; 1430 map->cache_type = config->cache_type; 1431 1432 ret = regmap_set_name(map, config); 1433 if (ret) 1434 return ret; 1435 1436 regmap_debugfs_init(map); 1437 1438 map->cache_bypass = false; 1439 map->cache_only = false; 1440 1441 return regcache_init(map, config); 1442 } 1443 EXPORT_SYMBOL_GPL(regmap_reinit_cache); 1444 1445 /** 1446 * regmap_exit() - Free a previously allocated register map 1447 * 1448 * @map: Register map to operate on. 1449 */ 1450 void regmap_exit(struct regmap *map) 1451 { 1452 struct regmap_async *async; 1453 1454 regcache_exit(map); 1455 regmap_debugfs_exit(map); 1456 regmap_range_exit(map); 1457 if (map->bus && map->bus->free_context) 1458 map->bus->free_context(map->bus_context); 1459 kfree(map->work_buf); 1460 while (!list_empty(&map->async_free)) { 1461 async = list_first_entry_or_null(&map->async_free, 1462 struct regmap_async, 1463 list); 1464 list_del(&async->list); 1465 kfree(async->work_buf); 1466 kfree(async); 1467 } 1468 if (map->hwlock) 1469 hwspin_lock_free(map->hwlock); 1470 if (map->lock == regmap_lock_mutex) 1471 mutex_destroy(&map->mutex); 1472 kfree_const(map->name); 1473 kfree(map->patch); 1474 if (map->bus && map->bus->free_on_exit) 1475 kfree(map->bus); 1476 kfree(map); 1477 } 1478 EXPORT_SYMBOL_GPL(regmap_exit); 1479 1480 static int dev_get_regmap_match(struct device *dev, void *res, void *data) 1481 { 1482 struct regmap **r = res; 1483 if (!r || !*r) { 1484 WARN_ON(!r || !*r); 1485 return 0; 1486 } 1487 1488 /* If the user didn't specify a name match any */ 1489 if (data) 1490 return !strcmp((*r)->name, data); 1491 else 1492 return 1; 1493 } 1494 1495 /** 1496 * dev_get_regmap() - Obtain the regmap (if any) for a device 1497 * 1498 * @dev: Device to retrieve the map for 1499 * @name: Optional name for the register map, usually NULL. 1500 * 1501 * Returns the regmap for the device if one is present, or NULL. If 1502 * name is specified then it must match the name specified when 1503 * registering the device, if it is NULL then the first regmap found 1504 * will be used. Devices with multiple register maps are very rare, 1505 * generic code should normally not need to specify a name. 1506 */ 1507 struct regmap *dev_get_regmap(struct device *dev, const char *name) 1508 { 1509 struct regmap **r = devres_find(dev, dev_get_regmap_release, 1510 dev_get_regmap_match, (void *)name); 1511 1512 if (!r) 1513 return NULL; 1514 return *r; 1515 } 1516 EXPORT_SYMBOL_GPL(dev_get_regmap); 1517 1518 /** 1519 * regmap_get_device() - Obtain the device from a regmap 1520 * 1521 * @map: Register map to operate on. 1522 * 1523 * Returns the underlying device that the regmap has been created for. 1524 */ 1525 struct device *regmap_get_device(struct regmap *map) 1526 { 1527 return map->dev; 1528 } 1529 EXPORT_SYMBOL_GPL(regmap_get_device); 1530 1531 static int _regmap_select_page(struct regmap *map, unsigned int *reg, 1532 struct regmap_range_node *range, 1533 unsigned int val_num) 1534 { 1535 void *orig_work_buf; 1536 unsigned int win_offset; 1537 unsigned int win_page; 1538 bool page_chg; 1539 int ret; 1540 1541 win_offset = (*reg - range->range_min) % range->window_len; 1542 win_page = (*reg - range->range_min) / range->window_len; 1543 1544 if (val_num > 1) { 1545 /* Bulk write shouldn't cross range boundary */ 1546 if (*reg + val_num - 1 > range->range_max) 1547 return -EINVAL; 1548 1549 /* ... or single page boundary */ 1550 if (val_num > range->window_len - win_offset) 1551 return -EINVAL; 1552 } 1553 1554 /* It is possible to have selector register inside data window. 1555 In that case, selector register is located on every page and 1556 it needs no page switching, when accessed alone. */ 1557 if (val_num > 1 || 1558 range->window_start + win_offset != range->selector_reg) { 1559 /* Use separate work_buf during page switching */ 1560 orig_work_buf = map->work_buf; 1561 map->work_buf = map->selector_work_buf; 1562 1563 ret = _regmap_update_bits(map, range->selector_reg, 1564 range->selector_mask, 1565 win_page << range->selector_shift, 1566 &page_chg, false); 1567 1568 map->work_buf = orig_work_buf; 1569 1570 if (ret != 0) 1571 return ret; 1572 } 1573 1574 *reg = range->window_start + win_offset; 1575 1576 return 0; 1577 } 1578 1579 static void regmap_set_work_buf_flag_mask(struct regmap *map, int max_bytes, 1580 unsigned long mask) 1581 { 1582 u8 *buf; 1583 int i; 1584 1585 if (!mask || !map->work_buf) 1586 return; 1587 1588 buf = map->work_buf; 1589 1590 for (i = 0; i < max_bytes; i++) 1591 buf[i] |= (mask >> (8 * i)) & 0xff; 1592 } 1593 1594 static unsigned int regmap_reg_addr(struct regmap *map, unsigned int reg) 1595 { 1596 reg += map->reg_base; 1597 1598 if (map->format.reg_shift > 0) 1599 reg >>= map->format.reg_shift; 1600 else if (map->format.reg_shift < 0) 1601 reg <<= -(map->format.reg_shift); 1602 1603 return reg; 1604 } 1605 1606 static int _regmap_raw_write_impl(struct regmap *map, unsigned int reg, 1607 const void *val, size_t val_len, bool noinc) 1608 { 1609 struct regmap_range_node *range; 1610 unsigned long flags; 1611 void *work_val = map->work_buf + map->format.reg_bytes + 1612 map->format.pad_bytes; 1613 void *buf; 1614 int ret = -ENOTSUPP; 1615 size_t len; 1616 int i; 1617 1618 /* Check for unwritable or noinc registers in range 1619 * before we start 1620 */ 1621 if (!regmap_writeable_noinc(map, reg)) { 1622 for (i = 0; i < val_len / map->format.val_bytes; i++) { 1623 unsigned int element = 1624 reg + regmap_get_offset(map, i); 1625 if (!regmap_writeable(map, element) || 1626 regmap_writeable_noinc(map, element)) 1627 return -EINVAL; 1628 } 1629 } 1630 1631 if (!map->cache_bypass && map->format.parse_val) { 1632 unsigned int ival; 1633 int val_bytes = map->format.val_bytes; 1634 for (i = 0; i < val_len / val_bytes; i++) { 1635 ival = map->format.parse_val(val + (i * val_bytes)); 1636 ret = regcache_write(map, 1637 reg + regmap_get_offset(map, i), 1638 ival); 1639 if (ret) { 1640 dev_err(map->dev, 1641 "Error in caching of register: %x ret: %d\n", 1642 reg + regmap_get_offset(map, i), ret); 1643 return ret; 1644 } 1645 } 1646 if (map->cache_only) { 1647 map->cache_dirty = true; 1648 return 0; 1649 } 1650 } 1651 1652 range = _regmap_range_lookup(map, reg); 1653 if (range) { 1654 int val_num = val_len / map->format.val_bytes; 1655 int win_offset = (reg - range->range_min) % range->window_len; 1656 int win_residue = range->window_len - win_offset; 1657 1658 /* If the write goes beyond the end of the window split it */ 1659 while (val_num > win_residue) { 1660 dev_dbg(map->dev, "Writing window %d/%zu\n", 1661 win_residue, val_len / map->format.val_bytes); 1662 ret = _regmap_raw_write_impl(map, reg, val, 1663 win_residue * 1664 map->format.val_bytes, noinc); 1665 if (ret != 0) 1666 return ret; 1667 1668 reg += win_residue; 1669 val_num -= win_residue; 1670 val += win_residue * map->format.val_bytes; 1671 val_len -= win_residue * map->format.val_bytes; 1672 1673 win_offset = (reg - range->range_min) % 1674 range->window_len; 1675 win_residue = range->window_len - win_offset; 1676 } 1677 1678 ret = _regmap_select_page(map, ®, range, noinc ? 1 : val_num); 1679 if (ret != 0) 1680 return ret; 1681 } 1682 1683 reg = regmap_reg_addr(map, reg); 1684 map->format.format_reg(map->work_buf, reg, map->reg_shift); 1685 regmap_set_work_buf_flag_mask(map, map->format.reg_bytes, 1686 map->write_flag_mask); 1687 1688 /* 1689 * Essentially all I/O mechanisms will be faster with a single 1690 * buffer to write. Since register syncs often generate raw 1691 * writes of single registers optimise that case. 1692 */ 1693 if (val != work_val && val_len == map->format.val_bytes) { 1694 memcpy(work_val, val, map->format.val_bytes); 1695 val = work_val; 1696 } 1697 1698 if (map->async && map->bus && map->bus->async_write) { 1699 struct regmap_async *async; 1700 1701 trace_regmap_async_write_start(map, reg, val_len); 1702 1703 spin_lock_irqsave(&map->async_lock, flags); 1704 async = list_first_entry_or_null(&map->async_free, 1705 struct regmap_async, 1706 list); 1707 if (async) 1708 list_del(&async->list); 1709 spin_unlock_irqrestore(&map->async_lock, flags); 1710 1711 if (!async) { 1712 async = map->bus->async_alloc(); 1713 if (!async) 1714 return -ENOMEM; 1715 1716 async->work_buf = kzalloc(map->format.buf_size, 1717 GFP_KERNEL | GFP_DMA); 1718 if (!async->work_buf) { 1719 kfree(async); 1720 return -ENOMEM; 1721 } 1722 } 1723 1724 async->map = map; 1725 1726 /* If the caller supplied the value we can use it safely. */ 1727 memcpy(async->work_buf, map->work_buf, map->format.pad_bytes + 1728 map->format.reg_bytes + map->format.val_bytes); 1729 1730 spin_lock_irqsave(&map->async_lock, flags); 1731 list_add_tail(&async->list, &map->async_list); 1732 spin_unlock_irqrestore(&map->async_lock, flags); 1733 1734 if (val != work_val) 1735 ret = map->bus->async_write(map->bus_context, 1736 async->work_buf, 1737 map->format.reg_bytes + 1738 map->format.pad_bytes, 1739 val, val_len, async); 1740 else 1741 ret = map->bus->async_write(map->bus_context, 1742 async->work_buf, 1743 map->format.reg_bytes + 1744 map->format.pad_bytes + 1745 val_len, NULL, 0, async); 1746 1747 if (ret != 0) { 1748 dev_err(map->dev, "Failed to schedule write: %d\n", 1749 ret); 1750 1751 spin_lock_irqsave(&map->async_lock, flags); 1752 list_move(&async->list, &map->async_free); 1753 spin_unlock_irqrestore(&map->async_lock, flags); 1754 } 1755 1756 return ret; 1757 } 1758 1759 trace_regmap_hw_write_start(map, reg, val_len / map->format.val_bytes); 1760 1761 /* If we're doing a single register write we can probably just 1762 * send the work_buf directly, otherwise try to do a gather 1763 * write. 1764 */ 1765 if (val == work_val) 1766 ret = map->write(map->bus_context, map->work_buf, 1767 map->format.reg_bytes + 1768 map->format.pad_bytes + 1769 val_len); 1770 else if (map->bus && map->bus->gather_write) 1771 ret = map->bus->gather_write(map->bus_context, map->work_buf, 1772 map->format.reg_bytes + 1773 map->format.pad_bytes, 1774 val, val_len); 1775 else 1776 ret = -ENOTSUPP; 1777 1778 /* If that didn't work fall back on linearising by hand. */ 1779 if (ret == -ENOTSUPP) { 1780 len = map->format.reg_bytes + map->format.pad_bytes + val_len; 1781 buf = kzalloc(len, GFP_KERNEL); 1782 if (!buf) 1783 return -ENOMEM; 1784 1785 memcpy(buf, map->work_buf, map->format.reg_bytes); 1786 memcpy(buf + map->format.reg_bytes + map->format.pad_bytes, 1787 val, val_len); 1788 ret = map->write(map->bus_context, buf, len); 1789 1790 kfree(buf); 1791 } else if (ret != 0 && !map->cache_bypass && map->format.parse_val) { 1792 /* regcache_drop_region() takes lock that we already have, 1793 * thus call map->cache_ops->drop() directly 1794 */ 1795 if (map->cache_ops && map->cache_ops->drop) 1796 map->cache_ops->drop(map, reg, reg + 1); 1797 } 1798 1799 trace_regmap_hw_write_done(map, reg, val_len / map->format.val_bytes); 1800 1801 return ret; 1802 } 1803 1804 /** 1805 * regmap_can_raw_write - Test if regmap_raw_write() is supported 1806 * 1807 * @map: Map to check. 1808 */ 1809 bool regmap_can_raw_write(struct regmap *map) 1810 { 1811 return map->write && map->format.format_val && map->format.format_reg; 1812 } 1813 EXPORT_SYMBOL_GPL(regmap_can_raw_write); 1814 1815 /** 1816 * regmap_get_raw_read_max - Get the maximum size we can read 1817 * 1818 * @map: Map to check. 1819 */ 1820 size_t regmap_get_raw_read_max(struct regmap *map) 1821 { 1822 return map->max_raw_read; 1823 } 1824 EXPORT_SYMBOL_GPL(regmap_get_raw_read_max); 1825 1826 /** 1827 * regmap_get_raw_write_max - Get the maximum size we can read 1828 * 1829 * @map: Map to check. 1830 */ 1831 size_t regmap_get_raw_write_max(struct regmap *map) 1832 { 1833 return map->max_raw_write; 1834 } 1835 EXPORT_SYMBOL_GPL(regmap_get_raw_write_max); 1836 1837 static int _regmap_bus_formatted_write(void *context, unsigned int reg, 1838 unsigned int val) 1839 { 1840 int ret; 1841 struct regmap_range_node *range; 1842 struct regmap *map = context; 1843 1844 WARN_ON(!map->format.format_write); 1845 1846 range = _regmap_range_lookup(map, reg); 1847 if (range) { 1848 ret = _regmap_select_page(map, ®, range, 1); 1849 if (ret != 0) 1850 return ret; 1851 } 1852 1853 reg = regmap_reg_addr(map, reg); 1854 map->format.format_write(map, reg, val); 1855 1856 trace_regmap_hw_write_start(map, reg, 1); 1857 1858 ret = map->write(map->bus_context, map->work_buf, map->format.buf_size); 1859 1860 trace_regmap_hw_write_done(map, reg, 1); 1861 1862 return ret; 1863 } 1864 1865 static int _regmap_bus_reg_write(void *context, unsigned int reg, 1866 unsigned int val) 1867 { 1868 struct regmap *map = context; 1869 struct regmap_range_node *range; 1870 int ret; 1871 1872 range = _regmap_range_lookup(map, reg); 1873 if (range) { 1874 ret = _regmap_select_page(map, ®, range, 1); 1875 if (ret != 0) 1876 return ret; 1877 } 1878 1879 reg = regmap_reg_addr(map, reg); 1880 return map->bus->reg_write(map->bus_context, reg, val); 1881 } 1882 1883 static int _regmap_bus_raw_write(void *context, unsigned int reg, 1884 unsigned int val) 1885 { 1886 struct regmap *map = context; 1887 1888 WARN_ON(!map->format.format_val); 1889 1890 map->format.format_val(map->work_buf + map->format.reg_bytes 1891 + map->format.pad_bytes, val, 0); 1892 return _regmap_raw_write_impl(map, reg, 1893 map->work_buf + 1894 map->format.reg_bytes + 1895 map->format.pad_bytes, 1896 map->format.val_bytes, 1897 false); 1898 } 1899 1900 static inline void *_regmap_map_get_context(struct regmap *map) 1901 { 1902 return (map->bus || (!map->bus && map->read)) ? map : map->bus_context; 1903 } 1904 1905 int _regmap_write(struct regmap *map, unsigned int reg, 1906 unsigned int val) 1907 { 1908 int ret; 1909 void *context = _regmap_map_get_context(map); 1910 1911 if (!regmap_writeable(map, reg)) 1912 return -EIO; 1913 1914 if (!map->cache_bypass && !map->defer_caching) { 1915 ret = regcache_write(map, reg, val); 1916 if (ret != 0) 1917 return ret; 1918 if (map->cache_only) { 1919 map->cache_dirty = true; 1920 return 0; 1921 } 1922 } 1923 1924 ret = map->reg_write(context, reg, val); 1925 if (ret == 0) { 1926 if (regmap_should_log(map)) 1927 dev_info(map->dev, "%x <= %x\n", reg, val); 1928 1929 trace_regmap_reg_write(map, reg, val); 1930 } 1931 1932 return ret; 1933 } 1934 1935 /** 1936 * regmap_write() - Write a value to a single register 1937 * 1938 * @map: Register map to write to 1939 * @reg: Register to write to 1940 * @val: Value to be written 1941 * 1942 * A value of zero will be returned on success, a negative errno will 1943 * be returned in error cases. 1944 */ 1945 int regmap_write(struct regmap *map, unsigned int reg, unsigned int val) 1946 { 1947 int ret; 1948 1949 if (!IS_ALIGNED(reg, map->reg_stride)) 1950 return -EINVAL; 1951 1952 map->lock(map->lock_arg); 1953 1954 ret = _regmap_write(map, reg, val); 1955 1956 map->unlock(map->lock_arg); 1957 1958 return ret; 1959 } 1960 EXPORT_SYMBOL_GPL(regmap_write); 1961 1962 /** 1963 * regmap_write_async() - Write a value to a single register asynchronously 1964 * 1965 * @map: Register map to write to 1966 * @reg: Register to write to 1967 * @val: Value to be written 1968 * 1969 * A value of zero will be returned on success, a negative errno will 1970 * be returned in error cases. 1971 */ 1972 int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val) 1973 { 1974 int ret; 1975 1976 if (!IS_ALIGNED(reg, map->reg_stride)) 1977 return -EINVAL; 1978 1979 map->lock(map->lock_arg); 1980 1981 map->async = true; 1982 1983 ret = _regmap_write(map, reg, val); 1984 1985 map->async = false; 1986 1987 map->unlock(map->lock_arg); 1988 1989 return ret; 1990 } 1991 EXPORT_SYMBOL_GPL(regmap_write_async); 1992 1993 int _regmap_raw_write(struct regmap *map, unsigned int reg, 1994 const void *val, size_t val_len, bool noinc) 1995 { 1996 size_t val_bytes = map->format.val_bytes; 1997 size_t val_count = val_len / val_bytes; 1998 size_t chunk_count, chunk_bytes; 1999 size_t chunk_regs = val_count; 2000 size_t max_data = map->max_raw_write - map->format.reg_bytes - 2001 map->format.pad_bytes; 2002 int ret, i; 2003 2004 if (!val_count) 2005 return -EINVAL; 2006 2007 if (map->use_single_write) 2008 chunk_regs = 1; 2009 else if (map->max_raw_write && val_len > max_data) 2010 chunk_regs = max_data / val_bytes; 2011 2012 chunk_count = val_count / chunk_regs; 2013 chunk_bytes = chunk_regs * val_bytes; 2014 2015 /* Write as many bytes as possible with chunk_size */ 2016 for (i = 0; i < chunk_count; i++) { 2017 ret = _regmap_raw_write_impl(map, reg, val, chunk_bytes, noinc); 2018 if (ret) 2019 return ret; 2020 2021 reg += regmap_get_offset(map, chunk_regs); 2022 val += chunk_bytes; 2023 val_len -= chunk_bytes; 2024 } 2025 2026 /* Write remaining bytes */ 2027 if (val_len) 2028 ret = _regmap_raw_write_impl(map, reg, val, val_len, noinc); 2029 2030 return ret; 2031 } 2032 2033 /** 2034 * regmap_raw_write() - Write raw values to one or more registers 2035 * 2036 * @map: Register map to write to 2037 * @reg: Initial register to write to 2038 * @val: Block of data to be written, laid out for direct transmission to the 2039 * device 2040 * @val_len: Length of data pointed to by val. 2041 * 2042 * This function is intended to be used for things like firmware 2043 * download where a large block of data needs to be transferred to the 2044 * device. No formatting will be done on the data provided. 2045 * 2046 * A value of zero will be returned on success, a negative errno will 2047 * be returned in error cases. 2048 */ 2049 int regmap_raw_write(struct regmap *map, unsigned int reg, 2050 const void *val, size_t val_len) 2051 { 2052 int ret; 2053 2054 if (!regmap_can_raw_write(map)) 2055 return -EINVAL; 2056 if (val_len % map->format.val_bytes) 2057 return -EINVAL; 2058 2059 map->lock(map->lock_arg); 2060 2061 ret = _regmap_raw_write(map, reg, val, val_len, false); 2062 2063 map->unlock(map->lock_arg); 2064 2065 return ret; 2066 } 2067 EXPORT_SYMBOL_GPL(regmap_raw_write); 2068 2069 static int regmap_noinc_readwrite(struct regmap *map, unsigned int reg, 2070 void *val, unsigned int val_len, bool write) 2071 { 2072 size_t val_bytes = map->format.val_bytes; 2073 size_t val_count = val_len / val_bytes; 2074 unsigned int lastval; 2075 u8 *u8p; 2076 u16 *u16p; 2077 u32 *u32p; 2078 int ret; 2079 int i; 2080 2081 switch (val_bytes) { 2082 case 1: 2083 u8p = val; 2084 if (write) 2085 lastval = (unsigned int)u8p[val_count - 1]; 2086 break; 2087 case 2: 2088 u16p = val; 2089 if (write) 2090 lastval = (unsigned int)u16p[val_count - 1]; 2091 break; 2092 case 4: 2093 u32p = val; 2094 if (write) 2095 lastval = (unsigned int)u32p[val_count - 1]; 2096 break; 2097 default: 2098 return -EINVAL; 2099 } 2100 2101 /* 2102 * Update the cache with the last value we write, the rest is just 2103 * gone down in the hardware FIFO. We can't cache FIFOs. This makes 2104 * sure a single read from the cache will work. 2105 */ 2106 if (write) { 2107 if (!map->cache_bypass && !map->defer_caching) { 2108 ret = regcache_write(map, reg, lastval); 2109 if (ret != 0) 2110 return ret; 2111 if (map->cache_only) { 2112 map->cache_dirty = true; 2113 return 0; 2114 } 2115 } 2116 ret = map->bus->reg_noinc_write(map->bus_context, reg, val, val_count); 2117 } else { 2118 ret = map->bus->reg_noinc_read(map->bus_context, reg, val, val_count); 2119 } 2120 2121 if (!ret && regmap_should_log(map)) { 2122 dev_info(map->dev, "%x %s [", reg, write ? "<=" : "=>"); 2123 for (i = 0; i < val_count; i++) { 2124 switch (val_bytes) { 2125 case 1: 2126 pr_cont("%x", u8p[i]); 2127 break; 2128 case 2: 2129 pr_cont("%x", u16p[i]); 2130 break; 2131 case 4: 2132 pr_cont("%x", u32p[i]); 2133 break; 2134 default: 2135 break; 2136 } 2137 if (i == (val_count - 1)) 2138 pr_cont("]\n"); 2139 else 2140 pr_cont(","); 2141 } 2142 } 2143 2144 return 0; 2145 } 2146 2147 /** 2148 * regmap_noinc_write(): Write data from a register without incrementing the 2149 * register number 2150 * 2151 * @map: Register map to write to 2152 * @reg: Register to write to 2153 * @val: Pointer to data buffer 2154 * @val_len: Length of output buffer in bytes. 2155 * 2156 * The regmap API usually assumes that bulk bus write operations will write a 2157 * range of registers. Some devices have certain registers for which a write 2158 * operation can write to an internal FIFO. 2159 * 2160 * The target register must be volatile but registers after it can be 2161 * completely unrelated cacheable registers. 2162 * 2163 * This will attempt multiple writes as required to write val_len bytes. 2164 * 2165 * A value of zero will be returned on success, a negative errno will be 2166 * returned in error cases. 2167 */ 2168 int regmap_noinc_write(struct regmap *map, unsigned int reg, 2169 const void *val, size_t val_len) 2170 { 2171 size_t write_len; 2172 int ret; 2173 2174 if (!map->write && !(map->bus && map->bus->reg_noinc_write)) 2175 return -EINVAL; 2176 if (val_len % map->format.val_bytes) 2177 return -EINVAL; 2178 if (!IS_ALIGNED(reg, map->reg_stride)) 2179 return -EINVAL; 2180 if (val_len == 0) 2181 return -EINVAL; 2182 2183 map->lock(map->lock_arg); 2184 2185 if (!regmap_volatile(map, reg) || !regmap_writeable_noinc(map, reg)) { 2186 ret = -EINVAL; 2187 goto out_unlock; 2188 } 2189 2190 /* 2191 * Use the accelerated operation if we can. The val drops the const 2192 * typing in order to facilitate code reuse in regmap_noinc_readwrite(). 2193 */ 2194 if (map->bus->reg_noinc_write) { 2195 ret = regmap_noinc_readwrite(map, reg, (void *)val, val_len, true); 2196 goto out_unlock; 2197 } 2198 2199 while (val_len) { 2200 if (map->max_raw_write && map->max_raw_write < val_len) 2201 write_len = map->max_raw_write; 2202 else 2203 write_len = val_len; 2204 ret = _regmap_raw_write(map, reg, val, write_len, true); 2205 if (ret) 2206 goto out_unlock; 2207 val = ((u8 *)val) + write_len; 2208 val_len -= write_len; 2209 } 2210 2211 out_unlock: 2212 map->unlock(map->lock_arg); 2213 return ret; 2214 } 2215 EXPORT_SYMBOL_GPL(regmap_noinc_write); 2216 2217 /** 2218 * regmap_field_update_bits_base() - Perform a read/modify/write cycle a 2219 * register field. 2220 * 2221 * @field: Register field to write to 2222 * @mask: Bitmask to change 2223 * @val: Value to be written 2224 * @change: Boolean indicating if a write was done 2225 * @async: Boolean indicating asynchronously 2226 * @force: Boolean indicating use force update 2227 * 2228 * Perform a read/modify/write cycle on the register field with change, 2229 * async, force option. 2230 * 2231 * A value of zero will be returned on success, a negative errno will 2232 * be returned in error cases. 2233 */ 2234 int regmap_field_update_bits_base(struct regmap_field *field, 2235 unsigned int mask, unsigned int val, 2236 bool *change, bool async, bool force) 2237 { 2238 mask = (mask << field->shift) & field->mask; 2239 2240 return regmap_update_bits_base(field->regmap, field->reg, 2241 mask, val << field->shift, 2242 change, async, force); 2243 } 2244 EXPORT_SYMBOL_GPL(regmap_field_update_bits_base); 2245 2246 /** 2247 * regmap_field_test_bits() - Check if all specified bits are set in a 2248 * register field. 2249 * 2250 * @field: Register field to operate on 2251 * @bits: Bits to test 2252 * 2253 * Returns -1 if the underlying regmap_field_read() fails, 0 if at least one of the 2254 * tested bits is not set and 1 if all tested bits are set. 2255 */ 2256 int regmap_field_test_bits(struct regmap_field *field, unsigned int bits) 2257 { 2258 unsigned int val, ret; 2259 2260 ret = regmap_field_read(field, &val); 2261 if (ret) 2262 return ret; 2263 2264 return (val & bits) == bits; 2265 } 2266 EXPORT_SYMBOL_GPL(regmap_field_test_bits); 2267 2268 /** 2269 * regmap_fields_update_bits_base() - Perform a read/modify/write cycle a 2270 * register field with port ID 2271 * 2272 * @field: Register field to write to 2273 * @id: port ID 2274 * @mask: Bitmask to change 2275 * @val: Value to be written 2276 * @change: Boolean indicating if a write was done 2277 * @async: Boolean indicating asynchronously 2278 * @force: Boolean indicating use force update 2279 * 2280 * A value of zero will be returned on success, a negative errno will 2281 * be returned in error cases. 2282 */ 2283 int regmap_fields_update_bits_base(struct regmap_field *field, unsigned int id, 2284 unsigned int mask, unsigned int val, 2285 bool *change, bool async, bool force) 2286 { 2287 if (id >= field->id_size) 2288 return -EINVAL; 2289 2290 mask = (mask << field->shift) & field->mask; 2291 2292 return regmap_update_bits_base(field->regmap, 2293 field->reg + (field->id_offset * id), 2294 mask, val << field->shift, 2295 change, async, force); 2296 } 2297 EXPORT_SYMBOL_GPL(regmap_fields_update_bits_base); 2298 2299 /** 2300 * regmap_bulk_write() - Write multiple registers to the device 2301 * 2302 * @map: Register map to write to 2303 * @reg: First register to be write from 2304 * @val: Block of data to be written, in native register size for device 2305 * @val_count: Number of registers to write 2306 * 2307 * This function is intended to be used for writing a large block of 2308 * data to the device either in single transfer or multiple transfer. 2309 * 2310 * A value of zero will be returned on success, a negative errno will 2311 * be returned in error cases. 2312 */ 2313 int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, 2314 size_t val_count) 2315 { 2316 int ret = 0, i; 2317 size_t val_bytes = map->format.val_bytes; 2318 2319 if (!IS_ALIGNED(reg, map->reg_stride)) 2320 return -EINVAL; 2321 2322 /* 2323 * Some devices don't support bulk write, for them we have a series of 2324 * single write operations. 2325 */ 2326 if (!map->write || !map->format.parse_inplace) { 2327 map->lock(map->lock_arg); 2328 for (i = 0; i < val_count; i++) { 2329 unsigned int ival; 2330 2331 switch (val_bytes) { 2332 case 1: 2333 ival = *(u8 *)(val + (i * val_bytes)); 2334 break; 2335 case 2: 2336 ival = *(u16 *)(val + (i * val_bytes)); 2337 break; 2338 case 4: 2339 ival = *(u32 *)(val + (i * val_bytes)); 2340 break; 2341 default: 2342 ret = -EINVAL; 2343 goto out; 2344 } 2345 2346 ret = _regmap_write(map, 2347 reg + regmap_get_offset(map, i), 2348 ival); 2349 if (ret != 0) 2350 goto out; 2351 } 2352 out: 2353 map->unlock(map->lock_arg); 2354 } else { 2355 void *wval; 2356 2357 wval = kmemdup(val, val_count * val_bytes, map->alloc_flags); 2358 if (!wval) 2359 return -ENOMEM; 2360 2361 for (i = 0; i < val_count * val_bytes; i += val_bytes) 2362 map->format.parse_inplace(wval + i); 2363 2364 ret = regmap_raw_write(map, reg, wval, val_bytes * val_count); 2365 2366 kfree(wval); 2367 } 2368 2369 if (!ret) 2370 trace_regmap_bulk_write(map, reg, val, val_bytes * val_count); 2371 2372 return ret; 2373 } 2374 EXPORT_SYMBOL_GPL(regmap_bulk_write); 2375 2376 /* 2377 * _regmap_raw_multi_reg_write() 2378 * 2379 * the (register,newvalue) pairs in regs have not been formatted, but 2380 * they are all in the same page and have been changed to being page 2381 * relative. The page register has been written if that was necessary. 2382 */ 2383 static int _regmap_raw_multi_reg_write(struct regmap *map, 2384 const struct reg_sequence *regs, 2385 size_t num_regs) 2386 { 2387 int ret; 2388 void *buf; 2389 int i; 2390 u8 *u8; 2391 size_t val_bytes = map->format.val_bytes; 2392 size_t reg_bytes = map->format.reg_bytes; 2393 size_t pad_bytes = map->format.pad_bytes; 2394 size_t pair_size = reg_bytes + pad_bytes + val_bytes; 2395 size_t len = pair_size * num_regs; 2396 2397 if (!len) 2398 return -EINVAL; 2399 2400 buf = kzalloc(len, GFP_KERNEL); 2401 if (!buf) 2402 return -ENOMEM; 2403 2404 /* We have to linearise by hand. */ 2405 2406 u8 = buf; 2407 2408 for (i = 0; i < num_regs; i++) { 2409 unsigned int reg = regs[i].reg; 2410 unsigned int val = regs[i].def; 2411 trace_regmap_hw_write_start(map, reg, 1); 2412 reg = regmap_reg_addr(map, reg); 2413 map->format.format_reg(u8, reg, map->reg_shift); 2414 u8 += reg_bytes + pad_bytes; 2415 map->format.format_val(u8, val, 0); 2416 u8 += val_bytes; 2417 } 2418 u8 = buf; 2419 *u8 |= map->write_flag_mask; 2420 2421 ret = map->write(map->bus_context, buf, len); 2422 2423 kfree(buf); 2424 2425 for (i = 0; i < num_regs; i++) { 2426 int reg = regs[i].reg; 2427 trace_regmap_hw_write_done(map, reg, 1); 2428 } 2429 return ret; 2430 } 2431 2432 static unsigned int _regmap_register_page(struct regmap *map, 2433 unsigned int reg, 2434 struct regmap_range_node *range) 2435 { 2436 unsigned int win_page = (reg - range->range_min) / range->window_len; 2437 2438 return win_page; 2439 } 2440 2441 static int _regmap_range_multi_paged_reg_write(struct regmap *map, 2442 struct reg_sequence *regs, 2443 size_t num_regs) 2444 { 2445 int ret; 2446 int i, n; 2447 struct reg_sequence *base; 2448 unsigned int this_page = 0; 2449 unsigned int page_change = 0; 2450 /* 2451 * the set of registers are not neccessarily in order, but 2452 * since the order of write must be preserved this algorithm 2453 * chops the set each time the page changes. This also applies 2454 * if there is a delay required at any point in the sequence. 2455 */ 2456 base = regs; 2457 for (i = 0, n = 0; i < num_regs; i++, n++) { 2458 unsigned int reg = regs[i].reg; 2459 struct regmap_range_node *range; 2460 2461 range = _regmap_range_lookup(map, reg); 2462 if (range) { 2463 unsigned int win_page = _regmap_register_page(map, reg, 2464 range); 2465 2466 if (i == 0) 2467 this_page = win_page; 2468 if (win_page != this_page) { 2469 this_page = win_page; 2470 page_change = 1; 2471 } 2472 } 2473 2474 /* If we have both a page change and a delay make sure to 2475 * write the regs and apply the delay before we change the 2476 * page. 2477 */ 2478 2479 if (page_change || regs[i].delay_us) { 2480 2481 /* For situations where the first write requires 2482 * a delay we need to make sure we don't call 2483 * raw_multi_reg_write with n=0 2484 * This can't occur with page breaks as we 2485 * never write on the first iteration 2486 */ 2487 if (regs[i].delay_us && i == 0) 2488 n = 1; 2489 2490 ret = _regmap_raw_multi_reg_write(map, base, n); 2491 if (ret != 0) 2492 return ret; 2493 2494 if (regs[i].delay_us) { 2495 if (map->can_sleep) 2496 fsleep(regs[i].delay_us); 2497 else 2498 udelay(regs[i].delay_us); 2499 } 2500 2501 base += n; 2502 n = 0; 2503 2504 if (page_change) { 2505 ret = _regmap_select_page(map, 2506 &base[n].reg, 2507 range, 1); 2508 if (ret != 0) 2509 return ret; 2510 2511 page_change = 0; 2512 } 2513 2514 } 2515 2516 } 2517 if (n > 0) 2518 return _regmap_raw_multi_reg_write(map, base, n); 2519 return 0; 2520 } 2521 2522 static int _regmap_multi_reg_write(struct regmap *map, 2523 const struct reg_sequence *regs, 2524 size_t num_regs) 2525 { 2526 int i; 2527 int ret; 2528 2529 if (!map->can_multi_write) { 2530 for (i = 0; i < num_regs; i++) { 2531 ret = _regmap_write(map, regs[i].reg, regs[i].def); 2532 if (ret != 0) 2533 return ret; 2534 2535 if (regs[i].delay_us) { 2536 if (map->can_sleep) 2537 fsleep(regs[i].delay_us); 2538 else 2539 udelay(regs[i].delay_us); 2540 } 2541 } 2542 return 0; 2543 } 2544 2545 if (!map->format.parse_inplace) 2546 return -EINVAL; 2547 2548 if (map->writeable_reg) 2549 for (i = 0; i < num_regs; i++) { 2550 int reg = regs[i].reg; 2551 if (!map->writeable_reg(map->dev, reg)) 2552 return -EINVAL; 2553 if (!IS_ALIGNED(reg, map->reg_stride)) 2554 return -EINVAL; 2555 } 2556 2557 if (!map->cache_bypass) { 2558 for (i = 0; i < num_regs; i++) { 2559 unsigned int val = regs[i].def; 2560 unsigned int reg = regs[i].reg; 2561 ret = regcache_write(map, reg, val); 2562 if (ret) { 2563 dev_err(map->dev, 2564 "Error in caching of register: %x ret: %d\n", 2565 reg, ret); 2566 return ret; 2567 } 2568 } 2569 if (map->cache_only) { 2570 map->cache_dirty = true; 2571 return 0; 2572 } 2573 } 2574 2575 WARN_ON(!map->bus); 2576 2577 for (i = 0; i < num_regs; i++) { 2578 unsigned int reg = regs[i].reg; 2579 struct regmap_range_node *range; 2580 2581 /* Coalesce all the writes between a page break or a delay 2582 * in a sequence 2583 */ 2584 range = _regmap_range_lookup(map, reg); 2585 if (range || regs[i].delay_us) { 2586 size_t len = sizeof(struct reg_sequence)*num_regs; 2587 struct reg_sequence *base = kmemdup(regs, len, 2588 GFP_KERNEL); 2589 if (!base) 2590 return -ENOMEM; 2591 ret = _regmap_range_multi_paged_reg_write(map, base, 2592 num_regs); 2593 kfree(base); 2594 2595 return ret; 2596 } 2597 } 2598 return _regmap_raw_multi_reg_write(map, regs, num_regs); 2599 } 2600 2601 /** 2602 * regmap_multi_reg_write() - Write multiple registers to the device 2603 * 2604 * @map: Register map to write to 2605 * @regs: Array of structures containing register,value to be written 2606 * @num_regs: Number of registers to write 2607 * 2608 * Write multiple registers to the device where the set of register, value 2609 * pairs are supplied in any order, possibly not all in a single range. 2610 * 2611 * The 'normal' block write mode will send ultimately send data on the 2612 * target bus as R,V1,V2,V3,..,Vn where successively higher registers are 2613 * addressed. However, this alternative block multi write mode will send 2614 * the data as R1,V1,R2,V2,..,Rn,Vn on the target bus. The target device 2615 * must of course support the mode. 2616 * 2617 * A value of zero will be returned on success, a negative errno will be 2618 * returned in error cases. 2619 */ 2620 int regmap_multi_reg_write(struct regmap *map, const struct reg_sequence *regs, 2621 int num_regs) 2622 { 2623 int ret; 2624 2625 map->lock(map->lock_arg); 2626 2627 ret = _regmap_multi_reg_write(map, regs, num_regs); 2628 2629 map->unlock(map->lock_arg); 2630 2631 return ret; 2632 } 2633 EXPORT_SYMBOL_GPL(regmap_multi_reg_write); 2634 2635 /** 2636 * regmap_multi_reg_write_bypassed() - Write multiple registers to the 2637 * device but not the cache 2638 * 2639 * @map: Register map to write to 2640 * @regs: Array of structures containing register,value to be written 2641 * @num_regs: Number of registers to write 2642 * 2643 * Write multiple registers to the device but not the cache where the set 2644 * of register are supplied in any order. 2645 * 2646 * This function is intended to be used for writing a large block of data 2647 * atomically to the device in single transfer for those I2C client devices 2648 * that implement this alternative block write mode. 2649 * 2650 * A value of zero will be returned on success, a negative errno will 2651 * be returned in error cases. 2652 */ 2653 int regmap_multi_reg_write_bypassed(struct regmap *map, 2654 const struct reg_sequence *regs, 2655 int num_regs) 2656 { 2657 int ret; 2658 bool bypass; 2659 2660 map->lock(map->lock_arg); 2661 2662 bypass = map->cache_bypass; 2663 map->cache_bypass = true; 2664 2665 ret = _regmap_multi_reg_write(map, regs, num_regs); 2666 2667 map->cache_bypass = bypass; 2668 2669 map->unlock(map->lock_arg); 2670 2671 return ret; 2672 } 2673 EXPORT_SYMBOL_GPL(regmap_multi_reg_write_bypassed); 2674 2675 /** 2676 * regmap_raw_write_async() - Write raw values to one or more registers 2677 * asynchronously 2678 * 2679 * @map: Register map to write to 2680 * @reg: Initial register to write to 2681 * @val: Block of data to be written, laid out for direct transmission to the 2682 * device. Must be valid until regmap_async_complete() is called. 2683 * @val_len: Length of data pointed to by val. 2684 * 2685 * This function is intended to be used for things like firmware 2686 * download where a large block of data needs to be transferred to the 2687 * device. No formatting will be done on the data provided. 2688 * 2689 * If supported by the underlying bus the write will be scheduled 2690 * asynchronously, helping maximise I/O speed on higher speed buses 2691 * like SPI. regmap_async_complete() can be called to ensure that all 2692 * asynchrnous writes have been completed. 2693 * 2694 * A value of zero will be returned on success, a negative errno will 2695 * be returned in error cases. 2696 */ 2697 int regmap_raw_write_async(struct regmap *map, unsigned int reg, 2698 const void *val, size_t val_len) 2699 { 2700 int ret; 2701 2702 if (val_len % map->format.val_bytes) 2703 return -EINVAL; 2704 if (!IS_ALIGNED(reg, map->reg_stride)) 2705 return -EINVAL; 2706 2707 map->lock(map->lock_arg); 2708 2709 map->async = true; 2710 2711 ret = _regmap_raw_write(map, reg, val, val_len, false); 2712 2713 map->async = false; 2714 2715 map->unlock(map->lock_arg); 2716 2717 return ret; 2718 } 2719 EXPORT_SYMBOL_GPL(regmap_raw_write_async); 2720 2721 static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val, 2722 unsigned int val_len, bool noinc) 2723 { 2724 struct regmap_range_node *range; 2725 int ret; 2726 2727 if (!map->read) 2728 return -EINVAL; 2729 2730 range = _regmap_range_lookup(map, reg); 2731 if (range) { 2732 ret = _regmap_select_page(map, ®, range, 2733 noinc ? 1 : val_len / map->format.val_bytes); 2734 if (ret != 0) 2735 return ret; 2736 } 2737 2738 reg = regmap_reg_addr(map, reg); 2739 map->format.format_reg(map->work_buf, reg, map->reg_shift); 2740 regmap_set_work_buf_flag_mask(map, map->format.reg_bytes, 2741 map->read_flag_mask); 2742 trace_regmap_hw_read_start(map, reg, val_len / map->format.val_bytes); 2743 2744 ret = map->read(map->bus_context, map->work_buf, 2745 map->format.reg_bytes + map->format.pad_bytes, 2746 val, val_len); 2747 2748 trace_regmap_hw_read_done(map, reg, val_len / map->format.val_bytes); 2749 2750 return ret; 2751 } 2752 2753 static int _regmap_bus_reg_read(void *context, unsigned int reg, 2754 unsigned int *val) 2755 { 2756 struct regmap *map = context; 2757 struct regmap_range_node *range; 2758 int ret; 2759 2760 range = _regmap_range_lookup(map, reg); 2761 if (range) { 2762 ret = _regmap_select_page(map, ®, range, 1); 2763 if (ret != 0) 2764 return ret; 2765 } 2766 2767 reg = regmap_reg_addr(map, reg); 2768 return map->bus->reg_read(map->bus_context, reg, val); 2769 } 2770 2771 static int _regmap_bus_read(void *context, unsigned int reg, 2772 unsigned int *val) 2773 { 2774 int ret; 2775 struct regmap *map = context; 2776 void *work_val = map->work_buf + map->format.reg_bytes + 2777 map->format.pad_bytes; 2778 2779 if (!map->format.parse_val) 2780 return -EINVAL; 2781 2782 ret = _regmap_raw_read(map, reg, work_val, map->format.val_bytes, false); 2783 if (ret == 0) 2784 *val = map->format.parse_val(work_val); 2785 2786 return ret; 2787 } 2788 2789 static int _regmap_read(struct regmap *map, unsigned int reg, 2790 unsigned int *val) 2791 { 2792 int ret; 2793 void *context = _regmap_map_get_context(map); 2794 2795 if (!map->cache_bypass) { 2796 ret = regcache_read(map, reg, val); 2797 if (ret == 0) 2798 return 0; 2799 } 2800 2801 if (map->cache_only) 2802 return -EBUSY; 2803 2804 if (!regmap_readable(map, reg)) 2805 return -EIO; 2806 2807 ret = map->reg_read(context, reg, val); 2808 if (ret == 0) { 2809 if (regmap_should_log(map)) 2810 dev_info(map->dev, "%x => %x\n", reg, *val); 2811 2812 trace_regmap_reg_read(map, reg, *val); 2813 2814 if (!map->cache_bypass) 2815 regcache_write(map, reg, *val); 2816 } 2817 2818 return ret; 2819 } 2820 2821 /** 2822 * regmap_read() - Read a value from a single register 2823 * 2824 * @map: Register map to read from 2825 * @reg: Register to be read from 2826 * @val: Pointer to store read value 2827 * 2828 * A value of zero will be returned on success, a negative errno will 2829 * be returned in error cases. 2830 */ 2831 int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val) 2832 { 2833 int ret; 2834 2835 if (!IS_ALIGNED(reg, map->reg_stride)) 2836 return -EINVAL; 2837 2838 map->lock(map->lock_arg); 2839 2840 ret = _regmap_read(map, reg, val); 2841 2842 map->unlock(map->lock_arg); 2843 2844 return ret; 2845 } 2846 EXPORT_SYMBOL_GPL(regmap_read); 2847 2848 /** 2849 * regmap_raw_read() - Read raw data from the device 2850 * 2851 * @map: Register map to read from 2852 * @reg: First register to be read from 2853 * @val: Pointer to store read value 2854 * @val_len: Size of data to read 2855 * 2856 * A value of zero will be returned on success, a negative errno will 2857 * be returned in error cases. 2858 */ 2859 int regmap_raw_read(struct regmap *map, unsigned int reg, void *val, 2860 size_t val_len) 2861 { 2862 size_t val_bytes = map->format.val_bytes; 2863 size_t val_count = val_len / val_bytes; 2864 unsigned int v; 2865 int ret, i; 2866 2867 if (val_len % map->format.val_bytes) 2868 return -EINVAL; 2869 if (!IS_ALIGNED(reg, map->reg_stride)) 2870 return -EINVAL; 2871 if (val_count == 0) 2872 return -EINVAL; 2873 2874 map->lock(map->lock_arg); 2875 2876 if (regmap_volatile_range(map, reg, val_count) || map->cache_bypass || 2877 map->cache_type == REGCACHE_NONE) { 2878 size_t chunk_count, chunk_bytes; 2879 size_t chunk_regs = val_count; 2880 2881 if (!map->cache_bypass && map->cache_only) { 2882 ret = -EBUSY; 2883 goto out; 2884 } 2885 2886 if (!map->read) { 2887 ret = -ENOTSUPP; 2888 goto out; 2889 } 2890 2891 if (map->use_single_read) 2892 chunk_regs = 1; 2893 else if (map->max_raw_read && val_len > map->max_raw_read) 2894 chunk_regs = map->max_raw_read / val_bytes; 2895 2896 chunk_count = val_count / chunk_regs; 2897 chunk_bytes = chunk_regs * val_bytes; 2898 2899 /* Read bytes that fit into whole chunks */ 2900 for (i = 0; i < chunk_count; i++) { 2901 ret = _regmap_raw_read(map, reg, val, chunk_bytes, false); 2902 if (ret != 0) 2903 goto out; 2904 2905 reg += regmap_get_offset(map, chunk_regs); 2906 val += chunk_bytes; 2907 val_len -= chunk_bytes; 2908 } 2909 2910 /* Read remaining bytes */ 2911 if (val_len) { 2912 ret = _regmap_raw_read(map, reg, val, val_len, false); 2913 if (ret != 0) 2914 goto out; 2915 } 2916 } else { 2917 /* Otherwise go word by word for the cache; should be low 2918 * cost as we expect to hit the cache. 2919 */ 2920 for (i = 0; i < val_count; i++) { 2921 ret = _regmap_read(map, reg + regmap_get_offset(map, i), 2922 &v); 2923 if (ret != 0) 2924 goto out; 2925 2926 map->format.format_val(val + (i * val_bytes), v, 0); 2927 } 2928 } 2929 2930 out: 2931 map->unlock(map->lock_arg); 2932 2933 return ret; 2934 } 2935 EXPORT_SYMBOL_GPL(regmap_raw_read); 2936 2937 /** 2938 * regmap_noinc_read(): Read data from a register without incrementing the 2939 * register number 2940 * 2941 * @map: Register map to read from 2942 * @reg: Register to read from 2943 * @val: Pointer to data buffer 2944 * @val_len: Length of output buffer in bytes. 2945 * 2946 * The regmap API usually assumes that bulk read operations will read a 2947 * range of registers. Some devices have certain registers for which a read 2948 * operation read will read from an internal FIFO. 2949 * 2950 * The target register must be volatile but registers after it can be 2951 * completely unrelated cacheable registers. 2952 * 2953 * This will attempt multiple reads as required to read val_len bytes. 2954 * 2955 * A value of zero will be returned on success, a negative errno will be 2956 * returned in error cases. 2957 */ 2958 int regmap_noinc_read(struct regmap *map, unsigned int reg, 2959 void *val, size_t val_len) 2960 { 2961 size_t read_len; 2962 int ret; 2963 2964 if (!map->read) 2965 return -ENOTSUPP; 2966 2967 if (val_len % map->format.val_bytes) 2968 return -EINVAL; 2969 if (!IS_ALIGNED(reg, map->reg_stride)) 2970 return -EINVAL; 2971 if (val_len == 0) 2972 return -EINVAL; 2973 2974 map->lock(map->lock_arg); 2975 2976 if (!regmap_volatile(map, reg) || !regmap_readable_noinc(map, reg)) { 2977 ret = -EINVAL; 2978 goto out_unlock; 2979 } 2980 2981 /* 2982 * We have not defined the FIFO semantics for cache, as the 2983 * cache is just one value deep. Should we return the last 2984 * written value? Just avoid this by always reading the FIFO 2985 * even when using cache. Cache only will not work. 2986 */ 2987 if (!map->cache_bypass && map->cache_only) { 2988 ret = -EBUSY; 2989 goto out_unlock; 2990 } 2991 2992 /* Use the accelerated operation if we can */ 2993 if (map->bus->reg_noinc_read) { 2994 ret = regmap_noinc_readwrite(map, reg, val, val_len, false); 2995 goto out_unlock; 2996 } 2997 2998 while (val_len) { 2999 if (map->max_raw_read && map->max_raw_read < val_len) 3000 read_len = map->max_raw_read; 3001 else 3002 read_len = val_len; 3003 ret = _regmap_raw_read(map, reg, val, read_len, true); 3004 if (ret) 3005 goto out_unlock; 3006 val = ((u8 *)val) + read_len; 3007 val_len -= read_len; 3008 } 3009 3010 out_unlock: 3011 map->unlock(map->lock_arg); 3012 return ret; 3013 } 3014 EXPORT_SYMBOL_GPL(regmap_noinc_read); 3015 3016 /** 3017 * regmap_field_read(): Read a value to a single register field 3018 * 3019 * @field: Register field to read from 3020 * @val: Pointer to store read value 3021 * 3022 * A value of zero will be returned on success, a negative errno will 3023 * be returned in error cases. 3024 */ 3025 int regmap_field_read(struct regmap_field *field, unsigned int *val) 3026 { 3027 int ret; 3028 unsigned int reg_val; 3029 ret = regmap_read(field->regmap, field->reg, ®_val); 3030 if (ret != 0) 3031 return ret; 3032 3033 reg_val &= field->mask; 3034 reg_val >>= field->shift; 3035 *val = reg_val; 3036 3037 return ret; 3038 } 3039 EXPORT_SYMBOL_GPL(regmap_field_read); 3040 3041 /** 3042 * regmap_fields_read() - Read a value to a single register field with port ID 3043 * 3044 * @field: Register field to read from 3045 * @id: port ID 3046 * @val: Pointer to store read value 3047 * 3048 * A value of zero will be returned on success, a negative errno will 3049 * be returned in error cases. 3050 */ 3051 int regmap_fields_read(struct regmap_field *field, unsigned int id, 3052 unsigned int *val) 3053 { 3054 int ret; 3055 unsigned int reg_val; 3056 3057 if (id >= field->id_size) 3058 return -EINVAL; 3059 3060 ret = regmap_read(field->regmap, 3061 field->reg + (field->id_offset * id), 3062 ®_val); 3063 if (ret != 0) 3064 return ret; 3065 3066 reg_val &= field->mask; 3067 reg_val >>= field->shift; 3068 *val = reg_val; 3069 3070 return ret; 3071 } 3072 EXPORT_SYMBOL_GPL(regmap_fields_read); 3073 3074 /** 3075 * regmap_bulk_read() - Read multiple registers from the device 3076 * 3077 * @map: Register map to read from 3078 * @reg: First register to be read from 3079 * @val: Pointer to store read value, in native register size for device 3080 * @val_count: Number of registers to read 3081 * 3082 * A value of zero will be returned on success, a negative errno will 3083 * be returned in error cases. 3084 */ 3085 int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val, 3086 size_t val_count) 3087 { 3088 int ret, i; 3089 size_t val_bytes = map->format.val_bytes; 3090 bool vol = regmap_volatile_range(map, reg, val_count); 3091 3092 if (!IS_ALIGNED(reg, map->reg_stride)) 3093 return -EINVAL; 3094 if (val_count == 0) 3095 return -EINVAL; 3096 3097 if (map->read && map->format.parse_inplace && (vol || map->cache_type == REGCACHE_NONE)) { 3098 ret = regmap_raw_read(map, reg, val, val_bytes * val_count); 3099 if (ret != 0) 3100 return ret; 3101 3102 for (i = 0; i < val_count * val_bytes; i += val_bytes) 3103 map->format.parse_inplace(val + i); 3104 } else { 3105 u32 *u32 = val; 3106 u16 *u16 = val; 3107 u8 *u8 = val; 3108 3109 map->lock(map->lock_arg); 3110 3111 for (i = 0; i < val_count; i++) { 3112 unsigned int ival; 3113 3114 ret = _regmap_read(map, reg + regmap_get_offset(map, i), 3115 &ival); 3116 if (ret != 0) 3117 goto out; 3118 3119 switch (map->format.val_bytes) { 3120 case 4: 3121 u32[i] = ival; 3122 break; 3123 case 2: 3124 u16[i] = ival; 3125 break; 3126 case 1: 3127 u8[i] = ival; 3128 break; 3129 default: 3130 ret = -EINVAL; 3131 goto out; 3132 } 3133 } 3134 3135 out: 3136 map->unlock(map->lock_arg); 3137 } 3138 3139 if (!ret) 3140 trace_regmap_bulk_read(map, reg, val, val_bytes * val_count); 3141 3142 return ret; 3143 } 3144 EXPORT_SYMBOL_GPL(regmap_bulk_read); 3145 3146 static int _regmap_update_bits(struct regmap *map, unsigned int reg, 3147 unsigned int mask, unsigned int val, 3148 bool *change, bool force_write) 3149 { 3150 int ret; 3151 unsigned int tmp, orig; 3152 3153 if (change) 3154 *change = false; 3155 3156 if (regmap_volatile(map, reg) && map->reg_update_bits) { 3157 reg = regmap_reg_addr(map, reg); 3158 ret = map->reg_update_bits(map->bus_context, reg, mask, val); 3159 if (ret == 0 && change) 3160 *change = true; 3161 } else { 3162 ret = _regmap_read(map, reg, &orig); 3163 if (ret != 0) 3164 return ret; 3165 3166 tmp = orig & ~mask; 3167 tmp |= val & mask; 3168 3169 if (force_write || (tmp != orig) || map->force_write_field) { 3170 ret = _regmap_write(map, reg, tmp); 3171 if (ret == 0 && change) 3172 *change = true; 3173 } 3174 } 3175 3176 return ret; 3177 } 3178 3179 /** 3180 * regmap_update_bits_base() - Perform a read/modify/write cycle on a register 3181 * 3182 * @map: Register map to update 3183 * @reg: Register to update 3184 * @mask: Bitmask to change 3185 * @val: New value for bitmask 3186 * @change: Boolean indicating if a write was done 3187 * @async: Boolean indicating asynchronously 3188 * @force: Boolean indicating use force update 3189 * 3190 * Perform a read/modify/write cycle on a register map with change, async, force 3191 * options. 3192 * 3193 * If async is true: 3194 * 3195 * With most buses the read must be done synchronously so this is most useful 3196 * for devices with a cache which do not need to interact with the hardware to 3197 * determine the current register value. 3198 * 3199 * Returns zero for success, a negative number on error. 3200 */ 3201 int regmap_update_bits_base(struct regmap *map, unsigned int reg, 3202 unsigned int mask, unsigned int val, 3203 bool *change, bool async, bool force) 3204 { 3205 int ret; 3206 3207 map->lock(map->lock_arg); 3208 3209 map->async = async; 3210 3211 ret = _regmap_update_bits(map, reg, mask, val, change, force); 3212 3213 map->async = false; 3214 3215 map->unlock(map->lock_arg); 3216 3217 return ret; 3218 } 3219 EXPORT_SYMBOL_GPL(regmap_update_bits_base); 3220 3221 /** 3222 * regmap_test_bits() - Check if all specified bits are set in a register. 3223 * 3224 * @map: Register map to operate on 3225 * @reg: Register to read from 3226 * @bits: Bits to test 3227 * 3228 * Returns 0 if at least one of the tested bits is not set, 1 if all tested 3229 * bits are set and a negative error number if the underlying regmap_read() 3230 * fails. 3231 */ 3232 int regmap_test_bits(struct regmap *map, unsigned int reg, unsigned int bits) 3233 { 3234 unsigned int val, ret; 3235 3236 ret = regmap_read(map, reg, &val); 3237 if (ret) 3238 return ret; 3239 3240 return (val & bits) == bits; 3241 } 3242 EXPORT_SYMBOL_GPL(regmap_test_bits); 3243 3244 void regmap_async_complete_cb(struct regmap_async *async, int ret) 3245 { 3246 struct regmap *map = async->map; 3247 bool wake; 3248 3249 trace_regmap_async_io_complete(map); 3250 3251 spin_lock(&map->async_lock); 3252 list_move(&async->list, &map->async_free); 3253 wake = list_empty(&map->async_list); 3254 3255 if (ret != 0) 3256 map->async_ret = ret; 3257 3258 spin_unlock(&map->async_lock); 3259 3260 if (wake) 3261 wake_up(&map->async_waitq); 3262 } 3263 EXPORT_SYMBOL_GPL(regmap_async_complete_cb); 3264 3265 static int regmap_async_is_done(struct regmap *map) 3266 { 3267 unsigned long flags; 3268 int ret; 3269 3270 spin_lock_irqsave(&map->async_lock, flags); 3271 ret = list_empty(&map->async_list); 3272 spin_unlock_irqrestore(&map->async_lock, flags); 3273 3274 return ret; 3275 } 3276 3277 /** 3278 * regmap_async_complete - Ensure all asynchronous I/O has completed. 3279 * 3280 * @map: Map to operate on. 3281 * 3282 * Blocks until any pending asynchronous I/O has completed. Returns 3283 * an error code for any failed I/O operations. 3284 */ 3285 int regmap_async_complete(struct regmap *map) 3286 { 3287 unsigned long flags; 3288 int ret; 3289 3290 /* Nothing to do with no async support */ 3291 if (!map->bus || !map->bus->async_write) 3292 return 0; 3293 3294 trace_regmap_async_complete_start(map); 3295 3296 wait_event(map->async_waitq, regmap_async_is_done(map)); 3297 3298 spin_lock_irqsave(&map->async_lock, flags); 3299 ret = map->async_ret; 3300 map->async_ret = 0; 3301 spin_unlock_irqrestore(&map->async_lock, flags); 3302 3303 trace_regmap_async_complete_done(map); 3304 3305 return ret; 3306 } 3307 EXPORT_SYMBOL_GPL(regmap_async_complete); 3308 3309 /** 3310 * regmap_register_patch - Register and apply register updates to be applied 3311 * on device initialistion 3312 * 3313 * @map: Register map to apply updates to. 3314 * @regs: Values to update. 3315 * @num_regs: Number of entries in regs. 3316 * 3317 * Register a set of register updates to be applied to the device 3318 * whenever the device registers are synchronised with the cache and 3319 * apply them immediately. Typically this is used to apply 3320 * corrections to be applied to the device defaults on startup, such 3321 * as the updates some vendors provide to undocumented registers. 3322 * 3323 * The caller must ensure that this function cannot be called 3324 * concurrently with either itself or regcache_sync(). 3325 */ 3326 int regmap_register_patch(struct regmap *map, const struct reg_sequence *regs, 3327 int num_regs) 3328 { 3329 struct reg_sequence *p; 3330 int ret; 3331 bool bypass; 3332 3333 if (WARN_ONCE(num_regs <= 0, "invalid registers number (%d)\n", 3334 num_regs)) 3335 return 0; 3336 3337 p = krealloc(map->patch, 3338 sizeof(struct reg_sequence) * (map->patch_regs + num_regs), 3339 GFP_KERNEL); 3340 if (p) { 3341 memcpy(p + map->patch_regs, regs, num_regs * sizeof(*regs)); 3342 map->patch = p; 3343 map->patch_regs += num_regs; 3344 } else { 3345 return -ENOMEM; 3346 } 3347 3348 map->lock(map->lock_arg); 3349 3350 bypass = map->cache_bypass; 3351 3352 map->cache_bypass = true; 3353 map->async = true; 3354 3355 ret = _regmap_multi_reg_write(map, regs, num_regs); 3356 3357 map->async = false; 3358 map->cache_bypass = bypass; 3359 3360 map->unlock(map->lock_arg); 3361 3362 regmap_async_complete(map); 3363 3364 return ret; 3365 } 3366 EXPORT_SYMBOL_GPL(regmap_register_patch); 3367 3368 /** 3369 * regmap_get_val_bytes() - Report the size of a register value 3370 * 3371 * @map: Register map to operate on. 3372 * 3373 * Report the size of a register value, mainly intended to for use by 3374 * generic infrastructure built on top of regmap. 3375 */ 3376 int regmap_get_val_bytes(struct regmap *map) 3377 { 3378 if (map->format.format_write) 3379 return -EINVAL; 3380 3381 return map->format.val_bytes; 3382 } 3383 EXPORT_SYMBOL_GPL(regmap_get_val_bytes); 3384 3385 /** 3386 * regmap_get_max_register() - Report the max register value 3387 * 3388 * @map: Register map to operate on. 3389 * 3390 * Report the max register value, mainly intended to for use by 3391 * generic infrastructure built on top of regmap. 3392 */ 3393 int regmap_get_max_register(struct regmap *map) 3394 { 3395 return map->max_register ? map->max_register : -EINVAL; 3396 } 3397 EXPORT_SYMBOL_GPL(regmap_get_max_register); 3398 3399 /** 3400 * regmap_get_reg_stride() - Report the register address stride 3401 * 3402 * @map: Register map to operate on. 3403 * 3404 * Report the register address stride, mainly intended to for use by 3405 * generic infrastructure built on top of regmap. 3406 */ 3407 int regmap_get_reg_stride(struct regmap *map) 3408 { 3409 return map->reg_stride; 3410 } 3411 EXPORT_SYMBOL_GPL(regmap_get_reg_stride); 3412 3413 /** 3414 * regmap_might_sleep() - Returns whether a regmap access might sleep. 3415 * 3416 * @map: Register map to operate on. 3417 * 3418 * Returns true if an access to the register might sleep, else false. 3419 */ 3420 bool regmap_might_sleep(struct regmap *map) 3421 { 3422 return map->can_sleep; 3423 } 3424 EXPORT_SYMBOL_GPL(regmap_might_sleep); 3425 3426 int regmap_parse_val(struct regmap *map, const void *buf, 3427 unsigned int *val) 3428 { 3429 if (!map->format.parse_val) 3430 return -EINVAL; 3431 3432 *val = map->format.parse_val(buf); 3433 3434 return 0; 3435 } 3436 EXPORT_SYMBOL_GPL(regmap_parse_val); 3437 3438 static int __init regmap_initcall(void) 3439 { 3440 regmap_debugfs_initcall(); 3441 3442 return 0; 3443 } 3444 postcore_initcall(regmap_initcall); 3445