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

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
...@@ -510,6 +510,29 @@ int arizona_dev_init(struct arizona *arizona) ...@@ -510,6 +510,29 @@ int arizona_dev_init(struct arizona *arizona)
goto err_reset; 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++) { for (i = 0; i < ARIZONA_MAX_INPUT; i++) {
/* Default for both is 0 so noop with defaults */ /* Default for both is 0 so noop with defaults */
val = arizona->pdata.dmic_ref[i] val = arizona->pdata.dmic_ref[i]
......
...@@ -56,6 +56,8 @@ ...@@ -56,6 +56,8 @@
#define ARIZONA_DMIC_MICBIAS2 2 #define ARIZONA_DMIC_MICBIAS2 2
#define ARIZONA_DMIC_MICBIAS3 3 #define ARIZONA_DMIC_MICBIAS3 3
#define ARIZONA_MAX_MICBIAS 3
#define ARIZONA_INMODE_DIFF 0 #define ARIZONA_INMODE_DIFF 0
#define ARIZONA_INMODE_SE 1 #define ARIZONA_INMODE_SE 1
#define ARIZONA_INMODE_DMIC 2 #define ARIZONA_INMODE_DMIC 2
...@@ -69,6 +71,13 @@ ...@@ -69,6 +71,13 @@
struct regulator_init_data; 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 { struct arizona_micd_config {
unsigned int src; unsigned int src;
unsigned int bias; unsigned int bias;
...@@ -106,6 +115,9 @@ struct arizona_pdata { ...@@ -106,6 +115,9 @@ struct arizona_pdata {
/** Reference voltage for DMIC inputs */ /** Reference voltage for DMIC inputs */
int dmic_ref[ARIZONA_MAX_INPUT]; int dmic_ref[ARIZONA_MAX_INPUT];
/** MICBIAS configurations */
struct arizona_micbias micbias[ARIZONA_MAX_MICBIAS];
/** Mode of input structures */ /** Mode of input structures */
int inmode[ARIZONA_MAX_INPUT]; int inmode[ARIZONA_MAX_INPUT];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment