diff options
Diffstat (limited to 'drivers/mfd/sec-irq.c')
| -rw-r--r-- | drivers/mfd/sec-irq.c | 117 | 
1 files changed, 102 insertions, 15 deletions
diff --git a/drivers/mfd/sec-irq.c b/drivers/mfd/sec-irq.c index 0dd84e99081..654e2c1dbf7 100644 --- a/drivers/mfd/sec-irq.c +++ b/drivers/mfd/sec-irq.c @@ -1,7 +1,7 @@  /*   * sec-irq.c   * - * Copyright (c) 2011 Samsung Electronics Co., Ltd + * Copyright (c) 2011-2014 Samsung Electronics Co., Ltd   *              http://www.samsung.com   *   *  This program is free software; you can redistribute  it and/or modify it @@ -19,10 +19,11 @@  #include <linux/mfd/samsung/core.h>  #include <linux/mfd/samsung/irq.h>  #include <linux/mfd/samsung/s2mps11.h> +#include <linux/mfd/samsung/s2mps14.h>  #include <linux/mfd/samsung/s5m8763.h>  #include <linux/mfd/samsung/s5m8767.h> -static struct regmap_irq s2mps11_irqs[] = { +static const struct regmap_irq s2mps11_irqs[] = {  	[S2MPS11_IRQ_PWRONF] = {  		.reg_offset = 0,  		.mask = S2MPS11_IRQ_PWRONF_MASK, @@ -59,13 +60,13 @@ static struct regmap_irq s2mps11_irqs[] = {  		.reg_offset = 1,  		.mask = S2MPS11_IRQ_RTC60S_MASK,  	}, -	[S2MPS11_IRQ_RTCA1] = { +	[S2MPS11_IRQ_RTCA0] = {  		.reg_offset = 1, -		.mask = S2MPS11_IRQ_RTCA1_MASK, +		.mask = S2MPS11_IRQ_RTCA0_MASK,  	}, -	[S2MPS11_IRQ_RTCA2] = { +	[S2MPS11_IRQ_RTCA1] = {  		.reg_offset = 1, -		.mask = S2MPS11_IRQ_RTCA2_MASK, +		.mask = S2MPS11_IRQ_RTCA1_MASK,  	},  	[S2MPS11_IRQ_SMPL] = {  		.reg_offset = 1, @@ -89,8 +90,78 @@ static struct regmap_irq s2mps11_irqs[] = {  	},  }; +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, +	}, +}; -static struct regmap_irq s5m8767_irqs[] = { +static const struct regmap_irq s5m8767_irqs[] = {  	[S5M8767_IRQ_PWRR] = {  		.reg_offset = 0,  		.mask = S5M8767_IRQ_PWRR_MASK, @@ -161,7 +232,7 @@ static struct regmap_irq s5m8767_irqs[] = {  	},  }; -static struct regmap_irq s5m8763_irqs[] = { +static const struct regmap_irq s5m8763_irqs[] = {  	[S5M8763_IRQ_DCINF] = {  		.reg_offset = 0,  		.mask = S5M8763_IRQ_DCINF_MASK, @@ -236,7 +307,7 @@ static struct regmap_irq s5m8763_irqs[] = {  	},  }; -static struct regmap_irq_chip s2mps11_irq_chip = { +static const struct regmap_irq_chip s2mps11_irq_chip = {  	.name = "s2mps11",  	.irqs = s2mps11_irqs,  	.num_irqs = ARRAY_SIZE(s2mps11_irqs), @@ -246,7 +317,17 @@ static struct regmap_irq_chip s2mps11_irq_chip = {  	.ack_base = S2MPS11_REG_INT1,  }; -static struct regmap_irq_chip s5m8767_irq_chip = { +static const struct regmap_irq_chip s2mps14_irq_chip = { +	.name = "s2mps14", +	.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 s5m8767_irq_chip = {  	.name = "s5m8767",  	.irqs = s5m8767_irqs,  	.num_irqs = ARRAY_SIZE(s5m8767_irqs), @@ -256,7 +337,7 @@ static struct regmap_irq_chip s5m8767_irq_chip = {  	.ack_base = S5M8767_REG_INT1,  }; -static struct regmap_irq_chip s5m8763_irq_chip = { +static const struct regmap_irq_chip s5m8763_irq_chip = {  	.name = "s5m8763",  	.irqs = s5m8763_irqs,  	.num_irqs = ARRAY_SIZE(s5m8763_irqs), @@ -280,25 +361,31 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)  	switch (type) {  	case S5M8763X: -		ret = regmap_add_irq_chip(sec_pmic->regmap, sec_pmic->irq, +		ret = regmap_add_irq_chip(sec_pmic->regmap_pmic, sec_pmic->irq,  				  IRQF_TRIGGER_FALLING | IRQF_ONESHOT,  				  sec_pmic->irq_base, &s5m8763_irq_chip,  				  &sec_pmic->irq_data);  		break;  	case S5M8767X: -		ret = regmap_add_irq_chip(sec_pmic->regmap, sec_pmic->irq, +		ret = regmap_add_irq_chip(sec_pmic->regmap_pmic, sec_pmic->irq,  				  IRQF_TRIGGER_FALLING | IRQF_ONESHOT,  				  sec_pmic->irq_base, &s5m8767_irq_chip,  				  &sec_pmic->irq_data);  		break;  	case S2MPS11X: -		ret = regmap_add_irq_chip(sec_pmic->regmap, sec_pmic->irq, +		ret = regmap_add_irq_chip(sec_pmic->regmap_pmic, sec_pmic->irq,  				  IRQF_TRIGGER_FALLING | IRQF_ONESHOT,  				  sec_pmic->irq_base, &s2mps11_irq_chip,  				  &sec_pmic->irq_data);  		break; +	case S2MPS14X: +		ret = regmap_add_irq_chip(sec_pmic->regmap_pmic, sec_pmic->irq, +				  IRQF_TRIGGER_FALLING | IRQF_ONESHOT, +				  sec_pmic->irq_base, &s2mps14_irq_chip, +				  &sec_pmic->irq_data); +		break;  	default: -		dev_err(sec_pmic->dev, "Unknown device type %d\n", +		dev_err(sec_pmic->dev, "Unknown device type %lu\n",  			sec_pmic->device_type);  		return -EINVAL;  	}  | 
