예제 #1
0
int VSYNCOSD_WR_MPEG_REG_BITS(unsigned long addr, unsigned long val, unsigned long start, unsigned long len)
{
	unsigned long read_val;
	unsigned long write_val;

	if(rdma_enable){
		read_val=VSYNCOSD_RD_MPEG_REG(addr);
		write_val = (read_val & ~(((1L<<(len))-1)<<(start)))|((unsigned int)(val) << (start));
		update_table_item(addr,write_val);
	}else{
		Wr_reg_bits(addr,val,start,len);
	}
    
	return 0;
}
예제 #2
0
int VSYNCOSD_CLR_MPEG_REG_MASK(unsigned long addr, unsigned long _mask)
{
	unsigned long read_val;
	unsigned long write_val;

	if(rdma_enable){
		read_val=VSYNCOSD_RD_MPEG_REG(addr);
		write_val = read_val&(~_mask) ;
		update_table_item(addr,write_val);
	}else{
		Wr_clr_reg_bits_mask(addr,_mask);
	}

	return 0;
}
예제 #3
0
static int init_fb1_first(const struct vinfo_s *vinfo)
{
	struct osd_ctl_s  osd_ctl;
	const struct color_bit_define_s  *color;
	u32 reg = 0, data32 = 0;

	osd_ctl.index = 1;
	color = &default_color_format_array[31];

	osd_ctl.addr = get_fb_rmem_paddr(osd_ctl.index);

	osd_ctl.xres = vinfo->width;
	osd_ctl.yres = vinfo->height;
	osd_ctl.xres_virtual = osd_ctl.xres;
	osd_ctl.yres_virtual = osd_ctl.yres;
	osd_ctl.disp_start_x = 0;
	osd_ctl.disp_end_x = osd_ctl.xres - 1;
	osd_ctl.disp_start_y = 0;
	osd_ctl.disp_end_y = osd_ctl.yres - 1;

	reg = osd_ctl.index == 0 ? VIU_OSD1_BLK0_CFG_W0 : VIU_OSD2_BLK0_CFG_W0;
	data32 = VSYNCOSD_RD_MPEG_REG(reg) & (~(0xf<<8));
	data32 |=  color->hw_blkmode << 8; /* osd_blk_mode */
	VSYNCOSD_WR_MPEG_REG(reg, data32);

	pr_debug("addr is 0x%08x, xres is %d, yres is %d\n",
			osd_ctl.addr, osd_ctl.xres, osd_ctl.yres);
	osd_setup_hw(osd_ctl.index,
		&osd_ctl,
		0,
		0,
		osd_ctl.xres,
		osd_ctl.yres,
		osd_ctl.xres_virtual,
		osd_ctl.yres_virtual,
		osd_ctl.disp_start_x,
		osd_ctl.disp_start_y,
		osd_ctl.disp_end_x,
		osd_ctl.disp_end_y,
		osd_ctl.addr,
		color);

	return 0;
}