Lines Matching +full:reg +full:- +full:data
2 * tps6507x-regulator.c
6 * Copyright (C) 2009 Texas Instrument Incorporated - https://www.ti.com/
41 /* Number of step-down converters available */
121 static inline int tps6507x_pmic_read(struct tps6507x_pmic *tps, u8 reg) in tps6507x_pmic_read() argument
126 err = tps->mfd->read_dev(tps->mfd, reg, 1, &val); in tps6507x_pmic_read()
134 static inline int tps6507x_pmic_write(struct tps6507x_pmic *tps, u8 reg, u8 val) in tps6507x_pmic_write() argument
136 return tps->mfd->write_dev(tps->mfd, reg, 1, &val); in tps6507x_pmic_write()
139 static int tps6507x_pmic_set_bits(struct tps6507x_pmic *tps, u8 reg, u8 mask) in tps6507x_pmic_set_bits() argument
141 int err, data; in tps6507x_pmic_set_bits() local
143 mutex_lock(&tps->io_lock); in tps6507x_pmic_set_bits()
145 data = tps6507x_pmic_read(tps, reg); in tps6507x_pmic_set_bits()
146 if (data < 0) { in tps6507x_pmic_set_bits()
147 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); in tps6507x_pmic_set_bits()
148 err = data; in tps6507x_pmic_set_bits()
152 data |= mask; in tps6507x_pmic_set_bits()
153 err = tps6507x_pmic_write(tps, reg, data); in tps6507x_pmic_set_bits()
155 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); in tps6507x_pmic_set_bits()
158 mutex_unlock(&tps->io_lock); in tps6507x_pmic_set_bits()
162 static int tps6507x_pmic_clear_bits(struct tps6507x_pmic *tps, u8 reg, u8 mask) in tps6507x_pmic_clear_bits() argument
164 int err, data; in tps6507x_pmic_clear_bits() local
166 mutex_lock(&tps->io_lock); in tps6507x_pmic_clear_bits()
168 data = tps6507x_pmic_read(tps, reg); in tps6507x_pmic_clear_bits()
169 if (data < 0) { in tps6507x_pmic_clear_bits()
170 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); in tps6507x_pmic_clear_bits()
171 err = data; in tps6507x_pmic_clear_bits()
175 data &= ~mask; in tps6507x_pmic_clear_bits()
176 err = tps6507x_pmic_write(tps, reg, data); in tps6507x_pmic_clear_bits()
178 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); in tps6507x_pmic_clear_bits()
181 mutex_unlock(&tps->io_lock); in tps6507x_pmic_clear_bits()
185 static int tps6507x_pmic_reg_read(struct tps6507x_pmic *tps, u8 reg) in tps6507x_pmic_reg_read() argument
187 int data; in tps6507x_pmic_reg_read() local
189 mutex_lock(&tps->io_lock); in tps6507x_pmic_reg_read()
191 data = tps6507x_pmic_read(tps, reg); in tps6507x_pmic_reg_read()
192 if (data < 0) in tps6507x_pmic_reg_read()
193 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); in tps6507x_pmic_reg_read()
195 mutex_unlock(&tps->io_lock); in tps6507x_pmic_reg_read()
196 return data; in tps6507x_pmic_reg_read()
199 static int tps6507x_pmic_reg_write(struct tps6507x_pmic *tps, u8 reg, u8 val) in tps6507x_pmic_reg_write() argument
203 mutex_lock(&tps->io_lock); in tps6507x_pmic_reg_write()
205 err = tps6507x_pmic_write(tps, reg, val); in tps6507x_pmic_reg_write()
207 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); in tps6507x_pmic_reg_write()
209 mutex_unlock(&tps->io_lock); in tps6507x_pmic_reg_write()
216 int data, rid = rdev_get_id(dev); in tps6507x_pmic_is_enabled() local
220 return -EINVAL; in tps6507x_pmic_is_enabled()
222 shift = TPS6507X_MAX_REG_ID - rid; in tps6507x_pmic_is_enabled()
223 data = tps6507x_pmic_reg_read(tps, TPS6507X_REG_CON_CTRL1); in tps6507x_pmic_is_enabled()
225 if (data < 0) in tps6507x_pmic_is_enabled()
226 return data; in tps6507x_pmic_is_enabled()
228 return (data & 1<<shift) ? 1 : 0; in tps6507x_pmic_is_enabled()
238 return -EINVAL; in tps6507x_pmic_enable()
240 shift = TPS6507X_MAX_REG_ID - rid; in tps6507x_pmic_enable()
251 return -EINVAL; in tps6507x_pmic_disable()
253 shift = TPS6507X_MAX_REG_ID - rid; in tps6507x_pmic_disable()
261 int data, rid = rdev_get_id(dev); in tps6507x_pmic_get_voltage_sel() local
262 u8 reg, mask; in tps6507x_pmic_get_voltage_sel() local
266 reg = TPS6507X_REG_DEFDCDC1; in tps6507x_pmic_get_voltage_sel()
270 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_get_voltage_sel()
271 reg = TPS6507X_REG_DEFDCDC2_HIGH; in tps6507x_pmic_get_voltage_sel()
273 reg = TPS6507X_REG_DEFDCDC2_LOW; in tps6507x_pmic_get_voltage_sel()
277 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_get_voltage_sel()
278 reg = TPS6507X_REG_DEFDCDC3_HIGH; in tps6507x_pmic_get_voltage_sel()
280 reg = TPS6507X_REG_DEFDCDC3_LOW; in tps6507x_pmic_get_voltage_sel()
284 reg = TPS6507X_REG_LDO_CTRL1; in tps6507x_pmic_get_voltage_sel()
288 reg = TPS6507X_REG_DEFLDO2; in tps6507x_pmic_get_voltage_sel()
292 return -EINVAL; in tps6507x_pmic_get_voltage_sel()
295 data = tps6507x_pmic_reg_read(tps, reg); in tps6507x_pmic_get_voltage_sel()
296 if (data < 0) in tps6507x_pmic_get_voltage_sel()
297 return data; in tps6507x_pmic_get_voltage_sel()
299 data &= mask; in tps6507x_pmic_get_voltage_sel()
300 return data; in tps6507x_pmic_get_voltage_sel()
307 int data, rid = rdev_get_id(dev); in tps6507x_pmic_set_voltage_sel() local
308 u8 reg, mask; in tps6507x_pmic_set_voltage_sel() local
312 reg = TPS6507X_REG_DEFDCDC1; in tps6507x_pmic_set_voltage_sel()
316 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_set_voltage_sel()
317 reg = TPS6507X_REG_DEFDCDC2_HIGH; in tps6507x_pmic_set_voltage_sel()
319 reg = TPS6507X_REG_DEFDCDC2_LOW; in tps6507x_pmic_set_voltage_sel()
323 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_set_voltage_sel()
324 reg = TPS6507X_REG_DEFDCDC3_HIGH; in tps6507x_pmic_set_voltage_sel()
326 reg = TPS6507X_REG_DEFDCDC3_LOW; in tps6507x_pmic_set_voltage_sel()
330 reg = TPS6507X_REG_LDO_CTRL1; in tps6507x_pmic_set_voltage_sel()
334 reg = TPS6507X_REG_DEFLDO2; in tps6507x_pmic_set_voltage_sel()
338 return -EINVAL; in tps6507x_pmic_set_voltage_sel()
341 data = tps6507x_pmic_reg_read(tps, reg); in tps6507x_pmic_set_voltage_sel()
342 if (data < 0) in tps6507x_pmic_set_voltage_sel()
343 return data; in tps6507x_pmic_set_voltage_sel()
345 data &= ~mask; in tps6507x_pmic_set_voltage_sel()
346 data |= selector; in tps6507x_pmic_set_voltage_sel()
348 return tps6507x_pmic_reg_write(tps, reg, data); in tps6507x_pmic_set_voltage_sel()
365 struct tps6507x_pmic *tps = config->driver_data; in tps6507x_pmic_of_parse_cb()
366 struct tps_info *info = tps->info[desc->id]; in tps6507x_pmic_of_parse_cb()
372 info->defdcdc_default = prop; in tps6507x_pmic_of_parse_cb()
379 struct tps6507x_dev *tps6507x_dev = dev_get_drvdata(pdev->dev.parent); in tps6507x_pmic_probe()
390 * coming from the board-evm file. in tps6507x_pmic_probe()
393 tps_board = dev_get_platdata(tps6507x_dev->dev); in tps6507x_pmic_probe()
395 init_data = tps_board->tps6507x_pmic_init_data; in tps6507x_pmic_probe()
397 tps = devm_kzalloc(&pdev->dev, sizeof(*tps), GFP_KERNEL); in tps6507x_pmic_probe()
399 return -ENOMEM; in tps6507x_pmic_probe()
401 mutex_init(&tps->io_lock); in tps6507x_pmic_probe()
404 tps->mfd = tps6507x_dev; in tps6507x_pmic_probe()
408 tps->info[i] = info; in tps6507x_pmic_probe()
410 struct tps6507x_reg_platform_data *data = in tps6507x_pmic_probe() local
412 info->defdcdc_default = data->defdcdc_default; in tps6507x_pmic_probe()
415 tps->desc[i].name = info->name; in tps6507x_pmic_probe()
416 tps->desc[i].of_match = of_match_ptr(info->name); in tps6507x_pmic_probe()
417 tps->desc[i].regulators_node = of_match_ptr("regulators"); in tps6507x_pmic_probe()
418 tps->desc[i].of_parse_cb = tps6507x_pmic_of_parse_cb; in tps6507x_pmic_probe()
419 tps->desc[i].id = i; in tps6507x_pmic_probe()
420 tps->desc[i].n_voltages = info->table_len; in tps6507x_pmic_probe()
421 tps->desc[i].volt_table = info->table; in tps6507x_pmic_probe()
422 tps->desc[i].ops = &tps6507x_pmic_ops; in tps6507x_pmic_probe()
423 tps->desc[i].type = REGULATOR_VOLTAGE; in tps6507x_pmic_probe()
424 tps->desc[i].owner = THIS_MODULE; in tps6507x_pmic_probe()
426 config.dev = tps6507x_dev->dev; in tps6507x_pmic_probe()
430 rdev = devm_regulator_register(&pdev->dev, &tps->desc[i], in tps6507x_pmic_probe()
433 dev_err(tps6507x_dev->dev, in tps6507x_pmic_probe()
435 pdev->name); in tps6507x_pmic_probe()
440 tps6507x_dev->pmic = tps; in tps6507x_pmic_probe()
448 .name = "tps6507x-pmic",
468 MODULE_ALIAS("platform:tps6507x-pmic");