2018-08-07 19:11:22 +03:00
// SPDX-License-Identifier: GPL-2.0+
//
// Copyright (c) 2011-2014 Samsung Electronics Co., Ltd
// http://www.samsung.com
2011-12-23 12:28:09 +04:00
# include <linux/device.h>
# include <linux/interrupt.h>
# include <linux/irq.h>
2018-08-07 19:11:25 +03:00
# include <linux/module.h>
2012-07-11 16:08:11 +04:00
# include <linux/regmap.h>
2012-07-11 16:07:16 +04:00
# include <linux/mfd/samsung/core.h>
# include <linux/mfd/samsung/irq.h>
2012-07-11 16:08:11 +04:00
# include <linux/mfd/samsung/s2mps11.h>
2014-02-28 14:41:44 +04:00
# include <linux/mfd/samsung/s2mps14.h>
2014-06-25 11:14:44 +04:00
# include <linux/mfd/samsung/s2mpu02.h>
2012-07-11 16:07:16 +04:00
# include <linux/mfd/samsung/s5m8763.h>
# include <linux/mfd/samsung/s5m8767.h>
2011-12-23 12:28:09 +04:00
2013-11-28 12:09:43 +04:00
static const struct regmap_irq s2mps11_irqs [ ] = {
2012-07-11 16:08:11 +04:00
[ S2MPS11_IRQ_PWRONF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_PWRONF_MASK ,
} ,
[ S2MPS11_IRQ_PWRONR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_PWRONR_MASK ,
} ,
[ S2MPS11_IRQ_JIGONBF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_JIGONBF_MASK ,
} ,
[ S2MPS11_IRQ_JIGONBR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_JIGONBR_MASK ,
} ,
[ S2MPS11_IRQ_ACOKBF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_ACOKBF_MASK ,
} ,
[ S2MPS11_IRQ_ACOKBR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_ACOKBR_MASK ,
} ,
[ S2MPS11_IRQ_PWRON1S ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_PWRON1S_MASK ,
} ,
[ S2MPS11_IRQ_MRB ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_MRB_MASK ,
} ,
[ S2MPS11_IRQ_RTC60S ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_RTC60S_MASK ,
} ,
2014-02-28 14:41:43 +04:00
[ S2MPS11_IRQ_RTCA1 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2014-02-28 14:41:43 +04:00
. mask = S2MPS11_IRQ_RTCA1_MASK ,
2012-07-11 16:08:11 +04:00
} ,
2015-04-02 17:36:15 +03:00
[ S2MPS11_IRQ_RTCA0 ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTCA0_MASK ,
} ,
2012-07-11 16:08:11 +04:00
[ S2MPS11_IRQ_SMPL ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_SMPL_MASK ,
} ,
[ S2MPS11_IRQ_RTC1S ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_RTC1S_MASK ,
} ,
[ S2MPS11_IRQ_WTSR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_WTSR_MASK ,
} ,
[ S2MPS11_IRQ_INT120C ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_INT120C_MASK ,
} ,
[ S2MPS11_IRQ_INT140C ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2012-07-11 16:08:11 +04:00
. mask = S2MPS11_IRQ_INT140C_MASK ,
} ,
2011-12-23 12:28:09 +04:00
} ;
2014-02-28 14:41:44 +04:00
static const struct regmap_irq s2mps14_irqs [ ] = {
[ S2MPS14_IRQ_PWRONF ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_PWRONF_MASK ,
} ,
[ S2MPS14_IRQ_PWRONR ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_PWRONR_MASK ,
} ,
[ S2MPS14_IRQ_JIGONBF ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_JIGONBF_MASK ,
} ,
[ S2MPS14_IRQ_JIGONBR ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_JIGONBR_MASK ,
} ,
[ S2MPS14_IRQ_ACOKBF ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_ACOKBF_MASK ,
} ,
[ S2MPS14_IRQ_ACOKBR ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_ACOKBR_MASK ,
} ,
[ S2MPS14_IRQ_PWRON1S ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_PWRON1S_MASK ,
} ,
[ S2MPS14_IRQ_MRB ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_MRB_MASK ,
} ,
[ S2MPS14_IRQ_RTC60S ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTC60S_MASK ,
} ,
[ S2MPS14_IRQ_RTCA1 ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTCA1_MASK ,
} ,
[ S2MPS14_IRQ_RTCA0 ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTCA0_MASK ,
} ,
[ S2MPS14_IRQ_SMPL ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_SMPL_MASK ,
} ,
[ S2MPS14_IRQ_RTC1S ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTC1S_MASK ,
} ,
[ S2MPS14_IRQ_WTSR ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_WTSR_MASK ,
} ,
[ S2MPS14_IRQ_INT120C ] = {
. reg_offset = 2 ,
. mask = S2MPS11_IRQ_INT120C_MASK ,
} ,
[ S2MPS14_IRQ_INT140C ] = {
. reg_offset = 2 ,
. mask = S2MPS11_IRQ_INT140C_MASK ,
} ,
[ S2MPS14_IRQ_TSD ] = {
. reg_offset = 2 ,
. mask = S2MPS14_IRQ_TSD_MASK ,
} ,
} ;
2012-07-11 16:08:11 +04:00
2014-06-25 11:14:44 +04:00
static const struct regmap_irq s2mpu02_irqs [ ] = {
[ S2MPU02_IRQ_PWRONF ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_PWRONF_MASK ,
} ,
[ S2MPU02_IRQ_PWRONR ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_PWRONR_MASK ,
} ,
[ S2MPU02_IRQ_JIGONBF ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_JIGONBF_MASK ,
} ,
[ S2MPU02_IRQ_JIGONBR ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_JIGONBR_MASK ,
} ,
[ S2MPU02_IRQ_ACOKBF ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_ACOKBF_MASK ,
} ,
[ S2MPU02_IRQ_ACOKBR ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_ACOKBR_MASK ,
} ,
[ S2MPU02_IRQ_PWRON1S ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_PWRON1S_MASK ,
} ,
[ S2MPU02_IRQ_MRB ] = {
. reg_offset = 0 ,
. mask = S2MPS11_IRQ_MRB_MASK ,
} ,
[ S2MPU02_IRQ_RTC60S ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTC60S_MASK ,
} ,
[ S2MPU02_IRQ_RTCA1 ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTCA1_MASK ,
} ,
[ S2MPU02_IRQ_RTCA0 ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTCA0_MASK ,
} ,
[ S2MPU02_IRQ_SMPL ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_SMPL_MASK ,
} ,
[ S2MPU02_IRQ_RTC1S ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_RTC1S_MASK ,
} ,
[ S2MPU02_IRQ_WTSR ] = {
. reg_offset = 1 ,
. mask = S2MPS11_IRQ_WTSR_MASK ,
} ,
[ S2MPU02_IRQ_INT120C ] = {
. reg_offset = 2 ,
. mask = S2MPS11_IRQ_INT120C_MASK ,
} ,
[ S2MPU02_IRQ_INT140C ] = {
. reg_offset = 2 ,
. mask = S2MPS11_IRQ_INT140C_MASK ,
} ,
[ S2MPU02_IRQ_TSD ] = {
. reg_offset = 2 ,
. mask = S2MPS14_IRQ_TSD_MASK ,
} ,
} ;
2013-11-28 12:09:43 +04:00
static const struct regmap_irq s5m8767_irqs [ ] = {
2011-12-23 12:28:09 +04:00
[ S5M8767_IRQ_PWRR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_PWRR_MASK ,
} ,
[ S5M8767_IRQ_PWRF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_PWRF_MASK ,
} ,
[ S5M8767_IRQ_PWR1S ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_PWR1S_MASK ,
} ,
[ S5M8767_IRQ_JIGR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_JIGR_MASK ,
} ,
[ S5M8767_IRQ_JIGF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_JIGF_MASK ,
} ,
[ S5M8767_IRQ_LOWBAT2 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_LOWBAT2_MASK ,
} ,
[ S5M8767_IRQ_LOWBAT1 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_LOWBAT1_MASK ,
} ,
[ S5M8767_IRQ_MRB ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_MRB_MASK ,
} ,
[ S5M8767_IRQ_DVSOK2 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_DVSOK2_MASK ,
} ,
[ S5M8767_IRQ_DVSOK3 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_DVSOK3_MASK ,
} ,
[ S5M8767_IRQ_DVSOK4 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_DVSOK4_MASK ,
} ,
[ S5M8767_IRQ_RTC60S ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_RTC60S_MASK ,
} ,
[ S5M8767_IRQ_RTCA1 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_RTCA1_MASK ,
} ,
[ S5M8767_IRQ_RTCA2 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_RTCA2_MASK ,
} ,
[ S5M8767_IRQ_SMPL ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_SMPL_MASK ,
} ,
[ S5M8767_IRQ_RTC1S ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_RTC1S_MASK ,
} ,
[ S5M8767_IRQ_WTSR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8767_IRQ_WTSR_MASK ,
} ,
} ;
2013-11-28 12:09:43 +04:00
static const struct regmap_irq s5m8763_irqs [ ] = {
2011-12-23 12:28:09 +04:00
[ S5M8763_IRQ_DCINF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_DCINF_MASK ,
} ,
[ S5M8763_IRQ_DCINR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_DCINR_MASK ,
} ,
[ S5M8763_IRQ_JIGF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_JIGF_MASK ,
} ,
[ S5M8763_IRQ_JIGR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_JIGR_MASK ,
} ,
[ S5M8763_IRQ_PWRONF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_PWRONF_MASK ,
} ,
[ S5M8763_IRQ_PWRONR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 0 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_PWRONR_MASK ,
} ,
[ S5M8763_IRQ_WTSREVNT ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_WTSREVNT_MASK ,
} ,
[ S5M8763_IRQ_SMPLEVNT ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_SMPLEVNT_MASK ,
} ,
[ S5M8763_IRQ_ALARM1 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_ALARM1_MASK ,
} ,
[ S5M8763_IRQ_ALARM0 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 1 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_ALARM0_MASK ,
} ,
[ S5M8763_IRQ_ONKEY1S ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_ONKEY1S_MASK ,
} ,
[ S5M8763_IRQ_TOPOFFR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_TOPOFFR_MASK ,
} ,
[ S5M8763_IRQ_DCINOVPR ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_DCINOVPR_MASK ,
} ,
[ S5M8763_IRQ_CHGRSTF ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_CHGRSTF_MASK ,
} ,
[ S5M8763_IRQ_DONER ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_DONER_MASK ,
} ,
[ S5M8763_IRQ_CHGFAULT ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 2 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_CHGFAULT_MASK ,
} ,
[ S5M8763_IRQ_LOBAT1 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 3 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_LOBAT1_MASK ,
} ,
[ S5M8763_IRQ_LOBAT2 ] = {
2012-10-17 10:18:55 +04:00
. reg_offset = 3 ,
2011-12-23 12:28:09 +04:00
. mask = S5M8763_IRQ_LOBAT2_MASK ,
} ,
} ;
2013-11-28 12:09:43 +04:00
static const struct regmap_irq_chip s2mps11_irq_chip = {
2012-07-11 16:08:11 +04:00
. name = " s2mps11 " ,
. irqs = s2mps11_irqs ,
. num_irqs = ARRAY_SIZE ( s2mps11_irqs ) ,
. num_regs = 3 ,
. status_base = S2MPS11_REG_INT1 ,
. mask_base = S2MPS11_REG_INT1M ,
. ack_base = S2MPS11_REG_INT1 ,
} ;
2011-12-23 12:28:09 +04:00
2014-11-18 11:59:39 +03:00
# define S2MPS1X_IRQ_CHIP_COMMON_DATA \
. irqs = s2mps14_irqs , \
. num_irqs = ARRAY_SIZE ( s2mps14_irqs ) , \
. num_regs = 3 , \
. status_base = S2MPS14_REG_INT1 , \
. mask_base = S2MPS14_REG_INT1M , \
. ack_base = S2MPS14_REG_INT1 \
static const struct regmap_irq_chip s2mps13_irq_chip = {
. name = " s2mps13 " ,
S2MPS1X_IRQ_CHIP_COMMON_DATA ,
} ;
2014-02-28 14:41:44 +04:00
static const struct regmap_irq_chip s2mps14_irq_chip = {
. name = " s2mps14 " ,
2014-11-18 11:59:39 +03:00
S2MPS1X_IRQ_CHIP_COMMON_DATA ,
2014-02-28 14:41:44 +04:00
} ;
2015-11-20 13:37:51 +03:00
static const struct regmap_irq_chip s2mps15_irq_chip = {
. name = " s2mps15 " ,
S2MPS1X_IRQ_CHIP_COMMON_DATA ,
} ;
2014-06-25 11:14:44 +04:00
static const struct regmap_irq_chip s2mpu02_irq_chip = {
. name = " s2mpu02 " ,
. irqs = s2mpu02_irqs ,
. num_irqs = ARRAY_SIZE ( s2mpu02_irqs ) ,
. num_regs = 3 ,
. status_base = S2MPU02_REG_INT1 ,
. mask_base = S2MPU02_REG_INT1M ,
. ack_base = S2MPU02_REG_INT1 ,
} ;
2013-11-28 12:09:43 +04:00
static const struct regmap_irq_chip s5m8767_irq_chip = {
2011-12-23 12:28:09 +04:00
. name = " s5m8767 " ,
2012-07-11 16:08:11 +04:00
. irqs = s5m8767_irqs ,
. num_irqs = ARRAY_SIZE ( s5m8767_irqs ) ,
. num_regs = 3 ,
. status_base = S5M8767_REG_INT1 ,
. mask_base = S5M8767_REG_INT1M ,
. ack_base = S5M8767_REG_INT1 ,
2011-12-23 12:28:09 +04:00
} ;
2013-11-28 12:09:43 +04:00
static const struct regmap_irq_chip s5m8763_irq_chip = {
2011-12-23 12:28:09 +04:00
. name = " s5m8763 " ,
2012-07-11 16:08:11 +04:00
. irqs = s5m8763_irqs ,
. num_irqs = ARRAY_SIZE ( s5m8763_irqs ) ,
. num_regs = 4 ,
. status_base = S5M8763_REG_IRQ1 ,
. mask_base = S5M8763_REG_IRQM1 ,
. ack_base = S5M8763_REG_IRQ1 ,
2011-12-23 12:28:09 +04:00
} ;
2012-07-11 16:06:55 +04:00
int sec_irq_init ( struct sec_pmic_dev * sec_pmic )
2011-12-23 12:28:09 +04:00
{
int ret = 0 ;
2012-07-11 16:06:55 +04:00
int type = sec_pmic - > device_type ;
2014-06-25 11:14:44 +04:00
const struct regmap_irq_chip * sec_irq_chip ;
2011-12-23 12:28:09 +04:00
2012-07-11 16:06:55 +04:00
if ( ! sec_pmic - > irq ) {
dev_warn ( sec_pmic - > dev ,
2011-12-23 12:28:09 +04:00
" No interrupt specified, no interrupts \n " ) ;
2012-07-11 16:06:55 +04:00
sec_pmic - > irq_base = 0 ;
2011-12-23 12:28:09 +04:00
return 0 ;
}
switch ( type ) {
case S5M8763X :
2014-06-25 11:14:44 +04:00
sec_irq_chip = & s5m8763_irq_chip ;
2011-12-23 12:28:09 +04:00
break ;
case S5M8767X :
2014-06-25 11:14:44 +04:00
sec_irq_chip = & s5m8767_irq_chip ;
2011-12-23 12:28:09 +04:00
break ;
2019-02-14 01:24:02 +03:00
case S2MPA01 :
sec_irq_chip = & s2mps14_irq_chip ;
break ;
2012-07-11 16:08:11 +04:00
case S2MPS11X :
2014-06-25 11:14:44 +04:00
sec_irq_chip = & s2mps11_irq_chip ;
2011-12-23 12:28:09 +04:00
break ;
2014-11-18 11:59:39 +03:00
case S2MPS13X :
sec_irq_chip = & s2mps13_irq_chip ;
break ;
2014-02-28 14:41:44 +04:00
case S2MPS14X :
2014-06-25 11:14:44 +04:00
sec_irq_chip = & s2mps14_irq_chip ;
break ;
2015-11-20 13:37:51 +03:00
case S2MPS15X :
sec_irq_chip = & s2mps15_irq_chip ;
break ;
2014-06-25 11:14:44 +04:00
case S2MPU02 :
sec_irq_chip = & s2mpu02_irq_chip ;
2014-02-28 14:41:44 +04:00
break ;
2011-12-23 12:28:09 +04:00
default :
2014-04-23 18:13:05 +04:00
dev_err ( sec_pmic - > dev , " Unknown device type %lu \n " ,
2012-07-11 16:08:11 +04:00
sec_pmic - > device_type ) ;
return - EINVAL ;
2011-12-23 12:28:09 +04:00
}
2016-04-21 15:25:56 +03:00
ret = devm_regmap_add_irq_chip ( sec_pmic - > dev , sec_pmic - > regmap_pmic ,
sec_pmic - > irq ,
IRQF_TRIGGER_FALLING | IRQF_ONESHOT ,
sec_pmic - > irq_base , sec_irq_chip ,
& sec_pmic - > irq_data ) ;
2012-07-11 16:08:11 +04:00
if ( ret ! = 0 ) {
dev_err ( sec_pmic - > dev , " Failed to register IRQ chip: %d \n " , ret ) ;
2012-02-20 19:22:56 +04:00
return ret ;
}
2011-12-23 12:28:09 +04:00
2015-04-02 17:36:15 +03:00
/*
* The rtc - s5m driver requests S2MPS14_IRQ_RTCA0 also for S2MPS11
* so the interrupt number must be consistent .
*/
BUILD_BUG_ON ( ( ( enum s2mps14_irq ) S2MPS11_IRQ_RTCA0 ) ! = S2MPS14_IRQ_RTCA0 ) ;
2011-12-23 12:28:09 +04:00
return 0 ;
}
2018-08-07 19:11:25 +03:00
EXPORT_SYMBOL_GPL ( sec_irq_init ) ;
MODULE_AUTHOR ( " Sangbeom Kim <sbkim73@samsung.com> " ) ;
MODULE_AUTHOR ( " Chanwoo Choi <cw00.choi@samsung.com> " ) ;
MODULE_AUTHOR ( " Krzysztof Kozlowski <krzk@kernel.org> " ) ;
MODULE_DESCRIPTION ( " Interrupt support for the S5M MFD " ) ;
MODULE_LICENSE ( " GPL " ) ;