blob: ecf95617f6d56adf7098c2a6d97eb4aa5ab957db [file] [edit]
/* SPDX-License-Identifier: GPL-2.0-only */
/*
* Copyright (c) 2022 MediaTek Inc.
* Author: Anthony Huang <anthony.huang@mediatek.com>
*/
#ifndef __DRV_CLK_MMDVFS_V3_H
#define __DRV_CLK_MMDVFS_V3_H
#include <dt-bindings/clock/mmdvfs-clk.h>
#define MAX_OPP (8)
#define IPI_TIMEOUT_MS (200U)
#define MMDVFS_DBG(fmt, args...) \
pr_notice("[mmdvfs][dbg]%s: "fmt"\n", __func__, ##args)
#define MMDVFS_ERR(fmt, args...) \
pr_notice("[mmdvfs][err]%s: "fmt"\n", __func__, ##args)
struct mtk_mmdvfs_clk {
const char *name;
u8 clk_id;
u8 pwr_id;
u8 user_id;
u8 ipi_type;
u8 spec_type;
u8 opp;
u8 freq_num;
u32 freqs[MAX_OPP];
struct clk_hw clk_hw;
};
/* vcp/.../mmdvfs_public.h */
enum {
USER_DISP,
USER_DISP_AP,
USER_MDP,
USER_MML,
USER_MMINFRA,
USER_VENC,
USER_VENC_AP,
USER_VDEC,
USER_VDEC_AP,
USER_IMG,
USER_CAM,
USER_AOV,
USER_VCORE,
USER_VMM,
USER_NUM
};
/* vcp/.../mmdvfs_private.h */
enum {
LOG_DEBUG_ON,
LOG_IPI_IN,
LOG_IPI_OUT,
LOG_CLOCK,
LOG_POWER,
LOG_HOPPING,
LOG_NUM
};
enum {
FUNC_GET_OPP, /* user, user, user */
FUNC_SET_OPP, /* user, opp */
FUNC_FORCE_OPP, /* power, opp */
FUNC_CAMERA_ON, /* enable */
FUNC_STRESS, /* enable */
FUNC_SET_LOG,
FUNC_NUM
};
struct mmdvfs_ipi_data {
uint8_t func;
uint8_t idx;
uint8_t opp;
uint8_t ack;
uint32_t base;
};
#endif /* __DRV_CLK_MMDVFS_V3_H */