Lines Matching refs:ctx
117 struct slimpro_i2c_dev *ctx = to_slimpro_i2c_dev(cl); in slimpro_i2c_rx_cb() local
125 if (ctx->resp_msg) in slimpro_i2c_rx_cb()
126 *ctx->resp_msg = ((u32 *)mssg)[1]; in slimpro_i2c_rx_cb()
128 if (ctx->mbox_client.tx_block) in slimpro_i2c_rx_cb()
129 complete(&ctx->rd_complete); in slimpro_i2c_rx_cb()
132 static int start_i2c_msg_xfer(struct slimpro_i2c_dev *ctx) in start_i2c_msg_xfer() argument
134 if (ctx->mbox_client.tx_block) { in start_i2c_msg_xfer()
135 if (!wait_for_completion_timeout(&ctx->rd_complete, in start_i2c_msg_xfer()
141 if (*ctx->resp_msg == 0xffffffff) in start_i2c_msg_xfer()
147 static int slimpro_i2c_rd(struct slimpro_i2c_dev *ctx, u32 chip, in slimpro_i2c_rd() argument
158 ctx->resp_msg = data; in slimpro_i2c_rd()
159 rc = mbox_send_message(ctx->mbox_chan, &msg); in slimpro_i2c_rd()
163 rc = start_i2c_msg_xfer(ctx); in slimpro_i2c_rd()
165 ctx->resp_msg = NULL; in slimpro_i2c_rd()
169 static int slimpro_i2c_wr(struct slimpro_i2c_dev *ctx, u32 chip, in slimpro_i2c_wr() argument
180 ctx->resp_msg = msg; in slimpro_i2c_wr()
182 rc = mbox_send_message(ctx->mbox_chan, &msg); in slimpro_i2c_wr()
186 rc = start_i2c_msg_xfer(ctx); in slimpro_i2c_wr()
188 ctx->resp_msg = NULL; in slimpro_i2c_wr()
192 static int slimpro_i2c_blkrd(struct slimpro_i2c_dev *ctx, u32 chip, u32 addr, in slimpro_i2c_blkrd() argument
200 paddr = dma_map_single(ctx->dev, ctx->dma_buffer, readlen, DMA_FROM_DEVICE); in slimpro_i2c_blkrd()
201 if (dma_mapping_error(ctx->dev, paddr)) { in slimpro_i2c_blkrd()
202 dev_err(&ctx->adapter.dev, "Error in mapping dma buffer %p\n", in slimpro_i2c_blkrd()
203 ctx->dma_buffer); in slimpro_i2c_blkrd()
215 ctx->resp_msg = msg; in slimpro_i2c_blkrd()
217 rc = mbox_send_message(ctx->mbox_chan, &msg); in slimpro_i2c_blkrd()
221 rc = start_i2c_msg_xfer(ctx); in slimpro_i2c_blkrd()
224 memcpy(data, ctx->dma_buffer, readlen); in slimpro_i2c_blkrd()
227 dma_unmap_single(ctx->dev, paddr, readlen, DMA_FROM_DEVICE); in slimpro_i2c_blkrd()
229 ctx->resp_msg = NULL; in slimpro_i2c_blkrd()
233 static int slimpro_i2c_blkwr(struct slimpro_i2c_dev *ctx, u32 chip, in slimpro_i2c_blkwr() argument
241 memcpy(ctx->dma_buffer, data, writelen); in slimpro_i2c_blkwr()
242 paddr = dma_map_single(ctx->dev, ctx->dma_buffer, writelen, in slimpro_i2c_blkwr()
244 if (dma_mapping_error(ctx->dev, paddr)) { in slimpro_i2c_blkwr()
245 dev_err(&ctx->adapter.dev, "Error in mapping dma buffer %p\n", in slimpro_i2c_blkwr()
246 ctx->dma_buffer); in slimpro_i2c_blkwr()
257 ctx->resp_msg = msg; in slimpro_i2c_blkwr()
259 if (ctx->mbox_client.tx_block) in slimpro_i2c_blkwr()
260 reinit_completion(&ctx->rd_complete); in slimpro_i2c_blkwr()
262 rc = mbox_send_message(ctx->mbox_chan, &msg); in slimpro_i2c_blkwr()
266 rc = start_i2c_msg_xfer(ctx); in slimpro_i2c_blkwr()
269 dma_unmap_single(ctx->dev, paddr, writelen, DMA_TO_DEVICE); in slimpro_i2c_blkwr()
271 ctx->resp_msg = NULL; in slimpro_i2c_blkwr()
280 struct slimpro_i2c_dev *ctx = i2c_get_adapdata(adap); in xgene_slimpro_i2c_xfer() local
287 ret = slimpro_i2c_rd(ctx, addr, 0, 0, in xgene_slimpro_i2c_xfer()
292 ret = slimpro_i2c_wr(ctx, addr, command, SMBUS_CMD_LEN, in xgene_slimpro_i2c_xfer()
299 ret = slimpro_i2c_rd(ctx, addr, command, SMBUS_CMD_LEN, in xgene_slimpro_i2c_xfer()
305 ret = slimpro_i2c_wr(ctx, addr, command, SMBUS_CMD_LEN, in xgene_slimpro_i2c_xfer()
312 ret = slimpro_i2c_rd(ctx, addr, command, SMBUS_CMD_LEN, in xgene_slimpro_i2c_xfer()
318 ret = slimpro_i2c_wr(ctx, addr, command, SMBUS_CMD_LEN, in xgene_slimpro_i2c_xfer()
325 ret = slimpro_i2c_blkrd(ctx, addr, command, in xgene_slimpro_i2c_xfer()
333 ret = slimpro_i2c_blkwr(ctx, addr, command, in xgene_slimpro_i2c_xfer()
342 ret = slimpro_i2c_blkrd(ctx, addr, in xgene_slimpro_i2c_xfer()
350 ret = slimpro_i2c_blkwr(ctx, addr, command, in xgene_slimpro_i2c_xfer()
382 struct slimpro_i2c_dev *ctx; in xgene_slimpro_i2c_probe() local
387 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in xgene_slimpro_i2c_probe()
388 if (!ctx) in xgene_slimpro_i2c_probe()
391 ctx->dev = &pdev->dev; in xgene_slimpro_i2c_probe()
392 platform_set_drvdata(pdev, ctx); in xgene_slimpro_i2c_probe()
393 cl = &ctx->mbox_client; in xgene_slimpro_i2c_probe()
399 init_completion(&ctx->rd_complete); in xgene_slimpro_i2c_probe()
402 ctx->mbox_chan = mbox_request_channel(cl, MAILBOX_I2C_INDEX); in xgene_slimpro_i2c_probe()
403 if (IS_ERR(ctx->mbox_chan)) { in xgene_slimpro_i2c_probe()
405 return PTR_ERR(ctx->mbox_chan); in xgene_slimpro_i2c_probe()
413 adapter = &ctx->adapter; in xgene_slimpro_i2c_probe()
418 i2c_set_adapdata(adapter, ctx); in xgene_slimpro_i2c_probe()
422 mbox_free_channel(ctx->mbox_chan); in xgene_slimpro_i2c_probe()
432 struct slimpro_i2c_dev *ctx = platform_get_drvdata(pdev); in xgene_slimpro_i2c_remove() local
434 i2c_del_adapter(&ctx->adapter); in xgene_slimpro_i2c_remove()
436 mbox_free_channel(ctx->mbox_chan); in xgene_slimpro_i2c_remove()