1 /* 2 * Register map access API 3 * 4 * Copyright 2011 Wolfson Microelectronics plc 5 * 6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License version 2 as 10 * published by the Free Software Foundation. 11 */ 12 13 #include <linux/device.h> 14 #include <linux/slab.h> 15 #include <linux/export.h> 16 #include <linux/mutex.h> 17 #include <linux/err.h> 18 #include <linux/of.h> 19 #include <linux/rbtree.h> 20 #include <linux/sched.h> 21 22 #define CREATE_TRACE_POINTS 23 #include <trace/events/regmap.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 static int _regmap_update_bits(struct regmap *map, unsigned int reg, 36 unsigned int mask, unsigned int val, 37 bool *change); 38 39 static int _regmap_bus_reg_read(void *context, unsigned int reg, 40 unsigned int *val); 41 static int _regmap_bus_read(void *context, unsigned int reg, 42 unsigned int *val); 43 static int _regmap_bus_formatted_write(void *context, unsigned int reg, 44 unsigned int val); 45 static int _regmap_bus_reg_write(void *context, unsigned int reg, 46 unsigned int val); 47 static int _regmap_bus_raw_write(void *context, unsigned int reg, 48 unsigned int val); 49 50 bool regmap_reg_in_ranges(unsigned int reg, 51 const struct regmap_range *ranges, 52 unsigned int nranges) 53 { 54 const struct regmap_range *r; 55 int i; 56 57 for (i = 0, r = ranges; i < nranges; i++, r++) 58 if (regmap_reg_in_range(reg, r)) 59 return true; 60 return false; 61 } 62 EXPORT_SYMBOL_GPL(regmap_reg_in_ranges); 63 64 bool regmap_check_range_table(struct regmap *map, unsigned int reg, 65 const struct regmap_access_table *table) 66 { 67 /* Check "no ranges" first */ 68 if (regmap_reg_in_ranges(reg, table->no_ranges, table->n_no_ranges)) 69 return false; 70 71 /* In case zero "yes ranges" are supplied, any reg is OK */ 72 if (!table->n_yes_ranges) 73 return true; 74 75 return regmap_reg_in_ranges(reg, table->yes_ranges, 76 table->n_yes_ranges); 77 } 78 EXPORT_SYMBOL_GPL(regmap_check_range_table); 79 80 bool regmap_writeable(struct regmap *map, unsigned int reg) 81 { 82 if (map->max_register && reg > map->max_register) 83 return false; 84 85 if (map->writeable_reg) 86 return map->writeable_reg(map->dev, reg); 87 88 if (map->wr_table) 89 return regmap_check_range_table(map, reg, map->wr_table); 90 91 return true; 92 } 93 94 bool regmap_readable(struct regmap *map, unsigned int reg) 95 { 96 if (map->max_register && reg > map->max_register) 97 return false; 98 99 if (map->format.format_write) 100 return false; 101 102 if (map->readable_reg) 103 return map->readable_reg(map->dev, reg); 104 105 if (map->rd_table) 106 return regmap_check_range_table(map, reg, map->rd_table); 107 108 return true; 109 } 110 111 bool regmap_volatile(struct regmap *map, unsigned int reg) 112 { 113 if (!map->format.format_write && !regmap_readable(map, reg)) 114 return false; 115 116 if (map->volatile_reg) 117 return map->volatile_reg(map->dev, reg); 118 119 if (map->volatile_table) 120 return regmap_check_range_table(map, reg, map->volatile_table); 121 122 if (map->cache_ops) 123 return false; 124 else 125 return true; 126 } 127 128 bool regmap_precious(struct regmap *map, unsigned int reg) 129 { 130 if (!regmap_readable(map, reg)) 131 return false; 132 133 if (map->precious_reg) 134 return map->precious_reg(map->dev, reg); 135 136 if (map->precious_table) 137 return regmap_check_range_table(map, reg, map->precious_table); 138 139 return false; 140 } 141 142 static bool regmap_volatile_range(struct regmap *map, unsigned int reg, 143 size_t num) 144 { 145 unsigned int i; 146 147 for (i = 0; i < num; i++) 148 if (!regmap_volatile(map, reg + i)) 149 return false; 150 151 return true; 152 } 153 154 static void regmap_format_2_6_write(struct regmap *map, 155 unsigned int reg, unsigned int val) 156 { 157 u8 *out = map->work_buf; 158 159 *out = (reg << 6) | val; 160 } 161 162 static void regmap_format_4_12_write(struct regmap *map, 163 unsigned int reg, unsigned int val) 164 { 165 __be16 *out = map->work_buf; 166 *out = cpu_to_be16((reg << 12) | val); 167 } 168 169 static void regmap_format_7_9_write(struct regmap *map, 170 unsigned int reg, unsigned int val) 171 { 172 __be16 *out = map->work_buf; 173 *out = cpu_to_be16((reg << 9) | val); 174 } 175 176 static void regmap_format_10_14_write(struct regmap *map, 177 unsigned int reg, unsigned int val) 178 { 179 u8 *out = map->work_buf; 180 181 out[2] = val; 182 out[1] = (val >> 8) | (reg << 6); 183 out[0] = reg >> 2; 184 } 185 186 static void regmap_format_8(void *buf, unsigned int val, unsigned int shift) 187 { 188 u8 *b = buf; 189 190 b[0] = val << shift; 191 } 192 193 static void regmap_format_16_be(void *buf, unsigned int val, unsigned int shift) 194 { 195 __be16 *b = buf; 196 197 b[0] = cpu_to_be16(val << shift); 198 } 199 200 static void regmap_format_16_le(void *buf, unsigned int val, unsigned int shift) 201 { 202 __le16 *b = buf; 203 204 b[0] = cpu_to_le16(val << shift); 205 } 206 207 static void regmap_format_16_native(void *buf, unsigned int val, 208 unsigned int shift) 209 { 210 *(u16 *)buf = val << shift; 211 } 212 213 static void regmap_format_24(void *buf, unsigned int val, unsigned int shift) 214 { 215 u8 *b = buf; 216 217 val <<= shift; 218 219 b[0] = val >> 16; 220 b[1] = val >> 8; 221 b[2] = val; 222 } 223 224 static void regmap_format_32_be(void *buf, unsigned int val, unsigned int shift) 225 { 226 __be32 *b = buf; 227 228 b[0] = cpu_to_be32(val << shift); 229 } 230 231 static void regmap_format_32_le(void *buf, unsigned int val, unsigned int shift) 232 { 233 __le32 *b = buf; 234 235 b[0] = cpu_to_le32(val << shift); 236 } 237 238 static void regmap_format_32_native(void *buf, unsigned int val, 239 unsigned int shift) 240 { 241 *(u32 *)buf = val << shift; 242 } 243 244 static void regmap_parse_inplace_noop(void *buf) 245 { 246 } 247 248 static unsigned int regmap_parse_8(const void *buf) 249 { 250 const u8 *b = buf; 251 252 return b[0]; 253 } 254 255 static unsigned int regmap_parse_16_be(const void *buf) 256 { 257 const __be16 *b = buf; 258 259 return be16_to_cpu(b[0]); 260 } 261 262 static unsigned int regmap_parse_16_le(const void *buf) 263 { 264 const __le16 *b = buf; 265 266 return le16_to_cpu(b[0]); 267 } 268 269 static void regmap_parse_16_be_inplace(void *buf) 270 { 271 __be16 *b = buf; 272 273 b[0] = be16_to_cpu(b[0]); 274 } 275 276 static void regmap_parse_16_le_inplace(void *buf) 277 { 278 __le16 *b = buf; 279 280 b[0] = le16_to_cpu(b[0]); 281 } 282 283 static unsigned int regmap_parse_16_native(const void *buf) 284 { 285 return *(u16 *)buf; 286 } 287 288 static unsigned int regmap_parse_24(const void *buf) 289 { 290 const u8 *b = buf; 291 unsigned int ret = b[2]; 292 ret |= ((unsigned int)b[1]) << 8; 293 ret |= ((unsigned int)b[0]) << 16; 294 295 return ret; 296 } 297 298 static unsigned int regmap_parse_32_be(const void *buf) 299 { 300 const __be32 *b = buf; 301 302 return be32_to_cpu(b[0]); 303 } 304 305 static unsigned int regmap_parse_32_le(const void *buf) 306 { 307 const __le32 *b = buf; 308 309 return le32_to_cpu(b[0]); 310 } 311 312 static void regmap_parse_32_be_inplace(void *buf) 313 { 314 __be32 *b = buf; 315 316 b[0] = be32_to_cpu(b[0]); 317 } 318 319 static void regmap_parse_32_le_inplace(void *buf) 320 { 321 __le32 *b = buf; 322 323 b[0] = le32_to_cpu(b[0]); 324 } 325 326 static unsigned int regmap_parse_32_native(const void *buf) 327 { 328 return *(u32 *)buf; 329 } 330 331 static void regmap_lock_mutex(void *__map) 332 { 333 struct regmap *map = __map; 334 mutex_lock(&map->mutex); 335 } 336 337 static void regmap_unlock_mutex(void *__map) 338 { 339 struct regmap *map = __map; 340 mutex_unlock(&map->mutex); 341 } 342 343 static void regmap_lock_spinlock(void *__map) 344 __acquires(&map->spinlock) 345 { 346 struct regmap *map = __map; 347 unsigned long flags; 348 349 spin_lock_irqsave(&map->spinlock, flags); 350 map->spinlock_flags = flags; 351 } 352 353 static void regmap_unlock_spinlock(void *__map) 354 __releases(&map->spinlock) 355 { 356 struct regmap *map = __map; 357 spin_unlock_irqrestore(&map->spinlock, map->spinlock_flags); 358 } 359 360 static void dev_get_regmap_release(struct device *dev, void *res) 361 { 362 /* 363 * We don't actually have anything to do here; the goal here 364 * is not to manage the regmap but to provide a simple way to 365 * get the regmap back given a struct device. 366 */ 367 } 368 369 static bool _regmap_range_add(struct regmap *map, 370 struct regmap_range_node *data) 371 { 372 struct rb_root *root = &map->range_tree; 373 struct rb_node **new = &(root->rb_node), *parent = NULL; 374 375 while (*new) { 376 struct regmap_range_node *this = 377 container_of(*new, struct regmap_range_node, node); 378 379 parent = *new; 380 if (data->range_max < this->range_min) 381 new = &((*new)->rb_left); 382 else if (data->range_min > this->range_max) 383 new = &((*new)->rb_right); 384 else 385 return false; 386 } 387 388 rb_link_node(&data->node, parent, new); 389 rb_insert_color(&data->node, root); 390 391 return true; 392 } 393 394 static struct regmap_range_node *_regmap_range_lookup(struct regmap *map, 395 unsigned int reg) 396 { 397 struct rb_node *node = map->range_tree.rb_node; 398 399 while (node) { 400 struct regmap_range_node *this = 401 container_of(node, struct regmap_range_node, node); 402 403 if (reg < this->range_min) 404 node = node->rb_left; 405 else if (reg > this->range_max) 406 node = node->rb_right; 407 else 408 return this; 409 } 410 411 return NULL; 412 } 413 414 static void regmap_range_exit(struct regmap *map) 415 { 416 struct rb_node *next; 417 struct regmap_range_node *range_node; 418 419 next = rb_first(&map->range_tree); 420 while (next) { 421 range_node = rb_entry(next, struct regmap_range_node, node); 422 next = rb_next(&range_node->node); 423 rb_erase(&range_node->node, &map->range_tree); 424 kfree(range_node); 425 } 426 427 kfree(map->selector_work_buf); 428 } 429 430 int regmap_attach_dev(struct device *dev, struct regmap *map, 431 const struct regmap_config *config) 432 { 433 struct regmap **m; 434 435 map->dev = dev; 436 437 regmap_debugfs_init(map, config->name); 438 439 /* Add a devres resource for dev_get_regmap() */ 440 m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); 441 if (!m) { 442 regmap_debugfs_exit(map); 443 return -ENOMEM; 444 } 445 *m = map; 446 devres_add(dev, m); 447 448 return 0; 449 } 450 EXPORT_SYMBOL_GPL(regmap_attach_dev); 451 452 static enum regmap_endian regmap_get_reg_endian(const struct regmap_bus *bus, 453 const struct regmap_config *config) 454 { 455 enum regmap_endian endian; 456 457 /* Retrieve the endianness specification from the regmap config */ 458 endian = config->reg_format_endian; 459 460 /* If the regmap config specified a non-default value, use that */ 461 if (endian != REGMAP_ENDIAN_DEFAULT) 462 return endian; 463 464 /* Retrieve the endianness specification from the bus config */ 465 if (bus && bus->reg_format_endian_default) 466 endian = bus->reg_format_endian_default; 467 468 /* If the bus specified a non-default value, use that */ 469 if (endian != REGMAP_ENDIAN_DEFAULT) 470 return endian; 471 472 /* Use this if no other value was found */ 473 return REGMAP_ENDIAN_BIG; 474 } 475 476 static enum regmap_endian regmap_get_val_endian(struct device *dev, 477 const struct regmap_bus *bus, 478 const struct regmap_config *config) 479 { 480 struct device_node *np; 481 enum regmap_endian endian; 482 483 /* Retrieve the endianness specification from the regmap config */ 484 endian = config->val_format_endian; 485 486 /* If the regmap config specified a non-default value, use that */ 487 if (endian != REGMAP_ENDIAN_DEFAULT) 488 return endian; 489 490 /* If the dev and dev->of_node exist try to get endianness from DT */ 491 if (dev && dev->of_node) { 492 np = dev->of_node; 493 494 /* Parse the device's DT node for an endianness specification */ 495 if (of_property_read_bool(np, "big-endian")) 496 endian = REGMAP_ENDIAN_BIG; 497 else if (of_property_read_bool(np, "little-endian")) 498 endian = REGMAP_ENDIAN_LITTLE; 499 500 /* If the endianness was specified in DT, use that */ 501 if (endian != REGMAP_ENDIAN_DEFAULT) 502 return endian; 503 } 504 505 /* Retrieve the endianness specification from the bus config */ 506 if (bus && bus->val_format_endian_default) 507 endian = bus->val_format_endian_default; 508 509 /* If the bus specified a non-default value, use that */ 510 if (endian != REGMAP_ENDIAN_DEFAULT) 511 return endian; 512 513 /* Use this if no other value was found */ 514 return REGMAP_ENDIAN_BIG; 515 } 516 517 /** 518 * regmap_init(): Initialise register map 519 * 520 * @dev: Device that will be interacted with 521 * @bus: Bus-specific callbacks to use with device 522 * @bus_context: Data passed to bus-specific callbacks 523 * @config: Configuration for register map 524 * 525 * The return value will be an ERR_PTR() on error or a valid pointer to 526 * a struct regmap. This function should generally not be called 527 * directly, it should be called by bus-specific init functions. 528 */ 529 struct regmap *regmap_init(struct device *dev, 530 const struct regmap_bus *bus, 531 void *bus_context, 532 const struct regmap_config *config) 533 { 534 struct regmap *map; 535 int ret = -EINVAL; 536 enum regmap_endian reg_endian, val_endian; 537 int i, j; 538 539 if (!config) 540 goto err; 541 542 map = kzalloc(sizeof(*map), GFP_KERNEL); 543 if (map == NULL) { 544 ret = -ENOMEM; 545 goto err; 546 } 547 548 if (config->lock && config->unlock) { 549 map->lock = config->lock; 550 map->unlock = config->unlock; 551 map->lock_arg = config->lock_arg; 552 } else { 553 if ((bus && bus->fast_io) || 554 config->fast_io) { 555 spin_lock_init(&map->spinlock); 556 map->lock = regmap_lock_spinlock; 557 map->unlock = regmap_unlock_spinlock; 558 } else { 559 mutex_init(&map->mutex); 560 map->lock = regmap_lock_mutex; 561 map->unlock = regmap_unlock_mutex; 562 } 563 map->lock_arg = map; 564 } 565 map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8); 566 map->format.pad_bytes = config->pad_bits / 8; 567 map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8); 568 map->format.buf_size = DIV_ROUND_UP(config->reg_bits + 569 config->val_bits + config->pad_bits, 8); 570 map->reg_shift = config->pad_bits % 8; 571 if (config->reg_stride) 572 map->reg_stride = config->reg_stride; 573 else 574 map->reg_stride = 1; 575 map->use_single_rw = config->use_single_rw; 576 map->can_multi_write = config->can_multi_write; 577 map->dev = dev; 578 map->bus = bus; 579 map->bus_context = bus_context; 580 map->max_register = config->max_register; 581 map->wr_table = config->wr_table; 582 map->rd_table = config->rd_table; 583 map->volatile_table = config->volatile_table; 584 map->precious_table = config->precious_table; 585 map->writeable_reg = config->writeable_reg; 586 map->readable_reg = config->readable_reg; 587 map->volatile_reg = config->volatile_reg; 588 map->precious_reg = config->precious_reg; 589 map->cache_type = config->cache_type; 590 map->name = config->name; 591 592 spin_lock_init(&map->async_lock); 593 INIT_LIST_HEAD(&map->async_list); 594 INIT_LIST_HEAD(&map->async_free); 595 init_waitqueue_head(&map->async_waitq); 596 597 if (config->read_flag_mask || config->write_flag_mask) { 598 map->read_flag_mask = config->read_flag_mask; 599 map->write_flag_mask = config->write_flag_mask; 600 } else if (bus) { 601 map->read_flag_mask = bus->read_flag_mask; 602 } 603 604 if (!bus) { 605 map->reg_read = config->reg_read; 606 map->reg_write = config->reg_write; 607 608 map->defer_caching = false; 609 goto skip_format_initialization; 610 } else if (!bus->read || !bus->write) { 611 map->reg_read = _regmap_bus_reg_read; 612 map->reg_write = _regmap_bus_reg_write; 613 614 map->defer_caching = false; 615 goto skip_format_initialization; 616 } else { 617 map->reg_read = _regmap_bus_read; 618 } 619 620 reg_endian = regmap_get_reg_endian(bus, config); 621 val_endian = regmap_get_val_endian(dev, bus, config); 622 623 switch (config->reg_bits + map->reg_shift) { 624 case 2: 625 switch (config->val_bits) { 626 case 6: 627 map->format.format_write = regmap_format_2_6_write; 628 break; 629 default: 630 goto err_map; 631 } 632 break; 633 634 case 4: 635 switch (config->val_bits) { 636 case 12: 637 map->format.format_write = regmap_format_4_12_write; 638 break; 639 default: 640 goto err_map; 641 } 642 break; 643 644 case 7: 645 switch (config->val_bits) { 646 case 9: 647 map->format.format_write = regmap_format_7_9_write; 648 break; 649 default: 650 goto err_map; 651 } 652 break; 653 654 case 10: 655 switch (config->val_bits) { 656 case 14: 657 map->format.format_write = regmap_format_10_14_write; 658 break; 659 default: 660 goto err_map; 661 } 662 break; 663 664 case 8: 665 map->format.format_reg = regmap_format_8; 666 break; 667 668 case 16: 669 switch (reg_endian) { 670 case REGMAP_ENDIAN_BIG: 671 map->format.format_reg = regmap_format_16_be; 672 break; 673 case REGMAP_ENDIAN_NATIVE: 674 map->format.format_reg = regmap_format_16_native; 675 break; 676 default: 677 goto err_map; 678 } 679 break; 680 681 case 24: 682 if (reg_endian != REGMAP_ENDIAN_BIG) 683 goto err_map; 684 map->format.format_reg = regmap_format_24; 685 break; 686 687 case 32: 688 switch (reg_endian) { 689 case REGMAP_ENDIAN_BIG: 690 map->format.format_reg = regmap_format_32_be; 691 break; 692 case REGMAP_ENDIAN_NATIVE: 693 map->format.format_reg = regmap_format_32_native; 694 break; 695 default: 696 goto err_map; 697 } 698 break; 699 700 default: 701 goto err_map; 702 } 703 704 if (val_endian == REGMAP_ENDIAN_NATIVE) 705 map->format.parse_inplace = regmap_parse_inplace_noop; 706 707 switch (config->val_bits) { 708 case 8: 709 map->format.format_val = regmap_format_8; 710 map->format.parse_val = regmap_parse_8; 711 map->format.parse_inplace = regmap_parse_inplace_noop; 712 break; 713 case 16: 714 switch (val_endian) { 715 case REGMAP_ENDIAN_BIG: 716 map->format.format_val = regmap_format_16_be; 717 map->format.parse_val = regmap_parse_16_be; 718 map->format.parse_inplace = regmap_parse_16_be_inplace; 719 break; 720 case REGMAP_ENDIAN_LITTLE: 721 map->format.format_val = regmap_format_16_le; 722 map->format.parse_val = regmap_parse_16_le; 723 map->format.parse_inplace = regmap_parse_16_le_inplace; 724 break; 725 case REGMAP_ENDIAN_NATIVE: 726 map->format.format_val = regmap_format_16_native; 727 map->format.parse_val = regmap_parse_16_native; 728 break; 729 default: 730 goto err_map; 731 } 732 break; 733 case 24: 734 if (val_endian != REGMAP_ENDIAN_BIG) 735 goto err_map; 736 map->format.format_val = regmap_format_24; 737 map->format.parse_val = regmap_parse_24; 738 break; 739 case 32: 740 switch (val_endian) { 741 case REGMAP_ENDIAN_BIG: 742 map->format.format_val = regmap_format_32_be; 743 map->format.parse_val = regmap_parse_32_be; 744 map->format.parse_inplace = regmap_parse_32_be_inplace; 745 break; 746 case REGMAP_ENDIAN_LITTLE: 747 map->format.format_val = regmap_format_32_le; 748 map->format.parse_val = regmap_parse_32_le; 749 map->format.parse_inplace = regmap_parse_32_le_inplace; 750 break; 751 case REGMAP_ENDIAN_NATIVE: 752 map->format.format_val = regmap_format_32_native; 753 map->format.parse_val = regmap_parse_32_native; 754 break; 755 default: 756 goto err_map; 757 } 758 break; 759 } 760 761 if (map->format.format_write) { 762 if ((reg_endian != REGMAP_ENDIAN_BIG) || 763 (val_endian != REGMAP_ENDIAN_BIG)) 764 goto err_map; 765 map->use_single_rw = true; 766 } 767 768 if (!map->format.format_write && 769 !(map->format.format_reg && map->format.format_val)) 770 goto err_map; 771 772 map->work_buf = kzalloc(map->format.buf_size, GFP_KERNEL); 773 if (map->work_buf == NULL) { 774 ret = -ENOMEM; 775 goto err_map; 776 } 777 778 if (map->format.format_write) { 779 map->defer_caching = false; 780 map->reg_write = _regmap_bus_formatted_write; 781 } else if (map->format.format_val) { 782 map->defer_caching = true; 783 map->reg_write = _regmap_bus_raw_write; 784 } 785 786 skip_format_initialization: 787 788 map->range_tree = RB_ROOT; 789 for (i = 0; i < config->num_ranges; i++) { 790 const struct regmap_range_cfg *range_cfg = &config->ranges[i]; 791 struct regmap_range_node *new; 792 793 /* Sanity check */ 794 if (range_cfg->range_max < range_cfg->range_min) { 795 dev_err(map->dev, "Invalid range %d: %d < %d\n", i, 796 range_cfg->range_max, range_cfg->range_min); 797 goto err_range; 798 } 799 800 if (range_cfg->range_max > map->max_register) { 801 dev_err(map->dev, "Invalid range %d: %d > %d\n", i, 802 range_cfg->range_max, map->max_register); 803 goto err_range; 804 } 805 806 if (range_cfg->selector_reg > map->max_register) { 807 dev_err(map->dev, 808 "Invalid range %d: selector out of map\n", i); 809 goto err_range; 810 } 811 812 if (range_cfg->window_len == 0) { 813 dev_err(map->dev, "Invalid range %d: window_len 0\n", 814 i); 815 goto err_range; 816 } 817 818 /* Make sure, that this register range has no selector 819 or data window within its boundary */ 820 for (j = 0; j < config->num_ranges; j++) { 821 unsigned sel_reg = config->ranges[j].selector_reg; 822 unsigned win_min = config->ranges[j].window_start; 823 unsigned win_max = win_min + 824 config->ranges[j].window_len - 1; 825 826 /* Allow data window inside its own virtual range */ 827 if (j == i) 828 continue; 829 830 if (range_cfg->range_min <= sel_reg && 831 sel_reg <= range_cfg->range_max) { 832 dev_err(map->dev, 833 "Range %d: selector for %d in window\n", 834 i, j); 835 goto err_range; 836 } 837 838 if (!(win_max < range_cfg->range_min || 839 win_min > range_cfg->range_max)) { 840 dev_err(map->dev, 841 "Range %d: window for %d in window\n", 842 i, j); 843 goto err_range; 844 } 845 } 846 847 new = kzalloc(sizeof(*new), GFP_KERNEL); 848 if (new == NULL) { 849 ret = -ENOMEM; 850 goto err_range; 851 } 852 853 new->map = map; 854 new->name = range_cfg->name; 855 new->range_min = range_cfg->range_min; 856 new->range_max = range_cfg->range_max; 857 new->selector_reg = range_cfg->selector_reg; 858 new->selector_mask = range_cfg->selector_mask; 859 new->selector_shift = range_cfg->selector_shift; 860 new->window_start = range_cfg->window_start; 861 new->window_len = range_cfg->window_len; 862 863 if (!_regmap_range_add(map, new)) { 864 dev_err(map->dev, "Failed to add range %d\n", i); 865 kfree(new); 866 goto err_range; 867 } 868 869 if (map->selector_work_buf == NULL) { 870 map->selector_work_buf = 871 kzalloc(map->format.buf_size, GFP_KERNEL); 872 if (map->selector_work_buf == NULL) { 873 ret = -ENOMEM; 874 goto err_range; 875 } 876 } 877 } 878 879 ret = regcache_init(map, config); 880 if (ret != 0) 881 goto err_range; 882 883 if (dev) { 884 ret = regmap_attach_dev(dev, map, config); 885 if (ret != 0) 886 goto err_regcache; 887 } 888 889 return map; 890 891 err_regcache: 892 regcache_exit(map); 893 err_range: 894 regmap_range_exit(map); 895 kfree(map->work_buf); 896 err_map: 897 kfree(map); 898 err: 899 return ERR_PTR(ret); 900 } 901 EXPORT_SYMBOL_GPL(regmap_init); 902 903 static void devm_regmap_release(struct device *dev, void *res) 904 { 905 regmap_exit(*(struct regmap **)res); 906 } 907 908 /** 909 * devm_regmap_init(): Initialise managed register map 910 * 911 * @dev: Device that will be interacted with 912 * @bus: Bus-specific callbacks to use with device 913 * @bus_context: Data passed to bus-specific callbacks 914 * @config: Configuration for register map 915 * 916 * The return value will be an ERR_PTR() on error or a valid pointer 917 * to a struct regmap. This function should generally not be called 918 * directly, it should be called by bus-specific init functions. The 919 * map will be automatically freed by the device management code. 920 */ 921 struct regmap *devm_regmap_init(struct device *dev, 922 const struct regmap_bus *bus, 923 void *bus_context, 924 const struct regmap_config *config) 925 { 926 struct regmap **ptr, *regmap; 927 928 ptr = devres_alloc(devm_regmap_release, sizeof(*ptr), GFP_KERNEL); 929 if (!ptr) 930 return ERR_PTR(-ENOMEM); 931 932 regmap = regmap_init(dev, bus, bus_context, config); 933 if (!IS_ERR(regmap)) { 934 *ptr = regmap; 935 devres_add(dev, ptr); 936 } else { 937 devres_free(ptr); 938 } 939 940 return regmap; 941 } 942 EXPORT_SYMBOL_GPL(devm_regmap_init); 943 944 static void regmap_field_init(struct regmap_field *rm_field, 945 struct regmap *regmap, struct reg_field reg_field) 946 { 947 int field_bits = reg_field.msb - reg_field.lsb + 1; 948 rm_field->regmap = regmap; 949 rm_field->reg = reg_field.reg; 950 rm_field->shift = reg_field.lsb; 951 rm_field->mask = ((BIT(field_bits) - 1) << reg_field.lsb); 952 rm_field->id_size = reg_field.id_size; 953 rm_field->id_offset = reg_field.id_offset; 954 } 955 956 /** 957 * devm_regmap_field_alloc(): Allocate and initialise a register field 958 * in a register map. 959 * 960 * @dev: Device that will be interacted with 961 * @regmap: regmap bank in which this register field is located. 962 * @reg_field: Register field with in the bank. 963 * 964 * The return value will be an ERR_PTR() on error or a valid pointer 965 * to a struct regmap_field. The regmap_field will be automatically freed 966 * by the device management code. 967 */ 968 struct regmap_field *devm_regmap_field_alloc(struct device *dev, 969 struct regmap *regmap, struct reg_field reg_field) 970 { 971 struct regmap_field *rm_field = devm_kzalloc(dev, 972 sizeof(*rm_field), GFP_KERNEL); 973 if (!rm_field) 974 return ERR_PTR(-ENOMEM); 975 976 regmap_field_init(rm_field, regmap, reg_field); 977 978 return rm_field; 979 980 } 981 EXPORT_SYMBOL_GPL(devm_regmap_field_alloc); 982 983 /** 984 * devm_regmap_field_free(): Free register field allocated using 985 * devm_regmap_field_alloc. Usally drivers need not call this function, 986 * as the memory allocated via devm will be freed as per device-driver 987 * life-cyle. 988 * 989 * @dev: Device that will be interacted with 990 * @field: regmap field which should be freed. 991 */ 992 void devm_regmap_field_free(struct device *dev, 993 struct regmap_field *field) 994 { 995 devm_kfree(dev, field); 996 } 997 EXPORT_SYMBOL_GPL(devm_regmap_field_free); 998 999 /** 1000 * regmap_field_alloc(): Allocate and initialise a register field 1001 * in a register map. 1002 * 1003 * @regmap: regmap bank in which this register field is located. 1004 * @reg_field: Register field with in the bank. 1005 * 1006 * The return value will be an ERR_PTR() on error or a valid pointer 1007 * to a struct regmap_field. The regmap_field should be freed by the 1008 * user once its finished working with it using regmap_field_free(). 1009 */ 1010 struct regmap_field *regmap_field_alloc(struct regmap *regmap, 1011 struct reg_field reg_field) 1012 { 1013 struct regmap_field *rm_field = kzalloc(sizeof(*rm_field), GFP_KERNEL); 1014 1015 if (!rm_field) 1016 return ERR_PTR(-ENOMEM); 1017 1018 regmap_field_init(rm_field, regmap, reg_field); 1019 1020 return rm_field; 1021 } 1022 EXPORT_SYMBOL_GPL(regmap_field_alloc); 1023 1024 /** 1025 * regmap_field_free(): Free register field allocated using regmap_field_alloc 1026 * 1027 * @field: regmap field which should be freed. 1028 */ 1029 void regmap_field_free(struct regmap_field *field) 1030 { 1031 kfree(field); 1032 } 1033 EXPORT_SYMBOL_GPL(regmap_field_free); 1034 1035 /** 1036 * regmap_reinit_cache(): Reinitialise the current register cache 1037 * 1038 * @map: Register map to operate on. 1039 * @config: New configuration. Only the cache data will be used. 1040 * 1041 * Discard any existing register cache for the map and initialize a 1042 * new cache. This can be used to restore the cache to defaults or to 1043 * update the cache configuration to reflect runtime discovery of the 1044 * hardware. 1045 * 1046 * No explicit locking is done here, the user needs to ensure that 1047 * this function will not race with other calls to regmap. 1048 */ 1049 int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config) 1050 { 1051 regcache_exit(map); 1052 regmap_debugfs_exit(map); 1053 1054 map->max_register = config->max_register; 1055 map->writeable_reg = config->writeable_reg; 1056 map->readable_reg = config->readable_reg; 1057 map->volatile_reg = config->volatile_reg; 1058 map->precious_reg = config->precious_reg; 1059 map->cache_type = config->cache_type; 1060 1061 regmap_debugfs_init(map, config->name); 1062 1063 map->cache_bypass = false; 1064 map->cache_only = false; 1065 1066 return regcache_init(map, config); 1067 } 1068 EXPORT_SYMBOL_GPL(regmap_reinit_cache); 1069 1070 /** 1071 * regmap_exit(): Free a previously allocated register map 1072 */ 1073 void regmap_exit(struct regmap *map) 1074 { 1075 struct regmap_async *async; 1076 1077 regcache_exit(map); 1078 regmap_debugfs_exit(map); 1079 regmap_range_exit(map); 1080 if (map->bus && map->bus->free_context) 1081 map->bus->free_context(map->bus_context); 1082 kfree(map->work_buf); 1083 while (!list_empty(&map->async_free)) { 1084 async = list_first_entry_or_null(&map->async_free, 1085 struct regmap_async, 1086 list); 1087 list_del(&async->list); 1088 kfree(async->work_buf); 1089 kfree(async); 1090 } 1091 kfree(map); 1092 } 1093 EXPORT_SYMBOL_GPL(regmap_exit); 1094 1095 static int dev_get_regmap_match(struct device *dev, void *res, void *data) 1096 { 1097 struct regmap **r = res; 1098 if (!r || !*r) { 1099 WARN_ON(!r || !*r); 1100 return 0; 1101 } 1102 1103 /* If the user didn't specify a name match any */ 1104 if (data) 1105 return (*r)->name == data; 1106 else 1107 return 1; 1108 } 1109 1110 /** 1111 * dev_get_regmap(): Obtain the regmap (if any) for a device 1112 * 1113 * @dev: Device to retrieve the map for 1114 * @name: Optional name for the register map, usually NULL. 1115 * 1116 * Returns the regmap for the device if one is present, or NULL. If 1117 * name is specified then it must match the name specified when 1118 * registering the device, if it is NULL then the first regmap found 1119 * will be used. Devices with multiple register maps are very rare, 1120 * generic code should normally not need to specify a name. 1121 */ 1122 struct regmap *dev_get_regmap(struct device *dev, const char *name) 1123 { 1124 struct regmap **r = devres_find(dev, dev_get_regmap_release, 1125 dev_get_regmap_match, (void *)name); 1126 1127 if (!r) 1128 return NULL; 1129 return *r; 1130 } 1131 EXPORT_SYMBOL_GPL(dev_get_regmap); 1132 1133 /** 1134 * regmap_get_device(): Obtain the device from a regmap 1135 * 1136 * @map: Register map to operate on. 1137 * 1138 * Returns the underlying device that the regmap has been created for. 1139 */ 1140 struct device *regmap_get_device(struct regmap *map) 1141 { 1142 return map->dev; 1143 } 1144 EXPORT_SYMBOL_GPL(regmap_get_device); 1145 1146 static int _regmap_select_page(struct regmap *map, unsigned int *reg, 1147 struct regmap_range_node *range, 1148 unsigned int val_num) 1149 { 1150 void *orig_work_buf; 1151 unsigned int win_offset; 1152 unsigned int win_page; 1153 bool page_chg; 1154 int ret; 1155 1156 win_offset = (*reg - range->range_min) % range->window_len; 1157 win_page = (*reg - range->range_min) / range->window_len; 1158 1159 if (val_num > 1) { 1160 /* Bulk write shouldn't cross range boundary */ 1161 if (*reg + val_num - 1 > range->range_max) 1162 return -EINVAL; 1163 1164 /* ... or single page boundary */ 1165 if (val_num > range->window_len - win_offset) 1166 return -EINVAL; 1167 } 1168 1169 /* It is possible to have selector register inside data window. 1170 In that case, selector register is located on every page and 1171 it needs no page switching, when accessed alone. */ 1172 if (val_num > 1 || 1173 range->window_start + win_offset != range->selector_reg) { 1174 /* Use separate work_buf during page switching */ 1175 orig_work_buf = map->work_buf; 1176 map->work_buf = map->selector_work_buf; 1177 1178 ret = _regmap_update_bits(map, range->selector_reg, 1179 range->selector_mask, 1180 win_page << range->selector_shift, 1181 &page_chg); 1182 1183 map->work_buf = orig_work_buf; 1184 1185 if (ret != 0) 1186 return ret; 1187 } 1188 1189 *reg = range->window_start + win_offset; 1190 1191 return 0; 1192 } 1193 1194 int _regmap_raw_write(struct regmap *map, unsigned int reg, 1195 const void *val, size_t val_len) 1196 { 1197 struct regmap_range_node *range; 1198 unsigned long flags; 1199 u8 *u8 = map->work_buf; 1200 void *work_val = map->work_buf + map->format.reg_bytes + 1201 map->format.pad_bytes; 1202 void *buf; 1203 int ret = -ENOTSUPP; 1204 size_t len; 1205 int i; 1206 1207 WARN_ON(!map->bus); 1208 1209 /* Check for unwritable registers before we start */ 1210 if (map->writeable_reg) 1211 for (i = 0; i < val_len / map->format.val_bytes; i++) 1212 if (!map->writeable_reg(map->dev, 1213 reg + (i * map->reg_stride))) 1214 return -EINVAL; 1215 1216 if (!map->cache_bypass && map->format.parse_val) { 1217 unsigned int ival; 1218 int val_bytes = map->format.val_bytes; 1219 for (i = 0; i < val_len / val_bytes; i++) { 1220 ival = map->format.parse_val(val + (i * val_bytes)); 1221 ret = regcache_write(map, reg + (i * map->reg_stride), 1222 ival); 1223 if (ret) { 1224 dev_err(map->dev, 1225 "Error in caching of register: %x ret: %d\n", 1226 reg + i, ret); 1227 return ret; 1228 } 1229 } 1230 if (map->cache_only) { 1231 map->cache_dirty = true; 1232 return 0; 1233 } 1234 } 1235 1236 range = _regmap_range_lookup(map, reg); 1237 if (range) { 1238 int val_num = val_len / map->format.val_bytes; 1239 int win_offset = (reg - range->range_min) % range->window_len; 1240 int win_residue = range->window_len - win_offset; 1241 1242 /* If the write goes beyond the end of the window split it */ 1243 while (val_num > win_residue) { 1244 dev_dbg(map->dev, "Writing window %d/%zu\n", 1245 win_residue, val_len / map->format.val_bytes); 1246 ret = _regmap_raw_write(map, reg, val, win_residue * 1247 map->format.val_bytes); 1248 if (ret != 0) 1249 return ret; 1250 1251 reg += win_residue; 1252 val_num -= win_residue; 1253 val += win_residue * map->format.val_bytes; 1254 val_len -= win_residue * map->format.val_bytes; 1255 1256 win_offset = (reg - range->range_min) % 1257 range->window_len; 1258 win_residue = range->window_len - win_offset; 1259 } 1260 1261 ret = _regmap_select_page(map, ®, range, val_num); 1262 if (ret != 0) 1263 return ret; 1264 } 1265 1266 map->format.format_reg(map->work_buf, reg, map->reg_shift); 1267 1268 u8[0] |= map->write_flag_mask; 1269 1270 /* 1271 * Essentially all I/O mechanisms will be faster with a single 1272 * buffer to write. Since register syncs often generate raw 1273 * writes of single registers optimise that case. 1274 */ 1275 if (val != work_val && val_len == map->format.val_bytes) { 1276 memcpy(work_val, val, map->format.val_bytes); 1277 val = work_val; 1278 } 1279 1280 if (map->async && map->bus->async_write) { 1281 struct regmap_async *async; 1282 1283 trace_regmap_async_write_start(map->dev, reg, val_len); 1284 1285 spin_lock_irqsave(&map->async_lock, flags); 1286 async = list_first_entry_or_null(&map->async_free, 1287 struct regmap_async, 1288 list); 1289 if (async) 1290 list_del(&async->list); 1291 spin_unlock_irqrestore(&map->async_lock, flags); 1292 1293 if (!async) { 1294 async = map->bus->async_alloc(); 1295 if (!async) 1296 return -ENOMEM; 1297 1298 async->work_buf = kzalloc(map->format.buf_size, 1299 GFP_KERNEL | GFP_DMA); 1300 if (!async->work_buf) { 1301 kfree(async); 1302 return -ENOMEM; 1303 } 1304 } 1305 1306 async->map = map; 1307 1308 /* If the caller supplied the value we can use it safely. */ 1309 memcpy(async->work_buf, map->work_buf, map->format.pad_bytes + 1310 map->format.reg_bytes + map->format.val_bytes); 1311 1312 spin_lock_irqsave(&map->async_lock, flags); 1313 list_add_tail(&async->list, &map->async_list); 1314 spin_unlock_irqrestore(&map->async_lock, flags); 1315 1316 if (val != work_val) 1317 ret = map->bus->async_write(map->bus_context, 1318 async->work_buf, 1319 map->format.reg_bytes + 1320 map->format.pad_bytes, 1321 val, val_len, async); 1322 else 1323 ret = map->bus->async_write(map->bus_context, 1324 async->work_buf, 1325 map->format.reg_bytes + 1326 map->format.pad_bytes + 1327 val_len, NULL, 0, async); 1328 1329 if (ret != 0) { 1330 dev_err(map->dev, "Failed to schedule write: %d\n", 1331 ret); 1332 1333 spin_lock_irqsave(&map->async_lock, flags); 1334 list_move(&async->list, &map->async_free); 1335 spin_unlock_irqrestore(&map->async_lock, flags); 1336 } 1337 1338 return ret; 1339 } 1340 1341 trace_regmap_hw_write_start(map->dev, reg, 1342 val_len / map->format.val_bytes); 1343 1344 /* If we're doing a single register write we can probably just 1345 * send the work_buf directly, otherwise try to do a gather 1346 * write. 1347 */ 1348 if (val == work_val) 1349 ret = map->bus->write(map->bus_context, map->work_buf, 1350 map->format.reg_bytes + 1351 map->format.pad_bytes + 1352 val_len); 1353 else if (map->bus->gather_write) 1354 ret = map->bus->gather_write(map->bus_context, map->work_buf, 1355 map->format.reg_bytes + 1356 map->format.pad_bytes, 1357 val, val_len); 1358 1359 /* If that didn't work fall back on linearising by hand. */ 1360 if (ret == -ENOTSUPP) { 1361 len = map->format.reg_bytes + map->format.pad_bytes + val_len; 1362 buf = kzalloc(len, GFP_KERNEL); 1363 if (!buf) 1364 return -ENOMEM; 1365 1366 memcpy(buf, map->work_buf, map->format.reg_bytes); 1367 memcpy(buf + map->format.reg_bytes + map->format.pad_bytes, 1368 val, val_len); 1369 ret = map->bus->write(map->bus_context, buf, len); 1370 1371 kfree(buf); 1372 } 1373 1374 trace_regmap_hw_write_done(map->dev, reg, 1375 val_len / map->format.val_bytes); 1376 1377 return ret; 1378 } 1379 1380 /** 1381 * regmap_can_raw_write - Test if regmap_raw_write() is supported 1382 * 1383 * @map: Map to check. 1384 */ 1385 bool regmap_can_raw_write(struct regmap *map) 1386 { 1387 return map->bus && map->format.format_val && map->format.format_reg; 1388 } 1389 EXPORT_SYMBOL_GPL(regmap_can_raw_write); 1390 1391 static int _regmap_bus_formatted_write(void *context, unsigned int reg, 1392 unsigned int val) 1393 { 1394 int ret; 1395 struct regmap_range_node *range; 1396 struct regmap *map = context; 1397 1398 WARN_ON(!map->bus || !map->format.format_write); 1399 1400 range = _regmap_range_lookup(map, reg); 1401 if (range) { 1402 ret = _regmap_select_page(map, ®, range, 1); 1403 if (ret != 0) 1404 return ret; 1405 } 1406 1407 map->format.format_write(map, reg, val); 1408 1409 trace_regmap_hw_write_start(map->dev, reg, 1); 1410 1411 ret = map->bus->write(map->bus_context, map->work_buf, 1412 map->format.buf_size); 1413 1414 trace_regmap_hw_write_done(map->dev, reg, 1); 1415 1416 return ret; 1417 } 1418 1419 static int _regmap_bus_reg_write(void *context, unsigned int reg, 1420 unsigned int val) 1421 { 1422 struct regmap *map = context; 1423 1424 return map->bus->reg_write(map->bus_context, reg, val); 1425 } 1426 1427 static int _regmap_bus_raw_write(void *context, unsigned int reg, 1428 unsigned int val) 1429 { 1430 struct regmap *map = context; 1431 1432 WARN_ON(!map->bus || !map->format.format_val); 1433 1434 map->format.format_val(map->work_buf + map->format.reg_bytes 1435 + map->format.pad_bytes, val, 0); 1436 return _regmap_raw_write(map, reg, 1437 map->work_buf + 1438 map->format.reg_bytes + 1439 map->format.pad_bytes, 1440 map->format.val_bytes); 1441 } 1442 1443 static inline void *_regmap_map_get_context(struct regmap *map) 1444 { 1445 return (map->bus) ? map : map->bus_context; 1446 } 1447 1448 int _regmap_write(struct regmap *map, unsigned int reg, 1449 unsigned int val) 1450 { 1451 int ret; 1452 void *context = _regmap_map_get_context(map); 1453 1454 if (!regmap_writeable(map, reg)) 1455 return -EIO; 1456 1457 if (!map->cache_bypass && !map->defer_caching) { 1458 ret = regcache_write(map, reg, val); 1459 if (ret != 0) 1460 return ret; 1461 if (map->cache_only) { 1462 map->cache_dirty = true; 1463 return 0; 1464 } 1465 } 1466 1467 #ifdef LOG_DEVICE 1468 if (map->dev && strcmp(dev_name(map->dev), LOG_DEVICE) == 0) 1469 dev_info(map->dev, "%x <= %x\n", reg, val); 1470 #endif 1471 1472 trace_regmap_reg_write(map->dev, reg, val); 1473 1474 return map->reg_write(context, reg, val); 1475 } 1476 1477 /** 1478 * regmap_write(): Write a value to a single register 1479 * 1480 * @map: Register map to write to 1481 * @reg: Register to write to 1482 * @val: Value to be written 1483 * 1484 * A value of zero will be returned on success, a negative errno will 1485 * be returned in error cases. 1486 */ 1487 int regmap_write(struct regmap *map, unsigned int reg, unsigned int val) 1488 { 1489 int ret; 1490 1491 if (reg % map->reg_stride) 1492 return -EINVAL; 1493 1494 map->lock(map->lock_arg); 1495 1496 ret = _regmap_write(map, reg, val); 1497 1498 map->unlock(map->lock_arg); 1499 1500 return ret; 1501 } 1502 EXPORT_SYMBOL_GPL(regmap_write); 1503 1504 /** 1505 * regmap_write_async(): Write a value to a single register asynchronously 1506 * 1507 * @map: Register map to write to 1508 * @reg: Register to write to 1509 * @val: Value to be written 1510 * 1511 * A value of zero will be returned on success, a negative errno will 1512 * be returned in error cases. 1513 */ 1514 int regmap_write_async(struct regmap *map, unsigned int reg, unsigned int val) 1515 { 1516 int ret; 1517 1518 if (reg % map->reg_stride) 1519 return -EINVAL; 1520 1521 map->lock(map->lock_arg); 1522 1523 map->async = true; 1524 1525 ret = _regmap_write(map, reg, val); 1526 1527 map->async = false; 1528 1529 map->unlock(map->lock_arg); 1530 1531 return ret; 1532 } 1533 EXPORT_SYMBOL_GPL(regmap_write_async); 1534 1535 /** 1536 * regmap_raw_write(): Write raw values to one or more registers 1537 * 1538 * @map: Register map to write to 1539 * @reg: Initial register to write to 1540 * @val: Block of data to be written, laid out for direct transmission to the 1541 * device 1542 * @val_len: Length of data pointed to by val. 1543 * 1544 * This function is intended to be used for things like firmware 1545 * download where a large block of data needs to be transferred to the 1546 * device. No formatting will be done on the data provided. 1547 * 1548 * A value of zero will be returned on success, a negative errno will 1549 * be returned in error cases. 1550 */ 1551 int regmap_raw_write(struct regmap *map, unsigned int reg, 1552 const void *val, size_t val_len) 1553 { 1554 int ret; 1555 1556 if (!regmap_can_raw_write(map)) 1557 return -EINVAL; 1558 if (val_len % map->format.val_bytes) 1559 return -EINVAL; 1560 1561 map->lock(map->lock_arg); 1562 1563 ret = _regmap_raw_write(map, reg, val, val_len); 1564 1565 map->unlock(map->lock_arg); 1566 1567 return ret; 1568 } 1569 EXPORT_SYMBOL_GPL(regmap_raw_write); 1570 1571 /** 1572 * regmap_field_write(): Write a value to a single register field 1573 * 1574 * @field: Register field to write to 1575 * @val: Value to be written 1576 * 1577 * A value of zero will be returned on success, a negative errno will 1578 * be returned in error cases. 1579 */ 1580 int regmap_field_write(struct regmap_field *field, unsigned int val) 1581 { 1582 return regmap_update_bits(field->regmap, field->reg, 1583 field->mask, val << field->shift); 1584 } 1585 EXPORT_SYMBOL_GPL(regmap_field_write); 1586 1587 /** 1588 * regmap_field_update_bits(): Perform a read/modify/write cycle 1589 * on the register field 1590 * 1591 * @field: Register field to write to 1592 * @mask: Bitmask to change 1593 * @val: Value to be written 1594 * 1595 * A value of zero will be returned on success, a negative errno will 1596 * be returned in error cases. 1597 */ 1598 int regmap_field_update_bits(struct regmap_field *field, unsigned int mask, unsigned int val) 1599 { 1600 mask = (mask << field->shift) & field->mask; 1601 1602 return regmap_update_bits(field->regmap, field->reg, 1603 mask, val << field->shift); 1604 } 1605 EXPORT_SYMBOL_GPL(regmap_field_update_bits); 1606 1607 /** 1608 * regmap_fields_write(): Write a value to a single register field with port ID 1609 * 1610 * @field: Register field to write to 1611 * @id: port ID 1612 * @val: Value to be written 1613 * 1614 * A value of zero will be returned on success, a negative errno will 1615 * be returned in error cases. 1616 */ 1617 int regmap_fields_write(struct regmap_field *field, unsigned int id, 1618 unsigned int val) 1619 { 1620 if (id >= field->id_size) 1621 return -EINVAL; 1622 1623 return regmap_update_bits(field->regmap, 1624 field->reg + (field->id_offset * id), 1625 field->mask, val << field->shift); 1626 } 1627 EXPORT_SYMBOL_GPL(regmap_fields_write); 1628 1629 /** 1630 * regmap_fields_update_bits(): Perform a read/modify/write cycle 1631 * on the register field 1632 * 1633 * @field: Register field to write to 1634 * @id: port ID 1635 * @mask: Bitmask to change 1636 * @val: Value to be written 1637 * 1638 * A value of zero will be returned on success, a negative errno will 1639 * be returned in error cases. 1640 */ 1641 int regmap_fields_update_bits(struct regmap_field *field, unsigned int id, 1642 unsigned int mask, unsigned int val) 1643 { 1644 if (id >= field->id_size) 1645 return -EINVAL; 1646 1647 mask = (mask << field->shift) & field->mask; 1648 1649 return regmap_update_bits(field->regmap, 1650 field->reg + (field->id_offset * id), 1651 mask, val << field->shift); 1652 } 1653 EXPORT_SYMBOL_GPL(regmap_fields_update_bits); 1654 1655 /* 1656 * regmap_bulk_write(): Write multiple registers to the device 1657 * 1658 * @map: Register map to write to 1659 * @reg: First register to be write from 1660 * @val: Block of data to be written, in native register size for device 1661 * @val_count: Number of registers to write 1662 * 1663 * This function is intended to be used for writing a large block of 1664 * data to the device either in single transfer or multiple transfer. 1665 * 1666 * A value of zero will be returned on success, a negative errno will 1667 * be returned in error cases. 1668 */ 1669 int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, 1670 size_t val_count) 1671 { 1672 int ret = 0, i; 1673 size_t val_bytes = map->format.val_bytes; 1674 1675 if (map->bus && !map->format.parse_inplace) 1676 return -EINVAL; 1677 if (reg % map->reg_stride) 1678 return -EINVAL; 1679 1680 /* 1681 * Some devices don't support bulk write, for 1682 * them we have a series of single write operations. 1683 */ 1684 if (!map->bus || map->use_single_rw) { 1685 map->lock(map->lock_arg); 1686 for (i = 0; i < val_count; i++) { 1687 unsigned int ival; 1688 1689 switch (val_bytes) { 1690 case 1: 1691 ival = *(u8 *)(val + (i * val_bytes)); 1692 break; 1693 case 2: 1694 ival = *(u16 *)(val + (i * val_bytes)); 1695 break; 1696 case 4: 1697 ival = *(u32 *)(val + (i * val_bytes)); 1698 break; 1699 #ifdef CONFIG_64BIT 1700 case 8: 1701 ival = *(u64 *)(val + (i * val_bytes)); 1702 break; 1703 #endif 1704 default: 1705 ret = -EINVAL; 1706 goto out; 1707 } 1708 1709 ret = _regmap_write(map, reg + (i * map->reg_stride), 1710 ival); 1711 if (ret != 0) 1712 goto out; 1713 } 1714 out: 1715 map->unlock(map->lock_arg); 1716 } else { 1717 void *wval; 1718 1719 if (!val_count) 1720 return -EINVAL; 1721 1722 wval = kmemdup(val, val_count * val_bytes, GFP_KERNEL); 1723 if (!wval) { 1724 dev_err(map->dev, "Error in memory allocation\n"); 1725 return -ENOMEM; 1726 } 1727 for (i = 0; i < val_count * val_bytes; i += val_bytes) 1728 map->format.parse_inplace(wval + i); 1729 1730 map->lock(map->lock_arg); 1731 ret = _regmap_raw_write(map, reg, wval, val_bytes * val_count); 1732 map->unlock(map->lock_arg); 1733 1734 kfree(wval); 1735 } 1736 return ret; 1737 } 1738 EXPORT_SYMBOL_GPL(regmap_bulk_write); 1739 1740 /* 1741 * _regmap_raw_multi_reg_write() 1742 * 1743 * the (register,newvalue) pairs in regs have not been formatted, but 1744 * they are all in the same page and have been changed to being page 1745 * relative. The page register has been written if that was neccessary. 1746 */ 1747 static int _regmap_raw_multi_reg_write(struct regmap *map, 1748 const struct reg_default *regs, 1749 size_t num_regs) 1750 { 1751 int ret; 1752 void *buf; 1753 int i; 1754 u8 *u8; 1755 size_t val_bytes = map->format.val_bytes; 1756 size_t reg_bytes = map->format.reg_bytes; 1757 size_t pad_bytes = map->format.pad_bytes; 1758 size_t pair_size = reg_bytes + pad_bytes + val_bytes; 1759 size_t len = pair_size * num_regs; 1760 1761 if (!len) 1762 return -EINVAL; 1763 1764 buf = kzalloc(len, GFP_KERNEL); 1765 if (!buf) 1766 return -ENOMEM; 1767 1768 /* We have to linearise by hand. */ 1769 1770 u8 = buf; 1771 1772 for (i = 0; i < num_regs; i++) { 1773 int reg = regs[i].reg; 1774 int val = regs[i].def; 1775 trace_regmap_hw_write_start(map->dev, reg, 1); 1776 map->format.format_reg(u8, reg, map->reg_shift); 1777 u8 += reg_bytes + pad_bytes; 1778 map->format.format_val(u8, val, 0); 1779 u8 += val_bytes; 1780 } 1781 u8 = buf; 1782 *u8 |= map->write_flag_mask; 1783 1784 ret = map->bus->write(map->bus_context, buf, len); 1785 1786 kfree(buf); 1787 1788 for (i = 0; i < num_regs; i++) { 1789 int reg = regs[i].reg; 1790 trace_regmap_hw_write_done(map->dev, reg, 1); 1791 } 1792 return ret; 1793 } 1794 1795 static unsigned int _regmap_register_page(struct regmap *map, 1796 unsigned int reg, 1797 struct regmap_range_node *range) 1798 { 1799 unsigned int win_page = (reg - range->range_min) / range->window_len; 1800 1801 return win_page; 1802 } 1803 1804 static int _regmap_range_multi_paged_reg_write(struct regmap *map, 1805 struct reg_default *regs, 1806 size_t num_regs) 1807 { 1808 int ret; 1809 int i, n; 1810 struct reg_default *base; 1811 unsigned int this_page = 0; 1812 /* 1813 * the set of registers are not neccessarily in order, but 1814 * since the order of write must be preserved this algorithm 1815 * chops the set each time the page changes 1816 */ 1817 base = regs; 1818 for (i = 0, n = 0; i < num_regs; i++, n++) { 1819 unsigned int reg = regs[i].reg; 1820 struct regmap_range_node *range; 1821 1822 range = _regmap_range_lookup(map, reg); 1823 if (range) { 1824 unsigned int win_page = _regmap_register_page(map, reg, 1825 range); 1826 1827 if (i == 0) 1828 this_page = win_page; 1829 if (win_page != this_page) { 1830 this_page = win_page; 1831 ret = _regmap_raw_multi_reg_write(map, base, n); 1832 if (ret != 0) 1833 return ret; 1834 base += n; 1835 n = 0; 1836 } 1837 ret = _regmap_select_page(map, &base[n].reg, range, 1); 1838 if (ret != 0) 1839 return ret; 1840 } 1841 } 1842 if (n > 0) 1843 return _regmap_raw_multi_reg_write(map, base, n); 1844 return 0; 1845 } 1846 1847 static int _regmap_multi_reg_write(struct regmap *map, 1848 const struct reg_default *regs, 1849 size_t num_regs) 1850 { 1851 int i; 1852 int ret; 1853 1854 if (!map->can_multi_write) { 1855 for (i = 0; i < num_regs; i++) { 1856 ret = _regmap_write(map, regs[i].reg, regs[i].def); 1857 if (ret != 0) 1858 return ret; 1859 } 1860 return 0; 1861 } 1862 1863 if (!map->format.parse_inplace) 1864 return -EINVAL; 1865 1866 if (map->writeable_reg) 1867 for (i = 0; i < num_regs; i++) { 1868 int reg = regs[i].reg; 1869 if (!map->writeable_reg(map->dev, reg)) 1870 return -EINVAL; 1871 if (reg % map->reg_stride) 1872 return -EINVAL; 1873 } 1874 1875 if (!map->cache_bypass) { 1876 for (i = 0; i < num_regs; i++) { 1877 unsigned int val = regs[i].def; 1878 unsigned int reg = regs[i].reg; 1879 ret = regcache_write(map, reg, val); 1880 if (ret) { 1881 dev_err(map->dev, 1882 "Error in caching of register: %x ret: %d\n", 1883 reg, ret); 1884 return ret; 1885 } 1886 } 1887 if (map->cache_only) { 1888 map->cache_dirty = true; 1889 return 0; 1890 } 1891 } 1892 1893 WARN_ON(!map->bus); 1894 1895 for (i = 0; i < num_regs; i++) { 1896 unsigned int reg = regs[i].reg; 1897 struct regmap_range_node *range; 1898 range = _regmap_range_lookup(map, reg); 1899 if (range) { 1900 size_t len = sizeof(struct reg_default)*num_regs; 1901 struct reg_default *base = kmemdup(regs, len, 1902 GFP_KERNEL); 1903 if (!base) 1904 return -ENOMEM; 1905 ret = _regmap_range_multi_paged_reg_write(map, base, 1906 num_regs); 1907 kfree(base); 1908 1909 return ret; 1910 } 1911 } 1912 return _regmap_raw_multi_reg_write(map, regs, num_regs); 1913 } 1914 1915 /* 1916 * regmap_multi_reg_write(): Write multiple registers to the device 1917 * 1918 * where the set of register,value pairs are supplied in any order, 1919 * possibly not all in a single range. 1920 * 1921 * @map: Register map to write to 1922 * @regs: Array of structures containing register,value to be written 1923 * @num_regs: Number of registers to write 1924 * 1925 * The 'normal' block write mode will send ultimately send data on the 1926 * target bus as R,V1,V2,V3,..,Vn where successively higer registers are 1927 * addressed. However, this alternative block multi write mode will send 1928 * the data as R1,V1,R2,V2,..,Rn,Vn on the target bus. The target device 1929 * must of course support the mode. 1930 * 1931 * A value of zero will be returned on success, a negative errno will be 1932 * returned in error cases. 1933 */ 1934 int regmap_multi_reg_write(struct regmap *map, const struct reg_default *regs, 1935 int num_regs) 1936 { 1937 int ret; 1938 1939 map->lock(map->lock_arg); 1940 1941 ret = _regmap_multi_reg_write(map, regs, num_regs); 1942 1943 map->unlock(map->lock_arg); 1944 1945 return ret; 1946 } 1947 EXPORT_SYMBOL_GPL(regmap_multi_reg_write); 1948 1949 /* 1950 * regmap_multi_reg_write_bypassed(): Write multiple registers to the 1951 * device but not the cache 1952 * 1953 * where the set of register are supplied in any order 1954 * 1955 * @map: Register map to write to 1956 * @regs: Array of structures containing register,value to be written 1957 * @num_regs: Number of registers to write 1958 * 1959 * This function is intended to be used for writing a large block of data 1960 * atomically to the device in single transfer for those I2C client devices 1961 * that implement this alternative block write mode. 1962 * 1963 * A value of zero will be returned on success, a negative errno will 1964 * be returned in error cases. 1965 */ 1966 int regmap_multi_reg_write_bypassed(struct regmap *map, 1967 const struct reg_default *regs, 1968 int num_regs) 1969 { 1970 int ret; 1971 bool bypass; 1972 1973 map->lock(map->lock_arg); 1974 1975 bypass = map->cache_bypass; 1976 map->cache_bypass = true; 1977 1978 ret = _regmap_multi_reg_write(map, regs, num_regs); 1979 1980 map->cache_bypass = bypass; 1981 1982 map->unlock(map->lock_arg); 1983 1984 return ret; 1985 } 1986 EXPORT_SYMBOL_GPL(regmap_multi_reg_write_bypassed); 1987 1988 /** 1989 * regmap_raw_write_async(): Write raw values to one or more registers 1990 * asynchronously 1991 * 1992 * @map: Register map to write to 1993 * @reg: Initial register to write to 1994 * @val: Block of data to be written, laid out for direct transmission to the 1995 * device. Must be valid until regmap_async_complete() is called. 1996 * @val_len: Length of data pointed to by val. 1997 * 1998 * This function is intended to be used for things like firmware 1999 * download where a large block of data needs to be transferred to the 2000 * device. No formatting will be done on the data provided. 2001 * 2002 * If supported by the underlying bus the write will be scheduled 2003 * asynchronously, helping maximise I/O speed on higher speed buses 2004 * like SPI. regmap_async_complete() can be called to ensure that all 2005 * asynchrnous writes have been completed. 2006 * 2007 * A value of zero will be returned on success, a negative errno will 2008 * be returned in error cases. 2009 */ 2010 int regmap_raw_write_async(struct regmap *map, unsigned int reg, 2011 const void *val, size_t val_len) 2012 { 2013 int ret; 2014 2015 if (val_len % map->format.val_bytes) 2016 return -EINVAL; 2017 if (reg % map->reg_stride) 2018 return -EINVAL; 2019 2020 map->lock(map->lock_arg); 2021 2022 map->async = true; 2023 2024 ret = _regmap_raw_write(map, reg, val, val_len); 2025 2026 map->async = false; 2027 2028 map->unlock(map->lock_arg); 2029 2030 return ret; 2031 } 2032 EXPORT_SYMBOL_GPL(regmap_raw_write_async); 2033 2034 static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val, 2035 unsigned int val_len) 2036 { 2037 struct regmap_range_node *range; 2038 u8 *u8 = map->work_buf; 2039 int ret; 2040 2041 WARN_ON(!map->bus); 2042 2043 range = _regmap_range_lookup(map, reg); 2044 if (range) { 2045 ret = _regmap_select_page(map, ®, range, 2046 val_len / map->format.val_bytes); 2047 if (ret != 0) 2048 return ret; 2049 } 2050 2051 map->format.format_reg(map->work_buf, reg, map->reg_shift); 2052 2053 /* 2054 * Some buses or devices flag reads by setting the high bits in the 2055 * register addresss; since it's always the high bits for all 2056 * current formats we can do this here rather than in 2057 * formatting. This may break if we get interesting formats. 2058 */ 2059 u8[0] |= map->read_flag_mask; 2060 2061 trace_regmap_hw_read_start(map->dev, reg, 2062 val_len / map->format.val_bytes); 2063 2064 ret = map->bus->read(map->bus_context, map->work_buf, 2065 map->format.reg_bytes + map->format.pad_bytes, 2066 val, val_len); 2067 2068 trace_regmap_hw_read_done(map->dev, reg, 2069 val_len / map->format.val_bytes); 2070 2071 return ret; 2072 } 2073 2074 static int _regmap_bus_reg_read(void *context, unsigned int reg, 2075 unsigned int *val) 2076 { 2077 struct regmap *map = context; 2078 2079 return map->bus->reg_read(map->bus_context, reg, val); 2080 } 2081 2082 static int _regmap_bus_read(void *context, unsigned int reg, 2083 unsigned int *val) 2084 { 2085 int ret; 2086 struct regmap *map = context; 2087 2088 if (!map->format.parse_val) 2089 return -EINVAL; 2090 2091 ret = _regmap_raw_read(map, reg, map->work_buf, map->format.val_bytes); 2092 if (ret == 0) 2093 *val = map->format.parse_val(map->work_buf); 2094 2095 return ret; 2096 } 2097 2098 static int _regmap_read(struct regmap *map, unsigned int reg, 2099 unsigned int *val) 2100 { 2101 int ret; 2102 void *context = _regmap_map_get_context(map); 2103 2104 WARN_ON(!map->reg_read); 2105 2106 if (!map->cache_bypass) { 2107 ret = regcache_read(map, reg, val); 2108 if (ret == 0) 2109 return 0; 2110 } 2111 2112 if (map->cache_only) 2113 return -EBUSY; 2114 2115 if (!regmap_readable(map, reg)) 2116 return -EIO; 2117 2118 ret = map->reg_read(context, reg, val); 2119 if (ret == 0) { 2120 #ifdef LOG_DEVICE 2121 if (map->dev && strcmp(dev_name(map->dev), LOG_DEVICE) == 0) 2122 dev_info(map->dev, "%x => %x\n", reg, *val); 2123 #endif 2124 2125 trace_regmap_reg_read(map->dev, reg, *val); 2126 2127 if (!map->cache_bypass) 2128 regcache_write(map, reg, *val); 2129 } 2130 2131 return ret; 2132 } 2133 2134 /** 2135 * regmap_read(): Read a value from a single register 2136 * 2137 * @map: Register map to read from 2138 * @reg: Register to be read from 2139 * @val: Pointer to store read value 2140 * 2141 * A value of zero will be returned on success, a negative errno will 2142 * be returned in error cases. 2143 */ 2144 int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val) 2145 { 2146 int ret; 2147 2148 if (reg % map->reg_stride) 2149 return -EINVAL; 2150 2151 map->lock(map->lock_arg); 2152 2153 ret = _regmap_read(map, reg, val); 2154 2155 map->unlock(map->lock_arg); 2156 2157 return ret; 2158 } 2159 EXPORT_SYMBOL_GPL(regmap_read); 2160 2161 /** 2162 * regmap_raw_read(): Read raw data from the device 2163 * 2164 * @map: Register map to read from 2165 * @reg: First register to be read from 2166 * @val: Pointer to store read value 2167 * @val_len: Size of data to read 2168 * 2169 * A value of zero will be returned on success, a negative errno will 2170 * be returned in error cases. 2171 */ 2172 int regmap_raw_read(struct regmap *map, unsigned int reg, void *val, 2173 size_t val_len) 2174 { 2175 size_t val_bytes = map->format.val_bytes; 2176 size_t val_count = val_len / val_bytes; 2177 unsigned int v; 2178 int ret, i; 2179 2180 if (!map->bus) 2181 return -EINVAL; 2182 if (val_len % map->format.val_bytes) 2183 return -EINVAL; 2184 if (reg % map->reg_stride) 2185 return -EINVAL; 2186 2187 map->lock(map->lock_arg); 2188 2189 if (regmap_volatile_range(map, reg, val_count) || map->cache_bypass || 2190 map->cache_type == REGCACHE_NONE) { 2191 /* Physical block read if there's no cache involved */ 2192 ret = _regmap_raw_read(map, reg, val, val_len); 2193 2194 } else { 2195 /* Otherwise go word by word for the cache; should be low 2196 * cost as we expect to hit the cache. 2197 */ 2198 for (i = 0; i < val_count; i++) { 2199 ret = _regmap_read(map, reg + (i * map->reg_stride), 2200 &v); 2201 if (ret != 0) 2202 goto out; 2203 2204 map->format.format_val(val + (i * val_bytes), v, 0); 2205 } 2206 } 2207 2208 out: 2209 map->unlock(map->lock_arg); 2210 2211 return ret; 2212 } 2213 EXPORT_SYMBOL_GPL(regmap_raw_read); 2214 2215 /** 2216 * regmap_field_read(): Read a value to a single register field 2217 * 2218 * @field: Register field to read from 2219 * @val: Pointer to store read value 2220 * 2221 * A value of zero will be returned on success, a negative errno will 2222 * be returned in error cases. 2223 */ 2224 int regmap_field_read(struct regmap_field *field, unsigned int *val) 2225 { 2226 int ret; 2227 unsigned int reg_val; 2228 ret = regmap_read(field->regmap, field->reg, ®_val); 2229 if (ret != 0) 2230 return ret; 2231 2232 reg_val &= field->mask; 2233 reg_val >>= field->shift; 2234 *val = reg_val; 2235 2236 return ret; 2237 } 2238 EXPORT_SYMBOL_GPL(regmap_field_read); 2239 2240 /** 2241 * regmap_fields_read(): Read a value to a single register field with port ID 2242 * 2243 * @field: Register field to read from 2244 * @id: port ID 2245 * @val: Pointer to store read value 2246 * 2247 * A value of zero will be returned on success, a negative errno will 2248 * be returned in error cases. 2249 */ 2250 int regmap_fields_read(struct regmap_field *field, unsigned int id, 2251 unsigned int *val) 2252 { 2253 int ret; 2254 unsigned int reg_val; 2255 2256 if (id >= field->id_size) 2257 return -EINVAL; 2258 2259 ret = regmap_read(field->regmap, 2260 field->reg + (field->id_offset * id), 2261 ®_val); 2262 if (ret != 0) 2263 return ret; 2264 2265 reg_val &= field->mask; 2266 reg_val >>= field->shift; 2267 *val = reg_val; 2268 2269 return ret; 2270 } 2271 EXPORT_SYMBOL_GPL(regmap_fields_read); 2272 2273 /** 2274 * regmap_bulk_read(): Read multiple registers from the device 2275 * 2276 * @map: Register map to read from 2277 * @reg: First register to be read from 2278 * @val: Pointer to store read value, in native register size for device 2279 * @val_count: Number of registers to read 2280 * 2281 * A value of zero will be returned on success, a negative errno will 2282 * be returned in error cases. 2283 */ 2284 int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val, 2285 size_t val_count) 2286 { 2287 int ret, i; 2288 size_t val_bytes = map->format.val_bytes; 2289 bool vol = regmap_volatile_range(map, reg, val_count); 2290 2291 if (reg % map->reg_stride) 2292 return -EINVAL; 2293 2294 if (map->bus && map->format.parse_inplace && (vol || map->cache_type == REGCACHE_NONE)) { 2295 /* 2296 * Some devices does not support bulk read, for 2297 * them we have a series of single read operations. 2298 */ 2299 if (map->use_single_rw) { 2300 for (i = 0; i < val_count; i++) { 2301 ret = regmap_raw_read(map, 2302 reg + (i * map->reg_stride), 2303 val + (i * val_bytes), 2304 val_bytes); 2305 if (ret != 0) 2306 return ret; 2307 } 2308 } else { 2309 ret = regmap_raw_read(map, reg, val, 2310 val_bytes * val_count); 2311 if (ret != 0) 2312 return ret; 2313 } 2314 2315 for (i = 0; i < val_count * val_bytes; i += val_bytes) 2316 map->format.parse_inplace(val + i); 2317 } else { 2318 for (i = 0; i < val_count; i++) { 2319 unsigned int ival; 2320 ret = regmap_read(map, reg + (i * map->reg_stride), 2321 &ival); 2322 if (ret != 0) 2323 return ret; 2324 memcpy(val + (i * val_bytes), &ival, val_bytes); 2325 } 2326 } 2327 2328 return 0; 2329 } 2330 EXPORT_SYMBOL_GPL(regmap_bulk_read); 2331 2332 static int _regmap_update_bits(struct regmap *map, unsigned int reg, 2333 unsigned int mask, unsigned int val, 2334 bool *change) 2335 { 2336 int ret; 2337 unsigned int tmp, orig; 2338 2339 ret = _regmap_read(map, reg, &orig); 2340 if (ret != 0) 2341 return ret; 2342 2343 tmp = orig & ~mask; 2344 tmp |= val & mask; 2345 2346 if (tmp != orig) { 2347 ret = _regmap_write(map, reg, tmp); 2348 if (change) 2349 *change = true; 2350 } else { 2351 if (change) 2352 *change = false; 2353 } 2354 2355 return ret; 2356 } 2357 2358 /** 2359 * regmap_update_bits: Perform a read/modify/write cycle on the register map 2360 * 2361 * @map: Register map to update 2362 * @reg: Register to update 2363 * @mask: Bitmask to change 2364 * @val: New value for bitmask 2365 * 2366 * Returns zero for success, a negative number on error. 2367 */ 2368 int regmap_update_bits(struct regmap *map, unsigned int reg, 2369 unsigned int mask, unsigned int val) 2370 { 2371 int ret; 2372 2373 map->lock(map->lock_arg); 2374 ret = _regmap_update_bits(map, reg, mask, val, NULL); 2375 map->unlock(map->lock_arg); 2376 2377 return ret; 2378 } 2379 EXPORT_SYMBOL_GPL(regmap_update_bits); 2380 2381 /** 2382 * regmap_update_bits_async: Perform a read/modify/write cycle on the register 2383 * map asynchronously 2384 * 2385 * @map: Register map to update 2386 * @reg: Register to update 2387 * @mask: Bitmask to change 2388 * @val: New value for bitmask 2389 * 2390 * With most buses the read must be done synchronously so this is most 2391 * useful for devices with a cache which do not need to interact with 2392 * the hardware to determine the current register value. 2393 * 2394 * Returns zero for success, a negative number on error. 2395 */ 2396 int regmap_update_bits_async(struct regmap *map, unsigned int reg, 2397 unsigned int mask, unsigned int val) 2398 { 2399 int ret; 2400 2401 map->lock(map->lock_arg); 2402 2403 map->async = true; 2404 2405 ret = _regmap_update_bits(map, reg, mask, val, NULL); 2406 2407 map->async = false; 2408 2409 map->unlock(map->lock_arg); 2410 2411 return ret; 2412 } 2413 EXPORT_SYMBOL_GPL(regmap_update_bits_async); 2414 2415 /** 2416 * regmap_update_bits_check: Perform a read/modify/write cycle on the 2417 * register map and report if updated 2418 * 2419 * @map: Register map to update 2420 * @reg: Register to update 2421 * @mask: Bitmask to change 2422 * @val: New value for bitmask 2423 * @change: Boolean indicating if a write was done 2424 * 2425 * Returns zero for success, a negative number on error. 2426 */ 2427 int regmap_update_bits_check(struct regmap *map, unsigned int reg, 2428 unsigned int mask, unsigned int val, 2429 bool *change) 2430 { 2431 int ret; 2432 2433 map->lock(map->lock_arg); 2434 ret = _regmap_update_bits(map, reg, mask, val, change); 2435 map->unlock(map->lock_arg); 2436 return ret; 2437 } 2438 EXPORT_SYMBOL_GPL(regmap_update_bits_check); 2439 2440 /** 2441 * regmap_update_bits_check_async: Perform a read/modify/write cycle on the 2442 * register map asynchronously and report if 2443 * updated 2444 * 2445 * @map: Register map to update 2446 * @reg: Register to update 2447 * @mask: Bitmask to change 2448 * @val: New value for bitmask 2449 * @change: Boolean indicating if a write was done 2450 * 2451 * With most buses the read must be done synchronously so this is most 2452 * useful for devices with a cache which do not need to interact with 2453 * the hardware to determine the current register value. 2454 * 2455 * Returns zero for success, a negative number on error. 2456 */ 2457 int regmap_update_bits_check_async(struct regmap *map, unsigned int reg, 2458 unsigned int mask, unsigned int val, 2459 bool *change) 2460 { 2461 int ret; 2462 2463 map->lock(map->lock_arg); 2464 2465 map->async = true; 2466 2467 ret = _regmap_update_bits(map, reg, mask, val, change); 2468 2469 map->async = false; 2470 2471 map->unlock(map->lock_arg); 2472 2473 return ret; 2474 } 2475 EXPORT_SYMBOL_GPL(regmap_update_bits_check_async); 2476 2477 void regmap_async_complete_cb(struct regmap_async *async, int ret) 2478 { 2479 struct regmap *map = async->map; 2480 bool wake; 2481 2482 trace_regmap_async_io_complete(map->dev); 2483 2484 spin_lock(&map->async_lock); 2485 list_move(&async->list, &map->async_free); 2486 wake = list_empty(&map->async_list); 2487 2488 if (ret != 0) 2489 map->async_ret = ret; 2490 2491 spin_unlock(&map->async_lock); 2492 2493 if (wake) 2494 wake_up(&map->async_waitq); 2495 } 2496 EXPORT_SYMBOL_GPL(regmap_async_complete_cb); 2497 2498 static int regmap_async_is_done(struct regmap *map) 2499 { 2500 unsigned long flags; 2501 int ret; 2502 2503 spin_lock_irqsave(&map->async_lock, flags); 2504 ret = list_empty(&map->async_list); 2505 spin_unlock_irqrestore(&map->async_lock, flags); 2506 2507 return ret; 2508 } 2509 2510 /** 2511 * regmap_async_complete: Ensure all asynchronous I/O has completed. 2512 * 2513 * @map: Map to operate on. 2514 * 2515 * Blocks until any pending asynchronous I/O has completed. Returns 2516 * an error code for any failed I/O operations. 2517 */ 2518 int regmap_async_complete(struct regmap *map) 2519 { 2520 unsigned long flags; 2521 int ret; 2522 2523 /* Nothing to do with no async support */ 2524 if (!map->bus || !map->bus->async_write) 2525 return 0; 2526 2527 trace_regmap_async_complete_start(map->dev); 2528 2529 wait_event(map->async_waitq, regmap_async_is_done(map)); 2530 2531 spin_lock_irqsave(&map->async_lock, flags); 2532 ret = map->async_ret; 2533 map->async_ret = 0; 2534 spin_unlock_irqrestore(&map->async_lock, flags); 2535 2536 trace_regmap_async_complete_done(map->dev); 2537 2538 return ret; 2539 } 2540 EXPORT_SYMBOL_GPL(regmap_async_complete); 2541 2542 /** 2543 * regmap_register_patch: Register and apply register updates to be applied 2544 * on device initialistion 2545 * 2546 * @map: Register map to apply updates to. 2547 * @regs: Values to update. 2548 * @num_regs: Number of entries in regs. 2549 * 2550 * Register a set of register updates to be applied to the device 2551 * whenever the device registers are synchronised with the cache and 2552 * apply them immediately. Typically this is used to apply 2553 * corrections to be applied to the device defaults on startup, such 2554 * as the updates some vendors provide to undocumented registers. 2555 * 2556 * The caller must ensure that this function cannot be called 2557 * concurrently with either itself or regcache_sync(). 2558 */ 2559 int regmap_register_patch(struct regmap *map, const struct reg_default *regs, 2560 int num_regs) 2561 { 2562 struct reg_default *p; 2563 int ret; 2564 bool bypass; 2565 2566 if (WARN_ONCE(num_regs <= 0, "invalid registers number (%d)\n", 2567 num_regs)) 2568 return 0; 2569 2570 p = krealloc(map->patch, 2571 sizeof(struct reg_default) * (map->patch_regs + num_regs), 2572 GFP_KERNEL); 2573 if (p) { 2574 memcpy(p + map->patch_regs, regs, num_regs * sizeof(*regs)); 2575 map->patch = p; 2576 map->patch_regs += num_regs; 2577 } else { 2578 return -ENOMEM; 2579 } 2580 2581 map->lock(map->lock_arg); 2582 2583 bypass = map->cache_bypass; 2584 2585 map->cache_bypass = true; 2586 map->async = true; 2587 2588 ret = _regmap_multi_reg_write(map, regs, num_regs); 2589 if (ret != 0) 2590 goto out; 2591 2592 out: 2593 map->async = false; 2594 map->cache_bypass = bypass; 2595 2596 map->unlock(map->lock_arg); 2597 2598 regmap_async_complete(map); 2599 2600 return ret; 2601 } 2602 EXPORT_SYMBOL_GPL(regmap_register_patch); 2603 2604 /* 2605 * regmap_get_val_bytes(): Report the size of a register value 2606 * 2607 * Report the size of a register value, mainly intended to for use by 2608 * generic infrastructure built on top of regmap. 2609 */ 2610 int regmap_get_val_bytes(struct regmap *map) 2611 { 2612 if (map->format.format_write) 2613 return -EINVAL; 2614 2615 return map->format.val_bytes; 2616 } 2617 EXPORT_SYMBOL_GPL(regmap_get_val_bytes); 2618 2619 int regmap_parse_val(struct regmap *map, const void *buf, 2620 unsigned int *val) 2621 { 2622 if (!map->format.parse_val) 2623 return -EINVAL; 2624 2625 *val = map->format.parse_val(buf); 2626 2627 return 0; 2628 } 2629 EXPORT_SYMBOL_GPL(regmap_parse_val); 2630 2631 static int __init regmap_initcall(void) 2632 { 2633 regmap_debugfs_initcall(); 2634 2635 return 0; 2636 } 2637 postcore_initcall(regmap_initcall); 2638