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