1e1e4f7feSCK Hu /* SPDX-License-Identifier: GPL-2.0-only */ 2e1e4f7feSCK Hu /* 3e1e4f7feSCK Hu * Copyright (c) 2015 MediaTek Inc. 4e1e4f7feSCK Hu */ 5e1e4f7feSCK Hu 6e1e4f7feSCK Hu #ifndef MTK_MUTEX_H 7e1e4f7feSCK Hu #define MTK_MUTEX_H 8e1e4f7feSCK Hu 9e1e4f7feSCK Hu struct regmap; 10e1e4f7feSCK Hu struct device; 11e1e4f7feSCK Hu struct mtk_mutex; 12e1e4f7feSCK Hu 13d0804085SMoudy Ho enum mtk_mutex_mod_index { 14d0804085SMoudy Ho /* MDP table index */ 15d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_RDMA0, 16d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_RSZ0, 17d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_RSZ1, 18d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_TDSHP0, 19d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_WROT0, 20d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_WDMA, 21d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_AAL0, 22d0804085SMoudy Ho MUTEX_MOD_IDX_MDP_CCORR0, 23*21370ecdSAllen-KH Cheng MUTEX_MOD_IDX_MDP_HDR0, 24*21370ecdSAllen-KH Cheng MUTEX_MOD_IDX_MDP_COLOR0, 25d0804085SMoudy Ho 26d0804085SMoudy Ho MUTEX_MOD_IDX_MAX /* ALWAYS keep at the end */ 27d0804085SMoudy Ho }; 28d0804085SMoudy Ho 29d0804085SMoudy Ho enum mtk_mutex_sof_index { 30d0804085SMoudy Ho MUTEX_SOF_IDX_SINGLE_MODE, 31d0804085SMoudy Ho 32d0804085SMoudy Ho MUTEX_SOF_IDX_MAX /* ALWAYS keep at the end */ 33d0804085SMoudy Ho }; 34d0804085SMoudy Ho 35e1e4f7feSCK Hu struct mtk_mutex *mtk_mutex_get(struct device *dev); 36e1e4f7feSCK Hu int mtk_mutex_prepare(struct mtk_mutex *mutex); 37e1e4f7feSCK Hu void mtk_mutex_add_comp(struct mtk_mutex *mutex, 38e1e4f7feSCK Hu enum mtk_ddp_comp_id id); 39e1e4f7feSCK Hu void mtk_mutex_enable(struct mtk_mutex *mutex); 40e5758850SMoudy Ho int mtk_mutex_enable_by_cmdq(struct mtk_mutex *mutex, 41e5758850SMoudy Ho void *pkt); 42e1e4f7feSCK Hu void mtk_mutex_disable(struct mtk_mutex *mutex); 43e1e4f7feSCK Hu void mtk_mutex_remove_comp(struct mtk_mutex *mutex, 44e1e4f7feSCK Hu enum mtk_ddp_comp_id id); 45e1e4f7feSCK Hu void mtk_mutex_unprepare(struct mtk_mutex *mutex); 46e1e4f7feSCK Hu void mtk_mutex_put(struct mtk_mutex *mutex); 47e1e4f7feSCK Hu void mtk_mutex_acquire(struct mtk_mutex *mutex); 48e1e4f7feSCK Hu void mtk_mutex_release(struct mtk_mutex *mutex); 49d0804085SMoudy Ho int mtk_mutex_write_mod(struct mtk_mutex *mutex, 50d0804085SMoudy Ho enum mtk_mutex_mod_index idx, 51d0804085SMoudy Ho bool clear); 52d0804085SMoudy Ho int mtk_mutex_write_sof(struct mtk_mutex *mutex, 53d0804085SMoudy Ho enum mtk_mutex_sof_index idx); 54e1e4f7feSCK Hu 55e1e4f7feSCK Hu #endif /* MTK_MUTEX_H */ 56