/* SPDX-License-Identifier: GPL-2.0-only */

#include <dp_aux.h>

bool dp_aux_request_is_write(enum aux_request request)
{
	switch (request) {
	case I2C_RAW_WRITE_AND_STOP:
	case I2C_RAW_WRITE:
	case DPCD_WRITE:
		return true;
	default:
		return false;
	}
}

enum i2c_over_aux dp_get_aux_cmd(enum aux_request request, uint32_t remaining_after_this)
{
	switch (request) {
	case I2C_RAW_WRITE_AND_STOP:
		if (!remaining_after_this)
			return I2C_OVER_AUX_WRITE_MOT_0;
		__fallthrough;
	case I2C_RAW_WRITE:
		return I2C_OVER_AUX_WRITE_MOT_1;
	case I2C_RAW_READ_AND_STOP:
		if (!remaining_after_this)
			return I2C_OVER_AUX_READ_MOT_0;
		__fallthrough;
	case I2C_RAW_READ:
		return I2C_OVER_AUX_READ_MOT_1;
	case DPCD_WRITE:
		return NATIVE_AUX_WRITE;
	case DPCD_READ:
	default:
		return NATIVE_AUX_READ;
	}
}
