linux/include/linux/mfd/wm8994/pdata.h
<<
>>
Prefs
   1/*
   2 * include/linux/mfd/wm8994/pdata.h -- Platform data for WM8994
   3 *
   4 * Copyright 2009 Wolfson Microelectronics PLC.
   5 *
   6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
   7 *
   8 *  This program is free software; you can redistribute  it and/or modify it
   9 *  under  the terms of  the GNU General  Public License as published by the
  10 *  Free Software Foundation;  either version 2 of the  License, or (at your
  11 *  option) any later version.
  12 *
  13 */
  14
  15#ifndef __MFD_WM8994_PDATA_H__
  16#define __MFD_WM8994_PDATA_H__
  17
  18#define WM8994_NUM_LDO   2
  19#define WM8994_NUM_GPIO 11
  20#define WM8994_NUM_AIF   3
  21
  22struct wm8994_ldo_pdata {
  23        /** GPIOs to enable regulator, 0 or less if not available */
  24        int enable;
  25
  26        const struct regulator_init_data *init_data;
  27};
  28
  29#define WM8994_CONFIGURE_GPIO 0x10000
  30
  31#define WM8994_DRC_REGS 5
  32#define WM8994_EQ_REGS  20
  33#define WM8958_MBC_CUTOFF_REGS 20
  34#define WM8958_MBC_COEFF_REGS  48
  35#define WM8958_MBC_COMBINED_REGS 56
  36#define WM8958_VSS_HPF_REGS 2
  37#define WM8958_VSS_REGS 148
  38#define WM8958_ENH_EQ_REGS 32
  39
  40/**
  41 * DRC configurations are specified with a label and a set of register
  42 * values to write (the enable bits will be ignored).  At runtime an
  43 * enumerated control will be presented for each DRC block allowing
  44 * the user to choose the configration to use.
  45 *
  46 * Configurations may be generated by hand or by using the DRC control
  47 * panel provided by the WISCE - see  http://www.wolfsonmicro.com/wisce/
  48 * for details.
  49 */
  50struct wm8994_drc_cfg {
  51        const char *name;
  52        u16 regs[WM8994_DRC_REGS];
  53};
  54
  55/**
  56 * ReTune Mobile configurations are specified with a label, sample
  57 * rate and set of values to write (the enable bits will be ignored).
  58 *
  59 * Configurations are expected to be generated using the ReTune Mobile
  60 * control panel in WISCE - see http://www.wolfsonmicro.com/wisce/
  61 */
  62struct wm8994_retune_mobile_cfg {
  63        const char *name;
  64        unsigned int rate;
  65        u16 regs[WM8994_EQ_REGS];
  66};
  67
  68/**
  69 * Multiband compressor configurations are specified with a label and
  70 * two sets of values to write.  Configurations are expected to be
  71 * generated using the multiband compressor configuration panel in
  72 * WISCE - see http://www.wolfsonmicro.com/wisce/
  73 */
  74struct wm8958_mbc_cfg {
  75        const char *name;
  76        u16 cutoff_regs[WM8958_MBC_CUTOFF_REGS];
  77        u16 coeff_regs[WM8958_MBC_COEFF_REGS];
  78
  79        /* Coefficient layout when using MBC+VSS firmware */
  80        u16 combined_regs[WM8958_MBC_COMBINED_REGS];
  81};
  82
  83/**
  84 * VSS HPF configurations are specified with a label and two values to
  85 * write.  Configurations are expected to be generated using the
  86 * multiband compressor configuration panel in WISCE - see
  87 * http://www.wolfsonmicro.com/wisce/
  88 */
  89struct wm8958_vss_hpf_cfg {
  90        const char *name;
  91        u16 regs[WM8958_VSS_HPF_REGS];
  92};
  93
  94/**
  95 * VSS configurations are specified with a label and array of values
  96 * to write.  Configurations are expected to be generated using the
  97 * multiband compressor configuration panel in WISCE - see
  98 * http://www.wolfsonmicro.com/wisce/
  99 */
 100struct wm8958_vss_cfg {
 101        const char *name;
 102        u16 regs[WM8958_VSS_REGS];
 103};
 104
 105/**
 106 * Enhanced EQ configurations are specified with a label and array of
 107 * values to write.  Configurations are expected to be generated using
 108 * the multiband compressor configuration panel in WISCE - see
 109 * http://www.wolfsonmicro.com/wisce/
 110 */
 111struct wm8958_enh_eq_cfg {
 112        const char *name;
 113        u16 regs[WM8958_ENH_EQ_REGS];
 114};
 115
 116/**
 117 * Microphone detection rates, used to tune response rates and power
 118 * consumption for WM8958/WM1811 microphone detection.
 119 *
 120 * @sysclk: System clock rate to use this configuration for.
 121 * @idle: True if this configuration should use when no accessory is detected,
 122 *        false otherwise.
 123 * @start: Value for MICD_BIAS_START_TIME register field (not shifted).
 124 * @rate: Value for MICD_RATE register field (not shifted).
 125 */
 126struct wm8958_micd_rate {
 127        int sysclk;
 128        bool idle;
 129        int start;
 130        int rate;
 131};
 132
 133struct wm8994_pdata {
 134        int gpio_base;
 135
 136        /**
 137         * Default values for GPIOs if non-zero, WM8994_CONFIGURE_GPIO
 138         * can be used for all zero values.
 139         */
 140        int gpio_defaults[WM8994_NUM_GPIO];
 141
 142        struct wm8994_ldo_pdata ldo[WM8994_NUM_LDO];
 143
 144        int irq_base;  /** Base IRQ number for WM8994, required for IRQs */
 145        unsigned long irq_flags; /** user irq flags */
 146
 147        int num_drc_cfgs;
 148        struct wm8994_drc_cfg *drc_cfgs;
 149
 150        int num_retune_mobile_cfgs;
 151        struct wm8994_retune_mobile_cfg *retune_mobile_cfgs;
 152
 153        int num_mbc_cfgs;
 154        struct wm8958_mbc_cfg *mbc_cfgs;
 155
 156        int num_vss_cfgs;
 157        struct wm8958_vss_cfg *vss_cfgs;
 158
 159        int num_vss_hpf_cfgs;
 160        struct wm8958_vss_hpf_cfg *vss_hpf_cfgs;
 161
 162        int num_enh_eq_cfgs;
 163        struct wm8958_enh_eq_cfg *enh_eq_cfgs;
 164
 165        int num_micd_rates;
 166        struct wm8958_micd_rate *micd_rates;
 167
 168        /* Power up delays to add after microphone bias power up (ms) */
 169        int micb1_delay;
 170        int micb2_delay;
 171
 172        /* LINEOUT can be differential or single ended */
 173        unsigned int lineout1_diff:1;
 174        unsigned int lineout2_diff:1;
 175
 176        /* Common mode feedback */
 177        unsigned int lineout1fb:1;
 178        unsigned int lineout2fb:1;
 179
 180        /* Delay between detecting a jack and starting microphone
 181         * detect (specified in ms)
 182         */
 183        int micdet_delay;
 184
 185        /* Delay between microphone detect completing and reporting on
 186         * insert (specified in ms)
 187         */
 188        int mic_id_delay;
 189
 190        /* IRQ for microphone detection if brought out directly as a
 191         * signal.
 192         */
 193        int micdet_irq;
 194
 195        /* WM8994 microphone biases: 0=0.9*AVDD1 1=0.65*AVVD1 */
 196        unsigned int micbias1_lvl:1;
 197        unsigned int micbias2_lvl:1;
 198
 199        /* WM8994 jack detect threashold levels, see datasheet for values */
 200        unsigned int jd_scthr:2;
 201        unsigned int jd_thr:2;
 202
 203        /* Configure WM1811 jack detection for use with external capacitor */
 204        unsigned int jd_ext_cap:1;
 205
 206        /* WM8958 microphone bias configuration */
 207        int micbias[2];
 208
 209        /* WM8958 microphone detection ranges */
 210        u16 micd_lvl_sel;
 211
 212        /* Disable the internal pull downs on the LDOs if they are
 213         * always driven (eg, connected to an always on supply or
 214         * GPIO that always drives an output.  If they float power
 215         * consumption will rise.
 216         */
 217        bool ldo_ena_always_driven;
 218
 219        /*
 220         * SPKMODE must be pulled internally by the device on this
 221         * system.
 222         */
 223        bool spkmode_pu;
 224
 225        /**
 226         * Maximum number of channels clocks will be generated for,
 227         * useful for systems where and I2S bus with multiple data
 228         * lines is mastered.
 229         */
 230        int max_channels_clocked[WM8994_NUM_AIF];
 231
 232        /**
 233         * GPIO for the IRQ pin if host only supports edge triggering
 234         */
 235        int irq_gpio;
 236};
 237
 238#endif
 239