]> nv-tegra.nvidia Code Review - linux-2.6.git/blob - include/linux/mfd/max77663-core.h
20961dbd7648a1f8dcc3630d3804f9fc3542ac52
[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_INT_TOP_GPIO,      /* TOP GPIO internal int to max77663 */
25         MAX77663_IRQ_LBT_LB,            /* Low-Battery */
26         MAX77663_IRQ_LBT_THERM_ALRM1,   /* Thermal alarm status, > 120C */
27         MAX77663_IRQ_LBT_THERM_ALRM2,   /* Thermal alarm status, > 140C */
28
29         MAX77663_IRQ_GPIO0,             /* GPIO0 edge detection */
30         MAX77663_IRQ_GPIO1,             /* GPIO1 edge detection */
31         MAX77663_IRQ_GPIO2,             /* GPIO2 edge detection */
32         MAX77663_IRQ_GPIO3,             /* GPIO3 edge detection */
33         MAX77663_IRQ_GPIO4,             /* GPIO4 edge detection */
34         MAX77663_IRQ_GPIO5,             /* GPIO5 edge detection */
35         MAX77663_IRQ_GPIO6,             /* GPIO6 edge detection */
36         MAX77663_IRQ_GPIO7,             /* GPIO7 edge detection */
37
38         MAX77663_IRQ_ONOFF_HRDPOWRN,    /* Hard power off warnning */
39         MAX77663_IRQ_ONOFF_EN0_1SEC,    /* EN0 active for 1s */
40         MAX77663_IRQ_ONOFF_EN0_FALLING, /* EN0 falling */
41         MAX77663_IRQ_ONOFF_EN0_RISING,  /* EN0 rising */
42         MAX77663_IRQ_ONOFF_LID_FALLING, /* LID falling */
43         MAX77663_IRQ_ONOFF_LID_RISING,  /* LID rising */
44         MAX77663_IRQ_ONOFF_ACOK_FALLING,/* ACOK falling */
45         MAX77663_IRQ_ONOFF_ACOK_RISING, /* ACOK rising */
46
47         MAX77663_IRQ_RTC,               /* RTC */
48         MAX77663_IRQ_SD_PF,             /* SD power fail */
49         MAX77663_IRQ_LDO_PF,            /* LDO power fail */
50         MAX77663_IRQ_32K,               /* 32kHz oscillator */
51         MAX77663_IRQ_NVER,              /* Non-Volatile Event Recorder */
52
53         MAX77663_IRQ_NR,
54 };
55
56 /*
57  *GPIOs
58  */
59 enum {
60         MAX77663_GPIO0,
61         MAX77663_GPIO1,
62         MAX77663_GPIO2,
63         MAX77663_GPIO3,
64         MAX77663_GPIO4,
65         MAX77663_GPIO5,
66         MAX77663_GPIO6,
67         MAX77663_GPIO7,
68
69         MAX77663_GPIO_NR,
70 };
71
72 /* Direction */
73 enum max77663_gpio_dir {
74         GPIO_DIR_DEF,
75         GPIO_DIR_IN,
76         GPIO_DIR_OUT,
77 };
78
79 /* Data output */
80 enum max77663_gpio_data_out {
81         GPIO_DOUT_DEF,
82         GPIO_DOUT_HIGH,
83         GPIO_DOUT_LOW,
84 };
85
86 /* Output drive */
87 enum max77663_gpio_out_drv {
88         GPIO_OUT_DRV_DEF,
89         GPIO_OUT_DRV_PUSH_PULL,
90         GPIO_OUT_DRV_OPEN_DRAIN,
91 };
92
93 /* Pull-up */
94 enum max77663_gpio_pull_up {
95         GPIO_PU_DEF,
96         GPIO_PU_ENABLE,
97         GPIO_PU_DISABLE,
98 };
99
100 /* Pull-down */
101 enum max77663_gpio_pull_down {
102         GPIO_PD_DEF,
103         GPIO_PD_ENABLE,
104         GPIO_PD_DISABLE,
105 };
106
107 /* Alternate */
108 enum max77663_gpio_alt {
109         GPIO_ALT_DEF,
110         GPIO_ALT_ENABLE,
111         GPIO_ALT_DISABLE,
112 };
113
114 /*
115  * Flags
116  */
117 #define SLP_LPM_ENABLE          0x01
118
119 struct max77663_gpio_config {
120         int gpio;       /* gpio number */
121         enum max77663_gpio_dir dir;
122         enum max77663_gpio_data_out dout;
123         enum max77663_gpio_out_drv out_drv;
124         enum max77663_gpio_pull_up pull_up;
125         enum max77663_gpio_pull_down pull_down;
126         enum max77663_gpio_alt alternate;
127 };
128
129 struct max77663_platform_data {
130         int irq_base;
131         int gpio_base;
132
133         int num_gpio_cfgs;
134         struct max77663_gpio_config *gpio_cfgs;
135
136         int num_subdevs;
137         struct mfd_cell *sub_devices;
138
139         unsigned int flags;
140
141         unsigned char rtc_i2c_addr;
142
143         bool use_power_off;
144 };
145
146 #if defined(CONFIG_MFD_MAX77663)
147 int max77663_read(struct device *dev, u8 addr, void *values, u32 len,
148                   bool is_rtc);
149 int max77663_write(struct device *dev, u8 addr, void *values, u32 len,
150                    bool is_rtc);
151 int max77663_set_bits(struct device *dev, u8 addr, u8 mask, u8 value,
152                       bool is_rtc);
153 int max77663_gpio_set_alternate(int gpio, int alternate);
154 #else
155 static inline int max77663_read(struct device *dev, u8 addr, void *values,
156                                 u32 len, bool is_rtc)
157 {
158         return 0;
159 }
160
161 static inline int max77663_write(struct device *dev, u8 addr, void *values,
162                                  u32 len, bool is_rtc)
163 {
164         return 0;
165 }
166
167 static inline int max77663_set_bits(struct device *dev, u8 addr, u8 mask,
168                                     u8 value, bool is_rtc)
169 {
170         return 0;
171 }
172
173 static inline int max77663_gpio_set_alternate(int gpio, int alternate)
174 {
175         return 0;
176 }
177 #endif /* defined(CONFIG_MFD_MAX77663) */
178
179 #endif /* __LINUX_MFD_MAX77663_CORE_H__ */