2019-05-27 08:55:21 +02:00
// SPDX-License-Identifier: GPL-2.0-only
2016-01-04 18:36:34 +01:00
/*
* Copyright ( c ) 2015 MediaTek Inc .
*/
# include <linux/clk.h>
2017-03-31 19:30:31 +08:00
# include <linux/iopoll.h>
2016-01-04 18:36:34 +01:00
# include <linux/module.h>
# include <linux/of_device.h>
2022-06-10 14:34:23 +08:00
# include <linux/of_address.h>
2016-01-04 18:36:34 +01:00
# include <linux/platform_device.h>
# include <linux/regmap.h>
2020-07-21 11:24:36 +08:00
# include <linux/soc/mediatek/mtk-mmsys.h>
2020-07-21 15:46:06 +08:00
# include <linux/soc/mediatek/mtk-mutex.h>
2022-06-10 14:34:23 +08:00
# include <linux/soc/mediatek/mtk-cmdq.h>
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
# define MT2701_MUTEX0_MOD0 0x2c
# define MT2701_MUTEX0_SOF0 0x30
2021-01-29 17:22:08 +08:00
# define MT8183_MUTEX0_MOD0 0x30
# define MT8183_MUTEX0_SOF0 0x2c
2019-08-29 22:50:30 +08:00
# define DISP_REG_MUTEX_EN(n) (0x20 + 0x20 * (n))
# define DISP_REG_MUTEX(n) (0x24 + 0x20 * (n))
# define DISP_REG_MUTEX_RST(n) (0x28 + 0x20 * (n))
# define DISP_REG_MUTEX_MOD(mutex_mod_reg, n) (mutex_mod_reg + 0x20 * (n))
2019-08-29 22:50:32 +08:00
# define DISP_REG_MUTEX_SOF(mutex_sof_reg, n) (mutex_sof_reg + 0x20 * (n))
2019-08-29 22:50:30 +08:00
# define DISP_REG_MUTEX_MOD2(n) (0x34 + 0x20 * (n))
2016-01-04 18:36:34 +01:00
2017-03-31 19:30:31 +08:00
# define INT_MUTEX BIT(1)
2022-02-22 13:28:02 +08:00
# define MT8186_MUTEX_MOD_DISP_OVL0 0
# define MT8186_MUTEX_MOD_DISP_OVL0_2L 1
# define MT8186_MUTEX_MOD_DISP_RDMA0 2
# define MT8186_MUTEX_MOD_DISP_COLOR0 4
# define MT8186_MUTEX_MOD_DISP_CCORR0 5
# define MT8186_MUTEX_MOD_DISP_AAL0 7
# define MT8186_MUTEX_MOD_DISP_GAMMA0 8
# define MT8186_MUTEX_MOD_DISP_POSTMASK0 9
# define MT8186_MUTEX_MOD_DISP_DITHER0 10
# define MT8186_MUTEX_MOD_DISP_RDMA1 17
# define MT8186_MUTEX_SOF_SINGLE_MODE 0
# define MT8186_MUTEX_SOF_DSI0 1
# define MT8186_MUTEX_SOF_DPI0 2
# define MT8186_MUTEX_EOF_DSI0 (MT8186_MUTEX_SOF_DSI0 << 6)
# define MT8186_MUTEX_EOF_DPI0 (MT8186_MUTEX_SOF_DPI0 << 6)
2020-10-23 15:31:29 +02:00
# define MT8167_MUTEX_MOD_DISP_PWM 1
# define MT8167_MUTEX_MOD_DISP_OVL0 6
# define MT8167_MUTEX_MOD_DISP_OVL1 7
# define MT8167_MUTEX_MOD_DISP_RDMA0 8
# define MT8167_MUTEX_MOD_DISP_RDMA1 9
# define MT8167_MUTEX_MOD_DISP_WDMA0 10
# define MT8167_MUTEX_MOD_DISP_CCORR 11
# define MT8167_MUTEX_MOD_DISP_COLOR 12
# define MT8167_MUTEX_MOD_DISP_AAL 13
# define MT8167_MUTEX_MOD_DISP_GAMMA 14
# define MT8167_MUTEX_MOD_DISP_DITHER 15
# define MT8167_MUTEX_MOD_DISP_UFOE 16
2021-09-30 23:52:21 +08:00
# define MT8192_MUTEX_MOD_DISP_OVL0 0
# define MT8192_MUTEX_MOD_DISP_OVL0_2L 1
# define MT8192_MUTEX_MOD_DISP_RDMA0 2
# define MT8192_MUTEX_MOD_DISP_COLOR0 4
# define MT8192_MUTEX_MOD_DISP_CCORR0 5
# define MT8192_MUTEX_MOD_DISP_AAL0 6
# define MT8192_MUTEX_MOD_DISP_GAMMA0 7
# define MT8192_MUTEX_MOD_DISP_POSTMASK0 8
# define MT8192_MUTEX_MOD_DISP_DITHER0 9
# define MT8192_MUTEX_MOD_DISP_OVL2_2L 16
# define MT8192_MUTEX_MOD_DISP_RDMA4 17
2021-01-29 17:22:08 +08:00
# define MT8183_MUTEX_MOD_DISP_RDMA0 0
# define MT8183_MUTEX_MOD_DISP_RDMA1 1
# define MT8183_MUTEX_MOD_DISP_OVL0 9
# define MT8183_MUTEX_MOD_DISP_OVL0_2L 10
# define MT8183_MUTEX_MOD_DISP_OVL1_2L 11
# define MT8183_MUTEX_MOD_DISP_WDMA0 12
# define MT8183_MUTEX_MOD_DISP_COLOR0 13
# define MT8183_MUTEX_MOD_DISP_CCORR0 14
# define MT8183_MUTEX_MOD_DISP_AAL0 15
# define MT8183_MUTEX_MOD_DISP_GAMMA0 16
# define MT8183_MUTEX_MOD_DISP_DITHER0 17
2022-06-10 14:34:19 +08:00
# define MT8183_MUTEX_MOD_MDP_RDMA0 2
# define MT8183_MUTEX_MOD_MDP_RSZ0 4
# define MT8183_MUTEX_MOD_MDP_RSZ1 5
# define MT8183_MUTEX_MOD_MDP_TDSHP0 6
# define MT8183_MUTEX_MOD_MDP_WROT0 7
# define MT8183_MUTEX_MOD_MDP_WDMA 8
# define MT8183_MUTEX_MOD_MDP_AAL0 23
# define MT8183_MUTEX_MOD_MDP_CCORR0 24
2022-09-01 01:21:51 +08:00
# define MT8186_MUTEX_MOD_MDP_RDMA0 0
# define MT8186_MUTEX_MOD_MDP_AAL0 2
# define MT8186_MUTEX_MOD_MDP_HDR0 4
# define MT8186_MUTEX_MOD_MDP_RSZ0 5
# define MT8186_MUTEX_MOD_MDP_RSZ1 6
# define MT8186_MUTEX_MOD_MDP_WROT0 7
# define MT8186_MUTEX_MOD_MDP_TDSHP0 9
# define MT8186_MUTEX_MOD_MDP_COLOR0 14
2018-06-20 16:19:04 +08:00
# define MT8173_MUTEX_MOD_DISP_OVL0 11
# define MT8173_MUTEX_MOD_DISP_OVL1 12
# define MT8173_MUTEX_MOD_DISP_RDMA0 13
# define MT8173_MUTEX_MOD_DISP_RDMA1 14
# define MT8173_MUTEX_MOD_DISP_RDMA2 15
# define MT8173_MUTEX_MOD_DISP_WDMA0 16
# define MT8173_MUTEX_MOD_DISP_WDMA1 17
# define MT8173_MUTEX_MOD_DISP_COLOR0 18
# define MT8173_MUTEX_MOD_DISP_COLOR1 19
# define MT8173_MUTEX_MOD_DISP_AAL 20
# define MT8173_MUTEX_MOD_DISP_GAMMA 21
# define MT8173_MUTEX_MOD_DISP_UFOE 22
# define MT8173_MUTEX_MOD_DISP_PWM0 23
# define MT8173_MUTEX_MOD_DISP_PWM1 24
# define MT8173_MUTEX_MOD_DISP_OD 25
2022-12-06 10:00:45 +08:00
# define MT8188_MUTEX_MOD_DISP_OVL0 0
# define MT8188_MUTEX_MOD_DISP_WDMA0 1
# define MT8188_MUTEX_MOD_DISP_RDMA0 2
# define MT8188_MUTEX_MOD_DISP_COLOR0 3
# define MT8188_MUTEX_MOD_DISP_CCORR0 4
# define MT8188_MUTEX_MOD_DISP_AAL0 5
# define MT8188_MUTEX_MOD_DISP_GAMMA0 6
# define MT8188_MUTEX_MOD_DISP_DITHER0 7
# define MT8188_MUTEX_MOD_DISP_DSI0 8
# define MT8188_MUTEX_MOD_DISP_DSC_WRAP0_CORE0 9
# define MT8188_MUTEX_MOD_DISP_VPP_MERGE 20
# define MT8188_MUTEX_MOD_DISP_DP_INTF0 21
# define MT8188_MUTEX_MOD_DISP_POSTMASK0 24
# define MT8188_MUTEX_MOD2_DISP_PWM0 33
2022-04-19 17:41:37 +08:00
# define MT8195_MUTEX_MOD_DISP_OVL0 0
# define MT8195_MUTEX_MOD_DISP_WDMA0 1
# define MT8195_MUTEX_MOD_DISP_RDMA0 2
# define MT8195_MUTEX_MOD_DISP_COLOR0 3
# define MT8195_MUTEX_MOD_DISP_CCORR0 4
# define MT8195_MUTEX_MOD_DISP_AAL0 5
# define MT8195_MUTEX_MOD_DISP_GAMMA0 6
# define MT8195_MUTEX_MOD_DISP_DITHER0 7
# define MT8195_MUTEX_MOD_DISP_DSI0 8
# define MT8195_MUTEX_MOD_DISP_DSC_WRAP0_CORE0 9
# define MT8195_MUTEX_MOD_DISP_VPP_MERGE 20
# define MT8195_MUTEX_MOD_DISP_DP_INTF0 21
# define MT8195_MUTEX_MOD_DISP_PWM0 27
2023-01-13 18:44:34 +08:00
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA0 0
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA1 1
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA2 2
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA3 3
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA4 4
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA5 5
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA6 6
# define MT8195_MUTEX_MOD_DISP1_MDP_RDMA7 7
# define MT8195_MUTEX_MOD_DISP1_VPP_MERGE0 8
# define MT8195_MUTEX_MOD_DISP1_VPP_MERGE1 9
# define MT8195_MUTEX_MOD_DISP1_VPP_MERGE2 10
# define MT8195_MUTEX_MOD_DISP1_VPP_MERGE3 11
# define MT8195_MUTEX_MOD_DISP1_VPP_MERGE4 12
# define MT8195_MUTEX_MOD_DISP1_DISP_MIXER 18
# define MT8195_MUTEX_MOD_DISP1_DPI0 25
# define MT8195_MUTEX_MOD_DISP1_DPI1 26
# define MT8195_MUTEX_MOD_DISP1_DP_INTF0 27
2022-05-30 22:14:33 +02:00
# define MT8365_MUTEX_MOD_DISP_OVL0 7
# define MT8365_MUTEX_MOD_DISP_OVL0_2L 8
# define MT8365_MUTEX_MOD_DISP_RDMA0 9
# define MT8365_MUTEX_MOD_DISP_RDMA1 10
# define MT8365_MUTEX_MOD_DISP_WDMA0 11
# define MT8365_MUTEX_MOD_DISP_COLOR0 12
# define MT8365_MUTEX_MOD_DISP_CCORR 13
# define MT8365_MUTEX_MOD_DISP_AAL 14
# define MT8365_MUTEX_MOD_DISP_GAMMA 15
# define MT8365_MUTEX_MOD_DISP_DITHER 16
# define MT8365_MUTEX_MOD_DISP_DSI0 17
# define MT8365_MUTEX_MOD_DISP_PWM0 20
# define MT8365_MUTEX_MOD_DISP_DPI0 22
2018-06-20 16:19:31 +08:00
# define MT2712_MUTEX_MOD_DISP_PWM2 10
# define MT2712_MUTEX_MOD_DISP_OVL0 11
# define MT2712_MUTEX_MOD_DISP_OVL1 12
# define MT2712_MUTEX_MOD_DISP_RDMA0 13
# define MT2712_MUTEX_MOD_DISP_RDMA1 14
# define MT2712_MUTEX_MOD_DISP_RDMA2 15
# define MT2712_MUTEX_MOD_DISP_WDMA0 16
# define MT2712_MUTEX_MOD_DISP_WDMA1 17
# define MT2712_MUTEX_MOD_DISP_COLOR0 18
# define MT2712_MUTEX_MOD_DISP_COLOR1 19
# define MT2712_MUTEX_MOD_DISP_AAL0 20
# define MT2712_MUTEX_MOD_DISP_UFOE 22
# define MT2712_MUTEX_MOD_DISP_PWM0 23
# define MT2712_MUTEX_MOD_DISP_PWM1 24
# define MT2712_MUTEX_MOD_DISP_OD0 25
# define MT2712_MUTEX_MOD2_DISP_AAL1 33
# define MT2712_MUTEX_MOD2_DISP_OD1 34
2018-06-20 16:19:04 +08:00
# define MT2701_MUTEX_MOD_DISP_OVL 3
# define MT2701_MUTEX_MOD_DISP_WDMA 6
# define MT2701_MUTEX_MOD_DISP_COLOR 7
# define MT2701_MUTEX_MOD_DISP_BLS 9
# define MT2701_MUTEX_MOD_DISP_RDMA0 10
# define MT2701_MUTEX_MOD_DISP_RDMA1 12
2017-03-31 19:30:39 +08:00
2020-07-21 11:24:36 +08:00
# define MT2712_MUTEX_SOF_SINGLE_MODE 0
# define MT2712_MUTEX_SOF_DSI0 1
# define MT2712_MUTEX_SOF_DSI1 2
# define MT2712_MUTEX_SOF_DPI0 3
# define MT2712_MUTEX_SOF_DPI1 4
# define MT2712_MUTEX_SOF_DSI2 5
# define MT2712_MUTEX_SOF_DSI3 6
# define MT8167_MUTEX_SOF_DPI0 2
# define MT8167_MUTEX_SOF_DPI1 3
2021-01-29 17:22:08 +08:00
# define MT8183_MUTEX_SOF_DSI0 1
# define MT8183_MUTEX_SOF_DPI0 2
2022-12-06 10:00:45 +08:00
# define MT8188_MUTEX_SOF_DSI0 1
# define MT8188_MUTEX_SOF_DP_INTF0 3
2022-04-19 17:41:37 +08:00
# define MT8195_MUTEX_SOF_DSI0 1
# define MT8195_MUTEX_SOF_DSI1 2
# define MT8195_MUTEX_SOF_DP_INTF0 3
# define MT8195_MUTEX_SOF_DP_INTF1 4
# define MT8195_MUTEX_SOF_DPI0 6 /* for HDMI_TX */
# define MT8195_MUTEX_SOF_DPI1 5 /* for digital video out */
2021-01-29 17:22:08 +08:00
# define MT8183_MUTEX_EOF_DSI0 (MT8183_MUTEX_SOF_DSI0 << 6)
# define MT8183_MUTEX_EOF_DPI0 (MT8183_MUTEX_SOF_DPI0 << 6)
2022-12-06 10:00:45 +08:00
# define MT8188_MUTEX_EOF_DSI0 (MT8188_MUTEX_SOF_DSI0 << 7)
# define MT8188_MUTEX_EOF_DP_INTF0 (MT8188_MUTEX_SOF_DP_INTF0 << 7)
2022-04-19 17:41:37 +08:00
# define MT8195_MUTEX_EOF_DSI0 (MT8195_MUTEX_SOF_DSI0 << 7)
# define MT8195_MUTEX_EOF_DSI1 (MT8195_MUTEX_SOF_DSI1 << 7)
# define MT8195_MUTEX_EOF_DP_INTF0 (MT8195_MUTEX_SOF_DP_INTF0 << 7)
# define MT8195_MUTEX_EOF_DP_INTF1 (MT8195_MUTEX_SOF_DP_INTF1 << 7)
# define MT8195_MUTEX_EOF_DPI0 (MT8195_MUTEX_SOF_DPI0 << 7)
# define MT8195_MUTEX_EOF_DPI1 (MT8195_MUTEX_SOF_DPI1 << 7)
2020-07-21 11:24:36 +08:00
struct mtk_mutex {
2016-01-04 18:36:34 +01:00
int id ;
bool claimed ;
} ;
2020-07-21 11:24:36 +08:00
enum mtk_mutex_sof_id {
MUTEX_SOF_SINGLE_MODE ,
MUTEX_SOF_DSI0 ,
MUTEX_SOF_DSI1 ,
MUTEX_SOF_DPI0 ,
MUTEX_SOF_DPI1 ,
MUTEX_SOF_DSI2 ,
MUTEX_SOF_DSI3 ,
2022-04-19 17:41:37 +08:00
MUTEX_SOF_DP_INTF0 ,
MUTEX_SOF_DP_INTF1 ,
DDP_MUTEX_SOF_MAX ,
2019-08-29 22:50:31 +08:00
} ;
2020-07-21 11:24:36 +08:00
struct mtk_mutex_data {
2019-08-29 22:50:29 +08:00
const unsigned int * mutex_mod ;
2019-08-29 22:50:31 +08:00
const unsigned int * mutex_sof ;
2019-08-29 22:50:30 +08:00
const unsigned int mutex_mod_reg ;
2019-08-29 22:50:32 +08:00
const unsigned int mutex_sof_reg ;
2022-06-10 14:34:18 +08:00
const unsigned int * mutex_table_mod ;
2019-10-09 16:37:47 +08:00
const bool no_clk ;
2019-08-29 22:50:29 +08:00
} ;
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx {
2016-01-04 18:36:34 +01:00
struct device * dev ;
struct clk * clk ;
void __iomem * regs ;
2020-07-21 11:24:36 +08:00
struct mtk_mutex mutex [ 10 ] ;
const struct mtk_mutex_data * data ;
2022-06-10 14:34:23 +08:00
phys_addr_t addr ;
struct cmdq_client_reg cmdq_reg ;
2016-01-04 18:36:34 +01:00
} ;
2017-03-31 19:30:39 +08:00
static const unsigned int mt2701_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_BLS ] = MT2701_MUTEX_MOD_DISP_BLS ,
[ DDP_COMPONENT_COLOR0 ] = MT2701_MUTEX_MOD_DISP_COLOR ,
[ DDP_COMPONENT_OVL0 ] = MT2701_MUTEX_MOD_DISP_OVL ,
[ DDP_COMPONENT_RDMA0 ] = MT2701_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA1 ] = MT2701_MUTEX_MOD_DISP_RDMA1 ,
[ DDP_COMPONENT_WDMA0 ] = MT2701_MUTEX_MOD_DISP_WDMA ,
} ;
2018-06-20 16:19:31 +08:00
static const unsigned int mt2712_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_AAL0 ] = MT2712_MUTEX_MOD_DISP_AAL0 ,
[ DDP_COMPONENT_AAL1 ] = MT2712_MUTEX_MOD2_DISP_AAL1 ,
[ DDP_COMPONENT_COLOR0 ] = MT2712_MUTEX_MOD_DISP_COLOR0 ,
[ DDP_COMPONENT_COLOR1 ] = MT2712_MUTEX_MOD_DISP_COLOR1 ,
[ DDP_COMPONENT_OD0 ] = MT2712_MUTEX_MOD_DISP_OD0 ,
[ DDP_COMPONENT_OD1 ] = MT2712_MUTEX_MOD2_DISP_OD1 ,
[ DDP_COMPONENT_OVL0 ] = MT2712_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_OVL1 ] = MT2712_MUTEX_MOD_DISP_OVL1 ,
[ DDP_COMPONENT_PWM0 ] = MT2712_MUTEX_MOD_DISP_PWM0 ,
[ DDP_COMPONENT_PWM1 ] = MT2712_MUTEX_MOD_DISP_PWM1 ,
[ DDP_COMPONENT_PWM2 ] = MT2712_MUTEX_MOD_DISP_PWM2 ,
[ DDP_COMPONENT_RDMA0 ] = MT2712_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA1 ] = MT2712_MUTEX_MOD_DISP_RDMA1 ,
[ DDP_COMPONENT_RDMA2 ] = MT2712_MUTEX_MOD_DISP_RDMA2 ,
[ DDP_COMPONENT_UFOE ] = MT2712_MUTEX_MOD_DISP_UFOE ,
[ DDP_COMPONENT_WDMA0 ] = MT2712_MUTEX_MOD_DISP_WDMA0 ,
[ DDP_COMPONENT_WDMA1 ] = MT2712_MUTEX_MOD_DISP_WDMA1 ,
} ;
2020-10-23 15:31:29 +02:00
static const unsigned int mt8167_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_AAL0 ] = MT8167_MUTEX_MOD_DISP_AAL ,
[ DDP_COMPONENT_CCORR ] = MT8167_MUTEX_MOD_DISP_CCORR ,
[ DDP_COMPONENT_COLOR0 ] = MT8167_MUTEX_MOD_DISP_COLOR ,
2022-04-19 17:41:41 +08:00
[ DDP_COMPONENT_DITHER0 ] = MT8167_MUTEX_MOD_DISP_DITHER ,
2020-10-23 15:31:29 +02:00
[ DDP_COMPONENT_GAMMA ] = MT8167_MUTEX_MOD_DISP_GAMMA ,
[ DDP_COMPONENT_OVL0 ] = MT8167_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_OVL1 ] = MT8167_MUTEX_MOD_DISP_OVL1 ,
[ DDP_COMPONENT_PWM0 ] = MT8167_MUTEX_MOD_DISP_PWM ,
[ DDP_COMPONENT_RDMA0 ] = MT8167_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA1 ] = MT8167_MUTEX_MOD_DISP_RDMA1 ,
[ DDP_COMPONENT_UFOE ] = MT8167_MUTEX_MOD_DISP_UFOE ,
[ DDP_COMPONENT_WDMA0 ] = MT8167_MUTEX_MOD_DISP_WDMA0 ,
} ;
2017-03-31 19:30:30 +08:00
static const unsigned int mt8173_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
2018-06-20 16:19:05 +08:00
[ DDP_COMPONENT_AAL0 ] = MT8173_MUTEX_MOD_DISP_AAL ,
2017-03-31 19:30:30 +08:00
[ DDP_COMPONENT_COLOR0 ] = MT8173_MUTEX_MOD_DISP_COLOR0 ,
[ DDP_COMPONENT_COLOR1 ] = MT8173_MUTEX_MOD_DISP_COLOR1 ,
[ DDP_COMPONENT_GAMMA ] = MT8173_MUTEX_MOD_DISP_GAMMA ,
2018-06-20 16:19:06 +08:00
[ DDP_COMPONENT_OD0 ] = MT8173_MUTEX_MOD_DISP_OD ,
2017-03-31 19:30:30 +08:00
[ DDP_COMPONENT_OVL0 ] = MT8173_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_OVL1 ] = MT8173_MUTEX_MOD_DISP_OVL1 ,
[ DDP_COMPONENT_PWM0 ] = MT8173_MUTEX_MOD_DISP_PWM0 ,
[ DDP_COMPONENT_PWM1 ] = MT8173_MUTEX_MOD_DISP_PWM1 ,
[ DDP_COMPONENT_RDMA0 ] = MT8173_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA1 ] = MT8173_MUTEX_MOD_DISP_RDMA1 ,
[ DDP_COMPONENT_RDMA2 ] = MT8173_MUTEX_MOD_DISP_RDMA2 ,
[ DDP_COMPONENT_UFOE ] = MT8173_MUTEX_MOD_DISP_UFOE ,
[ DDP_COMPONENT_WDMA0 ] = MT8173_MUTEX_MOD_DISP_WDMA0 ,
[ DDP_COMPONENT_WDMA1 ] = MT8173_MUTEX_MOD_DISP_WDMA1 ,
2016-01-04 18:36:34 +01:00
} ;
2021-01-29 17:22:08 +08:00
static const unsigned int mt8183_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_AAL0 ] = MT8183_MUTEX_MOD_DISP_AAL0 ,
[ DDP_COMPONENT_CCORR ] = MT8183_MUTEX_MOD_DISP_CCORR0 ,
[ DDP_COMPONENT_COLOR0 ] = MT8183_MUTEX_MOD_DISP_COLOR0 ,
2022-04-19 17:41:41 +08:00
[ DDP_COMPONENT_DITHER0 ] = MT8183_MUTEX_MOD_DISP_DITHER0 ,
2021-01-29 17:22:08 +08:00
[ DDP_COMPONENT_GAMMA ] = MT8183_MUTEX_MOD_DISP_GAMMA0 ,
[ DDP_COMPONENT_OVL0 ] = MT8183_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_OVL_2L0 ] = MT8183_MUTEX_MOD_DISP_OVL0_2L ,
[ DDP_COMPONENT_OVL_2L1 ] = MT8183_MUTEX_MOD_DISP_OVL1_2L ,
[ DDP_COMPONENT_RDMA0 ] = MT8183_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA1 ] = MT8183_MUTEX_MOD_DISP_RDMA1 ,
[ DDP_COMPONENT_WDMA0 ] = MT8183_MUTEX_MOD_DISP_WDMA0 ,
} ;
2022-06-10 14:34:19 +08:00
static const unsigned int mt8183_mutex_table_mod [ MUTEX_MOD_IDX_MAX ] = {
[ MUTEX_MOD_IDX_MDP_RDMA0 ] = MT8183_MUTEX_MOD_MDP_RDMA0 ,
[ MUTEX_MOD_IDX_MDP_RSZ0 ] = MT8183_MUTEX_MOD_MDP_RSZ0 ,
[ MUTEX_MOD_IDX_MDP_RSZ1 ] = MT8183_MUTEX_MOD_MDP_RSZ1 ,
[ MUTEX_MOD_IDX_MDP_TDSHP0 ] = MT8183_MUTEX_MOD_MDP_TDSHP0 ,
[ MUTEX_MOD_IDX_MDP_WROT0 ] = MT8183_MUTEX_MOD_MDP_WROT0 ,
[ MUTEX_MOD_IDX_MDP_WDMA ] = MT8183_MUTEX_MOD_MDP_WDMA ,
[ MUTEX_MOD_IDX_MDP_AAL0 ] = MT8183_MUTEX_MOD_MDP_AAL0 ,
[ MUTEX_MOD_IDX_MDP_CCORR0 ] = MT8183_MUTEX_MOD_MDP_CCORR0 ,
} ;
2022-02-22 13:28:02 +08:00
static const unsigned int mt8186_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_AAL0 ] = MT8186_MUTEX_MOD_DISP_AAL0 ,
[ DDP_COMPONENT_CCORR ] = MT8186_MUTEX_MOD_DISP_CCORR0 ,
[ DDP_COMPONENT_COLOR0 ] = MT8186_MUTEX_MOD_DISP_COLOR0 ,
2022-04-19 17:41:41 +08:00
[ DDP_COMPONENT_DITHER0 ] = MT8186_MUTEX_MOD_DISP_DITHER0 ,
2022-02-22 13:28:02 +08:00
[ DDP_COMPONENT_GAMMA ] = MT8186_MUTEX_MOD_DISP_GAMMA0 ,
[ DDP_COMPONENT_OVL0 ] = MT8186_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_OVL_2L0 ] = MT8186_MUTEX_MOD_DISP_OVL0_2L ,
[ DDP_COMPONENT_POSTMASK0 ] = MT8186_MUTEX_MOD_DISP_POSTMASK0 ,
[ DDP_COMPONENT_RDMA0 ] = MT8186_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA1 ] = MT8186_MUTEX_MOD_DISP_RDMA1 ,
} ;
2022-09-01 01:21:51 +08:00
static const unsigned int mt8186_mdp_mutex_table_mod [ MUTEX_MOD_IDX_MAX ] = {
[ MUTEX_MOD_IDX_MDP_RDMA0 ] = MT8186_MUTEX_MOD_MDP_RDMA0 ,
[ MUTEX_MOD_IDX_MDP_RSZ0 ] = MT8186_MUTEX_MOD_MDP_RSZ0 ,
[ MUTEX_MOD_IDX_MDP_RSZ1 ] = MT8186_MUTEX_MOD_MDP_RSZ1 ,
[ MUTEX_MOD_IDX_MDP_TDSHP0 ] = MT8186_MUTEX_MOD_MDP_TDSHP0 ,
[ MUTEX_MOD_IDX_MDP_WROT0 ] = MT8186_MUTEX_MOD_MDP_WROT0 ,
[ MUTEX_MOD_IDX_MDP_HDR0 ] = MT8186_MUTEX_MOD_MDP_HDR0 ,
[ MUTEX_MOD_IDX_MDP_AAL0 ] = MT8186_MUTEX_MOD_MDP_AAL0 ,
[ MUTEX_MOD_IDX_MDP_COLOR0 ] = MT8186_MUTEX_MOD_MDP_COLOR0 ,
} ;
2022-12-06 10:00:45 +08:00
static const unsigned int mt8188_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_OVL0 ] = MT8188_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_WDMA0 ] = MT8188_MUTEX_MOD_DISP_WDMA0 ,
[ DDP_COMPONENT_RDMA0 ] = MT8188_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_COLOR0 ] = MT8188_MUTEX_MOD_DISP_COLOR0 ,
[ DDP_COMPONENT_CCORR ] = MT8188_MUTEX_MOD_DISP_CCORR0 ,
[ DDP_COMPONENT_AAL0 ] = MT8188_MUTEX_MOD_DISP_AAL0 ,
[ DDP_COMPONENT_GAMMA ] = MT8188_MUTEX_MOD_DISP_GAMMA0 ,
[ DDP_COMPONENT_POSTMASK0 ] = MT8188_MUTEX_MOD_DISP_POSTMASK0 ,
[ DDP_COMPONENT_DITHER0 ] = MT8188_MUTEX_MOD_DISP_DITHER0 ,
[ DDP_COMPONENT_MERGE0 ] = MT8188_MUTEX_MOD_DISP_VPP_MERGE ,
[ DDP_COMPONENT_DSC0 ] = MT8188_MUTEX_MOD_DISP_DSC_WRAP0_CORE0 ,
[ DDP_COMPONENT_DSI0 ] = MT8188_MUTEX_MOD_DISP_DSI0 ,
[ DDP_COMPONENT_PWM0 ] = MT8188_MUTEX_MOD2_DISP_PWM0 ,
[ DDP_COMPONENT_DP_INTF0 ] = MT8188_MUTEX_MOD_DISP_DP_INTF0 ,
} ;
2021-09-30 23:52:21 +08:00
static const unsigned int mt8192_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_AAL0 ] = MT8192_MUTEX_MOD_DISP_AAL0 ,
[ DDP_COMPONENT_CCORR ] = MT8192_MUTEX_MOD_DISP_CCORR0 ,
[ DDP_COMPONENT_COLOR0 ] = MT8192_MUTEX_MOD_DISP_COLOR0 ,
2022-04-19 17:41:41 +08:00
[ DDP_COMPONENT_DITHER0 ] = MT8192_MUTEX_MOD_DISP_DITHER0 ,
2021-09-30 23:52:21 +08:00
[ DDP_COMPONENT_GAMMA ] = MT8192_MUTEX_MOD_DISP_GAMMA0 ,
[ DDP_COMPONENT_POSTMASK0 ] = MT8192_MUTEX_MOD_DISP_POSTMASK0 ,
[ DDP_COMPONENT_OVL0 ] = MT8192_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_OVL_2L0 ] = MT8192_MUTEX_MOD_DISP_OVL0_2L ,
[ DDP_COMPONENT_OVL_2L2 ] = MT8192_MUTEX_MOD_DISP_OVL2_2L ,
[ DDP_COMPONENT_RDMA0 ] = MT8192_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA4 ] = MT8192_MUTEX_MOD_DISP_RDMA4 ,
} ;
2022-04-19 17:41:37 +08:00
static const unsigned int mt8195_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_OVL0 ] = MT8195_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_WDMA0 ] = MT8195_MUTEX_MOD_DISP_WDMA0 ,
[ DDP_COMPONENT_RDMA0 ] = MT8195_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_COLOR0 ] = MT8195_MUTEX_MOD_DISP_COLOR0 ,
[ DDP_COMPONENT_CCORR ] = MT8195_MUTEX_MOD_DISP_CCORR0 ,
[ DDP_COMPONENT_AAL0 ] = MT8195_MUTEX_MOD_DISP_AAL0 ,
[ DDP_COMPONENT_GAMMA ] = MT8195_MUTEX_MOD_DISP_GAMMA0 ,
2022-04-19 17:41:41 +08:00
[ DDP_COMPONENT_DITHER0 ] = MT8195_MUTEX_MOD_DISP_DITHER0 ,
2022-04-19 17:41:37 +08:00
[ DDP_COMPONENT_MERGE0 ] = MT8195_MUTEX_MOD_DISP_VPP_MERGE ,
[ DDP_COMPONENT_DSC0 ] = MT8195_MUTEX_MOD_DISP_DSC_WRAP0_CORE0 ,
[ DDP_COMPONENT_DSI0 ] = MT8195_MUTEX_MOD_DISP_DSI0 ,
[ DDP_COMPONENT_PWM0 ] = MT8195_MUTEX_MOD_DISP_PWM0 ,
[ DDP_COMPONENT_DP_INTF0 ] = MT8195_MUTEX_MOD_DISP_DP_INTF0 ,
2023-01-13 18:44:34 +08:00
[ DDP_COMPONENT_MDP_RDMA0 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA0 ,
[ DDP_COMPONENT_MDP_RDMA1 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA1 ,
[ DDP_COMPONENT_MDP_RDMA2 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA2 ,
[ DDP_COMPONENT_MDP_RDMA3 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA3 ,
[ DDP_COMPONENT_MDP_RDMA4 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA4 ,
[ DDP_COMPONENT_MDP_RDMA5 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA5 ,
[ DDP_COMPONENT_MDP_RDMA6 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA6 ,
[ DDP_COMPONENT_MDP_RDMA7 ] = MT8195_MUTEX_MOD_DISP1_MDP_RDMA7 ,
[ DDP_COMPONENT_MERGE1 ] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE0 ,
[ DDP_COMPONENT_MERGE2 ] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE1 ,
[ DDP_COMPONENT_MERGE3 ] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE2 ,
[ DDP_COMPONENT_MERGE4 ] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE3 ,
[ DDP_COMPONENT_ETHDR_MIXER ] = MT8195_MUTEX_MOD_DISP1_DISP_MIXER ,
[ DDP_COMPONENT_MERGE5 ] = MT8195_MUTEX_MOD_DISP1_VPP_MERGE4 ,
[ DDP_COMPONENT_DP_INTF1 ] = MT8195_MUTEX_MOD_DISP1_DP_INTF0 ,
2022-04-19 17:41:37 +08:00
} ;
2022-05-30 22:14:33 +02:00
static const unsigned int mt8365_mutex_mod [ DDP_COMPONENT_ID_MAX ] = {
[ DDP_COMPONENT_AAL0 ] = MT8365_MUTEX_MOD_DISP_AAL ,
[ DDP_COMPONENT_CCORR ] = MT8365_MUTEX_MOD_DISP_CCORR ,
[ DDP_COMPONENT_COLOR0 ] = MT8365_MUTEX_MOD_DISP_COLOR0 ,
2022-06-20 12:24:54 +02:00
[ DDP_COMPONENT_DITHER0 ] = MT8365_MUTEX_MOD_DISP_DITHER ,
2022-05-30 22:14:33 +02:00
[ DDP_COMPONENT_DPI0 ] = MT8365_MUTEX_MOD_DISP_DPI0 ,
[ DDP_COMPONENT_DSI0 ] = MT8365_MUTEX_MOD_DISP_DSI0 ,
[ DDP_COMPONENT_GAMMA ] = MT8365_MUTEX_MOD_DISP_GAMMA ,
[ DDP_COMPONENT_OVL0 ] = MT8365_MUTEX_MOD_DISP_OVL0 ,
[ DDP_COMPONENT_OVL_2L0 ] = MT8365_MUTEX_MOD_DISP_OVL0_2L ,
[ DDP_COMPONENT_PWM0 ] = MT8365_MUTEX_MOD_DISP_PWM0 ,
[ DDP_COMPONENT_RDMA0 ] = MT8365_MUTEX_MOD_DISP_RDMA0 ,
[ DDP_COMPONENT_RDMA1 ] = MT8365_MUTEX_MOD_DISP_RDMA1 ,
[ DDP_COMPONENT_WDMA0 ] = MT8365_MUTEX_MOD_DISP_WDMA0 ,
} ;
2022-04-19 17:41:37 +08:00
static const unsigned int mt2712_mutex_sof [ DDP_MUTEX_SOF_MAX ] = {
2020-07-21 11:24:36 +08:00
[ MUTEX_SOF_SINGLE_MODE ] = MUTEX_SOF_SINGLE_MODE ,
[ MUTEX_SOF_DSI0 ] = MUTEX_SOF_DSI0 ,
[ MUTEX_SOF_DSI1 ] = MUTEX_SOF_DSI1 ,
[ MUTEX_SOF_DPI0 ] = MUTEX_SOF_DPI0 ,
[ MUTEX_SOF_DPI1 ] = MUTEX_SOF_DPI1 ,
[ MUTEX_SOF_DSI2 ] = MUTEX_SOF_DSI2 ,
[ MUTEX_SOF_DSI3 ] = MUTEX_SOF_DSI3 ,
2019-08-29 22:50:31 +08:00
} ;
2022-09-13 16:01:21 +02:00
static const unsigned int mt6795_mutex_sof [ DDP_MUTEX_SOF_MAX ] = {
[ MUTEX_SOF_SINGLE_MODE ] = MUTEX_SOF_SINGLE_MODE ,
[ MUTEX_SOF_DSI0 ] = MUTEX_SOF_DSI0 ,
[ MUTEX_SOF_DSI1 ] = MUTEX_SOF_DSI1 ,
[ MUTEX_SOF_DPI0 ] = MUTEX_SOF_DPI0 ,
} ;
2022-04-19 17:41:37 +08:00
static const unsigned int mt8167_mutex_sof [ DDP_MUTEX_SOF_MAX ] = {
2020-07-21 11:24:36 +08:00
[ MUTEX_SOF_SINGLE_MODE ] = MUTEX_SOF_SINGLE_MODE ,
[ MUTEX_SOF_DSI0 ] = MUTEX_SOF_DSI0 ,
[ MUTEX_SOF_DPI0 ] = MT8167_MUTEX_SOF_DPI0 ,
[ MUTEX_SOF_DPI1 ] = MT8167_MUTEX_SOF_DPI1 ,
2020-10-23 15:31:29 +02:00
} ;
2021-01-29 17:22:08 +08:00
/* Add EOF setting so overlay hardware can receive frame done irq */
2022-04-19 17:41:37 +08:00
static const unsigned int mt8183_mutex_sof [ DDP_MUTEX_SOF_MAX ] = {
2021-01-29 17:22:08 +08:00
[ MUTEX_SOF_SINGLE_MODE ] = MUTEX_SOF_SINGLE_MODE ,
[ MUTEX_SOF_DSI0 ] = MUTEX_SOF_DSI0 | MT8183_MUTEX_EOF_DSI0 ,
[ MUTEX_SOF_DPI0 ] = MT8183_MUTEX_SOF_DPI0 | MT8183_MUTEX_EOF_DPI0 ,
} ;
2022-02-22 13:28:02 +08:00
static const unsigned int mt8186_mutex_sof [ MUTEX_SOF_DSI3 + 1 ] = {
[ MUTEX_SOF_SINGLE_MODE ] = MUTEX_SOF_SINGLE_MODE ,
[ MUTEX_SOF_DSI0 ] = MT8186_MUTEX_SOF_DSI0 | MT8186_MUTEX_EOF_DSI0 ,
[ MUTEX_SOF_DPI0 ] = MT8186_MUTEX_SOF_DPI0 | MT8186_MUTEX_EOF_DPI0 ,
} ;
2022-04-19 17:41:37 +08:00
/*
* To support refresh mode ( video mode ) , DISP_REG_MUTEX_SOF should
* select the EOF source and configure the EOF plus timing from the
* module that provides the timing signal .
* So that MUTEX can not only send a STREAM_DONE event to GCE
* but also detect the error at end of frame ( EAEOF ) when EOF signal
* arrives .
*/
2022-12-06 10:00:45 +08:00
static const unsigned int mt8188_mutex_sof [ DDP_MUTEX_SOF_MAX ] = {
[ MUTEX_SOF_SINGLE_MODE ] = MUTEX_SOF_SINGLE_MODE ,
[ MUTEX_SOF_DSI0 ] =
MT8188_MUTEX_SOF_DSI0 | MT8188_MUTEX_EOF_DSI0 ,
[ MUTEX_SOF_DP_INTF0 ] =
MT8188_MUTEX_SOF_DP_INTF0 | MT8188_MUTEX_EOF_DP_INTF0 ,
} ;
2022-04-19 17:41:37 +08:00
static const unsigned int mt8195_mutex_sof [ DDP_MUTEX_SOF_MAX ] = {
[ MUTEX_SOF_SINGLE_MODE ] = MUTEX_SOF_SINGLE_MODE ,
[ MUTEX_SOF_DSI0 ] = MT8195_MUTEX_SOF_DSI0 | MT8195_MUTEX_EOF_DSI0 ,
[ MUTEX_SOF_DSI1 ] = MT8195_MUTEX_SOF_DSI1 | MT8195_MUTEX_EOF_DSI1 ,
[ MUTEX_SOF_DPI0 ] = MT8195_MUTEX_SOF_DPI0 | MT8195_MUTEX_EOF_DPI0 ,
[ MUTEX_SOF_DPI1 ] = MT8195_MUTEX_SOF_DPI1 | MT8195_MUTEX_EOF_DPI1 ,
[ MUTEX_SOF_DP_INTF0 ] =
MT8195_MUTEX_SOF_DP_INTF0 | MT8195_MUTEX_EOF_DP_INTF0 ,
[ MUTEX_SOF_DP_INTF1 ] =
MT8195_MUTEX_SOF_DP_INTF1 | MT8195_MUTEX_EOF_DP_INTF1 ,
} ;
2020-07-21 11:24:36 +08:00
static const struct mtk_mutex_data mt2701_mutex_driver_data = {
2019-08-29 22:50:29 +08:00
. mutex_mod = mt2701_mutex_mod ,
2019-08-29 22:50:31 +08:00
. mutex_sof = mt2712_mutex_sof ,
2020-07-21 11:24:36 +08:00
. mutex_mod_reg = MT2701_MUTEX0_MOD0 ,
. mutex_sof_reg = MT2701_MUTEX0_SOF0 ,
2019-08-29 22:50:29 +08:00
} ;
2020-07-21 11:24:36 +08:00
static const struct mtk_mutex_data mt2712_mutex_driver_data = {
2019-08-29 22:50:29 +08:00
. mutex_mod = mt2712_mutex_mod ,
2019-08-29 22:50:31 +08:00
. mutex_sof = mt2712_mutex_sof ,
2020-07-21 11:24:36 +08:00
. mutex_mod_reg = MT2701_MUTEX0_MOD0 ,
. mutex_sof_reg = MT2701_MUTEX0_SOF0 ,
2019-08-29 22:50:29 +08:00
} ;
2022-09-13 16:01:21 +02:00
static const struct mtk_mutex_data mt6795_mutex_driver_data = {
. mutex_mod = mt8173_mutex_mod ,
. mutex_sof = mt6795_mutex_sof ,
. mutex_mod_reg = MT2701_MUTEX0_MOD0 ,
. mutex_sof_reg = MT2701_MUTEX0_SOF0 ,
} ;
2020-07-21 11:24:36 +08:00
static const struct mtk_mutex_data mt8167_mutex_driver_data = {
2020-10-23 15:31:29 +02:00
. mutex_mod = mt8167_mutex_mod ,
. mutex_sof = mt8167_mutex_sof ,
2020-07-21 11:24:36 +08:00
. mutex_mod_reg = MT2701_MUTEX0_MOD0 ,
. mutex_sof_reg = MT2701_MUTEX0_SOF0 ,
2020-10-23 15:31:29 +02:00
. no_clk = true ,
} ;
2020-07-21 11:24:36 +08:00
static const struct mtk_mutex_data mt8173_mutex_driver_data = {
2019-08-29 22:50:29 +08:00
. mutex_mod = mt8173_mutex_mod ,
2019-08-29 22:50:31 +08:00
. mutex_sof = mt2712_mutex_sof ,
2020-07-21 11:24:36 +08:00
. mutex_mod_reg = MT2701_MUTEX0_MOD0 ,
. mutex_sof_reg = MT2701_MUTEX0_SOF0 ,
2019-08-29 22:50:29 +08:00
} ;
2021-01-29 17:22:08 +08:00
static const struct mtk_mutex_data mt8183_mutex_driver_data = {
. mutex_mod = mt8183_mutex_mod ,
. mutex_sof = mt8183_mutex_sof ,
. mutex_mod_reg = MT8183_MUTEX0_MOD0 ,
. mutex_sof_reg = MT8183_MUTEX0_SOF0 ,
2022-06-10 14:34:19 +08:00
. mutex_table_mod = mt8183_mutex_table_mod ,
2021-01-29 17:22:08 +08:00
. no_clk = true ,
} ;
2022-09-01 01:21:51 +08:00
static const struct mtk_mutex_data mt8186_mdp_mutex_driver_data = {
. mutex_mod_reg = MT8183_MUTEX0_MOD0 ,
. mutex_sof_reg = MT8183_MUTEX0_SOF0 ,
. mutex_table_mod = mt8186_mdp_mutex_table_mod ,
} ;
2022-02-22 13:28:02 +08:00
static const struct mtk_mutex_data mt8186_mutex_driver_data = {
. mutex_mod = mt8186_mutex_mod ,
. mutex_sof = mt8186_mutex_sof ,
. mutex_mod_reg = MT8183_MUTEX0_MOD0 ,
. mutex_sof_reg = MT8183_MUTEX0_SOF0 ,
} ;
2022-12-06 10:00:45 +08:00
static const struct mtk_mutex_data mt8188_mutex_driver_data = {
. mutex_mod = mt8188_mutex_mod ,
. mutex_sof = mt8188_mutex_sof ,
. mutex_mod_reg = MT8183_MUTEX0_MOD0 ,
. mutex_sof_reg = MT8183_MUTEX0_SOF0 ,
} ;
2021-09-30 23:52:21 +08:00
static const struct mtk_mutex_data mt8192_mutex_driver_data = {
. mutex_mod = mt8192_mutex_mod ,
. mutex_sof = mt8183_mutex_sof ,
. mutex_mod_reg = MT8183_MUTEX0_MOD0 ,
. mutex_sof_reg = MT8183_MUTEX0_SOF0 ,
} ;
2022-04-19 17:41:37 +08:00
static const struct mtk_mutex_data mt8195_mutex_driver_data = {
. mutex_mod = mt8195_mutex_mod ,
. mutex_sof = mt8195_mutex_sof ,
2022-04-25 11:45:37 +08:00
. mutex_mod_reg = MT8183_MUTEX0_MOD0 ,
. mutex_sof_reg = MT8183_MUTEX0_SOF0 ,
2022-04-19 17:41:37 +08:00
} ;
2022-05-30 22:14:33 +02:00
static const struct mtk_mutex_data mt8365_mutex_driver_data = {
. mutex_mod = mt8365_mutex_mod ,
. mutex_sof = mt8183_mutex_sof ,
. mutex_mod_reg = MT8183_MUTEX0_MOD0 ,
. mutex_sof_reg = MT8183_MUTEX0_SOF0 ,
. no_clk = true ,
} ;
2020-07-21 11:30:11 +08:00
struct mtk_mutex * mtk_mutex_get ( struct device * dev )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = dev_get_drvdata ( dev ) ;
2020-07-21 11:30:11 +08:00
int i ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:30:11 +08:00
for ( i = 0 ; i < 10 ; i + + )
if ( ! mtx - > mutex [ i ] . claimed ) {
mtx - > mutex [ i ] . claimed = true ;
return & mtx - > mutex [ i ] ;
}
2016-01-04 18:36:34 +01:00
2020-07-21 11:30:11 +08:00
return ERR_PTR ( - EBUSY ) ;
2016-01-04 18:36:34 +01:00
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_get ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
void mtk_mutex_put ( struct mtk_mutex * mutex )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
2016-01-04 18:36:34 +01:00
mutex - > claimed = false ;
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_put ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
int mtk_mutex_prepare ( struct mtk_mutex * mutex )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
return clk_prepare_enable ( mtx - > clk ) ;
2016-01-04 18:36:34 +01:00
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_prepare ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
void mtk_mutex_unprepare ( struct mtk_mutex * mutex )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
clk_disable_unprepare ( mtx - > clk ) ;
2016-01-04 18:36:34 +01:00
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_unprepare ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
void mtk_mutex_add_comp ( struct mtk_mutex * mutex ,
enum mtk_ddp_comp_id id )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
2016-01-04 18:36:34 +01:00
unsigned int reg ;
2019-08-29 22:50:31 +08:00
unsigned int sof_id ;
2018-06-20 16:19:04 +08:00
unsigned int offset ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
2016-01-04 18:36:34 +01:00
switch ( id ) {
case DDP_COMPONENT_DSI0 :
2020-07-21 11:24:36 +08:00
sof_id = MUTEX_SOF_DSI0 ;
2016-01-04 18:36:34 +01:00
break ;
case DDP_COMPONENT_DSI1 :
2020-07-21 11:24:36 +08:00
sof_id = MUTEX_SOF_DSI0 ;
2016-01-04 18:36:34 +01:00
break ;
2018-06-20 16:19:28 +08:00
case DDP_COMPONENT_DSI2 :
2020-07-21 11:24:36 +08:00
sof_id = MUTEX_SOF_DSI2 ;
2018-06-20 16:19:28 +08:00
break ;
2018-06-20 16:19:29 +08:00
case DDP_COMPONENT_DSI3 :
2020-07-21 11:24:36 +08:00
sof_id = MUTEX_SOF_DSI3 ;
2018-06-20 16:19:29 +08:00
break ;
2016-01-04 18:36:34 +01:00
case DDP_COMPONENT_DPI0 :
2020-07-21 11:24:36 +08:00
sof_id = MUTEX_SOF_DPI0 ;
2016-01-04 18:36:34 +01:00
break ;
2018-06-20 16:19:27 +08:00
case DDP_COMPONENT_DPI1 :
2020-07-21 11:24:36 +08:00
sof_id = MUTEX_SOF_DPI1 ;
2018-06-20 16:19:27 +08:00
break ;
2022-04-19 17:41:37 +08:00
case DDP_COMPONENT_DP_INTF0 :
sof_id = MUTEX_SOF_DP_INTF0 ;
break ;
2023-01-13 18:44:33 +08:00
case DDP_COMPONENT_DP_INTF1 :
sof_id = MUTEX_SOF_DP_INTF1 ;
break ;
2016-01-04 18:36:34 +01:00
default :
2020-07-21 11:24:36 +08:00
if ( mtx - > data - > mutex_mod [ id ] < 32 ) {
offset = DISP_REG_MUTEX_MOD ( mtx - > data - > mutex_mod_reg ,
2019-08-29 22:50:30 +08:00
mutex - > id ) ;
2020-07-21 11:24:36 +08:00
reg = readl_relaxed ( mtx - > regs + offset ) ;
reg | = 1 < < mtx - > data - > mutex_mod [ id ] ;
writel_relaxed ( reg , mtx - > regs + offset ) ;
2018-06-20 16:19:04 +08:00
} else {
offset = DISP_REG_MUTEX_MOD2 ( mutex - > id ) ;
2020-07-21 11:24:36 +08:00
reg = readl_relaxed ( mtx - > regs + offset ) ;
reg | = 1 < < ( mtx - > data - > mutex_mod [ id ] - 32 ) ;
writel_relaxed ( reg , mtx - > regs + offset ) ;
2018-06-20 16:19:04 +08:00
}
2016-01-04 18:36:34 +01:00
return ;
}
2020-07-21 11:24:36 +08:00
writel_relaxed ( mtx - > data - > mutex_sof [ sof_id ] ,
mtx - > regs +
DISP_REG_MUTEX_SOF ( mtx - > data - > mutex_sof_reg , mutex - > id ) ) ;
2016-01-04 18:36:34 +01:00
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_add_comp ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
void mtk_mutex_remove_comp ( struct mtk_mutex * mutex ,
enum mtk_ddp_comp_id id )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
2016-01-04 18:36:34 +01:00
unsigned int reg ;
2018-06-20 16:19:04 +08:00
unsigned int offset ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
2016-01-04 18:36:34 +01:00
switch ( id ) {
case DDP_COMPONENT_DSI0 :
case DDP_COMPONENT_DSI1 :
2018-06-20 16:19:28 +08:00
case DDP_COMPONENT_DSI2 :
2018-06-20 16:19:29 +08:00
case DDP_COMPONENT_DSI3 :
2016-01-04 18:36:34 +01:00
case DDP_COMPONENT_DPI0 :
2018-06-20 16:19:27 +08:00
case DDP_COMPONENT_DPI1 :
2022-04-19 17:41:37 +08:00
case DDP_COMPONENT_DP_INTF0 :
2023-01-13 18:44:33 +08:00
case DDP_COMPONENT_DP_INTF1 :
2016-01-04 18:36:34 +01:00
writel_relaxed ( MUTEX_SOF_SINGLE_MODE ,
2020-07-21 11:24:36 +08:00
mtx - > regs +
DISP_REG_MUTEX_SOF ( mtx - > data - > mutex_sof_reg ,
2019-08-29 22:50:32 +08:00
mutex - > id ) ) ;
2016-01-04 18:36:34 +01:00
break ;
default :
2020-07-21 11:24:36 +08:00
if ( mtx - > data - > mutex_mod [ id ] < 32 ) {
offset = DISP_REG_MUTEX_MOD ( mtx - > data - > mutex_mod_reg ,
2019-08-29 22:50:30 +08:00
mutex - > id ) ;
2020-07-21 11:24:36 +08:00
reg = readl_relaxed ( mtx - > regs + offset ) ;
reg & = ~ ( 1 < < mtx - > data - > mutex_mod [ id ] ) ;
writel_relaxed ( reg , mtx - > regs + offset ) ;
2018-06-20 16:19:04 +08:00
} else {
offset = DISP_REG_MUTEX_MOD2 ( mutex - > id ) ;
2020-07-21 11:24:36 +08:00
reg = readl_relaxed ( mtx - > regs + offset ) ;
reg & = ~ ( 1 < < ( mtx - > data - > mutex_mod [ id ] - 32 ) ) ;
writel_relaxed ( reg , mtx - > regs + offset ) ;
2018-06-20 16:19:04 +08:00
}
2016-01-04 18:36:34 +01:00
break ;
}
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_remove_comp ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
void mtk_mutex_enable ( struct mtk_mutex * mutex )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
writel ( 1 , mtx - > regs + DISP_REG_MUTEX_EN ( mutex - > id ) ) ;
2016-01-04 18:36:34 +01:00
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_enable ) ;
2016-01-04 18:36:34 +01:00
2022-06-10 14:34:23 +08:00
int mtk_mutex_enable_by_cmdq ( struct mtk_mutex * mutex , void * pkt )
{
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
# if IS_REACHABLE(CONFIG_MTK_CMDQ)
struct cmdq_pkt * cmdq_pkt = ( struct cmdq_pkt * ) pkt ;
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
if ( ! mtx - > cmdq_reg . size ) {
dev_err ( mtx - > dev , " mediatek,gce-client-reg hasn't been set " ) ;
return - EINVAL ;
}
cmdq_pkt_write ( cmdq_pkt , mtx - > cmdq_reg . subsys ,
mtx - > addr + DISP_REG_MUTEX_EN ( mutex - > id ) , 1 ) ;
return 0 ;
# else
dev_err ( mtx - > dev , " Not support for enable MUTEX by CMDQ " ) ;
return - ENODEV ;
# endif
}
EXPORT_SYMBOL_GPL ( mtk_mutex_enable_by_cmdq ) ;
2020-07-21 11:24:36 +08:00
void mtk_mutex_disable ( struct mtk_mutex * mutex )
2016-01-04 18:36:34 +01:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
writel ( 0 , mtx - > regs + DISP_REG_MUTEX_EN ( mutex - > id ) ) ;
2016-01-04 18:36:34 +01:00
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_disable ) ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
void mtk_mutex_acquire ( struct mtk_mutex * mutex )
2017-03-31 19:30:31 +08:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
2017-03-31 19:30:31 +08:00
u32 tmp ;
2020-07-21 11:24:36 +08:00
writel ( 1 , mtx - > regs + DISP_REG_MUTEX_EN ( mutex - > id ) ) ;
writel ( 1 , mtx - > regs + DISP_REG_MUTEX ( mutex - > id ) ) ;
if ( readl_poll_timeout_atomic ( mtx - > regs + DISP_REG_MUTEX ( mutex - > id ) ,
2017-03-31 19:30:31 +08:00
tmp , tmp & INT_MUTEX , 1 , 10000 ) )
pr_err ( " could not acquire mutex %d \n " , mutex - > id ) ;
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_acquire ) ;
2017-03-31 19:30:31 +08:00
2020-07-21 11:24:36 +08:00
void mtk_mutex_release ( struct mtk_mutex * mutex )
2017-03-31 19:30:31 +08:00
{
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
2017-03-31 19:30:31 +08:00
2020-07-21 11:24:36 +08:00
writel ( 0 , mtx - > regs + DISP_REG_MUTEX ( mutex - > id ) ) ;
2017-03-31 19:30:31 +08:00
}
2020-07-21 15:46:06 +08:00
EXPORT_SYMBOL_GPL ( mtk_mutex_release ) ;
2017-03-31 19:30:31 +08:00
2022-06-10 14:34:18 +08:00
int mtk_mutex_write_mod ( struct mtk_mutex * mutex ,
enum mtk_mutex_mod_index idx , bool clear )
{
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
unsigned int reg ;
unsigned int offset ;
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
if ( idx < MUTEX_MOD_IDX_MDP_RDMA0 | |
idx > = MUTEX_MOD_IDX_MAX ) {
dev_err ( mtx - > dev , " Not supported MOD table index : %d " , idx ) ;
return - EINVAL ;
}
offset = DISP_REG_MUTEX_MOD ( mtx - > data - > mutex_mod_reg ,
mutex - > id ) ;
reg = readl_relaxed ( mtx - > regs + offset ) ;
if ( clear )
reg & = ~ BIT ( mtx - > data - > mutex_table_mod [ idx ] ) ;
else
reg | = BIT ( mtx - > data - > mutex_table_mod [ idx ] ) ;
writel_relaxed ( reg , mtx - > regs + offset ) ;
return 0 ;
}
EXPORT_SYMBOL_GPL ( mtk_mutex_write_mod ) ;
int mtk_mutex_write_sof ( struct mtk_mutex * mutex ,
enum mtk_mutex_sof_index idx )
{
struct mtk_mutex_ctx * mtx = container_of ( mutex , struct mtk_mutex_ctx ,
mutex [ mutex - > id ] ) ;
WARN_ON ( & mtx - > mutex [ mutex - > id ] ! = mutex ) ;
if ( idx < MUTEX_SOF_IDX_SINGLE_MODE | |
idx > = MUTEX_SOF_IDX_MAX ) {
dev_err ( mtx - > dev , " Not supported SOF index : %d " , idx ) ;
return - EINVAL ;
}
writel_relaxed ( idx , mtx - > regs +
DISP_REG_MUTEX_SOF ( mtx - > data - > mutex_sof_reg , mutex - > id ) ) ;
return 0 ;
}
EXPORT_SYMBOL_GPL ( mtk_mutex_write_sof ) ;
2020-07-21 11:24:36 +08:00
static int mtk_mutex_probe ( struct platform_device * pdev )
2016-01-04 18:36:34 +01:00
{
struct device * dev = & pdev - > dev ;
2020-07-21 11:24:36 +08:00
struct mtk_mutex_ctx * mtx ;
2022-06-23 14:17:01 +02:00
struct resource * regs ;
2016-01-04 18:36:34 +01:00
int i ;
2022-06-10 14:34:23 +08:00
# if IS_REACHABLE(CONFIG_MTK_CMDQ)
int ret ;
# endif
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
mtx = devm_kzalloc ( dev , sizeof ( * mtx ) , GFP_KERNEL ) ;
if ( ! mtx )
2016-01-04 18:36:34 +01:00
return - ENOMEM ;
for ( i = 0 ; i < 10 ; i + + )
2020-07-21 11:24:36 +08:00
mtx - > mutex [ i ] . id = i ;
2016-01-04 18:36:34 +01:00
2020-07-21 11:24:36 +08:00
mtx - > data = of_device_get_match_data ( dev ) ;
2019-10-09 16:37:47 +08:00
2020-07-21 11:24:36 +08:00
if ( ! mtx - > data - > no_clk ) {
mtx - > clk = devm_clk_get ( dev , NULL ) ;
if ( IS_ERR ( mtx - > clk ) ) {
if ( PTR_ERR ( mtx - > clk ) ! = - EPROBE_DEFER )
2020-03-25 18:31:19 +01:00
dev_err ( dev , " Failed to get clock \n " ) ;
2020-07-21 11:24:36 +08:00
return PTR_ERR ( mtx - > clk ) ;
2019-10-09 16:37:47 +08:00
}
2016-01-04 18:36:34 +01:00
}
2022-06-23 14:17:01 +02:00
mtx - > regs = devm_platform_get_and_ioremap_resource ( pdev , 0 , & regs ) ;
if ( IS_ERR ( mtx - > regs ) ) {
dev_err ( dev , " Failed to map mutex registers \n " ) ;
return PTR_ERR ( mtx - > regs ) ;
2022-06-10 14:34:23 +08:00
}
2022-06-23 14:17:01 +02:00
mtx - > addr = regs - > start ;
2022-06-10 14:34:23 +08:00
# if IS_REACHABLE(CONFIG_MTK_CMDQ)
ret = cmdq_dev_get_client_reg ( dev , & mtx - > cmdq_reg , 0 ) ;
if ( ret )
dev_dbg ( dev , " No mediatek,gce-client-reg! \n " ) ;
# endif
2020-07-21 11:24:36 +08:00
platform_set_drvdata ( pdev , mtx ) ;
2016-01-04 18:36:34 +01:00
return 0 ;
}
2020-07-21 11:24:36 +08:00
static const struct of_device_id mutex_driver_dt_match [ ] = {
2019-08-29 22:50:29 +08:00
{ . compatible = " mediatek,mt2701-disp-mutex " ,
2020-07-21 11:24:36 +08:00
. data = & mt2701_mutex_driver_data } ,
2019-08-29 22:50:29 +08:00
{ . compatible = " mediatek,mt2712-disp-mutex " ,
2020-07-21 11:24:36 +08:00
. data = & mt2712_mutex_driver_data } ,
2022-09-13 16:01:21 +02:00
{ . compatible = " mediatek,mt6795-disp-mutex " ,
. data = & mt6795_mutex_driver_data } ,
2020-10-23 15:31:29 +02:00
{ . compatible = " mediatek,mt8167-disp-mutex " ,
2020-07-21 11:24:36 +08:00
. data = & mt8167_mutex_driver_data } ,
2019-08-29 22:50:29 +08:00
{ . compatible = " mediatek,mt8173-disp-mutex " ,
2020-07-21 11:24:36 +08:00
. data = & mt8173_mutex_driver_data } ,
2021-01-29 17:22:08 +08:00
{ . compatible = " mediatek,mt8183-disp-mutex " ,
. data = & mt8183_mutex_driver_data } ,
2022-02-22 13:28:02 +08:00
{ . compatible = " mediatek,mt8186-disp-mutex " ,
. data = & mt8186_mutex_driver_data } ,
2022-09-01 01:21:51 +08:00
{ . compatible = " mediatek,mt8186-mdp3-mutex " ,
. data = & mt8186_mdp_mutex_driver_data } ,
2022-12-06 10:00:45 +08:00
{ . compatible = " mediatek,mt8188-disp-mutex " ,
. data = & mt8188_mutex_driver_data } ,
2021-09-30 23:52:21 +08:00
{ . compatible = " mediatek,mt8192-disp-mutex " ,
. data = & mt8192_mutex_driver_data } ,
2022-04-19 17:41:37 +08:00
{ . compatible = " mediatek,mt8195-disp-mutex " ,
. data = & mt8195_mutex_driver_data } ,
2022-05-30 22:14:33 +02:00
{ . compatible = " mediatek,mt8365-disp-mutex " ,
. data = & mt8365_mutex_driver_data } ,
2016-01-04 18:36:34 +01:00
{ } ,
} ;
2020-07-21 11:24:36 +08:00
MODULE_DEVICE_TABLE ( of , mutex_driver_dt_match ) ;
2016-01-04 18:36:34 +01:00
2021-02-10 07:56:56 +00:00
static struct platform_driver mtk_mutex_driver = {
2020-07-21 11:24:36 +08:00
. probe = mtk_mutex_probe ,
2016-01-04 18:36:34 +01:00
. driver = {
2020-07-21 11:24:36 +08:00
. name = " mediatek-mutex " ,
2016-01-04 18:36:34 +01:00
. owner = THIS_MODULE ,
2020-07-21 11:24:36 +08:00
. of_match_table = mutex_driver_dt_match ,
2016-01-04 18:36:34 +01:00
} ,
} ;
2020-07-21 15:46:06 +08:00
2022-11-18 14:30:18 +08:00
static int __init mtk_mutex_init ( void )
{
return platform_driver_register ( & mtk_mutex_driver ) ;
}
static void __exit mtk_mutex_exit ( void )
{
platform_driver_unregister ( & mtk_mutex_driver ) ;
}
module_init ( mtk_mutex_init ) ;
module_exit ( mtk_mutex_exit ) ;
MODULE_AUTHOR ( " Yongqiang Niu <yongqiang.niu@mediatek.com> " ) ;
MODULE_DESCRIPTION ( " MediaTek SoC MUTEX driver " ) ;
MODULE_LICENSE ( " GPL " ) ;