1 // SPDX-License-Identifier: GPL-2.0 2 // 3 // Register map access API - SPI AVMM support 4 // 5 // Copyright (C) 2018-2020 Intel Corporation. All rights reserved. 6 7 #include <linux/module.h> 8 #include <linux/regmap.h> 9 #include <linux/spi/spi.h> 10 #include <linux/swab.h> 11 12 /* 13 * This driver implements the regmap operations for a generic SPI 14 * master to access the registers of the spi slave chip which has an 15 * Avalone bus in it. 16 * 17 * The "SPI slave to Avalon Master Bridge" (spi-avmm) IP should be integrated 18 * in the spi slave chip. The IP acts as a bridge to convert encoded streams of 19 * bytes from the host to the internal register read/write on Avalon bus. In 20 * order to issue register access requests to the slave chip, the host should 21 * send formatted bytes that conform to the transfer protocol. 22 * The transfer protocol contains 3 layers: transaction layer, packet layer 23 * and physical layer. 24 * 25 * Reference Documents could be found at: 26 * https://www.intel.com/content/www/us/en/programmable/documentation/sfo1400787952932.html 27 * 28 * Chapter "SPI Slave/JTAG to Avalon Master Bridge Cores" is a general 29 * introduction to the protocol. 30 * 31 * Chapter "Avalon Packets to Transactions Converter Core" describes 32 * the transaction layer. 33 * 34 * Chapter "Avalon-ST Bytes to Packets and Packets to Bytes Converter Cores" 35 * describes the packet layer. 36 * 37 * Chapter "Avalon-ST Serial Peripheral Interface Core" describes the 38 * physical layer. 39 * 40 * 41 * When host issues a regmap read/write, the driver will transform the request 42 * to byte stream layer by layer. It formats the register addr, value and 43 * length to the transaction layer request, then converts the request to packet 44 * layer bytes stream and then to physical layer bytes stream. Finally the 45 * driver sends the formatted byte stream over SPI bus to the slave chip. 46 * 47 * The spi-avmm IP on the slave chip decodes the byte stream and initiates 48 * register read/write on its internal Avalon bus, and then encodes the 49 * response to byte stream and sends back to host. 50 * 51 * The driver receives the byte stream, reverses the 3 layers transformation, 52 * and finally gets the response value (read out data for register read, 53 * successful written size for register write). 54 */ 55 56 #define PKT_SOP 0x7a 57 #define PKT_EOP 0x7b 58 #define PKT_CHANNEL 0x7c 59 #define PKT_ESC 0x7d 60 61 #define PHY_IDLE 0x4a 62 #define PHY_ESC 0x4d 63 64 #define TRANS_CODE_WRITE 0x0 65 #define TRANS_CODE_SEQ_WRITE 0x4 66 #define TRANS_CODE_READ 0x10 67 #define TRANS_CODE_SEQ_READ 0x14 68 #define TRANS_CODE_NO_TRANS 0x7f 69 70 #define SPI_AVMM_XFER_TIMEOUT (msecs_to_jiffies(200)) 71 72 /* slave's register addr is 32 bits */ 73 #define SPI_AVMM_REG_SIZE 4UL 74 /* slave's register value is 32 bits */ 75 #define SPI_AVMM_VAL_SIZE 4UL 76 77 /* 78 * max rx size could be larger. But considering the buffer consuming, 79 * it is proper that we limit 1KB xfer at max. 80 */ 81 #define MAX_READ_CNT 256UL 82 #define MAX_WRITE_CNT 1UL 83 84 struct trans_req_header { 85 u8 code; 86 u8 rsvd; 87 __be16 size; 88 __be32 addr; 89 } __packed; 90 91 struct trans_resp_header { 92 u8 r_code; 93 u8 rsvd; 94 __be16 size; 95 } __packed; 96 97 #define TRANS_REQ_HD_SIZE (sizeof(struct trans_req_header)) 98 #define TRANS_RESP_HD_SIZE (sizeof(struct trans_resp_header)) 99 100 /* 101 * In transaction layer, 102 * the write request format is: Transaction request header + data 103 * the read request format is: Transaction request header 104 * the write response format is: Transaction response header 105 * the read response format is: pure data, no Transaction response header 106 */ 107 #define TRANS_WR_TX_SIZE(n) (TRANS_REQ_HD_SIZE + SPI_AVMM_VAL_SIZE * (n)) 108 #define TRANS_RD_TX_SIZE TRANS_REQ_HD_SIZE 109 #define TRANS_TX_MAX TRANS_WR_TX_SIZE(MAX_WRITE_CNT) 110 111 #define TRANS_RD_RX_SIZE(n) (SPI_AVMM_VAL_SIZE * (n)) 112 #define TRANS_WR_RX_SIZE TRANS_RESP_HD_SIZE 113 #define TRANS_RX_MAX TRANS_RD_RX_SIZE(MAX_READ_CNT) 114 115 /* tx & rx share one transaction layer buffer */ 116 #define TRANS_BUF_SIZE ((TRANS_TX_MAX > TRANS_RX_MAX) ? \ 117 TRANS_TX_MAX : TRANS_RX_MAX) 118 119 /* 120 * In tx phase, the host prepares all the phy layer bytes of a request in the 121 * phy buffer and sends them in a batch. 122 * 123 * The packet layer and physical layer defines several special chars for 124 * various purpose, when a transaction layer byte hits one of these special 125 * chars, it should be escaped. The escape rule is, "Escape char first, 126 * following the byte XOR'ed with 0x20". 127 * 128 * This macro defines the max possible length of the phy data. In the worst 129 * case, all transaction layer bytes need to be escaped (so the data length 130 * doubles), plus 4 special chars (SOP, CHANNEL, CHANNEL_NUM, EOP). Finally 131 * we should make sure the length is aligned to SPI BPW. 132 */ 133 #define PHY_TX_MAX ALIGN(2 * TRANS_TX_MAX + 4, 4) 134 135 /* 136 * Unlike tx, phy rx is affected by possible PHY_IDLE bytes from slave, the max 137 * length of the rx bit stream is unpredictable. So the driver reads the words 138 * one by one, and parses each word immediately into transaction layer buffer. 139 * Only one word length of phy buffer is used for rx. 140 */ 141 #define PHY_BUF_SIZE PHY_TX_MAX 142 143 /** 144 * struct spi_avmm_bridge - SPI slave to AVMM bus master bridge 145 * 146 * @spi: spi slave associated with this bridge. 147 * @word_len: bytes of word for spi transfer. 148 * @trans_len: length of valid data in trans_buf. 149 * @phy_len: length of valid data in phy_buf. 150 * @trans_buf: the bridge buffer for transaction layer data. 151 * @phy_buf: the bridge buffer for physical layer data. 152 * @swap_words: the word swapping cb for phy data. NULL if not needed. 153 * 154 * As a device's registers are implemented on the AVMM bus address space, it 155 * requires the driver to issue formatted requests to spi slave to AVMM bus 156 * master bridge to perform register access. 157 */ 158 struct spi_avmm_bridge { 159 struct spi_device *spi; 160 unsigned char word_len; 161 unsigned int trans_len; 162 unsigned int phy_len; 163 /* bridge buffer used in translation between protocol layers */ 164 char trans_buf[TRANS_BUF_SIZE]; 165 char phy_buf[PHY_BUF_SIZE]; 166 void (*swap_words)(void *buf, unsigned int len); 167 }; 168 169 static void br_swap_words_32(void *buf, unsigned int len) 170 { 171 swab32_array(buf, len / 4); 172 } 173 174 /* 175 * Format transaction layer data in br->trans_buf according to the register 176 * access request, Store valid transaction layer data length in br->trans_len. 177 */ 178 static int br_trans_tx_prepare(struct spi_avmm_bridge *br, bool is_read, u32 reg, 179 u32 *wr_val, u32 count) 180 { 181 struct trans_req_header *header; 182 unsigned int trans_len; 183 u8 code; 184 __le32 *data; 185 int i; 186 187 if (is_read) { 188 if (count == 1) 189 code = TRANS_CODE_READ; 190 else 191 code = TRANS_CODE_SEQ_READ; 192 } else { 193 if (count == 1) 194 code = TRANS_CODE_WRITE; 195 else 196 code = TRANS_CODE_SEQ_WRITE; 197 } 198 199 header = (struct trans_req_header *)br->trans_buf; 200 header->code = code; 201 header->rsvd = 0; 202 header->size = cpu_to_be16((u16)count * SPI_AVMM_VAL_SIZE); 203 header->addr = cpu_to_be32(reg); 204 205 trans_len = TRANS_REQ_HD_SIZE; 206 207 if (!is_read) { 208 trans_len += SPI_AVMM_VAL_SIZE * count; 209 if (trans_len > sizeof(br->trans_buf)) 210 return -ENOMEM; 211 212 data = (__le32 *)(br->trans_buf + TRANS_REQ_HD_SIZE); 213 214 for (i = 0; i < count; i++) 215 *data++ = cpu_to_le32(*wr_val++); 216 } 217 218 /* Store valid trans data length for next layer */ 219 br->trans_len = trans_len; 220 221 return 0; 222 } 223 224 /* 225 * Convert transaction layer data (in br->trans_buf) to phy layer data, store 226 * them in br->phy_buf. Pad the phy_buf aligned with SPI's BPW. Store valid phy 227 * layer data length in br->phy_len. 228 * 229 * phy_buf len should be aligned with SPI's BPW. Spare bytes should be padded 230 * with PHY_IDLE, then the slave will just drop them. 231 * 232 * The driver will not simply pad 4a at the tail. The concern is that driver 233 * will not store MISO data during tx phase, if the driver pads 4a at the tail, 234 * it is possible that if the slave is fast enough to response at the padding 235 * time. As a result these rx bytes are lost. In the following case, 7a,7c,00 236 * will lost. 237 * MOSI ...|7a|7c|00|10| |00|00|04|02| |4b|7d|5a|7b| |40|4a|4a|4a| |XX|XX|... 238 * MISO ...|4a|4a|4a|4a| |4a|4a|4a|4a| |4a|4a|4a|4a| |4a|7a|7c|00| |78|56|... 239 * 240 * So the driver moves EOP and bytes after EOP to the end of the aligned size, 241 * then fill the hole with PHY_IDLE. As following: 242 * before pad ...|7a|7c|00|10| |00|00|04|02| |4b|7d|5a|7b| |40| 243 * after pad ...|7a|7c|00|10| |00|00|04|02| |4b|7d|5a|4a| |4a|4a|7b|40| 244 * Then if the slave will not get the entire packet before the tx phase is 245 * over, it can't responsed to anything either. 246 */ 247 static int br_pkt_phy_tx_prepare(struct spi_avmm_bridge *br) 248 { 249 char *tb, *tb_end, *pb, *pb_limit, *pb_eop = NULL; 250 unsigned int aligned_phy_len, move_size; 251 bool need_esc = false; 252 253 tb = br->trans_buf; 254 tb_end = tb + br->trans_len; 255 pb = br->phy_buf; 256 pb_limit = pb + ARRAY_SIZE(br->phy_buf); 257 258 *pb++ = PKT_SOP; 259 260 /* 261 * The driver doesn't support multiple channels so the channel number 262 * is always 0. 263 */ 264 *pb++ = PKT_CHANNEL; 265 *pb++ = 0x0; 266 267 for (; pb < pb_limit && tb < tb_end; pb++) { 268 if (need_esc) { 269 *pb = *tb++ ^ 0x20; 270 need_esc = false; 271 continue; 272 } 273 274 /* EOP should be inserted before the last valid char */ 275 if (tb == tb_end - 1 && !pb_eop) { 276 *pb = PKT_EOP; 277 pb_eop = pb; 278 continue; 279 } 280 281 /* 282 * insert an ESCAPE char if the data value equals any special 283 * char. 284 */ 285 switch (*tb) { 286 case PKT_SOP: 287 case PKT_EOP: 288 case PKT_CHANNEL: 289 case PKT_ESC: 290 *pb = PKT_ESC; 291 need_esc = true; 292 break; 293 case PHY_IDLE: 294 case PHY_ESC: 295 *pb = PHY_ESC; 296 need_esc = true; 297 break; 298 default: 299 *pb = *tb++; 300 break; 301 } 302 } 303 304 /* The phy buffer is used out but transaction layer data remains */ 305 if (tb < tb_end) 306 return -ENOMEM; 307 308 /* Store valid phy data length for spi transfer */ 309 br->phy_len = pb - br->phy_buf; 310 311 if (br->word_len == 1) 312 return 0; 313 314 /* Do phy buf padding if word_len > 1 byte. */ 315 aligned_phy_len = ALIGN(br->phy_len, br->word_len); 316 if (aligned_phy_len > sizeof(br->phy_buf)) 317 return -ENOMEM; 318 319 if (aligned_phy_len == br->phy_len) 320 return 0; 321 322 /* move EOP and bytes after EOP to the end of aligned size */ 323 move_size = pb - pb_eop; 324 memmove(&br->phy_buf[aligned_phy_len - move_size], pb_eop, move_size); 325 326 /* fill the hole with PHY_IDLEs */ 327 memset(pb_eop, PHY_IDLE, aligned_phy_len - br->phy_len); 328 329 /* update the phy data length */ 330 br->phy_len = aligned_phy_len; 331 332 return 0; 333 } 334 335 /* 336 * In tx phase, the slave only returns PHY_IDLE (0x4a). So the driver will 337 * ignore rx in tx phase. 338 */ 339 static int br_do_tx(struct spi_avmm_bridge *br) 340 { 341 /* reorder words for spi transfer */ 342 if (br->swap_words) 343 br->swap_words(br->phy_buf, br->phy_len); 344 345 /* send all data in phy_buf */ 346 return spi_write(br->spi, br->phy_buf, br->phy_len); 347 } 348 349 /* 350 * This function read the rx byte stream from SPI word by word and convert 351 * them to transaction layer data in br->trans_buf. It also stores the length 352 * of rx transaction layer data in br->trans_len 353 * 354 * The slave may send an unknown number of PHY_IDLEs in rx phase, so we cannot 355 * prepare a fixed length buffer to receive all of the rx data in a batch. We 356 * have to read word by word and convert them to transaction layer data at 357 * once. 358 */ 359 static int br_do_rx_and_pkt_phy_parse(struct spi_avmm_bridge *br) 360 { 361 bool eop_found = false, channel_found = false, esc_found = false; 362 bool valid_word = false, last_try = false; 363 struct device *dev = &br->spi->dev; 364 char *pb, *tb_limit, *tb = NULL; 365 unsigned long poll_timeout; 366 int ret, i; 367 368 tb_limit = br->trans_buf + ARRAY_SIZE(br->trans_buf); 369 pb = br->phy_buf; 370 poll_timeout = jiffies + SPI_AVMM_XFER_TIMEOUT; 371 while (tb < tb_limit) { 372 ret = spi_read(br->spi, pb, br->word_len); 373 if (ret) 374 return ret; 375 376 /* reorder the word back */ 377 if (br->swap_words) 378 br->swap_words(pb, br->word_len); 379 380 valid_word = false; 381 for (i = 0; i < br->word_len; i++) { 382 /* drop everything before first SOP */ 383 if (!tb && pb[i] != PKT_SOP) 384 continue; 385 386 /* drop PHY_IDLE */ 387 if (pb[i] == PHY_IDLE) 388 continue; 389 390 valid_word = true; 391 392 /* 393 * We don't support multiple channels, so error out if 394 * a non-zero channel number is found. 395 */ 396 if (channel_found) { 397 if (pb[i] != 0) { 398 dev_err(dev, "%s channel num != 0\n", 399 __func__); 400 return -EFAULT; 401 } 402 403 channel_found = false; 404 continue; 405 } 406 407 switch (pb[i]) { 408 case PKT_SOP: 409 /* 410 * reset the parsing if a second SOP appears. 411 */ 412 tb = br->trans_buf; 413 eop_found = false; 414 channel_found = false; 415 esc_found = false; 416 break; 417 case PKT_EOP: 418 /* 419 * No special char is expected after ESC char. 420 * No special char (except ESC & PHY_IDLE) is 421 * expected after EOP char. 422 * 423 * The special chars are all dropped. 424 */ 425 if (esc_found || eop_found) 426 return -EFAULT; 427 428 eop_found = true; 429 break; 430 case PKT_CHANNEL: 431 if (esc_found || eop_found) 432 return -EFAULT; 433 434 channel_found = true; 435 break; 436 case PKT_ESC: 437 case PHY_ESC: 438 if (esc_found) 439 return -EFAULT; 440 441 esc_found = true; 442 break; 443 default: 444 /* Record the normal byte in trans_buf. */ 445 if (esc_found) { 446 *tb++ = pb[i] ^ 0x20; 447 esc_found = false; 448 } else { 449 *tb++ = pb[i]; 450 } 451 452 /* 453 * We get the last normal byte after EOP, it is 454 * time we finish. Normally the function should 455 * return here. 456 */ 457 if (eop_found) { 458 br->trans_len = tb - br->trans_buf; 459 return 0; 460 } 461 } 462 } 463 464 if (valid_word) { 465 /* update poll timeout when we get valid word */ 466 poll_timeout = jiffies + SPI_AVMM_XFER_TIMEOUT; 467 last_try = false; 468 } else { 469 /* 470 * We timeout when rx keeps invalid for some time. But 471 * it is possible we are scheduled out for long time 472 * after a spi_read. So when we are scheduled in, a SW 473 * timeout happens. But actually HW may have worked fine and 474 * has been ready long time ago. So we need to do an extra 475 * read, if we get a valid word then we could continue rx, 476 * otherwise real a HW issue happens. 477 */ 478 if (last_try) 479 return -ETIMEDOUT; 480 481 if (time_after(jiffies, poll_timeout)) 482 last_try = true; 483 } 484 } 485 486 /* 487 * We have used out all transfer layer buffer but cannot find the end 488 * of the byte stream. 489 */ 490 dev_err(dev, "%s transfer buffer is full but rx doesn't end\n", 491 __func__); 492 493 return -EFAULT; 494 } 495 496 /* 497 * For read transactions, the avmm bus will directly return register values 498 * without transaction response header. 499 */ 500 static int br_rd_trans_rx_parse(struct spi_avmm_bridge *br, 501 u32 *val, unsigned int expected_count) 502 { 503 unsigned int i, trans_len = br->trans_len; 504 __le32 *data; 505 506 if (expected_count * SPI_AVMM_VAL_SIZE != trans_len) 507 return -EFAULT; 508 509 data = (__le32 *)br->trans_buf; 510 for (i = 0; i < expected_count; i++) 511 *val++ = le32_to_cpu(*data++); 512 513 return 0; 514 } 515 516 /* 517 * For write transactions, the slave will return a transaction response 518 * header. 519 */ 520 static int br_wr_trans_rx_parse(struct spi_avmm_bridge *br, 521 unsigned int expected_count) 522 { 523 unsigned int trans_len = br->trans_len; 524 struct trans_resp_header *resp; 525 u8 code; 526 u16 val_len; 527 528 if (trans_len != TRANS_RESP_HD_SIZE) 529 return -EFAULT; 530 531 resp = (struct trans_resp_header *)br->trans_buf; 532 533 code = resp->r_code ^ 0x80; 534 val_len = be16_to_cpu(resp->size); 535 if (!val_len || val_len != expected_count * SPI_AVMM_VAL_SIZE) 536 return -EFAULT; 537 538 /* error out if the trans code doesn't align with the val size */ 539 if ((val_len == SPI_AVMM_VAL_SIZE && code != TRANS_CODE_WRITE) || 540 (val_len > SPI_AVMM_VAL_SIZE && code != TRANS_CODE_SEQ_WRITE)) 541 return -EFAULT; 542 543 return 0; 544 } 545 546 static int do_reg_access(void *context, bool is_read, unsigned int reg, 547 unsigned int *value, unsigned int count) 548 { 549 struct spi_avmm_bridge *br = context; 550 int ret; 551 552 /* invalidate bridge buffers first */ 553 br->trans_len = 0; 554 br->phy_len = 0; 555 556 ret = br_trans_tx_prepare(br, is_read, reg, value, count); 557 if (ret) 558 return ret; 559 560 ret = br_pkt_phy_tx_prepare(br); 561 if (ret) 562 return ret; 563 564 ret = br_do_tx(br); 565 if (ret) 566 return ret; 567 568 ret = br_do_rx_and_pkt_phy_parse(br); 569 if (ret) 570 return ret; 571 572 if (is_read) 573 return br_rd_trans_rx_parse(br, value, count); 574 else 575 return br_wr_trans_rx_parse(br, count); 576 } 577 578 static int regmap_spi_avmm_gather_write(void *context, 579 const void *reg_buf, size_t reg_len, 580 const void *val_buf, size_t val_len) 581 { 582 if (reg_len != SPI_AVMM_REG_SIZE) 583 return -EINVAL; 584 585 if (!IS_ALIGNED(val_len, SPI_AVMM_VAL_SIZE)) 586 return -EINVAL; 587 588 return do_reg_access(context, false, *(u32 *)reg_buf, (u32 *)val_buf, 589 val_len / SPI_AVMM_VAL_SIZE); 590 } 591 592 static int regmap_spi_avmm_write(void *context, const void *data, size_t bytes) 593 { 594 if (bytes < SPI_AVMM_REG_SIZE + SPI_AVMM_VAL_SIZE) 595 return -EINVAL; 596 597 return regmap_spi_avmm_gather_write(context, data, SPI_AVMM_REG_SIZE, 598 data + SPI_AVMM_REG_SIZE, 599 bytes - SPI_AVMM_REG_SIZE); 600 } 601 602 static int regmap_spi_avmm_read(void *context, 603 const void *reg_buf, size_t reg_len, 604 void *val_buf, size_t val_len) 605 { 606 if (reg_len != SPI_AVMM_REG_SIZE) 607 return -EINVAL; 608 609 if (!IS_ALIGNED(val_len, SPI_AVMM_VAL_SIZE)) 610 return -EINVAL; 611 612 return do_reg_access(context, true, *(u32 *)reg_buf, val_buf, 613 (val_len / SPI_AVMM_VAL_SIZE)); 614 } 615 616 static struct spi_avmm_bridge * 617 spi_avmm_bridge_ctx_gen(struct spi_device *spi) 618 { 619 struct spi_avmm_bridge *br; 620 621 if (!spi) 622 return ERR_PTR(-ENODEV); 623 624 /* Only support BPW == 8 or 32 now. Try 32 BPW first. */ 625 spi->mode = SPI_MODE_1; 626 spi->bits_per_word = 32; 627 if (spi_setup(spi)) { 628 spi->bits_per_word = 8; 629 if (spi_setup(spi)) 630 return ERR_PTR(-EINVAL); 631 } 632 633 br = kzalloc(sizeof(*br), GFP_KERNEL); 634 if (!br) 635 return ERR_PTR(-ENOMEM); 636 637 br->spi = spi; 638 br->word_len = spi->bits_per_word / 8; 639 if (br->word_len == 4) { 640 /* 641 * The protocol requires little endian byte order but MSB 642 * first. So driver needs to swap the byte order word by word 643 * if word length > 1. 644 */ 645 br->swap_words = br_swap_words_32; 646 } 647 648 return br; 649 } 650 651 static void spi_avmm_bridge_ctx_free(void *context) 652 { 653 kfree(context); 654 } 655 656 static const struct regmap_bus regmap_spi_avmm_bus = { 657 .write = regmap_spi_avmm_write, 658 .gather_write = regmap_spi_avmm_gather_write, 659 .read = regmap_spi_avmm_read, 660 .reg_format_endian_default = REGMAP_ENDIAN_NATIVE, 661 .val_format_endian_default = REGMAP_ENDIAN_NATIVE, 662 .max_raw_read = SPI_AVMM_VAL_SIZE * MAX_READ_CNT, 663 .max_raw_write = SPI_AVMM_VAL_SIZE * MAX_WRITE_CNT, 664 .free_context = spi_avmm_bridge_ctx_free, 665 }; 666 667 struct regmap *__regmap_init_spi_avmm(struct spi_device *spi, 668 const struct regmap_config *config, 669 struct lock_class_key *lock_key, 670 const char *lock_name) 671 { 672 struct spi_avmm_bridge *bridge; 673 struct regmap *map; 674 675 bridge = spi_avmm_bridge_ctx_gen(spi); 676 if (IS_ERR(bridge)) 677 return ERR_CAST(bridge); 678 679 map = __regmap_init(&spi->dev, ®map_spi_avmm_bus, 680 bridge, config, lock_key, lock_name); 681 if (IS_ERR(map)) { 682 spi_avmm_bridge_ctx_free(bridge); 683 return ERR_CAST(map); 684 } 685 686 return map; 687 } 688 EXPORT_SYMBOL_GPL(__regmap_init_spi_avmm); 689 690 struct regmap *__devm_regmap_init_spi_avmm(struct spi_device *spi, 691 const struct regmap_config *config, 692 struct lock_class_key *lock_key, 693 const char *lock_name) 694 { 695 struct spi_avmm_bridge *bridge; 696 struct regmap *map; 697 698 bridge = spi_avmm_bridge_ctx_gen(spi); 699 if (IS_ERR(bridge)) 700 return ERR_CAST(bridge); 701 702 map = __devm_regmap_init(&spi->dev, ®map_spi_avmm_bus, 703 bridge, config, lock_key, lock_name); 704 if (IS_ERR(map)) { 705 spi_avmm_bridge_ctx_free(bridge); 706 return ERR_CAST(map); 707 } 708 709 return map; 710 } 711 EXPORT_SYMBOL_GPL(__devm_regmap_init_spi_avmm); 712 713 MODULE_DESCRIPTION("Register map access API - SPI AVMM support"); 714 MODULE_LICENSE("GPL v2"); 715