core.h 3.2 KB
Newer Older
M
Mark Brown 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
/*
 * Arizona MFD internals
 *
 * Copyright 2012 Wolfson Microelectronics plc
 *
 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
 */

#ifndef _WM_ARIZONA_CORE_H
#define _WM_ARIZONA_CORE_H

#include <linux/interrupt.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/mfd/arizona/pdata.h>

#define ARIZONA_MAX_CORE_SUPPLIES 3

enum arizona_type {
	WM5102 = 1,
};

#define ARIZONA_IRQ_GP1                    0
#define ARIZONA_IRQ_GP2                    1
#define ARIZONA_IRQ_GP3                    2
#define ARIZONA_IRQ_GP4                    3
#define ARIZONA_IRQ_GP5_FALL               4
#define ARIZONA_IRQ_GP5_RISE               5
#define ARIZONA_IRQ_JD_FALL                6
#define ARIZONA_IRQ_JD_RISE                7
#define ARIZONA_IRQ_DSP1_RAM_RDY           8
#define ARIZONA_IRQ_DSP_IRQ1               9
#define ARIZONA_IRQ_DSP_IRQ2              10
#define ARIZONA_IRQ_SPK_SHUTDOWN_WARN     11
#define ARIZONA_IRQ_SPK_SHUTDOWN          12
#define ARIZONA_IRQ_MICDET                13
#define ARIZONA_IRQ_HPDET                 14
#define ARIZONA_IRQ_WSEQ_DONE             15
#define ARIZONA_IRQ_DRC2_SIG_DET          16
#define ARIZONA_IRQ_DRC1_SIG_DET          17
#define ARIZONA_IRQ_ASRC2_LOCK            18
#define ARIZONA_IRQ_ASRC1_LOCK            19
#define ARIZONA_IRQ_UNDERCLOCKED          20
#define ARIZONA_IRQ_OVERCLOCKED           21
#define ARIZONA_IRQ_FLL2_LOCK             22
#define ARIZONA_IRQ_FLL1_LOCK             23
#define ARIZONA_IRQ_CLKGEN_ERR            24
#define ARIZONA_IRQ_CLKGEN_ERR_ASYNC      25
#define ARIZONA_IRQ_ASRC_CFG_ERR          26
#define ARIZONA_IRQ_AIF3_ERR              27
#define ARIZONA_IRQ_AIF2_ERR              28
#define ARIZONA_IRQ_AIF1_ERR              29
#define ARIZONA_IRQ_CTRLIF_ERR            30
#define ARIZONA_IRQ_MIXER_DROPPED_SAMPLES 31
#define ARIZONA_IRQ_ASYNC_CLK_ENA_LOW     32
#define ARIZONA_IRQ_SYSCLK_ENA_LOW        33
#define ARIZONA_IRQ_ISRC1_CFG_ERR         34
#define ARIZONA_IRQ_ISRC2_CFG_ERR         35
#define ARIZONA_IRQ_BOOT_DONE             36
#define ARIZONA_IRQ_DCS_DAC_DONE          37
#define ARIZONA_IRQ_DCS_HP_DONE           38
#define ARIZONA_IRQ_FLL2_CLOCK_OK         39
#define ARIZONA_IRQ_FLL1_CLOCK_OK         40

#define ARIZONA_NUM_IRQ                   41

struct arizona {
	struct regmap *regmap;
	struct device *dev;

	enum arizona_type type;
	unsigned int rev;

	int num_core_supplies;
	struct regulator_bulk_data core_supplies[ARIZONA_MAX_CORE_SUPPLIES];
80
	struct regulator *dcvdd;
M
Mark Brown 已提交
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103

	struct arizona_pdata pdata;

	int irq;
	struct irq_domain *virq;
	struct regmap_irq_chip_data *aod_irq_chip;
	struct regmap_irq_chip_data *irq_chip;

	struct mutex clk_lock;
	int clk32k_ref;
};

int arizona_clk32k_enable(struct arizona *arizona);
int arizona_clk32k_disable(struct arizona *arizona);

int arizona_request_irq(struct arizona *arizona, int irq, char *name,
			irq_handler_t handler, void *data);
void arizona_free_irq(struct arizona *arizona, int irq, void *data);
int arizona_set_irq_wake(struct arizona *arizona, int irq, int on);

int wm5102_patch(struct arizona *arizona);

#endif