Lines Matching refs:mb_chan
68 static void mb_chan_send_msg(struct slimpro_mbox_chan *mb_chan, u32 *msg)
70 writel(msg[1], mb_chan->reg + REG_DB_DOUT0);
71 writel(msg[2], mb_chan->reg + REG_DB_DOUT1);
72 writel(msg[0], mb_chan->reg + REG_DB_OUT);
75 static void mb_chan_recv_msg(struct slimpro_mbox_chan *mb_chan)
77 mb_chan->rx_msg[1] = readl(mb_chan->reg + REG_DB_DIN0);
78 mb_chan->rx_msg[2] = readl(mb_chan->reg + REG_DB_DIN1);
79 mb_chan->rx_msg[0] = readl(mb_chan->reg + REG_DB_IN);
82 static int mb_chan_status_ack(struct slimpro_mbox_chan *mb_chan)
84 u32 val = readl(mb_chan->reg + REG_DB_STAT);
87 writel(MBOX_STATUS_ACK_MASK, mb_chan->reg + REG_DB_STAT);
93 static int mb_chan_status_avail(struct slimpro_mbox_chan *mb_chan)
95 u32 val = readl(mb_chan->reg + REG_DB_STAT);
98 mb_chan_recv_msg(mb_chan);
99 writel(MBOX_STATUS_AVAIL_MASK, mb_chan->reg + REG_DB_STAT);
107 struct slimpro_mbox_chan *mb_chan = id;
109 if (mb_chan_status_ack(mb_chan))
110 mbox_chan_txdone(mb_chan->chan, 0);
112 if (mb_chan_status_avail(mb_chan))
113 mbox_chan_received_data(mb_chan->chan, mb_chan->rx_msg);
120 struct slimpro_mbox_chan *mb_chan = chan->con_priv;
122 mb_chan_send_msg(mb_chan, msg);
128 struct slimpro_mbox_chan *mb_chan = chan->con_priv;
132 rc = devm_request_irq(mb_chan->dev, mb_chan->irq, slimpro_mbox_irq, 0,
133 MBOX_CON_NAME, mb_chan);
135 dev_err(mb_chan->dev, "failed to register mailbox interrupt %d\n",
136 mb_chan->irq);
142 mb_chan->reg + REG_DB_STAT);
144 val = readl(mb_chan->reg + REG_DB_STATMASK);
146 writel(val, mb_chan->reg + REG_DB_STATMASK);
153 struct slimpro_mbox_chan *mb_chan = chan->con_priv;
157 val = readl(mb_chan->reg + REG_DB_STATMASK);
159 writel(val, mb_chan->reg + REG_DB_STATMASK);
161 devm_free_irq(mb_chan->dev, mb_chan->irq, mb_chan);