Lines Matching refs:br

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.
178 static int br_trans_tx_prepare(struct spi_avmm_bridge *br, bool is_read, u32 reg,
199 header = (struct trans_req_header *)br->trans_buf;
209 if (trans_len > sizeof(br->trans_buf))
212 data = (__le32 *)(br->trans_buf + TRANS_REQ_HD_SIZE);
219 br->trans_len = trans_len;
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.
247 static int br_pkt_phy_tx_prepare(struct spi_avmm_bridge *br)
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);
309 br->phy_len = pb - br->phy_buf;
311 if (br->word_len == 1)
315 aligned_phy_len = ALIGN(br->phy_len, br->word_len);
316 if (aligned_phy_len > sizeof(br->phy_buf))
319 if (aligned_phy_len == br->phy_len)
324 memmove(&br->phy_buf[aligned_phy_len - move_size], pb_eop, move_size);
327 memset(pb_eop, PHY_IDLE, aligned_phy_len - br->phy_len);
330 br->phy_len = aligned_phy_len;
339 static int br_do_tx(struct spi_avmm_bridge *br)
342 if (br->swap_words)
343 br->swap_words(br->phy_buf, br->phy_len);
346 return spi_write(br->spi, br->phy_buf, br->phy_len);
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
359 static int br_do_rx_and_pkt_phy_parse(struct spi_avmm_bridge *br)
363 struct device *dev = &br->spi->dev;
368 tb_limit = br->trans_buf + ARRAY_SIZE(br->trans_buf);
369 pb = br->phy_buf;
372 ret = spi_read(br->spi, pb, br->word_len);
377 if (br->swap_words)
378 br->swap_words(pb, br->word_len);
381 for (i = 0; i < br->word_len; i++) {
412 tb = br->trans_buf;
458 br->trans_len = tb - br->trans_buf;
500 static int br_rd_trans_rx_parse(struct spi_avmm_bridge *br,
503 unsigned int i, trans_len = br->trans_len;
509 data = (__le32 *)br->trans_buf;
520 static int br_wr_trans_rx_parse(struct spi_avmm_bridge *br,
523 unsigned int trans_len = br->trans_len;
531 resp = (struct trans_resp_header *)br->trans_buf;
549 struct spi_avmm_bridge *br = context;
553 br->trans_len = 0;
554 br->phy_len = 0;
556 ret = br_trans_tx_prepare(br, is_read, reg, value, count);
560 ret = br_pkt_phy_tx_prepare(br);
564 ret = br_do_tx(br);
568 ret = br_do_rx_and_pkt_phy_parse(br);
573 return br_rd_trans_rx_parse(br, value, count);
575 return br_wr_trans_rx_parse(br, count);
619 struct spi_avmm_bridge *br;
633 br = kzalloc(sizeof(*br), GFP_KERNEL);
634 if (!br)
637 br->spi = spi;
638 br->word_len = spi->bits_per_word / 8;
639 if (br->word_len == 4) {
645 br->swap_words = br_swap_words_32;
648 return br;