Lines Matching refs:mx3_fbi
389 static void sdc_enable_channel(struct mx3fb_info *mx3_fbi) in sdc_enable_channel() argument
391 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in sdc_enable_channel()
392 struct idmac_channel *ichan = mx3_fbi->idmac_channel; in sdc_enable_channel()
397 if (mx3_fbi->txd) in sdc_enable_channel()
398 dev_dbg(mx3fb->dev, "mx3fbi %p, desc %p, sg %p\n", mx3_fbi, in sdc_enable_channel()
399 to_tx_desc(mx3_fbi->txd), to_tx_desc(mx3_fbi->txd)->sg); in sdc_enable_channel()
401 dev_dbg(mx3fb->dev, "mx3fbi %p, txd = NULL\n", mx3_fbi); in sdc_enable_channel()
404 if (mx3_fbi->cookie < 0) { in sdc_enable_channel()
405 mx3_fbi->txd = dmaengine_prep_slave_sg(dma_chan, in sdc_enable_channel()
406 &mx3_fbi->sg[0], 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); in sdc_enable_channel()
407 if (!mx3_fbi->txd) { in sdc_enable_channel()
413 mx3_fbi->txd->callback_param = mx3_fbi->txd; in sdc_enable_channel()
414 mx3_fbi->txd->callback = mx3fb_dma_done; in sdc_enable_channel()
416 cookie = mx3_fbi->txd->tx_submit(mx3_fbi->txd); in sdc_enable_channel()
418 mx3_fbi->txd, cookie, list_empty(&ichan->queue) ? '-' : '+'); in sdc_enable_channel()
420 if (!mx3_fbi->txd || !mx3_fbi->txd->tx_submit) { in sdc_enable_channel()
428 cookie = mx3_fbi->cookie; in sdc_enable_channel()
430 mx3_fbi->txd, cookie, list_empty(&ichan->queue) ? '-' : '+'); in sdc_enable_channel()
435 sdc_fb_init(mx3_fbi); in sdc_enable_channel()
436 mx3_fbi->cookie = cookie; in sdc_enable_channel()
448 static void sdc_disable_channel(struct mx3fb_info *mx3_fbi) in sdc_disable_channel() argument
450 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in sdc_disable_channel()
454 if (mx3_fbi->txd == NULL) in sdc_disable_channel()
459 enabled = sdc_fb_uninit(mx3_fbi); in sdc_disable_channel()
463 dmaengine_terminate_all(mx3_fbi->txd->chan); in sdc_disable_channel()
464 mx3_fbi->txd = NULL; in sdc_disable_channel()
465 mx3_fbi->cookie = -EINVAL; in sdc_disable_channel()
765 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_dma_done() local
772 complete(&mx3_fbi->flip_cmpl); in mx3fb_dma_done()
777 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_must_set_par() local
778 struct fb_var_screeninfo old_var = mx3_fbi->cur_var; in mx3fb_must_set_par()
800 struct mx3fb_info *mx3_fbi = fbi->par; in __set_par() local
801 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __set_par()
802 struct idmac_channel *ichan = mx3_fbi->idmac_channel; in __set_par()
804 struct scatterlist *sg = mx3_fbi->sg; in __set_par()
807 if (mx3_fbi->txd) in __set_par()
808 sdc_disable_channel(mx3_fbi); in __set_par()
829 if (mx3_fbi->ipu_ch == IDMAC_SDC_0) { in __set_par()
868 sdc_set_window_pos(mx3fb, mx3_fbi->ipu_ch, 0, 0); in __set_par()
870 mx3_fbi->cur_ipu_buf = 0; in __set_par()
877 if (mx3_fbi->blank == FB_BLANK_UNBLANK) { in __set_par()
878 sdc_enable_channel(mx3_fbi); in __set_par()
883 mx3_fbi->cur_var.xoffset = 0; in __set_par()
884 mx3_fbi->cur_var.yoffset = 0; in __set_par()
891 cur_xoffset = mx3_fbi->cur_var.xoffset; in __set_par()
892 cur_yoffset = mx3_fbi->cur_var.yoffset; in __set_par()
893 mx3_fbi->cur_var = fbi->var; in __set_par()
894 mx3_fbi->cur_var.xoffset = cur_xoffset; in __set_par()
895 mx3_fbi->cur_var.yoffset = cur_yoffset; in __set_par()
907 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_set_par() local
908 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in mx3fb_set_par()
909 struct idmac_channel *ichan = mx3_fbi->idmac_channel; in mx3fb_set_par()
914 mutex_lock(&mx3_fbi->mutex); in mx3fb_set_par()
918 mutex_unlock(&mx3_fbi->mutex); in mx3fb_set_par()
930 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_check_var() local
1015 var->sync |= mx3_fbi->cur_var.sync; in mx3fb_check_var()
1016 mx3_fbi->cur_var.sync |= var->sync; in mx3fb_check_var()
1032 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_setcolreg() local
1038 mutex_lock(&mx3_fbi->mutex); in mx3fb_setcolreg()
1069 mutex_unlock(&mx3_fbi->mutex); in mx3fb_setcolreg()
1076 struct mx3fb_info *mx3_fbi = fbi->par; in __blank() local
1077 struct mx3fb_data *mx3fb = mx3_fbi->mx3fb; in __blank()
1078 int was_blank = mx3_fbi->blank; in __blank()
1080 mx3_fbi->blank = blank; in __blank()
1100 sdc_disable_channel(mx3_fbi); in __blank()
1103 sdc_enable_channel(mx3_fbi); in __blank()
1114 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_blank() local
1119 if (mx3_fbi->blank == blank) in mx3fb_blank()
1122 mutex_lock(&mx3_fbi->mutex); in mx3fb_blank()
1124 mutex_unlock(&mx3_fbi->mutex); in mx3fb_blank()
1139 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_pan_display() local
1144 struct scatterlist *sg = mx3_fbi->sg; in mx3fb_pan_display()
1145 struct dma_chan *dma_chan = &mx3_fbi->idmac_channel->dma_chan; in mx3fb_pan_display()
1150 list_empty(&mx3_fbi->idmac_channel->queue) ? '-' : '+'); in mx3fb_pan_display()
1157 if (mx3_fbi->cur_var.xoffset == var->xoffset && in mx3fb_pan_display()
1158 mx3_fbi->cur_var.yoffset == var->yoffset) in mx3fb_pan_display()
1169 mutex_lock(&mx3_fbi->mutex); in mx3fb_pan_display()
1176 mx3_fbi->cur_ipu_buf, base); in mx3fb_pan_display()
1183 init_completion(&mx3_fbi->flip_cmpl); in mx3fb_pan_display()
1184 enable_irq(mx3_fbi->idmac_channel->eof_irq); in mx3fb_pan_display()
1186 ret = wait_for_completion_timeout(&mx3_fbi->flip_cmpl, HZ / 10); in mx3fb_pan_display()
1188 mutex_unlock(&mx3_fbi->mutex); in mx3fb_pan_display()
1191 disable_irq(mx3_fbi->idmac_channel->eof_irq); in mx3fb_pan_display()
1195 mx3_fbi->cur_ipu_buf = !mx3_fbi->cur_ipu_buf; in mx3fb_pan_display()
1197 sg_dma_address(&sg[mx3_fbi->cur_ipu_buf]) = base; in mx3fb_pan_display()
1198 sg_set_page(&sg[mx3_fbi->cur_ipu_buf], in mx3fb_pan_display()
1202 if (mx3_fbi->txd) in mx3fb_pan_display()
1203 async_tx_ack(mx3_fbi->txd); in mx3fb_pan_display()
1206 mx3_fbi->cur_ipu_buf, 1, DMA_MEM_TO_DEV, DMA_PREP_INTERRUPT); in mx3fb_pan_display()
1210 mutex_unlock(&mx3_fbi->mutex); in mx3fb_pan_display()
1226 mx3_fbi->cur_ipu_buf, base); in mx3fb_pan_display()
1227 mutex_unlock(&mx3_fbi->mutex); in mx3fb_pan_display()
1231 mx3_fbi->txd = txd; in mx3fb_pan_display()
1241 mx3_fbi->cur_var = fbi->var; in mx3fb_pan_display()
1243 mutex_unlock(&mx3_fbi->mutex); in mx3fb_pan_display()
1279 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_suspend() local
1285 if (mx3_fbi->blank == FB_BLANK_UNBLANK) { in mx3fb_suspend()
1286 sdc_disable_channel(mx3_fbi); in mx3fb_suspend()
1299 struct mx3fb_info *mx3_fbi = mx3fb->fbi->par; in mx3fb_resume() local
1301 if (mx3_fbi->blank == FB_BLANK_UNBLANK) { in mx3fb_resume()
1302 sdc_enable_channel(mx3_fbi); in mx3fb_resume()
1630 struct mx3fb_info *mx3_fbi = fbi->par; in mx3fb_remove() local
1633 chan = &mx3_fbi->idmac_channel->dma_chan; in mx3fb_remove()