19e50108668a70a9927257298bd4e679300124420Mark Brown/* 29e50108668a70a9927257298bd4e679300124420Mark Brown * include/linux/mfd/wm8994/pdata.h -- Platform data for WM8994 39e50108668a70a9927257298bd4e679300124420Mark Brown * 49e50108668a70a9927257298bd4e679300124420Mark Brown * Copyright 2009 Wolfson Microelectronics PLC. 59e50108668a70a9927257298bd4e679300124420Mark Brown * 69e50108668a70a9927257298bd4e679300124420Mark Brown * Author: Mark Brown <broonie@opensource.wolfsonmicro.com> 79e50108668a70a9927257298bd4e679300124420Mark Brown * 89e50108668a70a9927257298bd4e679300124420Mark Brown * This program is free software; you can redistribute it and/or modify it 99e50108668a70a9927257298bd4e679300124420Mark Brown * under the terms of the GNU General Public License as published by the 109e50108668a70a9927257298bd4e679300124420Mark Brown * Free Software Foundation; either version 2 of the License, or (at your 119e50108668a70a9927257298bd4e679300124420Mark Brown * option) any later version. 129e50108668a70a9927257298bd4e679300124420Mark Brown * 139e50108668a70a9927257298bd4e679300124420Mark Brown */ 149e50108668a70a9927257298bd4e679300124420Mark Brown 159e50108668a70a9927257298bd4e679300124420Mark Brown#ifndef __MFD_WM8994_PDATA_H__ 169e50108668a70a9927257298bd4e679300124420Mark Brown#define __MFD_WM8994_PDATA_H__ 179e50108668a70a9927257298bd4e679300124420Mark Brown 189e50108668a70a9927257298bd4e679300124420Mark Brown#define WM8994_NUM_LDO 2 199e50108668a70a9927257298bd4e679300124420Mark Brown#define WM8994_NUM_GPIO 11 203cf956eebe54cdb7cf1701642085507f0354e56aMark Brown#define WM8994_NUM_AIF 3 219e50108668a70a9927257298bd4e679300124420Mark Brown 229e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_ldo_pdata { 239e50108668a70a9927257298bd4e679300124420Mark Brown /** GPIOs to enable regulator, 0 or less if not available */ 249e50108668a70a9927257298bd4e679300124420Mark Brown int enable; 259e50108668a70a9927257298bd4e679300124420Mark Brown 2643913e5ef9e9e05141418577523456e6b23777ebMark Brown const struct regulator_init_data *init_data; 279e50108668a70a9927257298bd4e679300124420Mark Brown}; 289e50108668a70a9927257298bd4e679300124420Mark Brown 298efcc57dedfebc99c3cd39564e3fc47cd1a24b75Mark Brown#define WM8994_CONFIGURE_GPIO 0x10000 309e50108668a70a9927257298bd4e679300124420Mark Brown 319e50108668a70a9927257298bd4e679300124420Mark Brown#define WM8994_DRC_REGS 5 323fcc0afbb9c93f3599ba03273e59915670b6c2c2Uk Kim#define WM8994_EQ_REGS 20 33131d81061eba5ffd436b5d132530ac5205b16892Mark Brown#define WM8958_MBC_CUTOFF_REGS 20 34131d81061eba5ffd436b5d132530ac5205b16892Mark Brown#define WM8958_MBC_COEFF_REGS 48 3509e10d7fe509408d15818db6a0299f563668a7baMark Brown#define WM8958_MBC_COMBINED_REGS 56 3609e10d7fe509408d15818db6a0299f563668a7baMark Brown#define WM8958_VSS_HPF_REGS 2 3709e10d7fe509408d15818db6a0299f563668a7baMark Brown#define WM8958_VSS_REGS 148 38312158718fe2056703b2744801165a9574560495Mark Brown#define WM8958_ENH_EQ_REGS 32 399e50108668a70a9927257298bd4e679300124420Mark Brown 409e50108668a70a9927257298bd4e679300124420Mark Brown/** 419e50108668a70a9927257298bd4e679300124420Mark Brown * DRC configurations are specified with a label and a set of register 429e50108668a70a9927257298bd4e679300124420Mark Brown * values to write (the enable bits will be ignored). At runtime an 439e50108668a70a9927257298bd4e679300124420Mark Brown * enumerated control will be presented for each DRC block allowing 449e50108668a70a9927257298bd4e679300124420Mark Brown * the user to choose the configration to use. 459e50108668a70a9927257298bd4e679300124420Mark Brown * 469e50108668a70a9927257298bd4e679300124420Mark Brown * Configurations may be generated by hand or by using the DRC control 479e50108668a70a9927257298bd4e679300124420Mark Brown * panel provided by the WISCE - see http://www.wolfsonmicro.com/wisce/ 489e50108668a70a9927257298bd4e679300124420Mark Brown * for details. 499e50108668a70a9927257298bd4e679300124420Mark Brown */ 509e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_drc_cfg { 519e50108668a70a9927257298bd4e679300124420Mark Brown const char *name; 529e50108668a70a9927257298bd4e679300124420Mark Brown u16 regs[WM8994_DRC_REGS]; 539e50108668a70a9927257298bd4e679300124420Mark Brown}; 549e50108668a70a9927257298bd4e679300124420Mark Brown 559e50108668a70a9927257298bd4e679300124420Mark Brown/** 569e50108668a70a9927257298bd4e679300124420Mark Brown * ReTune Mobile configurations are specified with a label, sample 579e50108668a70a9927257298bd4e679300124420Mark Brown * rate and set of values to write (the enable bits will be ignored). 589e50108668a70a9927257298bd4e679300124420Mark Brown * 599e50108668a70a9927257298bd4e679300124420Mark Brown * Configurations are expected to be generated using the ReTune Mobile 609e50108668a70a9927257298bd4e679300124420Mark Brown * control panel in WISCE - see http://www.wolfsonmicro.com/wisce/ 619e50108668a70a9927257298bd4e679300124420Mark Brown */ 629e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_retune_mobile_cfg { 639e50108668a70a9927257298bd4e679300124420Mark Brown const char *name; 649e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int rate; 659e50108668a70a9927257298bd4e679300124420Mark Brown u16 regs[WM8994_EQ_REGS]; 669e50108668a70a9927257298bd4e679300124420Mark Brown}; 679e50108668a70a9927257298bd4e679300124420Mark Brown 68131d81061eba5ffd436b5d132530ac5205b16892Mark Brown/** 69131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * Multiband compressor configurations are specified with a label and 70131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * two sets of values to write. Configurations are expected to be 71131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * generated using the multiband compressor configuration panel in 72131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * WISCE - see http://www.wolfsonmicro.com/wisce/ 73131d81061eba5ffd436b5d132530ac5205b16892Mark Brown */ 74131d81061eba5ffd436b5d132530ac5205b16892Mark Brownstruct wm8958_mbc_cfg { 75131d81061eba5ffd436b5d132530ac5205b16892Mark Brown const char *name; 76131d81061eba5ffd436b5d132530ac5205b16892Mark Brown u16 cutoff_regs[WM8958_MBC_CUTOFF_REGS]; 77131d81061eba5ffd436b5d132530ac5205b16892Mark Brown u16 coeff_regs[WM8958_MBC_COEFF_REGS]; 7809e10d7fe509408d15818db6a0299f563668a7baMark Brown 7909e10d7fe509408d15818db6a0299f563668a7baMark Brown /* Coefficient layout when using MBC+VSS firmware */ 8009e10d7fe509408d15818db6a0299f563668a7baMark Brown u16 combined_regs[WM8958_MBC_COMBINED_REGS]; 8109e10d7fe509408d15818db6a0299f563668a7baMark Brown}; 8209e10d7fe509408d15818db6a0299f563668a7baMark Brown 8309e10d7fe509408d15818db6a0299f563668a7baMark Brown/** 8409e10d7fe509408d15818db6a0299f563668a7baMark Brown * VSS HPF configurations are specified with a label and two values to 8509e10d7fe509408d15818db6a0299f563668a7baMark Brown * write. Configurations are expected to be generated using the 8609e10d7fe509408d15818db6a0299f563668a7baMark Brown * multiband compressor configuration panel in WISCE - see 8709e10d7fe509408d15818db6a0299f563668a7baMark Brown * http://www.wolfsonmicro.com/wisce/ 8809e10d7fe509408d15818db6a0299f563668a7baMark Brown */ 8909e10d7fe509408d15818db6a0299f563668a7baMark Brownstruct wm8958_vss_hpf_cfg { 9009e10d7fe509408d15818db6a0299f563668a7baMark Brown const char *name; 9109e10d7fe509408d15818db6a0299f563668a7baMark Brown u16 regs[WM8958_VSS_HPF_REGS]; 9209e10d7fe509408d15818db6a0299f563668a7baMark Brown}; 9309e10d7fe509408d15818db6a0299f563668a7baMark Brown 9409e10d7fe509408d15818db6a0299f563668a7baMark Brown/** 9509e10d7fe509408d15818db6a0299f563668a7baMark Brown * VSS configurations are specified with a label and array of values 9609e10d7fe509408d15818db6a0299f563668a7baMark Brown * to write. Configurations are expected to be generated using the 9709e10d7fe509408d15818db6a0299f563668a7baMark Brown * multiband compressor configuration panel in WISCE - see 9809e10d7fe509408d15818db6a0299f563668a7baMark Brown * http://www.wolfsonmicro.com/wisce/ 9909e10d7fe509408d15818db6a0299f563668a7baMark Brown */ 10009e10d7fe509408d15818db6a0299f563668a7baMark Brownstruct wm8958_vss_cfg { 10109e10d7fe509408d15818db6a0299f563668a7baMark Brown const char *name; 10209e10d7fe509408d15818db6a0299f563668a7baMark Brown u16 regs[WM8958_VSS_REGS]; 103131d81061eba5ffd436b5d132530ac5205b16892Mark Brown}; 104131d81061eba5ffd436b5d132530ac5205b16892Mark Brown 105312158718fe2056703b2744801165a9574560495Mark Brown/** 106312158718fe2056703b2744801165a9574560495Mark Brown * Enhanced EQ configurations are specified with a label and array of 107312158718fe2056703b2744801165a9574560495Mark Brown * values to write. Configurations are expected to be generated using 108312158718fe2056703b2744801165a9574560495Mark Brown * the multiband compressor configuration panel in WISCE - see 109312158718fe2056703b2744801165a9574560495Mark Brown * http://www.wolfsonmicro.com/wisce/ 110312158718fe2056703b2744801165a9574560495Mark Brown */ 111312158718fe2056703b2744801165a9574560495Mark Brownstruct wm8958_enh_eq_cfg { 112312158718fe2056703b2744801165a9574560495Mark Brown const char *name; 113312158718fe2056703b2744801165a9574560495Mark Brown u16 regs[WM8958_ENH_EQ_REGS]; 114312158718fe2056703b2744801165a9574560495Mark Brown}; 115312158718fe2056703b2744801165a9574560495Mark Brown 116cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown/** 117cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * Microphone detection rates, used to tune response rates and power 118cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * consumption for WM8958/WM1811 microphone detection. 119cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * 120cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * @sysclk: System clock rate to use this configuration for. 121cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * @idle: True if this configuration should use when no accessory is detected, 122cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * false otherwise. 123cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * @start: Value for MICD_BIAS_START_TIME register field (not shifted). 124cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown * @rate: Value for MICD_RATE register field (not shifted). 125cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown */ 126cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brownstruct wm8958_micd_rate { 127cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown int sysclk; 128cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown bool idle; 129cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown int start; 130cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown int rate; 131cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown}; 132cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown 1339e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_pdata { 1349e50108668a70a9927257298bd4e679300124420Mark Brown int gpio_base; 1359e50108668a70a9927257298bd4e679300124420Mark Brown 1369e50108668a70a9927257298bd4e679300124420Mark Brown /** 1379e50108668a70a9927257298bd4e679300124420Mark Brown * Default values for GPIOs if non-zero, WM8994_CONFIGURE_GPIO 1389e50108668a70a9927257298bd4e679300124420Mark Brown * can be used for all zero values. 1399e50108668a70a9927257298bd4e679300124420Mark Brown */ 1409e50108668a70a9927257298bd4e679300124420Mark Brown int gpio_defaults[WM8994_NUM_GPIO]; 1419e50108668a70a9927257298bd4e679300124420Mark Brown 1429e50108668a70a9927257298bd4e679300124420Mark Brown struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO]; 1439e50108668a70a9927257298bd4e679300124420Mark Brown 144c9fbf7e070bbf9cc7adc1420df87706c62cb04edMark Brown int irq_base; /** Base IRQ number for WM8994, required for IRQs */ 145b0ab907d325f99054eb2700a8f8c50776ebfeaf9Mark Brown unsigned long irq_flags; /** user irq flags */ 1469e50108668a70a9927257298bd4e679300124420Mark Brown 1479e50108668a70a9927257298bd4e679300124420Mark Brown int num_drc_cfgs; 1489e50108668a70a9927257298bd4e679300124420Mark Brown struct wm8994_drc_cfg *drc_cfgs; 1499e50108668a70a9927257298bd4e679300124420Mark Brown 1509e50108668a70a9927257298bd4e679300124420Mark Brown int num_retune_mobile_cfgs; 1519e50108668a70a9927257298bd4e679300124420Mark Brown struct wm8994_retune_mobile_cfg *retune_mobile_cfgs; 1529e50108668a70a9927257298bd4e679300124420Mark Brown 153131d81061eba5ffd436b5d132530ac5205b16892Mark Brown int num_mbc_cfgs; 154131d81061eba5ffd436b5d132530ac5205b16892Mark Brown struct wm8958_mbc_cfg *mbc_cfgs; 155131d81061eba5ffd436b5d132530ac5205b16892Mark Brown 15609e10d7fe509408d15818db6a0299f563668a7baMark Brown int num_vss_cfgs; 15709e10d7fe509408d15818db6a0299f563668a7baMark Brown struct wm8958_vss_cfg *vss_cfgs; 15809e10d7fe509408d15818db6a0299f563668a7baMark Brown 15909e10d7fe509408d15818db6a0299f563668a7baMark Brown int num_vss_hpf_cfgs; 16009e10d7fe509408d15818db6a0299f563668a7baMark Brown struct wm8958_vss_hpf_cfg *vss_hpf_cfgs; 16109e10d7fe509408d15818db6a0299f563668a7baMark Brown 162312158718fe2056703b2744801165a9574560495Mark Brown int num_enh_eq_cfgs; 163312158718fe2056703b2744801165a9574560495Mark Brown struct wm8958_enh_eq_cfg *enh_eq_cfgs; 164312158718fe2056703b2744801165a9574560495Mark Brown 165cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown int num_micd_rates; 166cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown struct wm8958_micd_rate *micd_rates; 167cd1707a99a2cb43cd8ab0c1952b455b218f15884Mark Brown 16802e79476998ba7e62842d20dca898c403ad55c7eMark Brown /* Power up delays to add after microphone bias power up (ms) */ 16902e79476998ba7e62842d20dca898c403ad55c7eMark Brown int micb1_delay; 17002e79476998ba7e62842d20dca898c403ad55c7eMark Brown int micb2_delay; 17102e79476998ba7e62842d20dca898c403ad55c7eMark Brown 1729e50108668a70a9927257298bd4e679300124420Mark Brown /* LINEOUT can be differential or single ended */ 1739e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int lineout1_diff:1; 1749e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int lineout2_diff:1; 1759e50108668a70a9927257298bd4e679300124420Mark Brown 1769e50108668a70a9927257298bd4e679300124420Mark Brown /* Common mode feedback */ 1779e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int lineout1fb:1; 1789e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int lineout2fb:1; 1799e50108668a70a9927257298bd4e679300124420Mark Brown 180c0cc3f1665256b7cfdc1d581f997dcea1af71405Mark Brown /* Delay between detecting a jack and starting microphone 181c0cc3f1665256b7cfdc1d581f997dcea1af71405Mark Brown * detect (specified in ms) 182c0cc3f1665256b7cfdc1d581f997dcea1af71405Mark Brown */ 183c0cc3f1665256b7cfdc1d581f997dcea1af71405Mark Brown int micdet_delay; 184c0cc3f1665256b7cfdc1d581f997dcea1af71405Mark Brown 1852da1c4bf765cb32024e5db6fa75dab92916fa3b1Mark Brown /* Delay between microphone detect completing and reporting on 1862da1c4bf765cb32024e5db6fa75dab92916fa3b1Mark Brown * insert (specified in ms) 1872da1c4bf765cb32024e5db6fa75dab92916fa3b1Mark Brown */ 1882da1c4bf765cb32024e5db6fa75dab92916fa3b1Mark Brown int mic_id_delay; 1892da1c4bf765cb32024e5db6fa75dab92916fa3b1Mark Brown 1909b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown /* IRQ for microphone detection if brought out directly as a 1919b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown * signal. 1929b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown */ 1939b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown int micdet_irq; 1949b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown 19548e028eccabc9c246bfad175262582a1ce34a316Mark Brown /* WM8994 microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */ 1969e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int micbias1_lvl:1; 1979e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int micbias2_lvl:1; 1989e50108668a70a9927257298bd4e679300124420Mark Brown 19948e028eccabc9c246bfad175262582a1ce34a316Mark Brown /* WM8994 jack detect threashold levels, see datasheet for values */ 2009e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int jd_scthr:2; 2019e50108668a70a9927257298bd4e679300124420Mark Brown unsigned int jd_thr:2; 20248e028eccabc9c246bfad175262582a1ce34a316Mark Brown 20307fb9d9e935a07aaed557c58d795c18fcd99aab4Mark Brown /* Configure WM1811 jack detection for use with external capacitor */ 20407fb9d9e935a07aaed557c58d795c18fcd99aab4Mark Brown unsigned int jd_ext_cap:1; 20507fb9d9e935a07aaed557c58d795c18fcd99aab4Mark Brown 20648e028eccabc9c246bfad175262582a1ce34a316Mark Brown /* WM8958 microphone bias configuration */ 20748e028eccabc9c246bfad175262582a1ce34a316Mark Brown int micbias[2]; 208881de67046f424fc3a6e05b1c681c12afd94e802Mark Brown 2094585790d1cde32a5719c24412e9845e031358e08Mark Brown /* WM8958 microphone detection ranges */ 2104585790d1cde32a5719c24412e9845e031358e08Mark Brown u16 micd_lvl_sel; 2114585790d1cde32a5719c24412e9845e031358e08Mark Brown 212881de67046f424fc3a6e05b1c681c12afd94e802Mark Brown /* Disable the internal pull downs on the LDOs if they are 213881de67046f424fc3a6e05b1c681c12afd94e802Mark Brown * always driven (eg, connected to an always on supply or 214881de67046f424fc3a6e05b1c681c12afd94e802Mark Brown * GPIO that always drives an output. If they float power 215881de67046f424fc3a6e05b1c681c12afd94e802Mark Brown * consumption will rise. 216881de67046f424fc3a6e05b1c681c12afd94e802Mark Brown */ 217881de67046f424fc3a6e05b1c681c12afd94e802Mark Brown bool ldo_ena_always_driven; 21826c34c25e54b4a352596d88c6e44a239dab8e1c5Mark Brown 21926c34c25e54b4a352596d88c6e44a239dab8e1c5Mark Brown /* 22026c34c25e54b4a352596d88c6e44a239dab8e1c5Mark Brown * SPKMODE must be pulled internally by the device on this 22126c34c25e54b4a352596d88c6e44a239dab8e1c5Mark Brown * system. 22226c34c25e54b4a352596d88c6e44a239dab8e1c5Mark Brown */ 22326c34c25e54b4a352596d88c6e44a239dab8e1c5Mark Brown bool spkmode_pu; 2243cf956eebe54cdb7cf1701642085507f0354e56aMark Brown 2253cf956eebe54cdb7cf1701642085507f0354e56aMark Brown /** 2263cf956eebe54cdb7cf1701642085507f0354e56aMark Brown * Maximum number of channels clocks will be generated for, 2273cf956eebe54cdb7cf1701642085507f0354e56aMark Brown * useful for systems where and I2S bus with multiple data 2283cf956eebe54cdb7cf1701642085507f0354e56aMark Brown * lines is mastered. 2293cf956eebe54cdb7cf1701642085507f0354e56aMark Brown */ 2303cf956eebe54cdb7cf1701642085507f0354e56aMark Brown int max_channels_clocked[WM8994_NUM_AIF]; 2317c8844481a1c16c10fa9be4ce95be5725aed6ce3Mark Brown 2327c8844481a1c16c10fa9be4ce95be5725aed6ce3Mark Brown /** 2337c8844481a1c16c10fa9be4ce95be5725aed6ce3Mark Brown * GPIO for the IRQ pin if host only supports edge triggering 2347c8844481a1c16c10fa9be4ce95be5725aed6ce3Mark Brown */ 2357c8844481a1c16c10fa9be4ce95be5725aed6ce3Mark Brown int irq_gpio; 2369e50108668a70a9927257298bd4e679300124420Mark Brown}; 2379e50108668a70a9927257298bd4e679300124420Mark Brown 2389e50108668a70a9927257298bd4e679300124420Mark Brown#endif 239