Lines Matching +full:axp209 +full:- +full:battery +full:- +full:power +full:- +full:supply

1 // SPDX-License-Identifier: GPL-2.0-only
5 * Quentin Schulz <quentin.schulz@free-electrons.com>
109 .consumer_dev_name = "axp20x-usb-power-supply",
113 .consumer_dev_name = "axp20x-usb-power-supply",
117 .consumer_dev_name = "axp20x-ac-power-supply",
121 .consumer_dev_name = "axp20x-ac-power-supply",
125 .consumer_dev_name = "axp20x-battery-power-supply",
129 .consumer_dev_name = "axp20x-battery-power-supply",
133 .consumer_dev_name = "axp20x-battery-power-supply",
141 .consumer_dev_name = "axp20x-battery-power-supply",
145 .consumer_dev_name = "axp20x-battery-power-supply",
149 .consumer_dev_name = "axp20x-battery-power-supply",
158 * The only exception is for the battery. batt_v will be in_voltage6_raw and
245 if (chan->type == IIO_CURRENT && chan->channel == AXP20X_BATT_DISCHRG_I) in axp20x_adc_raw()
250 ret = axp20x_read_variable_width(info->regmap, chan->address, size); in axp20x_adc_raw()
264 ret = axp20x_read_variable_width(info->regmap, chan->address, 12); in axp22x_adc_raw()
278 ret = axp20x_read_variable_width(info->regmap, chan->address, 12); in axp813_adc_raw()
318 return -EINVAL; in axp20x_adc_scale_voltage()
338 return -EINVAL; in axp22x_adc_scale_voltage()
361 return -EINVAL; in axp813_adc_scale_voltage()
385 return -EINVAL; in axp20x_adc_scale_current()
392 switch (chan->type) { in axp20x_adc_scale()
394 return axp20x_adc_scale_voltage(chan->channel, val, val2); in axp20x_adc_scale()
397 return axp20x_adc_scale_current(chan->channel, val, val2); in axp20x_adc_scale()
404 return -EINVAL; in axp20x_adc_scale()
411 switch (chan->type) { in axp22x_adc_scale()
413 return axp22x_adc_scale_voltage(chan->channel, val, val2); in axp22x_adc_scale()
424 return -EINVAL; in axp22x_adc_scale()
431 switch (chan->type) { in axp813_adc_scale()
433 return axp813_adc_scale_voltage(chan->channel, val, val2); in axp813_adc_scale()
444 return -EINVAL; in axp813_adc_scale()
455 ret = regmap_read(info->regmap, AXP20X_GPIO10_IN_RANGE, &regval); in axp20x_adc_offset_voltage()
469 return -EINVAL; in axp20x_adc_offset_voltage()
479 switch (chan->type) { in axp20x_adc_offset()
481 return axp20x_adc_offset_voltage(indio_dev, chan->channel, val); in axp20x_adc_offset()
484 *val = -1447; in axp20x_adc_offset()
488 return -EINVAL; in axp20x_adc_offset()
507 return -EINVAL; in axp20x_read_raw()
518 *val = -2677; in axp22x_read_raw()
528 return -EINVAL; in axp22x_read_raw()
538 *val = -2667; in axp813_read_raw()
548 return -EINVAL; in axp813_read_raw()
564 return -EINVAL; in axp20x_write_raw()
567 return -EINVAL; in axp20x_write_raw()
569 switch (chan->channel) { in axp20x_write_raw()
581 return -EINVAL; in axp20x_write_raw()
584 return regmap_update_bits(info->regmap, AXP20X_GPIO10_IN_RANGE, regmask, regval); in axp20x_write_raw()
602 return regmap_update_bits(info->regmap, AXP20X_ADC_RATE, in axp20x_adc_rate()
609 return regmap_update_bits(info->regmap, AXP20X_ADC_RATE, in axp22x_adc_rate()
616 return regmap_update_bits(info->regmap, AXP813_ADC_RATE, in axp813_adc_rate()
661 { .compatible = "x-powers,axp209-adc", .data = (void *)&axp20x_data, },
662 { .compatible = "x-powers,axp221-adc", .data = (void *)&axp22x_data, },
663 { .compatible = "x-powers,axp813-adc", .data = (void *)&axp813_data, },
669 { .name = "axp20x-adc", .driver_data = (kernel_ulong_t)&axp20x_data, },
670 { .name = "axp22x-adc", .driver_data = (kernel_ulong_t)&axp22x_data, },
671 { .name = "axp813-adc", .driver_data = (kernel_ulong_t)&axp813_data, },
683 axp20x_dev = dev_get_drvdata(pdev->dev.parent); in axp20x_probe()
685 indio_dev = devm_iio_device_alloc(&pdev->dev, sizeof(*info)); in axp20x_probe()
687 return -ENOMEM; in axp20x_probe()
692 info->regmap = axp20x_dev->regmap; in axp20x_probe()
693 indio_dev->modes = INDIO_DIRECT_MODE; in axp20x_probe()
695 if (!dev_fwnode(&pdev->dev)) { in axp20x_probe()
699 info->data = (const struct axp_data *)id->driver_data; in axp20x_probe()
701 struct device *dev = &pdev->dev; in axp20x_probe()
703 info->data = device_get_match_data(dev); in axp20x_probe()
706 indio_dev->name = platform_get_device_id(pdev)->name; in axp20x_probe()
707 indio_dev->info = info->data->iio_info; in axp20x_probe()
708 indio_dev->num_channels = info->data->num_channels; in axp20x_probe()
709 indio_dev->channels = info->data->channels; in axp20x_probe()
712 regmap_write(info->regmap, AXP20X_ADC_EN1, info->data->adc_en1_mask); in axp20x_probe()
714 if (info->data->adc_en2_mask) in axp20x_probe()
715 regmap_update_bits(info->regmap, AXP20X_ADC_EN2, in axp20x_probe()
716 info->data->adc_en2_mask, in axp20x_probe()
717 info->data->adc_en2_mask); in axp20x_probe()
720 info->data->adc_rate(info, 100); in axp20x_probe()
722 ret = iio_map_array_register(indio_dev, info->data->maps); in axp20x_probe()
724 dev_err(&pdev->dev, "failed to register IIO maps: %d\n", ret); in axp20x_probe()
730 dev_err(&pdev->dev, "could not register the device\n"); in axp20x_probe()
740 regmap_write(info->regmap, AXP20X_ADC_EN1, 0); in axp20x_probe()
742 if (info->data->adc_en2_mask) in axp20x_probe()
743 regmap_write(info->regmap, AXP20X_ADC_EN2, 0); in axp20x_probe()
756 regmap_write(info->regmap, AXP20X_ADC_EN1, 0); in axp20x_remove()
758 if (info->data->adc_en2_mask) in axp20x_remove()
759 regmap_write(info->regmap, AXP20X_ADC_EN2, 0); in axp20x_remove()
766 .name = "axp20x-adc",
777 MODULE_AUTHOR("Quentin Schulz <quentin.schulz@free-electrons.com>");