Lines Matching defs:ic

164 static inline u32 ipu_ic_read(struct ipu_ic *ic, unsigned offset)
166 return readl(ic->priv->base + offset);
169 static inline void ipu_ic_write(struct ipu_ic *ic, u32 value, unsigned offset)
171 writel(value, ic->priv->base + offset);
174 static int init_csc(struct ipu_ic *ic,
178 struct ipu_ic_priv *priv = ic->priv;
185 (priv->tpmem_base + ic->reg->tpmem_csc[csc_index]);
216 static int calc_resize_coeffs(struct ipu_ic *ic,
221 struct ipu_ic_priv *priv = ic->priv;
268 void ipu_ic_task_enable(struct ipu_ic *ic)
270 struct ipu_ic_priv *priv = ic->priv;
276 ic_conf = ipu_ic_read(ic, IC_CONF);
278 ic_conf |= ic->bit->ic_conf_en;
280 if (ic->rotation)
281 ic_conf |= ic->bit->ic_conf_rot_en;
283 if (ic->in_cs.cs != ic->out_cs.cs)
284 ic_conf |= ic->bit->ic_conf_csc1_en;
286 if (ic->graphics) {
287 ic_conf |= ic->bit->ic_conf_cmb_en;
288 ic_conf |= ic->bit->ic_conf_csc1_en;
290 if (ic->g_in_cs.cs != ic->out_cs.cs)
291 ic_conf |= ic->bit->ic_conf_csc2_en;
294 ipu_ic_write(ic, ic_conf, IC_CONF);
300 void ipu_ic_task_disable(struct ipu_ic *ic)
302 struct ipu_ic_priv *priv = ic->priv;
308 ic_conf = ipu_ic_read(ic, IC_CONF);
310 ic_conf &= ~(ic->bit->ic_conf_en |
311 ic->bit->ic_conf_csc1_en |
312 ic->bit->ic_conf_rot_en);
313 if (ic->bit->ic_conf_csc2_en)
314 ic_conf &= ~ic->bit->ic_conf_csc2_en;
315 if (ic->bit->ic_conf_cmb_en)
316 ic_conf &= ~ic->bit->ic_conf_cmb_en;
318 ipu_ic_write(ic, ic_conf, IC_CONF);
324 int ipu_ic_task_graphics_init(struct ipu_ic *ic,
329 struct ipu_ic_priv *priv = ic->priv;
335 if (ic->task == IC_TASK_ENCODER)
340 ic_conf = ipu_ic_read(ic, IC_CONF);
342 if (!(ic_conf & ic->bit->ic_conf_csc1_en)) {
356 ret = init_csc(ic, &csc1, 0);
361 ic->g_in_cs = *g_in_cs;
362 csc2.in_cs = ic->g_in_cs;
363 csc2.out_cs = ic->out_cs;
369 ret = init_csc(ic, &csc2, 1);
375 reg = ipu_ic_read(ic, IC_CMBP_1);
376 reg &= ~(0xff << ic->bit->ic_cmb_galpha_bit);
377 reg |= (galpha << ic->bit->ic_cmb_galpha_bit);
378 ipu_ic_write(ic, reg, IC_CMBP_1);
384 ipu_ic_write(ic, colorkey, IC_CMBP_2);
388 ipu_ic_write(ic, ic_conf, IC_CONF);
390 ic->graphics = true;
397 int ipu_ic_task_init_rsc(struct ipu_ic *ic,
403 struct ipu_ic_priv *priv = ic->priv;
411 ret = calc_resize_coeffs(ic, in_height, out_height,
419 ret = calc_resize_coeffs(ic, in_width, out_width,
429 ipu_ic_write(ic, rsc, ic->reg->rsc);
432 ic->in_cs = csc->in_cs;
433 ic->out_cs = csc->out_cs;
435 ret = init_csc(ic, csc, 0);
441 int ipu_ic_task_init(struct ipu_ic *ic,
446 return ipu_ic_task_init_rsc(ic, csc,
452 int ipu_ic_task_idma_init(struct ipu_ic *ic, struct ipuv3_channel *channel,
456 struct ipu_ic_priv *priv = ic->priv;
477 ic_idmac_1 = ipu_ic_read(ic, IC_IDMAC_1);
478 ic_idmac_2 = ipu_ic_read(ic, IC_IDMAC_2);
479 ic_idmac_3 = ipu_ic_read(ic, IC_IDMAC_3);
579 ipu_ic_write(ic, ic_idmac_1, IC_IDMAC_1);
580 ipu_ic_write(ic, ic_idmac_2, IC_IDMAC_2);
581 ipu_ic_write(ic, ic_idmac_3, IC_IDMAC_3);
584 ic->rotation = true;
592 static void ipu_irt_enable(struct ipu_ic *ic)
594 struct ipu_ic_priv *priv = ic->priv;
602 static void ipu_irt_disable(struct ipu_ic *ic)
604 struct ipu_ic_priv *priv = ic->priv;
612 int ipu_ic_enable(struct ipu_ic *ic)
614 struct ipu_ic_priv *priv = ic->priv;
624 if (ic->rotation)
625 ipu_irt_enable(ic);
633 int ipu_ic_disable(struct ipu_ic *ic)
635 struct ipu_ic_priv *priv = ic->priv;
648 if (ic->rotation)
649 ipu_irt_disable(ic);
651 ic->rotation = ic->graphics = false;
663 struct ipu_ic *ic, *ret;
668 ic = &priv->task[task];
672 if (ic->in_use) {
677 ic->in_use = true;
678 ret = ic;
686 void ipu_ic_put(struct ipu_ic *ic)
688 struct ipu_ic_priv *priv = ic->priv;
692 ic->in_use = false;
735 void ipu_ic_dump(struct ipu_ic *ic)
737 struct ipu_ic_priv *priv = ic->priv;
741 ipu_ic_read(ic, IC_CONF));
743 ipu_ic_read(ic, IC_PRP_ENC_RSC));
745 ipu_ic_read(ic, IC_PRP_VF_RSC));
747 ipu_ic_read(ic, IC_PP_RSC));
749 ipu_ic_read(ic, IC_CMBP_1));
751 ipu_ic_read(ic, IC_CMBP_2));
753 ipu_ic_read(ic, IC_IDMAC_1));
755 ipu_ic_read(ic, IC_IDMAC_2));
757 ipu_ic_read(ic, IC_IDMAC_3));
759 ipu_ic_read(ic, IC_IDMAC_4));