Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7b836485 authored by Mark Brown's avatar Mark Brown
Browse files

Merge remote-tracking branches 'regulator/topic/max8973',...

Merge remote-tracking branches 'regulator/topic/max8973', 'regulator/topic/max8997', 'regulator/topic/max8998', 'regulator/topic/mc13xxx', 'regulator/topic/pfuze100', 'regulator/topic/rc5t583' and 'regulator/topic/s2mps11' into regulator-next
Loading
+90 −0
Original line number Original line Diff line number Diff line

* Samsung S2MPA01 Voltage and Current Regulator

The Samsung S2MPA01 is a multi-function device which includes high
efficiency buck converters including Dual-Phase buck converter, various LDOs,
and an RTC. It is interfaced to the host controller using an I2C interface.
Each sub-block is addressed by the host system using different I2C slave
addresses.

Required properties:
- compatible: Should be "samsung,s2mpa01-pmic".
- reg: Specifies the I2C slave address of the PMIC block. It should be 0x66.

Optional properties:
- interrupt-parent: Specifies the phandle of the interrupt controller to which
  the interrupts from s2mpa01 are delivered to.
- interrupts: An interrupt specifier for the sole interrupt generated by the
  device.

Optional nodes:
- regulators: The regulators of s2mpa01 that have to be instantiated should be
  included in a sub-node named 'regulators'. Regulator nodes and constraints
  included in this sub-node use the standard regulator bindings which are
  documented elsewhere.

Properties for BUCK regulator nodes:
- regulator-ramp-delay: ramp delay in uV/us. May be 6250, 12500
  (default), 25000, or 50000. May be 0 for disabling the ramp delay on
  BUCK{1,2,3,4}.

 In the absence of the regulator-ramp-delay property, the default ramp
 delay will be used.

  NOTE: Some BUCKs share the ramp rate setting i.e. same ramp value will be set
  for a particular group of BUCKs. So provide same regulator-ramp-delay=<value>.

  The following BUCKs share ramp settings:
  * 1 and 6
  * 2 and 4
  * 8, 9, and 10

The following are the names of the regulators that the s2mpa01 PMIC block
supports. Note: The 'n' in LDOn and BUCKn represents the LDO or BUCK number
as per the datasheet of s2mpa01.

	- LDOn
		  - valid values for n are 1 to 26
		  - Example: LDO1, LD02, LDO26
	- BUCKn
		  - valid values for n are 1 to 10.
		  - Example: BUCK1, BUCK2, BUCK9

Example:

	s2mpa01_pmic@66 {
		compatible = "samsung,s2mpa01-pmic";
		reg = <0x66>;

		regulators {
			ldo1_reg: LDO1 {
				regulator-name = "VDD_ALIVE";
				regulator-min-microvolt = <1000000>;
				regulator-max-microvolt = <1000000>;
			};

			ldo2_reg: LDO2 {
				regulator-name = "VDDQ_MMC2";
				regulator-min-microvolt = <2800000>;
				regulator-max-microvolt = <2800000>;
				regulator-always-on;
			};

			buck1_reg: BUCK1 {
				regulator-name = "vdd_mif";
				regulator-min-microvolt = <950000>;
				regulator-max-microvolt = <1350000>;
				regulator-always-on;
				regulator-boot-on;
			};

			buck2_reg: BUCK2 {
				regulator-name = "vdd_arm";
				regulator-min-microvolt = <950000>;
				regulator-max-microvolt = <1350000>;
				regulator-always-on;
				regulator-boot-on;
				regulator-ramp-delay = <50000>;
			};
		};
	};
+8 −4
Original line number Original line Diff line number Diff line


* Samsung S2MPS11 Voltage and Current Regulator
* Samsung S2MPS11 and S2MPS14 Voltage and Current Regulator


The Samsung S2MPS11 is a multi-function device which includes voltage and
The Samsung S2MPS11 is a multi-function device which includes voltage and
current regulators, RTC, charger controller and other sub-blocks. It is
current regulators, RTC, charger controller and other sub-blocks. It is
@@ -7,7 +7,7 @@ interfaced to the host controller using an I2C interface. Each sub-block is
addressed by the host system using different I2C slave addresses.
addressed by the host system using different I2C slave addresses.


Required properties:
Required properties:
- compatible: Should be "samsung,s2mps11-pmic".
- compatible: Should be "samsung,s2mps11-pmic" or "samsung,s2mps14-pmic".
- reg: Specifies the I2C slave address of the pmic block. It should be 0x66.
- reg: Specifies the I2C slave address of the pmic block. It should be 0x66.


Optional properties:
Optional properties:
@@ -59,10 +59,14 @@ supports. Note: The 'n' in LDOn and BUCKn represents the LDO or BUCK number
as per the datasheet of s2mps11.
as per the datasheet of s2mps11.


	- LDOn
	- LDOn
		  - valid values for n are 1 to 38
		  - valid values for n are:
			- S2MPS11: 1 to 38
			- S2MPS14: 1 to 25
		  - Example: LDO1, LD02, LDO28
		  - Example: LDO1, LD02, LDO28
	- BUCKn
	- BUCKn
		  - valid values for n are 1 to 10.
		  - valid values for n are:
			- S2MPS11: 1 to 10
			- S2MPS14: 1 to 5
		  - Example: BUCK1, BUCK2, BUCK9
		  - Example: BUCK1, BUCK2, BUCK9


Example:
Example:
+94 −2
Original line number Original line Diff line number Diff line
PFUZE100 family of regulators
PFUZE100 family of regulators


Required properties:
Required properties:
- compatible: "fsl,pfuze100"
- compatible: "fsl,pfuze100" or "fsl,pfuze200"
- reg: I2C slave address
- reg: I2C slave address


Required child node:
Required child node:
@@ -10,11 +10,14 @@ Required child node:
  Documentation/devicetree/bindings/regulator/regulator.txt.
  Documentation/devicetree/bindings/regulator/regulator.txt.


  The valid names for regulators are:
  The valid names for regulators are:
  --PFUZE100
  sw1ab,sw1c,sw2,sw3a,sw3b,sw4,swbst,vsnvs,vrefddr,vgen1~vgen6
  sw1ab,sw1c,sw2,sw3a,sw3b,sw4,swbst,vsnvs,vrefddr,vgen1~vgen6
  --PFUZE200
  sw1ab,sw2,sw3a,sw3b,swbst,vsnvs,vrefddr,vgen1~vgen6


Each regulator is defined using the standard binding for regulators.
Each regulator is defined using the standard binding for regulators.


Example:
Example 1: PFUZE100


	pmic: pfuze100@08 {
	pmic: pfuze100@08 {
		compatible = "fsl,pfuze100";
		compatible = "fsl,pfuze100";
@@ -113,3 +116,92 @@ Example:
			};
			};
		};
		};
	};
	};


Example 2: PFUZE200

	pmic: pfuze200@08 {
		compatible = "fsl,pfuze200";
		reg = <0x08>;

		regulators {
			sw1a_reg: sw1ab {
				regulator-min-microvolt = <300000>;
				regulator-max-microvolt = <1875000>;
				regulator-boot-on;
				regulator-always-on;
				regulator-ramp-delay = <6250>;
			};

			sw2_reg: sw2 {
				regulator-min-microvolt = <800000>;
				regulator-max-microvolt = <3300000>;
				regulator-boot-on;
				regulator-always-on;
			};

			sw3a_reg: sw3a {
				regulator-min-microvolt = <400000>;
				regulator-max-microvolt = <1975000>;
				regulator-boot-on;
				regulator-always-on;
			};

			sw3b_reg: sw3b {
				regulator-min-microvolt = <400000>;
				regulator-max-microvolt = <1975000>;
				regulator-boot-on;
				regulator-always-on;
			};

			swbst_reg: swbst {
				regulator-min-microvolt = <5000000>;
				regulator-max-microvolt = <5150000>;
			};

			snvs_reg: vsnvs {
				regulator-min-microvolt = <1000000>;
				regulator-max-microvolt = <3000000>;
				regulator-boot-on;
				regulator-always-on;
			};

			vref_reg: vrefddr {
				regulator-boot-on;
				regulator-always-on;
			};

			vgen1_reg: vgen1 {
				regulator-min-microvolt = <800000>;
				regulator-max-microvolt = <1550000>;
			};

			vgen2_reg: vgen2 {
				regulator-min-microvolt = <800000>;
				regulator-max-microvolt = <1550000>;
			};

			vgen3_reg: vgen3 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
			};

			vgen4_reg: vgen4 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			vgen5_reg: vgen5 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			vgen6_reg: vgen6 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};
		};
	};
+102 −10
Original line number Original line Diff line number Diff line
@@ -26,7 +26,9 @@
#include <linux/mfd/samsung/core.h>
#include <linux/mfd/samsung/core.h>
#include <linux/mfd/samsung/irq.h>
#include <linux/mfd/samsung/irq.h>
#include <linux/mfd/samsung/rtc.h>
#include <linux/mfd/samsung/rtc.h>
#include <linux/mfd/samsung/s2mpa01.h>
#include <linux/mfd/samsung/s2mps11.h>
#include <linux/mfd/samsung/s2mps11.h>
#include <linux/mfd/samsung/s2mps14.h>
#include <linux/mfd/samsung/s5m8763.h>
#include <linux/mfd/samsung/s5m8763.h>
#include <linux/mfd/samsung/s5m8767.h>
#include <linux/mfd/samsung/s5m8767.h>
#include <linux/regmap.h>
#include <linux/regmap.h>
@@ -69,18 +71,53 @@ static const struct mfd_cell s2mps11_devs[] = {
	}
	}
};
};


static const struct mfd_cell s2mps14_devs[] = {
	{
		.name = "s2mps14-pmic",
	}, {
		.name = "s2mps14-rtc",
	}, {
		.name = "s2mps14-clk",
	}
};

static const struct mfd_cell s2mpa01_devs[] = {
	{
		.name = "s2mpa01-pmic",
	},
};

#ifdef CONFIG_OF
#ifdef CONFIG_OF
static struct of_device_id sec_dt_match[] = {
static struct of_device_id sec_dt_match[] = {
	{	.compatible = "samsung,s5m8767-pmic",
	{	.compatible = "samsung,s5m8767-pmic",
		.data = (void *)S5M8767X,
		.data = (void *)S5M8767X,
	},
	}, {
	{	.compatible = "samsung,s2mps11-pmic",
		.compatible = "samsung,s2mps11-pmic",
		.data = (void *)S2MPS11X,
		.data = (void *)S2MPS11X,
	}, {
		.compatible = "samsung,s2mps14-pmic",
		.data = (void *)S2MPS14X,
	}, {
		.compatible = "samsung,s2mpa01-pmic",
		.data = (void *)S2MPA01,
	}, {
		/* Sentinel */
	},
	},
	{},
};
};
#endif
#endif


static bool s2mpa01_volatile(struct device *dev, unsigned int reg)
{
	switch (reg) {
	case S2MPA01_REG_INT1M:
	case S2MPA01_REG_INT2M:
	case S2MPA01_REG_INT3M:
		return false;
	default:
		return true;
	}
}

static bool s2mps11_volatile(struct device *dev, unsigned int reg)
static bool s2mps11_volatile(struct device *dev, unsigned int reg)
{
{
	switch (reg) {
	switch (reg) {
@@ -111,6 +148,15 @@ static const struct regmap_config sec_regmap_config = {
	.val_bits = 8,
	.val_bits = 8,
};
};


static const struct regmap_config s2mpa01_regmap_config = {
	.reg_bits = 8,
	.val_bits = 8,

	.max_register = S2MPA01_REG_LDO_OVCB4,
	.volatile_reg = s2mpa01_volatile,
	.cache_type = REGCACHE_FLAT,
};

static const struct regmap_config s2mps11_regmap_config = {
static const struct regmap_config s2mps11_regmap_config = {
	.reg_bits = 8,
	.reg_bits = 8,
	.val_bits = 8,
	.val_bits = 8,
@@ -120,6 +166,15 @@ static const struct regmap_config s2mps11_regmap_config = {
	.cache_type = REGCACHE_FLAT,
	.cache_type = REGCACHE_FLAT,
};
};


static const struct regmap_config s2mps14_regmap_config = {
	.reg_bits = 8,
	.val_bits = 8,

	.max_register = S2MPS14_REG_LDODSCH3,
	.volatile_reg = s2mps11_volatile,
	.cache_type = REGCACHE_FLAT,
};

static const struct regmap_config s5m8763_regmap_config = {
static const struct regmap_config s5m8763_regmap_config = {
	.reg_bits = 8,
	.reg_bits = 8,
	.val_bits = 8,
	.val_bits = 8,
@@ -138,9 +193,18 @@ static const struct regmap_config s5m8767_regmap_config = {
	.cache_type = REGCACHE_FLAT,
	.cache_type = REGCACHE_FLAT,
};
};


static const struct regmap_config sec_rtc_regmap_config = {
static const struct regmap_config s5m_rtc_regmap_config = {
	.reg_bits = 8,
	.val_bits = 8,

	.max_register = SEC_RTC_REG_MAX,
};

static const struct regmap_config s2mps14_rtc_regmap_config = {
	.reg_bits = 8,
	.reg_bits = 8,
	.val_bits = 8,
	.val_bits = 8,

	.max_register = S2MPS_RTC_REG_MAX,
};
};


#ifdef CONFIG_OF
#ifdef CONFIG_OF
@@ -180,24 +244,24 @@ static struct sec_platform_data *sec_pmic_i2c_parse_dt_pdata(
}
}
#endif
#endif


static inline int sec_i2c_get_driver_data(struct i2c_client *i2c,
static inline unsigned long sec_i2c_get_driver_data(struct i2c_client *i2c,
						const struct i2c_device_id *id)
						const struct i2c_device_id *id)
{
{
#ifdef CONFIG_OF
#ifdef CONFIG_OF
	if (i2c->dev.of_node) {
	if (i2c->dev.of_node) {
		const struct of_device_id *match;
		const struct of_device_id *match;
		match = of_match_node(sec_dt_match, i2c->dev.of_node);
		match = of_match_node(sec_dt_match, i2c->dev.of_node);
		return (int)match->data;
		return (unsigned long)match->data;
	}
	}
#endif
#endif
	return (int)id->driver_data;
	return id->driver_data;
}
}


static int sec_pmic_probe(struct i2c_client *i2c,
static int sec_pmic_probe(struct i2c_client *i2c,
			    const struct i2c_device_id *id)
			    const struct i2c_device_id *id)
{
{
	struct sec_platform_data *pdata = dev_get_platdata(&i2c->dev);
	struct sec_platform_data *pdata = dev_get_platdata(&i2c->dev);
	const struct regmap_config *regmap;
	const struct regmap_config *regmap, *regmap_rtc;
	struct sec_pmic_dev *sec_pmic;
	struct sec_pmic_dev *sec_pmic;
	int ret;
	int ret;


@@ -229,17 +293,34 @@ static int sec_pmic_probe(struct i2c_client *i2c,
	}
	}


	switch (sec_pmic->device_type) {
	switch (sec_pmic->device_type) {
	case S2MPA01:
		regmap = &s2mpa01_regmap_config;
		break;
	case S2MPS11X:
	case S2MPS11X:
		regmap = &s2mps11_regmap_config;
		regmap = &s2mps11_regmap_config;
		/*
		 * The rtc-s5m driver does not support S2MPS11 and there
		 * is no mfd_cell for S2MPS11 RTC device.
		 * However we must pass something to devm_regmap_init_i2c()
		 * so use S5M-like regmap config even though it wouldn't work.
		 */
		regmap_rtc = &s5m_rtc_regmap_config;
		break;
	case S2MPS14X:
		regmap = &s2mps14_regmap_config;
		regmap_rtc = &s2mps14_rtc_regmap_config;
		break;
		break;
	case S5M8763X:
	case S5M8763X:
		regmap = &s5m8763_regmap_config;
		regmap = &s5m8763_regmap_config;
		regmap_rtc = &s5m_rtc_regmap_config;
		break;
		break;
	case S5M8767X:
	case S5M8767X:
		regmap = &s5m8767_regmap_config;
		regmap = &s5m8767_regmap_config;
		regmap_rtc = &s5m_rtc_regmap_config;
		break;
		break;
	default:
	default:
		regmap = &sec_regmap_config;
		regmap = &sec_regmap_config;
		regmap_rtc = &s5m_rtc_regmap_config;
		break;
		break;
	}
	}


@@ -252,10 +333,13 @@ static int sec_pmic_probe(struct i2c_client *i2c,
	}
	}


	sec_pmic->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR);
	sec_pmic->rtc = i2c_new_dummy(i2c->adapter, RTC_I2C_ADDR);
	if (!sec_pmic->rtc) {
		dev_err(&i2c->dev, "Failed to allocate I2C for RTC\n");
		return -ENODEV;
	}
	i2c_set_clientdata(sec_pmic->rtc, sec_pmic);
	i2c_set_clientdata(sec_pmic->rtc, sec_pmic);


	sec_pmic->regmap_rtc = devm_regmap_init_i2c(sec_pmic->rtc,
	sec_pmic->regmap_rtc = devm_regmap_init_i2c(sec_pmic->rtc, regmap_rtc);
			&sec_rtc_regmap_config);
	if (IS_ERR(sec_pmic->regmap_rtc)) {
	if (IS_ERR(sec_pmic->regmap_rtc)) {
		ret = PTR_ERR(sec_pmic->regmap_rtc);
		ret = PTR_ERR(sec_pmic->regmap_rtc);
		dev_err(&i2c->dev, "Failed to allocate RTC register map: %d\n",
		dev_err(&i2c->dev, "Failed to allocate RTC register map: %d\n",
@@ -283,10 +367,18 @@ static int sec_pmic_probe(struct i2c_client *i2c,
		ret = mfd_add_devices(sec_pmic->dev, -1, s5m8767_devs,
		ret = mfd_add_devices(sec_pmic->dev, -1, s5m8767_devs,
				      ARRAY_SIZE(s5m8767_devs), NULL, 0, NULL);
				      ARRAY_SIZE(s5m8767_devs), NULL, 0, NULL);
		break;
		break;
	case S2MPA01:
		ret = mfd_add_devices(sec_pmic->dev, -1, s2mpa01_devs,
				      ARRAY_SIZE(s2mpa01_devs), NULL, 0, NULL);
		break;
	case S2MPS11X:
	case S2MPS11X:
		ret = mfd_add_devices(sec_pmic->dev, -1, s2mps11_devs,
		ret = mfd_add_devices(sec_pmic->dev, -1, s2mps11_devs,
				      ARRAY_SIZE(s2mps11_devs), NULL, 0, NULL);
				      ARRAY_SIZE(s2mps11_devs), NULL, 0, NULL);
		break;
		break;
	case S2MPS14X:
		ret = mfd_add_devices(sec_pmic->dev, -1, s2mps14_devs,
				      ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL);
		break;
	default:
	default:
		/* If this happens the probe function is problem */
		/* If this happens the probe function is problem */
		BUG();
		BUG();
+92 −5
Original line number Original line Diff line number Diff line
/*
/*
 * sec-irq.c
 * sec-irq.c
 *
 *
 * Copyright (c) 2011 Samsung Electronics Co., Ltd
 * Copyright (c) 2011-2014 Samsung Electronics Co., Ltd
 *              http://www.samsung.com
 *              http://www.samsung.com
 *
 *
 *  This program is free software; you can redistribute  it and/or modify it
 *  This program is free software; you can redistribute  it and/or modify it
@@ -19,6 +19,7 @@
#include <linux/mfd/samsung/core.h>
#include <linux/mfd/samsung/core.h>
#include <linux/mfd/samsung/irq.h>
#include <linux/mfd/samsung/irq.h>
#include <linux/mfd/samsung/s2mps11.h>
#include <linux/mfd/samsung/s2mps11.h>
#include <linux/mfd/samsung/s2mps14.h>
#include <linux/mfd/samsung/s5m8763.h>
#include <linux/mfd/samsung/s5m8763.h>
#include <linux/mfd/samsung/s5m8767.h>
#include <linux/mfd/samsung/s5m8767.h>


@@ -59,13 +60,13 @@ static const struct regmap_irq s2mps11_irqs[] = {
		.reg_offset = 1,
		.reg_offset = 1,
		.mask = S2MPS11_IRQ_RTC60S_MASK,
		.mask = S2MPS11_IRQ_RTC60S_MASK,
	},
	},
	[S2MPS11_IRQ_RTCA1] = {
	[S2MPS11_IRQ_RTCA0] = {
		.reg_offset = 1,
		.reg_offset = 1,
		.mask = S2MPS11_IRQ_RTCA1_MASK,
		.mask = S2MPS11_IRQ_RTCA0_MASK,
	},
	},
	[S2MPS11_IRQ_RTCA2] = {
	[S2MPS11_IRQ_RTCA1] = {
		.reg_offset = 1,
		.reg_offset = 1,
		.mask = S2MPS11_IRQ_RTCA2_MASK,
		.mask = S2MPS11_IRQ_RTCA1_MASK,
	},
	},
	[S2MPS11_IRQ_SMPL] = {
	[S2MPS11_IRQ_SMPL] = {
		.reg_offset = 1,
		.reg_offset = 1,
@@ -89,6 +90,76 @@ static const 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 const struct regmap_irq s5m8767_irqs[] = {
static const struct regmap_irq s5m8767_irqs[] = {
	[S5M8767_IRQ_PWRR] = {
	[S5M8767_IRQ_PWRR] = {
@@ -246,6 +317,16 @@ static const struct regmap_irq_chip s2mps11_irq_chip = {
	.ack_base = S2MPS11_REG_INT1,
	.ack_base = S2MPS11_REG_INT1,
};
};


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 = {
static const struct regmap_irq_chip s5m8767_irq_chip = {
	.name = "s5m8767",
	.name = "s5m8767",
	.irqs = s5m8767_irqs,
	.irqs = s5m8767_irqs,
@@ -297,6 +378,12 @@ int sec_irq_init(struct sec_pmic_dev *sec_pmic)
				  sec_pmic->irq_base, &s2mps11_irq_chip,
				  sec_pmic->irq_base, &s2mps11_irq_chip,
				  &sec_pmic->irq_data);
				  &sec_pmic->irq_data);
		break;
		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:
	default:
		dev_err(sec_pmic->dev, "Unknown device type %d\n",
		dev_err(sec_pmic->dev, "Unknown device type %d\n",
			sec_pmic->device_type);
			sec_pmic->device_type);
Loading