Lines Matching refs:ldev

56 #define REG_OFS		(ldev->caps.reg_ofs)
370 struct ltdc_device *ldev = ddev->dev_private; in ltdc_irq_thread() local
374 if (ldev->irq_status & ISR_LIF) in ltdc_irq_thread()
378 mutex_lock(&ldev->err_lock); in ltdc_irq_thread()
379 if (ldev->irq_status & ISR_FUIF) in ltdc_irq_thread()
380 ldev->error_status |= ISR_FUIF; in ltdc_irq_thread()
381 if (ldev->irq_status & ISR_TERRIF) in ltdc_irq_thread()
382 ldev->error_status |= ISR_TERRIF; in ltdc_irq_thread()
383 mutex_unlock(&ldev->err_lock); in ltdc_irq_thread()
391 struct ltdc_device *ldev = ddev->dev_private; in ltdc_irq() local
394 ldev->irq_status = reg_read(ldev->regs, LTDC_ISR); in ltdc_irq()
395 reg_write(ldev->regs, LTDC_ICR, ldev->irq_status); in ltdc_irq()
406 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_update_clut() local
419 reg_write(ldev->regs, LTDC_L1CLUTWR, val); in ltdc_crtc_update_clut()
426 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_atomic_enable() local
434 reg_write(ldev->regs, LTDC_BCCR, BCCR_BCBLACK); in ltdc_crtc_atomic_enable()
437 reg_set(ldev->regs, LTDC_IER, IER_RRIE | IER_FUIE | IER_TERRIE); in ltdc_crtc_atomic_enable()
440 reg_set(ldev->regs, LTDC_SRCR, SRCR_VBR); in ltdc_crtc_atomic_enable()
448 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_atomic_disable() local
456 reg_clear(ldev->regs, LTDC_IER, IER_RRIE | IER_FUIE | IER_TERRIE); in ltdc_crtc_atomic_disable()
459 reg_set(ldev->regs, LTDC_SRCR, SRCR_IMR); in ltdc_crtc_atomic_disable()
470 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_mode_valid() local
476 result = clk_round_rate(ldev->pixel_clk, target); in ltdc_crtc_mode_valid()
481 if (result > ldev->caps.pad_max_freq_hz) in ltdc_crtc_mode_valid()
509 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_mode_fixup() local
512 if (clk_set_rate(ldev->pixel_clk, rate) < 0) { in ltdc_crtc_mode_fixup()
517 adjusted_mode->clock = clk_get_rate(ldev->pixel_clk) / 1000; in ltdc_crtc_mode_fixup()
527 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_mode_set_nofb() local
607 reg_update_bits(ldev->regs, LTDC_GCR, in ltdc_crtc_mode_set_nofb()
612 reg_update_bits(ldev->regs, LTDC_SSCR, SSCR_VSH | SSCR_HSW, val); in ltdc_crtc_mode_set_nofb()
616 reg_update_bits(ldev->regs, LTDC_BPCR, BPCR_AVBP | BPCR_AHBP, val); in ltdc_crtc_mode_set_nofb()
620 reg_update_bits(ldev->regs, LTDC_AWCR, AWCR_AAW | AWCR_AAH, val); in ltdc_crtc_mode_set_nofb()
624 reg_update_bits(ldev->regs, LTDC_TWCR, TWCR_TOTALH | TWCR_TOTALW, val); in ltdc_crtc_mode_set_nofb()
626 reg_write(ldev->regs, LTDC_LIPCR, (accum_act_h + 1)); in ltdc_crtc_mode_set_nofb()
632 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_atomic_flush() local
641 reg_set(ldev->regs, LTDC_SRCR, SRCR_VBR); in ltdc_crtc_atomic_flush()
662 struct ltdc_device *ldev = ddev->dev_private; in ltdc_crtc_get_scanout_position() local
683 line = reg_read(ldev->regs, LTDC_CPSR) & CPSR_CYPOS; in ltdc_crtc_get_scanout_position()
684 vactive_start = reg_read(ldev->regs, LTDC_BPCR) & BPCR_AVBP; in ltdc_crtc_get_scanout_position()
685 vactive_end = reg_read(ldev->regs, LTDC_AWCR) & AWCR_AAH; in ltdc_crtc_get_scanout_position()
686 vtotal = reg_read(ldev->regs, LTDC_TWCR) & TWCR_TOTALH; in ltdc_crtc_get_scanout_position()
716 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_enable_vblank() local
722 reg_set(ldev->regs, LTDC_IER, IER_LIE); in ltdc_crtc_enable_vblank()
731 struct ltdc_device *ldev = crtc_to_ltdc(crtc); in ltdc_crtc_disable_vblank() local
734 reg_clear(ldev->regs, LTDC_IER, IER_LIE); in ltdc_crtc_disable_vblank()
782 struct ltdc_device *ldev = plane_to_ltdc(plane); in ltdc_plane_atomic_update() local
812 bpcr = reg_read(ldev->regs, LTDC_BPCR); in ltdc_plane_atomic_update()
818 reg_update_bits(ldev->regs, LTDC_L1WHPCR + lofs, in ltdc_plane_atomic_update()
823 reg_update_bits(ldev->regs, LTDC_L1WVPCR + lofs, in ltdc_plane_atomic_update()
829 if (ldev->caps.pix_fmt_hw[val] == pf) in ltdc_plane_atomic_update()
837 reg_update_bits(ldev->regs, LTDC_L1PFCR + lofs, LXPFCR_PF, val); in ltdc_plane_atomic_update()
842 (x1 - x0 + 1) + (ldev->caps.bus_width >> 3) - 1; in ltdc_plane_atomic_update()
844 reg_update_bits(ldev->regs, LTDC_L1CFBLR + lofs, in ltdc_plane_atomic_update()
849 reg_update_bits(ldev->regs, LTDC_L1CACR + lofs, LXCACR_CONSTA, val); in ltdc_plane_atomic_update()
857 if (ldev->caps.non_alpha_only_l1 && in ltdc_plane_atomic_update()
861 reg_update_bits(ldev->regs, LTDC_L1BFCR + lofs, in ltdc_plane_atomic_update()
866 reg_update_bits(ldev->regs, LTDC_L1CFBLNR + lofs, LXCFBLNR_CFBLN, val); in ltdc_plane_atomic_update()
872 reg_write(ldev->regs, LTDC_L1CFBAR + lofs, paddr); in ltdc_plane_atomic_update()
877 reg_update_bits(ldev->regs, LTDC_L1CR + lofs, in ltdc_plane_atomic_update()
880 ldev->plane_fpsi[plane->index].counter++; in ltdc_plane_atomic_update()
882 mutex_lock(&ldev->err_lock); in ltdc_plane_atomic_update()
883 if (ldev->error_status & ISR_FUIF) { in ltdc_plane_atomic_update()
885 ldev->error_status &= ~ISR_FUIF; in ltdc_plane_atomic_update()
887 if (ldev->error_status & ISR_TERRIF) { in ltdc_plane_atomic_update()
889 ldev->error_status &= ~ISR_TERRIF; in ltdc_plane_atomic_update()
891 mutex_unlock(&ldev->err_lock); in ltdc_plane_atomic_update()
899 struct ltdc_device *ldev = plane_to_ltdc(plane); in ltdc_plane_atomic_disable() local
903 reg_clear(ldev->regs, LTDC_L1CR + lofs, LXCR_LEN); in ltdc_plane_atomic_disable()
913 struct ltdc_device *ldev = plane_to_ltdc(plane); in ltdc_plane_atomic_print_state() local
914 struct fps_info *fpsi = &ldev->plane_fpsi[plane->index]; in ltdc_plane_atomic_print_state()
959 struct ltdc_device *ldev = ddev->dev_private; in ltdc_plane_create() local
970 drm_fmt = to_drm_pixelformat(ldev->caps.pix_fmt_hw[i]); in ltdc_plane_create()
981 if (ldev->caps.non_alpha_only_l1 && in ltdc_plane_create()
1018 struct ltdc_device *ldev = ddev->dev_private; in ltdc_crtc_init() local
1046 for (i = 1; i < ldev->caps.nb_layers; i++) { in ltdc_crtc_init()
1066 struct ltdc_device *ldev = ddev->dev_private; in ltdc_encoder_disable() local
1071 reg_clear(ldev->regs, LTDC_GCR, GCR_LTDCEN); in ltdc_encoder_disable()
1080 struct ltdc_device *ldev = ddev->dev_private; in ltdc_encoder_enable() local
1085 reg_set(ldev->regs, LTDC_GCR, GCR_LTDCEN); in ltdc_encoder_enable()
1141 struct ltdc_device *ldev = ddev->dev_private; in ltdc_get_caps() local
1148 lcr = reg_read(ldev->regs, LTDC_LCR); in ltdc_get_caps()
1150 ldev->caps.nb_layers = clamp((int)lcr, 1, LTDC_MAX_LAYER); in ltdc_get_caps()
1153 gc2r = reg_read(ldev->regs, LTDC_GC2R); in ltdc_get_caps()
1155 ldev->caps.bus_width = 8 << bus_width_log2; in ltdc_get_caps()
1156 ldev->caps.hw_version = reg_read(ldev->regs, LTDC_IDR); in ltdc_get_caps()
1158 switch (ldev->caps.hw_version) { in ltdc_get_caps()
1161 ldev->caps.reg_ofs = REG_OFS_NONE; in ltdc_get_caps()
1162 ldev->caps.pix_fmt_hw = ltdc_pix_fmt_a0; in ltdc_get_caps()
1170 ldev->caps.non_alpha_only_l1 = true; in ltdc_get_caps()
1171 ldev->caps.pad_max_freq_hz = 90000000; in ltdc_get_caps()
1172 if (ldev->caps.hw_version == HWVER_10200) in ltdc_get_caps()
1173 ldev->caps.pad_max_freq_hz = 65000000; in ltdc_get_caps()
1174 ldev->caps.nb_irq = 2; in ltdc_get_caps()
1177 ldev->caps.reg_ofs = REG_OFS_4; in ltdc_get_caps()
1178 ldev->caps.pix_fmt_hw = ltdc_pix_fmt_a1; in ltdc_get_caps()
1179 ldev->caps.non_alpha_only_l1 = false; in ltdc_get_caps()
1180 ldev->caps.pad_max_freq_hz = 150000000; in ltdc_get_caps()
1181 ldev->caps.nb_irq = 4; in ltdc_get_caps()
1192 struct ltdc_device *ldev = ddev->dev_private; in ltdc_suspend() local
1195 clk_disable_unprepare(ldev->pixel_clk); in ltdc_suspend()
1200 struct ltdc_device *ldev = ddev->dev_private; in ltdc_resume() local
1205 ret = clk_prepare_enable(ldev->pixel_clk); in ltdc_resume()
1217 struct ltdc_device *ldev = ddev->dev_private; in ltdc_load() local
1235 ldev->pixel_clk = devm_clk_get(dev, "lcd"); in ltdc_load()
1236 if (IS_ERR(ldev->pixel_clk)) { in ltdc_load()
1237 if (PTR_ERR(ldev->pixel_clk) != -EPROBE_DEFER) in ltdc_load()
1239 return PTR_ERR(ldev->pixel_clk); in ltdc_load()
1242 if (clk_prepare_enable(ldev->pixel_clk)) { in ltdc_load()
1283 mutex_init(&ldev->err_lock); in ltdc_load()
1292 ldev->regs = devm_ioremap_resource(dev, res); in ltdc_load()
1293 if (IS_ERR(ldev->regs)) { in ltdc_load()
1295 ret = PTR_ERR(ldev->regs); in ltdc_load()
1300 reg_clear(ldev->regs, LTDC_IER, in ltdc_load()
1306 ldev->caps.hw_version); in ltdc_load()
1310 DRM_DEBUG_DRIVER("ltdc hw version 0x%08x\n", ldev->caps.hw_version); in ltdc_load()
1312 for (i = 0; i < ldev->caps.nb_irq; i++) { in ltdc_load()
1348 clk_disable_unprepare(ldev->pixel_clk); in ltdc_load()
1359 clk_disable_unprepare(ldev->pixel_clk); in ltdc_load()