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

Commit 3d91f828 authored by Mark Brown's avatar Mark Brown Committed by Samuel Ortiz
Browse files

mfd: arizona: Provide platform data for MICBIAS configuration



Allow the MICBIAS voltages and other attributes to be configured by the
platform.

Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: default avatarSamuel Ortiz <sameo@linux.intel.com>
parent 648a9880
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -510,6 +510,29 @@ int arizona_dev_init(struct arizona *arizona)
		goto err_reset;
	}

	for (i = 0; i < ARIZONA_MAX_MICBIAS; i++) {
		if (!arizona->pdata.micbias[i].mV)
			continue;

		val = (arizona->pdata.micbias[i].mV - 1500) / 100;
		val <<= ARIZONA_MICB1_LVL_SHIFT;

		if (arizona->pdata.micbias[i].ext_cap)
			val |= ARIZONA_MICB1_EXT_CAP;

		if (arizona->pdata.micbias[i].discharge)
			val |= ARIZONA_MICB1_DISCH;

		if (arizona->pdata.micbias[i].fast_start)
			val |= ARIZONA_MICB1_RATE;

		regmap_update_bits(arizona->regmap,
				   ARIZONA_MIC_BIAS_CTRL_1 + i,
				   ARIZONA_MICB1_LVL_MASK |
				   ARIZONA_MICB1_DISCH |
				   ARIZONA_MICB1_RATE, val);
	}

	for (i = 0; i < ARIZONA_MAX_INPUT; i++) {
		/* Default for both is 0 so noop with defaults */
		val = arizona->pdata.dmic_ref[i]
+12 −0
Original line number Diff line number Diff line
@@ -56,6 +56,8 @@
#define ARIZONA_DMIC_MICBIAS2 2
#define ARIZONA_DMIC_MICBIAS3 3

#define ARIZONA_MAX_MICBIAS 3

#define ARIZONA_INMODE_DIFF 0
#define ARIZONA_INMODE_SE   1
#define ARIZONA_INMODE_DMIC 2
@@ -69,6 +71,13 @@

struct regulator_init_data;

struct arizona_micbias {
	int mV;                    /** Regulated voltage */
	unsigned int ext_cap:1;    /** External capacitor fitted */
	unsigned int discharge:1;  /** Actively discharge */
	unsigned int fast_start:1; /** Enable aggressive startup ramp rate */
};

struct arizona_micd_config {
	unsigned int src;
	unsigned int bias;
@@ -106,6 +115,9 @@ struct arizona_pdata {
	/** Reference voltage for DMIC inputs */
	int dmic_ref[ARIZONA_MAX_INPUT];

	/** MICBIAS configurations */
	struct arizona_micbias micbias[ARIZONA_MAX_MICBIAS];

	/** Mode of input structures */
	int inmode[ARIZONA_MAX_INPUT];