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, 23d0804085SMoudy Ho 24d0804085SMoudy Ho MUTEX_MOD_IDX_MAX /* ALWAYS keep at the end */ 25d0804085SMoudy Ho }; 26d0804085SMoudy Ho 27d0804085SMoudy Ho enum mtk_mutex_sof_index { 28d0804085SMoudy Ho MUTEX_SOF_IDX_SINGLE_MODE, 29d0804085SMoudy Ho 30d0804085SMoudy Ho MUTEX_SOF_IDX_MAX /* ALWAYS keep at the end */ 31d0804085SMoudy Ho }; 32d0804085SMoudy Ho 33e1e4f7feSCK Hu struct mtk_mutex *mtk_mutex_get(struct device *dev); 34e1e4f7feSCK Hu int mtk_mutex_prepare(struct mtk_mutex *mutex); 35e1e4f7feSCK Hu void mtk_mutex_add_comp(struct mtk_mutex *mutex, 36e1e4f7feSCK Hu enum mtk_ddp_comp_id id); 37e1e4f7feSCK Hu void mtk_mutex_enable(struct mtk_mutex *mutex); 38*e5758850SMoudy Ho int mtk_mutex_enable_by_cmdq(struct mtk_mutex *mutex, 39*e5758850SMoudy Ho void *pkt); 40e1e4f7feSCK Hu void mtk_mutex_disable(struct mtk_mutex *mutex); 41e1e4f7feSCK Hu void mtk_mutex_remove_comp(struct mtk_mutex *mutex, 42e1e4f7feSCK Hu enum mtk_ddp_comp_id id); 43e1e4f7feSCK Hu void mtk_mutex_unprepare(struct mtk_mutex *mutex); 44e1e4f7feSCK Hu void mtk_mutex_put(struct mtk_mutex *mutex); 45e1e4f7feSCK Hu void mtk_mutex_acquire(struct mtk_mutex *mutex); 46e1e4f7feSCK Hu void mtk_mutex_release(struct mtk_mutex *mutex); 47d0804085SMoudy Ho int mtk_mutex_write_mod(struct mtk_mutex *mutex, 48d0804085SMoudy Ho enum mtk_mutex_mod_index idx, 49d0804085SMoudy Ho bool clear); 50d0804085SMoudy Ho int mtk_mutex_write_sof(struct mtk_mutex *mutex, 51d0804085SMoudy Ho enum mtk_mutex_sof_index idx); 52e1e4f7feSCK Hu 53e1e4f7feSCK Hu #endif /* MTK_MUTEX_H */ 54