• Home
  • Raw
  • Download

Lines Matching +full:reg +full:- +full:data

2  * tps6507x-regulator.c
6 * Copyright (C) 2009 Texas Instrument Incorporated - http://www.ti.com/
41 /* Number of step-down converters available */
122 static inline int tps6507x_pmic_read(struct tps6507x_pmic *tps, u8 reg) in tps6507x_pmic_read() argument
127 err = tps->mfd->read_dev(tps->mfd, reg, 1, &val); in tps6507x_pmic_read()
135 static inline int tps6507x_pmic_write(struct tps6507x_pmic *tps, u8 reg, u8 val) in tps6507x_pmic_write() argument
137 return tps->mfd->write_dev(tps->mfd, reg, 1, &val); in tps6507x_pmic_write()
140 static int tps6507x_pmic_set_bits(struct tps6507x_pmic *tps, u8 reg, u8 mask) in tps6507x_pmic_set_bits() argument
142 int err, data; in tps6507x_pmic_set_bits() local
144 mutex_lock(&tps->io_lock); in tps6507x_pmic_set_bits()
146 data = tps6507x_pmic_read(tps, reg); in tps6507x_pmic_set_bits()
147 if (data < 0) { in tps6507x_pmic_set_bits()
148 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); in tps6507x_pmic_set_bits()
149 err = data; in tps6507x_pmic_set_bits()
153 data |= mask; in tps6507x_pmic_set_bits()
154 err = tps6507x_pmic_write(tps, reg, data); in tps6507x_pmic_set_bits()
156 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); in tps6507x_pmic_set_bits()
159 mutex_unlock(&tps->io_lock); in tps6507x_pmic_set_bits()
163 static int tps6507x_pmic_clear_bits(struct tps6507x_pmic *tps, u8 reg, u8 mask) in tps6507x_pmic_clear_bits() argument
165 int err, data; in tps6507x_pmic_clear_bits() local
167 mutex_lock(&tps->io_lock); in tps6507x_pmic_clear_bits()
169 data = tps6507x_pmic_read(tps, reg); in tps6507x_pmic_clear_bits()
170 if (data < 0) { in tps6507x_pmic_clear_bits()
171 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); in tps6507x_pmic_clear_bits()
172 err = data; in tps6507x_pmic_clear_bits()
176 data &= ~mask; in tps6507x_pmic_clear_bits()
177 err = tps6507x_pmic_write(tps, reg, data); in tps6507x_pmic_clear_bits()
179 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); in tps6507x_pmic_clear_bits()
182 mutex_unlock(&tps->io_lock); in tps6507x_pmic_clear_bits()
186 static int tps6507x_pmic_reg_read(struct tps6507x_pmic *tps, u8 reg) in tps6507x_pmic_reg_read() argument
188 int data; in tps6507x_pmic_reg_read() local
190 mutex_lock(&tps->io_lock); in tps6507x_pmic_reg_read()
192 data = tps6507x_pmic_read(tps, reg); in tps6507x_pmic_reg_read()
193 if (data < 0) in tps6507x_pmic_reg_read()
194 dev_err(tps->mfd->dev, "Read from reg 0x%x failed\n", reg); in tps6507x_pmic_reg_read()
196 mutex_unlock(&tps->io_lock); in tps6507x_pmic_reg_read()
197 return data; in tps6507x_pmic_reg_read()
200 static int tps6507x_pmic_reg_write(struct tps6507x_pmic *tps, u8 reg, u8 val) in tps6507x_pmic_reg_write() argument
204 mutex_lock(&tps->io_lock); in tps6507x_pmic_reg_write()
206 err = tps6507x_pmic_write(tps, reg, val); in tps6507x_pmic_reg_write()
208 dev_err(tps->mfd->dev, "Write for reg 0x%x failed\n", reg); in tps6507x_pmic_reg_write()
210 mutex_unlock(&tps->io_lock); in tps6507x_pmic_reg_write()
217 int data, rid = rdev_get_id(dev); in tps6507x_pmic_is_enabled() local
221 return -EINVAL; in tps6507x_pmic_is_enabled()
223 shift = TPS6507X_MAX_REG_ID - rid; in tps6507x_pmic_is_enabled()
224 data = tps6507x_pmic_reg_read(tps, TPS6507X_REG_CON_CTRL1); in tps6507x_pmic_is_enabled()
226 if (data < 0) in tps6507x_pmic_is_enabled()
227 return data; in tps6507x_pmic_is_enabled()
229 return (data & 1<<shift) ? 1 : 0; in tps6507x_pmic_is_enabled()
239 return -EINVAL; in tps6507x_pmic_enable()
241 shift = TPS6507X_MAX_REG_ID - rid; in tps6507x_pmic_enable()
252 return -EINVAL; in tps6507x_pmic_disable()
254 shift = TPS6507X_MAX_REG_ID - rid; in tps6507x_pmic_disable()
262 int data, rid = rdev_get_id(dev); in tps6507x_pmic_get_voltage_sel() local
263 u8 reg, mask; in tps6507x_pmic_get_voltage_sel() local
267 reg = TPS6507X_REG_DEFDCDC1; in tps6507x_pmic_get_voltage_sel()
271 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_get_voltage_sel()
272 reg = TPS6507X_REG_DEFDCDC2_HIGH; in tps6507x_pmic_get_voltage_sel()
274 reg = TPS6507X_REG_DEFDCDC2_LOW; in tps6507x_pmic_get_voltage_sel()
278 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_get_voltage_sel()
279 reg = TPS6507X_REG_DEFDCDC3_HIGH; in tps6507x_pmic_get_voltage_sel()
281 reg = TPS6507X_REG_DEFDCDC3_LOW; in tps6507x_pmic_get_voltage_sel()
285 reg = TPS6507X_REG_LDO_CTRL1; in tps6507x_pmic_get_voltage_sel()
289 reg = TPS6507X_REG_DEFLDO2; in tps6507x_pmic_get_voltage_sel()
293 return -EINVAL; in tps6507x_pmic_get_voltage_sel()
296 data = tps6507x_pmic_reg_read(tps, reg); in tps6507x_pmic_get_voltage_sel()
297 if (data < 0) in tps6507x_pmic_get_voltage_sel()
298 return data; in tps6507x_pmic_get_voltage_sel()
300 data &= mask; in tps6507x_pmic_get_voltage_sel()
301 return data; in tps6507x_pmic_get_voltage_sel()
308 int data, rid = rdev_get_id(dev); in tps6507x_pmic_set_voltage_sel() local
309 u8 reg, mask; in tps6507x_pmic_set_voltage_sel() local
313 reg = TPS6507X_REG_DEFDCDC1; in tps6507x_pmic_set_voltage_sel()
317 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_set_voltage_sel()
318 reg = TPS6507X_REG_DEFDCDC2_HIGH; in tps6507x_pmic_set_voltage_sel()
320 reg = TPS6507X_REG_DEFDCDC2_LOW; in tps6507x_pmic_set_voltage_sel()
324 if (tps->info[rid]->defdcdc_default) in tps6507x_pmic_set_voltage_sel()
325 reg = TPS6507X_REG_DEFDCDC3_HIGH; in tps6507x_pmic_set_voltage_sel()
327 reg = TPS6507X_REG_DEFDCDC3_LOW; in tps6507x_pmic_set_voltage_sel()
331 reg = TPS6507X_REG_LDO_CTRL1; in tps6507x_pmic_set_voltage_sel()
335 reg = TPS6507X_REG_DEFLDO2; in tps6507x_pmic_set_voltage_sel()
339 return -EINVAL; in tps6507x_pmic_set_voltage_sel()
342 data = tps6507x_pmic_reg_read(tps, reg); in tps6507x_pmic_set_voltage_sel()
343 if (data < 0) in tps6507x_pmic_set_voltage_sel()
344 return data; in tps6507x_pmic_set_voltage_sel()
346 data &= ~mask; in tps6507x_pmic_set_voltage_sel()
347 data |= selector; in tps6507x_pmic_set_voltage_sel()
349 return tps6507x_pmic_reg_write(tps, reg, data); in tps6507x_pmic_set_voltage_sel()
375 struct device_node *np = pdev->dev.parent->of_node; in tps6507x_parse_dt_reg_data()
381 tps_board = devm_kzalloc(&pdev->dev, sizeof(*tps_board), in tps6507x_parse_dt_reg_data()
388 dev_err(&pdev->dev, "regulator node not found\n"); in tps6507x_parse_dt_reg_data()
395 ret = of_regulator_match(&pdev->dev, regulators, matches, count); in tps6507x_parse_dt_reg_data()
398 dev_err(&pdev->dev, "Error parsing regulator init data: %d\n", in tps6507x_parse_dt_reg_data()
405 reg_data = devm_kzalloc(&pdev->dev, (sizeof(struct regulator_init_data) in tps6507x_parse_dt_reg_data()
410 tps_board->tps6507x_pmic_init_data = reg_data; in tps6507x_parse_dt_reg_data()
426 struct tps6507x_dev *tps6507x_dev = dev_get_drvdata(pdev->dev.parent); in tps6507x_pmic_probe()
440 * coming from the board-evm file. in tps6507x_pmic_probe()
443 tps_board = dev_get_platdata(tps6507x_dev->dev); in tps6507x_pmic_probe()
445 tps6507x_dev->dev->of_node) in tps6507x_pmic_probe()
449 return -EINVAL; in tps6507x_pmic_probe()
453 * coming from the board-evm file. in tps6507x_pmic_probe()
455 init_data = tps_board->tps6507x_pmic_init_data; in tps6507x_pmic_probe()
457 return -EINVAL; in tps6507x_pmic_probe()
459 tps = devm_kzalloc(&pdev->dev, sizeof(*tps), GFP_KERNEL); in tps6507x_pmic_probe()
461 return -ENOMEM; in tps6507x_pmic_probe()
463 mutex_init(&tps->io_lock); in tps6507x_pmic_probe()
466 tps->mfd = tps6507x_dev; in tps6507x_pmic_probe()
470 tps->info[i] = info; in tps6507x_pmic_probe()
471 if (init_data->driver_data) { in tps6507x_pmic_probe()
472 struct tps6507x_reg_platform_data *data = in tps6507x_pmic_probe() local
473 init_data->driver_data; in tps6507x_pmic_probe()
474 tps->info[i]->defdcdc_default = data->defdcdc_default; in tps6507x_pmic_probe()
477 tps->desc[i].name = info->name; in tps6507x_pmic_probe()
478 tps->desc[i].id = i; in tps6507x_pmic_probe()
479 tps->desc[i].n_voltages = info->table_len; in tps6507x_pmic_probe()
480 tps->desc[i].volt_table = info->table; in tps6507x_pmic_probe()
481 tps->desc[i].ops = &tps6507x_pmic_ops; in tps6507x_pmic_probe()
482 tps->desc[i].type = REGULATOR_VOLTAGE; in tps6507x_pmic_probe()
483 tps->desc[i].owner = THIS_MODULE; in tps6507x_pmic_probe()
485 config.dev = tps6507x_dev->dev; in tps6507x_pmic_probe()
495 tps->info[i]->defdcdc_default = prop; in tps6507x_pmic_probe()
500 rdev = devm_regulator_register(&pdev->dev, &tps->desc[i], in tps6507x_pmic_probe()
503 dev_err(tps6507x_dev->dev, in tps6507x_pmic_probe()
505 pdev->name); in tps6507x_pmic_probe()
510 tps->rdev[i] = rdev; in tps6507x_pmic_probe()
513 tps6507x_dev->pmic = tps; in tps6507x_pmic_probe()
521 .name = "tps6507x-pmic",
541 MODULE_ALIAS("platform:tps6507x-pmic");