Commit a77fc111 authored by Linus Walleij's avatar Linus Walleij Committed by Jonathan Cameron
Browse files

mfd: Switch the AB8500 GPADC to IIO



The AB8500 GPADC driver is indeed a "general purpose ADC" driver,
and while the IIO subsystem did not exist when the driver was
first merged, it is never too late to clean things up and move it
to the right place.

Nowadays IIO provides the right abstractions and interfaces to
do generic ADC work in the kernel.

We have to cut a bunch of debugfs luggage to make this transition
swift, but all these files to is read out the raw values of the
ADC and the IIO subsystem already has a standard sysfs ABI for
doing exactly this: no debugfs is needed.

Acked-by: default avatarLee Jones <lee.jones@linaro.org>
Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 07063bbf
Loading
Loading
Loading
Loading
+0 −7
Original line number Diff line number Diff line
@@ -1210,13 +1210,6 @@ config AB8500_DEBUG
	  Select this option if you want debug information using the debug
	  filesystem, debugfs.

config AB8500_GPADC
	bool "ST-Ericsson AB8500 GPADC driver"
	depends on AB8500_CORE && REGULATOR_AB8500
	default y
	help
	  AB8500 GPADC driver used to convert Acc and battery/ac/usb voltage

config MFD_DB8500_PRCMU
	bool "ST-Ericsson DB8500 Power Reset Control Management Unit"
	depends on UX500_SOC_DB8500
+0 −1
Original line number Diff line number Diff line
@@ -177,7 +177,6 @@ obj-$(CONFIG_ABX500_CORE) += abx500-core.o
obj-$(CONFIG_AB3100_CORE)	+= ab3100-core.o
obj-$(CONFIG_AB3100_OTP)	+= ab3100-otp.o
obj-$(CONFIG_AB8500_DEBUG)	+= ab8500-debugfs.o
obj-$(CONFIG_AB8500_GPADC)	+= ab8500-gpadc.o
obj-$(CONFIG_MFD_DB8500_PRCMU)	+= db8500-prcmu.o
# ab8500-core need to come after db8500-prcmu (which provides the channel)
obj-$(CONFIG_AB8500_CORE)	+= ab8500-core.o ab8500-sysctrl.o
+0 −715

File changed.

Preview size limit exceeded, changes collapsed.

drivers/mfd/ab8500-gpadc.c

deleted100644 → 0
+0 −1075

File deleted.

Preview size limit exceeded, changes collapsed.

+0 −75
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (C) 2010 ST-Ericsson SA
 *
 * Author: Arun R Murthy <arun.murthy@stericsson.com>
 * Author: Daniel Willerud <daniel.willerud@stericsson.com>
 * Author: M'boumba Cedric Madianga <cedric.madianga@stericsson.com>
 */

#ifndef	_AB8500_GPADC_H
#define _AB8500_GPADC_H

/* GPADC source: From datasheet(ADCSwSel[4:0] in GPADCCtrl2
 * and ADCHwSel[4:0] in GPADCCtrl3 ) */
#define BAT_CTRL		0x01
#define BTEMP_BALL		0x02
#define MAIN_CHARGER_V		0x03
#define ACC_DETECT1		0x04
#define ACC_DETECT2		0x05
#define ADC_AUX1		0x06
#define ADC_AUX2		0x07
#define MAIN_BAT_V		0x08
#define VBUS_V			0x09
#define MAIN_CHARGER_C		0x0A
#define USB_CHARGER_C		0x0B
#define BK_BAT_V		0x0C
#define DIE_TEMP		0x0D
#define USB_ID			0x0E
#define XTAL_TEMP		0x12
#define VBAT_TRUE_MEAS		0x13
#define BAT_CTRL_AND_IBAT	0x1C
#define VBAT_MEAS_AND_IBAT	0x1D
#define VBAT_TRUE_MEAS_AND_IBAT	0x1E
#define BAT_TEMP_AND_IBAT	0x1F

/* Virtual channel used only for ibat convertion to ampere
 * Battery current conversion (ibat) cannot be requested as a single conversion
 *  but it is always in combination with other input requests
 */
#define IBAT_VIRTUAL_CHANNEL		0xFF

#define SAMPLE_1        1
#define SAMPLE_4        4
#define SAMPLE_8        8
#define SAMPLE_16       16
#define RISING_EDGE     0
#define FALLING_EDGE    1

/* Arbitrary ADC conversion type constants */
#define ADC_SW				0
#define ADC_HW				1

struct ab8500_gpadc;

struct ab8500_gpadc *ab8500_gpadc_get(char *name);
int ab8500_gpadc_sw_hw_convert(struct ab8500_gpadc *gpadc, u8 channel,
		u8 avg_sample, u8 trig_edge, u8 trig_timer, u8 conv_type);
static inline int ab8500_gpadc_convert(struct ab8500_gpadc *gpadc, u8 channel)
{
	return ab8500_gpadc_sw_hw_convert(gpadc, channel,
			SAMPLE_16, 0, 0, ADC_SW);
}

int ab8500_gpadc_read_raw(struct ab8500_gpadc *gpadc, u8 channel,
		u8 avg_sample, u8 trig_edge, u8 trig_timer, u8 conv_type);
int ab8500_gpadc_double_read_raw(struct ab8500_gpadc *gpadc, u8 channel,
		u8 avg_sample, u8 trig_edge, u8 trig_timer, u8 conv_type,
		int *ibat);
int ab8500_gpadc_ad_to_voltage(struct ab8500_gpadc *gpadc,
		u8 channel, int ad_value);
void ab8540_gpadc_get_otp(struct ab8500_gpadc *gpadc,
			u16 *vmain_l, u16 *vmain_h, u16 *btemp_l, u16 *btemp_h,
			u16 *vbat_l, u16 *vbat_h, u16 *ibat_l, u16 *ibat_h);

#endif /* _AB8500_GPADC_H */