コード例 #1
0
s5p_tv_sd_err __s5p_sdout_init_offset_gain(s5p_sd_channel_sel channel,
					u32 offset,
					u32 gain)
{
	SDPRINTK("%d,%d,%d\n\r", channel, offset, gain);

	switch (channel) {

	case SDOUT_CHANNEL_0:
		writel(SDO_SCALE_CONV_OFFSET(offset) | SDO_SCALE_CONV_GAIN(gain),
		       sdout_base + S5P_SDO_SCALE_CH0);
		SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_SCALE_CH0));
		break;

	case SDOUT_CHANNEL_1:
		writel(SDO_SCALE_CONV_OFFSET(offset) | SDO_SCALE_CONV_GAIN(gain),
		       sdout_base + S5P_SDO_SCALE_CH1);
		SDPRINTK(" 0x%08x\n\r", readl(sdout_base + S5P_SDO_SCALE_CH1));
		break;

	case SDOUT_CHANNEL_2:
		writel(SDO_SCALE_CONV_OFFSET(offset) | SDO_SCALE_CONV_GAIN(gain),
		       sdout_base + S5P_SDO_SCALE_CH2);
		SDPRINTK(" 0x%08x\n\r", readl(sdout_base + S5P_SDO_SCALE_CH2));
		break;

	default:
		SDPRINTK(" invalid channel parameter(%d)\n\r", channel);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	return SDOUT_NO_ERROR;
}
コード例 #2
0
void __s5p_sdout_init_oversampling_filter_coeff(u32 size,
						      u32* coeff,
						      u32* coeff1,
						      u32* coeff2)
{
	u32* temp_reg = 0;

	SDPRINTK(" %d,0x%x,0x%x,0x%x\n\r", (u32)size, (u32)coeff, (u32)coeff1, 
		(u32)coeff2);

	if (coeff != NULL) {
		temp_reg = (u32*)readl(sdout_base + S5P_SDO_OSFC00_0);
		memcpy((void *)temp_reg, (const void *)coeff, size*4);
	}

	if (coeff1 != NULL) {
		temp_reg = (u32*)readl(sdout_base + S5P_SDO_OSFC00_1);
		memcpy((void *)temp_reg, (const void *)coeff1, size*4);
	}

	if (coeff2 != NULL) {
		temp_reg = (u32*)readl(sdout_base + S5P_SDO_OSFC00_2);
		memcpy((void *)temp_reg, (const void *)coeff2, size*4);
	}

	SDPRINTK(" ()\n\r");
}
コード例 #3
0
s5p_tv_sd_err __s5p_sdout_init_sync_signal_pin(s5p_sd_sync_sig_pin pin)
{
	SDPRINTK("%d\n\r", pin);

	switch (pin) {

	case SDOUT_SYNC_SIG_NO:
		writel(SDO_COMPONENT_SYNC_ABSENT, sdout_base + S5P_SDO_SYNC);
		break;

	case SDOUT_SYNC_SIG_YG:
		writel(SDO_COMPONENT_SYNC_YG, sdout_base + S5P_SDO_SYNC);
		break;

	case SDOUT_SYNC_SIG_ALL:
		writel(SDO_COMPONENT_SYNC_ALL, sdout_base + S5P_SDO_SYNC);
		break;

	default:
		SDPRINTK("invalid pin parameter(%d)\n\r", pin);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_SYNC));

	return SDOUT_NO_ERROR;
}
コード例 #4
0
static s5p_tv_sd_err __s5p_sdout_init_oversampling_filter_coeff_default(s5p_tv_o_mode out_mode)
{
	u32 temp_reg = 0;
	u8 i;

	SDPRINTK("%d\n\r", out_mode);

	switch (out_mode) {

	case TVOUT_OUTPUT_COMPOSITE:

	case TVOUT_OUTPUT_SVIDEO:

	case TVOUT_OUTPUT_COMPONENT_YPBPR_INERLACED:
		/* Hareware default values on TV encoder are recommended */
		break;

	default:
		SDPRINTK("invalid out_mode parameter(%d)\n\r", out_mode);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	return SDOUT_NO_ERROR;
}
コード例 #5
0
s5p_tv_sd_err __s5p_sdout_init_ch_xtalk_cancel_coef(s5p_sd_channel_sel channel,
						u32 coeff2,
						u32 coeff1)
{
	SDPRINTK(" %d,%d,%d\n\r", channel, coeff2, coeff1);

	switch (channel) {

	case SDOUT_CHANNEL_0:
		writel(SDO_XTALK_COEF02(coeff2) | SDO_XTALK_COEF01(coeff1), 
			sdout_base + S5P_SDO_XTALK0);
		SDPRINTK(" 0x%08x)\n\r", readl(sdout_base + S5P_SDO_XTALK0));
		break;

	case SDOUT_CHANNEL_1:
		writel(SDO_XTALK_COEF02(coeff2) | SDO_XTALK_COEF01(coeff1), 
			sdout_base + S5P_SDO_XTALK1);
		SDPRINTK(" 0x%08x)\n\r", readl(sdout_base + S5P_SDO_XTALK1));
		break;

	case SDOUT_CHANNEL_2:
		writel(SDO_XTALK_COEF02(coeff2) | SDO_XTALK_COEF01(coeff1), 
			sdout_base + S5P_SDO_XTALK2);
		SDPRINTK("0x%08x)\n\r", readl(sdout_base + S5P_SDO_XTALK2));
		break;

	default:
		SDPRINTK(" invalid channel parameter(%d)\n\r", channel);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	return SDOUT_NO_ERROR;
}
コード例 #6
0
/*
/ stop  - stop functions are only called under running SDOUT
*/
void __s5p_sdout_stop(void)
{
	unsigned long j, timeout;

	SDPRINTK("()\n\r");

	writel(SDO_TVOUT_CLOCK_OFF, sdout_base + S5P_SDO_CLKCON);

	timeout = jiffies + HZ * 2;

	while (!(readl(sdout_base + S5P_SDO_CLKCON) &
		SDO_TVOUT_CLK_DOWN_RDY)) {

		j = jiffies;

		if (j > timeout) {
			SDPRINTK("Stopping tv encoder clock time-out!!\n");
			break;
		}

		msleep(1);
	}

	SDPRINTK(" 0x%x)\n\r", readl(sdout_base + S5P_SDO_CLKCON));
}
コード例 #7
0
/*
/ stop  - stop functions are only called under running SDOUT
*/
void __s5p_sdout_stop(void)
{
	SDPRINTK("()\n\r");

	writel(SDO_TVOUT_CLOCK_OFF, sdout_base + S5P_SDO_CLKCON);

	SDPRINTK(" 0x%x)\n\r", readl(sdout_base + S5P_SDO_CLKCON));
}
コード例 #8
0
void __s5p_sdout_clear_interrupt_pending(void)
{
	SDPRINTK("0x%x\n\r", readl(sdout_base + S5P_SDO_IRQ));

	writel(readl(sdout_base + S5P_SDO_IRQ) | SDO_VSYNC_IRQ_PEND, 
		sdout_base + S5P_SDO_IRQ);

	SDPRINTK("0x%x\n\r", readl(sdout_base + S5P_SDO_IRQ));
}
コード例 #9
0
void __s5p_sdout_init_closed_caption(u32 display_cc, u32 non_display_cc)
{
	SDPRINTK("%d,%d\n\r", display_cc, non_display_cc);

	writel(SDO_DISPLAY_CC_CAPTION(display_cc) | SDO_NON_DISPLAY_CC_CAPTION(non_display_cc),
	       sdout_base + S5P_SDO_ARMCC);

	SDPRINTK("0x%x\n\r", readl(sdout_base + S5P_SDO_ARMCC));
}
コード例 #10
0
void	__s5p_sdout_init_rgb_color_compensation(u32 max_rgbcube,
						   u32 min_rgbcube)
{
	SDPRINTK("0x%08x,0x%08x\n\r", max_rgbcube, min_rgbcube);

	writel(SDO_MAX_RGB_CUBE(max_rgbcube) | SDO_MIN_RGB_CUBE(min_rgbcube),
	       sdout_base + S5P_SDO_RGB_CC);

	SDPRINTK("0x%08x)\n\r", readl(sdout_base + S5P_SDO_RGB_CC));
}
コード例 #11
0
void __s5p_sdout_init_delay(u32 delay_y,
			u32 offset_video_start,
			u32 offset_video_end)
{
	SDPRINTK("%d,%d,%d\n\r", delay_y, offset_video_start, offset_video_end);

	writel(SDO_DELAY_YTOC(delay_y) | SDO_ACTIVE_START_OFFSET(offset_video_start) |
	       SDO_ACTIVE_END_OFFSET(offset_video_end),	sdout_base + S5P_SDO_YCDELAY);

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_YCDELAY));
}
コード例 #12
0
void __s5p_sdout_init_schlock(bool color_sucarrier_pha_adj)
{
	SDPRINTK("%d\n\r", color_sucarrier_pha_adj);

	if (color_sucarrier_pha_adj) {
		writel(SDO_COLOR_SC_PHASE_ADJ, sdout_base + S5P_SDO_SCHLOCK);
	} else {
		writel(SDO_COLOR_SC_PHASE_NOADJ, sdout_base + S5P_SDO_SCHLOCK);
	}

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_SCHLOCK));
}
コード例 #13
0
void __s5p_sdout_init_svideo_color_compensation(u32 y_top,
					u32 y_bottom,
					u32 y_c_cylinder)
{
	SDPRINTK(" %d,%d,%d)\n\r", y_top, y_bottom, y_c_cylinder);

	writel(SDO_Y_TOP_YC_CYLINDER(y_top) | SDO_Y_BOTOM_YC_CYLINDER(y_bottom),
	       sdout_base + S5P_SDO_YC_CC_Y);
	writel(SDO_RADIUS_YC_CYLINDER(y_c_cylinder), sdout_base + S5P_SDO_YC_CC_C);

	SDPRINTK("0x%08x,0x%08x)\n\r", readl(sdout_base + S5P_SDO_YC_CC_Y), 
		readl(sdout_base + S5P_SDO_YC_CC_C));
}
コード例 #14
0
void __s5p_sdout_set_interrupt_enable(bool vsync_intr_en)
{
	SDPRINTK("%d)\n\r", vsync_intr_en);

	if (vsync_intr_en)
		writel(readl(sdout_base + S5P_SDO_IRQMASK) & ~SDO_VSYNC_IRQ_DISABLE, 
			sdout_base + S5P_SDO_IRQMASK);
	else
		writel(readl(sdout_base + S5P_SDO_IRQMASK) | SDO_VSYNC_IRQ_DISABLE, 
			sdout_base + S5P_SDO_IRQMASK);

	SDPRINTK("0x%x)\n\r", readl(sdout_base + S5P_SDO_IRQMASK));
}
コード例 #15
0
/*
* reset
*  - reset function
*/
void __s5p_sdout_sw_reset(bool active)
{
	SDPRINTK("%d\n\r", active);

	if (active)
		writel(readl(sdout_base + S5P_SDO_CLKCON) | SDO_TVOUT_SW_RESET, 
			sdout_base + S5P_SDO_CLKCON);
	else
		writel(readl(sdout_base + S5P_SDO_CLKCON) & ~SDO_TVOUT_SW_RESET, 
			sdout_base + S5P_SDO_CLKCON);

	SDPRINTK(" 0x%x\n\r", readl(sdout_base + S5P_SDO_CLKCON));
}
コード例 #16
0
void __s5p_sdout_init_component_porch(u32 back_525,
					u32 front_525,
					u32 back_625,
					u32 front_625)
{
	SDPRINTK(" %d,%d,%d,%d)\n\r", back_525, front_525, back_625, front_625);

	writel(SDO_COMPONENT_525_BP(back_525) | SDO_COMPONENT_525_FP(front_525),
	       sdout_base + S5P_SDO_CSC_525_PORCH);
	writel(SDO_COMPONENT_625_BP(back_625) | SDO_COMPONENT_625_FP(front_625),
	       sdout_base + S5P_SDO_CSC_625_PORCH);

	SDPRINTK(" 0x%08x,0x%08x)\n\r", readl(sdout_base + S5P_SDO_CSC_525_PORCH), 
		readl(sdout_base + S5P_SDO_CSC_625_PORCH));
}
コード例 #17
0
bool __s5p_sdout_get_interrupt_pending(void)
{
	SDPRINTK(" 0x%x\n\r", readl(sdout_base + S5P_SDO_IRQ));

	return (readl(sdout_base + S5P_SDO_IRQ) |
		SDO_VSYNC_IRQ_PEND) ? 1 : 0;
}
コード例 #18
0
void __s5p_sdout_init_color_compensaton_onoff(bool bright_hue_saturation_adj,
					bool y_ppr_color_compensation,
					bool rgcolor_compensation,
					bool y_c_color_compensation,
					bool y_cvbs_color_compensation)
{
	u32 temp_reg = 0;

	SDPRINTK("%d,%d,%d,%d,%d)\n\r", bright_hue_saturation_adj, 
		y_ppr_color_compensation,rgcolor_compensation,
		y_c_color_compensation, y_cvbs_color_compensation);

	if (bright_hue_saturation_adj) {
		temp_reg &= ~SDO_COMPONENT_BHS_ADJ_OFF;
	} else {
		temp_reg |= SDO_COMPONENT_BHS_ADJ_OFF;
	}

	if (y_ppr_color_compensation) {
		temp_reg &= ~SDO_COMPONENT_YPBPR_COMP_OFF;
	} else {
		temp_reg |= SDO_COMPONENT_YPBPR_COMP_OFF;
	}

	if (rgcolor_compensation) {
		temp_reg &= ~SDO_COMPONENT_RGB_COMP_OFF;
	} else {
		temp_reg |= SDO_COMPONENT_RGB_COMP_OFF;
	}

	if (y_c_color_compensation) {
		temp_reg &= ~SDO_COMPONENT_YC_COMP_OFF;
	} else {
		temp_reg |= SDO_COMPONENT_YC_COMP_OFF;
	}

	if (y_cvbs_color_compensation) {
		temp_reg &= ~SDO_COMPONENT_CVBS_COMP_OFF;
	} else {
		temp_reg |= SDO_COMPONENT_CVBS_COMP_OFF;
	}

	writel(temp_reg, sdout_base + S5P_SDO_CCCON);

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_CCCON));
}
コード例 #19
0
void __s5p_sdout_init_cvbs_color_compensation(u32 y_lower_mid,
					u32 y_bottom,
					u32 y_top,
					u32 y_upper_mid,
					u32 radius)
{
	SDPRINTK("%d,%d,%d,%d,%d\n\r", y_lower_mid, y_bottom, y_top, y_upper_mid, radius);

	writel(SDO_Y_LOWER_MID_CVBS_CORN(y_lower_mid) | SDO_Y_BOTTOM_CVBS_CORN(y_bottom),
	       sdout_base + S5P_SDO_CVBS_CC_Y1);
	writel(SDO_Y_TOP_CVBS_CORN(y_top) | SDO_Y_UPPER_MID_CVBS_CORN(y_upper_mid),
	       sdout_base + S5P_SDO_CVBS_CC_Y2);
	writel(SDO_RADIUS_CVBS_CORN(radius), sdout_base + S5P_SDO_CVBS_CC_C);

	SDPRINTK("0x%08x,0x%08x,0x%08x)\n\r", 
		readl(sdout_base + S5P_SDO_CVBS_CC_Y1),
		readl(sdout_base + S5P_SDO_CVBS_CC_Y2), 
		readl(sdout_base + S5P_SDO_CVBS_CC_C));
}
コード例 #20
0
enum s5p_tv_sd_err __s5p_sdout_init_dac_power_onoff(
	enum s5p_sd_channel_sel channel, bool dac_on)
{
	u32 temp_on_off;

	SDPRINTK("%d, %d)\n\r", channel, dac_on);

	switch (channel) {

	case SDOUT_CHANNEL_0:
		temp_on_off = SDO_POWER_ON_DAC0;
		break;

	case SDOUT_CHANNEL_1:
		temp_on_off = SDO_POWER_ON_DAC1;
		break;

	case SDOUT_CHANNEL_2:
		temp_on_off = SDO_POWER_ON_DAC2;
		break;

	default:
		SDPRINTK("invalid channel parameter(%d)\n\r", channel);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	if (dac_on)
		writel(readl(sdout_base + S5P_SDO_DAC) | temp_on_off,
			sdout_base + S5P_SDO_DAC);
	else
		writel(readl(sdout_base + S5P_SDO_DAC) & ~temp_on_off,
			sdout_base + S5P_SDO_DAC);


	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_DAC));

	return SDOUT_NO_ERROR;
}
コード例 #21
0
void __s5p_sdout_init_brightness_hue_saturation(u32 gain_brightness,
					u32 offset_brightness,
					u32 gain0_cb_hue_saturation,
					u32 gain1_cb_hue_saturation,
					u32 gain0_cr_hue_saturation,
					u32 gain1_cr_hue_saturation,
					u32 offset_cb_hue_saturation,
					u32 offset_cr_hue_saturation)
{
	SDPRINTK(" %d,%d,%d,%d,%d,%d,%d,%d)\n\r", gain_brightness, 
		offset_brightness,gain0_cb_hue_saturation,
		gain1_cb_hue_saturation,gain0_cr_hue_saturation,
		gain1_cr_hue_saturation, offset_cb_hue_saturation, 
		offset_cr_hue_saturation);

	writel(SDO_BRIGHTNESS_GAIN(gain_brightness) | 
		SDO_BRIGHTNESS_OFFSET(offset_brightness),
		sdout_base + S5P_SDO_YSCALE);
	
	writel(SDO_HS_CB_GAIN0(gain0_cb_hue_saturation) | 
		SDO_HS_CB_GAIN1(gain1_cb_hue_saturation),
		sdout_base + S5P_SDO_CBSCALE);
	
	writel(SDO_HS_CR_GAIN0(gain0_cr_hue_saturation) |
		SDO_HS_CR_GAIN1(gain1_cr_hue_saturation),
		sdout_base + S5P_SDO_CRSCALE);
	
	writel(SDO_HS_CR_OFFSET(offset_cr_hue_saturation) | 
		SDO_HS_CB_OFFSET(offset_cb_hue_saturation),
		sdout_base + S5P_SDO_CB_CR_OFFSET);

	SDPRINTK("0x%08x,0x%08x,0x%08x,0x%08x)\n\r", 
		readl(sdout_base + S5P_SDO_YSCALE), 
		readl(sdout_base + S5P_SDO_CBSCALE),
		readl(sdout_base + S5P_SDO_CRSCALE), 
		readl(sdout_base + S5P_SDO_CB_CR_OFFSET));
}
コード例 #22
0
s5p_tv_sd_err __s5p_sdout_init_cgmsa525_data(s5p_sd_525_copy_permit copy_permit,
					s5p_sd_525_mv_psp mv_psp,
					s5p_sd_525_copy_info copy_info,
					bool analog_on,
					s5p_sd_525_aspect_ratio display_ratio)
{
	u32 temp_reg = 0;

	SDPRINTK("%d,%d,%d,%d)\n\r", copy_permit, mv_psp, copy_info, display_ratio);

	switch (copy_permit) {

	case SDO_525_COPY_PERMIT:
		temp_reg = SDO_WORD2_CGMS525_COPY_PERMIT;
		break;

	case SDO_525_ONECOPY_PERMIT:
		temp_reg = SDO_WORD2_CGMS525_ONECOPY_PERMIT;
		break;

	case SDO_525_NOCOPY_PERMIT:
		temp_reg = SDO_WORD2_CGMS525_NOCOPY_PERMIT;
		break;

	default:
		SDPRINTK("invalid copy_permit parameter(%d)\n\r", copy_permit);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (mv_psp) {

	case SDO_525_MV_PSP_OFF:
		temp_reg |= SDO_WORD2_CGMS525_MV_PSP_OFF;
		break;

	case SDO_525_MV_PSP_ON_2LINE_BURST:
		temp_reg |= SDO_WORD2_CGMS525_MV_PSP_ON_2LINE_BURST;
		break;

	case SDO_525_MV_PSP_ON_BURST_OFF:
		temp_reg |= SDO_WORD2_CGMS525_MV_PSP_ON_BURST_OFF;
		break;

	case SDO_525_MV_PSP_ON_4LINE_BURST:
		temp_reg |= SDO_WORD2_CGMS525_MV_PSP_ON_4LINE_BURST;
		break;

	default:
		SDPRINTK(" invalid mv_psp parameter(%d)\n\r", mv_psp);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (copy_info) {

	case SDO_525_COPY_INFO:
		temp_reg |= SDO_WORD1_CGMS525_COPY_INFO;
		break;

	case SDO_525_DEFAULT:
		temp_reg |= SDO_WORD1_CGMS525_DEFAULT;
		break;

	default:
		SDPRINTK("invalid copy_info parameter(%d)\n\r", copy_info);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	if (analog_on) {
		temp_reg |= SDO_WORD2_CGMS525_ANALOG_ON;
	} else {
		temp_reg |= SDO_WORD2_CGMS525_ANALOG_OFF;
	}

	switch (display_ratio) {

	case SDO_525_COPY_PERMIT:
		temp_reg |= SDO_WORD0_CGMS525_4_3_NORMAL;
		break;

	case SDO_525_ONECOPY_PERMIT:
		temp_reg |= SDO_WORD0_CGMS525_16_9_ANAMORPIC;
		break;

	case SDO_525_NOCOPY_PERMIT:
		temp_reg |= SDO_WORD0_CGMS525_4_3_LETTERBOX;
		break;

	default:
		SDPRINTK(" invalid display_ratio parameter(%d)\n\r", display_ratio);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	writel(temp_reg |	SDO_CRC_CGMS525(__s5p_sdout_init_wss_cgms_crc(temp_reg)),

	       sdout_base + S5P_SDO_CGMS525);

	SDPRINTK(" 0x%08x)\n\r", readl(sdout_base + S5P_SDO_CGMS525));

	return SDOUT_NO_ERROR;
}
コード例 #23
0
s5p_tv_sd_err __s5p_sdout_init_wss625_data(bool surround_sound,
					 bool copyright,
					 bool copy_protection,
					 bool text_subtitles,
					 s5p_sd_625_subtitles open_subtitles,
					 s5p_sd_625_camera_film camera_film,
					 s5p_sd_625_color_encoding color_encoding,
					 bool helper_signal,
					 s5p_sd_625_aspect_ratio display_ratio)
{
	u32 temp_reg = 0;

	SDPRINTK("%d,%d,%d,%d,%d,%d,%d,%d,%d\n\r",
		 surround_sound, copyright, copy_protection, 
		 text_subtitles, open_subtitles, camera_film, 
		 color_encoding, helper_signal, display_ratio);

	if (surround_sound) {
		temp_reg = SDO_WSS625_SURROUND_SOUND_ENABLE;
	} else {
		temp_reg = SDO_WSS625_SURROUND_SOUND_DISABLE;
	}

	if (copyright) {
		temp_reg |= SDO_WSS625_COPYRIGHT;
	} else {
		temp_reg |= SDO_WSS625_NO_COPYRIGHT;
	}

	if (copy_protection) {
		temp_reg |= SDO_WSS625_COPY_RESTRICTED;
	} else {
		temp_reg |= SDO_WSS625_COPY_NOT_RESTRICTED;
	}

	if (text_subtitles) {
		temp_reg |= SDO_WSS625_TELETEXT_SUBTITLES;
	} else {
		temp_reg |= SDO_WSS625_TELETEXT_NO_SUBTITLES;
	}

	switch (open_subtitles) {

	case SDO_625_NO_OPEN_SUBTITLES:
		temp_reg |= SDO_WSS625_NO_OPEN_SUBTITLES;
		break;

	case SDO_625_INACT_OPEN_SUBTITLES:
		temp_reg |= SDO_WSS625_INACT_OPEN_SUBTITLES;
		break;

	case SDO_625_OUTACT_OPEN_SUBTITLES:
		temp_reg |= SDO_WSS625_OUTACT_OPEN_SUBTITLES;
		break;

	default:
		SDPRINTK(" invalid open_subtitles parameter(%d)\n\r", open_subtitles);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (camera_film) {

	case SDO_625_CAMERA:
		temp_reg |= SDO_WSS625_CAMERA;
		break;

	case SDO_625_FILM:
		temp_reg |= SDO_WSS625_FILM;
		break;

	default:
		SDPRINTK("invalid camera_film parameter(%d)\n\r", camera_film);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (color_encoding) {

	case SDO_625_NORMAL_PAL:
		temp_reg |= SDO_WSS625_NORMAL_PAL;
		break;

	case SDO_625_MOTION_ADAPTIVE_COLORPLUS:
		temp_reg |= SDO_WSS625_MOTION_ADAPTIVE_COLORPLUS;
		break;

	default:
		SDPRINTK("invalid color_encoding parameter(%d)\n\r", color_encoding);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	if (helper_signal) {
		temp_reg |= SDO_WSS625_HELPER_SIG;
	} else {
		temp_reg |= SDO_WSS625_HELPER_NO_SIG;
	}

	switch (display_ratio) {

	case SDO_625_4_3_FULL_576:
		temp_reg |= SDO_WSS625_4_3_FULL_576;
		break;

	case SDO_625_14_9_LETTERBOX_CENTER_504:
		temp_reg |= SDO_WSS625_14_9_LETTERBOX_CENTER_504;
		break;

	case SDO_625_14_9_LETTERBOX_TOP_504:
		temp_reg |= SDO_WSS625_14_9_LETTERBOX_TOP_504;
		break;

	case SDO_625_16_9_LETTERBOX_CENTER_430:
		temp_reg |= SDO_WSS625_16_9_LETTERBOX_CENTER_430;
		break;

	case SDO_625_16_9_LETTERBOX_TOP_430:
		temp_reg |= SDO_WSS625_16_9_LETTERBOX_TOP_430;
		break;

	case SDO_625_16_9_LETTERBOX_CENTER:
		temp_reg |= SDO_WSS625_16_9_LETTERBOX_CENTER;
		break;

	case SDO_625_14_9_FULL_CENTER_576:
		temp_reg |= SDO_WSS625_14_9_FULL_CENTER_576;
		break;

	case SDO_625_16_9_ANAMORPIC_576:
		temp_reg |= SDO_WSS625_16_9_ANAMORPIC_576;
		break;

	default:
		SDPRINTK("invalid display_ratio parameter(%d)\n\r", display_ratio);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	writel(temp_reg, sdout_base + S5P_SDO_WSS625);

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_WSS625));

	return SDOUT_NO_ERROR;
}
コード例 #24
0
static s5p_tv_sd_err __s5p_sdout_init_antialias_filter_coeff_default(s5p_sd_level composite_level,
						s5p_sd_vsync_ratio composite_ratio,
						s5p_tv_o_mode out_mode)
{
	SDPRINTK("%d,%d,%d\n\r", composite_level, composite_ratio, out_mode);

	switch (composite_level) {

	case S5P_TV_SD_LEVEL_0IRE:

		switch (composite_ratio) {

		case SDOUT_VTOS_RATIO_10_4:

			switch (out_mode) {

			case TVOUT_OUTPUT_COMPOSITE:

			case TVOUT_OUTPUT_SVIDEO:
				writel(0x00000000 , sdout_base + S5P_SDO_Y3);
				writel(0x00000000 , sdout_base + S5P_SDO_Y4);
				writel(0x00000000 , sdout_base + S5P_SDO_Y5);
				writel(0x00000000 , sdout_base + S5P_SDO_Y6);
				writel(0x00000000 , sdout_base + S5P_SDO_Y7);
				writel(0x00000000 , sdout_base + S5P_SDO_Y8);
				writel(0x00000000 , sdout_base + S5P_SDO_Y9);
				writel(0x00000000 , sdout_base + S5P_SDO_Y10);
				writel(0x0000029a , sdout_base + S5P_SDO_Y11);
				writel(0x00000000 , sdout_base + S5P_SDO_CB0);
				writel(0x00000000 , sdout_base + S5P_SDO_CB1);
				writel(0x00000000 , sdout_base + S5P_SDO_CB2);
				writel(0x00000000 , sdout_base + S5P_SDO_CB3);
				writel(0x00000000 , sdout_base + S5P_SDO_CB4);
				writel(0x00000001 , sdout_base + S5P_SDO_CB5);
				writel(0x00000007 , sdout_base + S5P_SDO_CB6);
				writel(0x00000015 , sdout_base + S5P_SDO_CB7);
				writel(0x0000002b , sdout_base + S5P_SDO_CB8);
				writel(0x00000045 , sdout_base + S5P_SDO_CB9);
				writel(0x00000059 , sdout_base + S5P_SDO_CB10);
				writel(0x00000061 , sdout_base + S5P_SDO_CB11);
				writel(0x00000000 , sdout_base + S5P_SDO_CR1);
				writel(0x00000000 , sdout_base + S5P_SDO_CR2);
				writel(0x00000000 , sdout_base + S5P_SDO_CR3);
				writel(0x00000000 , sdout_base + S5P_SDO_CR4);
				writel(0x00000002 , sdout_base + S5P_SDO_CR5);
				writel(0x0000000a , sdout_base + S5P_SDO_CR6);
				writel(0x0000001e , sdout_base + S5P_SDO_CR7);
				writel(0x0000003d , sdout_base + S5P_SDO_CR8);
				writel(0x00000061 , sdout_base + S5P_SDO_CR9);
				writel(0x0000007a , sdout_base + S5P_SDO_CR10);
				writel(0x0000008f , sdout_base + S5P_SDO_CR11);
				break;

			case TVOUT_OUTPUT_COMPONENT_YPBPR_INERLACED:

			case TVOUT_OUTPUT_COMPONENT_YPBPR_PROGRESSIVE:

			case TVOUT_OUTPUT_COMPONENT_RGB_PROGRESSIVE:
				writel(0x00000000, sdout_base + S5P_SDO_Y0);
				writel(0x00000000, sdout_base + S5P_SDO_Y1);
				writel(0x00000000, sdout_base + S5P_SDO_Y2);
				writel(0x00000000, sdout_base + S5P_SDO_Y3);
				writel(0x00000000, sdout_base + S5P_SDO_Y4);
				writel(0x00000000, sdout_base + S5P_SDO_Y5);
				writel(0x00000000, sdout_base + S5P_SDO_Y6);
				writel(0x00000000, sdout_base + S5P_SDO_Y7);
				writel(0x00000000, sdout_base + S5P_SDO_Y8);
				writel(0x00000000, sdout_base + S5P_SDO_Y9);
				writel(0x00000000, sdout_base + S5P_SDO_Y10);
				writel(0x0000029a, sdout_base + S5P_SDO_Y11);
				writel(0x00000000, sdout_base + S5P_SDO_CB0);
				writel(0x00000000, sdout_base + S5P_SDO_CB1);
				writel(0x00000000, sdout_base + S5P_SDO_CB2);
				writel(0x00000000, sdout_base + S5P_SDO_CB3);
				writel(0x00000000, sdout_base + S5P_SDO_CB4);
				writel(0x00000001, sdout_base + S5P_SDO_CB5);
				writel(0x00000007, sdout_base + S5P_SDO_CB6);
				writel(0x00000015, sdout_base + S5P_SDO_CB7);
				writel(0x0000002b, sdout_base + S5P_SDO_CB8);
				writel(0x00000045, sdout_base + S5P_SDO_CB9);
				writel(0x00000059, sdout_base + S5P_SDO_CB10);
				writel(0x00000061, sdout_base + S5P_SDO_CB11);
				writel(0x00000000, sdout_base + S5P_SDO_CR1);
				writel(0x00000000, sdout_base + S5P_SDO_CR2);
				writel(0x00000000, sdout_base + S5P_SDO_CR3);
				writel(0x00000000, sdout_base + S5P_SDO_CR4);
				writel(0x00000002, sdout_base + S5P_SDO_CR5);
				writel(0x0000000a, sdout_base + S5P_SDO_CR6);
				writel(0x0000001e, sdout_base + S5P_SDO_CR7);
				writel(0x0000003d, sdout_base + S5P_SDO_CR8);
				writel(0x00000061, sdout_base + S5P_SDO_CR9);
				writel(0x0000007a, sdout_base + S5P_SDO_CR10);
				writel(0x0000008f, sdout_base + S5P_SDO_CR11);
				break;

			default:
				SDPRINTK("invalid out_mode parameter(%d)\n\r", out_mode);
				return S5P_TV_SD_ERR_INVALID_PARAM;
				break;
			}

			break;

		case SDOUT_VTOS_RATIO_7_3:
			writel(0x00000000, sdout_base + S5P_SDO_Y0);
			writel(0x00000000, sdout_base + S5P_SDO_Y1);
			writel(0x00000000, sdout_base + S5P_SDO_Y2);
			writel(0x00000000, sdout_base + S5P_SDO_Y3);
			writel(0x00000000, sdout_base + S5P_SDO_Y4);
			writel(0x00000000, sdout_base + S5P_SDO_Y5);
			writel(0x00000000, sdout_base + S5P_SDO_Y6);
			writel(0x00000000, sdout_base + S5P_SDO_Y7);
			writel(0x00000000, sdout_base + S5P_SDO_Y8);
			writel(0x00000000, sdout_base + S5P_SDO_Y9);
			writel(0x00000000, sdout_base + S5P_SDO_Y10);
			writel(0x00000281, sdout_base + S5P_SDO_Y11);
			writel(0x00000000, sdout_base + S5P_SDO_CB0);
			writel(0x00000000, sdout_base + S5P_SDO_CB1);
			writel(0x00000000, sdout_base + S5P_SDO_CB2);
			writel(0x00000000, sdout_base + S5P_SDO_CB3);
			writel(0x00000000, sdout_base + S5P_SDO_CB4);
			writel(0x00000001, sdout_base + S5P_SDO_CB5);
			writel(0x00000007, sdout_base + S5P_SDO_CB6);
			writel(0x00000015, sdout_base + S5P_SDO_CB7);
			writel(0x0000002a, sdout_base + S5P_SDO_CB8);
			writel(0x00000044, sdout_base + S5P_SDO_CB9);
			writel(0x00000057, sdout_base + S5P_SDO_CB10);
			writel(0x0000005f, sdout_base + S5P_SDO_CB11);
			writel(0x00000000, sdout_base + S5P_SDO_CR1);
			writel(0x00000000, sdout_base + S5P_SDO_CR2);
			writel(0x00000000, sdout_base + S5P_SDO_CR3);
			writel(0x00000000, sdout_base + S5P_SDO_CR4);
			writel(0x00000002, sdout_base + S5P_SDO_CR5);
			writel(0x0000000a, sdout_base + S5P_SDO_CR6);
			writel(0x0000001d, sdout_base + S5P_SDO_CR7);
			writel(0x0000003c, sdout_base + S5P_SDO_CR8);
			writel(0x0000005f, sdout_base + S5P_SDO_CR9);
			writel(0x0000007b, sdout_base + S5P_SDO_CR10);
			writel(0x00000086, sdout_base + S5P_SDO_CR11);
			break;

		default:
			SDPRINTK("invalid composite_ratio parameter(%d)\n\r", composite_ratio);
			return S5P_TV_SD_ERR_INVALID_PARAM;
			break;
		}

		break;

	case S5P_TV_SD_LEVEL_75IRE:

		switch (composite_ratio) {

		case SDOUT_VTOS_RATIO_10_4:
			writel(0x00000000, sdout_base + S5P_SDO_Y0);
			writel(0x00000000, sdout_base + S5P_SDO_Y1);
			writel(0x00000000, sdout_base + S5P_SDO_Y2);
			writel(0x00000000, sdout_base + S5P_SDO_Y3);
			writel(0x00000000, sdout_base + S5P_SDO_Y4);
			writel(0x00000000, sdout_base + S5P_SDO_Y5);
			writel(0x00000000, sdout_base + S5P_SDO_Y6);
			writel(0x00000000, sdout_base + S5P_SDO_Y7);
			writel(0x00000000, sdout_base + S5P_SDO_Y8);
			writel(0x00000000, sdout_base + S5P_SDO_Y9);
			writel(0x00000000, sdout_base + S5P_SDO_Y10);
			writel(0x0000025d, sdout_base + S5P_SDO_Y11);
			writel(0x00000000, sdout_base + S5P_SDO_CB0);
			writel(0x00000000, sdout_base + S5P_SDO_CB1);
			writel(0x00000000, sdout_base + S5P_SDO_CB2);
			writel(0x00000000, sdout_base + S5P_SDO_CB3);
			writel(0x00000000, sdout_base + S5P_SDO_CB4);
			writel(0x00000001, sdout_base + S5P_SDO_CB5);
			writel(0x00000007, sdout_base + S5P_SDO_CB6);
			writel(0x00000014, sdout_base + S5P_SDO_CB7);
			writel(0x00000028, sdout_base + S5P_SDO_CB8);
			writel(0x0000003f, sdout_base + S5P_SDO_CB9);
			writel(0x00000052, sdout_base + S5P_SDO_CB10);
			writel(0x0000005a, sdout_base + S5P_SDO_CB11);
			writel(0x00000000, sdout_base + S5P_SDO_CR1);
			writel(0x00000000, sdout_base + S5P_SDO_CR2);
			writel(0x00000000, sdout_base + S5P_SDO_CR3);
			writel(0x00000000, sdout_base + S5P_SDO_CR4);
			writel(0x00000001, sdout_base + S5P_SDO_CR5);
			writel(0x00000009, sdout_base + S5P_SDO_CR6);
			writel(0x0000001c, sdout_base + S5P_SDO_CR7);
			writel(0x00000039, sdout_base + S5P_SDO_CR8);
			writel(0x0000005a, sdout_base + S5P_SDO_CR9);
			writel(0x00000074, sdout_base + S5P_SDO_CR10);
			writel(0x0000007e, sdout_base + S5P_SDO_CR11);
			break;

		case SDOUT_VTOS_RATIO_7_3:
			writel(0x00000000, sdout_base + S5P_SDO_Y0);
			writel(0x00000000, sdout_base + S5P_SDO_Y1);
			writel(0x00000000, sdout_base + S5P_SDO_Y2);
			writel(0x00000000, sdout_base + S5P_SDO_Y3);
			writel(0x00000000, sdout_base + S5P_SDO_Y4);
			writel(0x00000000, sdout_base + S5P_SDO_Y5);
			writel(0x00000000, sdout_base + S5P_SDO_Y6);
			writel(0x00000000, sdout_base + S5P_SDO_Y7);
			writel(0x00000000, sdout_base + S5P_SDO_Y8);
			writel(0x00000000, sdout_base + S5P_SDO_Y9);
			writel(0x00000000, sdout_base + S5P_SDO_Y10);
			writel(0x00000251, sdout_base + S5P_SDO_Y11);
			writel(0x00000000, sdout_base + S5P_SDO_CB0);
			writel(0x00000000, sdout_base + S5P_SDO_CB1);
			writel(0x00000000, sdout_base + S5P_SDO_CB2);
			writel(0x00000000, sdout_base + S5P_SDO_CB3);
			writel(0x00000000, sdout_base + S5P_SDO_CB4);
			writel(0x00000001, sdout_base + S5P_SDO_CB5);
			writel(0x00000006, sdout_base + S5P_SDO_CB6);
			writel(0x00000013, sdout_base + S5P_SDO_CB7);
			writel(0x00000028, sdout_base + S5P_SDO_CB8);
			writel(0x0000003f, sdout_base + S5P_SDO_CB9);
			writel(0x00000051, sdout_base + S5P_SDO_CB10);
			writel(0x00000056, sdout_base + S5P_SDO_CB11);
			writel(0x00000000, sdout_base + S5P_SDO_CR1);
			writel(0x00000000, sdout_base + S5P_SDO_CR2);
			writel(0x00000000, sdout_base + S5P_SDO_CR3);
			writel(0x00000000, sdout_base + S5P_SDO_CR4);
			writel(0x00000002, sdout_base + S5P_SDO_CR5);
			writel(0x00000005, sdout_base + S5P_SDO_CR6);
			writel(0x00000018, sdout_base + S5P_SDO_CR7);
			writel(0x00000037, sdout_base + S5P_SDO_CR8);
			writel(0x0000005A, sdout_base + S5P_SDO_CR9);
			writel(0x00000076, sdout_base + S5P_SDO_CR10);
			writel(0x0000007e, sdout_base + S5P_SDO_CR11);
			break;

		default:
			SDPRINTK("  invalid composite_ratio parameter(%d)\n\r", composite_ratio);
			return S5P_TV_SD_ERR_INVALID_PARAM;
			break;
		}

		break;

	default:
		SDPRINTK("  invalid composite_level parameter(%d)\n\r", composite_level);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	SDPRINTK("()\n\r");

	return SDOUT_NO_ERROR;

}
コード例 #25
0
/*
* initialization
*  - iniization functions are only called under stopping sdout
*/
s5p_tv_sd_err __s5p_sdout_init_display_mode(s5p_tv_disp_mode disp_mode,
					  s5p_tv_o_mode out_mode,
					  s5p_sd_order order)
{
	u32 temp_reg = 0;

	SDPRINTK(" %d,%d,%d\n\r", disp_mode, out_mode, order);

	switch (disp_mode) {

	case TVOUT_NTSC_M:
		temp_reg |= SDO_NTSC_M;
		__s5p_sdout_init_video_scale_cfg(S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3,S5P_TV_SD_LEVEL_75IRE, 
				SDOUT_VTOS_RATIO_10_4);
		
		__s5p_sdout_init_antialias_filter_coeff_default(S5P_TV_SD_LEVEL_75IRE,
							SDOUT_VTOS_RATIO_10_4,
							out_mode);
		break;

	case TVOUT_PAL_BDGHI:
		temp_reg |= SDO_PAL_BGHID;
		__s5p_sdout_init_video_scale_cfg(S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3,S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3);
		
		__s5p_sdout_init_antialias_filter_coeff_default(S5P_TV_SD_LEVEL_0IRE,
							SDOUT_VTOS_RATIO_7_3,
							out_mode);
		break;

	case TVOUT_PAL_M:
		temp_reg |= SDO_PAL_M;
		__s5p_sdout_init_video_scale_cfg(S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3,S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3);
		
		__s5p_sdout_init_antialias_filter_coeff_default(S5P_TV_SD_LEVEL_0IRE,
							SDOUT_VTOS_RATIO_7_3,
							out_mode);
		break;

	case TVOUT_PAL_N:
		temp_reg |= SDO_PAL_N;
		__s5p_sdout_init_video_scale_cfg(S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3,S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3);
		
		__s5p_sdout_init_antialias_filter_coeff_default(S5P_TV_SD_LEVEL_75IRE,
							SDOUT_VTOS_RATIO_10_4,
							out_mode);
		break;

	case TVOUT_PAL_NC:
		temp_reg |= SDO_PAL_NC;
		__s5p_sdout_init_video_scale_cfg(S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3,S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3);
		
		__s5p_sdout_init_antialias_filter_coeff_default(S5P_TV_SD_LEVEL_0IRE,
							SDOUT_VTOS_RATIO_7_3,
							out_mode);
		break;

	case TVOUT_PAL_60:
		temp_reg |= SDO_PAL_60;
		__s5p_sdout_init_video_scale_cfg(S5P_TV_SD_LEVEL_0IRE, 
				SDOUT_VTOS_RATIO_7_3,S5P_TV_SD_LEVEL_0IRE,
				SDOUT_VTOS_RATIO_7_3);
		__s5p_sdout_init_antialias_filter_coeff_default(S5P_TV_SD_LEVEL_0IRE,
							SDOUT_VTOS_RATIO_7_3,
							out_mode);
		break;

	case TVOUT_NTSC_443:
		temp_reg |= SDO_NTSC_443;
		__s5p_sdout_init_video_scale_cfg(S5P_TV_SD_LEVEL_0IRE,
				SDOUT_VTOS_RATIO_7_3,S5P_TV_SD_LEVEL_75IRE,
				SDOUT_VTOS_RATIO_10_4);
		__s5p_sdout_init_antialias_filter_coeff_default(S5P_TV_SD_LEVEL_75IRE,
							SDOUT_VTOS_RATIO_10_4,
							out_mode);
		break;

	default:
		SDPRINTK("invalid disp_mode parameter(%d)\n\r", disp_mode);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (out_mode) {

	case TVOUT_OUTPUT_COMPOSITE:

	case TVOUT_OUTPUT_SVIDEO:
		temp_reg |= SDO_COMPOSITE | SDO_INTERLACED;

		switch (order) {

		case S5P_TV_SD_O_ORDER_COMPOSITE_CVBS_Y_C:
			temp_reg |= SDO_DAC2_CVBS | SDO_DAC1_Y | SDO_DAC0_C;
			break;

		case S5P_TV_SD_O_ORDER_COMPOSITE_CVBS_C_Y:
			temp_reg |= SDO_DAC2_CVBS | SDO_DAC1_C | SDO_DAC0_Y;
			break;

		case S5P_TV_SD_O_ORDER_COMPOSITE_Y_C_CVBS:
			temp_reg |= SDO_DAC2_Y | SDO_DAC1_C | SDO_DAC0_CVBS;
			break;

		case S5P_TV_SD_O_ORDER_COMPOSITE_Y_CVBS_C:
			temp_reg |= SDO_DAC2_Y | SDO_DAC1_CVBS | SDO_DAC0_C;
			break;

		case S5P_TV_SD_O_ORDER_COMPOSITE_C_CVBS_Y:
			temp_reg |= SDO_DAC2_C | SDO_DAC1_CVBS | SDO_DAC0_Y;
			break;

		case S5P_TV_SD_O_ORDER_COMPOSITE_C_Y_CVBS:
			temp_reg |= SDO_DAC2_C | SDO_DAC1_Y | SDO_DAC0_CVBS;
			break;

		default:
			SDPRINTK(" invalid order parameter(%d)\n\r", order);
			return S5P_TV_SD_ERR_INVALID_PARAM;
			break;
		}

		break;

	case TVOUT_OUTPUT_COMPONENT_YPBPR_INERLACED:
		temp_reg |= SDO_COMPONENT | SDO_YPBPR | SDO_INTERLACED;

		switch (order) {

		case S5P_TV_SD_O_ORDER_COMPONENT_RGB_PRYPB:
			temp_reg |= SDO_DAC2_PR_R | SDO_DAC1_Y_G | SDO_DAC0_PB_B;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_RBG_PRPBY:
			temp_reg |= SDO_DAC2_PR_R | SDO_DAC1_PB_B | SDO_DAC0_Y_G;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_BGR_PBYPR:
			temp_reg |= SDO_DAC2_PB_B | SDO_DAC1_Y_G | SDO_DAC0_PR_R;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_BRG_PBPRY:
			temp_reg |= SDO_DAC2_PB_B | SDO_DAC1_PR_R | SDO_DAC0_Y_G;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_GRB_YPRPB:
			temp_reg |= SDO_DAC2_Y_G | SDO_DAC1_PR_R | SDO_DAC0_PB_B;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_GBR_YPBPR:
			temp_reg |= SDO_DAC2_Y_G | SDO_DAC1_PB_B | SDO_DAC0_PR_R;
			break;

		default:
			SDPRINTK(" invalid order parameter(%d)\n\r", order);
			return S5P_TV_SD_ERR_INVALID_PARAM;
			break;
		}

		break;

	case TVOUT_OUTPUT_COMPONENT_YPBPR_PROGRESSIVE:
		temp_reg |= SDO_COMPONENT | SDO_YPBPR | SDO_PROGRESSIVE;

		switch (order) {

		case S5P_TV_SD_O_ORDER_COMPONENT_RGB_PRYPB:
			temp_reg |= SDO_DAC2_PR_R | SDO_DAC1_Y_G | SDO_DAC0_PB_B;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_RBG_PRPBY:
			temp_reg |= SDO_DAC2_PR_R | SDO_DAC1_PB_B | SDO_DAC0_Y_G;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_BGR_PBYPR:
			temp_reg |= SDO_DAC2_PB_B | SDO_DAC1_Y_G | SDO_DAC0_PR_R;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_BRG_PBPRY:
			temp_reg |= SDO_DAC2_PB_B | SDO_DAC1_PR_R | SDO_DAC0_Y_G;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_GRB_YPRPB:
			temp_reg |= SDO_DAC2_Y_G | SDO_DAC1_PR_R | SDO_DAC0_PB_B;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_GBR_YPBPR:
			temp_reg |= SDO_DAC2_Y_G | SDO_DAC1_PB_B | SDO_DAC0_PR_R;
			break;

		default:
			SDPRINTK(" invalid order parameter(%d)\n\r", order);
			return S5P_TV_SD_ERR_INVALID_PARAM;
			break;
		}

		break;

	case TVOUT_OUTPUT_COMPONENT_RGB_PROGRESSIVE:
		temp_reg |= SDO_COMPONENT | SDO_RGB | SDO_PROGRESSIVE;

		switch (order) {

		case S5P_TV_SD_O_ORDER_COMPONENT_RGB_PRYPB:
			temp_reg |= SDO_DAC2_PR_R | SDO_DAC1_Y_G | SDO_DAC0_PB_B;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_RBG_PRPBY:
			temp_reg |= SDO_DAC2_PR_R | SDO_DAC1_PB_B | SDO_DAC0_Y_G;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_BGR_PBYPR:
			temp_reg |= SDO_DAC2_PB_B | SDO_DAC1_Y_G | SDO_DAC0_PR_R;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_BRG_PBPRY:
			temp_reg |= SDO_DAC2_PB_B | SDO_DAC1_PR_R | SDO_DAC0_Y_G;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_GRB_YPRPB:
			temp_reg |= SDO_DAC2_Y_G | SDO_DAC1_PR_R | SDO_DAC0_PB_B;
			break;

		case S5P_TV_SD_O_ORDER_COMPONENT_GBR_YPBPR:
			temp_reg |= SDO_DAC2_Y_G | SDO_DAC1_PB_B | SDO_DAC0_PR_R;
			break;

		default:
			SDPRINTK("invalid order parameter(%d)\n\r", order);
			return S5P_TV_SD_ERR_INVALID_PARAM;
			break;
		}

		break;

	default:
		SDPRINTK(" invalid out_mode parameter(%d)\n\r", out_mode);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	__s5p_sdout_init_oversampling_filter_coeff_default(out_mode);

	writel(temp_reg, sdout_base + S5P_SDO_CONFIG);

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_CONFIG));

	return SDOUT_NO_ERROR;
}
コード例 #26
0
s5p_tv_sd_err __s5p_sdout_init_vesa_rgb_sync(s5p_sd_vesa_rgb_sync_type sync_type,
					s5p_tv_active_polarity v_sync_active,
					s5p_tv_active_polarity h_sync_active)
{
	u32 temp_reg = 0;

	SDPRINTK("%d,%d,%d\n\r", sync_type, v_sync_active, h_sync_active);

	switch (sync_type) {

	case SDOUT_VESA_RGB_SYNC_COMPOSITE:
		temp_reg |= SDO_RGB_SYNC_COMPOSITE;
		break;

	case SDOUT_VESA_RGB_SYNC_SEPARATE:
		temp_reg |= SDO_RGB_SYNC_SEPERATE;
		break;

	default:
		SDPRINTK(" invalid sync_type parameter(%d)\n\r", sync_type);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (v_sync_active) {

	case TVOUT_POL_ACTIVE_LOW:
		temp_reg |= SDO_RGB_VSYNC_LOW_ACT;
		break;

	case TVOUT_POL_ACTIVE_HIGH:
		temp_reg |= SDO_RGB_VSYNC_HIGH_ACT;
		break;

	default:
		SDPRINTK(" invalid v_sync_active parameter(%d)\n\r", v_sync_active);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (h_sync_active) {

	case TVOUT_POL_ACTIVE_LOW:
		temp_reg |= SDO_RGB_HSYNC_LOW_ACT;
		break;

	case TVOUT_POL_ACTIVE_HIGH:
		temp_reg |= SDO_RGB_HSYNC_HIGH_ACT;
		break;

	default:
		SDPRINTK(" invalid h_sync_active parameter(%d)\n\r", h_sync_active);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	writel(temp_reg, sdout_base + S5P_SDO_RGBSYNC);

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_RGBSYNC));

	return SDOUT_NO_ERROR;
}
コード例 #27
0
s5p_tv_sd_err __s5p_sdout_init_vbi(bool wss_cvbs,
				s5p_sd_closed_caption_type caption_cvbs,
				bool wss_y_sideo,
				s5p_sd_closed_caption_type caption_y_sideo,
				bool cgmsa_rgb,
				bool wss_rgb,
				s5p_sd_closed_caption_type caption_rgb,
				bool cgmsa_y_ppr,
				bool wss_y_ppr,
				s5p_sd_closed_caption_type caption_y_ppr)
{
	u32 temp_reg = 0;

	SDPRINTK(" %d,%d,%d,%d,%d,%d,%d,%d,%d,%d\n\r", wss_cvbs, caption_cvbs, 
		wss_y_sideo,caption_y_sideo,cgmsa_rgb,wss_rgb,caption_rgb,
		cgmsa_y_ppr, wss_y_ppr, caption_y_ppr);

	if (wss_cvbs) {
		temp_reg = SDO_CVBS_WSS_INS;
	} else {
		temp_reg = SDO_CVBS_NO_WSS;
	}

	switch (caption_cvbs) {

	case SDOUT_NO_INS:
		temp_reg |= SDO_CVBS_NO_CLOSED_CAPTION;
		break;

	case SDOUT_INS_1:
		temp_reg |= SDO_CVBS_21H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_2:
		temp_reg |= SDO_CVBS_21H_284H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_OTHERS:
		temp_reg |= SDO_CVBS_USE_OTHERS;
		break;

	default:
		SDPRINTK(" invalid caption_cvbs parameter(%d)\n\r", 
			caption_cvbs);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	if (wss_y_sideo) {
		temp_reg |= SDO_SVIDEO_WSS_INS;
	} else {
		temp_reg |= SDO_SVIDEO_NO_WSS;
	}

	switch (caption_y_sideo) {

	case SDOUT_NO_INS:
		temp_reg |= SDO_SVIDEO_NO_CLOSED_CAPTION;
		break;

	case SDOUT_INS_1:
		temp_reg |= SDO_SVIDEO_21H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_2:
		temp_reg |= SDO_SVIDEO_21H_284H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_OTHERS:
		temp_reg |= SDO_SVIDEO_USE_OTHERS;
		break;

	default:
		SDPRINTK("invalid caption_y_sideo parameter(%d)\n\r", 
			caption_y_sideo);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	if (cgmsa_rgb) {
		temp_reg |= SDO_RGB_CGMSA_INS;
	} else {
		temp_reg |= SDO_RGB_NO_CGMSA;
	}

	if (wss_rgb) {
		temp_reg |= SDO_RGB_WSS_INS;
	} else {
		temp_reg |= SDO_RGB_NO_WSS;
	}

	switch (caption_rgb) {

	case SDOUT_NO_INS:
		temp_reg |= SDO_RGB_NO_CLOSED_CAPTION;
		break;

	case SDOUT_INS_1:
		temp_reg |= SDO_RGB_21H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_2:
		temp_reg |= SDO_RGB_21H_284H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_OTHERS:
		temp_reg |= SDO_RGB_USE_OTHERS;
		break;

	default:
		SDPRINTK(" invalid caption_rgb parameter(%d)\n\r", 
			caption_rgb);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	if (cgmsa_y_ppr) {
		temp_reg |= SDO_YPBPR_CGMSA_INS;
	} else {
		temp_reg |= SDO_YPBPR_NO_CGMSA;
	}

	if (wss_y_ppr) {
		temp_reg |= SDO_YPBPR_WSS_INS;
	} else {
		temp_reg |= SDO_YPBPR_NO_WSS;
	}

	switch (caption_y_ppr) {

	case SDOUT_NO_INS:
		temp_reg |= SDO_YPBPR_NO_CLOSED_CAPTION;
		break;

	case SDOUT_INS_1:
		temp_reg |= SDO_YPBPR_21H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_2:
		temp_reg |= SDO_YPBPR_21H_284H_CLOSED_CAPTION;
		break;

	case SDOUT_INS_OTHERS:
		temp_reg |= SDO_YPBPR_USE_OTHERS;
		break;

	default:
		SDPRINTK("invalid caption_y_ppr parameter(%d)\n\r", 
			caption_y_ppr);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	writel(temp_reg, sdout_base + S5P_SDO_VBI);

	SDPRINTK("0x%08x\n\r", readl(sdout_base + S5P_SDO_VBI));

	return SDOUT_NO_ERROR;
}
コード例 #28
0
static enum s5p_tv_sd_err __s5p_sdout_init_oversampling_filter_coeff_default(
	enum s5p_tv_o_mode out_mode)
{

	SDPRINTK("%d\n\r", out_mode);

	switch (out_mode) {

	case TVOUT_OUTPUT_COMPOSITE:

	case TVOUT_OUTPUT_SVIDEO:

	case TVOUT_OUTPUT_COMPONENT_YPBPR_INERLACED:
		/*
		temp_reg = (u32)(sdout_base + S5P_SDO_OSFC00_0);

		for (i = 0; i < 3; i++) {

			temp_reg = (u32)((i == 0) ?
				sdout_base + S5P_SDO_OSFC00_0 :
				(i == 1) ? sdout_base + S5P_SDO_OSFC00_1 :
				       sdout_base + S5P_SDO_OSFC00_2);

			writel(((-2&0xfff) << 0) | ((-3&0xfff) << 0),
				temp_reg + 0);
			writel(0,
				temp_reg + 1);
			writel((4 << 0) | (5 << 16),
				temp_reg + 2);
			writel(((-1&0xfff) << 0) | (0 << 16),
				temp_reg + 3);
			writel(((-6&0xfff) << 0) | ((-9&0xfff) << 16),
				temp_reg + 4);
			writel((1 << 0) | (0 << 16),
				temp_reg + 5);
			writel((10 << 0) | (14 << 16),
				temp_reg + 6);
			writel(((-1&0xfff) << 0) | (0 << 16),
				temp_reg + 7);
			writel(((-14&0xfff) << 0) | ((-20&0xfff) << 16),
				temp_reg + 8);
			writel((1 << 0) | (0 << 16),
				temp_reg + 9);
			writel((20 << 0) | (29 << 16),
				temp_reg + 10);
			writel(((-2&0xfff) << 0) | (0 << 16),
				temp_reg + 11);
			writel(((-28&0xfff) << 0) | ((-40&0xfff) << 16),
				temp_reg + 12);
			writel((2 << 0) | (0 << 16),
				temp_reg + 13);
			writel((40 << 0) | (56 << 16),
				temp_reg + 14);
			writel(((-3&0xfff) << 0) | (0 << 16),
				temp_reg + 15);
			writel(((-57&0xfff) << 0) | ((-80&0xfff) << 16),
				temp_reg + 16);
			writel((5 << 0) | (0 << 16),
				temp_reg + 17);
			writel((86 << 0) | (121 << 16),
				temp_reg + 18);
			writel(((-10&0xfff) << 0) | (0 << 16),
				temp_reg + 19);
			writel(((-154&0xfff) << 0) | ((-212&0xfff) << 16),
				temp_reg + 20);
			writel((27 << 0) | (0 << 16),
				temp_reg + 21);
			writel((613 << 0) | (651 << 16),
				temp_reg + 22);
			writel(((-308&0xfff) << 0) | (1024 << 16),
				temp_reg + 23);
		}
*/
		break;

	default:
		SDPRINTK("invalid out_mode parameter(%d)\n\r", out_mode);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	return SDOUT_NO_ERROR;
}
コード例 #29
0
/*
* initialization  - iniization functions are only called under stopping SDOUT
*/
s5p_tv_sd_err __s5p_sdout_init_video_scale_cfg(s5p_sd_level component_level,
					s5p_sd_vsync_ratio component_ratio,
					s5p_sd_level composite_level,
					s5p_sd_vsync_ratio composite_ratio)
{
	u32 temp_reg = 0;

	SDPRINTK("%d,%d,%d,%d\n\r", component_level, component_ratio, 
		composite_level, composite_ratio);

	switch (component_level) {

	case S5P_TV_SD_LEVEL_0IRE:
		temp_reg = SDO_COMPONENT_LEVEL_SEL_0IRE;
		break;

	case S5P_TV_SD_LEVEL_75IRE:
		temp_reg = SDO_COMPONENT_LEVEL_SEL_75IRE;
		break;

	default:
		SDPRINTK("invalid component_level parameter(%d)\n\r", 
			component_level);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (composite_level) {

	case SDOUT_VTOS_RATIO_10_4:
		temp_reg |= SDO_COMPONENT_VTOS_RATIO_10_4;
		break;

	case SDOUT_VTOS_RATIO_7_3:
		temp_reg |= SDO_COMPONENT_VTOS_RATIO_7_3;
		break;

	default:
		SDPRINTK(" invalid composite_level parameter(%d)\n\r", 
			composite_level);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (composite_level) {

	case S5P_TV_SD_LEVEL_0IRE:
		temp_reg |= SDO_COMPOSITE_LEVEL_SEL_0IRE;
		break;

	case S5P_TV_SD_LEVEL_75IRE:
		temp_reg |= SDO_COMPOSITE_LEVEL_SEL_75IRE;
		break;

	default:
		SDPRINTK("invalid composite_ratio parameter(%d)\n\r", 
			composite_ratio);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	switch (composite_ratio) {

	case SDOUT_VTOS_RATIO_10_4:
		temp_reg |= SDO_COMPOSITE_VTOS_RATIO_10_4;
		break;

	case SDOUT_VTOS_RATIO_7_3:
		temp_reg |= SDO_COMPOSITE_VTOS_RATIO_7_3;
		break;

	default:
		SDPRINTK("invalid component_ratio parameter(%d)\n\r", 
			component_ratio);
		return S5P_TV_SD_ERR_INVALID_PARAM;
		break;
	}

	writel(temp_reg, sdout_base + S5P_SDO_SCALE);

	SDPRINTK("0x%08x)\n\r", readl(sdout_base + S5P_SDO_SCALE));

	return SDOUT_NO_ERROR;
}