/* * 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 */