mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
regulator: Updates for v3.15
This release has lots and lots of small cleanups and fixes in the
regulator subsystem, mainly cleaning up some bad patterns that got
duplicated in DT code, but otherwise very little of note outside
of the scope of the relevant drivers:
- Support for configuration of the initial state for gpio regulators
with multi-voltage support.
- Support for calling regulator_set_voltage() on fixed regulators.
- New drivers for Broadcom BCM590xx, Freescale pfuze200, Samsung S2MPA01 &
S2MPS11/4, some PWM controlled regulators found on some ST boards and
TI TPS65218.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAABAgAGBQJTOVGKAAoJELSic+t+oim9EVMP/ibXoOotc1LWU9ARaZ54ncuu
awetV5dugDOQh0uXSJSpo4e6rLV/eZzzKbY29aHN9h76WjM739tOLz2K9cIukZzr
VGA1j/uNwa9SOEDfkK++Qj08PXa/4I3ht912S5mL/Afyg8+AIL1UhE0kFjiTH/+r
8axbj0d9f3CZVmOGU4XH3lLBtlWGq++T4cx4sraekra8vNlisBf2cwr1S7j8Apqq
K5WsOzlWRFXLxct+UrOrmBLdx1Ln9505wjeL3yrvi2Rnw4TBNDTTWgcSqJ22ecBJ
QTr5kbBHuI1qEAcPX4qTzgS0c3TtLQzYjP4K7BZyR5b5EkqpffaA18VVZfo2JQDM
Fr+AfxPt2GLMrad1KshHvQFvmlkgKcESGn6vwnLOCw3jXsS/LiaPuiJlmDCCkCI8
tL62dUinm9EUpDEhxnwP/BKikVZCpG/q+TVx0TS1Yfj0p4EBPHrtvkuIMWeMbWCi
QLgzdp+iioU5UQ2Fpoblw5z4cQmCryzjOEykEy9Y575SS5/oe7rukVMWt5It4zMV
Atgu597v8oZDK6BVZOVq/JuvY9n34mhCBaH3YYRtmbEWXnAe9VjnfJUquWyCvtoz
T0FsM7TinOoCgjJr6YbOtK6dksRMnS3AkHS9UEP0MO2jrfKpgJy/IzlSyo6fl7bw
OVZc4nMmVX82MxPSJtVj
=mrN5
-----END PGP SIGNATURE-----
Merge tag 'regulator-v3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator
Pull regulator updates from Mark Brown:
"This release has lots and lots of small cleanups and fixes in the
regulator subsystem, mainly cleaning up some bad patterns that got
duplicated in DT code, but otherwise very little of note outside of
the scope of the relevant drivers:
- Support for configuration of the initial state for gpio regulators
with multi-voltage support.
- Support for calling regulator_set_voltage() on fixed regulators.
- New drivers for Broadcom BCM590xx, Freescale pfuze200, Samsung
S2MPA01 & S2MPS11/4, some PWM controlled regulators found on some
ST boards and TI TPS65218"
* tag 'regulator-v3.15' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (154 commits)
regulator: aat2870: Use regulator_map_voltage_ascend
regulator: st-pwm: Convert to get_voltage_sel
regulator: Add new driver for ST's PWM controlled voltage regulators
regulator: bcm590xx: Remove **rdev from struct bcm590xx_reg
regulator: bcm590xx: Make the modalias matches the driver name
regulator: s5m8767: Convert to use regulator_[enable|disable|is_enabled]_regmap
regulator: db8500-prcmu: Set 1.8V as a fixed voltage for vsmps2
regulator: s2mps11: Add missing of_node_put
regulator: s2mps11: Use of_get_child_by_name
Documentation: mfd: s2mps11: Document support for S2MPS14
regulator: s2mps11: Add set_suspend_disable for S2MPS14
regulator: s2mps11: Add support for S2MPS14 regulators
regulator: max8660: Fix brace alignment
regulator: dbx500: use seq_puts() instead of seq_printf()
regulator: dbx500-prcmu: Silence checkpatch warnings
regulator: anatop: Remove checking control_reg in [set|get]_voltage_sel
regulator: max8952: Silence checkpatch warning
regulator: max8925: Silence checkpatch warning
regulator: max8660: Silence checkpatch warnings
regulator: arizona-ldo1: Correct default regulator init_data
...
This commit is contained in:
commit
3786075b5e
82 changed files with 3556 additions and 746 deletions
|
|
@ -26,7 +26,9 @@
|
|||
#include <linux/mfd/samsung/core.h>
|
||||
#include <linux/mfd/samsung/irq.h>
|
||||
#include <linux/mfd/samsung/rtc.h>
|
||||
#include <linux/mfd/samsung/s2mpa01.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>
|
||||
#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
|
||||
static struct of_device_id sec_dt_match[] = {
|
||||
{ .compatible = "samsung,s5m8767-pmic",
|
||||
.data = (void *)S5M8767X,
|
||||
},
|
||||
{ .compatible = "samsung,s2mps11-pmic",
|
||||
}, {
|
||||
.compatible = "samsung,s2mps11-pmic",
|
||||
.data = (void *)S2MPS11X,
|
||||
}, {
|
||||
.compatible = "samsung,s2mps14-pmic",
|
||||
.data = (void *)S2MPS14X,
|
||||
}, {
|
||||
.compatible = "samsung,s2mpa01-pmic",
|
||||
.data = (void *)S2MPA01,
|
||||
}, {
|
||||
/* Sentinel */
|
||||
},
|
||||
{},
|
||||
};
|
||||
#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)
|
||||
{
|
||||
switch (reg) {
|
||||
|
|
@ -111,6 +148,15 @@ static const struct regmap_config sec_regmap_config = {
|
|||
.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 = {
|
||||
.reg_bits = 8,
|
||||
.val_bits = 8,
|
||||
|
|
@ -120,6 +166,15 @@ static const struct regmap_config s2mps11_regmap_config = {
|
|||
.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 = {
|
||||
.reg_bits = 8,
|
||||
.val_bits = 8,
|
||||
|
|
@ -138,9 +193,18 @@ static const struct regmap_config s5m8767_regmap_config = {
|
|||
.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,
|
||||
.val_bits = 8,
|
||||
|
||||
.max_register = S2MPS_RTC_REG_MAX,
|
||||
};
|
||||
|
||||
#ifdef CONFIG_OF
|
||||
|
|
@ -180,24 +244,24 @@ static struct sec_platform_data *sec_pmic_i2c_parse_dt_pdata(
|
|||
}
|
||||
#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)
|
||||
{
|
||||
#ifdef CONFIG_OF
|
||||
if (i2c->dev.of_node) {
|
||||
const struct of_device_id *match;
|
||||
match = of_match_node(sec_dt_match, i2c->dev.of_node);
|
||||
return (int)match->data;
|
||||
return (unsigned long)match->data;
|
||||
}
|
||||
#endif
|
||||
return (int)id->driver_data;
|
||||
return id->driver_data;
|
||||
}
|
||||
|
||||
static int sec_pmic_probe(struct i2c_client *i2c,
|
||||
const struct i2c_device_id *id)
|
||||
{
|
||||
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;
|
||||
int ret;
|
||||
|
||||
|
|
@ -229,17 +293,34 @@ static int sec_pmic_probe(struct i2c_client *i2c,
|
|||
}
|
||||
|
||||
switch (sec_pmic->device_type) {
|
||||
case S2MPA01:
|
||||
regmap = &s2mpa01_regmap_config;
|
||||
break;
|
||||
case S2MPS11X:
|
||||
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;
|
||||
case S5M8763X:
|
||||
regmap = &s5m8763_regmap_config;
|
||||
regmap_rtc = &s5m_rtc_regmap_config;
|
||||
break;
|
||||
case S5M8767X:
|
||||
regmap = &s5m8767_regmap_config;
|
||||
regmap_rtc = &s5m_rtc_regmap_config;
|
||||
break;
|
||||
default:
|
||||
regmap = &sec_regmap_config;
|
||||
regmap_rtc = &s5m_rtc_regmap_config;
|
||||
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);
|
||||
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);
|
||||
|
||||
sec_pmic->regmap_rtc = devm_regmap_init_i2c(sec_pmic->rtc,
|
||||
&sec_rtc_regmap_config);
|
||||
sec_pmic->regmap_rtc = devm_regmap_init_i2c(sec_pmic->rtc, regmap_rtc);
|
||||
if (IS_ERR(sec_pmic->regmap_rtc)) {
|
||||
ret = PTR_ERR(sec_pmic->regmap_rtc);
|
||||
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,
|
||||
ARRAY_SIZE(s5m8767_devs), NULL, 0, NULL);
|
||||
break;
|
||||
case S2MPA01:
|
||||
ret = mfd_add_devices(sec_pmic->dev, -1, s2mpa01_devs,
|
||||
ARRAY_SIZE(s2mpa01_devs), NULL, 0, NULL);
|
||||
break;
|
||||
case S2MPS11X:
|
||||
ret = mfd_add_devices(sec_pmic->dev, -1, s2mps11_devs,
|
||||
ARRAY_SIZE(s2mps11_devs), NULL, 0, NULL);
|
||||
break;
|
||||
case S2MPS14X:
|
||||
ret = mfd_add_devices(sec_pmic->dev, -1, s2mps14_devs,
|
||||
ARRAY_SIZE(s2mps14_devs), NULL, 0, NULL);
|
||||
break;
|
||||
default:
|
||||
/* If this happens the probe function is problem */
|
||||
BUG();
|
||||
|
|
|
|||
|
|
@ -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,6 +19,7 @@
|
|||
#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>
|
||||
|
||||
|
|
@ -59,14 +60,14 @@ static const struct regmap_irq s2mps11_irqs[] = {
|
|||
.reg_offset = 1,
|
||||
.mask = S2MPS11_IRQ_RTC60S_MASK,
|
||||
},
|
||||
[S2MPS11_IRQ_RTCA0] = {
|
||||
.reg_offset = 1,
|
||||
.mask = S2MPS11_IRQ_RTCA0_MASK,
|
||||
},
|
||||
[S2MPS11_IRQ_RTCA1] = {
|
||||
.reg_offset = 1,
|
||||
.mask = S2MPS11_IRQ_RTCA1_MASK,
|
||||
},
|
||||
[S2MPS11_IRQ_RTCA2] = {
|
||||
.reg_offset = 1,
|
||||
.mask = S2MPS11_IRQ_RTCA2_MASK,
|
||||
},
|
||||
[S2MPS11_IRQ_SMPL] = {
|
||||
.reg_offset = 1,
|
||||
.mask = S2MPS11_IRQ_SMPL_MASK,
|
||||
|
|
@ -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[] = {
|
||||
[S5M8767_IRQ_PWRR] = {
|
||||
|
|
@ -246,6 +317,16 @@ static const struct regmap_irq_chip s2mps11_irq_chip = {
|
|||
.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 = {
|
||||
.name = "s5m8767",
|
||||
.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_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",
|
||||
sec_pmic->device_type);
|
||||
|
|
|
|||
Loading…
Reference in a new issue