Lines Matching full:drm

16 #include <drm/drm_atomic_helper.h>
17 #include <drm/drm_drv.h>
18 #include <drm/drm_gem_cma_helper.h>
19 #include <drm/drm_gem_framebuffer_helper.h>
20 #include <drm/drm_probe_helper.h>
21 #include <drm/drm_vblank.h>
33 drm_err(&kmb->drm, "Failed to enable LCD clock: %d\n", ret); in kmb_display_clk_enable()
47 drm_err(&kmb->drm, "clk_get() failed clk_lcd\n"); in kmb_initialize_clocks()
53 drm_err(&kmb->drm, "clk_get() failed clk_pll0 "); in kmb_initialize_clocks()
57 drm_info(&kmb->drm, "system clk = %d Mhz", kmb->sys_clk_mhz); in kmb_initialize_clocks()
64 drm_err(&kmb->drm, "failed to set to clk_lcd to %d\n", in kmb_initialize_clocks()
68 drm_dbg(&kmb->drm, "clk_lcd = %ld\n", clk_get_rate(kmb->kmb_clk.clk_lcd)); in kmb_initialize_clocks()
76 drm_err(&kmb->drm, "failed to get msscam syscon"); in kmb_initialize_clocks()
91 static void __iomem *kmb_map_mmio(struct drm_device *drm, in kmb_map_mmio() argument
100 drm_err(drm, "failed to get resource for %s", name); in kmb_map_mmio()
103 mem = devm_ioremap_resource(drm->dev, res); in kmb_map_mmio()
105 drm_err(drm, "failed to ioremap %s registers", name); in kmb_map_mmio()
109 static int kmb_hw_init(struct drm_device *drm, unsigned long flags) in kmb_hw_init() argument
111 struct kmb_drm_private *kmb = to_kmb(drm); in kmb_hw_init()
112 struct platform_device *pdev = to_platform_device(drm->dev); in kmb_hw_init()
117 kmb->lcd_mmio = kmb_map_mmio(drm, pdev, "lcd"); in kmb_hw_init()
119 drm_err(&kmb->drm, "failed to map LCD registers\n"); in kmb_hw_init()
140 drm_err(&kmb->drm, "irq_lcd not found"); in kmb_hw_init()
145 ret = of_reserved_mem_device_init(drm->dev); in kmb_hw_init()
156 of_reserved_mem_device_release(drm->dev); in kmb_hw_init()
167 static int kmb_setup_mode_config(struct drm_device *drm) in kmb_setup_mode_config() argument
170 struct kmb_drm_private *kmb = to_kmb(drm); in kmb_setup_mode_config()
172 ret = drmm_mode_config_init(drm); in kmb_setup_mode_config()
175 drm->mode_config.min_width = KMB_FB_MIN_WIDTH; in kmb_setup_mode_config()
176 drm->mode_config.min_height = KMB_FB_MIN_HEIGHT; in kmb_setup_mode_config()
177 drm->mode_config.max_width = KMB_FB_MAX_WIDTH; in kmb_setup_mode_config()
178 drm->mode_config.max_height = KMB_FB_MAX_HEIGHT; in kmb_setup_mode_config()
179 drm->mode_config.funcs = &kmb_mode_config_funcs; in kmb_setup_mode_config()
181 ret = kmb_setup_crtc(drm); in kmb_setup_mode_config()
183 drm_err(drm, "failed to create crtc\n"); in kmb_setup_mode_config()
186 ret = kmb_dsi_encoder_init(drm, kmb->kmb_dsi); in kmb_setup_mode_config()
188 kmb->crtc.port = of_graph_get_port_by_id(drm->dev->of_node, 0); in kmb_setup_mode_config()
189 ret = drm_vblank_init(drm, drm->mode_config.num_crtc); in kmb_setup_mode_config()
191 drm_err(drm, "failed to initialize vblank\n"); in kmb_setup_mode_config()
192 pm_runtime_disable(drm->dev); in kmb_setup_mode_config()
196 drm_mode_config_reset(drm); in kmb_setup_mode_config()
308 drm_info(&kmb->drm, in handle_lcd_irq()
328 drm_dbg(&kmb->drm, in handle_lcd_irq()
331 drm_dbg(&kmb->drm, in handle_lcd_irq()
334 drm_dbg(&kmb->drm, in handle_lcd_irq()
342 drm_info(&kmb->drm, in handle_lcd_irq()
362 drm_dbg(&kmb->drm, in handle_lcd_irq()
365 drm_dbg(&kmb->drm, in handle_lcd_irq()
368 drm_dbg(&kmb->drm, in handle_lcd_irq()
373 drm_dbg(&kmb->drm, in handle_lcd_irq()
376 drm_dbg(&kmb->drm, in handle_lcd_irq()
381 drm_dbg(&kmb->drm, in handle_lcd_irq()
384 drm_dbg(&kmb->drm, in handle_lcd_irq()
409 static void kmb_irq_reset(struct drm_device *drm) in kmb_irq_reset() argument
411 kmb_write_lcd(to_kmb(drm), LCD_INT_CLEAR, 0xFFFF); in kmb_irq_reset()
412 kmb_write_lcd(to_kmb(drm), LCD_INT_ENABLE, 0); in kmb_irq_reset()
415 static int kmb_irq_install(struct drm_device *drm, unsigned int irq) in kmb_irq_install() argument
420 kmb_irq_reset(drm); in kmb_irq_install()
422 return request_irq(irq, kmb_isr, 0, drm->driver->name, drm); in kmb_irq_install()
425 static void kmb_irq_uninstall(struct drm_device *drm) in kmb_irq_uninstall() argument
427 struct kmb_drm_private *kmb = to_kmb(drm); in kmb_irq_uninstall()
429 kmb_irq_reset(drm); in kmb_irq_uninstall()
430 free_irq(kmb->irq_lcd, drm); in kmb_irq_uninstall()
441 .name = "kmb-drm",
451 struct drm_device *drm = dev_get_drvdata(dev); in kmb_remove() local
452 struct kmb_drm_private *kmb = to_kmb(drm); in kmb_remove()
454 drm_dev_unregister(drm); in kmb_remove()
455 drm_kms_helper_poll_fini(drm); in kmb_remove()
458 pm_runtime_get_sync(drm->dev); in kmb_remove()
459 kmb_irq_uninstall(drm); in kmb_remove()
460 pm_runtime_put_sync(drm->dev); in kmb_remove()
461 pm_runtime_disable(drm->dev); in kmb_remove()
463 of_reserved_mem_device_release(drm->dev); in kmb_remove()
472 drm_atomic_helper_shutdown(drm); in kmb_remove()
523 /* Create DRM device */ in kmb_probe()
525 struct kmb_drm_private, drm); in kmb_probe()
529 dev_set_drvdata(dev, &kmb->drm); in kmb_probe()
534 drm_err(&kmb->drm, "failed to initialize DSI\n"); in kmb_probe()
541 ret = kmb_hw_init(&kmb->drm, 0); in kmb_probe()
545 ret = kmb_setup_mode_config(&kmb->drm); in kmb_probe()
549 ret = kmb_irq_install(&kmb->drm, kmb->irq_lcd); in kmb_probe()
551 drm_err(&kmb->drm, "failed to install IRQ handler\n"); in kmb_probe()
555 drm_kms_helper_poll_init(&kmb->drm); in kmb_probe()
558 ret = drm_dev_register(&kmb->drm, 0); in kmb_probe()
565 drm_kms_helper_poll_fini(&kmb->drm); in kmb_probe()
567 pm_runtime_disable(kmb->drm.dev); in kmb_probe()
570 drm_mode_config_cleanup(&kmb->drm); in kmb_probe()
587 struct drm_device *drm = dev_get_drvdata(dev); in kmb_pm_suspend() local
588 struct kmb_drm_private *kmb = to_kmb(drm); in kmb_pm_suspend()
590 drm_kms_helper_poll_disable(drm); in kmb_pm_suspend()
592 kmb->state = drm_atomic_helper_suspend(drm); in kmb_pm_suspend()
594 drm_kms_helper_poll_enable(drm); in kmb_pm_suspend()
603 struct drm_device *drm = dev_get_drvdata(dev); in kmb_pm_resume() local
604 struct kmb_drm_private *kmb = drm ? to_kmb(drm) : NULL; in kmb_pm_resume()
609 drm_atomic_helper_resume(drm, kmb->state); in kmb_pm_resume()
610 drm_kms_helper_poll_enable(drm); in kmb_pm_resume()
621 .name = "kmb-drm",