コード例 #1
0
void fm34_reset_DSP(void)
{
	gpio_set_value(TEGRA_GPIO_PH2, 0);
	msleep(TIME_RESET);
	FM34_INFO("GPIO = %d , state = %d\n", TEGRA_GPIO_PH2, gpio_get_value(TEGRA_GPIO_PH2));

	gpio_set_value(TEGRA_GPIO_PH2, 1);
	FM34_INFO("GPIO = %d , state = %d\n", TEGRA_GPIO_PH2, gpio_get_value(TEGRA_GPIO_PH2));

	return;
}
コード例 #2
0
int fm34_config_DSP(void)
{
	int ret=0;
	struct i2c_msg msg[3];
	u8 buf1;
	int config_length;
	u8 *config_table;

	if(!bConfigured){
		fm34_reset_DSP();
		msleep(100);

		gpio_set_value(TEGRA_GPIO_PBB6, 1); // Enable DSP
		msleep(TIME_WAKEUP_TO_PROGRAMMING);

		//access chip to check if acknowledgement.
		buf1=0xC0;
		/* Write register */
		msg[0].addr = dsp_chip->client->addr;
		msg[0].flags = 0;
		msg[0].len = 1;
		msg[0].buf = &buf1;

		ret = i2c_transfer(dsp_chip->client->adapter, msg, 1);
		if(ret < 0){
			FM34_INFO("DSP NOack, Failed to read 0x%x: %d\n", buf1, ret);
			msleep(50);
			fm34_reset_DSP();
			return ret;
		}
		else
			FM34_INFO("DSP ACK,  read 0x%x: %d\n", buf1, ret);

		FM34_INFO("Load TF201 DSP parameters\n");
		config_length= sizeof(input_parameter);
		config_table= (u8 *)input_parameter;

		ret = fm34_i2c_retry(dsp_chip->client, config_table, config_length);
		FM34_INFO("config_length = %d\n", config_length);

		if(ret == config_length){
			FM34_INFO("DSP configuration is done\n");
			bConfigured=true;
		}

		msleep(100);
		gpio_set_value(TEGRA_GPIO_PBB6, 0);
	}


	return ret;
}
コード例 #3
0
ファイル: dsp.c プロジェクト: onenonlycasper/tf700t_kernel
unsigned int fm34_i2c_read(unsigned char AdrHi,unsigned char AdrLo, unsigned char *data)
{
	unsigned int ret = 0;
	u8 cmd_addr[5] = {0};
	u8 cmd_lo[4] = {0};
	u8 cmd_hi[4] = {0};

	cmd_addr[0] = 0xFC;
	cmd_addr[1] = 0xF3;
	cmd_addr[2] = 0x37;
	cmd_addr[3] = AdrHi;
	cmd_addr[4] = AdrLo;

	cmd_lo[0] = 0xFC;
	cmd_lo[1] = 0xF3;
	cmd_lo[2] = 0x60;
	cmd_lo[3] = 0x25;

	cmd_hi[0] = 0xFC;
	cmd_hi[1] = 0xF3;
	cmd_hi[2] = 0x60;
	cmd_hi[3] = 0x26;

	//set read addr
	ret = i2c_master_send(dsp_chip->client, cmd_addr, 5);
	if(ret != 5){
		FM34_INFO("DSP set read reg  fail\n");
	}

	ret = i2c_master_send(dsp_chip->client, cmd_lo, 4);
	if(ret != 4){
		FM34_INFO("DSP send read low byte addr fail\n");
	}

	ret = i2c_master_recv(dsp_chip->client, data, 1);
	if(ret != 1){
		FM34_INFO("DSP read low byte fail, data: %d\n", data[0]);
	}

	ret = i2c_master_send(dsp_chip->client, cmd_hi, 4);
	if(ret != 4){
		FM34_INFO("DSP send read high byte  addr fail\n");
	}

	ret = i2c_master_recv(dsp_chip->client, (data + 1), 1);
	if(ret != 1){
		FM34_INFO("DSP read high byte fail,  data: %d\n", data[1]);
	}

	return ret;
}
コード例 #4
0
ファイル: dsp.c プロジェクト: onenonlycasper/tf700t_kernel
int fm34_i2c_retry(struct i2c_client *fm34_i2c_client, u8* parameter, size_t size)
{
	int retry = 0;
	int ret = -1;

        ret = i2c_master_send(fm34_i2c_client, parameter, size);
        msleep(5);

	while(retry < MAX_RETRY && ret < 0){
		retry++;
		FM34_INFO("i2c no ack retry time = %d\n", retry);
		ret = i2c_master_send(fm34_i2c_client, parameter, size);
		msleep(5);
	}

	if(retry == MAX_RETRY)
		FM34_INFO("i2c retry fail, exceed maximum retry times = %d\n", MAX_RETRY);

	return ret;

}