aat2870.h (4014B)
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 */