Lines Matching +full:current +full:- +full:rotate

1 // SPDX-License-Identifier: GPL-2.0-or-later
15 #include <linux/dma-mapping.h>
20 #include <linux/soc/ti/omap1-io.h>
21 #include <linux/soc/ti/omap1-soc.h>
22 #include <linux/omap-dma.h>
24 #include <asm/mach-types.h>
135 dev_err(lcdc.fbdev->dev, "timeout waiting for FRAME DONE\n"); in disable_controller()
146 dev_err(lcdc.fbdev->dev, in reset_controller()
155 dev_err(lcdc.fbdev->dev, in reset_controller()
161 * Configure the LCD DMA according to the current mode specified by parameters
162 * in lcdc.fbdev and fbdev->var.
173 struct omapfb_plane_struct *plane = lcdc.fbdev->fb_info[0]->par; in setup_lcd_dma()
174 struct fb_var_screeninfo *var = &lcdc.fbdev->fb_info[0]->var; in setup_lcd_dma()
180 switch (var->rotate) { in setup_lcd_dma()
182 if (plane->info.mirror || (src & 3) || in setup_lcd_dma()
206 dev_dbg(lcdc.fbdev->dev, in setup_lcd_dma()
224 omap_set_lcd_dma_b1_rotation(var->rotate); in setup_lcd_dma()
225 omap_set_lcd_dma_b1_mirror(plane->info.mirror); in setup_lcd_dma()
275 * flicker and not to mess up the current LCD DMA context. For this we disable
285 struct fb_var_screeninfo *var = &lcdc.fbdev->fb_info[0]->var; in omap_lcdc_setup_plane()
286 struct lcd_panel *panel = lcdc.fbdev->panel; in omap_lcdc_setup_plane()
289 if (var->rotate == 0) { in omap_lcdc_setup_plane()
290 rot_x = panel->x_res; in omap_lcdc_setup_plane()
291 rot_y = panel->y_res; in omap_lcdc_setup_plane()
293 rot_x = panel->y_res; in omap_lcdc_setup_plane()
294 rot_y = panel->x_res; in omap_lcdc_setup_plane()
299 dev_dbg(lcdc.fbdev->dev, in omap_lcdc_setup_plane()
303 return -EINVAL; in omap_lcdc_setup_plane()
347 dev_dbg(lcdc.fbdev->dev, "invalid color mode %d\n", color_mode); in omap_lcdc_setup_plane()
349 return -1; in omap_lcdc_setup_plane()
369 dev_dbg(lcdc.fbdev->dev, in omap_lcdc_enable_plane()
373 return -EINVAL; in omap_lcdc_enable_plane()
404 dev_err(lcdc.fbdev->dev, "timeout waiting for FRAME DONE\n"); in load_palette()
419 return -EINVAL; in omap_lcdc_setcolreg()
445 *pck_div = (lck + pck - 1) / pck; in calc_ck_div()
453 dev_warn(lcdc.fbdev->dev, "pixclock %d kHz too low.\n", in calc_ck_div()
461 struct lcd_panel *panel = lcdc.fbdev->panel; in setup_regs()
462 int is_tft = panel->config & OMAP_LCDC_PANEL_TFT; in setup_regs()
472 l |= (is_tft && panel->bpp == 8) ? 0x810000 : 0; in setup_regs()
478 l &= ~(((1 << 6) - 1) << 20); in setup_regs()
479 l |= (panel->config & OMAP_LCDC_SIGNAL_MASK) << 20; in setup_regs()
482 l = panel->x_res - 1; in setup_regs()
483 l |= (panel->hsw - 1) << 10; in setup_regs()
484 l |= (panel->hfp - 1) << 16; in setup_regs()
485 l |= (panel->hbp - 1) << 24; in setup_regs()
488 l = panel->y_res - 1; in setup_regs()
489 l |= (panel->vsw - 1) << 10; in setup_regs()
490 l |= panel->vfp << 16; in setup_regs()
491 l |= panel->vbp << 24; in setup_regs()
499 if (!panel->pcd) in setup_regs()
500 calc_ck_div(is_tft, panel->pixel_clock * 1000, &pcd); in setup_regs()
502 dev_warn(lcdc.fbdev->dev, in setup_regs()
506 lck / panel->pcd / 1000, panel->name); in setup_regs()
508 pcd = panel->pcd; in setup_regs()
511 l |= panel->acb << 8; in setup_regs()
515 panel->pixel_clock = lck / pcd / 1000; in setup_regs()
548 r = -EINVAL; in omap_lcdc_set_update_mode()
581 return -EBUSY; in omap_lcdc_set_dma_callback()
604 lcdc.palette_virt = dma_alloc_wc(lcdc.fbdev->dev, MAX_PALETTE_SIZE, in alloc_palette_ram()
607 dev_err(lcdc.fbdev->dev, "failed to alloc palette memory\n"); in alloc_palette_ram()
608 return -ENOMEM; in alloc_palette_ram()
617 dma_free_wc(lcdc.fbdev->dev, MAX_PALETTE_SIZE, lcdc.palette_virt, in free_palette_ram()
625 struct lcd_panel *panel = lcdc.fbdev->panel; in alloc_fbmem()
627 bpp = panel->bpp; in alloc_fbmem()
630 frame_size = PAGE_ALIGN(panel->x_res * bpp / 8 * panel->y_res); in alloc_fbmem()
631 if (region->size > frame_size) in alloc_fbmem()
632 frame_size = region->size; in alloc_fbmem()
634 lcdc.vram_virt = dma_alloc_wc(lcdc.fbdev->dev, lcdc.vram_size, in alloc_fbmem()
637 dev_err(lcdc.fbdev->dev, "unable to allocate FB DMA memory\n"); in alloc_fbmem()
638 return -ENOMEM; in alloc_fbmem()
640 region->size = frame_size; in alloc_fbmem()
641 region->paddr = lcdc.vram_phys; in alloc_fbmem()
642 region->vaddr = lcdc.vram_virt; in alloc_fbmem()
643 region->alloc = 1; in alloc_fbmem()
652 dma_free_wc(lcdc.fbdev->dev, lcdc.vram_size, lcdc.vram_virt, in free_fbmem()
658 if (!req_md->region_cnt) { in setup_fbmem()
659 dev_err(lcdc.fbdev->dev, "no memory regions defined\n"); in setup_fbmem()
660 return -EINVAL; in setup_fbmem()
663 if (req_md->region_cnt > 1) { in setup_fbmem()
664 dev_err(lcdc.fbdev->dev, "only one plane is supported\n"); in setup_fbmem()
665 req_md->region_cnt = 1; in setup_fbmem()
668 return alloc_fbmem(&req_md->region[0]); in setup_fbmem()
690 lcdc.lcd_ck = clk_get(fbdev->dev, "lcd_ck"); in omap_lcdc_init()
692 dev_err(fbdev->dev, "unable to access LCD clock\n"); in omap_lcdc_init()
697 tc_ck = clk_get(fbdev->dev, "tc_ck"); in omap_lcdc_init()
699 dev_err(fbdev->dev, "unable to access TC clock\n"); in omap_lcdc_init()
711 dev_err(fbdev->dev, "failed to adjust LCD rate\n"); in omap_lcdc_init()
716 r = request_irq(fbdev->int_irq, lcdc_irq_handler, 0, MODULE_NAME, fbdev); in omap_lcdc_init()
718 dev_err(fbdev->dev, "unable to get IRQ\n"); in omap_lcdc_init()
724 dev_err(fbdev->dev, "unable to get LCD DMA\n"); in omap_lcdc_init()
747 free_irq(fbdev->int_irq, lcdc.fbdev); in omap_lcdc_init()
762 free_irq(lcdc.fbdev->int_irq, lcdc.fbdev); in omap_lcdc_cleanup()