Lines Matching refs:ic

166 static inline u32 ipu_ic_read(struct ipu_ic *ic, unsigned offset)  in ipu_ic_read()  argument
168 return readl(ic->priv->base + offset); in ipu_ic_read()
171 static inline void ipu_ic_write(struct ipu_ic *ic, u32 value, unsigned offset) in ipu_ic_write() argument
173 writel(value, ic->priv->base + offset); in ipu_ic_write()
223 static int init_csc(struct ipu_ic *ic, in init_csc() argument
228 struct ipu_ic_priv *priv = ic->priv; in init_csc()
236 (priv->tpmem_base + ic->reg->tpmem_csc[csc_index]); in init_csc()
278 static int calc_resize_coeffs(struct ipu_ic *ic, in calc_resize_coeffs() argument
283 struct ipu_ic_priv *priv = ic->priv; in calc_resize_coeffs()
330 void ipu_ic_task_enable(struct ipu_ic *ic) in ipu_ic_task_enable() argument
332 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_enable()
338 ic_conf = ipu_ic_read(ic, IC_CONF); in ipu_ic_task_enable()
340 ic_conf |= ic->bit->ic_conf_en; in ipu_ic_task_enable()
342 if (ic->rotation) in ipu_ic_task_enable()
343 ic_conf |= ic->bit->ic_conf_rot_en; in ipu_ic_task_enable()
345 if (ic->in_cs != ic->out_cs) in ipu_ic_task_enable()
346 ic_conf |= ic->bit->ic_conf_csc1_en; in ipu_ic_task_enable()
348 if (ic->graphics) { in ipu_ic_task_enable()
349 ic_conf |= ic->bit->ic_conf_cmb_en; in ipu_ic_task_enable()
350 ic_conf |= ic->bit->ic_conf_csc1_en; in ipu_ic_task_enable()
352 if (ic->g_in_cs != ic->out_cs) in ipu_ic_task_enable()
353 ic_conf |= ic->bit->ic_conf_csc2_en; in ipu_ic_task_enable()
356 ipu_ic_write(ic, ic_conf, IC_CONF); in ipu_ic_task_enable()
362 void ipu_ic_task_disable(struct ipu_ic *ic) in ipu_ic_task_disable() argument
364 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_disable()
370 ic_conf = ipu_ic_read(ic, IC_CONF); in ipu_ic_task_disable()
372 ic_conf &= ~(ic->bit->ic_conf_en | in ipu_ic_task_disable()
373 ic->bit->ic_conf_csc1_en | in ipu_ic_task_disable()
374 ic->bit->ic_conf_rot_en); in ipu_ic_task_disable()
375 if (ic->bit->ic_conf_csc2_en) in ipu_ic_task_disable()
376 ic_conf &= ~ic->bit->ic_conf_csc2_en; in ipu_ic_task_disable()
377 if (ic->bit->ic_conf_cmb_en) in ipu_ic_task_disable()
378 ic_conf &= ~ic->bit->ic_conf_cmb_en; in ipu_ic_task_disable()
380 ipu_ic_write(ic, ic_conf, IC_CONF); in ipu_ic_task_disable()
382 ic->rotation = ic->graphics = false; in ipu_ic_task_disable()
388 int ipu_ic_task_graphics_init(struct ipu_ic *ic, in ipu_ic_task_graphics_init() argument
393 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_graphics_init()
398 if (ic->task == IC_TASK_ENCODER) in ipu_ic_task_graphics_init()
403 ic_conf = ipu_ic_read(ic, IC_CONF); in ipu_ic_task_graphics_init()
405 if (!(ic_conf & ic->bit->ic_conf_csc1_en)) { in ipu_ic_task_graphics_init()
407 ret = init_csc(ic, IPUV3_COLORSPACE_RGB, in ipu_ic_task_graphics_init()
413 ic->g_in_cs = in_g_cs; in ipu_ic_task_graphics_init()
415 if (ic->g_in_cs != ic->out_cs) { in ipu_ic_task_graphics_init()
416 ret = init_csc(ic, ic->g_in_cs, ic->out_cs, 1); in ipu_ic_task_graphics_init()
423 reg = ipu_ic_read(ic, IC_CMBP_1); in ipu_ic_task_graphics_init()
424 reg &= ~(0xff << ic->bit->ic_cmb_galpha_bit); in ipu_ic_task_graphics_init()
425 reg |= (galpha << ic->bit->ic_cmb_galpha_bit); in ipu_ic_task_graphics_init()
426 ipu_ic_write(ic, reg, IC_CMBP_1); in ipu_ic_task_graphics_init()
432 ipu_ic_write(ic, colorkey, IC_CMBP_2); in ipu_ic_task_graphics_init()
436 ipu_ic_write(ic, ic_conf, IC_CONF); in ipu_ic_task_graphics_init()
438 ic->graphics = true; in ipu_ic_task_graphics_init()
445 int ipu_ic_task_init(struct ipu_ic *ic, in ipu_ic_task_init() argument
451 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_init()
457 ret = calc_resize_coeffs(ic, in_height, out_height, in ipu_ic_task_init()
465 ret = calc_resize_coeffs(ic, in_width, out_width, in ipu_ic_task_init()
474 ipu_ic_write(ic, reg, ic->reg->rsc); in ipu_ic_task_init()
477 ic->in_cs = in_cs; in ipu_ic_task_init()
478 ic->out_cs = out_cs; in ipu_ic_task_init()
480 if (ic->in_cs != ic->out_cs) { in ipu_ic_task_init()
481 ret = init_csc(ic, ic->in_cs, ic->out_cs, 0); in ipu_ic_task_init()
492 int ipu_ic_task_idma_init(struct ipu_ic *ic, struct ipuv3_channel *channel, in ipu_ic_task_idma_init() argument
496 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_idma_init()
517 ic_idmac_1 = ipu_ic_read(ic, IC_IDMAC_1); in ipu_ic_task_idma_init()
518 ic_idmac_2 = ipu_ic_read(ic, IC_IDMAC_2); in ipu_ic_task_idma_init()
519 ic_idmac_3 = ipu_ic_read(ic, IC_IDMAC_3); in ipu_ic_task_idma_init()
619 ipu_ic_write(ic, ic_idmac_1, IC_IDMAC_1); in ipu_ic_task_idma_init()
620 ipu_ic_write(ic, ic_idmac_2, IC_IDMAC_2); in ipu_ic_task_idma_init()
621 ipu_ic_write(ic, ic_idmac_3, IC_IDMAC_3); in ipu_ic_task_idma_init()
624 ic->rotation = true; in ipu_ic_task_idma_init()
632 int ipu_ic_enable(struct ipu_ic *ic) in ipu_ic_enable() argument
634 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_enable()
640 if (ic->rotation) in ipu_ic_enable()
654 int ipu_ic_disable(struct ipu_ic *ic) in ipu_ic_disable() argument
656 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_disable()
680 struct ipu_ic *ic, *ret; in ipu_ic_get() local
685 ic = &priv->task[task]; in ipu_ic_get()
689 if (ic->in_use) { in ipu_ic_get()
694 ic->in_use = true; in ipu_ic_get()
695 ret = ic; in ipu_ic_get()
703 void ipu_ic_put(struct ipu_ic *ic) in ipu_ic_put() argument
705 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_put()
709 ic->in_use = false; in ipu_ic_put()
752 void ipu_ic_dump(struct ipu_ic *ic) in ipu_ic_dump() argument
754 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_dump()
758 ipu_ic_read(ic, IC_CONF)); in ipu_ic_dump()
760 ipu_ic_read(ic, IC_PRP_ENC_RSC)); in ipu_ic_dump()
762 ipu_ic_read(ic, IC_PRP_VF_RSC)); in ipu_ic_dump()
764 ipu_ic_read(ic, IC_PP_RSC)); in ipu_ic_dump()
766 ipu_ic_read(ic, IC_CMBP_1)); in ipu_ic_dump()
768 ipu_ic_read(ic, IC_CMBP_2)); in ipu_ic_dump()
770 ipu_ic_read(ic, IC_IDMAC_1)); in ipu_ic_dump()
772 ipu_ic_read(ic, IC_IDMAC_2)); in ipu_ic_dump()
774 ipu_ic_read(ic, IC_IDMAC_3)); in ipu_ic_dump()
776 ipu_ic_read(ic, IC_IDMAC_4)); in ipu_ic_dump()