Lines Matching refs:ctx

172 static u32 fimc_read(struct fimc_context *ctx, u32 reg)  in fimc_read()  argument
174 return readl(ctx->regs + reg); in fimc_read()
177 static void fimc_write(struct fimc_context *ctx, u32 val, u32 reg) in fimc_write() argument
179 writel(val, ctx->regs + reg); in fimc_write()
182 static void fimc_set_bits(struct fimc_context *ctx, u32 reg, u32 bits) in fimc_set_bits() argument
184 void __iomem *r = ctx->regs + reg; in fimc_set_bits()
189 static void fimc_clear_bits(struct fimc_context *ctx, u32 reg, u32 bits) in fimc_clear_bits() argument
191 void __iomem *r = ctx->regs + reg; in fimc_clear_bits()
196 static void fimc_sw_reset(struct fimc_context *ctx) in fimc_sw_reset() argument
201 cfg = fimc_read(ctx, EXYNOS_CISTATUS); in fimc_sw_reset()
203 fimc_clear_bits(ctx, EXYNOS_MSCTRL, EXYNOS_MSCTRL_ENVID); in fimc_sw_reset()
205 fimc_set_bits(ctx, EXYNOS_CISRCFMT, EXYNOS_CISRCFMT_ITU601_8BIT); in fimc_sw_reset()
208 fimc_clear_bits(ctx, EXYNOS_CIIMGCPT, in fimc_sw_reset()
212 fimc_set_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_SWRST); in fimc_sw_reset()
215 fimc_clear_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_SWRST); in fimc_sw_reset()
218 fimc_write(ctx, 0x0, EXYNOS_CIFCNTSEQ); in fimc_sw_reset()
221 static int fimc_set_camblk_fimd0_wb(struct fimc_context *ctx) in fimc_set_camblk_fimd0_wb() argument
223 return regmap_update_bits(ctx->sysreg, SYSREG_CAMERA_BLK, in fimc_set_camblk_fimd0_wb()
225 ctx->id << SYSREG_FIMD0WB_DEST_SHIFT); in fimc_set_camblk_fimd0_wb()
228 static void fimc_set_type_ctrl(struct fimc_context *ctx, enum fimc_wb wb) in fimc_set_type_ctrl() argument
234 cfg = fimc_read(ctx, EXYNOS_CIGCTRL); in fimc_set_type_ctrl()
260 fimc_write(ctx, cfg, EXYNOS_CIGCTRL); in fimc_set_type_ctrl()
263 static void fimc_set_polarity(struct fimc_context *ctx, in fimc_set_polarity() argument
273 cfg = fimc_read(ctx, EXYNOS_CIGCTRL); in fimc_set_polarity()
286 fimc_write(ctx, cfg, EXYNOS_CIGCTRL); in fimc_set_polarity()
289 static void fimc_handle_jpeg(struct fimc_context *ctx, bool enable) in fimc_handle_jpeg() argument
295 cfg = fimc_read(ctx, EXYNOS_CIGCTRL); in fimc_handle_jpeg()
301 fimc_write(ctx, cfg, EXYNOS_CIGCTRL); in fimc_handle_jpeg()
304 static void fimc_mask_irq(struct fimc_context *ctx, bool enable) in fimc_mask_irq() argument
310 cfg = fimc_read(ctx, EXYNOS_CIGCTRL); in fimc_mask_irq()
316 fimc_write(ctx, cfg, EXYNOS_CIGCTRL); in fimc_mask_irq()
319 static void fimc_clear_irq(struct fimc_context *ctx) in fimc_clear_irq() argument
321 fimc_set_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_IRQ_CLR); in fimc_clear_irq()
324 static bool fimc_check_ovf(struct fimc_context *ctx) in fimc_check_ovf() argument
326 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_check_ovf()
329 status = fimc_read(ctx, EXYNOS_CISTATUS); in fimc_check_ovf()
336 fimc_set_bits(ctx, EXYNOS_CIWDOFST, in fimc_check_ovf()
341 ctx->id, status); in fimc_check_ovf()
348 static bool fimc_check_frame_end(struct fimc_context *ctx) in fimc_check_frame_end() argument
352 cfg = fimc_read(ctx, EXYNOS_CISTATUS); in fimc_check_frame_end()
360 fimc_write(ctx, cfg, EXYNOS_CISTATUS); in fimc_check_frame_end()
365 static int fimc_get_buf_id(struct fimc_context *ctx) in fimc_get_buf_id() argument
370 cfg = fimc_read(ctx, EXYNOS_CISTATUS2); in fimc_get_buf_id()
391 static void fimc_handle_lastend(struct fimc_context *ctx, bool enable) in fimc_handle_lastend() argument
397 cfg = fimc_read(ctx, EXYNOS_CIOCTRL); in fimc_handle_lastend()
403 fimc_write(ctx, cfg, EXYNOS_CIOCTRL); in fimc_handle_lastend()
407 static int fimc_src_set_fmt_order(struct fimc_context *ctx, u32 fmt) in fimc_src_set_fmt_order() argument
409 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_src_set_fmt_order()
415 cfg = fimc_read(ctx, EXYNOS_CISCCTRL); in fimc_src_set_fmt_order()
421 fimc_write(ctx, cfg, EXYNOS_CISCCTRL); in fimc_src_set_fmt_order()
426 fimc_write(ctx, cfg, EXYNOS_CISCCTRL); in fimc_src_set_fmt_order()
434 cfg = fimc_read(ctx, EXYNOS_MSCTRL); in fimc_src_set_fmt_order()
473 fimc_write(ctx, cfg, EXYNOS_MSCTRL); in fimc_src_set_fmt_order()
480 struct fimc_context *ctx = get_fimc_context(dev); in fimc_src_set_fmt() local
481 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_src_set_fmt()
486 cfg = fimc_read(ctx, EXYNOS_MSCTRL); in fimc_src_set_fmt()
520 fimc_write(ctx, cfg, EXYNOS_MSCTRL); in fimc_src_set_fmt()
522 cfg = fimc_read(ctx, EXYNOS_CIDMAPARAM); in fimc_src_set_fmt()
527 fimc_write(ctx, cfg, EXYNOS_CIDMAPARAM); in fimc_src_set_fmt()
529 return fimc_src_set_fmt_order(ctx, fmt); in fimc_src_set_fmt()
536 struct fimc_context *ctx = get_fimc_context(dev); in fimc_src_set_transf() local
537 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_src_set_transf()
542 cfg1 = fimc_read(ctx, EXYNOS_MSCTRL); in fimc_src_set_transf()
546 cfg2 = fimc_read(ctx, EXYNOS_CITRGFMT); in fimc_src_set_transf()
585 fimc_write(ctx, cfg1, EXYNOS_MSCTRL); in fimc_src_set_transf()
586 fimc_write(ctx, cfg2, EXYNOS_CITRGFMT); in fimc_src_set_transf()
592 static int fimc_set_window(struct fimc_context *ctx, in fimc_set_window() argument
611 cfg = fimc_read(ctx, EXYNOS_CIWDOFST); in fimc_set_window()
617 fimc_write(ctx, cfg, EXYNOS_CIWDOFST); in fimc_set_window()
621 fimc_write(ctx, cfg, EXYNOS_CIWDOFST2); in fimc_set_window()
629 struct fimc_context *ctx = get_fimc_context(dev); in fimc_src_set_size() local
641 fimc_write(ctx, cfg, EXYNOS_ORGISIZE); in fimc_src_set_size()
653 cfg = fimc_read(ctx, EXYNOS_CIREAL_ISIZE); in fimc_src_set_size()
658 fimc_write(ctx, cfg, EXYNOS_CIREAL_ISIZE); in fimc_src_set_size()
667 fimc_write(ctx, cfg, EXYNOS_CISRCFMT); in fimc_src_set_size()
672 fimc_write(ctx, cfg, EXYNOS_CIIYOFF); in fimc_src_set_size()
675 fimc_write(ctx, cfg, EXYNOS_CIICBOFF); in fimc_src_set_size()
678 fimc_write(ctx, cfg, EXYNOS_CIICROFF); in fimc_src_set_size()
680 return fimc_set_window(ctx, &img_pos, &img_sz); in fimc_src_set_size()
687 struct fimc_context *ctx = get_fimc_context(dev); in fimc_src_set_addr() local
688 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_src_set_addr()
712 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_Y], in fimc_src_set_addr()
716 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR], in fimc_src_set_addr()
718 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB], in fimc_src_set_addr()
721 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB], in fimc_src_set_addr()
723 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR], in fimc_src_set_addr()
728 fimc_write(ctx, 0x0, EXYNOS_CIIYSA0); in fimc_src_set_addr()
729 fimc_write(ctx, 0x0, EXYNOS_CIICBSA0); in fimc_src_set_addr()
730 fimc_write(ctx, 0x0, EXYNOS_CIICRSA0); in fimc_src_set_addr()
747 static int fimc_dst_set_fmt_order(struct fimc_context *ctx, u32 fmt) in fimc_dst_set_fmt_order() argument
749 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_dst_set_fmt_order()
755 cfg = fimc_read(ctx, EXYNOS_CISCCTRL); in fimc_dst_set_fmt_order()
761 fimc_write(ctx, cfg, EXYNOS_CISCCTRL); in fimc_dst_set_fmt_order()
765 fimc_write(ctx, cfg, EXYNOS_CISCCTRL); in fimc_dst_set_fmt_order()
770 fimc_write(ctx, cfg, EXYNOS_CISCCTRL); in fimc_dst_set_fmt_order()
778 cfg = fimc_read(ctx, EXYNOS_CIOCTRL); in fimc_dst_set_fmt_order()
819 fimc_write(ctx, cfg, EXYNOS_CIOCTRL); in fimc_dst_set_fmt_order()
826 struct fimc_context *ctx = get_fimc_context(dev); in fimc_dst_set_fmt() local
827 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_dst_set_fmt()
832 cfg = fimc_read(ctx, EXYNOS_CIEXTEN); in fimc_dst_set_fmt()
836 fimc_write(ctx, cfg, EXYNOS_CIEXTEN); in fimc_dst_set_fmt()
839 fimc_write(ctx, cfg, EXYNOS_CIEXTEN); in fimc_dst_set_fmt()
841 cfg = fimc_read(ctx, EXYNOS_CITRGFMT); in fimc_dst_set_fmt()
873 fimc_write(ctx, cfg, EXYNOS_CITRGFMT); in fimc_dst_set_fmt()
876 cfg = fimc_read(ctx, EXYNOS_CIDMAPARAM); in fimc_dst_set_fmt()
881 fimc_write(ctx, cfg, EXYNOS_CIDMAPARAM); in fimc_dst_set_fmt()
883 return fimc_dst_set_fmt_order(ctx, fmt); in fimc_dst_set_fmt()
890 struct fimc_context *ctx = get_fimc_context(dev); in fimc_dst_set_transf() local
891 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_dst_set_transf()
896 cfg = fimc_read(ctx, EXYNOS_CITRGFMT); in fimc_dst_set_transf()
936 fimc_write(ctx, cfg, EXYNOS_CITRGFMT); in fimc_dst_set_transf()
942 static int fimc_set_prescaler(struct fimc_context *ctx, struct fimc_scaler *sc, in fimc_set_prescaler() argument
945 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_set_prescaler()
952 cfg_ext = fimc_read(ctx, EXYNOS_CITRGFMT); in fimc_set_prescaler()
1001 fimc_write(ctx, cfg, EXYNOS_CISCPRERATIO); in fimc_set_prescaler()
1005 fimc_write(ctx, cfg, EXYNOS_CISCPREDST); in fimc_set_prescaler()
1010 static void fimc_set_scaler(struct fimc_context *ctx, struct fimc_scaler *sc) in fimc_set_scaler() argument
1019 cfg = fimc_read(ctx, EXYNOS_CISCCTRL); in fimc_set_scaler()
1039 fimc_write(ctx, cfg, EXYNOS_CISCCTRL); in fimc_set_scaler()
1041 cfg_ext = fimc_read(ctx, EXYNOS_CIEXTEN); in fimc_set_scaler()
1046 fimc_write(ctx, cfg_ext, EXYNOS_CIEXTEN); in fimc_set_scaler()
1052 struct fimc_context *ctx = get_fimc_context(dev); in fimc_dst_set_size() local
1064 fimc_write(ctx, cfg, EXYNOS_ORGOSIZE); in fimc_dst_set_size()
1069 cfg = fimc_read(ctx, EXYNOS_CIGCTRL); in fimc_dst_set_size()
1077 fimc_write(ctx, cfg, EXYNOS_CIGCTRL); in fimc_dst_set_size()
1087 cfg = fimc_read(ctx, EXYNOS_CITRGFMT); in fimc_dst_set_size()
1092 fimc_write(ctx, cfg, EXYNOS_CITRGFMT); in fimc_dst_set_size()
1096 fimc_write(ctx, cfg, EXYNOS_CITAREA); in fimc_dst_set_size()
1101 fimc_write(ctx, cfg, EXYNOS_CIOYOFF); in fimc_dst_set_size()
1104 fimc_write(ctx, cfg, EXYNOS_CIOCBOFF); in fimc_dst_set_size()
1107 fimc_write(ctx, cfg, EXYNOS_CIOCROFF); in fimc_dst_set_size()
1112 static void fimc_dst_set_buf_seq(struct fimc_context *ctx, u32 buf_id, in fimc_dst_set_buf_seq() argument
1121 spin_lock_irqsave(&ctx->lock, flags); in fimc_dst_set_buf_seq()
1123 cfg = fimc_read(ctx, EXYNOS_CIFCNTSEQ); in fimc_dst_set_buf_seq()
1130 fimc_write(ctx, cfg, EXYNOS_CIFCNTSEQ); in fimc_dst_set_buf_seq()
1135 fimc_mask_irq(ctx, true); in fimc_dst_set_buf_seq()
1137 fimc_mask_irq(ctx, false); in fimc_dst_set_buf_seq()
1139 spin_unlock_irqrestore(&ctx->lock, flags); in fimc_dst_set_buf_seq()
1146 struct fimc_context *ctx = get_fimc_context(dev); in fimc_dst_set_addr() local
1147 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_dst_set_addr()
1172 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_Y], in fimc_dst_set_addr()
1176 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR], in fimc_dst_set_addr()
1178 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB], in fimc_dst_set_addr()
1181 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CB], in fimc_dst_set_addr()
1183 fimc_write(ctx, buf_info->base[EXYNOS_DRM_PLANAR_CR], in fimc_dst_set_addr()
1188 fimc_write(ctx, 0x0, EXYNOS_CIOYSA(buf_id)); in fimc_dst_set_addr()
1189 fimc_write(ctx, 0x0, EXYNOS_CIOCBSA(buf_id)); in fimc_dst_set_addr()
1190 fimc_write(ctx, 0x0, EXYNOS_CIOCRSA(buf_id)); in fimc_dst_set_addr()
1197 fimc_dst_set_buf_seq(ctx, buf_id, buf_type); in fimc_dst_set_addr()
1211 struct fimc_context *ctx = dev_id; in fimc_irq_handler() local
1212 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_irq_handler()
1218 DRM_DEBUG_KMS("fimc id[%d]\n", ctx->id); in fimc_irq_handler()
1220 fimc_clear_irq(ctx); in fimc_irq_handler()
1221 if (fimc_check_ovf(ctx)) in fimc_irq_handler()
1224 if (!fimc_check_frame_end(ctx)) in fimc_irq_handler()
1227 buf_id = fimc_get_buf_id(ctx); in fimc_irq_handler()
1233 fimc_dst_set_buf_seq(ctx, buf_id, IPP_BUF_DEQUEUE); in fimc_irq_handler()
1289 struct fimc_context *ctx = get_fimc_context(dev); in fimc_ippdrv_check_property() local
1290 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_ippdrv_check_property()
1399 static void fimc_clear_addr(struct fimc_context *ctx) in fimc_clear_addr() argument
1404 fimc_write(ctx, 0, EXYNOS_CIIYSA(i)); in fimc_clear_addr()
1405 fimc_write(ctx, 0, EXYNOS_CIICBSA(i)); in fimc_clear_addr()
1406 fimc_write(ctx, 0, EXYNOS_CIICRSA(i)); in fimc_clear_addr()
1410 fimc_write(ctx, 0, EXYNOS_CIOYSA(i)); in fimc_clear_addr()
1411 fimc_write(ctx, 0, EXYNOS_CIOCBSA(i)); in fimc_clear_addr()
1412 fimc_write(ctx, 0, EXYNOS_CIOCRSA(i)); in fimc_clear_addr()
1418 struct fimc_context *ctx = get_fimc_context(dev); in fimc_ippdrv_reset() local
1421 fimc_sw_reset(ctx); in fimc_ippdrv_reset()
1424 memset(&ctx->sc, 0x0, sizeof(ctx->sc)); in fimc_ippdrv_reset()
1426 fimc_clear_addr(ctx); in fimc_ippdrv_reset()
1433 struct fimc_context *ctx = get_fimc_context(dev); in fimc_ippdrv_start() local
1434 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_ippdrv_start()
1452 fimc_mask_irq(ctx, true); in fimc_ippdrv_start()
1459 ret = fimc_set_prescaler(ctx, &ctx->sc, in fimc_ippdrv_start()
1468 fimc_handle_jpeg(ctx, false); in fimc_ippdrv_start()
1469 fimc_set_scaler(ctx, &ctx->sc); in fimc_ippdrv_start()
1470 fimc_set_polarity(ctx, &ctx->pol); in fimc_ippdrv_start()
1474 fimc_set_type_ctrl(ctx, FIMC_WB_NONE); in fimc_ippdrv_start()
1475 fimc_handle_lastend(ctx, false); in fimc_ippdrv_start()
1478 cfg0 = fimc_read(ctx, EXYNOS_MSCTRL); in fimc_ippdrv_start()
1481 fimc_write(ctx, cfg0, EXYNOS_MSCTRL); in fimc_ippdrv_start()
1484 fimc_set_type_ctrl(ctx, FIMC_WB_A); in fimc_ippdrv_start()
1485 fimc_handle_lastend(ctx, true); in fimc_ippdrv_start()
1488 ret = fimc_set_camblk_fimd0_wb(ctx); in fimc_ippdrv_start()
1506 fimc_write(ctx, 0x0, EXYNOS_CISTATUS); in fimc_ippdrv_start()
1508 cfg0 = fimc_read(ctx, EXYNOS_CIIMGCPT); in fimc_ippdrv_start()
1513 cfg1 = fimc_read(ctx, EXYNOS_CISCCTRL); in fimc_ippdrv_start()
1518 fimc_write(ctx, cfg1, EXYNOS_CISCCTRL); in fimc_ippdrv_start()
1522 fimc_write(ctx, cfg0, EXYNOS_CIIMGCPT); in fimc_ippdrv_start()
1525 fimc_clear_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_IRQ_END_DISABLE); in fimc_ippdrv_start()
1527 fimc_clear_bits(ctx, EXYNOS_CIOCTRL, EXYNOS_CIOCTRL_WEAVE_MASK); in fimc_ippdrv_start()
1530 fimc_set_bits(ctx, EXYNOS_MSCTRL, EXYNOS_MSCTRL_ENVID); in fimc_ippdrv_start()
1537 struct fimc_context *ctx = get_fimc_context(dev); in fimc_ippdrv_stop() local
1546 cfg = fimc_read(ctx, EXYNOS_MSCTRL); in fimc_ippdrv_stop()
1549 fimc_write(ctx, cfg, EXYNOS_MSCTRL); in fimc_ippdrv_stop()
1560 fimc_mask_irq(ctx, false); in fimc_ippdrv_stop()
1563 fimc_write(ctx, 0x0, EXYNOS_CIFCNTSEQ); in fimc_ippdrv_stop()
1566 fimc_clear_bits(ctx, EXYNOS_CISCCTRL, EXYNOS_CISCCTRL_SCALERSTART); in fimc_ippdrv_stop()
1569 fimc_clear_bits(ctx, EXYNOS_CIIMGCPT, in fimc_ippdrv_stop()
1573 fimc_set_bits(ctx, EXYNOS_CIGCTRL, EXYNOS_CIGCTRL_IRQ_END_DISABLE); in fimc_ippdrv_stop()
1576 static void fimc_put_clocks(struct fimc_context *ctx) in fimc_put_clocks() argument
1581 if (IS_ERR(ctx->clocks[i])) in fimc_put_clocks()
1583 clk_put(ctx->clocks[i]); in fimc_put_clocks()
1584 ctx->clocks[i] = ERR_PTR(-EINVAL); in fimc_put_clocks()
1588 static int fimc_setup_clocks(struct fimc_context *ctx) in fimc_setup_clocks() argument
1590 struct device *fimc_dev = ctx->ippdrv.dev; in fimc_setup_clocks()
1595 ctx->clocks[i] = ERR_PTR(-EINVAL); in fimc_setup_clocks()
1603 ctx->clocks[i] = clk_get(dev, fimc_clock_names[i]); in fimc_setup_clocks()
1604 if (IS_ERR(ctx->clocks[i])) { in fimc_setup_clocks()
1607 ret = PTR_ERR(ctx->clocks[i]); in fimc_setup_clocks()
1615 if (!IS_ERR(ctx->clocks[FIMC_CLK_PARENT])) { in fimc_setup_clocks()
1616 ret = clk_set_parent(ctx->clocks[FIMC_CLK_MUX], in fimc_setup_clocks()
1617 ctx->clocks[FIMC_CLK_PARENT]); in fimc_setup_clocks()
1624 ret = clk_set_rate(ctx->clocks[FIMC_CLK_LCLK], ctx->clk_frequency); in fimc_setup_clocks()
1628 ret = clk_prepare_enable(ctx->clocks[FIMC_CLK_LCLK]); in fimc_setup_clocks()
1632 fimc_put_clocks(ctx); in fimc_setup_clocks()
1636 static int fimc_parse_dt(struct fimc_context *ctx) in fimc_parse_dt() argument
1638 struct device_node *node = ctx->ippdrv.dev->of_node; in fimc_parse_dt()
1645 &ctx->clk_frequency)) in fimc_parse_dt()
1646 ctx->clk_frequency = FIMC_DEFAULT_LCLK_FREQUENCY; in fimc_parse_dt()
1648 ctx->id = of_alias_get_id(node, "fimc"); in fimc_parse_dt()
1650 if (ctx->id < 0) { in fimc_parse_dt()
1651 dev_err(ctx->ippdrv.dev, "failed to get node alias id.\n"); in fimc_parse_dt()
1661 struct fimc_context *ctx; in fimc_probe() local
1671 ctx = devm_kzalloc(dev, sizeof(*ctx), GFP_KERNEL); in fimc_probe()
1672 if (!ctx) in fimc_probe()
1675 ctx->ippdrv.dev = dev; in fimc_probe()
1677 ret = fimc_parse_dt(ctx); in fimc_probe()
1681 ctx->sysreg = syscon_regmap_lookup_by_phandle(dev->of_node, in fimc_probe()
1683 if (IS_ERR(ctx->sysreg)) { in fimc_probe()
1685 return PTR_ERR(ctx->sysreg); in fimc_probe()
1689 ctx->regs_res = platform_get_resource(pdev, IORESOURCE_MEM, 0); in fimc_probe()
1690 ctx->regs = devm_ioremap_resource(dev, ctx->regs_res); in fimc_probe()
1691 if (IS_ERR(ctx->regs)) in fimc_probe()
1692 return PTR_ERR(ctx->regs); in fimc_probe()
1701 ctx->irq = res->start; in fimc_probe()
1702 ret = devm_request_threaded_irq(dev, ctx->irq, NULL, fimc_irq_handler, in fimc_probe()
1703 IRQF_ONESHOT, "drm_fimc", ctx); in fimc_probe()
1709 ret = fimc_setup_clocks(ctx); in fimc_probe()
1713 ippdrv = &ctx->ippdrv; in fimc_probe()
1726 DRM_DEBUG_KMS("id[%d]ippdrv[0x%x]\n", ctx->id, (int)ippdrv); in fimc_probe()
1728 spin_lock_init(&ctx->lock); in fimc_probe()
1729 platform_set_drvdata(pdev, ctx); in fimc_probe()
1746 fimc_put_clocks(ctx); in fimc_probe()
1754 struct fimc_context *ctx = get_fimc_context(dev); in fimc_remove() local
1755 struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv; in fimc_remove()
1759 fimc_put_clocks(ctx); in fimc_remove()
1767 static int fimc_clk_ctrl(struct fimc_context *ctx, bool enable) in fimc_clk_ctrl() argument
1772 clk_prepare_enable(ctx->clocks[FIMC_CLK_GATE]); in fimc_clk_ctrl()
1773 clk_prepare_enable(ctx->clocks[FIMC_CLK_WB_A]); in fimc_clk_ctrl()
1774 ctx->suspended = false; in fimc_clk_ctrl()
1776 clk_disable_unprepare(ctx->clocks[FIMC_CLK_GATE]); in fimc_clk_ctrl()
1777 clk_disable_unprepare(ctx->clocks[FIMC_CLK_WB_A]); in fimc_clk_ctrl()
1778 ctx->suspended = true; in fimc_clk_ctrl()
1787 struct fimc_context *ctx = get_fimc_context(dev); in fimc_suspend() local
1789 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in fimc_suspend()
1794 return fimc_clk_ctrl(ctx, false); in fimc_suspend()
1799 struct fimc_context *ctx = get_fimc_context(dev); in fimc_resume() local
1801 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in fimc_resume()
1804 return fimc_clk_ctrl(ctx, true); in fimc_resume()
1812 struct fimc_context *ctx = get_fimc_context(dev); in fimc_runtime_suspend() local
1814 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in fimc_runtime_suspend()
1816 return fimc_clk_ctrl(ctx, false); in fimc_runtime_suspend()
1821 struct fimc_context *ctx = get_fimc_context(dev); in fimc_runtime_resume() local
1823 DRM_DEBUG_KMS("id[%d]\n", ctx->id); in fimc_runtime_resume()
1825 return fimc_clk_ctrl(ctx, true); in fimc_runtime_resume()