Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: Add new mfd device for TPS65217

The TPS65217 chip is a power management IC for Portable Navigation Systems
and Tablet Computing devices. It contains the following components:

- Regulators
- White LED
- USB battery charger

This patch adds support for tps65217 mfd device. At this time only
the regulator functionality is made available.

Signed-off-by: AnilKumar Ch <anilkumar@ti.com>
Reviwed-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

authored by

AnilKumar Ch and committed by
Samuel Ortiz
d48f411c 0dcc9a9d

+541
+15
drivers/mfd/Kconfig
··· 143 143 This driver can also be built as a module. If so, the module 144 144 will be called tps6507x. 145 145 146 + config MFD_TPS65217 147 + tristate "TPS65217 Power Management / White LED chips" 148 + depends on I2C 149 + select MFD_CORE 150 + select REGMAP_I2C 151 + help 152 + If you say yes here you get support for the TPS65217 series of 153 + Power Management / White LED chips. 154 + These include voltage regulators, lithium ion/polymer battery 155 + charger, wled and other features that are often used in portable 156 + devices. 157 + 158 + This driver can also be built as a module. If so, the module 159 + will be called tps65217. 160 + 146 161 config MFD_TPS6586X 147 162 bool "TPS6586x Power Management chips" 148 163 depends on I2C=y && GPIOLIB && GENERIC_HARDIRQS
+1
drivers/mfd/Makefile
··· 38 38 obj-$(CONFIG_TPS6105X) += tps6105x.o 39 39 obj-$(CONFIG_TPS65010) += tps65010.o 40 40 obj-$(CONFIG_TPS6507X) += tps6507x.o 41 + obj-$(CONFIG_MFD_TPS65217) += tps65217.o 41 42 obj-$(CONFIG_MFD_TPS65910) += tps65910.o tps65910-irq.o 42 43 tps65912-objs := tps65912-core.o tps65912-irq.o 43 44 obj-$(CONFIG_MFD_TPS65912) += tps65912.o
+242
drivers/mfd/tps65217.c
··· 1 + /* 2 + * tps65217.c 3 + * 4 + * TPS65217 chip family multi-function driver 5 + * 6 + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 7 + * 8 + * This program is free software; you can redistribute it and/or 9 + * modify it under the terms of the GNU General Public License as 10 + * published by the Free Software Foundation version 2. 11 + * 12 + * This program is distributed "as is" WITHOUT ANY WARRANTY of any 13 + * kind, whether express or implied; without even the implied warranty 14 + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 + * GNU General Public License for more details. 16 + */ 17 + 18 + #include <linux/kernel.h> 19 + #include <linux/device.h> 20 + #include <linux/module.h> 21 + #include <linux/platform_device.h> 22 + #include <linux/init.h> 23 + #include <linux/i2c.h> 24 + #include <linux/slab.h> 25 + #include <linux/regmap.h> 26 + #include <linux/err.h> 27 + 28 + #include <linux/mfd/core.h> 29 + #include <linux/mfd/tps65217.h> 30 + 31 + /** 32 + * tps65217_reg_read: Read a single tps65217 register. 33 + * 34 + * @tps: Device to read from. 35 + * @reg: Register to read. 36 + * @val: Contians the value 37 + */ 38 + int tps65217_reg_read(struct tps65217 *tps, unsigned int reg, 39 + unsigned int *val) 40 + { 41 + return regmap_read(tps->regmap, reg, val); 42 + } 43 + EXPORT_SYMBOL_GPL(tps65217_reg_read); 44 + 45 + /** 46 + * tps65217_reg_write: Write a single tps65217 register. 47 + * 48 + * @tps65217: Device to write to. 49 + * @reg: Register to write to. 50 + * @val: Value to write. 51 + * @level: Password protected level 52 + */ 53 + int tps65217_reg_write(struct tps65217 *tps, unsigned int reg, 54 + unsigned int val, unsigned int level) 55 + { 56 + int ret; 57 + unsigned int xor_reg_val; 58 + 59 + switch (level) { 60 + case TPS65217_PROTECT_NONE: 61 + return regmap_write(tps->regmap, reg, val); 62 + case TPS65217_PROTECT_L1: 63 + xor_reg_val = reg ^ TPS65217_PASSWORD_REGS_UNLOCK; 64 + ret = regmap_write(tps->regmap, TPS65217_REG_PASSWORD, 65 + xor_reg_val); 66 + if (ret < 0) 67 + return ret; 68 + 69 + return regmap_write(tps->regmap, reg, val); 70 + case TPS65217_PROTECT_L2: 71 + xor_reg_val = reg ^ TPS65217_PASSWORD_REGS_UNLOCK; 72 + ret = regmap_write(tps->regmap, TPS65217_REG_PASSWORD, 73 + xor_reg_val); 74 + if (ret < 0) 75 + return ret; 76 + ret = regmap_write(tps->regmap, reg, val); 77 + if (ret < 0) 78 + return ret; 79 + ret = regmap_write(tps->regmap, TPS65217_REG_PASSWORD, 80 + xor_reg_val); 81 + if (ret < 0) 82 + return ret; 83 + return regmap_write(tps->regmap, reg, val); 84 + default: 85 + return -EINVAL; 86 + } 87 + } 88 + EXPORT_SYMBOL_GPL(tps65217_reg_write); 89 + 90 + /** 91 + * tps65217_update_bits: Modify bits w.r.t mask, val and level. 92 + * 93 + * @tps65217: Device to write to. 94 + * @reg: Register to read-write to. 95 + * @mask: Mask. 96 + * @val: Value to write. 97 + * @level: Password protected level 98 + */ 99 + int tps65217_update_bits(struct tps65217 *tps, unsigned int reg, 100 + unsigned int mask, unsigned int val, unsigned int level) 101 + { 102 + int ret; 103 + unsigned int data; 104 + 105 + ret = tps65217_reg_read(tps, reg, &data); 106 + if (ret) { 107 + dev_err(tps->dev, "Read from reg 0x%x failed\n", reg); 108 + return ret; 109 + } 110 + 111 + data &= ~mask; 112 + data |= val & mask; 113 + 114 + ret = tps65217_reg_write(tps, reg, data, level); 115 + if (ret) 116 + dev_err(tps->dev, "Write for reg 0x%x failed\n", reg); 117 + 118 + return ret; 119 + } 120 + 121 + int tps65217_set_bits(struct tps65217 *tps, unsigned int reg, 122 + unsigned int mask, unsigned int val, unsigned int level) 123 + { 124 + return tps65217_update_bits(tps, reg, mask, val, level); 125 + } 126 + EXPORT_SYMBOL_GPL(tps65217_set_bits); 127 + 128 + int tps65217_clear_bits(struct tps65217 *tps, unsigned int reg, 129 + unsigned int mask, unsigned int level) 130 + { 131 + return tps65217_update_bits(tps, reg, mask, 0, level); 132 + } 133 + EXPORT_SYMBOL_GPL(tps65217_clear_bits); 134 + 135 + static struct regmap_config tps65217_regmap_config = { 136 + .reg_bits = 8, 137 + .val_bits = 8, 138 + }; 139 + 140 + static int __devinit tps65217_probe(struct i2c_client *client, 141 + const struct i2c_device_id *ids) 142 + { 143 + struct tps65217 *tps; 144 + struct tps65217_board *pdata = client->dev.platform_data; 145 + int i, ret; 146 + unsigned int version; 147 + 148 + tps = devm_kzalloc(&client->dev, sizeof(*tps), GFP_KERNEL); 149 + if (!tps) 150 + return -ENOMEM; 151 + 152 + tps->pdata = pdata; 153 + tps->regmap = regmap_init_i2c(client, &tps65217_regmap_config); 154 + if (IS_ERR(tps->regmap)) { 155 + ret = PTR_ERR(tps->regmap); 156 + dev_err(tps->dev, "Failed to allocate register map: %d\n", 157 + ret); 158 + return ret; 159 + } 160 + 161 + i2c_set_clientdata(client, tps); 162 + tps->dev = &client->dev; 163 + 164 + ret = tps65217_reg_read(tps, TPS65217_REG_CHIPID, &version); 165 + if (ret < 0) { 166 + dev_err(tps->dev, "Failed to read revision" 167 + " register: %d\n", ret); 168 + goto err_regmap; 169 + } 170 + 171 + dev_info(tps->dev, "TPS65217 ID %#x version 1.%d\n", 172 + (version & TPS65217_CHIPID_CHIP_MASK) >> 4, 173 + version & TPS65217_CHIPID_REV_MASK); 174 + 175 + for (i = 0; i < TPS65217_NUM_REGULATOR; i++) { 176 + struct platform_device *pdev; 177 + 178 + pdev = platform_device_alloc("tps65217-pmic", i); 179 + if (!pdev) { 180 + dev_err(tps->dev, "Cannot create regulator %d\n", i); 181 + continue; 182 + } 183 + 184 + pdev->dev.parent = tps->dev; 185 + platform_device_add_data(pdev, &pdata->tps65217_init_data[i], 186 + sizeof(pdata->tps65217_init_data[i])); 187 + tps->regulator_pdev[i] = pdev; 188 + 189 + platform_device_add(pdev); 190 + } 191 + 192 + return 0; 193 + 194 + err_regmap: 195 + regmap_exit(tps->regmap); 196 + 197 + return ret; 198 + } 199 + 200 + static int __devexit tps65217_remove(struct i2c_client *client) 201 + { 202 + struct tps65217 *tps = i2c_get_clientdata(client); 203 + int i; 204 + 205 + for (i = 0; i < TPS65217_NUM_REGULATOR; i++) 206 + platform_device_unregister(tps->regulator_pdev[i]); 207 + 208 + regmap_exit(tps->regmap); 209 + 210 + return 0; 211 + } 212 + 213 + static const struct i2c_device_id tps65217_id_table[] = { 214 + {"tps65217", 0xF0}, 215 + {/* end of list */} 216 + }; 217 + MODULE_DEVICE_TABLE(i2c, tps65217_id_table); 218 + 219 + static struct i2c_driver tps65217_driver = { 220 + .driver = { 221 + .name = "tps65217", 222 + }, 223 + .id_table = tps65217_id_table, 224 + .probe = tps65217_probe, 225 + .remove = __devexit_p(tps65217_remove), 226 + }; 227 + 228 + static int __init tps65217_init(void) 229 + { 230 + return i2c_add_driver(&tps65217_driver); 231 + } 232 + subsys_initcall(tps65217_init); 233 + 234 + static void __exit tps65217_exit(void) 235 + { 236 + i2c_del_driver(&tps65217_driver); 237 + } 238 + module_exit(tps65217_exit); 239 + 240 + MODULE_AUTHOR("AnilKumar Ch <anilkumar@ti.com>"); 241 + MODULE_DESCRIPTION("TPS65217 chip family multi-function driver"); 242 + MODULE_LICENSE("GPL v2");
+283
include/linux/mfd/tps65217.h
··· 1 + /* 2 + * linux/mfd/tps65217.h 3 + * 4 + * Functions to access TPS65217 power management chip. 5 + * 6 + * Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ 7 + * 8 + * This program is free software; you can redistribute it and/or 9 + * modify it under the terms of the GNU General Public License as 10 + * published by the Free Software Foundation version 2. 11 + * 12 + * This program is distributed "as is" WITHOUT ANY WARRANTY of any 13 + * kind, whether express or implied; without even the implied warranty 14 + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 + * GNU General Public License for more details. 16 + */ 17 + 18 + #ifndef __LINUX_MFD_TPS65217_H 19 + #define __LINUX_MFD_TPS65217_H 20 + 21 + #include <linux/i2c.h> 22 + #include <linux/regulator/driver.h> 23 + #include <linux/regulator/machine.h> 24 + 25 + /* I2C ID for TPS65217 part */ 26 + #define TPS65217_I2C_ID 0x24 27 + 28 + /* All register addresses */ 29 + #define TPS65217_REG_CHIPID 0X00 30 + #define TPS65217_REG_PPATH 0X01 31 + #define TPS65217_REG_INT 0X02 32 + #define TPS65217_REG_CHGCONFIG0 0X03 33 + #define TPS65217_REG_CHGCONFIG1 0X04 34 + #define TPS65217_REG_CHGCONFIG2 0X05 35 + #define TPS65217_REG_CHGCONFIG3 0X06 36 + #define TPS65217_REG_WLEDCTRL1 0X07 37 + #define TPS65217_REG_WLEDCTRL2 0X08 38 + #define TPS65217_REG_MUXCTRL 0X09 39 + #define TPS65217_REG_STATUS 0X0A 40 + #define TPS65217_REG_PASSWORD 0X0B 41 + #define TPS65217_REG_PGOOD 0X0C 42 + #define TPS65217_REG_DEFPG 0X0D 43 + #define TPS65217_REG_DEFDCDC1 0X0E 44 + #define TPS65217_REG_DEFDCDC2 0X0F 45 + #define TPS65217_REG_DEFDCDC3 0X10 46 + #define TPS65217_REG_DEFSLEW 0X11 47 + #define TPS65217_REG_DEFLDO1 0X12 48 + #define TPS65217_REG_DEFLDO2 0X13 49 + #define TPS65217_REG_DEFLS1 0X14 50 + #define TPS65217_REG_DEFLS2 0X15 51 + #define TPS65217_REG_ENABLE 0X16 52 + #define TPS65217_REG_DEFUVLO 0X18 53 + #define TPS65217_REG_SEQ1 0X19 54 + #define TPS65217_REG_SEQ2 0X1A 55 + #define TPS65217_REG_SEQ3 0X1B 56 + #define TPS65217_REG_SEQ4 0X1C 57 + #define TPS65217_REG_SEQ5 0X1D 58 + #define TPS65217_REG_SEQ6 0X1E 59 + 60 + /* Register field definitions */ 61 + #define TPS65217_CHIPID_CHIP_MASK 0xF0 62 + #define TPS65217_CHIPID_REV_MASK 0x0F 63 + 64 + #define TPS65217_PPATH_ACSINK_ENABLE BIT(7) 65 + #define TPS65217_PPATH_USBSINK_ENABLE BIT(6) 66 + #define TPS65217_PPATH_AC_PW_ENABLE BIT(5) 67 + #define TPS65217_PPATH_USB_PW_ENABLE BIT(4) 68 + #define TPS65217_PPATH_AC_CURRENT_MASK 0x0C 69 + #define TPS65217_PPATH_USB_CURRENT_MASK 0x03 70 + 71 + #define TPS65217_INT_PBM BIT(6) 72 + #define TPS65217_INT_ACM BIT(5) 73 + #define TPS65217_INT_USBM BIT(4) 74 + #define TPS65217_INT_PBI BIT(2) 75 + #define TPS65217_INT_ACI BIT(1) 76 + #define TPS65217_INT_USBI BIT(0) 77 + 78 + #define TPS65217_CHGCONFIG0_TREG BIT(7) 79 + #define TPS65217_CHGCONFIG0_DPPM BIT(6) 80 + #define TPS65217_CHGCONFIG0_TSUSP BIT(5) 81 + #define TPS65217_CHGCONFIG0_TERMI BIT(4) 82 + #define TPS65217_CHGCONFIG0_ACTIVE BIT(3) 83 + #define TPS65217_CHGCONFIG0_CHGTOUT BIT(2) 84 + #define TPS65217_CHGCONFIG0_PCHGTOUT BIT(1) 85 + #define TPS65217_CHGCONFIG0_BATTEMP BIT(0) 86 + 87 + #define TPS65217_CHGCONFIG1_TMR_MASK 0xC0 88 + #define TPS65217_CHGCONFIG1_TMR_ENABLE BIT(5) 89 + #define TPS65217_CHGCONFIG1_NTC_TYPE BIT(4) 90 + #define TPS65217_CHGCONFIG1_RESET BIT(3) 91 + #define TPS65217_CHGCONFIG1_TERM BIT(2) 92 + #define TPS65217_CHGCONFIG1_SUSP BIT(1) 93 + #define TPS65217_CHGCONFIG1_CHG_EN BIT(0) 94 + 95 + #define TPS65217_CHGCONFIG2_DYNTMR BIT(7) 96 + #define TPS65217_CHGCONFIG2_VPREGHG BIT(6) 97 + #define TPS65217_CHGCONFIG2_VOREG_MASK 0x30 98 + 99 + #define TPS65217_CHGCONFIG3_ICHRG_MASK 0xC0 100 + #define TPS65217_CHGCONFIG3_DPPMTH_MASK 0x30 101 + #define TPS65217_CHGCONFIG2_PCHRGT BIT(3) 102 + #define TPS65217_CHGCONFIG2_TERMIF 0x06 103 + #define TPS65217_CHGCONFIG2_TRANGE BIT(0) 104 + 105 + #define TPS65217_WLEDCTRL1_ISINK_ENABLE BIT(3) 106 + #define TPS65217_WLEDCTRL1_ISEL BIT(2) 107 + #define TPS65217_WLEDCTRL1_FDIM_MASK 0x03 108 + 109 + #define TPS65217_WLEDCTRL2_DUTY_MASK 0x7F 110 + 111 + #define TPS65217_MUXCTRL_MUX_MASK 0x07 112 + 113 + #define TPS65217_STATUS_OFF BIT(7) 114 + #define TPS65217_STATUS_ACPWR BIT(3) 115 + #define TPS65217_STATUS_USBPWR BIT(2) 116 + #define TPS65217_STATUS_PB BIT(0) 117 + 118 + #define TPS65217_PASSWORD_REGS_UNLOCK 0x7D 119 + 120 + #define TPS65217_PGOOD_LDO3_PG BIT(6) 121 + #define TPS65217_PGOOD_LDO4_PG BIT(5) 122 + #define TPS65217_PGOOD_DC1_PG BIT(4) 123 + #define TPS65217_PGOOD_DC2_PG BIT(3) 124 + #define TPS65217_PGOOD_DC3_PG BIT(2) 125 + #define TPS65217_PGOOD_LDO1_PG BIT(1) 126 + #define TPS65217_PGOOD_LDO2_PG BIT(0) 127 + 128 + #define TPS65217_DEFPG_LDO1PGM BIT(3) 129 + #define TPS65217_DEFPG_LDO2PGM BIT(2) 130 + #define TPS65217_DEFPG_PGDLY_MASK 0x03 131 + 132 + #define TPS65217_DEFDCDCX_XADJX BIT(7) 133 + #define TPS65217_DEFDCDCX_DCDC_MASK 0x3F 134 + 135 + #define TPS65217_DEFSLEW_GO BIT(7) 136 + #define TPS65217_DEFSLEW_GODSBL BIT(6) 137 + #define TPS65217_DEFSLEW_PFM_EN1 BIT(5) 138 + #define TPS65217_DEFSLEW_PFM_EN2 BIT(4) 139 + #define TPS65217_DEFSLEW_PFM_EN3 BIT(3) 140 + #define TPS65217_DEFSLEW_SLEW_MASK 0x07 141 + 142 + #define TPS65217_DEFLDO1_LDO1_MASK 0x0F 143 + 144 + #define TPS65217_DEFLDO2_TRACK BIT(6) 145 + #define TPS65217_DEFLDO2_LDO2_MASK 0x3F 146 + 147 + #define TPS65217_DEFLDO3_LDO3_EN BIT(5) 148 + #define TPS65217_DEFLDO3_LDO3_MASK 0x1F 149 + 150 + #define TPS65217_DEFLDO4_LDO4_EN BIT(5) 151 + #define TPS65217_DEFLDO4_LDO4_MASK 0x1F 152 + 153 + #define TPS65217_ENABLE_LS1_EN BIT(6) 154 + #define TPS65217_ENABLE_LS2_EN BIT(5) 155 + #define TPS65217_ENABLE_DC1_EN BIT(4) 156 + #define TPS65217_ENABLE_DC2_EN BIT(3) 157 + #define TPS65217_ENABLE_DC3_EN BIT(2) 158 + #define TPS65217_ENABLE_LDO1_EN BIT(1) 159 + #define TPS65217_ENABLE_LDO2_EN BIT(0) 160 + 161 + #define TPS65217_DEFUVLO_UVLOHYS BIT(2) 162 + #define TPS65217_DEFUVLO_UVLO_MASK 0x03 163 + 164 + #define TPS65217_SEQ1_DC1_SEQ_MASK 0xF0 165 + #define TPS65217_SEQ1_DC2_SEQ_MASK 0x0F 166 + 167 + #define TPS65217_SEQ2_DC3_SEQ_MASK 0xF0 168 + #define TPS65217_SEQ2_LDO1_SEQ_MASK 0x0F 169 + 170 + #define TPS65217_SEQ3_LDO2_SEQ_MASK 0xF0 171 + #define TPS65217_SEQ3_LDO3_SEQ_MASK 0x0F 172 + 173 + #define TPS65217_SEQ4_LDO4_SEQ_MASK 0xF0 174 + 175 + #define TPS65217_SEQ5_DLY1_MASK 0xC0 176 + #define TPS65217_SEQ5_DLY2_MASK 0x30 177 + #define TPS65217_SEQ5_DLY3_MASK 0x0C 178 + #define TPS65217_SEQ5_DLY4_MASK 0x03 179 + 180 + #define TPS65217_SEQ6_DLY5_MASK 0xC0 181 + #define TPS65217_SEQ6_DLY6_MASK 0x30 182 + #define TPS65217_SEQ6_SEQUP BIT(2) 183 + #define TPS65217_SEQ6_SEQDWN BIT(1) 184 + #define TPS65217_SEQ6_INSTDWN BIT(0) 185 + 186 + #define TPS65217_MAX_REGISTER 0x1E 187 + #define TPS65217_PROTECT_NONE 0 188 + #define TPS65217_PROTECT_L1 1 189 + #define TPS65217_PROTECT_L2 2 190 + 191 + 192 + enum tps65217_regulator_id { 193 + /* DCDC's */ 194 + TPS65217_DCDC_1, 195 + TPS65217_DCDC_2, 196 + TPS65217_DCDC_3, 197 + /* LDOs */ 198 + TPS65217_LDO_1, 199 + TPS65217_LDO_2, 200 + TPS65217_LDO_3, 201 + TPS65217_LDO_4, 202 + }; 203 + 204 + #define TPS65217_MAX_REG_ID TPS65217_LDO_4 205 + 206 + /* Number of step-down converters available */ 207 + #define TPS65217_NUM_DCDC 3 208 + /* Number of LDO voltage regulators available */ 209 + #define TPS65217_NUM_LDO 4 210 + /* Number of total regulators available */ 211 + #define TPS65217_NUM_REGULATOR (TPS65217_NUM_DCDC + TPS65217_NUM_LDO) 212 + 213 + /** 214 + * struct tps65217_board - packages regulator init data 215 + * @tps65217_regulator_data: regulator initialization values 216 + * 217 + * Board data may be used to initialize regulator. 218 + */ 219 + struct tps65217_board { 220 + struct regulator_init_data *tps65217_init_data; 221 + }; 222 + 223 + /** 224 + * struct tps_info - packages regulator constraints 225 + * @name: Voltage regulator name 226 + * @min_uV: minimum micro volts 227 + * @max_uV: minimum micro volts 228 + * @vsel_to_uv: Function pointer to get voltage from selector 229 + * @uv_to_vsel: Function pointer to get selector from voltage 230 + * @table: Table for non-uniform voltage step-size 231 + * @table_len: Length of the voltage table 232 + * @enable_mask: Regulator enable mask bits 233 + * @set_vout_reg: Regulator output voltage set register 234 + * @set_vout_mask: Regulator output voltage set mask 235 + * 236 + * This data is used to check the regualtor voltage limits while setting. 237 + */ 238 + struct tps_info { 239 + const char *name; 240 + int min_uV; 241 + int max_uV; 242 + int (*vsel_to_uv)(unsigned int vsel); 243 + int (*uv_to_vsel)(int uV, unsigned int *vsel); 244 + const int *table; 245 + unsigned int table_len; 246 + unsigned int enable_mask; 247 + unsigned int set_vout_reg; 248 + unsigned int set_vout_mask; 249 + }; 250 + 251 + /** 252 + * struct tps65217 - tps65217 sub-driver chip access routines 253 + * 254 + * Device data may be used to access the TPS65217 chip 255 + */ 256 + 257 + struct tps65217 { 258 + struct device *dev; 259 + struct tps65217_board *pdata; 260 + struct regulator_desc desc[TPS65217_NUM_REGULATOR]; 261 + struct regulator_dev *rdev[TPS65217_NUM_REGULATOR]; 262 + struct tps_info *info[TPS65217_NUM_REGULATOR]; 263 + struct regmap *regmap; 264 + 265 + /* Client devices */ 266 + struct platform_device *regulator_pdev[TPS65217_NUM_REGULATOR]; 267 + }; 268 + 269 + static inline struct tps65217 *dev_to_tps65217(struct device *dev) 270 + { 271 + return dev_get_drvdata(dev); 272 + } 273 + 274 + int tps65217_reg_read(struct tps65217 *tps, unsigned int reg, 275 + unsigned int *val); 276 + int tps65217_reg_write(struct tps65217 *tps, unsigned int reg, 277 + unsigned int val, unsigned int level); 278 + int tps65217_set_bits(struct tps65217 *tps, unsigned int reg, 279 + unsigned int mask, unsigned int val, unsigned int level); 280 + int tps65217_clear_bits(struct tps65217 *tps, unsigned int reg, 281 + unsigned int mask, unsigned int level); 282 + 283 + #endif /* __LINUX_MFD_TPS65217_H */