linux/include/linux/mfd/arizona/core.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Arizona MFD internals
   4 *
   5 * Copyright 2012 Wolfson Microelectronics plc
   6 *
   7 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
   8 */
   9
  10#ifndef _WM_ARIZONA_CORE_H
  11#define _WM_ARIZONA_CORE_H
  12
  13#include <linux/clk.h>
  14#include <linux/interrupt.h>
  15#include <linux/notifier.h>
  16#include <linux/regmap.h>
  17#include <linux/regulator/consumer.h>
  18#include <linux/mfd/arizona/pdata.h>
  19
  20#define ARIZONA_MAX_CORE_SUPPLIES 2
  21
  22enum {
  23        ARIZONA_MCLK1,
  24        ARIZONA_MCLK2,
  25        ARIZONA_NUM_MCLK
  26};
  27
  28enum arizona_type {
  29        WM5102 = 1,
  30        WM5110 = 2,
  31        WM8997 = 3,
  32        WM8280 = 4,
  33        WM8998 = 5,
  34        WM1814 = 6,
  35        WM1831 = 7,
  36        CS47L24 = 8,
  37};
  38
  39#define ARIZONA_IRQ_GP1                    0
  40#define ARIZONA_IRQ_GP2                    1
  41#define ARIZONA_IRQ_GP3                    2
  42#define ARIZONA_IRQ_GP4                    3
  43#define ARIZONA_IRQ_GP5_FALL               4
  44#define ARIZONA_IRQ_GP5_RISE               5
  45#define ARIZONA_IRQ_JD_FALL                6
  46#define ARIZONA_IRQ_JD_RISE                7
  47#define ARIZONA_IRQ_DSP1_RAM_RDY           8
  48#define ARIZONA_IRQ_DSP2_RAM_RDY           9
  49#define ARIZONA_IRQ_DSP3_RAM_RDY          10
  50#define ARIZONA_IRQ_DSP4_RAM_RDY          11
  51#define ARIZONA_IRQ_DSP_IRQ1              12
  52#define ARIZONA_IRQ_DSP_IRQ2              13
  53#define ARIZONA_IRQ_DSP_IRQ3              14
  54#define ARIZONA_IRQ_DSP_IRQ4              15
  55#define ARIZONA_IRQ_DSP_IRQ5              16
  56#define ARIZONA_IRQ_DSP_IRQ6              17
  57#define ARIZONA_IRQ_DSP_IRQ7              18
  58#define ARIZONA_IRQ_DSP_IRQ8              19
  59#define ARIZONA_IRQ_SPK_OVERHEAT_WARN     20
  60#define ARIZONA_IRQ_SPK_OVERHEAT          21
  61#define ARIZONA_IRQ_MICDET                22
  62#define ARIZONA_IRQ_HPDET                 23
  63#define ARIZONA_IRQ_WSEQ_DONE             24
  64#define ARIZONA_IRQ_DRC2_SIG_DET          25
  65#define ARIZONA_IRQ_DRC1_SIG_DET          26
  66#define ARIZONA_IRQ_ASRC2_LOCK            27
  67#define ARIZONA_IRQ_ASRC1_LOCK            28
  68#define ARIZONA_IRQ_UNDERCLOCKED          29
  69#define ARIZONA_IRQ_OVERCLOCKED           30
  70#define ARIZONA_IRQ_FLL2_LOCK             31
  71#define ARIZONA_IRQ_FLL1_LOCK             32
  72#define ARIZONA_IRQ_CLKGEN_ERR            33
  73#define ARIZONA_IRQ_CLKGEN_ERR_ASYNC      34
  74#define ARIZONA_IRQ_ASRC_CFG_ERR          35
  75#define ARIZONA_IRQ_AIF3_ERR              36
  76#define ARIZONA_IRQ_AIF2_ERR              37
  77#define ARIZONA_IRQ_AIF1_ERR              38
  78#define ARIZONA_IRQ_CTRLIF_ERR            39
  79#define ARIZONA_IRQ_MIXER_DROPPED_SAMPLES 40
  80#define ARIZONA_IRQ_ASYNC_CLK_ENA_LOW     41
  81#define ARIZONA_IRQ_SYSCLK_ENA_LOW        42
  82#define ARIZONA_IRQ_ISRC1_CFG_ERR         43
  83#define ARIZONA_IRQ_ISRC2_CFG_ERR         44
  84#define ARIZONA_IRQ_BOOT_DONE             45
  85#define ARIZONA_IRQ_DCS_DAC_DONE          46
  86#define ARIZONA_IRQ_DCS_HP_DONE           47
  87#define ARIZONA_IRQ_FLL2_CLOCK_OK         48
  88#define ARIZONA_IRQ_FLL1_CLOCK_OK         49
  89#define ARIZONA_IRQ_MICD_CLAMP_RISE       50
  90#define ARIZONA_IRQ_MICD_CLAMP_FALL       51
  91#define ARIZONA_IRQ_HP3R_DONE             52
  92#define ARIZONA_IRQ_HP3L_DONE             53
  93#define ARIZONA_IRQ_HP2R_DONE             54
  94#define ARIZONA_IRQ_HP2L_DONE             55
  95#define ARIZONA_IRQ_HP1R_DONE             56
  96#define ARIZONA_IRQ_HP1L_DONE             57
  97#define ARIZONA_IRQ_ISRC3_CFG_ERR         58
  98#define ARIZONA_IRQ_DSP_SHARED_WR_COLL    59
  99#define ARIZONA_IRQ_SPK_SHUTDOWN          60
 100#define ARIZONA_IRQ_SPK1R_SHORT           61
 101#define ARIZONA_IRQ_SPK1L_SHORT           62
 102#define ARIZONA_IRQ_HP3R_SC_NEG           63
 103#define ARIZONA_IRQ_HP3R_SC_POS           64
 104#define ARIZONA_IRQ_HP3L_SC_NEG           65
 105#define ARIZONA_IRQ_HP3L_SC_POS           66
 106#define ARIZONA_IRQ_HP2R_SC_NEG           67
 107#define ARIZONA_IRQ_HP2R_SC_POS           68
 108#define ARIZONA_IRQ_HP2L_SC_NEG           69
 109#define ARIZONA_IRQ_HP2L_SC_POS           70
 110#define ARIZONA_IRQ_HP1R_SC_NEG           71
 111#define ARIZONA_IRQ_HP1R_SC_POS           72
 112#define ARIZONA_IRQ_HP1L_SC_NEG           73
 113#define ARIZONA_IRQ_HP1L_SC_POS           74
 114
 115#define ARIZONA_NUM_IRQ                   75
 116
 117struct snd_soc_dapm_context;
 118
 119struct arizona {
 120        struct regmap *regmap;
 121        struct device *dev;
 122
 123        enum arizona_type type;
 124        unsigned int rev;
 125
 126        int num_core_supplies;
 127        struct regulator_bulk_data core_supplies[ARIZONA_MAX_CORE_SUPPLIES];
 128        struct regulator *dcvdd;
 129        bool has_fully_powered_off;
 130
 131        struct arizona_pdata pdata;
 132
 133        unsigned int external_dcvdd:1;
 134
 135        int irq;
 136        struct irq_domain *virq;
 137        struct regmap_irq_chip_data *aod_irq_chip;
 138        struct regmap_irq_chip_data *irq_chip;
 139
 140        bool hpdet_clamp;
 141        unsigned int hp_ena;
 142
 143        struct mutex clk_lock;
 144        int clk32k_ref;
 145
 146        struct clk *mclk[ARIZONA_NUM_MCLK];
 147
 148        bool ctrlif_error;
 149
 150        struct snd_soc_dapm_context *dapm;
 151
 152        int tdm_width[ARIZONA_MAX_AIF];
 153        int tdm_slots[ARIZONA_MAX_AIF];
 154
 155        uint16_t dac_comp_coeff;
 156        uint8_t dac_comp_enabled;
 157        struct mutex dac_comp_lock;
 158
 159        struct blocking_notifier_head notifier;
 160};
 161
 162static inline int arizona_call_notifiers(struct arizona *arizona,
 163                                         unsigned long event,
 164                                         void *data)
 165{
 166        return blocking_notifier_call_chain(&arizona->notifier, event, data);
 167}
 168
 169int arizona_clk32k_enable(struct arizona *arizona);
 170int arizona_clk32k_disable(struct arizona *arizona);
 171
 172int arizona_request_irq(struct arizona *arizona, int irq, char *name,
 173                        irq_handler_t handler, void *data);
 174void arizona_free_irq(struct arizona *arizona, int irq, void *data);
 175int arizona_set_irq_wake(struct arizona *arizona, int irq, int on);
 176
 177#ifdef CONFIG_MFD_WM5102
 178int wm5102_patch(struct arizona *arizona);
 179#else
 180static inline int wm5102_patch(struct arizona *arizona)
 181{
 182        return 0;
 183}
 184#endif
 185
 186int wm5110_patch(struct arizona *arizona);
 187int cs47l24_patch(struct arizona *arizona);
 188int wm8997_patch(struct arizona *arizona);
 189int wm8998_patch(struct arizona *arizona);
 190
 191#endif
 192