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:
Samuel Ortiz 2013-11-11 23:44:31 +01:00
Родитель 5e90169c5a 9a46847aea
Коммит 90b128ed15
5 изменённых файлов: 38 добавлений и 23 удалений

Просмотреть файл

@ -1,10 +1,10 @@
* Samsung S2MPS11 Voltage and Current Regulator * 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 current regulators, RTC, charger controller and other sub-blocks. It is
interfaced to the host controller using a I2C interface. Each sub-block is interfaced to the host controller using an I2C interface. Each sub-block is
addressed by the host system using different I2C slave address. 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".
@ -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 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. 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 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>. 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. as per the datasheet of s2mps11.
- LDOn - LDOn
- valid values for n are 1 to 28 - valid values for n are 1 to 38
- Example: LDO0, LD01, LDO28 - Example: LDO0, LD01, LDO28
- BUCKn - BUCKn
- valid values for n are 1 to 9. - valid values for n are 1 to 10.
- Example: BUCK1, BUCK2, BUCK9 - Example: BUCK1, BUCK2, BUCK9
Example: Example:

Просмотреть файл

@ -63,7 +63,8 @@ int mfd_cell_disable(struct platform_device *pdev)
EXPORT_SYMBOL(mfd_cell_disable); EXPORT_SYMBOL(mfd_cell_disable);
static int mfd_platform_add_cell(struct platform_device *pdev, 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) if (!cell)
return 0; return 0;
@ -72,11 +73,12 @@ static int mfd_platform_add_cell(struct platform_device *pdev,
if (!pdev->mfd_cell) if (!pdev->mfd_cell)
return -ENOMEM; return -ENOMEM;
pdev->mfd_cell->usage_count = usage_count;
return 0; return 0;
} }
static int mfd_add_device(struct device *parent, int id, 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, struct resource *mem_base,
int irq_base, struct irq_domain *domain) int irq_base, struct irq_domain *domain)
{ {
@ -115,7 +117,7 @@ static int mfd_add_device(struct device *parent, int id,
goto fail_res; goto fail_res;
} }
ret = mfd_platform_add_cell(pdev, cell); ret = mfd_platform_add_cell(pdev, cell, usage_count);
if (ret) if (ret)
goto fail_res; goto fail_res;
@ -180,12 +182,12 @@ fail_alloc:
} }
int mfd_add_devices(struct device *parent, int id, 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, struct resource *mem_base,
int irq_base, struct irq_domain *domain) int irq_base, struct irq_domain *domain)
{ {
int i; int i;
int ret = 0; int ret;
atomic_t *cnts; atomic_t *cnts;
/* initialize reference counting for all cells */ /* 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++) { for (i = 0; i < n_devs; i++) {
atomic_set(&cnts[i], 0); atomic_set(&cnts[i], 0);
cells[i].usage_count = &cnts[i]; ret = mfd_add_device(parent, id, cells + i, cnts + i, mem_base,
ret = mfd_add_device(parent, id, cells + i, mem_base,
irq_base, domain); irq_base, domain);
if (ret) if (ret)
break; goto fail;
} }
if (ret) return 0;
mfd_remove_devices(parent);
fail:
if (i)
mfd_remove_devices(parent);
else
kfree(cnts);
return ret; return ret;
} }
EXPORT_SYMBOL(mfd_add_devices); 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++) { for (i = 0; i < n_clones; i++) {
cell_entry.name = clones[i]; cell_entry.name = clones[i];
/* don't give up if a single call fails; just report error */ /* don't give up if a single call fails; just report error */
if (mfd_add_device(pdev->dev.parent, -1, &cell_entry, NULL, 0, if (mfd_add_device(pdev->dev.parent, -1, &cell_entry,
NULL)) cell_entry.usage_count, NULL, 0, NULL))
dev_err(dev, "failed to create platform device '%s'\n", dev_err(dev, "failed to create platform device '%s'\n",
clones[i]); clones[i]);
} }

Просмотреть файл

@ -171,12 +171,13 @@ static int pm8921_remove(struct platform_device *pdev)
drvdata = platform_get_drvdata(pdev); drvdata = platform_get_drvdata(pdev);
if (drvdata) if (drvdata)
pmic = drvdata->pm_chip_data; pmic = drvdata->pm_chip_data;
if (pmic) if (pmic) {
mfd_remove_devices(pmic->dev); mfd_remove_devices(pmic->dev);
if (pmic->irq_chip) { if (pmic->irq_chip) {
pm8xxx_irq_exit(pmic->irq_chip); pm8xxx_irq_exit(pmic->irq_chip);
pmic->irq_chip = NULL; pmic->irq_chip = NULL;
} }
}
return 0; return 0;
} }

Просмотреть файл

@ -243,6 +243,12 @@ int wm5110_patch(struct arizona *arizona)
EXPORT_SYMBOL_GPL(wm5110_patch); EXPORT_SYMBOL_GPL(wm5110_patch);
static const struct regmap_irq wm5110_aod_irqs[ARIZONA_NUM_IRQ] = { 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_FALL] = { .mask = ARIZONA_GP5_FALL_EINT1 },
[ARIZONA_IRQ_GP5_RISE] = { .mask = ARIZONA_GP5_RISE_EINT1 }, [ARIZONA_IRQ_GP5_RISE] = { .mask = ARIZONA_GP5_RISE_EINT1 },
[ARIZONA_IRQ_JD_FALL] = { .mask = ARIZONA_JD1_FALL_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 */ { 0x00000293, 0x0000 }, /* R659 - Accessory Detect Mode 1 */
{ 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */ { 0x0000029B, 0x0020 }, /* R667 - Headphone Detect 1 */
{ 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */ { 0x0000029C, 0x0000 }, /* R668 - Headphone Detect 2 */
{ 0x000002A2, 0x0000 }, /* R674 - Micd clamp control */
{ 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */ { 0x000002A3, 0x1102 }, /* R675 - Mic Detect 1 */
{ 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */ { 0x000002A4, 0x009F }, /* R676 - Mic Detect 2 */
{ 0x000002A5, 0x0000 }, /* R677 - Mic Detect 3 */ { 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_ACCESSORY_DETECT_MODE_1:
case ARIZONA_HEADPHONE_DETECT_1: case ARIZONA_HEADPHONE_DETECT_1:
case ARIZONA_HEADPHONE_DETECT_2: case ARIZONA_HEADPHONE_DETECT_2:
case ARIZONA_MICD_CLAMP_CONTROL:
case ARIZONA_MIC_DETECT_1: case ARIZONA_MIC_DETECT_1:
case ARIZONA_MIC_DETECT_2: case ARIZONA_MIC_DETECT_2:
case ARIZONA_MIC_DETECT_3: 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, 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, struct resource *mem_base,
int irq_base, struct irq_domain *irq_domain); int irq_base, struct irq_domain *irq_domain);