static int clu_set_table(struct vsp1_clu *clu, struct v4l2_ctrl *ctrl) { struct vsp1_dl_body *dlb; unsigned int i; dlb = vsp1_dl_fragment_alloc(clu->entity.vsp1, 1 + 17 * 17 * 17); if (!dlb) return -ENOMEM; vsp1_dl_fragment_write(dlb, VI6_CLU_ADDR, 0); for (i = 0; i < 17 * 17 * 17; ++i) vsp1_dl_fragment_write(dlb, VI6_CLU_DATA, ctrl->p_new.p_u32[i]); spin_lock_irq(&clu->lock); swap(clu->clu, dlb); spin_unlock_irq(&clu->lock); vsp1_dl_fragment_free(dlb); return 0; }
static int lut_set_table(struct vsp1_lut *lut, struct v4l2_ctrl *ctrl) { struct vsp1_dl_body *dlb; unsigned int i; dlb = vsp1_dl_fragment_alloc(lut->entity.vsp1, 256); if (!dlb) return -ENOMEM; for (i = 0; i < 256; ++i) vsp1_dl_fragment_write(dlb, VI6_LUT_TABLE + 4 * i, ctrl->p_new.p_u32[i]); spin_lock_irq(&lut->lock); swap(lut->lut, dlb); spin_unlock_irq(&lut->lock); vsp1_dl_fragment_free(dlb); return 0; }
static int lut_set_table(struct vsp1_lut *lut, struct vsp1_lut_config *config) { struct vsp1_dl_body *dlb; unsigned int i; dlb = vsp1_dl_fragment_alloc(lut->entity.vsp1, ARRAY_SIZE(config->lut)); if (!dlb) return -ENOMEM; for (i = 0; i < ARRAY_SIZE(config->lut); ++i) vsp1_dl_fragment_write(dlb, VI6_LUT_TABLE + 4 * i, config->lut[i]); mutex_lock(&lut->lock); swap(lut->lut, dlb); mutex_unlock(&lut->lock); vsp1_dl_fragment_free(dlb); return 0; }