mfd-lee-3.13-3
MFD patches due for v3.13. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJSgL55AAoJEFGvii+H/HdhPHgP/3jYD4qZcrrGID4QuNpZU+T8 DGneYS5Dl9YTrV0O5vuiaE59ZzaizP55OsKHYQ8kuu4i2WxB6Vc9Hyr3IWKKFA04 tV3Zmf6l2OcUzizmmlWI34sbYKAIfvFrHxkAwpUMX80oCgaDNIDUcHTiGgHGaNhT zsh1HyEWr6Uqjl9QqQhSP3WX5462+IolaAiFB7xD5ax+hIQk4u3v69j8LT3hXuv8 kJHKA+i8tNFcJjoWKB87b+ARkvejLpj/nyFesG5K1KY7Z7hIG6OWxJIR/T9260F8 ecOZuZ3PmLOLQOy3YckWZ2mOVwuQY+bxc+V5Y00I6S5uwG/Cz5ls5xpsrZ9PqNQo RLmZgeA2w5CuX28/3A3ziI9ZPasZ0XcoQOPuTN/JQjyNB3n1QtJTPEIp3yPGaWn4 UkadZTkkCEUD/oRXBhthe3J0rsYEwh8A31+W1Soh6CxYtgMiK8y3scDs9PIqb7nx j6tIpHnBMlbdSPxUTPLO2Od8lDCVXRkaR2LonXu0KDw3XoGVsSucWBW+UjTPCOiF 2M43+Nfonl5rhr0F/LP2wUO3RZnEABE/Gc85No6AFw7BRrSCtbrVP/S1LoZlSjA3 b7/Fywq/HtptdKAw160/KAhBhU3RIl03qmmmJXYeIo2HRZtFGoNc/WabCsdxpvpq DjnM4H/pppBQiTgxwQJX =tWbq -----END PGP SIGNATURE----- Merge tag 'mfd-lee-3.13-3' of git://git.linaro.org/people/ljones/mfd mfd-lee-3.13-3 MFD patches due for v3.13 - 2nd round.
This commit is contained in:
Коммит
90b128ed15
|
@ -1,10 +1,10 @@
|
|||
|
||||
* Samsung S2MPS11 Voltage and Current Regulator
|
||||
|
||||
The Samsung S2MP211 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
|
||||
interfaced to the host controller using a I2C interface. Each sub-block is
|
||||
addressed by the host system using different I2C slave address.
|
||||
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,s2mps11-pmic".
|
||||
|
@ -43,7 +43,8 @@ sub-node should be of the format as listed below.
|
|||
|
||||
BUCK[2/3/4/6] supports disabling ramp delay on hardware, so explictly
|
||||
regulator-ramp-delay = <0> can be used for them to disable ramp delay.
|
||||
In absence of regulator-ramp-delay property, default ramp delay will be used.
|
||||
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>.
|
||||
|
@ -58,10 +59,10 @@ supports. Note: The 'n' in LDOn and BUCKn represents the LDO or BUCK number
|
|||
as per the datasheet of s2mps11.
|
||||
|
||||
- LDOn
|
||||
- valid values for n are 1 to 28
|
||||
- valid values for n are 1 to 38
|
||||
- Example: LDO0, LD01, LDO28
|
||||
- BUCKn
|
||||
- valid values for n are 1 to 9.
|
||||
- valid values for n are 1 to 10.
|
||||
- Example: BUCK1, BUCK2, BUCK9
|
||||
|
||||
Example:
|
||||
|
|
|
@ -63,7 +63,8 @@ int mfd_cell_disable(struct platform_device *pdev)
|
|||
EXPORT_SYMBOL(mfd_cell_disable);
|
||||
|
||||
static int mfd_platform_add_cell(struct platform_device *pdev,
|
||||
const struct mfd_cell *cell)
|
||||
const struct mfd_cell *cell,
|
||||
atomic_t *usage_count)
|
||||
{
|
||||
if (!cell)
|
||||
return 0;
|
||||
|
@ -72,11 +73,12 @@ static int mfd_platform_add_cell(struct platform_device *pdev,
|
|||
if (!pdev->mfd_cell)
|
||||
return -ENOMEM;
|
||||
|
||||
pdev->mfd_cell->usage_count = usage_count;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int mfd_add_device(struct device *parent, int id,
|
||||
const struct mfd_cell *cell,
|
||||
const struct mfd_cell *cell, atomic_t *usage_count,
|
||||
struct resource *mem_base,
|
||||
int irq_base, struct irq_domain *domain)
|
||||
{
|
||||
|
@ -115,7 +117,7 @@ static int mfd_add_device(struct device *parent, int id,
|
|||
goto fail_res;
|
||||
}
|
||||
|
||||
ret = mfd_platform_add_cell(pdev, cell);
|
||||
ret = mfd_platform_add_cell(pdev, cell, usage_count);
|
||||
if (ret)
|
||||
goto fail_res;
|
||||
|
||||
|
@ -180,12 +182,12 @@ fail_alloc:
|
|||
}
|
||||
|
||||
int mfd_add_devices(struct device *parent, int id,
|
||||
struct mfd_cell *cells, int n_devs,
|
||||
const struct mfd_cell *cells, int n_devs,
|
||||
struct resource *mem_base,
|
||||
int irq_base, struct irq_domain *domain)
|
||||
{
|
||||
int i;
|
||||
int ret = 0;
|
||||
int ret;
|
||||
atomic_t *cnts;
|
||||
|
||||
/* initialize reference counting for all cells */
|
||||
|
@ -195,16 +197,19 @@ int mfd_add_devices(struct device *parent, int id,
|
|||
|
||||
for (i = 0; i < n_devs; i++) {
|
||||
atomic_set(&cnts[i], 0);
|
||||
cells[i].usage_count = &cnts[i];
|
||||
ret = mfd_add_device(parent, id, cells + i, mem_base,
|
||||
ret = mfd_add_device(parent, id, cells + i, cnts + i, mem_base,
|
||||
irq_base, domain);
|
||||
if (ret)
|
||||
break;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if (ret)
|
||||
mfd_remove_devices(parent);
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
if (i)
|
||||
mfd_remove_devices(parent);
|
||||
else
|
||||
kfree(cnts);
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(mfd_add_devices);
|
||||
|
@ -259,8 +264,8 @@ int mfd_clone_cell(const char *cell, const char **clones, size_t n_clones)
|
|||
for (i = 0; i < n_clones; i++) {
|
||||
cell_entry.name = clones[i];
|
||||
/* don't give up if a single call fails; just report error */
|
||||
if (mfd_add_device(pdev->dev.parent, -1, &cell_entry, NULL, 0,
|
||||
NULL))
|
||||
if (mfd_add_device(pdev->dev.parent, -1, &cell_entry,
|
||||
cell_entry.usage_count, NULL, 0, NULL))
|
||||
dev_err(dev, "failed to create platform device '%s'\n",
|
||||
clones[i]);
|
||||
}
|
||||
|
|
|
@ -171,11 +171,12 @@ static int pm8921_remove(struct platform_device *pdev)
|
|||
drvdata = platform_get_drvdata(pdev);
|
||||
if (drvdata)
|
||||
pmic = drvdata->pm_chip_data;
|
||||
if (pmic)
|
||||
if (pmic) {
|
||||
mfd_remove_devices(pmic->dev);
|
||||
if (pmic->irq_chip) {
|
||||
pm8xxx_irq_exit(pmic->irq_chip);
|
||||
pmic->irq_chip = NULL;
|
||||
if (pmic->irq_chip) {
|
||||
pm8xxx_irq_exit(pmic->irq_chip);
|
||||
pmic->irq_chip = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -243,6 +243,12 @@ int wm5110_patch(struct arizona *arizona)
|
|||
EXPORT_SYMBOL_GPL(wm5110_patch);
|
||||
|
||||
static const struct regmap_irq wm5110_aod_irqs[ARIZONA_NUM_IRQ] = {
|
||||
[ARIZONA_IRQ_MICD_CLAMP_FALL] = {
|
||||
.mask = ARIZONA_MICD_CLAMP_FALL_EINT1
|
||||
},
|
||||
[ARIZONA_IRQ_MICD_CLAMP_RISE] = {
|
||||
.mask = ARIZONA_MICD_CLAMP_RISE_EINT1
|
||||
},
|
||||
[ARIZONA_IRQ_GP5_FALL] = { .mask = ARIZONA_GP5_FALL_EINT1 },
|
||||
[ARIZONA_IRQ_GP5_RISE] = { .mask = ARIZONA_GP5_RISE_EINT1 },
|
||||
[ARIZONA_IRQ_JD_FALL] = { .mask = ARIZONA_JD1_FALL_EINT1 },
|
||||
|
@ -505,6 +511,7 @@ static const struct reg_default wm5110_reg_default[] = {
|
|||
{ 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */
|
||||
{ 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */
|
||||
{ 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */
|
||||
{ 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */
|
||||
{ 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
|
||||
{ 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
|
||||
{ 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */
|
||||
|
@ -1439,6 +1446,7 @@ static bool wm5110_readable_register(struct device *dev, unsigned int reg)
|
|||
case ARIZONA_ACCESSORY_DETECT_MODE_1:
|
||||
case ARIZONA_HEADPHONE_DETECT_1:
|
||||
case ARIZONA_HEADPHONE_DETECT_2:
|
||||
case ARIZONA_MICD_CLAMP_CONTROL:
|
||||
case ARIZONA_MIC_DETECT_1:
|
||||
case ARIZONA_MIC_DETECT_2:
|
||||
case ARIZONA_MIC_DETECT_3:
|
||||
|
|
|
@ -98,7 +98,7 @@ static inline const struct mfd_cell *mfd_get_cell(struct platform_device *pdev)
|
|||
}
|
||||
|
||||
extern int mfd_add_devices(struct device *parent, int id,
|
||||
struct mfd_cell *cells, int n_devs,
|
||||
const struct mfd_cell *cells, int n_devs,
|
||||
struct resource *mem_base,
|
||||
int irq_base, struct irq_domain *irq_domain);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче