diff options
Diffstat (limited to 'include/linux/mfd/aat2870.h')
| -rw-r--r-- | include/linux/mfd/aat2870.h | 181 | 
1 files changed, 181 insertions, 0 deletions
diff --git a/include/linux/mfd/aat2870.h b/include/linux/mfd/aat2870.h new file mode 100644 index 00000000000..f7316c29bde --- /dev/null +++ b/include/linux/mfd/aat2870.h @@ -0,0 +1,181 @@ +/* + * linux/include/linux/mfd/aat2870.h + * + * Copyright (c) 2011, NVIDIA Corporation. + * Author: Jin Park <jinyoungp@nvidia.com> + * + * 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. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA + */ + +#ifndef __LINUX_MFD_AAT2870_H +#define __LINUX_MFD_AAT2870_H + +#include <linux/debugfs.h> +#include <linux/i2c.h> + +/* Register offsets */ +#define AAT2870_BL_CH_EN	0x00 +#define AAT2870_BLM		0x01 +#define AAT2870_BLS		0x02 +#define AAT2870_BL1		0x03 +#define AAT2870_BL2		0x04 +#define AAT2870_BL3		0x05 +#define AAT2870_BL4		0x06 +#define AAT2870_BL5		0x07 +#define AAT2870_BL6		0x08 +#define AAT2870_BL7		0x09 +#define AAT2870_BL8		0x0A +#define AAT2870_FLR		0x0B +#define AAT2870_FM		0x0C +#define AAT2870_FS		0x0D +#define AAT2870_ALS_CFG0	0x0E +#define AAT2870_ALS_CFG1	0x0F +#define AAT2870_ALS_CFG2	0x10 +#define AAT2870_AMB		0x11 +#define AAT2870_ALS0		0x12 +#define AAT2870_ALS1		0x13 +#define AAT2870_ALS2		0x14 +#define AAT2870_ALS3		0x15 +#define AAT2870_ALS4		0x16 +#define AAT2870_ALS5		0x17 +#define AAT2870_ALS6		0x18 +#define AAT2870_ALS7		0x19 +#define AAT2870_ALS8		0x1A +#define AAT2870_ALS9		0x1B +#define AAT2870_ALSA		0x1C +#define AAT2870_ALSB		0x1D +#define AAT2870_ALSC		0x1E +#define AAT2870_ALSD		0x1F +#define AAT2870_ALSE		0x20 +#define AAT2870_ALSF		0x21 +#define AAT2870_SUB_SET		0x22 +#define AAT2870_SUB_CTRL	0x23 +#define AAT2870_LDO_AB		0x24 +#define AAT2870_LDO_CD		0x25 +#define AAT2870_LDO_EN		0x26 +#define AAT2870_REG_NUM		0x27 + +/* Device IDs */ +enum aat2870_id { +	AAT2870_ID_BL, +	AAT2870_ID_LDOA, +	AAT2870_ID_LDOB, +	AAT2870_ID_LDOC, +	AAT2870_ID_LDOD +}; + +/* Backlight channels */ +#define AAT2870_BL_CH1		0x01 +#define AAT2870_BL_CH2		0x02 +#define AAT2870_BL_CH3		0x04 +#define AAT2870_BL_CH4		0x08 +#define AAT2870_BL_CH5		0x10 +#define AAT2870_BL_CH6		0x20 +#define AAT2870_BL_CH7		0x40 +#define AAT2870_BL_CH8		0x80 +#define AAT2870_BL_CH_ALL	0xFF + +/* Backlight current magnitude (mA) */ +enum aat2870_current { +	AAT2870_CURRENT_0_45 = 1, +	AAT2870_CURRENT_0_90, +	AAT2870_CURRENT_1_80, +	AAT2870_CURRENT_2_70, +	AAT2870_CURRENT_3_60, +	AAT2870_CURRENT_4_50, +	AAT2870_CURRENT_5_40, +	AAT2870_CURRENT_6_30, +	AAT2870_CURRENT_7_20, +	AAT2870_CURRENT_8_10, +	AAT2870_CURRENT_9_00, +	AAT2870_CURRENT_9_90, +	AAT2870_CURRENT_10_8, +	AAT2870_CURRENT_11_7, +	AAT2870_CURRENT_12_6, +	AAT2870_CURRENT_13_5, +	AAT2870_CURRENT_14_4, +	AAT2870_CURRENT_15_3, +	AAT2870_CURRENT_16_2, +	AAT2870_CURRENT_17_1, +	AAT2870_CURRENT_18_0, +	AAT2870_CURRENT_18_9, +	AAT2870_CURRENT_19_8, +	AAT2870_CURRENT_20_7, +	AAT2870_CURRENT_21_6, +	AAT2870_CURRENT_22_5, +	AAT2870_CURRENT_23_4, +	AAT2870_CURRENT_24_3, +	AAT2870_CURRENT_25_2, +	AAT2870_CURRENT_26_1, +	AAT2870_CURRENT_27_0, +	AAT2870_CURRENT_27_9 +}; + +struct aat2870_register { +	bool readable; +	bool writeable; +	u8 value; +}; + +struct aat2870_data { +	struct device *dev; +	struct i2c_client *client; + +	struct mutex io_lock; +	struct aat2870_register *reg_cache; /* register cache */ +	int en_pin; /* enable GPIO pin (if < 0, ignore this value) */ +	bool is_enable; + +	/* init and uninit for platform specified */ +	int (*init)(struct aat2870_data *aat2870); +	void (*uninit)(struct aat2870_data *aat2870); + +	/* i2c io funcntions */ +	int (*read)(struct aat2870_data *aat2870, u8 addr, u8 *val); +	int (*write)(struct aat2870_data *aat2870, u8 addr, u8 val); +	int (*update)(struct aat2870_data *aat2870, u8 addr, u8 mask, u8 val); + +	/* for debugfs */ +	struct dentry *dentry_root; +	struct dentry *dentry_reg; +}; + +struct aat2870_subdev_info { +	int id; +	const char *name; +	void *platform_data; +}; + +struct aat2870_platform_data { +	int en_pin; /* enable GPIO pin (if < 0, ignore this value) */ + +	struct aat2870_subdev_info *subdevs; +	int num_subdevs; + +	/* init and uninit for platform specified */ +	int (*init)(struct aat2870_data *aat2870); +	void (*uninit)(struct aat2870_data *aat2870); +}; + +struct aat2870_bl_platform_data { +	/* backlight channels, default is AAT2870_BL_CH_ALL */ +	int channels; +	/* backlight current magnitude, default is AAT2870_CURRENT_27_9 */ +	int max_current; +	/* maximum brightness, default is 255 */ +	int max_brightness; +}; + +#endif /* __LINUX_MFD_AAT2870_H */  | 
