Unverified Commit 8180e943 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files
parents 7272e67e 76ef0c58
Loading
Loading
Loading
Loading
+24 −2
Original line number Diff line number Diff line
@@ -36,6 +36,19 @@
 */
#define UCSI_SWAP_TIMEOUT_MS	5000

static int ucsi_read_message_in(struct ucsi *ucsi, void *buf,
					  size_t buf_size)
{
	/*
	 * Below UCSI 2.0, MESSAGE_IN was limited to 16 bytes. Truncate the
	 * reads here.
	 */
	if (ucsi->version <= UCSI_VERSION_1_2)
		buf_size = clamp(buf_size, (size_t)0, (size_t)16);

	return ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, buf, buf_size);
}

static int ucsi_acknowledge_command(struct ucsi *ucsi)
{
	u64 ctrl;
@@ -72,7 +85,7 @@ static int ucsi_read_error(struct ucsi *ucsi)
	if (ret < 0)
		return ret;

	ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, &error, sizeof(error));
	ret = ucsi_read_message_in(ucsi, &error, sizeof(error));
	if (ret)
		return ret;

@@ -165,7 +178,7 @@ int ucsi_send_command(struct ucsi *ucsi, u64 command,
	length = ret;

	if (data) {
		ret = ucsi->ops->read(ucsi, UCSI_MESSAGE_IN, data, size);
		ret = ucsi_read_message_in(ucsi, data, size);
		if (ret)
			goto out;
	}
@@ -1304,6 +1317,15 @@ int ucsi_register(struct ucsi *ucsi)
	if (!ucsi->version)
		return -ENODEV;

	/*
	 * Version format is JJ.M.N (JJ = Major version, M = Minor version,
	 * N = sub-minor version).
	 */
	dev_dbg(ucsi->dev, "Registered UCSI interface with version %x.%x.%x",
		UCSI_BCD_GET_MAJOR(ucsi->version),
		UCSI_BCD_GET_MINOR(ucsi->version),
		UCSI_BCD_GET_SUBMINOR(ucsi->version));

	queue_work(system_long_wq, &ucsi->work);

	return 0;
+11 −0
Original line number Diff line number Diff line
@@ -21,6 +21,17 @@ struct ucsi_altmode;
#define UCSI_CONTROL			8
#define UCSI_MESSAGE_IN			16
#define UCSI_MESSAGE_OUT		32
#define UCSIv2_MESSAGE_OUT		272

/* UCSI versions */
#define UCSI_VERSION_1_2	0x0120
#define UCSI_VERSION_2_0	0x0200
#define UCSI_VERSION_2_1	0x0210
#define UCSI_VERSION_3_0	0x0300

#define UCSI_BCD_GET_MAJOR(_v_)		(((_v_) >> 8) & 0xFF)
#define UCSI_BCD_GET_MINOR(_v_)		(((_v_) >> 4) & 0x0F)
#define UCSI_BCD_GET_SUBMINOR(_v_)	((_v_) & 0x0F)

/* Command Status and Connector Change Indication (CCI) bits */
#define UCSI_CCI_CONNECTOR(_c_)		(((_c_) & GENMASK(7, 1)) >> 1)