1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * Copyright (C) 2011 ST-Ericsson SA 4*4882a593Smuzhiyun * Written on behalf of Linaro for ST-Ericsson 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * Author: Linus Walleij <linus.walleij@linaro.org> 7*4882a593Smuzhiyun */ 8*4882a593Smuzhiyun #ifndef MFD_TPS6105X_H 9*4882a593Smuzhiyun #define MFD_TPS6105X_H 10*4882a593Smuzhiyun 11*4882a593Smuzhiyun #include <linux/i2c.h> 12*4882a593Smuzhiyun #include <linux/regmap.h> 13*4882a593Smuzhiyun #include <linux/regulator/machine.h> 14*4882a593Smuzhiyun 15*4882a593Smuzhiyun /* 16*4882a593Smuzhiyun * Register definitions to all subdrivers 17*4882a593Smuzhiyun */ 18*4882a593Smuzhiyun #define TPS6105X_REG_0 0x00 19*4882a593Smuzhiyun #define TPS6105X_REG0_MODE_SHIFT 6 20*4882a593Smuzhiyun #define TPS6105X_REG0_MODE_MASK (0x03<<6) 21*4882a593Smuzhiyun /* These defines for both reg0 and reg1 */ 22*4882a593Smuzhiyun #define TPS6105X_REG0_MODE_SHUTDOWN 0x00 23*4882a593Smuzhiyun #define TPS6105X_REG0_MODE_TORCH 0x01 24*4882a593Smuzhiyun #define TPS6105X_REG0_MODE_TORCH_FLASH 0x02 25*4882a593Smuzhiyun #define TPS6105X_REG0_MODE_VOLTAGE 0x03 26*4882a593Smuzhiyun #define TPS6105X_REG0_VOLTAGE_SHIFT 4 27*4882a593Smuzhiyun #define TPS6105X_REG0_VOLTAGE_MASK (3<<4) 28*4882a593Smuzhiyun #define TPS6105X_REG0_VOLTAGE_450 0 29*4882a593Smuzhiyun #define TPS6105X_REG0_VOLTAGE_500 1 30*4882a593Smuzhiyun #define TPS6105X_REG0_VOLTAGE_525 2 31*4882a593Smuzhiyun #define TPS6105X_REG0_VOLTAGE_500_2 3 32*4882a593Smuzhiyun #define TPS6105X_REG0_DIMMING_SHIFT 3 33*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_SHIFT 0 34*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_MASK (7<<0) 35*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_0 0x00 36*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_50 0x01 37*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_75 0x02 38*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_100 0x03 39*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_150 0x04 40*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_200 0x05 41*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_250_400 0x06 42*4882a593Smuzhiyun #define TPS6105X_REG0_TORCHC_250_500 0x07 43*4882a593Smuzhiyun #define TPS6105X_REG_1 0x01 44*4882a593Smuzhiyun #define TPS6105X_REG1_MODE_SHIFT 6 45*4882a593Smuzhiyun #define TPS6105X_REG1_MODE_MASK (0x03<<6) 46*4882a593Smuzhiyun #define TPS6105X_REG1_MODE_SHUTDOWN 0x00 47*4882a593Smuzhiyun #define TPS6105X_REG1_MODE_TORCH 0x01 48*4882a593Smuzhiyun #define TPS6105X_REG1_MODE_TORCH_FLASH 0x02 49*4882a593Smuzhiyun #define TPS6105X_REG1_MODE_VOLTAGE 0x03 50*4882a593Smuzhiyun #define TPS6105X_REG_2 0x02 51*4882a593Smuzhiyun #define TPS6105X_REG_3 0x03 52*4882a593Smuzhiyun 53*4882a593Smuzhiyun /** 54*4882a593Smuzhiyun * enum tps6105x_mode - desired mode for the TPS6105x 55*4882a593Smuzhiyun * @TPS6105X_MODE_SHUTDOWN: this instance is inactive, not used for anything 56*4882a593Smuzhiyun * @TPS61905X_MODE_TORCH: this instance is used as a LED, usually a while 57*4882a593Smuzhiyun * LED, for example as backlight or flashlight. If this is set, the 58*4882a593Smuzhiyun * TPS6105X will register to the LED framework 59*4882a593Smuzhiyun * @TPS6105X_MODE_TORCH_FLASH: this instance is used as a flashgun, usually 60*4882a593Smuzhiyun * in a camera 61*4882a593Smuzhiyun * @TPS6105X_MODE_VOLTAGE: this instance is used as a voltage regulator and 62*4882a593Smuzhiyun * will register to the regulator framework 63*4882a593Smuzhiyun */ 64*4882a593Smuzhiyun enum tps6105x_mode { 65*4882a593Smuzhiyun TPS6105X_MODE_SHUTDOWN, 66*4882a593Smuzhiyun TPS6105X_MODE_TORCH, 67*4882a593Smuzhiyun TPS6105X_MODE_TORCH_FLASH, 68*4882a593Smuzhiyun TPS6105X_MODE_VOLTAGE, 69*4882a593Smuzhiyun }; 70*4882a593Smuzhiyun 71*4882a593Smuzhiyun /** 72*4882a593Smuzhiyun * struct tps6105x_platform_data - TPS61905x platform data 73*4882a593Smuzhiyun * @mode: what mode this instance shall be operated in, 74*4882a593Smuzhiyun * this is not selectable at runtime 75*4882a593Smuzhiyun * @regulator_data: initialization data for the voltage 76*4882a593Smuzhiyun * regulator if used as a voltage source 77*4882a593Smuzhiyun */ 78*4882a593Smuzhiyun struct tps6105x_platform_data { 79*4882a593Smuzhiyun enum tps6105x_mode mode; 80*4882a593Smuzhiyun struct regulator_init_data *regulator_data; 81*4882a593Smuzhiyun }; 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /** 84*4882a593Smuzhiyun * struct tps6105x - state holder for the TPS6105x drivers 85*4882a593Smuzhiyun * @i2c_client: corresponding I2C client 86*4882a593Smuzhiyun * @regulator: regulator device if used in voltage mode 87*4882a593Smuzhiyun * @regmap: used for i2c communcation on accessing registers 88*4882a593Smuzhiyun */ 89*4882a593Smuzhiyun struct tps6105x { 90*4882a593Smuzhiyun struct tps6105x_platform_data *pdata; 91*4882a593Smuzhiyun struct i2c_client *client; 92*4882a593Smuzhiyun struct regulator_dev *regulator; 93*4882a593Smuzhiyun struct regmap *regmap; 94*4882a593Smuzhiyun }; 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun #endif 97