pdata.h 6.3 KB
Newer Older
M
Mark Brown 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
/*
 * include/linux/mfd/wm8994/pdata.h -- Platform data for WM8994
 *
 * Copyright 2009 Wolfson Microelectronics PLC.
 *
 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 *
 *  This program is free software; you can redistribute  it and/or modify it
 *  under  the terms of  the GNU General  Public License as published by the
 *  Free Software Foundation;  either version 2 of the  License, or (at your
 *  option) any later version.
 *
 */

#ifndef __MFD_WM8994_PDATA_H__
#define __MFD_WM8994_PDATA_H__

#define WM8994_NUM_LDO   2
#define WM8994_NUM_GPIO 11
20
#define WM8994_NUM_AIF   3
M
Mark Brown 已提交
21 22 23 24 25

struct wm8994_ldo_pdata {
	/** GPIOs to enable regulator, 0 or less if not available */
	int enable;

26
	const struct regulator_init_data *init_data;
M
Mark Brown 已提交
27 28
};

29
#define WM8994_CONFIGURE_GPIO 0x10000
M
Mark Brown 已提交
30 31

#define WM8994_DRC_REGS 5
32
#define WM8994_EQ_REGS  20
33 34
#define WM8958_MBC_CUTOFF_REGS 20
#define WM8958_MBC_COEFF_REGS  48
M
Mark Brown 已提交
35 36 37
#define WM8958_MBC_COMBINED_REGS 56
#define WM8958_VSS_HPF_REGS 2
#define WM8958_VSS_REGS 148
38
#define WM8958_ENH_EQ_REGS 32
M
Mark Brown 已提交
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

/**
 * DRC configurations are specified with a label and a set of register
 * values to write (the enable bits will be ignored).  At runtime an
 * enumerated control will be presented for each DRC block allowing
 * the user to choose the configration to use.
 *
 * Configurations may be generated by hand or by using the DRC control
 * panel provided by the WISCE - see  http://www.wolfsonmicro.com/wisce/
 * for details.
 */
struct wm8994_drc_cfg {
        const char *name;
        u16 regs[WM8994_DRC_REGS];
};

/**
 * ReTune Mobile configurations are specified with a label, sample
 * rate and set of values to write (the enable bits will be ignored).
 *
 * Configurations are expected to be generated using the ReTune Mobile
 * control panel in WISCE - see http://www.wolfsonmicro.com/wisce/
 */
struct wm8994_retune_mobile_cfg {
        const char *name;
        unsigned int rate;
        u16 regs[WM8994_EQ_REGS];
};

68 69 70 71 72 73 74 75 76 77
/**
 * Multiband compressor configurations are specified with a label and
 * two sets of values to write.  Configurations are expected to be
 * generated using the multiband compressor configuration panel in
 * WISCE - see http://www.wolfsonmicro.com/wisce/
 */
struct wm8958_mbc_cfg {
	const char *name;
	u16 cutoff_regs[WM8958_MBC_CUTOFF_REGS];
	u16 coeff_regs[WM8958_MBC_COEFF_REGS];
M
Mark Brown 已提交
78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102

	/* Coefficient layout when using MBC+VSS firmware */
	u16 combined_regs[WM8958_MBC_COMBINED_REGS];
};

/**
 * VSS HPF configurations are specified with a label and two values to
 * write.  Configurations are expected to be generated using the
 * multiband compressor configuration panel in WISCE - see
 * http://www.wolfsonmicro.com/wisce/
 */
struct wm8958_vss_hpf_cfg {
	const char *name;
	u16 regs[WM8958_VSS_HPF_REGS];
};

/**
 * VSS configurations are specified with a label and array of values
 * to write.  Configurations are expected to be generated using the
 * multiband compressor configuration panel in WISCE - see
 * http://www.wolfsonmicro.com/wisce/
 */
struct wm8958_vss_cfg {
	const char *name;
	u16 regs[WM8958_VSS_REGS];
103 104
};

105 106 107 108 109 110 111 112 113 114 115
/**
 * Enhanced EQ configurations are specified with a label and array of
 * values to write.  Configurations are expected to be generated using
 * the multiband compressor configuration panel in WISCE - see
 * http://www.wolfsonmicro.com/wisce/
 */
struct wm8958_enh_eq_cfg {
	const char *name;
	u16 regs[WM8958_ENH_EQ_REGS];
};

116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
/**
 * Microphone detection rates, used to tune response rates and power
 * consumption for WM8958/WM1811 microphone detection.
 *
 * @sysclk: System clock rate to use this configuration for.
 * @idle: True if this configuration should use when no accessory is detected,
 *        false otherwise.
 * @start: Value for MICD_BIAS_START_TIME register field (not shifted).
 * @rate: Value for MICD_RATE register field (not shifted).
 */
struct wm8958_micd_rate {
	int sysclk;
	bool idle;
	int start;
	int rate;
};

M
Mark Brown 已提交
133 134 135 136 137 138 139 140 141 142 143
struct wm8994_pdata {
	int gpio_base;

	/**
	 * Default values for GPIOs if non-zero, WM8994_CONFIGURE_GPIO
	 * can be used for all zero values.
	 */
	int gpio_defaults[WM8994_NUM_GPIO];

	struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO];

144
	int irq_base;  /** Base IRQ number for WM8994, required for IRQs */
145
	unsigned long irq_flags; /** user irq flags */
M
Mark Brown 已提交
146 147 148 149 150 151 152

        int num_drc_cfgs;
        struct wm8994_drc_cfg *drc_cfgs;

        int num_retune_mobile_cfgs;
        struct wm8994_retune_mobile_cfg *retune_mobile_cfgs;

153 154 155
	int num_mbc_cfgs;
	struct wm8958_mbc_cfg *mbc_cfgs;

M
Mark Brown 已提交
156 157 158 159 160 161
	int num_vss_cfgs;
	struct wm8958_vss_cfg *vss_cfgs;

	int num_vss_hpf_cfgs;
	struct wm8958_vss_hpf_cfg *vss_hpf_cfgs;

162 163 164
	int num_enh_eq_cfgs;
	struct wm8958_enh_eq_cfg *enh_eq_cfgs;

165 166 167
	int num_micd_rates;
	struct wm8958_micd_rate *micd_rates;

168 169 170 171
	/* Power up delays to add after microphone bias power up (ms) */
	int micb1_delay;
	int micb2_delay;

M
Mark Brown 已提交
172 173 174 175 176 177 178 179
        /* LINEOUT can be differential or single ended */
        unsigned int lineout1_diff:1;
        unsigned int lineout2_diff:1;

        /* Common mode feedback */
        unsigned int lineout1fb:1;
        unsigned int lineout2fb:1;

180 181 182 183 184
	/* Delay between detecting a jack and starting microphone
	 * detect (specified in ms)
	 */
	int micdet_delay;

185 186 187 188 189
	/* Delay between microphone detect completing and reporting on
	 * insert (specified in ms)
	 */
	int mic_id_delay;

190 191 192 193 194
	/* IRQ for microphone detection if brought out directly as a
	 * signal.
	 */
	int micdet_irq;

195
        /* WM8994 microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */
M
Mark Brown 已提交
196 197 198
        unsigned int micbias1_lvl:1;
        unsigned int micbias2_lvl:1;

199
        /* WM8994 jack detect threashold levels, see datasheet for values */
M
Mark Brown 已提交
200 201
        unsigned int jd_scthr:2;
        unsigned int jd_thr:2;
202

203 204 205
	/* Configure WM1811 jack detection for use with external capacitor */
	unsigned int jd_ext_cap:1;

206 207
	/* WM8958 microphone bias configuration */
	int micbias[2];
208

209 210 211
	/* WM8958 microphone detection ranges */
	u16 micd_lvl_sel;

212 213 214 215 216 217
	/* Disable the internal pull downs on the LDOs if they are
	 * always driven (eg, connected to an always on supply or
	 * GPIO that always drives an output.  If they float power
	 * consumption will rise.
	 */
	bool ldo_ena_always_driven;
M
Mark Brown 已提交
218 219 220 221 222 223

	/*
	 * SPKMODE must be pulled internally by the device on this
	 * system.
	 */
	bool spkmode_pu;
224 225 226 227 228 229 230

	/**
	 * Maximum number of channels clocks will be generated for,
	 * useful for systems where and I2S bus with multiple data
	 * lines is mastered.
	 */
	int max_channels_clocked[WM8994_NUM_AIF];
M
Mark Brown 已提交
231 232 233
};

#endif