Lines Matching refs:dma

17 	struct stm32_i2c_dma *dma;
21 dma = devm_kzalloc(dev, sizeof(*dma), GFP_KERNEL);
22 if (!dma)
25 /* Request and configure I2C TX dma channel */
26 dma->chan_tx = dma_request_chan(dev, "tx");
27 if (IS_ERR(dma->chan_tx)) {
28 ret = PTR_ERR(dma->chan_tx);
40 ret = dmaengine_slave_config(dma->chan_tx, &dma_sconfig);
46 /* Request and configure I2C RX dma channel */
47 dma->chan_rx = dma_request_chan(dev, "rx");
48 if (IS_ERR(dma->chan_rx)) {
49 ret = PTR_ERR(dma->chan_rx);
62 ret = dmaengine_slave_config(dma->chan_rx, &dma_sconfig);
68 init_completion(&dma->dma_complete);
71 dma_chan_name(dma->chan_tx), dma_chan_name(dma->chan_rx));
73 return dma;
76 dma_release_channel(dma->chan_rx);
78 dma_release_channel(dma->chan_tx);
80 devm_kfree(dev, dma);
85 void stm32_i2c_dma_free(struct stm32_i2c_dma *dma)
87 dma->dma_buf = 0;
88 dma->dma_len = 0;
90 dma_release_channel(dma->chan_tx);
91 dma->chan_tx = NULL;
93 dma_release_channel(dma->chan_rx);
94 dma->chan_rx = NULL;
96 dma->chan_using = NULL;
99 int stm32_i2c_prep_dma_xfer(struct device *dev, struct stm32_i2c_dma *dma,
109 dma->chan_using = dma->chan_rx;
110 dma->dma_transfer_dir = DMA_DEV_TO_MEM;
111 dma->dma_data_dir = DMA_FROM_DEVICE;
113 dma->chan_using = dma->chan_tx;
114 dma->dma_transfer_dir = DMA_MEM_TO_DEV;
115 dma->dma_data_dir = DMA_TO_DEVICE;
118 dma->dma_len = len;
119 chan_dev = dma->chan_using->device->dev;
121 dma->dma_buf = dma_map_single(chan_dev, buf, dma->dma_len,
122 dma->dma_data_dir);
123 if (dma_mapping_error(chan_dev, dma->dma_buf)) {
128 txdesc = dmaengine_prep_slave_single(dma->chan_using, dma->dma_buf,
129 dma->dma_len,
130 dma->dma_transfer_dir,
138 reinit_completion(&dma->dma_complete);
148 dma_async_issue_pending(dma->chan_using);
153 dma_unmap_single(chan_dev, dma->dma_buf, dma->dma_len,
154 dma->dma_data_dir);