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

Commit 90b128ed authored by Samuel Ortiz's avatar Samuel Ortiz
Browse files

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.
parents 5e90169c 9a46847a
Loading
Loading
Loading
Loading
+7 −6
Original line number Diff line number Diff line

* 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:
+17 −12
Original line number Diff line number Diff line
@@ -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 @@ static int mfd_add_device(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,
		    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]);
	}
+5 −4
Original line number Diff line number Diff line
@@ -171,12 +171,13 @@ 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;
		}
	}

	return 0;
}
+8 −0
Original line number Diff line number Diff line
@@ -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:
+1 −1
Original line number Diff line number Diff line
@@ -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);