summaryrefslogtreecommitdiff
path: root/include/linux/mfd/mc-pmic.h
blob: 2256913b094b080c33943fbfb636b236f0343280 (plain)
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
/* For mc34708's pmic driver
 * Copyright (C) 2004-2011 Freescale Semiconductor, Inc.
 *
 * based on:
 * Copyright 2009-2010 Pengutronix, Uwe Kleine-Koenig
 * <u.kleine-koenig@pengutronix.de>
 *
 * 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 __LINUX_MFD_MC_PMIC_H
#define __LINUX_MFD_MC_PMIC_H

#include <linux/interrupt.h>

struct mc_pmic;

void mc_pmic_lock(struct mc_pmic *mc_pmic);
void mc_pmic_unlock(struct mc_pmic *mc_pmic);

int mc_pmic_reg_read(struct mc_pmic *mc_pmic, unsigned int offset, u32 * val);
int mc_pmic_reg_write(struct mc_pmic *mc_pmic, unsigned int offset, u32 val);
int mc_pmic_reg_rmw(struct mc_pmic *mc_pmic, unsigned int offset,
		    u32 mask, u32 val);

int mc_pmic_get_flags(struct mc_pmic *mc_pmic);

int mc_pmic_irq_request(struct mc_pmic *mc_pmic, int irq,
			irq_handler_t handler, const char *name, void *dev);
int mc_pmic_irq_request_nounmask(struct mc_pmic *mc_pmic, int irq,
				 irq_handler_t handler, const char *name,
				 void *dev);
int mc_pmic_irq_free(struct mc_pmic *mc_pmic, int irq, void *dev);

int mc_pmic_irq_mask(struct mc_pmic *mc_pmic, int irq);
int mc_pmic_irq_unmask(struct mc_pmic *mc_pmic, int irq);
int mc_pmic_irq_status(struct mc_pmic *mc_pmic, int irq,
		       int *enabled, int *pending);
int mc_pmic_irq_ack(struct mc_pmic *mc_pmic, int irq);

int mc_pmic_get_flags(struct mc_pmic *mc_pmic);

#ifdef CONFIG_MFD_MC34708
#define MC34708_SW1A		0
#define MC34708_SW1B		1
#define MC34708_SW2		  2
#define MC34708_SW3		  3
#define MC34708_SW4A		4
#define MC34708_SW4B		5
#define MC34708_SW5		  6
#define MC34708_SWBST		7
#define MC34708_VPLL		8
#define MC34708_VREFDDR	9
#define MC34708_VUSB		10
#define MC34708_VUSB2		11
#define MC34708_VDAC		12
#define MC34708_VGEN1		13
#define MC34708_VGEN2		14
#define MC34708_REGU_NUM	15

#define MC34708_REG_INT_STATUS0 0
#define MC34708_REG_INT_MASK0	1
#define MC34708_REG_INT_STATUS1 3
#define MC34708_REG_INT_MASK1	4
#define MC34708_REG_IDENTIFICATION	7
#define MC_PMIC_REG_INT_MASK0	MC34708_REG_INT_MASK0
#define MC_PMIC_REG_INT_MASK1	MC34708_REG_INT_MASK1
#define MC_PMIC_REG_INT_STATUS0 MC34708_REG_INT_STATUS0
#define MC_PMIC_REG_INT_STATUS1	MC34708_REG_INT_STATUS1
#define MC_PMIC_REG_IDENTIFICATION	MC34708_REG_IDENTIFICATION
#endif

#define MC_PMIC_IRQ_ADCDONE	0
#define MC_PMIC_IRQ_TSDONE	1
#define MC_PMIC_IRQ_TSPENDET	2
#define MC_PMIC_IRQ_USBDET	3
#define MC_PMIC_IRQ_AUXDET	4
#define MC_PMIC_IRQ_USBOVP	5
#define MC_PMIC_IRQ_AUXOVP	6
#define MC_PMIC_IRQ_CHRTIMEEXP	7
#define MC_PMIC_IRQ_BATTOTP	8
#define MC_PMIC_IRQ_BATTOVP	9
#define MC_PMIC_IRQ_CHRCMPL	10
#define MC_PMIC_IRQ_WKVBUSDET	11
#define MC_PMIC_IRQ_WKAUXDET	12
#define MC_PMIC_IRQ_LOWBATT	13
#define MC_PMIC_IRQ_VBUSREGMI	14
#define MC_PMIC_IRQ_ATTACH	15
#define MC_PMIC_IRQ_DETACH	16
#define MC_PMIC_IRQ_KP	17
#define MC_PMIC_IRQ_LKP	18
#define MC_PMIC_IRQ_LKR	19
#define MC_PMIC_IRQ_UKNOW_ATTA	20
#define MC_PMIC_IRQ_ADC_CHANGE	21
#define MC_PMIC_IRQ_STUCK_KEY	22
#define MC_PMIC_IRQ_STUCK_KEY_RCV	23
#define MC_PMIC_IRQ_1HZ	24
#define MC_PMIC_IRQ_TODA 25
#define MC_PMIC_IRQ_UNUSED1	26
#define MC_PMIC_IRQ_PWRON1	27
#define MC_PMIC_IRQ_PWRON2	28
#define MC_PMIC_IRQ_WDIRESET	29
#define MC_PMIC_IRQ_SYSRST	30
#define MC_PMIC_IRQ_RTCRST	31
#define MC_PMIC_IRQ_PCI	32
#define MC_PMIC_IRQ_WARM	33
#define MC_PMIC_IRQ_MEMHLD	34
#define MC_PMIC_IRQ_UNUSED2	35
#define MC_PMIC_IRQ_THWARNL	36
#define MC_PMIC_IRQ_THWARNH	37
#define MC_PMIC_IRQ_CLK	38
#define MC_PMIC_IRQ_UNUSED3	39
#define MC_PMIC_IRQ_SCP	40
#define MC_PMIC_NUMREGS	0x3f
#define MC_PMIC_NUM_IRQ	46

struct regulator_init_data;

struct mc_pmic_regulator_init_data {
	int id;
	struct regulator_init_data *init_data;
};

struct mc_pmic_regulator_platform_data {
	int num_regulators;
	struct mc_pmic_regulator_init_data *regulators;
};

struct mc_pmic_platform_data {
#define MC_PMIC_USE_TOUCHSCREEN (1 << 0)
#define MC_PMIC_USE_CODEC	(1 << 1)
#define MC_PMIC_USE_ADC		(1 << 2)
#define MC_PMIC_USE_RTC		(1 << 3)
#define MC_PMIC_USE_REGULATOR	(1 << 4)
#define MC_PMIC_USE_LED		(1 << 5)
	unsigned int flags;

	int num_regulators;
	struct mc_pmic_regulator_init_data *regulators;
};

#endif				/* ifndef __LINUX_MFD_MC_PMIC_H */