kernel-brax3-ubuntu-touch/drivers/misc/mediatek/vcp/rv/vcp_vcpctl.c
erascape f319b992b1 kernel-5.15: Initial import brax3 UT kernel
* halium configs enabled

Signed-off-by: erascape <erascape@proton.me>
2025-09-23 15:17:10 +00:00

51 lines
1.2 KiB
C

// SPDX-License-Identifier: GPL-2.0
/*
* Copyright (C) 2020 MediaTek Inc.
*/
#if IS_ENABLED(CONFIG_MTK_TINYSYS_VCP_DEBUG_SUPPORT)
#include <linux/device.h> /* needed by device_* */
#include "vcp_ipi_pin.h"
#include "vcp_mbox_layout.h"
#include "vcp_vcpctl.h"
/*
* A device node to send commands to vcp wit unified interface
* @magic: should be 666
* @type: a class for different types of commands
* @op: the operation specified in a command type
* @return: 0 if success, -EINVAL if wrong value of number
* of parameters
*/
static ssize_t vcpctl_store(struct device *kobj
, struct device_attribute *attr, const char *buf, size_t n)
{
int ret;
int magic, type, op;
struct vcpctl_cmd_s cmd;
char *prompt = "[VCPCTL]:";
if (sscanf(buf, "%d %d %d", &magic, &type, &op) != 3)
return -EINVAL;
pr_notice("%s %d %d %d\n", prompt, magic, type, op);
if (magic != 666)
return -EINVAL;
cmd.type = type;
cmd.op = op;
ret = mtk_ipi_send(&vcp_ipidev, IPI_OUT_VCPCTL_1, 0, &cmd,
PIN_OUT_SIZE_VCPCTL_1, 0);
if (ret != IPI_ACTION_DONE)
goto _err;
return n;
_err:
pr_notice("%s failed, %d\n", prompt, ret);
return -EIO;
}
DEVICE_ATTR_WO(vcpctl);
#endif // CONFIG_MTK_TINYSYS_VCP_DEBUG_SUPPORT