Lines Matching refs:mx3_fbi
386 static void sdc_enable_channel(struct mx3fb_info *mx3_fbi)
388 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb;
389 struct idmac_channel *ichan = mx3_fbi->idmac_channel;
394 if (mx3_fbi->txd)
395 dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi,
396 to_tx_desc(mx3_fbi->txd), to_tx_desc(mx3_fbi->txd)->sg);
398 dev_dbg(mx3fb->dev, "mx3fbi %p, txd = NULL\n", mx3_fbi);
401 if (mx3_fbi->cookie < 0) {
402 mx3_fbi->txd = dmaengine_prep_slave_sg(dma_chan,
403 &mx3_fbi->sg[0], 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
404 if (!mx3_fbi->txd) {
410 mx3_fbi->txd->callback_param = mx3_fbi->txd;
411 mx3_fbi->txd->callback = mx3fb_dma_done;
413 cookie = mx3_fbi->txd->tx_submit(mx3_fbi->txd);
415 mx3_fbi->txd, cookie, list_empty(&ichan->queue) ? '-' : '+');
417 if (!mx3_fbi->txd || !mx3_fbi->txd->tx_submit) {
425 cookie = mx3_fbi->cookie;
427 mx3_fbi->txd, cookie, list_empty(&ichan->queue) ? '-' : '+');
432 sdc_fb_init(mx3_fbi);
433 mx3_fbi->cookie = cookie;
445 static void sdc_disable_channel(struct mx3fb_info *mx3_fbi)
447 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb;
451 if (mx3_fbi->txd == NULL)
456 enabled = sdc_fb_uninit(mx3_fbi);
460 dmaengine_terminate_all(mx3_fbi->txd->chan);
461 mx3_fbi->txd = NULL;
462 mx3_fbi->cookie = -EINVAL;
762 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par;
769 complete(&mx3_fbi->flip_cmpl);
774 struct mx3fb_info *mx3_fbi = fbi->par;
775 struct fb_var_screeninfo old_var = mx3_fbi->cur_var;
797 struct mx3fb_info *mx3_fbi = fbi->par;
798 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb;
799 struct idmac_channel *ichan = mx3_fbi->idmac_channel;
801 struct scatterlist *sg = mx3_fbi->sg;
804 if (mx3_fbi->txd)
805 sdc_disable_channel(mx3_fbi);
826 if (mx3_fbi->ipu_ch == IDMAC_SDC_0) {
865 sdc_set_window_pos(mx3fb, mx3_fbi->ipu_ch, 0, 0);
867 mx3_fbi->cur_ipu_buf = 0;
874 if (mx3_fbi->blank == FB_BLANK_UNBLANK) {
875 sdc_enable_channel(mx3_fbi);
880 mx3_fbi->cur_var.xoffset = 0;
881 mx3_fbi->cur_var.yoffset = 0;
888 cur_xoffset = mx3_fbi->cur_var.xoffset;
889 cur_yoffset = mx3_fbi->cur_var.yoffset;
890 mx3_fbi->cur_var = fbi->var;
891 mx3_fbi->cur_var.xoffset = cur_xoffset;
892 mx3_fbi->cur_var.yoffset = cur_yoffset;
904 struct mx3fb_info *mx3_fbi = fbi->par;
905 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb;
906 struct idmac_channel *ichan = mx3_fbi->idmac_channel;
911 mutex_lock(&mx3_fbi->mutex);
915 mutex_unlock(&mx3_fbi->mutex);
927 struct mx3fb_info *mx3_fbi = fbi->par;
1012 var->sync |= mx3_fbi->cur_var.sync;
1013 mx3_fbi->cur_var.sync |= var->sync;
1029 struct mx3fb_info *mx3_fbi = fbi->par;
1035 mutex_lock(&mx3_fbi->mutex);
1066 mutex_unlock(&mx3_fbi->mutex);
1073 struct mx3fb_info *mx3_fbi = fbi->par;
1074 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb;
1075 int was_blank = mx3_fbi->blank;
1077 mx3_fbi->blank = blank;
1082 * (mx3_fbi->txd is NULL). Hide the fact, that all blank modes are
1097 sdc_disable_channel(mx3_fbi);
1100 sdc_enable_channel(mx3_fbi);
1111 struct mx3fb_info *mx3_fbi = fbi->par;
1116 if (mx3_fbi->blank == blank)
1119 mutex_lock(&mx3_fbi->mutex);
1121 mutex_unlock(&mx3_fbi->mutex);
1136 struct mx3fb_info *mx3_fbi = fbi->par;
1141 struct scatterlist *sg = mx3_fbi->sg;
1142 struct dma_chan *dma_chan = &mx3_fbi->idmac_channel->dma_chan;
1147 list_empty(&mx3_fbi->idmac_channel->queue) ? '-' : '+');
1154 if (mx3_fbi->cur_var.xoffset == var->xoffset &&
1155 mx3_fbi->cur_var.yoffset == var->yoffset)
1166 mutex_lock(&mx3_fbi->mutex);
1173 mx3_fbi->cur_ipu_buf, base);
1180 init_completion(&mx3_fbi->flip_cmpl);
1181 enable_irq(mx3_fbi->idmac_channel->eof_irq);
1183 ret = wait_for_completion_timeout(&mx3_fbi->flip_cmpl, HZ / 10);
1185 mutex_unlock(&mx3_fbi->mutex);
1188 disable_irq(mx3_fbi->idmac_channel->eof_irq);
1192 mx3_fbi->cur_ipu_buf = !mx3_fbi->cur_ipu_buf;
1194 sg_dma_address(&sg[mx3_fbi->cur_ipu_buf]) = base;
1195 sg_set_page(&sg[mx3_fbi->cur_ipu_buf],
1199 if (mx3_fbi->txd)
1200 async_tx_ack(mx3_fbi->txd);
1203 mx3_fbi->cur_ipu_buf, 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT);
1207 mutex_unlock(&mx3_fbi->mutex);
1223 mx3_fbi->cur_ipu_buf, base);
1224 mutex_unlock(&mx3_fbi->mutex);
1228 mx3_fbi->txd = txd;
1238 mx3_fbi->cur_var = fbi->var;
1240 mutex_unlock(&mx3_fbi->mutex);
1276 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par;
1282 if (mx3_fbi->blank == FB_BLANK_UNBLANK) {
1283 sdc_disable_channel(mx3_fbi);
1296 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par;
1298 if (mx3_fbi->blank == FB_BLANK_UNBLANK) {
1299 sdc_enable_channel(mx3_fbi);
1627 struct mx3fb_info *mx3_fbi = fbi->par;
1630 chan = &mx3_fbi->idmac_channel->dma_chan;