blob: eedbee85ff7361ece7ab80b18cdea5491bc5b00a [file] [log] [blame]
Jin Park040c0552011-08-02 16:04:54 +09001/*
2 * include/linux/mfd/max77663-core.h
3 *
4 * Copyright 2011 Maxim Integrated Products, Inc.
Johnny Qiu526eec42012-02-08 17:11:22 +08005 * Copyright (C) 2011-2012 NVIDIA Corporation
Jin Park040c0552011-08-02 16:04:54 +09006 *
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 */
23enum {
Laxman Dewangane17768e2012-08-22 16:42:46 +053024 MAX77663_IRQ_INT_TOP_GPIO, /* TOP GPIO internal int to max77663 */
Jin Park040c0552011-08-02 16:04:54 +090025 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
Jin Park040c0552011-08-02 16:04:54 +090038 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
Jin Parkc16a27a2011-08-29 11:47:40 +090047 MAX77663_IRQ_RTC, /* RTC */
Jin Park040c0552011-08-02 16:04:54 +090048 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 */
59enum {
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
Jin Park543ca9a2011-09-26 14:51:20 +090072/* Direction */
73enum max77663_gpio_dir {
74 GPIO_DIR_DEF,
75 GPIO_DIR_IN,
76 GPIO_DIR_OUT,
77};
78
79/* Data output */
80enum max77663_gpio_data_out {
81 GPIO_DOUT_DEF,
82 GPIO_DOUT_HIGH,
83 GPIO_DOUT_LOW,
84};
85
86/* Output drive */
87enum 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 */
94enum max77663_gpio_pull_up {
95 GPIO_PU_DEF,
96 GPIO_PU_ENABLE,
97 GPIO_PU_DISABLE,
98};
99
100/* Pull-down */
101enum max77663_gpio_pull_down {
102 GPIO_PD_DEF,
103 GPIO_PD_ENABLE,
104 GPIO_PD_DISABLE,
105};
106
107/* Alternate */
108enum max77663_gpio_alt {
109 GPIO_ALT_DEF,
Jin Park040c0552011-08-02 16:04:54 +0900110 GPIO_ALT_ENABLE,
Jin Park543ca9a2011-09-26 14:51:20 +0900111 GPIO_ALT_DISABLE,
Jin Park040c0552011-08-02 16:04:54 +0900112};
113
Sumit Sharmaa71cd7b2013-02-06 16:19:12 +0530114enum max77663_chip_version {
115 MAX77663_DRV_NOT_DEFINED,
116 MAX77663_DRV_10,
117 MAX77663_DRV_12,
118 MAX77663_DRV_1A,
119 MAX77663_DRV_1B,
120 MAX77663_DRV_1E,
121 MAX77663_DRV_20,
122 MAX77663_DRV_22,
123 MAX77663_DRV_24,
124};
Jin Park31c44d02012-01-17 14:48:47 +0900125/*
126 * Flags
127 */
128#define SLP_LPM_ENABLE 0x01
129
Jin Park040c0552011-08-02 16:04:54 +0900130struct max77663_gpio_config {
131 int gpio; /* gpio number */
Jin Park543ca9a2011-09-26 14:51:20 +0900132 enum max77663_gpio_dir dir;
133 enum max77663_gpio_data_out dout;
134 enum max77663_gpio_out_drv out_drv;
135 enum max77663_gpio_pull_up pull_up;
136 enum max77663_gpio_pull_down pull_down;
137 enum max77663_gpio_alt alternate;
Jin Park040c0552011-08-02 16:04:54 +0900138};
139
140struct max77663_platform_data {
141 int irq_base;
142 int gpio_base;
Jin Park543ca9a2011-09-26 14:51:20 +0900143
144 int num_gpio_cfgs;
145 struct max77663_gpio_config *gpio_cfgs;
Jin Park040c0552011-08-02 16:04:54 +0900146
147 int num_subdevs;
148 struct mfd_cell *sub_devices;
Jin Park31c44d02012-01-17 14:48:47 +0900149
Laxman Dewangan7eb20d82012-08-28 12:16:33 +0530150 struct max77663_regulator_platform_data **regulator_pdata;
151 int num_regulator_pdata;
152
Jin Park31c44d02012-01-17 14:48:47 +0900153 unsigned int flags;
Johnny Qiu526eec42012-02-08 17:11:22 +0800154
155 unsigned char rtc_i2c_addr;
Dan Willemsen30afacb2011-12-01 15:08:56 -0800156
157 bool use_power_off;
Jin Park040c0552011-08-02 16:04:54 +0900158};
159
Jin Park946644d2011-10-10 13:05:56 +0900160#if defined(CONFIG_MFD_MAX77663)
Jin Park040c0552011-08-02 16:04:54 +0900161int max77663_read(struct device *dev, u8 addr, void *values, u32 len,
162 bool is_rtc);
163int max77663_write(struct device *dev, u8 addr, void *values, u32 len,
164 bool is_rtc);
165int max77663_set_bits(struct device *dev, u8 addr, u8 mask, u8 value,
166 bool is_rtc);
Jin Park040c0552011-08-02 16:04:54 +0900167int max77663_gpio_set_alternate(int gpio, int alternate);
Sumit Sharmaa71cd7b2013-02-06 16:19:12 +0530168int max77663_read_chip_version(struct device *dev, u8 *val);
Jin Park946644d2011-10-10 13:05:56 +0900169#else
170static inline int max77663_read(struct device *dev, u8 addr, void *values,
171 u32 len, bool is_rtc)
172{
173 return 0;
174}
175
176static inline int max77663_write(struct device *dev, u8 addr, void *values,
177 u32 len, bool is_rtc)
178{
179 return 0;
180}
181
182static inline int max77663_set_bits(struct device *dev, u8 addr, u8 mask,
183 u8 value, bool is_rtc)
184{
185 return 0;
186}
187
Jin Park946644d2011-10-10 13:05:56 +0900188static inline int max77663_gpio_set_alternate(int gpio, int alternate)
189{
190 return 0;
191}
Sumit Sharmaa71cd7b2013-02-06 16:19:12 +0530192
193static inline int max77663_read_chip_version(struct device *dev, u8 *val)
194{
195 return 0;
196}
Jin Park946644d2011-10-10 13:05:56 +0900197#endif /* defined(CONFIG_MFD_MAX77663) */
Jin Park040c0552011-08-02 16:04:54 +0900198
199#endif /* __LINUX_MFD_MAX77663_CORE_H__ */