Exemplo n.º 1
0
static void afe_send_cal_block(int32_t path, u16 port_id)
{
	int						result = 0;
	struct acdb_cal_block				cal_block;
	struct afe_port_cmd_set_param_no_payload	afe_cal;
	pr_debug("%s: path %d\n", __func__, path);

	get_afe_cal(path, &cal_block);
	if (cal_block.cal_size <= 0) {
		pr_debug("%s: No AFE cal to send!\n", __func__);
		goto done;
	}

	if ((afe_cal_addr[path].cal_paddr != cal_block.cal_paddr) ||
		(cal_block.cal_size > afe_cal_addr[path].cal_size)) {
		if (afe_cal_addr[path].cal_paddr != 0)
			afe_cmd_memory_unmap(
				afe_cal_addr[path].cal_paddr);

		afe_cmd_memory_map(cal_block.cal_paddr, cal_block.cal_size);
		afe_cal_addr[path].cal_paddr = cal_block.cal_paddr;
		afe_cal_addr[path].cal_size = cal_block.cal_size;
	}

	afe_cal.hdr.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD,
				APR_HDR_LEN(APR_HDR_SIZE), APR_PKT_VER);
	afe_cal.hdr.pkt_size = sizeof(afe_cal);
	afe_cal.hdr.src_port = 0;
	afe_cal.hdr.dest_port = 0;
	afe_cal.hdr.token = 0;
	afe_cal.hdr.opcode = AFE_PORT_CMD_SET_PARAM;
	afe_cal.port_id = port_id;
	afe_cal.payload_size = cal_block.cal_size;
	afe_cal.payload_address = cal_block.cal_paddr;

	pr_debug("%s: AFE cal sent for device port = %d, path = %d, "
		"cal size = %d, cal addr = 0x%x\n", __func__,
		port_id, path, cal_block.cal_size, cal_block.cal_paddr);

	atomic_set(&this_afe.state, 1);
	result = apr_send_pkt(this_afe.apr, (uint32_t *) &afe_cal);
	if (result < 0) {
		pr_err("%s: AFE cal for port %d failed\n",
			__func__, port_id);
	}

	result = wait_event_timeout(this_afe.wait,
				 (atomic_read(&this_afe.state) == 0),
				 msecs_to_jiffies(TIMEOUT_MS));
	if (!result) {
		pr_err("%s: wait_event timeout SET AFE CAL\n", __func__);
		HTC_Q6_BUG();
		goto done;
	}

	pr_debug("%s: AFE cal sent for path %d device!\n", __func__, path);
done:
	return;
}
Exemplo n.º 2
0
static void afe_send_cal_block(int32_t path, u16 port_id)
{
	int						result = 0;
	struct acdb_cal_block				cal_block;
	struct afe_port_cmd_set_param_no_payload	afe_cal;
	pr_debug("%s: path %d\n", __func__, path);

	get_afe_cal(path, &cal_block);
	if (cal_block.cal_size <= 0) {
		pr_debug("%s: No AFE cal to send!\n", __func__);
		goto done;
	}

	if (afe_cal_addr[path] != cal_block.cal_paddr) {
		if (afe_cal_addr[path] != 0)
			afe_cmd_memory_unmap_nowait(afe_cal_addr[path]);
		afe_cmd_memory_map_nowait(cal_block.cal_paddr,
						cal_block.cal_size);
		afe_cal_addr[path] = cal_block.cal_paddr;
	}

	afe_cal.hdr.hdr_field = APR_HDR_FIELD(APR_MSG_TYPE_SEQ_CMD,
				APR_HDR_LEN(APR_HDR_SIZE), APR_PKT_VER);
	afe_cal.hdr.pkt_size = sizeof(afe_cal);
	afe_cal.hdr.src_port = 0;
	afe_cal.hdr.dest_port = 0;
	afe_cal.hdr.token = 0;
	afe_cal.hdr.opcode = AFE_PORT_CMD_SET_PARAM;
	afe_cal.port_id = port_id;
	afe_cal.payload_size = cal_block.cal_size;
	afe_cal.payload_address = cal_block.cal_paddr;

	pr_debug("%s: AFE cal sent for device port = %d, path = %d, "
		"cal size = %d, cal addr = 0x%x\n", __func__,
		port_id, path, cal_block.cal_size, cal_block.cal_paddr);

	result = apr_send_pkt(this_afe.apr, (uint32_t *) &afe_cal);
	if (result < 0) {
		pr_err("%s: AFE cal for port %d failed\n",
			__func__, port_id);
	}

	pr_debug("%s: AFE cal sent for path %d device!\n", __func__, path);
done:
	return;
}