pdata.h revision 9b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739
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
209e50108668a70a9927257298bd4e679300124420Mark Brown
219e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_ldo_pdata {
229e50108668a70a9927257298bd4e679300124420Mark Brown	/** GPIOs to enable regulator, 0 or less if not available */
239e50108668a70a9927257298bd4e679300124420Mark Brown	int enable;
249e50108668a70a9927257298bd4e679300124420Mark Brown
259e50108668a70a9927257298bd4e679300124420Mark Brown	const char *supply;
269e50108668a70a9927257298bd4e679300124420Mark Brown	struct regulator_init_data *init_data;
279e50108668a70a9927257298bd4e679300124420Mark Brown};
289e50108668a70a9927257298bd4e679300124420Mark Brown
299e50108668a70a9927257298bd4e679300124420Mark Brown#define WM8994_CONFIGURE_GPIO 0x8000
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
359e50108668a70a9927257298bd4e679300124420Mark Brown
369e50108668a70a9927257298bd4e679300124420Mark Brown/**
379e50108668a70a9927257298bd4e679300124420Mark Brown * DRC configurations are specified with a label and a set of register
389e50108668a70a9927257298bd4e679300124420Mark Brown * values to write (the enable bits will be ignored).  At runtime an
399e50108668a70a9927257298bd4e679300124420Mark Brown * enumerated control will be presented for each DRC block allowing
409e50108668a70a9927257298bd4e679300124420Mark Brown * the user to choose the configration to use.
419e50108668a70a9927257298bd4e679300124420Mark Brown *
429e50108668a70a9927257298bd4e679300124420Mark Brown * Configurations may be generated by hand or by using the DRC control
439e50108668a70a9927257298bd4e679300124420Mark Brown * panel provided by the WISCE - see  http://www.wolfsonmicro.com/wisce/
449e50108668a70a9927257298bd4e679300124420Mark Brown * for details.
459e50108668a70a9927257298bd4e679300124420Mark Brown */
469e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_drc_cfg {
479e50108668a70a9927257298bd4e679300124420Mark Brown        const char *name;
489e50108668a70a9927257298bd4e679300124420Mark Brown        u16 regs[WM8994_DRC_REGS];
499e50108668a70a9927257298bd4e679300124420Mark Brown};
509e50108668a70a9927257298bd4e679300124420Mark Brown
519e50108668a70a9927257298bd4e679300124420Mark Brown/**
529e50108668a70a9927257298bd4e679300124420Mark Brown * ReTune Mobile configurations are specified with a label, sample
539e50108668a70a9927257298bd4e679300124420Mark Brown * rate and set of values to write (the enable bits will be ignored).
549e50108668a70a9927257298bd4e679300124420Mark Brown *
559e50108668a70a9927257298bd4e679300124420Mark Brown * Configurations are expected to be generated using the ReTune Mobile
569e50108668a70a9927257298bd4e679300124420Mark Brown * control panel in WISCE - see http://www.wolfsonmicro.com/wisce/
579e50108668a70a9927257298bd4e679300124420Mark Brown */
589e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_retune_mobile_cfg {
599e50108668a70a9927257298bd4e679300124420Mark Brown        const char *name;
609e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int rate;
619e50108668a70a9927257298bd4e679300124420Mark Brown        u16 regs[WM8994_EQ_REGS];
629e50108668a70a9927257298bd4e679300124420Mark Brown};
639e50108668a70a9927257298bd4e679300124420Mark Brown
64131d81061eba5ffd436b5d132530ac5205b16892Mark Brown/**
65131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * Multiband compressor configurations are specified with a label and
66131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * two sets of values to write.  Configurations are expected to be
67131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * generated using the multiband compressor configuration panel in
68131d81061eba5ffd436b5d132530ac5205b16892Mark Brown * WISCE - see http://www.wolfsonmicro.com/wisce/
69131d81061eba5ffd436b5d132530ac5205b16892Mark Brown */
70131d81061eba5ffd436b5d132530ac5205b16892Mark Brownstruct wm8958_mbc_cfg {
71131d81061eba5ffd436b5d132530ac5205b16892Mark Brown	const char *name;
72131d81061eba5ffd436b5d132530ac5205b16892Mark Brown	u16 cutoff_regs[WM8958_MBC_CUTOFF_REGS];
73131d81061eba5ffd436b5d132530ac5205b16892Mark Brown	u16 coeff_regs[WM8958_MBC_COEFF_REGS];
74131d81061eba5ffd436b5d132530ac5205b16892Mark Brown};
75131d81061eba5ffd436b5d132530ac5205b16892Mark Brown
769e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_pdata {
779e50108668a70a9927257298bd4e679300124420Mark Brown	int gpio_base;
789e50108668a70a9927257298bd4e679300124420Mark Brown
799e50108668a70a9927257298bd4e679300124420Mark Brown	/**
809e50108668a70a9927257298bd4e679300124420Mark Brown	 * Default values for GPIOs if non-zero, WM8994_CONFIGURE_GPIO
819e50108668a70a9927257298bd4e679300124420Mark Brown	 * can be used for all zero values.
829e50108668a70a9927257298bd4e679300124420Mark Brown	 */
839e50108668a70a9927257298bd4e679300124420Mark Brown	int gpio_defaults[WM8994_NUM_GPIO];
849e50108668a70a9927257298bd4e679300124420Mark Brown
859e50108668a70a9927257298bd4e679300124420Mark Brown	struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO];
869e50108668a70a9927257298bd4e679300124420Mark Brown
87c9fbf7e070bbf9cc7adc1420df87706c62cb04edMark Brown	int irq_base;  /** Base IRQ number for WM8994, required for IRQs */
889e50108668a70a9927257298bd4e679300124420Mark Brown
899e50108668a70a9927257298bd4e679300124420Mark Brown        int num_drc_cfgs;
909e50108668a70a9927257298bd4e679300124420Mark Brown        struct wm8994_drc_cfg *drc_cfgs;
919e50108668a70a9927257298bd4e679300124420Mark Brown
929e50108668a70a9927257298bd4e679300124420Mark Brown        int num_retune_mobile_cfgs;
939e50108668a70a9927257298bd4e679300124420Mark Brown        struct wm8994_retune_mobile_cfg *retune_mobile_cfgs;
949e50108668a70a9927257298bd4e679300124420Mark Brown
95131d81061eba5ffd436b5d132530ac5205b16892Mark Brown	int num_mbc_cfgs;
96131d81061eba5ffd436b5d132530ac5205b16892Mark Brown	struct wm8958_mbc_cfg *mbc_cfgs;
97131d81061eba5ffd436b5d132530ac5205b16892Mark Brown
989e50108668a70a9927257298bd4e679300124420Mark Brown        /* LINEOUT can be differential or single ended */
999e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout1_diff:1;
1009e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout2_diff:1;
1019e50108668a70a9927257298bd4e679300124420Mark Brown
1029e50108668a70a9927257298bd4e679300124420Mark Brown        /* Common mode feedback */
1039e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout1fb:1;
1049e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout2fb:1;
1059e50108668a70a9927257298bd4e679300124420Mark Brown
1069b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown	/* IRQ for microphone detection if brought out directly as a
1079b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown	 * signal.
1089b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown	 */
1099b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown	int micdet_irq;
1109b7c525dfaa9a1b5f01db1f3a1edc50bbb6eb739Mark Brown
1119e50108668a70a9927257298bd4e679300124420Mark Brown        /* Microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */
1129e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int micbias1_lvl:1;
1139e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int micbias2_lvl:1;
1149e50108668a70a9927257298bd4e679300124420Mark Brown
1159e50108668a70a9927257298bd4e679300124420Mark Brown        /* Jack detect threashold levels, see datasheet for values */
1169e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int jd_scthr:2;
1179e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int jd_thr:2;
1189e50108668a70a9927257298bd4e679300124420Mark Brown};
1199e50108668a70a9927257298bd4e679300124420Mark Brown
1209e50108668a70a9927257298bd4e679300124420Mark Brown#endif
121