Lines Matching +full:r8a7740 +full:- +full:lcdc
1 // SPDX-License-Identifier: GPL-2.0+
3 * shmob_drm_drv.c -- SH Mobile DRM driver
34 /* -----------------------------------------------------------------------------
47 sdev->lddckr = LDDCKR_ICKSEL_BUS; in shmob_drm_setup_clocks()
51 sdev->lddckr = LDDCKR_ICKSEL_MIPI; in shmob_drm_setup_clocks()
55 sdev->lddckr = LDDCKR_ICKSEL_HDMI; in shmob_drm_setup_clocks()
58 return -EINVAL; in shmob_drm_setup_clocks()
61 clk = devm_clk_get(sdev->dev, clkname); in shmob_drm_setup_clocks()
63 dev_err(sdev->dev, "cannot get dot clock %s\n", clkname); in shmob_drm_setup_clocks()
67 sdev->clock = clk; in shmob_drm_setup_clocks()
71 /* -----------------------------------------------------------------------------
83 * bits in the same register is really brain-dead design and requires in shmob_drm_irq()
86 spin_lock_irqsave(&sdev->irq_lock, flags); in shmob_drm_irq()
89 spin_unlock_irqrestore(&sdev->irq_lock, flags); in shmob_drm_irq()
92 drm_crtc_handle_vblank(&sdev->crtc.base); in shmob_drm_irq()
93 shmob_drm_crtc_finish_page_flip(&sdev->crtc); in shmob_drm_irq()
105 .name = "shmob-drm",
112 /* -----------------------------------------------------------------------------
120 return drm_mode_config_helper_suspend(&sdev->ddev); in shmob_drm_pm_suspend()
127 return drm_mode_config_helper_resume(&sdev->ddev); in shmob_drm_pm_resume()
134 if (sdev->clock) in shmob_drm_pm_runtime_suspend()
135 clk_disable_unprepare(sdev->clock); in shmob_drm_pm_runtime_suspend()
145 if (sdev->clock) { in shmob_drm_pm_runtime_resume()
146 ret = clk_prepare_enable(sdev->clock); in shmob_drm_pm_runtime_resume()
160 /* -----------------------------------------------------------------------------
167 struct drm_device *ddev = &sdev->ddev; in shmob_drm_remove()
176 struct shmob_drm_platform_data *pdata = pdev->dev.platform_data; in shmob_drm_probe()
182 config = of_device_get_match_data(&pdev->dev); in shmob_drm_probe()
184 dev_err(&pdev->dev, "no platform data\n"); in shmob_drm_probe()
185 return -EINVAL; in shmob_drm_probe()
192 sdev = devm_drm_dev_alloc(&pdev->dev, &shmob_drm_driver, in shmob_drm_probe()
197 ddev = &sdev->ddev; in shmob_drm_probe()
198 sdev->dev = &pdev->dev; in shmob_drm_probe()
200 sdev->config = *config; in shmob_drm_probe()
202 sdev->pdata = pdata; in shmob_drm_probe()
203 sdev->config.clk_source = pdata->clk_source; in shmob_drm_probe()
204 sdev->config.clk_div = pdata->iface.clk_div; in shmob_drm_probe()
206 spin_lock_init(&sdev->irq_lock); in shmob_drm_probe()
210 sdev->mmio = devm_platform_ioremap_resource(pdev, 0); in shmob_drm_probe()
211 if (IS_ERR(sdev->mmio)) in shmob_drm_probe()
212 return PTR_ERR(sdev->mmio); in shmob_drm_probe()
214 ret = shmob_drm_setup_clocks(sdev, sdev->config.clk_source); in shmob_drm_probe()
218 ret = devm_pm_runtime_enable(&pdev->dev); in shmob_drm_probe()
224 dev_err(&pdev->dev, "failed to initialize vblank\n"); in shmob_drm_probe()
230 return dev_err_probe(&pdev->dev, ret, in shmob_drm_probe()
236 sdev->irq = ret; in shmob_drm_probe()
238 ret = devm_request_irq(&pdev->dev, sdev->irq, shmob_drm_irq, 0, in shmob_drm_probe()
239 ddev->driver->name, ddev); in shmob_drm_probe()
241 dev_err(&pdev->dev, "failed to install IRQ handler\n"); in shmob_drm_probe()
268 { .compatible = "renesas,r8a7740-lcdc", .data = &shmob_arm_config, },
269 { .compatible = "renesas,sh73a0-lcdc", .data = &shmob_arm_config, },
277 .name = "shmob-drm",