/* SPDX-License-Identifier: GPL-2.0+ */ /* * Copyright (c) 2015 Samsung Electronics Co., Ltd * Copyright (c) 2026 Kaustabh Chakraborty * Copyright (c) 2026 Łukasz Lebiedziński */ #ifndef __LINUX_MFD_S2MU005_H #define __LINUX_MFD_S2MU005_H #include #include /* S2MU005 registers */ enum s2mu005_reg { S2MU005_REG_CHGR_INT1, S2MU005_REG_CHGR_INT1M, S2MU005_REG_FLED_INT1, S2MU005_REG_FLED_INT1M, S2MU005_REG_MUIC_INT1, S2MU005_REG_MUIC_INT2, S2MU005_REG_MUIC_INT1M, S2MU005_REG_MUIC_INT2M, S2MU005_REG_CHGR_STATUS0, S2MU005_REG_CHGR_STATUS1, S2MU005_REG_CHGR_STATUS2, S2MU005_REG_CHGR_STATUS3, S2MU005_REG_CHGR_STATUS4, S2MU005_REG_CHGR_STATUS5, S2MU005_REG_CHGR_CTRL0, S2MU005_REG_CHGR_CTRL1, S2MU005_REG_CHGR_CTRL2, S2MU005_REG_CHGR_CTRL3, S2MU005_REG_CHGR_CTRL4, S2MU005_REG_CHGR_CTRL5, S2MU005_REG_CHGR_CTRL6, S2MU005_REG_CHGR_CTRL7, S2MU005_REG_CHGR_CTRL8, S2MU005_REG_CHGR_CTRL9, S2MU005_REG_CHGR_CTRL10, S2MU005_REG_CHGR_CTRL11, S2MU005_REG_CHGR_CTRL12, S2MU005_REG_CHGR_CTRL13, S2MU005_REG_CHGR_CTRL14, S2MU005_REG_CHGR_CTRL15, S2MU005_REG_CHGR_CTRL16, S2MU005_REG_CHGR_CTRL17, S2MU005_REG_CHGR_CTRL18, S2MU005_REG_CHGR_CTRL19, S2MU005_REG_CHGR_TEST0, S2MU005_REG_CHGR_TEST1, S2MU005_REG_CHGR_TEST2, S2MU005_REG_CHGR_TEST3, S2MU005_REG_CHGR_TEST4, S2MU005_REG_CHGR_TEST5, S2MU005_REG_CHGR_TEST6, S2MU005_REG_CHGR_TEST7, S2MU005_REG_CHGR_TEST8, S2MU005_REG_CHGR_TEST9, S2MU005_REG_CHGR_TEST10, S2MU005_REG_FLED_STATUS, S2MU005_REG_FLED_CH0_CTRL0, S2MU005_REG_FLED_CH0_CTRL1, S2MU005_REG_FLED_CH0_CTRL2, S2MU005_REG_FLED_CH0_CTRL3, S2MU005_REG_FLED_CH1_CTRL0, S2MU005_REG_FLED_CH1_CTRL1, S2MU005_REG_FLED_CH1_CTRL2, S2MU005_REG_FLED_CH1_CTRL3, S2MU005_REG_FLED_CTRL0, S2MU005_REG_FLED_CTRL1, S2MU005_REG_FLED_CTRL2, S2MU005_REG_FLED_CTRL3, S2MU005_REG_FLED_CTRL4, S2MU005_REG_FLED_CTRL5, S2MU005_REG_FLED_CTRL6, S2MU005_REG_RGB_EN, S2MU005_REG_RGB_CH0_CTRL, S2MU005_REG_RGB_CH1_CTRL, S2MU005_REG_RGB_CH2_CTRL, S2MU005_REG_RGB_CH0_RAMP, S2MU005_REG_RGB_CH0_STAY, S2MU005_REG_RGB_CH1_RAMP, S2MU005_REG_RGB_CH1_STAY, S2MU005_REG_RGB_CH2_RAMP, S2MU005_REG_RGB_CH2_STAY, S2MU005_REG_RGB_TEST0, S2MU005_REG_RGB_CTRL0, S2MU005_REG_MUIC_ADC, S2MU005_REG_MUIC_DEV1, S2MU005_REG_MUIC_DEV2, S2MU005_REG_MUIC_DEV3, S2MU005_REG_MUIC_BUTTON1, S2MU005_REG_MUIC_BUTTON2, S2MU005_REG_MUIC_RESET, S2MU005_REG_MUIC_CHGTYPE, S2MU005_REG_MUIC_DEVAPPLE, S2MU005_REG_MUIC_BCDRESCAN, S2MU005_REG_MUIC_TEST1, S2MU005_REG_MUIC_TEST2, S2MU005_REG_MUIC_TEST3, S2MU005_REG_ID = 0x73, S2MU005_REG_MUIC_CTRL1 = 0xb2, S2MU005_REG_MUIC_TIMERSET1, S2MU005_REG_MUIC_TIMERSET2, S2MU005_REG_MUIC_SWCTRL, S2MU005_REG_MUIC_TIMERSET3, S2MU005_REG_MUIC_CTRL2, S2MU005_REG_MUIC_CTRL3, S2MU005_REG_MUIC_LDOADC_L = 0xbf, S2MU005_REG_MUIC_LDOADC_H, }; #define S2MU005_REG_FLED_CH_CTRL0(x) (S2MU005_REG_FLED_CH0_CTRL0 + 4 * (x)) #define S2MU005_REG_FLED_CH_CTRL1(x) (S2MU005_REG_FLED_CH0_CTRL1 + 4 * (x)) #define S2MU005_REG_FLED_CH_CTRL2(x) (S2MU005_REG_FLED_CH0_CTRL2 + 4 * (x)) #define S2MU005_REG_FLED_CH_CTRL3(x) (S2MU005_REG_FLED_CH0_CTRL3 + 4 * (x)) #define S2MU005_REG_RGB_CH_CTRL(x) (S2MU005_REG_RGB_CH0_CTRL + 1 * (x)) #define S2MU005_REG_RGB_CH_RAMP(x) (S2MU005_REG_RGB_CH0_RAMP + 2 * (x)) #define S2MU005_REG_RGB_CH_STAY(x) (S2MU005_REG_RGB_CH0_STAY + 2 * (x)) /* S2MU005_REG_CHGR_STATUS0 */ #define S2MU005_CHGR_VBUS BIT(7) #define S2MU005_CHGR_WCIN BIT(6) #define S2MU005_CHGR_VMID BIT(5) #define S2MU005_CHGR_CHG BIT(4) #define S2MU005_CHGR_STAT GENMASK(3, 0) #define S2MU005_CHGR_STAT_DONE 8 #define S2MU005_CHGR_STAT_TOPOFF 7 #define S2MU005_CHGR_STAT_DONE_FLAG 6 #define S2MU005_CHGR_STAT_CV 5 #define S2MU005_CHGR_STAT_CC 4 #define S2MU005_CHGR_STAT_COOL_CHG 3 #define S2MU005_CHGR_STAT_PRE_CHG 2 /* S2MU005_REG_CHGR_STATUS1 */ #define S2MU005_CHGR_DETBAT BIT(7) #define S2MU005_CHGR_VBUS_OVP GENMASK(6, 4) #define S2MU005_CHGR_VBUS_OVP_OVERVOLT 2 /* S2MU005_REG_CHGR_STATUS2 */ #define S2MU005_CHGR_BAT GENMASK(6, 4) #define S2MU005_CHGR_BAT_VOLT_DET 7 #define S2MU005_CHGR_BAT_FAST_CHG_DET 6 #define S2MU005_CHGR_BAT_COOL_CHG_DET 5 #define S2MU005_CHGR_BAT_LOW_CHG 2 #define S2MU005_CHGR_BAT_SELF_DISCHG 1 #define S2MU005_CHGR_BAT_OVP_DET 0 /* S2MU005_REG_CHGR_STATUS3 */ #define S2MU005_CHGR_EVT GENMASK(3, 0) #define S2MU005_CHGR_EVT_WDT_RST 6 #define S2MU005_CHGR_EVT_WDT_SUSP 5 #define S2MU005_CHGR_EVT_VSYS_VUVLO 4 #define S2MU005_CHGR_EVT_VSYS_VOVP 3 #define S2MU005_CHGR_EVT_THERM_FOLDBACK 2 #define S2MU005_CHGR_EVT_THERM_SHUTDOWN 1 /* S2MU005_REG_CHGR_CTRL0 */ #define S2MU005_CHGR_CHG_EN BIT(4) #define S2MU005_CHGR_OP_MODE GENMASK(2, 0) #define S2MU005_CHGR_OP_MODE_OTG BIT(2) #define S2MU005_CHGR_OP_MODE_CHG BIT(1) /* S2MU005_REG_CHGR_CTRL1 */ #define S2MU005_CHGR_VIN_DROP GENMASK(6, 4) /* S2MU005_REG_CHGR_CTRL2 */ #define S2MU005_CHGR_IN_CURR_LIM GENMASK(5, 0) /* S2MU005_REG_CHGR_CTRL4 */ #define S2MU005_CHGR_OTG_OCP_ON BIT(5) #define S2MU005_CHGR_OTG_OCP_OFF BIT(4) #define S2MU005_CHGR_OTG_OCP GENMASK(3, 2) #define S2MU005_CHGR_OTG_OCP_1P5A 0x3 /* S2MU005_REG_CHGR_CTRL5 */ #define S2MU005_CHGR_VMID_BOOST GENMASK(4, 0) #define S2MU005_CHGR_VMID_BOOST_5P1V 0x16 /* S2MU005_REG_CHGR_CTRL6 */ #define S2MU005_CHGR_COOL_CHG_CURR GENMASK(5, 0) /* S2MU005_REG_CHGR_CTRL7 */ #define S2MU005_CHGR_FAST_CHG_CURR GENMASK(5, 0) /* S2MU005_REG_CHGR_CTRL8 */ #define S2MU005_CHGR_VF_VBAT GENMASK(6, 1) /* S2MU005_REG_CHGR_CTRL10 */ #define S2MU005_CHGR_TOPOFF_CURR(x) (GENMASK(3, 0) << 4 * (x)) /* S2MU005_REG_CHGR_CTRL11 */ #define S2MU005_CHGR_OSC_BOOST GENMASK(6, 5) #define S2MU005_CHGR_OSC_BUCK GENMASK(4, 3) #define S2MU005_CHGR_OSC_BOOST_2MHZ 0x3 /* S2MU005_REG_CHGR_CTRL12 */ #define S2MU005_CHGR_WDT GENMASK(2, 0) #define S2MU005_CHGR_WDT_ON BIT(2) #define S2MU005_CHGR_WDT_OFF BIT(1) /* S2MU005_REG_CHGR_CTRL15 */ #define S2MU005_CHGR_OTG_EN GENMASK(3, 2) #define S2MU005_CHGR_OTG_EN_ON 0x3 /* S2MU005_REG_FLED_STATUS */ #define S2MU005_FLED_FLASH_STATUS(x) (BIT(7) >> 2 * (x)) #define S2MU005_FLED_TORCH_STATUS(x) (BIT(6) >> 2 * (x)) /* S2MU005_REG_FLED_CHx_CTRL0 */ #define S2MU005_FLED_FLASH_IOUT GENMASK(3, 0) /* S2MU005_REG_FLED_CHx_CTRL1 */ #define S2MU005_FLED_TORCH_IOUT GENMASK(3, 0) /* S2MU005_REG_FLED_CHx_CTRL2 */ #define S2MU005_FLED_TORCH_TIMEOUT GENMASK(3, 0) /* S2MU005_REG_FLED_CHx_CTRL3 */ #define S2MU005_FLED_FLASH_TIMEOUT GENMASK(3, 0) /* S2MU005_REG_FLED_CTRL1 */ #define S2MU005_FLED_CH_EN BIT(7) /* * S2MU005_REG_FLED_CTRL4 - Rev. EVT0 * S2MU005_REG_FLED_CTRL6 - Rev. EVT1 and later */ #define S2MU005_FLED_FLASH_EN(x) (GENMASK(7, 6) >> 4 * (x)) #define S2MU005_FLED_TORCH_EN(x) (GENMASK(5, 4) >> 4 * (x)) /* S2MU005_REG_RGB_EN */ #define S2MU005_RGB_RESET BIT(6) #define S2MU005_RGB_SLOPE GENMASK(5, 0) #define S2MU005_RGB_SLOPE_CONST (BIT(4) | BIT(2) | BIT(0)) #define S2MU005_RGB_SLOPE_SMOOTH (BIT(5) | BIT(3) | BIT(1)) /* S2MU005_REG_RGB_CHx_RAMP */ #define S2MU005_RGB_CH_RAMP_UP GENMASK(7, 4) #define S2MU005_RGB_CH_RAMP_DN GENMASK(3, 0) /* S2MU005_REG_RGB_CHx_STAY */ #define S2MU005_RGB_CH_STAY_HI GENMASK(7, 4) #define S2MU005_RGB_CH_STAY_LO GENMASK(3, 0) /* S2MU005_REG_MUIC_DEV1 */ #define S2MU005_MUIC_OTG BIT(7) #define S2MU005_MUIC_DCP BIT(6) #define S2MU005_MUIC_CDP BIT(5) #define S2MU005_MUIC_T1_T2_CHG BIT(4) #define S2MU005_MUIC_UART BIT(3) #define S2MU005_MUIC_SDP BIT(2) #define S2MU005_MUIC_LANHUB BIT(1) #define S2MU005_MUIC_AUDIO BIT(0) /* S2MU005_REG_MUIC_DEV2 */ #define S2MU005_MUIC_SDP_1P8S BIT(7) #define S2MU005_MUIC_AV BIT(6) #define S2MU005_MUIC_TTY BIT(5) #define S2MU005_MUIC_PPD BIT(4) #define S2MU005_MUIC_JIG_UART_OFF BIT(3) #define S2MU005_MUIC_JIG_UART_ON BIT(2) #define S2MU005_MUIC_JIG_USB_OFF BIT(1) #define S2MU005_MUIC_JIG_USB_ON BIT(0) /* S2MU005_REG_MUIC_DEV3 */ #define S2MU005_MUIC_U200_CHG BIT(7) #define S2MU005_MUIC_VBUS_AV BIT(4) #define S2MU005_MUIC_VBUS_R255 BIT(1) #define S2MU005_MUIC_MHL BIT(0) /* S2MU005_REG_MUIC_DEVAPPLE */ #define S2MU005_MUIC_APPLE_CHG_0P5A BIT(7) #define S2MU005_MUIC_APPLE_CHG_1P0A BIT(6) #define S2MU005_MUIC_APPLE_CHG_2P0A BIT(5) #define S2MU005_MUIC_APPLE_CHG_2P4A BIT(4) #define S2MU005_MUIC_SDP_DCD_OUT BIT(3) #define S2MU005_MUIC_RID_WAKEUP BIT(2) #define S2MU005_MUIC_VBUS_WAKEUP BIT(1) #define S2MU005_MUIC_BCV1P2_OR_OPEN BIT(0) /* S2MU005_REG_ID */ #define S2MU005_ID_MASK GENMASK(3, 0) /* S2MU005_REG_MUIC_SWCTRL */ #define S2MU005_MUIC_DM_DP GENMASK(7, 2) #define S2MU005_MUIC_JIG BIT(0) #define S2MU005_MUIC_DM_DP_UART 0x12 #define S2MU005_MUIC_DM_DP_USB 0x09 /* S2MU005_REG_MUIC_CTRL1 */ #define S2MU005_MUIC_OPEN BIT(4) #define S2MU005_MUIC_RAW_DATA BIT(3) #define S2MU005_MUIC_MAN_SW BIT(2) #define S2MU005_MUIC_WAIT BIT(1) #define S2MU005_MUIC_IRQ BIT(0) /* S2MU005_REG_MUIC_CTRL3 */ #define S2MU005_MUIC_ONESHOT_ADC BIT(2) /* S2MU005_REG_MUIC_LDOADC_L and S2MU005_REG_MUIC_LDOADC_H */ #define S2MU005_MUIC_VSET GENMASK(4, 0) #define S2MU005_MUIC_VSET_3P0V 0x1f #define S2MU005_MUIC_VSET_2P6V 0x0e #define S2MU005_MUIC_VSET_2P4V 0x0c #define S2MU005_MUIC_VSET_2P2V 0x0a #define S2MU005_MUIC_VSET_2P0V 0x08 #define S2MU005_MUIC_VSET_1P5V 0x03 #define S2MU005_MUIC_VSET_1P4V 0x02 #define S2MU005_MUIC_VSET_1P2V 0x00 #endif /* __LINUX_MFD_S2MU005_H */