mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-09-06 13:09:58 +00:00

Add support for Samsung's S2MPG10 PMIC, which is a Power Management IC for mobile applications with buck converters, various LDOs, power meters, RTC, clock outputs, and additional GPIOs interfaces. Contrary to existing Samsung S2M series PMICs supported, communication is not via I2C, but via the Samsung ACPM firmware. This commit adds the core driver. Signed-off-by: André Draszik <andre.draszik@linaro.org> Link: https://lore.kernel.org/r/20250409-s2mpg10-v4-9-d66d5f39b6bf@linaro.org Signed-off-by: Lee Jones <lee@kernel.org>
345 lines
8.5 KiB
C
345 lines
8.5 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* Copyright (c) 2012 Samsung Electronics Co., Ltd
|
|
* http://www.samsung.com
|
|
*/
|
|
|
|
#ifndef __LINUX_MFD_SEC_IRQ_H
|
|
#define __LINUX_MFD_SEC_IRQ_H
|
|
|
|
enum s2mpa01_irq {
|
|
S2MPA01_IRQ_PWRONF,
|
|
S2MPA01_IRQ_PWRONR,
|
|
S2MPA01_IRQ_JIGONBF,
|
|
S2MPA01_IRQ_JIGONBR,
|
|
S2MPA01_IRQ_ACOKBF,
|
|
S2MPA01_IRQ_ACOKBR,
|
|
S2MPA01_IRQ_PWRON1S,
|
|
S2MPA01_IRQ_MRB,
|
|
|
|
S2MPA01_IRQ_RTC60S,
|
|
S2MPA01_IRQ_RTCA1,
|
|
S2MPA01_IRQ_RTCA0,
|
|
S2MPA01_IRQ_SMPL,
|
|
S2MPA01_IRQ_RTC1S,
|
|
S2MPA01_IRQ_WTSR,
|
|
|
|
S2MPA01_IRQ_INT120C,
|
|
S2MPA01_IRQ_INT140C,
|
|
S2MPA01_IRQ_LDO3_TSD,
|
|
S2MPA01_IRQ_B16_TSD,
|
|
S2MPA01_IRQ_B24_TSD,
|
|
S2MPA01_IRQ_B35_TSD,
|
|
|
|
S2MPA01_IRQ_NR,
|
|
};
|
|
|
|
#define S2MPA01_IRQ_PWRONF_MASK (1 << 0)
|
|
#define S2MPA01_IRQ_PWRONR_MASK (1 << 1)
|
|
#define S2MPA01_IRQ_JIGONBF_MASK (1 << 2)
|
|
#define S2MPA01_IRQ_JIGONBR_MASK (1 << 3)
|
|
#define S2MPA01_IRQ_ACOKBF_MASK (1 << 4)
|
|
#define S2MPA01_IRQ_ACOKBR_MASK (1 << 5)
|
|
#define S2MPA01_IRQ_PWRON1S_MASK (1 << 6)
|
|
#define S2MPA01_IRQ_MRB_MASK (1 << 7)
|
|
|
|
#define S2MPA01_IRQ_RTC60S_MASK (1 << 0)
|
|
#define S2MPA01_IRQ_RTCA1_MASK (1 << 1)
|
|
#define S2MPA01_IRQ_RTCA0_MASK (1 << 2)
|
|
#define S2MPA01_IRQ_SMPL_MASK (1 << 3)
|
|
#define S2MPA01_IRQ_RTC1S_MASK (1 << 4)
|
|
#define S2MPA01_IRQ_WTSR_MASK (1 << 5)
|
|
|
|
#define S2MPA01_IRQ_INT120C_MASK (1 << 0)
|
|
#define S2MPA01_IRQ_INT140C_MASK (1 << 1)
|
|
#define S2MPA01_IRQ_LDO3_TSD_MASK (1 << 2)
|
|
#define S2MPA01_IRQ_B16_TSD_MASK (1 << 3)
|
|
#define S2MPA01_IRQ_B24_TSD_MASK (1 << 4)
|
|
#define S2MPA01_IRQ_B35_TSD_MASK (1 << 5)
|
|
|
|
enum s2mpg10_irq {
|
|
/* PMIC */
|
|
S2MPG10_IRQ_PWRONF,
|
|
S2MPG10_IRQ_PWRONR,
|
|
S2MPG10_IRQ_JIGONBF,
|
|
S2MPG10_IRQ_JIGONBR,
|
|
S2MPG10_IRQ_ACOKBF,
|
|
S2MPG10_IRQ_ACOKBR,
|
|
S2MPG10_IRQ_PWRON1S,
|
|
S2MPG10_IRQ_MRB,
|
|
#define S2MPG10_IRQ_PWRONF_MASK BIT(0)
|
|
#define S2MPG10_IRQ_PWRONR_MASK BIT(1)
|
|
#define S2MPG10_IRQ_JIGONBF_MASK BIT(2)
|
|
#define S2MPG10_IRQ_JIGONBR_MASK BIT(3)
|
|
#define S2MPG10_IRQ_ACOKBF_MASK BIT(4)
|
|
#define S2MPG10_IRQ_ACOKBR_MASK BIT(5)
|
|
#define S2MPG10_IRQ_PWRON1S_MASK BIT(6)
|
|
#define S2MPG10_IRQ_MRB_MASK BIT(7)
|
|
|
|
S2MPG10_IRQ_RTC60S,
|
|
S2MPG10_IRQ_RTCA1,
|
|
S2MPG10_IRQ_RTCA0,
|
|
S2MPG10_IRQ_RTC1S,
|
|
S2MPG10_IRQ_WTSR_COLDRST,
|
|
S2MPG10_IRQ_WTSR,
|
|
S2MPG10_IRQ_WRST,
|
|
S2MPG10_IRQ_SMPL,
|
|
#define S2MPG10_IRQ_RTC60S_MASK BIT(0)
|
|
#define S2MPG10_IRQ_RTCA1_MASK BIT(1)
|
|
#define S2MPG10_IRQ_RTCA0_MASK BIT(2)
|
|
#define S2MPG10_IRQ_RTC1S_MASK BIT(3)
|
|
#define S2MPG10_IRQ_WTSR_COLDRST_MASK BIT(4)
|
|
#define S2MPG10_IRQ_WTSR_MASK BIT(5)
|
|
#define S2MPG10_IRQ_WRST_MASK BIT(6)
|
|
#define S2MPG10_IRQ_SMPL_MASK BIT(7)
|
|
|
|
S2MPG10_IRQ_120C,
|
|
S2MPG10_IRQ_140C,
|
|
S2MPG10_IRQ_TSD,
|
|
S2MPG10_IRQ_PIF_TIMEOUT1,
|
|
S2MPG10_IRQ_PIF_TIMEOUT2,
|
|
S2MPG10_IRQ_SPD_PARITY_ERR,
|
|
S2MPG10_IRQ_SPD_ABNORMAL_STOP,
|
|
S2MPG10_IRQ_PMETER_OVERF,
|
|
#define S2MPG10_IRQ_INT120C_MASK BIT(0)
|
|
#define S2MPG10_IRQ_INT140C_MASK BIT(1)
|
|
#define S2MPG10_IRQ_TSD_MASK BIT(2)
|
|
#define S2MPG10_IRQ_PIF_TIMEOUT1_MASK BIT(3)
|
|
#define S2MPG10_IRQ_PIF_TIMEOUT2_MASK BIT(4)
|
|
#define S2MPG10_IRQ_SPD_PARITY_ERR_MASK BIT(5)
|
|
#define S2MPG10_IRQ_SPD_ABNORMAL_STOP_MASK BIT(6)
|
|
#define S2MPG10_IRQ_PMETER_OVERF_MASK BIT(7)
|
|
|
|
S2MPG10_IRQ_OCP_B1M,
|
|
S2MPG10_IRQ_OCP_B2M,
|
|
S2MPG10_IRQ_OCP_B3M,
|
|
S2MPG10_IRQ_OCP_B4M,
|
|
S2MPG10_IRQ_OCP_B5M,
|
|
S2MPG10_IRQ_OCP_B6M,
|
|
S2MPG10_IRQ_OCP_B7M,
|
|
S2MPG10_IRQ_OCP_B8M,
|
|
#define S2MPG10_IRQ_OCP_B1M_MASK BIT(0)
|
|
#define S2MPG10_IRQ_OCP_B2M_MASK BIT(1)
|
|
#define S2MPG10_IRQ_OCP_B3M_MASK BIT(2)
|
|
#define S2MPG10_IRQ_OCP_B4M_MASK BIT(3)
|
|
#define S2MPG10_IRQ_OCP_B5M_MASK BIT(4)
|
|
#define S2MPG10_IRQ_OCP_B6M_MASK BIT(5)
|
|
#define S2MPG10_IRQ_OCP_B7M_MASK BIT(6)
|
|
#define S2MPG10_IRQ_OCP_B8M_MASK BIT(7)
|
|
|
|
S2MPG10_IRQ_OCP_B9M,
|
|
S2MPG10_IRQ_OCP_B10M,
|
|
S2MPG10_IRQ_WLWP_ACC,
|
|
S2MPG10_IRQ_SMPL_TIMEOUT,
|
|
S2MPG10_IRQ_WTSR_TIMEOUT,
|
|
S2MPG10_IRQ_SPD_SRP_PKT_RST,
|
|
#define S2MPG10_IRQ_OCP_B9M_MASK BIT(0)
|
|
#define S2MPG10_IRQ_OCP_B10M_MASK BIT(1)
|
|
#define S2MPG10_IRQ_WLWP_ACC_MASK BIT(2)
|
|
#define S2MPG10_IRQ_SMPL_TIMEOUT_MASK BIT(5)
|
|
#define S2MPG10_IRQ_WTSR_TIMEOUT_MASK BIT(6)
|
|
#define S2MPG10_IRQ_SPD_SRP_PKT_RST_MASK BIT(7)
|
|
|
|
S2MPG10_IRQ_PWR_WARN_CH0,
|
|
S2MPG10_IRQ_PWR_WARN_CH1,
|
|
S2MPG10_IRQ_PWR_WARN_CH2,
|
|
S2MPG10_IRQ_PWR_WARN_CH3,
|
|
S2MPG10_IRQ_PWR_WARN_CH4,
|
|
S2MPG10_IRQ_PWR_WARN_CH5,
|
|
S2MPG10_IRQ_PWR_WARN_CH6,
|
|
S2MPG10_IRQ_PWR_WARN_CH7,
|
|
#define S2MPG10_IRQ_PWR_WARN_CH0_MASK BIT(0)
|
|
#define S2MPG10_IRQ_PWR_WARN_CH1_MASK BIT(1)
|
|
#define S2MPG10_IRQ_PWR_WARN_CH2_MASK BIT(2)
|
|
#define S2MPG10_IRQ_PWR_WARN_CH3_MASK BIT(3)
|
|
#define S2MPG10_IRQ_PWR_WARN_CH4_MASK BIT(4)
|
|
#define S2MPG10_IRQ_PWR_WARN_CH5_MASK BIT(5)
|
|
#define S2MPG10_IRQ_PWR_WARN_CH6_MASK BIT(6)
|
|
#define S2MPG10_IRQ_PWR_WARN_CH7_MASK BIT(7)
|
|
|
|
S2MPG10_IRQ_NR,
|
|
};
|
|
|
|
enum s2mps11_irq {
|
|
S2MPS11_IRQ_PWRONF,
|
|
S2MPS11_IRQ_PWRONR,
|
|
S2MPS11_IRQ_JIGONBF,
|
|
S2MPS11_IRQ_JIGONBR,
|
|
S2MPS11_IRQ_ACOKBF,
|
|
S2MPS11_IRQ_ACOKBR,
|
|
S2MPS11_IRQ_PWRON1S,
|
|
S2MPS11_IRQ_MRB,
|
|
|
|
S2MPS11_IRQ_RTC60S,
|
|
S2MPS11_IRQ_RTCA1,
|
|
S2MPS11_IRQ_RTCA0,
|
|
S2MPS11_IRQ_SMPL,
|
|
S2MPS11_IRQ_RTC1S,
|
|
S2MPS11_IRQ_WTSR,
|
|
|
|
S2MPS11_IRQ_INT120C,
|
|
S2MPS11_IRQ_INT140C,
|
|
|
|
S2MPS11_IRQ_NR,
|
|
};
|
|
|
|
#define S2MPS11_IRQ_PWRONF_MASK (1 << 0)
|
|
#define S2MPS11_IRQ_PWRONR_MASK (1 << 1)
|
|
#define S2MPS11_IRQ_JIGONBF_MASK (1 << 2)
|
|
#define S2MPS11_IRQ_JIGONBR_MASK (1 << 3)
|
|
#define S2MPS11_IRQ_ACOKBF_MASK (1 << 4)
|
|
#define S2MPS11_IRQ_ACOKBR_MASK (1 << 5)
|
|
#define S2MPS11_IRQ_PWRON1S_MASK (1 << 6)
|
|
#define S2MPS11_IRQ_MRB_MASK (1 << 7)
|
|
|
|
#define S2MPS11_IRQ_RTC60S_MASK (1 << 0)
|
|
#define S2MPS11_IRQ_RTCA1_MASK (1 << 1)
|
|
#define S2MPS11_IRQ_RTCA0_MASK (1 << 2)
|
|
#define S2MPS11_IRQ_SMPL_MASK (1 << 3)
|
|
#define S2MPS11_IRQ_RTC1S_MASK (1 << 4)
|
|
#define S2MPS11_IRQ_WTSR_MASK (1 << 5)
|
|
|
|
#define S2MPS11_IRQ_INT120C_MASK (1 << 0)
|
|
#define S2MPS11_IRQ_INT140C_MASK (1 << 1)
|
|
|
|
enum s2mps14_irq {
|
|
S2MPS14_IRQ_PWRONF,
|
|
S2MPS14_IRQ_PWRONR,
|
|
S2MPS14_IRQ_JIGONBF,
|
|
S2MPS14_IRQ_JIGONBR,
|
|
S2MPS14_IRQ_ACOKBF,
|
|
S2MPS14_IRQ_ACOKBR,
|
|
S2MPS14_IRQ_PWRON1S,
|
|
S2MPS14_IRQ_MRB,
|
|
|
|
S2MPS14_IRQ_RTC60S,
|
|
S2MPS14_IRQ_RTCA1,
|
|
S2MPS14_IRQ_RTCA0,
|
|
S2MPS14_IRQ_SMPL,
|
|
S2MPS14_IRQ_RTC1S,
|
|
S2MPS14_IRQ_WTSR,
|
|
|
|
S2MPS14_IRQ_INT120C,
|
|
S2MPS14_IRQ_INT140C,
|
|
S2MPS14_IRQ_TSD,
|
|
|
|
S2MPS14_IRQ_NR,
|
|
};
|
|
|
|
enum s2mpu02_irq {
|
|
S2MPU02_IRQ_PWRONF,
|
|
S2MPU02_IRQ_PWRONR,
|
|
S2MPU02_IRQ_JIGONBF,
|
|
S2MPU02_IRQ_JIGONBR,
|
|
S2MPU02_IRQ_ACOKBF,
|
|
S2MPU02_IRQ_ACOKBR,
|
|
S2MPU02_IRQ_PWRON1S,
|
|
S2MPU02_IRQ_MRB,
|
|
|
|
S2MPU02_IRQ_RTC60S,
|
|
S2MPU02_IRQ_RTCA1,
|
|
S2MPU02_IRQ_RTCA0,
|
|
S2MPU02_IRQ_SMPL,
|
|
S2MPU02_IRQ_RTC1S,
|
|
S2MPU02_IRQ_WTSR,
|
|
|
|
S2MPU02_IRQ_INT120C,
|
|
S2MPU02_IRQ_INT140C,
|
|
S2MPU02_IRQ_TSD,
|
|
|
|
S2MPU02_IRQ_NR,
|
|
};
|
|
|
|
/* Masks for interrupts are the same as in s2mps11 */
|
|
#define S2MPS14_IRQ_TSD_MASK (1 << 2)
|
|
|
|
enum s2mpu05_irq {
|
|
S2MPU05_IRQ_PWRONF,
|
|
S2MPU05_IRQ_PWRONR,
|
|
S2MPU05_IRQ_JIGONBF,
|
|
S2MPU05_IRQ_JIGONBR,
|
|
S2MPU05_IRQ_ACOKF,
|
|
S2MPU05_IRQ_ACOKR,
|
|
S2MPU05_IRQ_PWRON1S,
|
|
S2MPU05_IRQ_MRB,
|
|
|
|
S2MPU05_IRQ_RTC60S,
|
|
S2MPU05_IRQ_RTCA1,
|
|
S2MPU05_IRQ_RTCA0,
|
|
S2MPU05_IRQ_SMPL,
|
|
S2MPU05_IRQ_RTC1S,
|
|
S2MPU05_IRQ_WTSR,
|
|
|
|
S2MPU05_IRQ_INT120C,
|
|
S2MPU05_IRQ_INT140C,
|
|
S2MPU05_IRQ_TSD,
|
|
|
|
S2MPU05_IRQ_NR,
|
|
};
|
|
|
|
#define S2MPU05_IRQ_PWRONF_MASK BIT(0)
|
|
#define S2MPU05_IRQ_PWRONR_MASK BIT(1)
|
|
#define S2MPU05_IRQ_JIGONBF_MASK BIT(2)
|
|
#define S2MPU05_IRQ_JIGONBR_MASK BIT(3)
|
|
#define S2MPU05_IRQ_ACOKF_MASK BIT(4)
|
|
#define S2MPU05_IRQ_ACOKR_MASK BIT(5)
|
|
#define S2MPU05_IRQ_PWRON1S_MASK BIT(6)
|
|
#define S2MPU05_IRQ_MRB_MASK BIT(7)
|
|
|
|
#define S2MPU05_IRQ_RTC60S_MASK BIT(0)
|
|
#define S2MPU05_IRQ_RTCA1_MASK BIT(1)
|
|
#define S2MPU05_IRQ_RTCA0_MASK BIT(2)
|
|
#define S2MPU05_IRQ_SMPL_MASK BIT(3)
|
|
#define S2MPU05_IRQ_RTC1S_MASK BIT(4)
|
|
#define S2MPU05_IRQ_WTSR_MASK BIT(5)
|
|
|
|
#define S2MPU05_IRQ_INT120C_MASK BIT(0)
|
|
#define S2MPU05_IRQ_INT140C_MASK BIT(1)
|
|
#define S2MPU05_IRQ_TSD_MASK BIT(2)
|
|
|
|
enum s5m8767_irq {
|
|
S5M8767_IRQ_PWRR,
|
|
S5M8767_IRQ_PWRF,
|
|
S5M8767_IRQ_PWR1S,
|
|
S5M8767_IRQ_JIGR,
|
|
S5M8767_IRQ_JIGF,
|
|
S5M8767_IRQ_LOWBAT2,
|
|
S5M8767_IRQ_LOWBAT1,
|
|
|
|
S5M8767_IRQ_MRB,
|
|
S5M8767_IRQ_DVSOK2,
|
|
S5M8767_IRQ_DVSOK3,
|
|
S5M8767_IRQ_DVSOK4,
|
|
|
|
S5M8767_IRQ_RTC60S,
|
|
S5M8767_IRQ_RTCA1,
|
|
S5M8767_IRQ_RTCA2,
|
|
S5M8767_IRQ_SMPL,
|
|
S5M8767_IRQ_RTC1S,
|
|
S5M8767_IRQ_WTSR,
|
|
|
|
S5M8767_IRQ_NR,
|
|
};
|
|
|
|
#define S5M8767_IRQ_PWRR_MASK (1 << 0)
|
|
#define S5M8767_IRQ_PWRF_MASK (1 << 1)
|
|
#define S5M8767_IRQ_PWR1S_MASK (1 << 3)
|
|
#define S5M8767_IRQ_JIGR_MASK (1 << 4)
|
|
#define S5M8767_IRQ_JIGF_MASK (1 << 5)
|
|
#define S5M8767_IRQ_LOWBAT2_MASK (1 << 6)
|
|
#define S5M8767_IRQ_LOWBAT1_MASK (1 << 7)
|
|
|
|
#define S5M8767_IRQ_MRB_MASK (1 << 2)
|
|
#define S5M8767_IRQ_DVSOK2_MASK (1 << 3)
|
|
#define S5M8767_IRQ_DVSOK3_MASK (1 << 4)
|
|
#define S5M8767_IRQ_DVSOK4_MASK (1 << 5)
|
|
|
|
#define S5M8767_IRQ_RTC60S_MASK (1 << 0)
|
|
#define S5M8767_IRQ_RTCA1_MASK (1 << 1)
|
|
#define S5M8767_IRQ_RTCA2_MASK (1 << 2)
|
|
#define S5M8767_IRQ_SMPL_MASK (1 << 3)
|
|
#define S5M8767_IRQ_RTC1S_MASK (1 << 4)
|
|
#define S5M8767_IRQ_WTSR_MASK (1 << 5)
|
|
|
|
#endif /* __LINUX_MFD_SEC_IRQ_H */
|