pdata.h revision 9e50108668a70a9927257298bd4e679300124420
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
329e50108668a70a9927257298bd4e679300124420Mark Brown#define WM8994_EQ_REGS  19
339e50108668a70a9927257298bd4e679300124420Mark Brown
349e50108668a70a9927257298bd4e679300124420Mark Brown/**
359e50108668a70a9927257298bd4e679300124420Mark Brown * DRC configurations are specified with a label and a set of register
369e50108668a70a9927257298bd4e679300124420Mark Brown * values to write (the enable bits will be ignored).  At runtime an
379e50108668a70a9927257298bd4e679300124420Mark Brown * enumerated control will be presented for each DRC block allowing
389e50108668a70a9927257298bd4e679300124420Mark Brown * the user to choose the configration to use.
399e50108668a70a9927257298bd4e679300124420Mark Brown *
409e50108668a70a9927257298bd4e679300124420Mark Brown * Configurations may be generated by hand or by using the DRC control
419e50108668a70a9927257298bd4e679300124420Mark Brown * panel provided by the WISCE - see  http://www.wolfsonmicro.com/wisce/
429e50108668a70a9927257298bd4e679300124420Mark Brown * for details.
439e50108668a70a9927257298bd4e679300124420Mark Brown */
449e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_drc_cfg {
459e50108668a70a9927257298bd4e679300124420Mark Brown        const char *name;
469e50108668a70a9927257298bd4e679300124420Mark Brown        u16 regs[WM8994_DRC_REGS];
479e50108668a70a9927257298bd4e679300124420Mark Brown};
489e50108668a70a9927257298bd4e679300124420Mark Brown
499e50108668a70a9927257298bd4e679300124420Mark Brown/**
509e50108668a70a9927257298bd4e679300124420Mark Brown * ReTune Mobile configurations are specified with a label, sample
519e50108668a70a9927257298bd4e679300124420Mark Brown * rate and set of values to write (the enable bits will be ignored).
529e50108668a70a9927257298bd4e679300124420Mark Brown *
539e50108668a70a9927257298bd4e679300124420Mark Brown * Configurations are expected to be generated using the ReTune Mobile
549e50108668a70a9927257298bd4e679300124420Mark Brown * control panel in WISCE - see http://www.wolfsonmicro.com/wisce/
559e50108668a70a9927257298bd4e679300124420Mark Brown */
569e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_retune_mobile_cfg {
579e50108668a70a9927257298bd4e679300124420Mark Brown        const char *name;
589e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int rate;
599e50108668a70a9927257298bd4e679300124420Mark Brown        u16 regs[WM8994_EQ_REGS];
609e50108668a70a9927257298bd4e679300124420Mark Brown};
619e50108668a70a9927257298bd4e679300124420Mark Brown
629e50108668a70a9927257298bd4e679300124420Mark Brownstruct wm8994_pdata {
639e50108668a70a9927257298bd4e679300124420Mark Brown	int gpio_base;
649e50108668a70a9927257298bd4e679300124420Mark Brown
659e50108668a70a9927257298bd4e679300124420Mark Brown	/**
669e50108668a70a9927257298bd4e679300124420Mark Brown	 * Default values for GPIOs if non-zero, WM8994_CONFIGURE_GPIO
679e50108668a70a9927257298bd4e679300124420Mark Brown	 * can be used for all zero values.
689e50108668a70a9927257298bd4e679300124420Mark Brown	 */
699e50108668a70a9927257298bd4e679300124420Mark Brown	int gpio_defaults[WM8994_NUM_GPIO];
709e50108668a70a9927257298bd4e679300124420Mark Brown
719e50108668a70a9927257298bd4e679300124420Mark Brown	struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO];
729e50108668a70a9927257298bd4e679300124420Mark Brown
739e50108668a70a9927257298bd4e679300124420Mark Brown
749e50108668a70a9927257298bd4e679300124420Mark Brown        int num_drc_cfgs;
759e50108668a70a9927257298bd4e679300124420Mark Brown        struct wm8994_drc_cfg *drc_cfgs;
769e50108668a70a9927257298bd4e679300124420Mark Brown
779e50108668a70a9927257298bd4e679300124420Mark Brown        int num_retune_mobile_cfgs;
789e50108668a70a9927257298bd4e679300124420Mark Brown        struct wm8994_retune_mobile_cfg *retune_mobile_cfgs;
799e50108668a70a9927257298bd4e679300124420Mark Brown
809e50108668a70a9927257298bd4e679300124420Mark Brown        /* LINEOUT can be differential or single ended */
819e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout1_diff:1;
829e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout2_diff:1;
839e50108668a70a9927257298bd4e679300124420Mark Brown
849e50108668a70a9927257298bd4e679300124420Mark Brown        /* Common mode feedback */
859e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout1fb:1;
869e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int lineout2fb:1;
879e50108668a70a9927257298bd4e679300124420Mark Brown
889e50108668a70a9927257298bd4e679300124420Mark Brown        /* Microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */
899e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int micbias1_lvl:1;
909e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int micbias2_lvl:1;
919e50108668a70a9927257298bd4e679300124420Mark Brown
929e50108668a70a9927257298bd4e679300124420Mark Brown        /* Jack detect threashold levels, see datasheet for values */
939e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int jd_scthr:2;
949e50108668a70a9927257298bd4e679300124420Mark Brown        unsigned int jd_thr:2;
959e50108668a70a9927257298bd4e679300124420Mark Brown};
969e50108668a70a9927257298bd4e679300124420Mark Brown
979e50108668a70a9927257298bd4e679300124420Mark Brown#endif
98