Lines Matching full:ic
17 /* IC Register Offsets */
29 /* IC Register Fields */
164 static inline u32 ipu_ic_read(struct ipu_ic *ic, unsigned offset) in ipu_ic_read() argument
166 return readl(ic->priv->base + offset); in ipu_ic_read()
169 static inline void ipu_ic_write(struct ipu_ic *ic, u32 value, unsigned offset) in ipu_ic_write() argument
171 writel(value, ic->priv->base + offset); in ipu_ic_write()
174 static int init_csc(struct ipu_ic *ic, in init_csc() argument
178 struct ipu_ic_priv *priv = ic->priv; in init_csc()
185 (priv->tpmem_base + ic->reg->tpmem_csc[csc_index]); in init_csc()
216 static int calc_resize_coeffs(struct ipu_ic *ic, in calc_resize_coeffs() argument
221 struct ipu_ic_priv *priv = ic->priv; in calc_resize_coeffs()
268 void ipu_ic_task_enable(struct ipu_ic *ic) in ipu_ic_task_enable() argument
270 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_enable()
276 ic_conf = ipu_ic_read(ic, IC_CONF); in ipu_ic_task_enable()
278 ic_conf |= ic->bit->ic_conf_en; in ipu_ic_task_enable()
280 if (ic->rotation) in ipu_ic_task_enable()
281 ic_conf |= ic->bit->ic_conf_rot_en; in ipu_ic_task_enable()
283 if (ic->in_cs.cs != ic->out_cs.cs) in ipu_ic_task_enable()
284 ic_conf |= ic->bit->ic_conf_csc1_en; in ipu_ic_task_enable()
286 if (ic->graphics) { in ipu_ic_task_enable()
287 ic_conf |= ic->bit->ic_conf_cmb_en; in ipu_ic_task_enable()
288 ic_conf |= ic->bit->ic_conf_csc1_en; in ipu_ic_task_enable()
290 if (ic->g_in_cs.cs != ic->out_cs.cs) in ipu_ic_task_enable()
291 ic_conf |= ic->bit->ic_conf_csc2_en; in ipu_ic_task_enable()
294 ipu_ic_write(ic, ic_conf, IC_CONF); in ipu_ic_task_enable()
300 void ipu_ic_task_disable(struct ipu_ic *ic) in ipu_ic_task_disable() argument
302 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_disable()
308 ic_conf = ipu_ic_read(ic, IC_CONF); in ipu_ic_task_disable()
310 ic_conf &= ~(ic->bit->ic_conf_en | in ipu_ic_task_disable()
311 ic->bit->ic_conf_csc1_en | in ipu_ic_task_disable()
312 ic->bit->ic_conf_rot_en); in ipu_ic_task_disable()
313 if (ic->bit->ic_conf_csc2_en) in ipu_ic_task_disable()
314 ic_conf &= ~ic->bit->ic_conf_csc2_en; in ipu_ic_task_disable()
315 if (ic->bit->ic_conf_cmb_en) in ipu_ic_task_disable()
316 ic_conf &= ~ic->bit->ic_conf_cmb_en; in ipu_ic_task_disable()
318 ipu_ic_write(ic, ic_conf, IC_CONF); in ipu_ic_task_disable()
324 int ipu_ic_task_init_rsc(struct ipu_ic *ic, in ipu_ic_task_init_rsc() argument
330 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_init_rsc()
338 ret = calc_resize_coeffs(ic, in_height, out_height, in ipu_ic_task_init_rsc()
346 ret = calc_resize_coeffs(ic, in_width, out_width, in ipu_ic_task_init_rsc()
356 ipu_ic_write(ic, rsc, ic->reg->rsc); in ipu_ic_task_init_rsc()
359 ic->in_cs = csc->in_cs; in ipu_ic_task_init_rsc()
360 ic->out_cs = csc->out_cs; in ipu_ic_task_init_rsc()
362 ret = init_csc(ic, csc, 0); in ipu_ic_task_init_rsc()
368 int ipu_ic_task_init(struct ipu_ic *ic, in ipu_ic_task_init() argument
373 return ipu_ic_task_init_rsc(ic, csc, in ipu_ic_task_init()
379 int ipu_ic_task_idma_init(struct ipu_ic *ic, struct ipuv3_channel *channel, in ipu_ic_task_idma_init() argument
383 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_task_idma_init()
392 dev_err(ipu->dev, "Illegal burst length for IC\n"); in ipu_ic_task_idma_init()
404 ic_idmac_1 = ipu_ic_read(ic, IC_IDMAC_1); in ipu_ic_task_idma_init()
405 ic_idmac_2 = ipu_ic_read(ic, IC_IDMAC_2); in ipu_ic_task_idma_init()
406 ic_idmac_3 = ipu_ic_read(ic, IC_IDMAC_3); in ipu_ic_task_idma_init()
506 ipu_ic_write(ic, ic_idmac_1, IC_IDMAC_1); in ipu_ic_task_idma_init()
507 ipu_ic_write(ic, ic_idmac_2, IC_IDMAC_2); in ipu_ic_task_idma_init()
508 ipu_ic_write(ic, ic_idmac_3, IC_IDMAC_3); in ipu_ic_task_idma_init()
511 ic->rotation = true; in ipu_ic_task_idma_init()
519 static void ipu_irt_enable(struct ipu_ic *ic) in ipu_irt_enable() argument
521 struct ipu_ic_priv *priv = ic->priv; in ipu_irt_enable()
529 static void ipu_irt_disable(struct ipu_ic *ic) in ipu_irt_disable() argument
531 struct ipu_ic_priv *priv = ic->priv; in ipu_irt_disable()
539 int ipu_ic_enable(struct ipu_ic *ic) in ipu_ic_enable() argument
541 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_enable()
551 if (ic->rotation) in ipu_ic_enable()
552 ipu_irt_enable(ic); in ipu_ic_enable()
560 int ipu_ic_disable(struct ipu_ic *ic) in ipu_ic_disable() argument
562 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_disable()
575 if (ic->rotation) in ipu_ic_disable()
576 ipu_irt_disable(ic); in ipu_ic_disable()
578 ic->rotation = ic->graphics = false; in ipu_ic_disable()
590 struct ipu_ic *ic, *ret; in ipu_ic_get() local
595 ic = &priv->task[task]; in ipu_ic_get()
599 if (ic->in_use) { in ipu_ic_get()
604 ic->in_use = true; in ipu_ic_get()
605 ret = ic; in ipu_ic_get()
613 void ipu_ic_put(struct ipu_ic *ic) in ipu_ic_put() argument
615 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_put()
619 ic->in_use = false; in ipu_ic_put()
644 dev_dbg(dev, "IC base: 0x%08lx remapped to %p\n", base, priv->base); in ipu_ic_init()
662 void ipu_ic_dump(struct ipu_ic *ic) in ipu_ic_dump() argument
664 struct ipu_ic_priv *priv = ic->priv; in ipu_ic_dump()
668 ipu_ic_read(ic, IC_CONF)); in ipu_ic_dump()
670 ipu_ic_read(ic, IC_PRP_ENC_RSC)); in ipu_ic_dump()
672 ipu_ic_read(ic, IC_PRP_VF_RSC)); in ipu_ic_dump()
674 ipu_ic_read(ic, IC_PP_RSC)); in ipu_ic_dump()
676 ipu_ic_read(ic, IC_CMBP_1)); in ipu_ic_dump()
678 ipu_ic_read(ic, IC_CMBP_2)); in ipu_ic_dump()
680 ipu_ic_read(ic, IC_IDMAC_1)); in ipu_ic_dump()
682 ipu_ic_read(ic, IC_IDMAC_2)); in ipu_ic_dump()
684 ipu_ic_read(ic, IC_IDMAC_3)); in ipu_ic_dump()
686 ipu_ic_read(ic, IC_IDMAC_4)); in ipu_ic_dump()