// SPDX-License-Identifier: GPL-2.0
#define CREATE_TRACE_POINTS
#include "ucsi.h"
#include "trace.h"

static const char * const ucsi_cmd_strs[] = {
	[0]				= "Unknown command",
	[UCSI_PPM_RESET]		= "PPM_RESET",
	[UCSI_CANCEL]			= "CANCEL",
	[UCSI_CONNECTOR_RESET]		= "CONNECTOR_RESET",
	[UCSI_ACK_CC_CI]		= "ACK_CC_CI",
	[UCSI_SET_NOTIFICATION_ENABLE]	= "SET_NOTIFICATION_ENABLE",
	[UCSI_GET_CAPABILITY]		= "GET_CAPABILITY",
	[UCSI_GET_CONNECTOR_CAPABILITY]	= "GET_CONNECTOR_CAPABILITY",
	[UCSI_SET_UOM]			= "SET_UOM",
	[UCSI_SET_UOR]			= "SET_UOR",
	[UCSI_SET_PDM]			= "SET_PDM",
	[UCSI_SET_PDR]			= "SET_PDR",
	[UCSI_GET_ALTERNATE_MODES]	= "GET_ALTERNATE_MODES",
	[UCSI_GET_CAM_SUPPORTED]	= "GET_CAM_SUPPORTED",
	[UCSI_GET_CURRENT_CAM]		= "GET_CURRENT_CAM",
	[UCSI_SET_NEW_CAM]		= "SET_NEW_CAM",
	[UCSI_GET_PDOS]			= "GET_PDOS",
	[UCSI_GET_CABLE_PROPERTY]	= "GET_CABLE_PROPERTY",
	[UCSI_GET_CONNECTOR_STATUS]	= "GET_CONNECTOR_STATUS",
	[UCSI_GET_ERROR_STATUS]		= "GET_ERROR_STATUS",
};

const char *ucsi_cmd_str(u64 raw_cmd)
{
	u8 cmd = raw_cmd & GENMASK(7, 0);

	return ucsi_cmd_strs[(cmd >= ARRAY_SIZE(ucsi_cmd_strs)) ? 0 : cmd];
}

const char *ucsi_cci_str(u32 cci)
{
	if (UCSI_CCI_CONNECTOR(cci)) {
		if (cci & UCSI_CCI_ACK_COMPLETE)
			return "Event pending (ACK completed)";
		if (cci & UCSI_CCI_COMMAND_COMPLETE)
			return "Event pending (command completed)";
		return "Connector Change";
	}
	if (cci & UCSI_CCI_ACK_COMPLETE)
		return "ACK completed";
	if (cci & UCSI_CCI_COMMAND_COMPLETE)
		return "Command completed";

	return "";
}

static const char * const ucsi_recipient_strs[] = {
	[UCSI_RECIPIENT_CON]		= "port",
	[UCSI_RECIPIENT_SOP]		= "partner",
	[UCSI_RECIPIENT_SOP_P]		= "plug (prime)",
	[UCSI_RECIPIENT_SOP_PP]		= "plug (double prime)",
};

const char *ucsi_recipient_str(u8 recipient)
{
	return ucsi_recipient_strs[recipient];
}
