Exemplo n.º 1
0
static int disp_ccorr_write_coef_reg(cmdqRecHandle cmdq, disp_ccorr_id_t id, int lock)
{
    const unsigned long ccorr_base = DISPSYS_CCORR_BASE;
    int ret = 0;
    DISP_CCORR_COEF_T *ccorr;

    if (lock)
		mutex_lock(&g_gamma_global_lock);

    ccorr = g_disp_ccorr_coef[id];
    if (ccorr == NULL) {
        pr_debug("[GAMMA] disp_ccorr_write_coef_reg: [%d] not initialized\n", id);
        ret = -EFAULT;
        goto ccorr_write_coef_unlock;
    }

    DISP_REG_SET(cmdq, DISP_REG_CCORR_EN, 1);
    DISP_REG_MASK(cmdq, DISP_REG_CCORR_CFG, 0x2, 0x2);

    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 0),
        ((ccorr->coef[0][0] << 16) | (ccorr->coef[0][1])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 1),
        ((ccorr->coef[0][2] << 16) | (ccorr->coef[1][0])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 2),
        ((ccorr->coef[1][1] << 16) | (ccorr->coef[1][2])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 3),
        ((ccorr->coef[2][0] << 16) | (ccorr->coef[2][1])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 4),
        (ccorr->coef[2][2] << 16) );

ccorr_write_coef_unlock:

    if (lock)
		mutex_unlock(&g_gamma_global_lock);

    return ret;
}
Exemplo n.º 2
0
static int disp_ccorr_write_coef_reg(cmdqRecHandle cmdq, disp_ccorr_id_t id, int lock)
{
    unsigned int ccorr_base = 0;
    int ret = 0;
    int is_identity = 0;
    DISP_CCORR_COEF_T *ccorr;

    if (id >= DISP_CCORR_TOTAL) {
        printk(KERN_ERR "[GAMMA] disp_gamma_write_lut_reg: invalid ID = %d\n", id);
        return -EFAULT;
    }

    if (lock) spin_lock(&g_gamma_global_lock);

    ccorr = g_disp_ccorr_coef[id];
    if (ccorr == NULL) {
        printk(KERN_NOTICE "[GAMMA] disp_ccorr_write_coef_reg: [%d] not initialized\n", id);
        ret = -EFAULT;
        goto ccorr_write_coef_unlock;
    }

    if ((ccorr->coef[0][0] == 1024) && (ccorr->coef[0][1] == 0)    && (ccorr->coef[0][2] == 0) &&
        (ccorr->coef[1][0] == 0)    && (ccorr->coef[1][1] == 1024) && (ccorr->coef[1][2] == 0) &&
        (ccorr->coef[2][0] == 0)    && (ccorr->coef[2][1] == 0)    && (ccorr->coef[2][2] == 1024)) {
        is_identity = 1;        
    }

    if (id == DISP_CCORR0) {
        ccorr_base = DISP_AAL_CCORR(0);
        DISP_REG_MASK(cmdq, DISP_AAL_CFG, (!is_identity) << 4, 0x1 << 4);
    } else if (id == DISP_CCORR1) {
        ccorr_base = DISP_GAMMA_CCORR_0;
        DISP_REG_MASK(cmdq, DISP_REG_GAMMA_CFG, (!is_identity) << 4, 0x1 << 4);
    } else {
        printk(KERN_ERR "[GAMMA] disp_gamma_write_ccorr_reg: invalid ID = %d\n", id);
        ret = -EFAULT;
        goto ccorr_write_coef_unlock;
    }

    pr_debug("CCORR %d %d\n", (int)id, is_identity);
    pr_debug("CCORR %d %d %d\n", ccorr->coef[0][0], ccorr->coef[0][1],  ccorr->coef[0][2]);
    pr_debug("CCORR %d %d %d\n", ccorr->coef[1][0], ccorr->coef[1][1],  ccorr->coef[1][2]);
    pr_debug("CCORR %d %d %d\n", ccorr->coef[2][0], ccorr->coef[2][1],  ccorr->coef[2][2]);

    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 0),
        ((ccorr->coef[0][0] << 16) | (ccorr->coef[0][1])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 1),
        ((ccorr->coef[0][2] << 16) | (ccorr->coef[1][0])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 2),
        ((ccorr->coef[1][1] << 16) | (ccorr->coef[1][2])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 3),
        ((ccorr->coef[2][0] << 16) | (ccorr->coef[2][1])) );
    DISP_REG_SET(cmdq, CCORR_REG(ccorr_base, 4),
        (ccorr->coef[2][2] << 16) );

ccorr_write_coef_unlock:

    if (lock) spin_unlock(&g_gamma_global_lock);

    return ret;
}