PageRenderTime 49ms CodeModel.GetById 17ms app.highlight 25ms RepoModel.GetById 1ms app.codeStats 1ms

/include/linux/mfd/mc13xxx.h

https://github.com/airy09/android_kernel_sony_apq8064
C Header | 210 lines | 166 code | 31 blank | 13 comment | 0 complexity | 1092cac01a140c3fbdacc896541588b0 MD5 | raw file
  1/*
  2 * Copyright 2009-2010 Pengutronix
  3 * Uwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
  4 *
  5 * This program is free software; you can redistribute it and/or modify it under
  6 * the terms of the GNU General Public License version 2 as published by the
  7 * Free Software Foundation.
  8 */
  9#ifndef __LINUX_MFD_MC13XXX_H
 10#define __LINUX_MFD_MC13XXX_H
 11
 12#include <linux/interrupt.h>
 13
 14struct mc13xxx;
 15
 16void mc13xxx_lock(struct mc13xxx *mc13xxx);
 17void mc13xxx_unlock(struct mc13xxx *mc13xxx);
 18
 19int mc13xxx_reg_read(struct mc13xxx *mc13xxx, unsigned int offset, u32 *val);
 20int mc13xxx_reg_write(struct mc13xxx *mc13xxx, unsigned int offset, u32 val);
 21int mc13xxx_reg_rmw(struct mc13xxx *mc13xxx, unsigned int offset,
 22		u32 mask, u32 val);
 23
 24int mc13xxx_get_flags(struct mc13xxx *mc13xxx);
 25
 26int mc13xxx_irq_request(struct mc13xxx *mc13xxx, int irq,
 27		irq_handler_t handler, const char *name, void *dev);
 28int mc13xxx_irq_request_nounmask(struct mc13xxx *mc13xxx, int irq,
 29		irq_handler_t handler, const char *name, void *dev);
 30int mc13xxx_irq_free(struct mc13xxx *mc13xxx, int irq, void *dev);
 31
 32int mc13xxx_irq_mask(struct mc13xxx *mc13xxx, int irq);
 33int mc13xxx_irq_unmask(struct mc13xxx *mc13xxx, int irq);
 34int mc13xxx_irq_status(struct mc13xxx *mc13xxx, int irq,
 35		int *enabled, int *pending);
 36int mc13xxx_irq_ack(struct mc13xxx *mc13xxx, int irq);
 37
 38int mc13xxx_get_flags(struct mc13xxx *mc13xxx);
 39
 40int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx,
 41		unsigned int mode, unsigned int channel,
 42		u8 ato, bool atox, unsigned int *sample);
 43
 44#define MC13XXX_IRQ_ADCDONE	0
 45#define MC13XXX_IRQ_ADCBISDONE	1
 46#define MC13XXX_IRQ_TS		2
 47#define MC13XXX_IRQ_CHGDET	6
 48#define MC13XXX_IRQ_CHGREV	8
 49#define MC13XXX_IRQ_CHGSHORT	9
 50#define MC13XXX_IRQ_CCCV	10
 51#define MC13XXX_IRQ_CHGCURR	11
 52#define MC13XXX_IRQ_BPON	12
 53#define MC13XXX_IRQ_LOBATL	13
 54#define MC13XXX_IRQ_LOBATH	14
 55#define MC13XXX_IRQ_1HZ		24
 56#define MC13XXX_IRQ_TODA	25
 57#define MC13XXX_IRQ_SYSRST	30
 58#define MC13XXX_IRQ_RTCRST	31
 59#define MC13XXX_IRQ_PC		32
 60#define MC13XXX_IRQ_WARM	33
 61#define MC13XXX_IRQ_MEMHLD	34
 62#define MC13XXX_IRQ_THWARNL	36
 63#define MC13XXX_IRQ_THWARNH	37
 64#define MC13XXX_IRQ_CLK		38
 65
 66#define MC13XXX_NUM_IRQ		46
 67
 68struct regulator_init_data;
 69
 70struct mc13xxx_regulator_init_data {
 71	int id;
 72	struct regulator_init_data *init_data;
 73	struct device_node *node;
 74};
 75
 76struct mc13xxx_regulator_platform_data {
 77	int num_regulators;
 78	struct mc13xxx_regulator_init_data *regulators;
 79};
 80
 81struct mc13xxx_led_platform_data {
 82#define MC13783_LED_MD		0
 83#define MC13783_LED_AD		1
 84#define MC13783_LED_KP		2
 85#define MC13783_LED_R1		3
 86#define MC13783_LED_G1		4
 87#define MC13783_LED_B1		5
 88#define MC13783_LED_R2		6
 89#define MC13783_LED_G2		7
 90#define MC13783_LED_B2		8
 91#define MC13783_LED_R3		9
 92#define MC13783_LED_G3		10
 93#define MC13783_LED_B3		11
 94#define MC13783_LED_MAX MC13783_LED_B3
 95	int id;
 96	const char *name;
 97	const char *default_trigger;
 98
 99/* Three or two bits current selection depending on the led */
100	char max_current;
101};
102
103struct mc13xxx_leds_platform_data {
104	int num_leds;
105	struct mc13xxx_led_platform_data *led;
106
107#define MC13783_LED_TRIODE_MD	(1 << 0)
108#define MC13783_LED_TRIODE_AD	(1 << 1)
109#define MC13783_LED_TRIODE_KP	(1 << 2)
110#define MC13783_LED_BOOST_EN	(1 << 3)
111#define MC13783_LED_TC1HALF	(1 << 4)
112#define MC13783_LED_SLEWLIMTC	(1 << 5)
113#define MC13783_LED_SLEWLIMBL	(1 << 6)
114#define MC13783_LED_TRIODE_TC1	(1 << 7)
115#define MC13783_LED_TRIODE_TC2	(1 << 8)
116#define MC13783_LED_TRIODE_TC3	(1 << 9)
117	int flags;
118
119#define MC13783_LED_AB_DISABLED		0
120#define MC13783_LED_AB_MD1		1
121#define MC13783_LED_AB_MD12		2
122#define MC13783_LED_AB_MD123		3
123#define MC13783_LED_AB_MD1234		4
124#define MC13783_LED_AB_MD1234_AD1	5
125#define MC13783_LED_AB_MD1234_AD12	6
126#define MC13783_LED_AB_MD1_AD		7
127	char abmode;
128
129#define MC13783_LED_ABREF_200MV	0
130#define MC13783_LED_ABREF_400MV	1
131#define MC13783_LED_ABREF_600MV	2
132#define MC13783_LED_ABREF_800MV	3
133	char abref;
134
135#define MC13783_LED_PERIOD_10MS		0
136#define MC13783_LED_PERIOD_100MS	1
137#define MC13783_LED_PERIOD_500MS	2
138#define MC13783_LED_PERIOD_2S		3
139	char bl_period;
140	char tc1_period;
141	char tc2_period;
142	char tc3_period;
143};
144
145struct mc13xxx_buttons_platform_data {
146#define MC13783_BUTTON_DBNC_0MS		0
147#define MC13783_BUTTON_DBNC_30MS	1
148#define MC13783_BUTTON_DBNC_150MS	2
149#define MC13783_BUTTON_DBNC_750MS	3
150#define MC13783_BUTTON_ENABLE		(1 << 2)
151#define MC13783_BUTTON_POL_INVERT	(1 << 3)
152#define MC13783_BUTTON_RESET_EN		(1 << 4)
153	int b1on_flags;
154	unsigned short b1on_key;
155	int b2on_flags;
156	unsigned short b2on_key;
157	int b3on_flags;
158	unsigned short b3on_key;
159};
160
161struct mc13xxx_ts_platform_data {
162	/* Delay between Touchscreen polarization and ADC Conversion.
163	 * Given in clock ticks of a 32 kHz clock which gives a granularity of
164	 * about 30.5ms */
165	u8 ato;
166
167#define MC13783_TS_ATO_FIRST false
168#define MC13783_TS_ATO_EACH  true
169	/* Use the ATO delay only for the first conversion or for each one */
170	bool atox;
171};
172
173struct mc13xxx_platform_data {
174#define MC13XXX_USE_TOUCHSCREEN (1 << 0)
175#define MC13XXX_USE_CODEC	(1 << 1)
176#define MC13XXX_USE_ADC		(1 << 2)
177#define MC13XXX_USE_RTC		(1 << 3)
178	unsigned int flags;
179
180	struct mc13xxx_regulator_platform_data regulators;
181	struct mc13xxx_leds_platform_data *leds;
182	struct mc13xxx_buttons_platform_data *buttons;
183	struct mc13xxx_ts_platform_data touch;
184};
185
186#define MC13XXX_ADC_MODE_TS		1
187#define MC13XXX_ADC_MODE_SINGLE_CHAN	2
188#define MC13XXX_ADC_MODE_MULT_CHAN	3
189
190#define MC13XXX_ADC0		43
191#define MC13XXX_ADC0_LICELLCON		(1 << 0)
192#define MC13XXX_ADC0_CHRGICON		(1 << 1)
193#define MC13XXX_ADC0_BATICON		(1 << 2)
194#define MC13XXX_ADC0_ADREFEN		(1 << 10)
195#define MC13XXX_ADC0_TSMOD0		(1 << 12)
196#define MC13XXX_ADC0_TSMOD1		(1 << 13)
197#define MC13XXX_ADC0_TSMOD2		(1 << 14)
198#define MC13XXX_ADC0_ADINC1		(1 << 16)
199#define MC13XXX_ADC0_ADINC2		(1 << 17)
200
201#define MC13XXX_ADC0_TSMOD_MASK		(MC13XXX_ADC0_TSMOD0 | \
202					MC13XXX_ADC0_TSMOD1 | \
203					MC13XXX_ADC0_TSMOD2)
204
205#define MC13XXX_ADC0_CONFIG_MASK	(MC13XXX_ADC0_TSMOD_MASK | \
206					MC13XXX_ADC0_LICELLCON | \
207					MC13XXX_ADC0_CHRGICON | \
208					MC13XXX_ADC0_BATICON)
209
210#endif /* ifndef __LINUX_MFD_MC13XXX_H */