Lines Matching full:mbox

63 	return container_of(link->mbox, struct bcm2835_mbox, controller);  in bcm2835_link_mbox()
68 struct bcm2835_mbox *mbox = dev_id; in bcm2835_mbox_irq() local
69 struct device *dev = mbox->controller.dev; in bcm2835_mbox_irq()
70 struct mbox_chan *link = &mbox->controller.chans[0]; in bcm2835_mbox_irq()
72 while (!(readl(mbox->regs + MAIL0_STA) & ARM_MS_EMPTY)) { in bcm2835_mbox_irq()
73 u32 msg = readl(mbox->regs + MAIL0_RD); in bcm2835_mbox_irq()
82 struct bcm2835_mbox *mbox = bcm2835_link_mbox(link); in bcm2835_send_data() local
85 spin_lock(&mbox->lock); in bcm2835_send_data()
86 writel(msg, mbox->regs + MAIL1_WRT); in bcm2835_send_data()
87 dev_dbg(mbox->controller.dev, "Request 0x%08X\n", msg); in bcm2835_send_data()
88 spin_unlock(&mbox->lock); in bcm2835_send_data()
94 struct bcm2835_mbox *mbox = bcm2835_link_mbox(link); in bcm2835_startup() local
97 writel(ARM_MC_IHAVEDATAIRQEN, mbox->regs + MAIL0_CNF); in bcm2835_startup()
104 struct bcm2835_mbox *mbox = bcm2835_link_mbox(link); in bcm2835_shutdown() local
106 writel(0, mbox->regs + MAIL0_CNF); in bcm2835_shutdown()
111 struct bcm2835_mbox *mbox = bcm2835_link_mbox(link); in bcm2835_last_tx_done() local
114 spin_lock(&mbox->lock); in bcm2835_last_tx_done()
115 ret = !(readl(mbox->regs + MAIL1_STA) & ARM_MS_FULL); in bcm2835_last_tx_done()
116 spin_unlock(&mbox->lock); in bcm2835_last_tx_done()
127 static struct mbox_chan *bcm2835_mbox_index_xlate(struct mbox_controller *mbox, in bcm2835_mbox_index_xlate() argument
133 return &mbox->chans[0]; in bcm2835_mbox_index_xlate()
140 struct bcm2835_mbox *mbox; in bcm2835_mbox_probe() local
142 mbox = devm_kzalloc(dev, sizeof(*mbox), GFP_KERNEL); in bcm2835_mbox_probe()
143 if (mbox == NULL) in bcm2835_mbox_probe()
145 spin_lock_init(&mbox->lock); in bcm2835_mbox_probe()
148 bcm2835_mbox_irq, 0, dev_name(dev), mbox); in bcm2835_mbox_probe()
155 mbox->regs = devm_platform_ioremap_resource(pdev, 0); in bcm2835_mbox_probe()
156 if (IS_ERR(mbox->regs)) { in bcm2835_mbox_probe()
157 ret = PTR_ERR(mbox->regs); in bcm2835_mbox_probe()
161 mbox->controller.txdone_poll = true; in bcm2835_mbox_probe()
162 mbox->controller.txpoll_period = 5; in bcm2835_mbox_probe()
163 mbox->controller.ops = &bcm2835_mbox_chan_ops; in bcm2835_mbox_probe()
164 mbox->controller.of_xlate = &bcm2835_mbox_index_xlate; in bcm2835_mbox_probe()
165 mbox->controller.dev = dev; in bcm2835_mbox_probe()
166 mbox->controller.num_chans = 1; in bcm2835_mbox_probe()
167 mbox->controller.chans = devm_kzalloc(dev, in bcm2835_mbox_probe()
168 sizeof(*mbox->controller.chans), GFP_KERNEL); in bcm2835_mbox_probe()
169 if (!mbox->controller.chans) in bcm2835_mbox_probe()
172 ret = devm_mbox_controller_register(dev, &mbox->controller); in bcm2835_mbox_probe()
176 platform_set_drvdata(pdev, mbox); in bcm2835_mbox_probe()
183 { .compatible = "brcm,bcm2835-mbox", },
190 .name = "bcm2835-mbox",