Lines Matching refs:br

181  * Format transaction layer data in br->trans_buf according to the register
182 * access request, Store valid transaction layer data length in br->trans_len.
184 static int br_trans_tx_prepare(struct spi_avmm_bridge *br, bool is_read, u32 reg,
205 header = (struct trans_req_header *)br->trans_buf;
215 if (trans_len > sizeof(br->trans_buf))
218 data = (__le32 *)(br->trans_buf + TRANS_REQ_HD_SIZE);
225 br->trans_len = trans_len;
231 * Convert transaction layer data (in br->trans_buf) to phy layer data, store
232 * them in br->phy_buf. Pad the phy_buf aligned with SPI's BPW. Store valid phy
233 * layer data length in br->phy_len.
253 static int br_pkt_phy_tx_prepare(struct spi_avmm_bridge *br)
259 tb = br->trans_buf;
260 tb_end = tb + br->trans_len;
261 pb = br->phy_buf;
262 pb_limit = pb + ARRAY_SIZE(br->phy_buf);
315 br->phy_len = pb - br->phy_buf;
317 if (br->word_len == 1)
321 aligned_phy_len = ALIGN(br->phy_len, br->word_len);
322 if (aligned_phy_len > sizeof(br->phy_buf))
325 if (aligned_phy_len == br->phy_len)
330 memmove(&br->phy_buf[aligned_phy_len - move_size], pb_eop, move_size);
333 memset(pb_eop, PHY_IDLE, aligned_phy_len - br->phy_len);
336 br->phy_len = aligned_phy_len;
345 static int br_do_tx(struct spi_avmm_bridge *br)
348 if (br->swap_words)
349 br->swap_words(br->phy_buf, br->phy_len);
352 return spi_write(br->spi, br->phy_buf, br->phy_len);
357 * them to transaction layer data in br->trans_buf. It also stores the length
358 * of rx transaction layer data in br->trans_len
365 static int br_do_rx_and_pkt_phy_parse(struct spi_avmm_bridge *br)
369 struct device *dev = &br->spi->dev;
374 tb_limit = br->trans_buf + ARRAY_SIZE(br->trans_buf);
375 pb = br->phy_buf;
378 ret = spi_read(br->spi, pb, br->word_len);
383 if (br->swap_words)
384 br->swap_words(pb, br->word_len);
387 for (i = 0; i < br->word_len; i++) {
418 tb = br->trans_buf;
464 br->trans_len = tb - br->trans_buf;
506 static int br_rd_trans_rx_parse(struct spi_avmm_bridge *br,
509 unsigned int i, trans_len = br->trans_len;
515 data = (__le32 *)br->trans_buf;
526 static int br_wr_trans_rx_parse(struct spi_avmm_bridge *br,
529 unsigned int trans_len = br->trans_len;
537 resp = (struct trans_resp_header *)br->trans_buf;
555 struct spi_avmm_bridge *br = context;
559 br->trans_len = 0;
560 br->phy_len = 0;
562 ret = br_trans_tx_prepare(br, is_read, reg, value, count);
566 ret = br_pkt_phy_tx_prepare(br);
570 ret = br_do_tx(br);
574 ret = br_do_rx_and_pkt_phy_parse(br);
579 return br_rd_trans_rx_parse(br, value, count);
581 return br_wr_trans_rx_parse(br, count);
625 struct spi_avmm_bridge *br;
639 br = kzalloc(sizeof(*br), GFP_KERNEL);
640 if (!br)
643 br->spi = spi;
644 br->word_len = spi->bits_per_word / 8;
645 if (br->word_len == 4) {
651 br->swap_words = br_swap_words_32;
654 return br;