Lines Matching refs:br

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