int mddi_multi_register_write(uint32 reg,uint32 value)
{
	static boolean first_time = TRUE;
	static uint32 param_num = 0;
	static uint32 last_reg_addr = 0;
	static uint32 value_list_ptr[MDDI_HOST_MAX_CLIENT_REG_IN_SAME_ADDR];
	int ret = 0;
	if (value & TYPE_COMMAND) 
	{		
		if(!first_time)
	    {
			ret = mddi_host_register_multiwrite(last_reg_addr,value_list_ptr ,param_num,TRUE,NULL,
		                                  MDDI_HOST_PRIM);
	    }
		else
		{
			first_time =FALSE;
		}
		last_reg_addr = reg ;
		param_num = 0;
		if(MDDI_MULTI_WRITE_END == last_reg_addr)
		{
			last_reg_addr = 0;
			first_time = TRUE;
		}
	}
	else if (value & TYPE_PARAMETER) 
	{
		value_list_ptr[param_num] = reg;
		param_num++;
	}	
	return ret;
}
示例#2
0
static boolean serigo(uint32 reg, uint32 len, const char *params, boolean wait)
{
	uint32 rv;
	uint32 data_list[20];
	uint i;

	for (i = 0; i < len; ++i)
		data_list[i] = (u32)params[i] & 0xFF;

	if (len > 0)
		rv = mddi_host_register_multiwrite(reg, len, data_list, wait, \
							NULL, MDDI_HOST_PRIM);
	else
		rv = mddi_queue_register_write(reg, 0, TRUE, 0);

	mddi_wait(10);
	return rv;
}