Lines Matching +full:exynos4210 +full:- +full:rotator

1 // SPDX-License-Identifier: GPL-2.0-only
25 #include "regs-rotator.h"
28 * Rotator supports image crop/rotator and input/output DMA operations.
35 #define rot_read(offset) readl(rot->regs + (offset))
36 #define rot_write(cfg, offset) writel(cfg, rot->regs + (offset))
49 * A structure of rotator context.
52 * @clock: rotator gate clock.
53 * @limit_tbl: limitation of rotator.
106 if (rot->task) { in rotator_irq_handler()
107 struct exynos_drm_ipp_task *task = rot->task; in rotator_irq_handler()
109 rot->task = NULL; in rotator_irq_handler()
110 pm_runtime_mark_last_busy(rot->dev); in rotator_irq_handler()
111 pm_runtime_put_autosuspend(rot->dev); in rotator_irq_handler()
113 irq_status == ROT_IRQ_STATUS_COMPLETE ? 0 : -EINVAL); in rotator_irq_handler()
144 val = ROT_SET_BUF_SIZE_H(buf->buf.height) | in rotator_src_set_buf()
145 ROT_SET_BUF_SIZE_W(buf->buf.pitch[0] / buf->format->cpp[0]); in rotator_src_set_buf()
149 val = ROT_CROP_POS_Y(buf->rect.y) | ROT_CROP_POS_X(buf->rect.x); in rotator_src_set_buf()
151 val = ROT_SRC_CROP_SIZE_H(buf->rect.h) | in rotator_src_set_buf()
152 ROT_SRC_CROP_SIZE_W(buf->rect.w); in rotator_src_set_buf()
156 rot_write(buf->dma_addr[0], ROT_SRC_BUF_ADDR(0)); in rotator_src_set_buf()
157 rot_write(buf->dma_addr[1], ROT_SRC_BUF_ADDR(1)); in rotator_src_set_buf()
192 val = ROT_SET_BUF_SIZE_H(buf->buf.height) | in rotator_dst_set_buf()
193 ROT_SET_BUF_SIZE_W(buf->buf.pitch[0] / buf->format->cpp[0]); in rotator_dst_set_buf()
197 val = ROT_CROP_POS_Y(buf->rect.y) | ROT_CROP_POS_X(buf->rect.x); in rotator_dst_set_buf()
201 rot_write(buf->dma_addr[0], ROT_DST_BUF_ADDR(0)); in rotator_dst_set_buf()
202 rot_write(buf->dma_addr[1], ROT_DST_BUF_ADDR(1)); in rotator_dst_set_buf()
223 pm_runtime_get_sync(rot->dev); in rotator_commit()
224 rot->task = task; in rotator_commit()
226 rotator_src_set_fmt(rot, task->src.buf.fourcc); in rotator_commit()
227 rotator_src_set_buf(rot, &task->src); in rotator_commit()
228 rotator_dst_set_transf(rot, task->transform.rotation); in rotator_commit()
229 rotator_dst_set_buf(rot, &task->dst); in rotator_commit()
243 struct exynos_drm_ipp *ipp = &rot->ipp; in rotator_bind()
245 rot->drm_dev = drm_dev; in rotator_bind()
246 ipp->drm_dev = drm_dev; in rotator_bind()
247 exynos_drm_register_dma(drm_dev, dev, &rot->dma_priv); in rotator_bind()
251 rot->formats, rot->num_formats, "rotator"); in rotator_bind()
253 dev_info(dev, "The exynos rotator has been probed successfully\n"); in rotator_bind()
262 struct exynos_drm_ipp *ipp = &rot->ipp; in rotator_unbind()
265 exynos_drm_unregister_dma(rot->drm_dev, rot->dev, &rot->dma_priv); in rotator_unbind()
275 struct device *dev = &pdev->dev; in rotator_probe()
284 return -ENOMEM; in rotator_probe()
287 rot->formats = variant->formats; in rotator_probe()
288 rot->num_formats = variant->num_formats; in rotator_probe()
289 rot->dev = dev; in rotator_probe()
291 rot->regs = devm_ioremap_resource(dev, regs_res); in rotator_probe()
292 if (IS_ERR(rot->regs)) in rotator_probe()
293 return PTR_ERR(rot->regs); in rotator_probe()
306 rot->clock = devm_clk_get(dev, "rotator"); in rotator_probe()
307 if (IS_ERR(rot->clock)) { in rotator_probe()
309 return PTR_ERR(rot->clock); in rotator_probe()
331 struct device *dev = &pdev->dev; in rotator_remove()
345 clk_disable_unprepare(rot->clock); in rotator_runtime_suspend()
353 return clk_prepare_enable(rot->clock); in rotator_runtime_resume()
434 .compatible = "samsung,s5pv210-rotator",
437 .compatible = "samsung,exynos4210-rotator",
440 .compatible = "samsung,exynos4212-rotator",
443 .compatible = "samsung,exynos5250-rotator",
461 .name = "exynos-rotator",