Example #1
0
void __isph3a_aewb_enable(struct isp_h3a_device *isp_h3a, u8 enable)
{
	if (enable) {
		isp_h3a->regs.pcr |= ISPH3A_PCR_AEW_EN;
		DPRINTK_ISPH3A("    H3A enabled \n");
	} else {
		isp_h3a->regs.pcr &= ~ISPH3A_PCR_AEW_EN;
		DPRINTK_ISPH3A("    H3A disabled \n");
	}
	isp_h3a->update = 1;
	isp_h3a->aewb_config_local.aewb_enable = enable;
	isph3a_aewb_update_regs(isp_h3a);
}
Example #2
0
/**
 * isph3a_save_context - Saves the values of the h3a module registers.
 **/
void isph3a_save_context(struct device *dev)
{
	DPRINTK_ISPH3A(" Saving context\n");
	isp_save_context(dev, isph3a_reg_list);
	/* Avoid enable during restore ctx */
	isph3a_reg_list[0].val &= ~(ISPH3A_PCR_AEW_EN | ISPH3A_PCR_AF_EN);
}
Example #3
0
/**
 * isph3a_aewb_request_statistics - REquest statistics and update gains in AEWB
 * @aewbdata: Pointer to return AE AWB statistics data.
 *
 * This API allows the user to update White Balance gains, as well as
 * exposure time and analog gain. It is also used to request frame
 * statistics.
 *
 * Returns 0 if successful, -EINVAL when H3A engine is not enabled, or other
 * errors when setting gains.
 **/
int isph3a_aewb_request_statistics(struct isp_h3a_device *isp_h3a,
				   struct isph3a_aewb_data *aewbdata)
{
	struct device *dev = to_device(isp_h3a);
	unsigned long irqflags;
	int ret = 0;

	if (!isp_h3a->aewb_config_local.aewb_enable) {
		dev_dbg(dev, "h3a: engine not enabled\n");
		return -EINVAL;
	}

	DPRINTK_ISPH3A("isph3a_aewb_request_statistics: Enter "
		       "(frame req. => %d, current frame => %d,"
		       "update => %d)\n",
		       aewbdata->frame_number, isp_h3a->stat.frame_number,
		       aewbdata->update);
	DPRINTK_ISPH3A("User data received: \n");
	DPRINTK_ISPH3A("Digital gain = 0x%04x\n", aewbdata->dgain);
	DPRINTK_ISPH3A("WB gain b *=   0x%04x\n", aewbdata->wb_gain_b);
	DPRINTK_ISPH3A("WB gain r *=   0x%04x\n", aewbdata->wb_gain_r);
	DPRINTK_ISPH3A("WB gain gb =   0x%04x\n", aewbdata->wb_gain_gb);
	DPRINTK_ISPH3A("WB gain gr =   0x%04x\n", aewbdata->wb_gain_gr);

	spin_lock_irqsave(isp_h3a->lock, irqflags);

	if (aewbdata->update & SET_DIGITAL_GAIN)
		isp_h3a->h3awb_update.dgain = (u16)aewbdata->dgain;
	if (aewbdata->update & SET_COLOR_GAINS) {
		isp_h3a->h3awb_update.coef0 = (u8)aewbdata->wb_gain_r;
		isp_h3a->h3awb_update.coef1 = (u8)aewbdata->wb_gain_gr;
		isp_h3a->h3awb_update.coef2 = (u8)aewbdata->wb_gain_gb;
		isp_h3a->h3awb_update.coef3 = (u8)aewbdata->wb_gain_b;
	}
	if (aewbdata->update & (SET_COLOR_GAINS | SET_DIGITAL_GAIN))
		isp_h3a->wb_update = 1;

	spin_unlock_irqrestore(isp_h3a->lock, irqflags);

	if (aewbdata->update & REQUEST_STATISTICS)
		ret = isph3a_aewb_get_stats(isp_h3a, aewbdata);

	aewbdata->curr_frame = isp_h3a->stat.frame_number;

	DPRINTK_ISPH3A("isph3a_aewb_request_statistics: "
		       "aewbdata->h3a_aewb_statistics_buf => %p\n",
		       aewbdata->h3a_aewb_statistics_buf);

	return ret;
}
Example #4
0
/**
 * isph3a_print_status - Debug print. Values of H3A related registers.
 **/
static void isph3a_print_status(struct isp_h3a_device *isp_h3a)
{
	DPRINTK_ISPH3A("ISPH3A_PCR = 0x%08x\n",
		       isp_reg_readl(isp_h3a->dev, OMAP3_ISP_IOMEM_H3A,
				     ISPH3A_PCR));
	DPRINTK_ISPH3A("ISPH3A_AEWWIN1 = 0x%08x\n",
		       isp_reg_readl(isp_h3a->dev, OMAP3_ISP_IOMEM_H3A,
				     ISPH3A_AEWWIN1));
	DPRINTK_ISPH3A("ISPH3A_AEWINSTART = 0x%08x\n",
		       isp_reg_readl(isp_h3a->dev, OMAP3_ISP_IOMEM_H3A,
				     ISPH3A_AEWINSTART));
	DPRINTK_ISPH3A("ISPH3A_AEWINBLK = 0x%08x\n",
		       isp_reg_readl(isp_h3a->dev, OMAP3_ISP_IOMEM_H3A,
				     ISPH3A_AEWINBLK));
	DPRINTK_ISPH3A("ISPH3A_AEWSUBWIN = 0x%08x\n",
		       isp_reg_readl(isp_h3a->dev, OMAP3_ISP_IOMEM_H3A,
				     ISPH3A_AEWSUBWIN));
	DPRINTK_ISPH3A("ISPH3A_AEWBUFST = 0x%08x\n",
		       isp_reg_readl(isp_h3a->dev, OMAP3_ISP_IOMEM_H3A,
				     ISPH3A_AEWBUFST));
	DPRINTK_ISPH3A("stats windows = %d\n", isp_h3a->win_count);
	DPRINTK_ISPH3A("stats buf size = %d\n", isp_h3a->stat.buf_size);
}
Example #5
0
/**
 * isph3a_restore_context - Restores the values of the h3a module registers.
 **/
void isph3a_restore_context(struct device *dev)
{
	DPRINTK_ISPH3A(" Restoring context\n");
	isp_restore_context(dev, isph3a_reg_list);
}