mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-20 14:16:02 +00:00
![Axel Lin](/assets/img/avatar_default.png)
- Current implementation tests wrong value for setting aat2870_bl->max_current. - In the current implementation, we cannot differentiate between 2 cases: a) if pdata->max_current is not set , or b) pdata->max_current is set to AAT2870_CURRENT_0_45 (which is also 0). Fix it by setting AAT2870_CURRENT_0_45 to be 1 and adjust the equation in aat2870_brightness() accordingly. Signed-off-by: Axel Lin <axel.lin@gmail.com> Cc: Richard Purdie <rpurdie@rpsys.net> Cc: Samuel Ortiz <sameo@linux.intel.com> Tested-by: Jin Park <jinyoungp@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
181 lines
4.5 KiB
C
181 lines
4.5 KiB
C
/*
|
|
* 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 */
|