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/rbtree.h> 19 20 #define CREATE_TRACE_POINTS 21 #include <trace/events/regmap.h> 22 23 #include "internal.h" 24 25 /* 26 * Sometimes for failures during very early init the trace 27 * infrastructure isn't available early enough to be used. For this 28 * sort of problem defining LOG_DEVICE will add printks for basic 29 * register I/O on a specific device. 30 */ 31 #undef LOG_DEVICE 32 33 static int _regmap_update_bits(struct regmap *map, unsigned int reg, 34 unsigned int mask, unsigned int val, 35 bool *change); 36 37 bool regmap_writeable(struct regmap *map, unsigned int reg) 38 { 39 if (map->max_register && reg > map->max_register) 40 return false; 41 42 if (map->writeable_reg) 43 return map->writeable_reg(map->dev, reg); 44 45 return true; 46 } 47 48 bool regmap_readable(struct regmap *map, unsigned int reg) 49 { 50 if (map->max_register && reg > map->max_register) 51 return false; 52 53 if (map->format.format_write) 54 return false; 55 56 if (map->readable_reg) 57 return map->readable_reg(map->dev, reg); 58 59 return true; 60 } 61 62 bool regmap_volatile(struct regmap *map, unsigned int reg) 63 { 64 if (!regmap_readable(map, reg)) 65 return false; 66 67 if (map->volatile_reg) 68 return map->volatile_reg(map->dev, reg); 69 70 return true; 71 } 72 73 bool regmap_precious(struct regmap *map, unsigned int reg) 74 { 75 if (!regmap_readable(map, reg)) 76 return false; 77 78 if (map->precious_reg) 79 return map->precious_reg(map->dev, reg); 80 81 return false; 82 } 83 84 static bool regmap_volatile_range(struct regmap *map, unsigned int reg, 85 unsigned int num) 86 { 87 unsigned int i; 88 89 for (i = 0; i < num; i++) 90 if (!regmap_volatile(map, reg + i)) 91 return false; 92 93 return true; 94 } 95 96 static void regmap_format_2_6_write(struct regmap *map, 97 unsigned int reg, unsigned int val) 98 { 99 u8 *out = map->work_buf; 100 101 *out = (reg << 6) | val; 102 } 103 104 static void regmap_format_4_12_write(struct regmap *map, 105 unsigned int reg, unsigned int val) 106 { 107 __be16 *out = map->work_buf; 108 *out = cpu_to_be16((reg << 12) | val); 109 } 110 111 static void regmap_format_7_9_write(struct regmap *map, 112 unsigned int reg, unsigned int val) 113 { 114 __be16 *out = map->work_buf; 115 *out = cpu_to_be16((reg << 9) | val); 116 } 117 118 static void regmap_format_10_14_write(struct regmap *map, 119 unsigned int reg, unsigned int val) 120 { 121 u8 *out = map->work_buf; 122 123 out[2] = val; 124 out[1] = (val >> 8) | (reg << 6); 125 out[0] = reg >> 2; 126 } 127 128 static void regmap_format_8(void *buf, unsigned int val, unsigned int shift) 129 { 130 u8 *b = buf; 131 132 b[0] = val << shift; 133 } 134 135 static void regmap_format_16_be(void *buf, unsigned int val, unsigned int shift) 136 { 137 __be16 *b = buf; 138 139 b[0] = cpu_to_be16(val << shift); 140 } 141 142 static void regmap_format_16_native(void *buf, unsigned int val, 143 unsigned int shift) 144 { 145 *(u16 *)buf = val << shift; 146 } 147 148 static void regmap_format_24(void *buf, unsigned int val, unsigned int shift) 149 { 150 u8 *b = buf; 151 152 val <<= shift; 153 154 b[0] = val >> 16; 155 b[1] = val >> 8; 156 b[2] = val; 157 } 158 159 static void regmap_format_32_be(void *buf, unsigned int val, unsigned int shift) 160 { 161 __be32 *b = buf; 162 163 b[0] = cpu_to_be32(val << shift); 164 } 165 166 static void regmap_format_32_native(void *buf, unsigned int val, 167 unsigned int shift) 168 { 169 *(u32 *)buf = val << shift; 170 } 171 172 static unsigned int regmap_parse_8(void *buf) 173 { 174 u8 *b = buf; 175 176 return b[0]; 177 } 178 179 static unsigned int regmap_parse_16_be(void *buf) 180 { 181 __be16 *b = buf; 182 183 b[0] = be16_to_cpu(b[0]); 184 185 return b[0]; 186 } 187 188 static unsigned int regmap_parse_16_native(void *buf) 189 { 190 return *(u16 *)buf; 191 } 192 193 static unsigned int regmap_parse_24(void *buf) 194 { 195 u8 *b = buf; 196 unsigned int ret = b[2]; 197 ret |= ((unsigned int)b[1]) << 8; 198 ret |= ((unsigned int)b[0]) << 16; 199 200 return ret; 201 } 202 203 static unsigned int regmap_parse_32_be(void *buf) 204 { 205 __be32 *b = buf; 206 207 b[0] = be32_to_cpu(b[0]); 208 209 return b[0]; 210 } 211 212 static unsigned int regmap_parse_32_native(void *buf) 213 { 214 return *(u32 *)buf; 215 } 216 217 static void regmap_lock_mutex(struct regmap *map) 218 { 219 mutex_lock(&map->mutex); 220 } 221 222 static void regmap_unlock_mutex(struct regmap *map) 223 { 224 mutex_unlock(&map->mutex); 225 } 226 227 static void regmap_lock_spinlock(struct regmap *map) 228 { 229 spin_lock(&map->spinlock); 230 } 231 232 static void regmap_unlock_spinlock(struct regmap *map) 233 { 234 spin_unlock(&map->spinlock); 235 } 236 237 static void dev_get_regmap_release(struct device *dev, void *res) 238 { 239 /* 240 * We don't actually have anything to do here; the goal here 241 * is not to manage the regmap but to provide a simple way to 242 * get the regmap back given a struct device. 243 */ 244 } 245 246 static bool _regmap_range_add(struct regmap *map, 247 struct regmap_range_node *data) 248 { 249 struct rb_root *root = &map->range_tree; 250 struct rb_node **new = &(root->rb_node), *parent = NULL; 251 252 while (*new) { 253 struct regmap_range_node *this = 254 container_of(*new, struct regmap_range_node, node); 255 256 parent = *new; 257 if (data->range_max < this->range_min) 258 new = &((*new)->rb_left); 259 else if (data->range_min > this->range_max) 260 new = &((*new)->rb_right); 261 else 262 return false; 263 } 264 265 rb_link_node(&data->node, parent, new); 266 rb_insert_color(&data->node, root); 267 268 return true; 269 } 270 271 static struct regmap_range_node *_regmap_range_lookup(struct regmap *map, 272 unsigned int reg) 273 { 274 struct rb_node *node = map->range_tree.rb_node; 275 276 while (node) { 277 struct regmap_range_node *this = 278 container_of(node, struct regmap_range_node, node); 279 280 if (reg < this->range_min) 281 node = node->rb_left; 282 else if (reg > this->range_max) 283 node = node->rb_right; 284 else 285 return this; 286 } 287 288 return NULL; 289 } 290 291 static void regmap_range_exit(struct regmap *map) 292 { 293 struct rb_node *next; 294 struct regmap_range_node *range_node; 295 296 next = rb_first(&map->range_tree); 297 while (next) { 298 range_node = rb_entry(next, struct regmap_range_node, node); 299 next = rb_next(&range_node->node); 300 rb_erase(&range_node->node, &map->range_tree); 301 kfree(range_node); 302 } 303 304 kfree(map->selector_work_buf); 305 } 306 307 /** 308 * regmap_init(): Initialise register map 309 * 310 * @dev: Device that will be interacted with 311 * @bus: Bus-specific callbacks to use with device 312 * @bus_context: Data passed to bus-specific callbacks 313 * @config: Configuration for register map 314 * 315 * The return value will be an ERR_PTR() on error or a valid pointer to 316 * a struct regmap. This function should generally not be called 317 * directly, it should be called by bus-specific init functions. 318 */ 319 struct regmap *regmap_init(struct device *dev, 320 const struct regmap_bus *bus, 321 void *bus_context, 322 const struct regmap_config *config) 323 { 324 struct regmap *map, **m; 325 int ret = -EINVAL; 326 enum regmap_endian reg_endian, val_endian; 327 int i, j; 328 329 if (!bus || !config) 330 goto err; 331 332 map = kzalloc(sizeof(*map), GFP_KERNEL); 333 if (map == NULL) { 334 ret = -ENOMEM; 335 goto err; 336 } 337 338 if (bus->fast_io) { 339 spin_lock_init(&map->spinlock); 340 map->lock = regmap_lock_spinlock; 341 map->unlock = regmap_unlock_spinlock; 342 } else { 343 mutex_init(&map->mutex); 344 map->lock = regmap_lock_mutex; 345 map->unlock = regmap_unlock_mutex; 346 } 347 map->format.reg_bytes = DIV_ROUND_UP(config->reg_bits, 8); 348 map->format.pad_bytes = config->pad_bits / 8; 349 map->format.val_bytes = DIV_ROUND_UP(config->val_bits, 8); 350 map->format.buf_size = DIV_ROUND_UP(config->reg_bits + 351 config->val_bits + config->pad_bits, 8); 352 map->reg_shift = config->pad_bits % 8; 353 if (config->reg_stride) 354 map->reg_stride = config->reg_stride; 355 else 356 map->reg_stride = 1; 357 map->use_single_rw = config->use_single_rw; 358 map->dev = dev; 359 map->bus = bus; 360 map->bus_context = bus_context; 361 map->max_register = config->max_register; 362 map->writeable_reg = config->writeable_reg; 363 map->readable_reg = config->readable_reg; 364 map->volatile_reg = config->volatile_reg; 365 map->precious_reg = config->precious_reg; 366 map->cache_type = config->cache_type; 367 map->name = config->name; 368 369 if (config->read_flag_mask || config->write_flag_mask) { 370 map->read_flag_mask = config->read_flag_mask; 371 map->write_flag_mask = config->write_flag_mask; 372 } else { 373 map->read_flag_mask = bus->read_flag_mask; 374 } 375 376 reg_endian = config->reg_format_endian; 377 if (reg_endian == REGMAP_ENDIAN_DEFAULT) 378 reg_endian = bus->reg_format_endian_default; 379 if (reg_endian == REGMAP_ENDIAN_DEFAULT) 380 reg_endian = REGMAP_ENDIAN_BIG; 381 382 val_endian = config->val_format_endian; 383 if (val_endian == REGMAP_ENDIAN_DEFAULT) 384 val_endian = bus->val_format_endian_default; 385 if (val_endian == REGMAP_ENDIAN_DEFAULT) 386 val_endian = REGMAP_ENDIAN_BIG; 387 388 switch (config->reg_bits + map->reg_shift) { 389 case 2: 390 switch (config->val_bits) { 391 case 6: 392 map->format.format_write = regmap_format_2_6_write; 393 break; 394 default: 395 goto err_map; 396 } 397 break; 398 399 case 4: 400 switch (config->val_bits) { 401 case 12: 402 map->format.format_write = regmap_format_4_12_write; 403 break; 404 default: 405 goto err_map; 406 } 407 break; 408 409 case 7: 410 switch (config->val_bits) { 411 case 9: 412 map->format.format_write = regmap_format_7_9_write; 413 break; 414 default: 415 goto err_map; 416 } 417 break; 418 419 case 10: 420 switch (config->val_bits) { 421 case 14: 422 map->format.format_write = regmap_format_10_14_write; 423 break; 424 default: 425 goto err_map; 426 } 427 break; 428 429 case 8: 430 map->format.format_reg = regmap_format_8; 431 break; 432 433 case 16: 434 switch (reg_endian) { 435 case REGMAP_ENDIAN_BIG: 436 map->format.format_reg = regmap_format_16_be; 437 break; 438 case REGMAP_ENDIAN_NATIVE: 439 map->format.format_reg = regmap_format_16_native; 440 break; 441 default: 442 goto err_map; 443 } 444 break; 445 446 case 32: 447 switch (reg_endian) { 448 case REGMAP_ENDIAN_BIG: 449 map->format.format_reg = regmap_format_32_be; 450 break; 451 case REGMAP_ENDIAN_NATIVE: 452 map->format.format_reg = regmap_format_32_native; 453 break; 454 default: 455 goto err_map; 456 } 457 break; 458 459 default: 460 goto err_map; 461 } 462 463 switch (config->val_bits) { 464 case 8: 465 map->format.format_val = regmap_format_8; 466 map->format.parse_val = regmap_parse_8; 467 break; 468 case 16: 469 switch (val_endian) { 470 case REGMAP_ENDIAN_BIG: 471 map->format.format_val = regmap_format_16_be; 472 map->format.parse_val = regmap_parse_16_be; 473 break; 474 case REGMAP_ENDIAN_NATIVE: 475 map->format.format_val = regmap_format_16_native; 476 map->format.parse_val = regmap_parse_16_native; 477 break; 478 default: 479 goto err_map; 480 } 481 break; 482 case 24: 483 if (val_endian != REGMAP_ENDIAN_BIG) 484 goto err_map; 485 map->format.format_val = regmap_format_24; 486 map->format.parse_val = regmap_parse_24; 487 break; 488 case 32: 489 switch (val_endian) { 490 case REGMAP_ENDIAN_BIG: 491 map->format.format_val = regmap_format_32_be; 492 map->format.parse_val = regmap_parse_32_be; 493 break; 494 case REGMAP_ENDIAN_NATIVE: 495 map->format.format_val = regmap_format_32_native; 496 map->format.parse_val = regmap_parse_32_native; 497 break; 498 default: 499 goto err_map; 500 } 501 break; 502 } 503 504 if (map->format.format_write) { 505 if ((reg_endian != REGMAP_ENDIAN_BIG) || 506 (val_endian != REGMAP_ENDIAN_BIG)) 507 goto err_map; 508 map->use_single_rw = true; 509 } 510 511 if (!map->format.format_write && 512 !(map->format.format_reg && map->format.format_val)) 513 goto err_map; 514 515 map->work_buf = kzalloc(map->format.buf_size, GFP_KERNEL); 516 if (map->work_buf == NULL) { 517 ret = -ENOMEM; 518 goto err_map; 519 } 520 521 map->range_tree = RB_ROOT; 522 for (i = 0; i < config->n_ranges; i++) { 523 const struct regmap_range_cfg *range_cfg = &config->ranges[i]; 524 struct regmap_range_node *new; 525 526 /* Sanity check */ 527 if (range_cfg->range_max < range_cfg->range_min || 528 range_cfg->range_max > map->max_register || 529 range_cfg->selector_reg > map->max_register || 530 range_cfg->window_len == 0) 531 goto err_range; 532 533 /* Make sure, that this register range has no selector 534 or data window within its boundary */ 535 for (j = 0; j < config->n_ranges; j++) { 536 unsigned sel_reg = config->ranges[j].selector_reg; 537 unsigned win_min = config->ranges[j].window_start; 538 unsigned win_max = win_min + 539 config->ranges[j].window_len - 1; 540 541 if (range_cfg->range_min <= sel_reg && 542 sel_reg <= range_cfg->range_max) { 543 goto err_range; 544 } 545 546 if (!(win_max < range_cfg->range_min || 547 win_min > range_cfg->range_max)) { 548 goto err_range; 549 } 550 } 551 552 new = kzalloc(sizeof(*new), GFP_KERNEL); 553 if (new == NULL) { 554 ret = -ENOMEM; 555 goto err_range; 556 } 557 558 new->range_min = range_cfg->range_min; 559 new->range_max = range_cfg->range_max; 560 new->selector_reg = range_cfg->selector_reg; 561 new->selector_mask = range_cfg->selector_mask; 562 new->selector_shift = range_cfg->selector_shift; 563 new->window_start = range_cfg->window_start; 564 new->window_len = range_cfg->window_len; 565 566 if (_regmap_range_add(map, new) == false) { 567 kfree(new); 568 goto err_range; 569 } 570 571 if (map->selector_work_buf == NULL) { 572 map->selector_work_buf = 573 kzalloc(map->format.buf_size, GFP_KERNEL); 574 if (map->selector_work_buf == NULL) { 575 ret = -ENOMEM; 576 goto err_range; 577 } 578 } 579 } 580 581 ret = regcache_init(map, config); 582 if (ret < 0) 583 goto err_range; 584 585 regmap_debugfs_init(map, config->name); 586 587 /* Add a devres resource for dev_get_regmap() */ 588 m = devres_alloc(dev_get_regmap_release, sizeof(*m), GFP_KERNEL); 589 if (!m) { 590 ret = -ENOMEM; 591 goto err_debugfs; 592 } 593 *m = map; 594 devres_add(dev, m); 595 596 return map; 597 598 err_debugfs: 599 regmap_debugfs_exit(map); 600 regcache_exit(map); 601 err_range: 602 regmap_range_exit(map); 603 kfree(map->work_buf); 604 err_map: 605 kfree(map); 606 err: 607 return ERR_PTR(ret); 608 } 609 EXPORT_SYMBOL_GPL(regmap_init); 610 611 static void devm_regmap_release(struct device *dev, void *res) 612 { 613 regmap_exit(*(struct regmap **)res); 614 } 615 616 /** 617 * devm_regmap_init(): Initialise managed register map 618 * 619 * @dev: Device that will be interacted with 620 * @bus: Bus-specific callbacks to use with device 621 * @bus_context: Data passed to bus-specific callbacks 622 * @config: Configuration for register map 623 * 624 * The return value will be an ERR_PTR() on error or a valid pointer 625 * to a struct regmap. This function should generally not be called 626 * directly, it should be called by bus-specific init functions. The 627 * map will be automatically freed by the device management code. 628 */ 629 struct regmap *devm_regmap_init(struct device *dev, 630 const struct regmap_bus *bus, 631 void *bus_context, 632 const struct regmap_config *config) 633 { 634 struct regmap **ptr, *regmap; 635 636 ptr = devres_alloc(devm_regmap_release, sizeof(*ptr), GFP_KERNEL); 637 if (!ptr) 638 return ERR_PTR(-ENOMEM); 639 640 regmap = regmap_init(dev, bus, bus_context, config); 641 if (!IS_ERR(regmap)) { 642 *ptr = regmap; 643 devres_add(dev, ptr); 644 } else { 645 devres_free(ptr); 646 } 647 648 return regmap; 649 } 650 EXPORT_SYMBOL_GPL(devm_regmap_init); 651 652 /** 653 * regmap_reinit_cache(): Reinitialise the current register cache 654 * 655 * @map: Register map to operate on. 656 * @config: New configuration. Only the cache data will be used. 657 * 658 * Discard any existing register cache for the map and initialize a 659 * new cache. This can be used to restore the cache to defaults or to 660 * update the cache configuration to reflect runtime discovery of the 661 * hardware. 662 */ 663 int regmap_reinit_cache(struct regmap *map, const struct regmap_config *config) 664 { 665 int ret; 666 667 map->lock(map); 668 669 regcache_exit(map); 670 regmap_debugfs_exit(map); 671 672 map->max_register = config->max_register; 673 map->writeable_reg = config->writeable_reg; 674 map->readable_reg = config->readable_reg; 675 map->volatile_reg = config->volatile_reg; 676 map->precious_reg = config->precious_reg; 677 map->cache_type = config->cache_type; 678 679 regmap_debugfs_init(map, config->name); 680 681 map->cache_bypass = false; 682 map->cache_only = false; 683 684 ret = regcache_init(map, config); 685 686 map->unlock(map); 687 688 return ret; 689 } 690 EXPORT_SYMBOL_GPL(regmap_reinit_cache); 691 692 /** 693 * regmap_exit(): Free a previously allocated register map 694 */ 695 void regmap_exit(struct regmap *map) 696 { 697 regcache_exit(map); 698 regmap_debugfs_exit(map); 699 regmap_range_exit(map); 700 if (map->bus->free_context) 701 map->bus->free_context(map->bus_context); 702 kfree(map->work_buf); 703 kfree(map); 704 } 705 EXPORT_SYMBOL_GPL(regmap_exit); 706 707 static int dev_get_regmap_match(struct device *dev, void *res, void *data) 708 { 709 struct regmap **r = res; 710 if (!r || !*r) { 711 WARN_ON(!r || !*r); 712 return 0; 713 } 714 715 /* If the user didn't specify a name match any */ 716 if (data) 717 return (*r)->name == data; 718 else 719 return 1; 720 } 721 722 /** 723 * dev_get_regmap(): Obtain the regmap (if any) for a device 724 * 725 * @dev: Device to retrieve the map for 726 * @name: Optional name for the register map, usually NULL. 727 * 728 * Returns the regmap for the device if one is present, or NULL. If 729 * name is specified then it must match the name specified when 730 * registering the device, if it is NULL then the first regmap found 731 * will be used. Devices with multiple register maps are very rare, 732 * generic code should normally not need to specify a name. 733 */ 734 struct regmap *dev_get_regmap(struct device *dev, const char *name) 735 { 736 struct regmap **r = devres_find(dev, dev_get_regmap_release, 737 dev_get_regmap_match, (void *)name); 738 739 if (!r) 740 return NULL; 741 return *r; 742 } 743 EXPORT_SYMBOL_GPL(dev_get_regmap); 744 745 static int _regmap_select_page(struct regmap *map, unsigned int *reg, 746 unsigned int val_num) 747 { 748 struct regmap_range_node *range; 749 void *orig_work_buf; 750 unsigned int win_offset; 751 unsigned int win_page; 752 bool page_chg; 753 int ret; 754 755 range = _regmap_range_lookup(map, *reg); 756 if (range) { 757 win_offset = (*reg - range->range_min) % range->window_len; 758 win_page = (*reg - range->range_min) / range->window_len; 759 760 if (val_num > 1) { 761 /* Bulk write shouldn't cross range boundary */ 762 if (*reg + val_num - 1 > range->range_max) 763 return -EINVAL; 764 765 /* ... or single page boundary */ 766 if (val_num > range->window_len - win_offset) 767 return -EINVAL; 768 } 769 770 /* It is possible to have selector register inside data window. 771 In that case, selector register is located on every page and 772 it needs no page switching, when accessed alone. */ 773 if (val_num > 1 || 774 range->window_start + win_offset != range->selector_reg) { 775 /* Use separate work_buf during page switching */ 776 orig_work_buf = map->work_buf; 777 map->work_buf = map->selector_work_buf; 778 779 ret = _regmap_update_bits(map, range->selector_reg, 780 range->selector_mask, 781 win_page << range->selector_shift, 782 &page_chg); 783 784 map->work_buf = orig_work_buf; 785 786 if (ret < 0) 787 return ret; 788 } 789 790 *reg = range->window_start + win_offset; 791 } 792 793 return 0; 794 } 795 796 static int _regmap_raw_write(struct regmap *map, unsigned int reg, 797 const void *val, size_t val_len) 798 { 799 u8 *u8 = map->work_buf; 800 void *buf; 801 int ret = -ENOTSUPP; 802 size_t len; 803 int i; 804 805 /* Check for unwritable registers before we start */ 806 if (map->writeable_reg) 807 for (i = 0; i < val_len / map->format.val_bytes; i++) 808 if (!map->writeable_reg(map->dev, 809 reg + (i * map->reg_stride))) 810 return -EINVAL; 811 812 if (!map->cache_bypass && map->format.parse_val) { 813 unsigned int ival; 814 int val_bytes = map->format.val_bytes; 815 for (i = 0; i < val_len / val_bytes; i++) { 816 memcpy(map->work_buf, val + (i * val_bytes), val_bytes); 817 ival = map->format.parse_val(map->work_buf); 818 ret = regcache_write(map, reg + (i * map->reg_stride), 819 ival); 820 if (ret) { 821 dev_err(map->dev, 822 "Error in caching of register: %u ret: %d\n", 823 reg + i, ret); 824 return ret; 825 } 826 } 827 if (map->cache_only) { 828 map->cache_dirty = true; 829 return 0; 830 } 831 } 832 833 ret = _regmap_select_page(map, ®, val_len / map->format.val_bytes); 834 if (ret < 0) 835 return ret; 836 837 map->format.format_reg(map->work_buf, reg, map->reg_shift); 838 839 u8[0] |= map->write_flag_mask; 840 841 trace_regmap_hw_write_start(map->dev, reg, 842 val_len / map->format.val_bytes); 843 844 /* If we're doing a single register write we can probably just 845 * send the work_buf directly, otherwise try to do a gather 846 * write. 847 */ 848 if (val == (map->work_buf + map->format.pad_bytes + 849 map->format.reg_bytes)) 850 ret = map->bus->write(map->bus_context, map->work_buf, 851 map->format.reg_bytes + 852 map->format.pad_bytes + 853 val_len); 854 else if (map->bus->gather_write) 855 ret = map->bus->gather_write(map->bus_context, map->work_buf, 856 map->format.reg_bytes + 857 map->format.pad_bytes, 858 val, val_len); 859 860 /* If that didn't work fall back on linearising by hand. */ 861 if (ret == -ENOTSUPP) { 862 len = map->format.reg_bytes + map->format.pad_bytes + val_len; 863 buf = kzalloc(len, GFP_KERNEL); 864 if (!buf) 865 return -ENOMEM; 866 867 memcpy(buf, map->work_buf, map->format.reg_bytes); 868 memcpy(buf + map->format.reg_bytes + map->format.pad_bytes, 869 val, val_len); 870 ret = map->bus->write(map->bus_context, buf, len); 871 872 kfree(buf); 873 } 874 875 trace_regmap_hw_write_done(map->dev, reg, 876 val_len / map->format.val_bytes); 877 878 return ret; 879 } 880 881 int _regmap_write(struct regmap *map, unsigned int reg, 882 unsigned int val) 883 { 884 int ret; 885 BUG_ON(!map->format.format_write && !map->format.format_val); 886 887 if (!map->cache_bypass && map->format.format_write) { 888 ret = regcache_write(map, reg, val); 889 if (ret != 0) 890 return ret; 891 if (map->cache_only) { 892 map->cache_dirty = true; 893 return 0; 894 } 895 } 896 897 #ifdef LOG_DEVICE 898 if (strcmp(dev_name(map->dev), LOG_DEVICE) == 0) 899 dev_info(map->dev, "%x <= %x\n", reg, val); 900 #endif 901 902 trace_regmap_reg_write(map->dev, reg, val); 903 904 if (map->format.format_write) { 905 ret = _regmap_select_page(map, ®, 1); 906 if (ret < 0) 907 return ret; 908 909 map->format.format_write(map, reg, val); 910 911 trace_regmap_hw_write_start(map->dev, reg, 1); 912 913 ret = map->bus->write(map->bus_context, map->work_buf, 914 map->format.buf_size); 915 916 trace_regmap_hw_write_done(map->dev, reg, 1); 917 918 return ret; 919 } else { 920 map->format.format_val(map->work_buf + map->format.reg_bytes 921 + map->format.pad_bytes, val, 0); 922 return _regmap_raw_write(map, reg, 923 map->work_buf + 924 map->format.reg_bytes + 925 map->format.pad_bytes, 926 map->format.val_bytes); 927 } 928 } 929 930 /** 931 * regmap_write(): Write a value to a single register 932 * 933 * @map: Register map to write to 934 * @reg: Register to write to 935 * @val: Value to be written 936 * 937 * A value of zero will be returned on success, a negative errno will 938 * be returned in error cases. 939 */ 940 int regmap_write(struct regmap *map, unsigned int reg, unsigned int val) 941 { 942 int ret; 943 944 if (reg % map->reg_stride) 945 return -EINVAL; 946 947 map->lock(map); 948 949 ret = _regmap_write(map, reg, val); 950 951 map->unlock(map); 952 953 return ret; 954 } 955 EXPORT_SYMBOL_GPL(regmap_write); 956 957 /** 958 * regmap_raw_write(): Write raw values to one or more registers 959 * 960 * @map: Register map to write to 961 * @reg: Initial register to write to 962 * @val: Block of data to be written, laid out for direct transmission to the 963 * device 964 * @val_len: Length of data pointed to by val. 965 * 966 * This function is intended to be used for things like firmware 967 * download where a large block of data needs to be transferred to the 968 * device. No formatting will be done on the data provided. 969 * 970 * A value of zero will be returned on success, a negative errno will 971 * be returned in error cases. 972 */ 973 int regmap_raw_write(struct regmap *map, unsigned int reg, 974 const void *val, size_t val_len) 975 { 976 int ret; 977 978 if (val_len % map->format.val_bytes) 979 return -EINVAL; 980 if (reg % map->reg_stride) 981 return -EINVAL; 982 983 map->lock(map); 984 985 ret = _regmap_raw_write(map, reg, val, val_len); 986 987 map->unlock(map); 988 989 return ret; 990 } 991 EXPORT_SYMBOL_GPL(regmap_raw_write); 992 993 /* 994 * regmap_bulk_write(): Write multiple registers to the device 995 * 996 * @map: Register map to write to 997 * @reg: First register to be write from 998 * @val: Block of data to be written, in native register size for device 999 * @val_count: Number of registers to write 1000 * 1001 * This function is intended to be used for writing a large block of 1002 * data to be device either in single transfer or multiple transfer. 1003 * 1004 * A value of zero will be returned on success, a negative errno will 1005 * be returned in error cases. 1006 */ 1007 int regmap_bulk_write(struct regmap *map, unsigned int reg, const void *val, 1008 size_t val_count) 1009 { 1010 int ret = 0, i; 1011 size_t val_bytes = map->format.val_bytes; 1012 void *wval; 1013 1014 if (!map->format.parse_val) 1015 return -EINVAL; 1016 if (reg % map->reg_stride) 1017 return -EINVAL; 1018 1019 map->lock(map); 1020 1021 /* No formatting is require if val_byte is 1 */ 1022 if (val_bytes == 1) { 1023 wval = (void *)val; 1024 } else { 1025 wval = kmemdup(val, val_count * val_bytes, GFP_KERNEL); 1026 if (!wval) { 1027 ret = -ENOMEM; 1028 dev_err(map->dev, "Error in memory allocation\n"); 1029 goto out; 1030 } 1031 for (i = 0; i < val_count * val_bytes; i += val_bytes) 1032 map->format.parse_val(wval + i); 1033 } 1034 /* 1035 * Some devices does not support bulk write, for 1036 * them we have a series of single write operations. 1037 */ 1038 if (map->use_single_rw) { 1039 for (i = 0; i < val_count; i++) { 1040 ret = regmap_raw_write(map, 1041 reg + (i * map->reg_stride), 1042 val + (i * val_bytes), 1043 val_bytes); 1044 if (ret != 0) 1045 return ret; 1046 } 1047 } else { 1048 ret = _regmap_raw_write(map, reg, wval, val_bytes * val_count); 1049 } 1050 1051 if (val_bytes != 1) 1052 kfree(wval); 1053 1054 out: 1055 map->unlock(map); 1056 return ret; 1057 } 1058 EXPORT_SYMBOL_GPL(regmap_bulk_write); 1059 1060 static int _regmap_raw_read(struct regmap *map, unsigned int reg, void *val, 1061 unsigned int val_len) 1062 { 1063 u8 *u8 = map->work_buf; 1064 int ret; 1065 1066 ret = _regmap_select_page(map, ®, val_len / map->format.val_bytes); 1067 if (ret < 0) 1068 return ret; 1069 1070 map->format.format_reg(map->work_buf, reg, map->reg_shift); 1071 1072 /* 1073 * Some buses or devices flag reads by setting the high bits in the 1074 * register addresss; since it's always the high bits for all 1075 * current formats we can do this here rather than in 1076 * formatting. This may break if we get interesting formats. 1077 */ 1078 u8[0] |= map->read_flag_mask; 1079 1080 trace_regmap_hw_read_start(map->dev, reg, 1081 val_len / map->format.val_bytes); 1082 1083 ret = map->bus->read(map->bus_context, map->work_buf, 1084 map->format.reg_bytes + map->format.pad_bytes, 1085 val, val_len); 1086 1087 trace_regmap_hw_read_done(map->dev, reg, 1088 val_len / map->format.val_bytes); 1089 1090 return ret; 1091 } 1092 1093 static int _regmap_read(struct regmap *map, unsigned int reg, 1094 unsigned int *val) 1095 { 1096 int ret; 1097 1098 if (!map->cache_bypass) { 1099 ret = regcache_read(map, reg, val); 1100 if (ret == 0) 1101 return 0; 1102 } 1103 1104 if (!map->format.parse_val) 1105 return -EINVAL; 1106 1107 if (map->cache_only) 1108 return -EBUSY; 1109 1110 ret = _regmap_raw_read(map, reg, map->work_buf, map->format.val_bytes); 1111 if (ret == 0) { 1112 *val = map->format.parse_val(map->work_buf); 1113 1114 #ifdef LOG_DEVICE 1115 if (strcmp(dev_name(map->dev), LOG_DEVICE) == 0) 1116 dev_info(map->dev, "%x => %x\n", reg, *val); 1117 #endif 1118 1119 trace_regmap_reg_read(map->dev, reg, *val); 1120 } 1121 1122 if (ret == 0 && !map->cache_bypass) 1123 regcache_write(map, reg, *val); 1124 1125 return ret; 1126 } 1127 1128 /** 1129 * regmap_read(): Read a value from a single register 1130 * 1131 * @map: Register map to write to 1132 * @reg: Register to be read from 1133 * @val: Pointer to store read value 1134 * 1135 * A value of zero will be returned on success, a negative errno will 1136 * be returned in error cases. 1137 */ 1138 int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val) 1139 { 1140 int ret; 1141 1142 if (reg % map->reg_stride) 1143 return -EINVAL; 1144 1145 map->lock(map); 1146 1147 ret = _regmap_read(map, reg, val); 1148 1149 map->unlock(map); 1150 1151 return ret; 1152 } 1153 EXPORT_SYMBOL_GPL(regmap_read); 1154 1155 /** 1156 * regmap_raw_read(): Read raw data from the device 1157 * 1158 * @map: Register map to write to 1159 * @reg: First register to be read from 1160 * @val: Pointer to store read value 1161 * @val_len: Size of data to read 1162 * 1163 * A value of zero will be returned on success, a negative errno will 1164 * be returned in error cases. 1165 */ 1166 int regmap_raw_read(struct regmap *map, unsigned int reg, void *val, 1167 size_t val_len) 1168 { 1169 size_t val_bytes = map->format.val_bytes; 1170 size_t val_count = val_len / val_bytes; 1171 unsigned int v; 1172 int ret, i; 1173 1174 if (val_len % map->format.val_bytes) 1175 return -EINVAL; 1176 if (reg % map->reg_stride) 1177 return -EINVAL; 1178 1179 map->lock(map); 1180 1181 if (regmap_volatile_range(map, reg, val_count) || map->cache_bypass || 1182 map->cache_type == REGCACHE_NONE) { 1183 /* Physical block read if there's no cache involved */ 1184 ret = _regmap_raw_read(map, reg, val, val_len); 1185 1186 } else { 1187 /* Otherwise go word by word for the cache; should be low 1188 * cost as we expect to hit the cache. 1189 */ 1190 for (i = 0; i < val_count; i++) { 1191 ret = _regmap_read(map, reg + (i * map->reg_stride), 1192 &v); 1193 if (ret != 0) 1194 goto out; 1195 1196 map->format.format_val(val + (i * val_bytes), v, 0); 1197 } 1198 } 1199 1200 out: 1201 map->unlock(map); 1202 1203 return ret; 1204 } 1205 EXPORT_SYMBOL_GPL(regmap_raw_read); 1206 1207 /** 1208 * regmap_bulk_read(): Read multiple registers from the device 1209 * 1210 * @map: Register map to write to 1211 * @reg: First register to be read from 1212 * @val: Pointer to store read value, in native register size for device 1213 * @val_count: Number of registers to read 1214 * 1215 * A value of zero will be returned on success, a negative errno will 1216 * be returned in error cases. 1217 */ 1218 int regmap_bulk_read(struct regmap *map, unsigned int reg, void *val, 1219 size_t val_count) 1220 { 1221 int ret, i; 1222 size_t val_bytes = map->format.val_bytes; 1223 bool vol = regmap_volatile_range(map, reg, val_count); 1224 1225 if (!map->format.parse_val) 1226 return -EINVAL; 1227 if (reg % map->reg_stride) 1228 return -EINVAL; 1229 1230 if (vol || map->cache_type == REGCACHE_NONE) { 1231 /* 1232 * Some devices does not support bulk read, for 1233 * them we have a series of single read operations. 1234 */ 1235 if (map->use_single_rw) { 1236 for (i = 0; i < val_count; i++) { 1237 ret = regmap_raw_read(map, 1238 reg + (i * map->reg_stride), 1239 val + (i * val_bytes), 1240 val_bytes); 1241 if (ret != 0) 1242 return ret; 1243 } 1244 } else { 1245 ret = regmap_raw_read(map, reg, val, 1246 val_bytes * val_count); 1247 if (ret != 0) 1248 return ret; 1249 } 1250 1251 for (i = 0; i < val_count * val_bytes; i += val_bytes) 1252 map->format.parse_val(val + i); 1253 } else { 1254 for (i = 0; i < val_count; i++) { 1255 unsigned int ival; 1256 ret = regmap_read(map, reg + (i * map->reg_stride), 1257 &ival); 1258 if (ret != 0) 1259 return ret; 1260 memcpy(val + (i * val_bytes), &ival, val_bytes); 1261 } 1262 } 1263 1264 return 0; 1265 } 1266 EXPORT_SYMBOL_GPL(regmap_bulk_read); 1267 1268 static int _regmap_update_bits(struct regmap *map, unsigned int reg, 1269 unsigned int mask, unsigned int val, 1270 bool *change) 1271 { 1272 int ret; 1273 unsigned int tmp, orig; 1274 1275 ret = _regmap_read(map, reg, &orig); 1276 if (ret != 0) 1277 return ret; 1278 1279 tmp = orig & ~mask; 1280 tmp |= val & mask; 1281 1282 if (tmp != orig) { 1283 ret = _regmap_write(map, reg, tmp); 1284 *change = true; 1285 } else { 1286 *change = false; 1287 } 1288 1289 return ret; 1290 } 1291 1292 /** 1293 * regmap_update_bits: Perform a read/modify/write cycle on the register map 1294 * 1295 * @map: Register map to update 1296 * @reg: Register to update 1297 * @mask: Bitmask to change 1298 * @val: New value for bitmask 1299 * 1300 * Returns zero for success, a negative number on error. 1301 */ 1302 int regmap_update_bits(struct regmap *map, unsigned int reg, 1303 unsigned int mask, unsigned int val) 1304 { 1305 bool change; 1306 int ret; 1307 1308 map->lock(map); 1309 ret = _regmap_update_bits(map, reg, mask, val, &change); 1310 map->unlock(map); 1311 1312 return ret; 1313 } 1314 EXPORT_SYMBOL_GPL(regmap_update_bits); 1315 1316 /** 1317 * regmap_update_bits_check: Perform a read/modify/write cycle on the 1318 * register map and report if updated 1319 * 1320 * @map: Register map to update 1321 * @reg: Register to update 1322 * @mask: Bitmask to change 1323 * @val: New value for bitmask 1324 * @change: Boolean indicating if a write was done 1325 * 1326 * Returns zero for success, a negative number on error. 1327 */ 1328 int regmap_update_bits_check(struct regmap *map, unsigned int reg, 1329 unsigned int mask, unsigned int val, 1330 bool *change) 1331 { 1332 int ret; 1333 1334 map->lock(map); 1335 ret = _regmap_update_bits(map, reg, mask, val, change); 1336 map->unlock(map); 1337 return ret; 1338 } 1339 EXPORT_SYMBOL_GPL(regmap_update_bits_check); 1340 1341 /** 1342 * regmap_register_patch: Register and apply register updates to be applied 1343 * on device initialistion 1344 * 1345 * @map: Register map to apply updates to. 1346 * @regs: Values to update. 1347 * @num_regs: Number of entries in regs. 1348 * 1349 * Register a set of register updates to be applied to the device 1350 * whenever the device registers are synchronised with the cache and 1351 * apply them immediately. Typically this is used to apply 1352 * corrections to be applied to the device defaults on startup, such 1353 * as the updates some vendors provide to undocumented registers. 1354 */ 1355 int regmap_register_patch(struct regmap *map, const struct reg_default *regs, 1356 int num_regs) 1357 { 1358 int i, ret; 1359 bool bypass; 1360 1361 /* If needed the implementation can be extended to support this */ 1362 if (map->patch) 1363 return -EBUSY; 1364 1365 map->lock(map); 1366 1367 bypass = map->cache_bypass; 1368 1369 map->cache_bypass = true; 1370 1371 /* Write out first; it's useful to apply even if we fail later. */ 1372 for (i = 0; i < num_regs; i++) { 1373 ret = _regmap_write(map, regs[i].reg, regs[i].def); 1374 if (ret != 0) { 1375 dev_err(map->dev, "Failed to write %x = %x: %d\n", 1376 regs[i].reg, regs[i].def, ret); 1377 goto out; 1378 } 1379 } 1380 1381 map->patch = kcalloc(num_regs, sizeof(struct reg_default), GFP_KERNEL); 1382 if (map->patch != NULL) { 1383 memcpy(map->patch, regs, 1384 num_regs * sizeof(struct reg_default)); 1385 map->patch_regs = num_regs; 1386 } else { 1387 ret = -ENOMEM; 1388 } 1389 1390 out: 1391 map->cache_bypass = bypass; 1392 1393 map->unlock(map); 1394 1395 return ret; 1396 } 1397 EXPORT_SYMBOL_GPL(regmap_register_patch); 1398 1399 /* 1400 * regmap_get_val_bytes(): Report the size of a register value 1401 * 1402 * Report the size of a register value, mainly intended to for use by 1403 * generic infrastructure built on top of regmap. 1404 */ 1405 int regmap_get_val_bytes(struct regmap *map) 1406 { 1407 if (map->format.format_write) 1408 return -EINVAL; 1409 1410 return map->format.val_bytes; 1411 } 1412 EXPORT_SYMBOL_GPL(regmap_get_val_bytes); 1413 1414 static int __init regmap_initcall(void) 1415 { 1416 regmap_debugfs_initcall(); 1417 1418 return 0; 1419 } 1420 postcore_initcall(regmap_initcall); 1421