Beispiel #1
0
static void ccdc_restore_defaults(void)
{
	enum vpss_ccdc_source_sel source = VPSS_CCDCIN;
	int i;

	memcpy(&ccdc_cfg.bayer.config_params, &ccdc_config_defaults,
		sizeof(struct ccdc_config_params_raw));

	dev_dbg(dev, "\nstarting ccdc_restore_defaults...");
	/* Enable clock to ISIF, IPIPEIF and BL */
	vpss_enable_clock(VPSS_CCDC_CLOCK, 1);
	vpss_enable_clock(VPSS_IPIPEIF_CLOCK, 1);
	vpss_enable_clock(VPSS_BL_CLOCK, 1);

	/* set all registers to default value */
	for (i = 0; i <= 0x1f8; i += 4)
		regw(0, i);

	/* no culling support */
	regw(0xffff, CULH);
	regw(0xff, CULV);

	/* Set default offset and gain */
	ccdc_config_gain_offset();

	vpss_select_ccdc_source(source);

	dev_dbg(dev, "\nEnd of ccdc_restore_defaults...");
}
/*
 * ccdc_restore_defaults()
 * This function restore power on defaults in the ccdc registers
 */
static int ccdc_restore_defaults(void)
{
	int i;

	dev_dbg(dev, "\nstarting ccdc_restore_defaults...");
	/* set all registers to zero */
	for (i = 0; i <= CCDC_REG_LAST; i += 4)
		regw(0, i);

	/* now override the values with power on defaults in registers */
	regw(MODESET_DEFAULT, MODESET);
	/* no culling support */
	regw(CULH_DEFAULT, CULH);
	regw(CULV_DEFAULT, CULV);
	/* Set default Gain and Offset */
	ccdc_hw_params_raw.gain.r_ye = GAIN_DEFAULT;
	ccdc_hw_params_raw.gain.gb_g = GAIN_DEFAULT;
	ccdc_hw_params_raw.gain.gr_cy = GAIN_DEFAULT;
	ccdc_hw_params_raw.gain.b_mg = GAIN_DEFAULT;
	ccdc_config_gain_offset();
	regw(OUTCLIP_DEFAULT, OUTCLIP);
	regw(LSCCFG2_DEFAULT, LSCCFG2);
	/* select ccdc input */
	if (vpss_select_ccdc_source(VPSS_CCDCIN)) {
		dev_dbg(dev, "\ncouldn't select ccdc input source");
		return -EFAULT;
	}
	/* select ccdc clock */
	if (vpss_enable_clock(VPSS_CCDC_CLOCK, 1) < 0) {
		dev_dbg(dev, "\ncouldn't enable ccdc clock");
		return -EFAULT;
	}
	dev_dbg(dev, "\nEnd of ccdc_restore_defaults...");
	return 0;
}