linux/include/linux/mfd/aat2870.h
<<
>>
Prefs
   1/*
   2 * linux/include/linux/mfd/aat2870.h
   3 *
   4 * Copyright (c) 2011, NVIDIA Corporation.
   5 * Author: Jin Park <jinyoungp@nvidia.com>
   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
   9 * version 2 as published by the Free Software Foundation.
  10 *
  11 * This program is distributed in the hope that it will be useful, but
  12 * WITHOUT ANY WARRANTY; without even the implied warranty of
  13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14 * General Public License for more details.
  15 *
  16 * You should have received a copy of the GNU General Public License
  17 * along with this program; if not, write to the Free Software
  18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
  19 * 02110-1301 USA
  20 */
  21
  22#ifndef __LINUX_MFD_AAT2870_H
  23#define __LINUX_MFD_AAT2870_H
  24
  25#include <linux/debugfs.h>
  26#include <linux/i2c.h>
  27
  28/* Register offsets */
  29#define AAT2870_BL_CH_EN        0x00
  30#define AAT2870_BLM             0x01
  31#define AAT2870_BLS             0x02
  32#define AAT2870_BL1             0x03
  33#define AAT2870_BL2             0x04
  34#define AAT2870_BL3             0x05
  35#define AAT2870_BL4             0x06
  36#define AAT2870_BL5             0x07
  37#define AAT2870_BL6             0x08
  38#define AAT2870_BL7             0x09
  39#define AAT2870_BL8             0x0A
  40#define AAT2870_FLR             0x0B
  41#define AAT2870_FM              0x0C
  42#define AAT2870_FS              0x0D
  43#define AAT2870_ALS_CFG0        0x0E
  44#define AAT2870_ALS_CFG1        0x0F
  45#define AAT2870_ALS_CFG2        0x10
  46#define AAT2870_AMB             0x11
  47#define AAT2870_ALS0            0x12
  48#define AAT2870_ALS1            0x13
  49#define AAT2870_ALS2            0x14
  50#define AAT2870_ALS3            0x15
  51#define AAT2870_ALS4            0x16
  52#define AAT2870_ALS5            0x17
  53#define AAT2870_ALS6            0x18
  54#define AAT2870_ALS7            0x19
  55#define AAT2870_ALS8            0x1A
  56#define AAT2870_ALS9            0x1B
  57#define AAT2870_ALSA            0x1C
  58#define AAT2870_ALSB            0x1D
  59#define AAT2870_ALSC            0x1E
  60#define AAT2870_ALSD            0x1F
  61#define AAT2870_ALSE            0x20
  62#define AAT2870_ALSF            0x21
  63#define AAT2870_SUB_SET         0x22
  64#define AAT2870_SUB_CTRL        0x23
  65#define AAT2870_LDO_AB          0x24
  66#define AAT2870_LDO_CD          0x25
  67#define AAT2870_LDO_EN          0x26
  68#define AAT2870_REG_NUM         0x27
  69
  70/* Device IDs */
  71enum aat2870_id {
  72        AAT2870_ID_BL,
  73        AAT2870_ID_LDOA,
  74        AAT2870_ID_LDOB,
  75        AAT2870_ID_LDOC,
  76        AAT2870_ID_LDOD
  77};
  78
  79/* Backlight channels */
  80#define AAT2870_BL_CH1          0x01
  81#define AAT2870_BL_CH2          0x02
  82#define AAT2870_BL_CH3          0x04
  83#define AAT2870_BL_CH4          0x08
  84#define AAT2870_BL_CH5          0x10
  85#define AAT2870_BL_CH6          0x20
  86#define AAT2870_BL_CH7          0x40
  87#define AAT2870_BL_CH8          0x80
  88#define AAT2870_BL_CH_ALL       0xFF
  89
  90/* Backlight current magnitude (mA) */
  91enum aat2870_current {
  92        AAT2870_CURRENT_0_45 = 1,
  93        AAT2870_CURRENT_0_90,
  94        AAT2870_CURRENT_1_80,
  95        AAT2870_CURRENT_2_70,
  96        AAT2870_CURRENT_3_60,
  97        AAT2870_CURRENT_4_50,
  98        AAT2870_CURRENT_5_40,
  99        AAT2870_CURRENT_6_30,
 100        AAT2870_CURRENT_7_20,
 101        AAT2870_CURRENT_8_10,
 102        AAT2870_CURRENT_9_00,
 103        AAT2870_CURRENT_9_90,
 104        AAT2870_CURRENT_10_8,
 105        AAT2870_CURRENT_11_7,
 106        AAT2870_CURRENT_12_6,
 107        AAT2870_CURRENT_13_5,
 108        AAT2870_CURRENT_14_4,
 109        AAT2870_CURRENT_15_3,
 110        AAT2870_CURRENT_16_2,
 111        AAT2870_CURRENT_17_1,
 112        AAT2870_CURRENT_18_0,
 113        AAT2870_CURRENT_18_9,
 114        AAT2870_CURRENT_19_8,
 115        AAT2870_CURRENT_20_7,
 116        AAT2870_CURRENT_21_6,
 117        AAT2870_CURRENT_22_5,
 118        AAT2870_CURRENT_23_4,
 119        AAT2870_CURRENT_24_3,
 120        AAT2870_CURRENT_25_2,
 121        AAT2870_CURRENT_26_1,
 122        AAT2870_CURRENT_27_0,
 123        AAT2870_CURRENT_27_9
 124};
 125
 126struct aat2870_register {
 127        bool readable;
 128        bool writeable;
 129        u8 value;
 130};
 131
 132struct aat2870_data {
 133        struct device *dev;
 134        struct i2c_client *client;
 135
 136        struct mutex io_lock;
 137        struct aat2870_register *reg_cache; /* register cache */
 138        int en_pin; /* enable GPIO pin (if < 0, ignore this value) */
 139        bool is_enable;
 140
 141        /* init and uninit for platform specified */
 142        int (*init)(struct aat2870_data *aat2870);
 143        void (*uninit)(struct aat2870_data *aat2870);
 144
 145        /* i2c io funcntions */
 146        int (*read)(struct aat2870_data *aat2870, u8 addr, u8 *val);
 147        int (*write)(struct aat2870_data *aat2870, u8 addr, u8 val);
 148        int (*update)(struct aat2870_data *aat2870, u8 addr, u8 mask, u8 val);
 149
 150        /* for debugfs */
 151        struct dentry *dentry_root;
 152        struct dentry *dentry_reg;
 153};
 154
 155struct aat2870_subdev_info {
 156        int id;
 157        const char *name;
 158        void *platform_data;
 159};
 160
 161struct aat2870_platform_data {
 162        int en_pin; /* enable GPIO pin (if < 0, ignore this value) */
 163
 164        struct aat2870_subdev_info *subdevs;
 165        int num_subdevs;
 166
 167        /* init and uninit for platform specified */
 168        int (*init)(struct aat2870_data *aat2870);
 169        void (*uninit)(struct aat2870_data *aat2870);
 170};
 171
 172struct aat2870_bl_platform_data {
 173        /* backlight channels, default is AAT2870_BL_CH_ALL */
 174        int channels;
 175        /* backlight current magnitude, default is AAT2870_CURRENT_27_9 */
 176        int max_current;
 177        /* maximum brightness, default is 255 */
 178        int max_brightness;
 179};
 180
 181#endif /* __LINUX_MFD_AAT2870_H */
 182