mfd: max77663: Add option for RTC I2C slave address
[linux-2.6.git] / include / linux / mfd / max77663-core.h
1 /*
2  * include/linux/mfd/max77663-core.h
3  *
4  * Copyright 2011 Maxim Integrated Products, Inc.
5  * Copyright (C) 2011-2012 NVIDIA Corporation
6  *
7  * This program is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU General Public License as
9  * published by the Free Software Foundation; either version 2 of the
10  * License, or (at your option) any later version.
11  *
12  */
13
14 #ifndef __LINUX_MFD_MAX77663_CORE_H__
15 #define __LINUX_MFD_MAX77663_CORE_H__
16
17 #include <linux/irq.h>
18 #include <linux/mfd/core.h>
19
20 /*
21  * Interrupts
22  */
23 enum {
24         MAX77663_IRQ_LBT_LB,            /* Low-Battery */
25         MAX77663_IRQ_LBT_THERM_ALRM1,   /* Thermal alarm status, > 120C */
26         MAX77663_IRQ_LBT_THERM_ALRM2,   /* Thermal alarm status, > 140C */
27
28         MAX77663_IRQ_GPIO0,             /* GPIO0 edge detection */
29         MAX77663_IRQ_GPIO1,             /* GPIO1 edge detection */
30         MAX77663_IRQ_GPIO2,             /* GPIO2 edge detection */
31         MAX77663_IRQ_GPIO3,             /* GPIO3 edge detection */
32         MAX77663_IRQ_GPIO4,             /* GPIO4 edge detection */
33         MAX77663_IRQ_GPIO5,             /* GPIO5 edge detection */
34         MAX77663_IRQ_GPIO6,             /* GPIO6 edge detection */
35         MAX77663_IRQ_GPIO7,             /* GPIO7 edge detection */
36
37         MAX77663_IRQ_ONOFF_HRDPOWRN,    /* Hard power off warnning */
38         MAX77663_IRQ_ONOFF_EN0_1SEC,    /* EN0 active for 1s */
39         MAX77663_IRQ_ONOFF_EN0_FALLING, /* EN0 falling */
40         MAX77663_IRQ_ONOFF_EN0_RISING,  /* EN0 rising */
41         MAX77663_IRQ_ONOFF_LID_FALLING, /* LID falling */
42         MAX77663_IRQ_ONOFF_LID_RISING,  /* LID rising */
43         MAX77663_IRQ_ONOFF_ACOK_FALLING,/* ACOK falling */
44         MAX77663_IRQ_ONOFF_ACOK_RISING, /* ACOK rising */
45
46         MAX77663_IRQ_RTC,               /* RTC */
47         MAX77663_IRQ_SD_PF,             /* SD power fail */
48         MAX77663_IRQ_LDO_PF,            /* LDO power fail */
49         MAX77663_IRQ_32K,               /* 32kHz oscillator */
50         MAX77663_IRQ_NVER,              /* Non-Volatile Event Recorder */
51
52         MAX77663_IRQ_NR,
53 };
54
55 /*
56  *GPIOs
57  */
58 enum {
59         MAX77663_GPIO0,
60         MAX77663_GPIO1,
61         MAX77663_GPIO2,
62         MAX77663_GPIO3,
63         MAX77663_GPIO4,
64         MAX77663_GPIO5,
65         MAX77663_GPIO6,
66         MAX77663_GPIO7,
67
68         MAX77663_GPIO_NR,
69 };
70
71 /* Direction */
72 enum max77663_gpio_dir {
73         GPIO_DIR_DEF,
74         GPIO_DIR_IN,
75         GPIO_DIR_OUT,
76 };
77
78 /* Data output */
79 enum max77663_gpio_data_out {
80         GPIO_DOUT_DEF,
81         GPIO_DOUT_HIGH,
82         GPIO_DOUT_LOW,
83 };
84
85 /* Output drive */
86 enum max77663_gpio_out_drv {
87         GPIO_OUT_DRV_DEF,
88         GPIO_OUT_DRV_PUSH_PULL,
89         GPIO_OUT_DRV_OPEN_DRAIN,
90 };
91
92 /* Pull-up */
93 enum max77663_gpio_pull_up {
94         GPIO_PU_DEF,
95         GPIO_PU_ENABLE,
96         GPIO_PU_DISABLE,
97 };
98
99 /* Pull-down */
100 enum max77663_gpio_pull_down {
101         GPIO_PD_DEF,
102         GPIO_PD_ENABLE,
103         GPIO_PD_DISABLE,
104 };
105
106 /* Alternate */
107 enum max77663_gpio_alt {
108         GPIO_ALT_DEF,
109         GPIO_ALT_ENABLE,
110         GPIO_ALT_DISABLE,
111 };
112
113 /*
114  * Flags
115  */
116 #define SLP_LPM_ENABLE          0x01
117
118 struct max77663_gpio_config {
119         int gpio;       /* gpio number */
120         enum max77663_gpio_dir dir;
121         enum max77663_gpio_data_out dout;
122         enum max77663_gpio_out_drv out_drv;
123         enum max77663_gpio_pull_up pull_up;
124         enum max77663_gpio_pull_down pull_down;
125         enum max77663_gpio_alt alternate;
126 };
127
128 struct max77663_platform_data {
129         int irq_base;
130         int gpio_base;
131
132         int num_gpio_cfgs;
133         struct max77663_gpio_config *gpio_cfgs;
134
135         int num_subdevs;
136         struct mfd_cell *sub_devices;
137
138         unsigned int flags;
139
140         unsigned char rtc_i2c_addr;
141 };
142
143 #if defined(CONFIG_MFD_MAX77663)
144 int max77663_read(struct device *dev, u8 addr, void *values, u32 len,
145                   bool is_rtc);
146 int max77663_write(struct device *dev, u8 addr, void *values, u32 len,
147                    bool is_rtc);
148 int max77663_set_bits(struct device *dev, u8 addr, u8 mask, u8 value,
149                       bool is_rtc);
150 int max77663_power_off(void);
151 int max77663_gpio_set_alternate(int gpio, int alternate);
152 #else
153 static inline int max77663_read(struct device *dev, u8 addr, void *values,
154                                 u32 len, bool is_rtc)
155 {
156         return 0;
157 }
158
159 static inline int max77663_write(struct device *dev, u8 addr, void *values,
160                                  u32 len, bool is_rtc)
161 {
162         return 0;
163 }
164
165 static inline int max77663_set_bits(struct device *dev, u8 addr, u8 mask,
166                                     u8 value, bool is_rtc)
167 {
168         return 0;
169 }
170
171 static inline int max77663_power_off(void)
172 {
173         return 0;
174 }
175
176 static inline int max77663_gpio_set_alternate(int gpio, int alternate)
177 {
178         return 0;
179 }
180 #endif /* defined(CONFIG_MFD_MAX77663) */
181
182 #endif /* __LINUX_MFD_MAX77663_CORE_H__ */