1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 #ifndef MADERA_CORE_H
   9 #define MADERA_CORE_H
  10 
  11 #include <linux/gpio/consumer.h>
  12 #include <linux/interrupt.h>
  13 #include <linux/mfd/madera/pdata.h>
  14 #include <linux/mutex.h>
  15 #include <linux/notifier.h>
  16 #include <linux/regmap.h>
  17 #include <linux/regulator/consumer.h>
  18 
  19 enum madera_type {
  20         
  21         CS47L35 = 1,
  22         CS47L85 = 2,
  23         CS47L90 = 3,
  24         CS47L91 = 4,
  25         CS47L92 = 5,
  26         CS47L93 = 6,
  27         WM1840 = 7,
  28         CS47L15 = 8,
  29         CS42L92 = 9,
  30 };
  31 
  32 #define MADERA_MAX_CORE_SUPPLIES        2
  33 #define MADERA_MAX_GPIOS                40
  34 
  35 #define CS47L15_NUM_GPIOS               15
  36 #define CS47L35_NUM_GPIOS               16
  37 #define CS47L85_NUM_GPIOS               40
  38 #define CS47L90_NUM_GPIOS               38
  39 #define CS47L92_NUM_GPIOS               16
  40 
  41 #define MADERA_MAX_MICBIAS              4
  42 
  43 #define MADERA_MAX_HP_OUTPUT            3
  44 
  45 
  46 #define MADERA_NOTIFY_VOICE_TRIGGER     0x1
  47 #define MADERA_NOTIFY_HPDET             0x2
  48 #define MADERA_NOTIFY_MICDET            0x4
  49 
  50 
  51 #define MADERA_GP_FN_ALTERNATE          0x00
  52 #define MADERA_GP_FN_GPIO               0x01
  53 #define MADERA_GP_FN_DSP_GPIO           0x02
  54 #define MADERA_GP_FN_IRQ1               0x03
  55 #define MADERA_GP_FN_IRQ2               0x04
  56 #define MADERA_GP_FN_FLL1_CLOCK         0x10
  57 #define MADERA_GP_FN_FLL2_CLOCK         0x11
  58 #define MADERA_GP_FN_FLL3_CLOCK         0x12
  59 #define MADERA_GP_FN_FLLAO_CLOCK        0x13
  60 #define MADERA_GP_FN_FLL1_LOCK          0x18
  61 #define MADERA_GP_FN_FLL2_LOCK          0x19
  62 #define MADERA_GP_FN_FLL3_LOCK          0x1A
  63 #define MADERA_GP_FN_FLLAO_LOCK         0x1B
  64 #define MADERA_GP_FN_OPCLK_OUT          0x40
  65 #define MADERA_GP_FN_OPCLK_ASYNC_OUT    0x41
  66 #define MADERA_GP_FN_PWM1               0x48
  67 #define MADERA_GP_FN_PWM2               0x49
  68 #define MADERA_GP_FN_SPDIF_OUT          0x4C
  69 #define MADERA_GP_FN_HEADPHONE_DET      0x50
  70 #define MADERA_GP_FN_MIC_DET            0x58
  71 #define MADERA_GP_FN_DRC1_SIGNAL_DETECT 0x80
  72 #define MADERA_GP_FN_DRC2_SIGNAL_DETECT 0x81
  73 #define MADERA_GP_FN_ASRC1_IN1_LOCK     0x88
  74 #define MADERA_GP_FN_ASRC1_IN2_LOCK     0x89
  75 #define MADERA_GP_FN_ASRC2_IN1_LOCK     0x8A
  76 #define MADERA_GP_FN_ASRC2_IN2_LOCK     0x8B
  77 #define MADERA_GP_FN_DSP_IRQ1           0xA0
  78 #define MADERA_GP_FN_DSP_IRQ2           0xA1
  79 #define MADERA_GP_FN_DSP_IRQ3           0xA2
  80 #define MADERA_GP_FN_DSP_IRQ4           0xA3
  81 #define MADERA_GP_FN_DSP_IRQ5           0xA4
  82 #define MADERA_GP_FN_DSP_IRQ6           0xA5
  83 #define MADERA_GP_FN_DSP_IRQ7           0xA6
  84 #define MADERA_GP_FN_DSP_IRQ8           0xA7
  85 #define MADERA_GP_FN_DSP_IRQ9           0xA8
  86 #define MADERA_GP_FN_DSP_IRQ10          0xA9
  87 #define MADERA_GP_FN_DSP_IRQ11          0xAA
  88 #define MADERA_GP_FN_DSP_IRQ12          0xAB
  89 #define MADERA_GP_FN_DSP_IRQ13          0xAC
  90 #define MADERA_GP_FN_DSP_IRQ14          0xAD
  91 #define MADERA_GP_FN_DSP_IRQ15          0xAE
  92 #define MADERA_GP_FN_DSP_IRQ16          0xAF
  93 #define MADERA_GP_FN_HPOUT1L_SC         0xB0
  94 #define MADERA_GP_FN_HPOUT1R_SC         0xB1
  95 #define MADERA_GP_FN_HPOUT2L_SC         0xB2
  96 #define MADERA_GP_FN_HPOUT2R_SC         0xB3
  97 #define MADERA_GP_FN_HPOUT3L_SC         0xB4
  98 #define MADERA_GP_FN_HPOUT4R_SC         0xB5
  99 #define MADERA_GP_FN_SPKOUTL_SC         0xB6
 100 #define MADERA_GP_FN_SPKOUTR_SC         0xB7
 101 #define MADERA_GP_FN_HPOUT1L_ENA        0xC0
 102 #define MADERA_GP_FN_HPOUT1R_ENA        0xC1
 103 #define MADERA_GP_FN_HPOUT2L_ENA        0xC2
 104 #define MADERA_GP_FN_HPOUT2R_ENA        0xC3
 105 #define MADERA_GP_FN_HPOUT3L_ENA        0xC4
 106 #define MADERA_GP_FN_HPOUT4R_ENA        0xC5
 107 #define MADERA_GP_FN_SPKOUTL_ENA        0xC6
 108 #define MADERA_GP_FN_SPKOUTR_ENA        0xC7
 109 #define MADERA_GP_FN_HPOUT1L_DIS        0xD0
 110 #define MADERA_GP_FN_HPOUT1R_DIS        0xD1
 111 #define MADERA_GP_FN_HPOUT2L_DIS        0xD2
 112 #define MADERA_GP_FN_HPOUT2R_DIS        0xD3
 113 #define MADERA_GP_FN_HPOUT3L_DIS        0xD4
 114 #define MADERA_GP_FN_HPOUT4R_DIS        0xD5
 115 #define MADERA_GP_FN_SPKOUTL_DIS        0xD6
 116 #define MADERA_GP_FN_SPKOUTR_DIS        0xD7
 117 #define MADERA_GP_FN_SPK_SHUTDOWN       0xE0
 118 #define MADERA_GP_FN_SPK_OVH_SHUTDOWN   0xE1
 119 #define MADERA_GP_FN_SPK_OVH_WARN       0xE2
 120 #define MADERA_GP_FN_TIMER1_STATUS      0x140
 121 #define MADERA_GP_FN_TIMER2_STATUS      0x141
 122 #define MADERA_GP_FN_TIMER3_STATUS      0x142
 123 #define MADERA_GP_FN_TIMER4_STATUS      0x143
 124 #define MADERA_GP_FN_TIMER5_STATUS      0x144
 125 #define MADERA_GP_FN_TIMER6_STATUS      0x145
 126 #define MADERA_GP_FN_TIMER7_STATUS      0x146
 127 #define MADERA_GP_FN_TIMER8_STATUS      0x147
 128 #define MADERA_GP_FN_EVENTLOG1_FIFO_STS 0x150
 129 #define MADERA_GP_FN_EVENTLOG2_FIFO_STS 0x151
 130 #define MADERA_GP_FN_EVENTLOG3_FIFO_STS 0x152
 131 #define MADERA_GP_FN_EVENTLOG4_FIFO_STS 0x153
 132 #define MADERA_GP_FN_EVENTLOG5_FIFO_STS 0x154
 133 #define MADERA_GP_FN_EVENTLOG6_FIFO_STS 0x155
 134 #define MADERA_GP_FN_EVENTLOG7_FIFO_STS 0x156
 135 #define MADERA_GP_FN_EVENTLOG8_FIFO_STS 0x157
 136 
 137 struct snd_soc_dapm_context;
 138 
 139 
 140 
 141 
 142 
 143 
 144 
 145 
 146 
 147 
 148 
 149 
 150 
 151 
 152 
 153 
 154 
 155 
 156 
 157 
 158 
 159 
 160 
 161 
 162 
 163 
 164 
 165 
 166 struct madera {
 167         struct regmap *regmap;
 168         struct regmap *regmap_32bit;
 169 
 170         struct device *dev;
 171 
 172         enum madera_type type;
 173         unsigned int rev;
 174         const char *type_name;
 175 
 176         int num_core_supplies;
 177         struct regulator_bulk_data core_supplies[MADERA_MAX_CORE_SUPPLIES];
 178         struct regulator *dcvdd;
 179         bool internal_dcvdd;
 180 
 181         struct madera_pdata pdata;
 182 
 183         struct device *irq_dev;
 184         struct regmap_irq_chip_data *irq_data;
 185         int irq;
 186 
 187         unsigned int num_micbias;
 188         unsigned int num_childbias[MADERA_MAX_MICBIAS];
 189 
 190         struct snd_soc_dapm_context *dapm;
 191         struct mutex dapm_ptr_lock;
 192         unsigned int hp_ena;
 193         bool out_clamp[MADERA_MAX_HP_OUTPUT];
 194         bool out_shorted[MADERA_MAX_HP_OUTPUT];
 195 
 196         struct blocking_notifier_head notifier;
 197 };
 198 #endif