[sprd]-iio接口读取adc值

FAQ106065

通过原理图我们可以获取任意一个adc对应的通道号,sc2721的adc驱动将每个物理通道分解为两个逻辑通道,一个是大量程一个是小量程。

例如我们需要使用adc通4的大量程那么我们就要选择adc逻辑通道9

我们需要在dts中配置通道数

io-channels = <&pmic_adc 9>;     //通道逻辑编号
io-channel-names = "adc_temp";    //通道名称,以便于驱动获取

以上配置之后我们便可以通道adc电压读取接口读取到adc_temp电压了。

Demo:
dts配置

io-channels = <&pmic_adc 9>;     //通道逻辑编号
io-channel-names = "adc_temp";    //通道名称,以便于驱动获取

内核获取:

1.从dts中获取该adc通道
	pdata->channel_adc = iio_channel_get(dev, "adc_templ");
	if (IS_ERR(pdata->channel_adc)) {
		dev_err(dev, "get iio channel adc fail\n");
		goto fail;
	}

读取电压值:
	err = iio_read_channel_processed(pdata->channel_temp, &val);

展讯的各个adc通道

static const struct iio_chan_spec sprd_sc2721_iio_channels[] = {
	SPRD_ADC_CHANNEL(0, 0, IIO_VOLTAGE, "ADCI0"),
	SPRD_ADC_CHANNEL(1, 0, IIO_VOLTAGE, "ADCI0"),
	SPRD_ADC_CHANNEL(2, 1, IIO_VOLTAGE, "ADCI1"),
	SPRD_ADC_CHANNEL(3, 1, IIO_VOLTAGE, "ADCI1"),
	SPRD_ADC_CHANNEL(4, 2, IIO_VOLTAGE, "ADCI2"),
	SPRD_ADC_CHANNEL(5, 2, IIO_VOLTAGE, "ADCI2"),
	SPRD_ADC_CHANNEL(6, 3, IIO_VOLTAGE, "ADCI3"),
	SPRD_ADC_CHANNEL(7, 3, IIO_VOLTAGE, "ADCI3"),
	SPRD_ADC_CHANNEL(8, 4, IIO_VOLTAGE, "ADCI4"),
	SPRD_ADC_CHANNEL(9, 4, IIO_VOLTAGE, "ADCI4"),
	SPRD_ADC_CHANNEL(10, 5, IIO_VOLTAGE, "VBATSENSE"),
	SPRD_ADC_CHANNEL(11, 5, IIO_VOLTAGE, "VBATSENSE"),
	SPRD_ADC_CHANNEL(12, 6, IIO_VOLTAGE, "FLOATING_6"),
	SPRD_ADC_CHANNEL(13, 6, IIO_VOLTAGE, "FLOATING_6"),
	SPRD_ADC_CHANNEL(14, 7, IIO_VOLTAGE, "TYPEC_CC1"),
	SPRD_ADC_CHANNEL(15, 7, IIO_VOLTAGE, "TYPEC_CC1"),
	SPRD_ADC_CHANNEL(16, 8, IIO_VOLTAGE, "THM"),
	SPRD_ADC_CHANNEL(17, 8, IIO_VOLTAGE, "THM"),
	SPRD_ADC_CHANNEL(18, 9, IIO_VOLTAGE, "TYPEC_CC2"),
	SPRD_ADC_CHANNEL(19, 9, IIO_VOLTAGE, "TYPEC_CC2"),
	SPRD_ADC_CHANNEL(20, 10, IIO_VOLTAGE, "FLOATING_10"),
	SPRD_ADC_CHANNEL(21, 10, IIO_VOLTAGE, "FLOATING_10"),
	SPRD_ADC_CHANNEL(22, 11, IIO_VOLTAGE, "FLOATING_11"),
	SPRD_ADC_CHANNEL(23, 11, IIO_VOLTAGE, "FLOATING_11"),
	SPRD_ADC_CHANNEL(24, 12, IIO_VOLTAGE, "FLOATING_12"),
	SPRD_ADC_CHANNEL(25, 12, IIO_VOLTAGE, "FLOATING_12"),
	SPRD_ADC_CHANNEL(26, 13, IIO_VOLTAGE, "DCDCOUT_CPU"),
	SPRD_ADC_CHANNEL(27, 13, IIO_VOLTAGE, "DCDCOUT_CPU"),
	SPRD_ADC_CHANNEL(28, 13, IIO_VOLTAGE, "DCDCOUT_MEM"),
	SPRD_ADC_CHANNEL(29, 13, IIO_VOLTAGE, "DCDCOUT_MEM"),
	SPRD_ADC_CHANNEL(30, 13, IIO_VOLTAGE, "DCDCOUT_GEN"),
	SPRD_ADC_CHANNEL(31, 13, IIO_VOLTAGE, "DCDCOUT_GEN"),
	SPRD_ADC_CHANNEL(32, 13, IIO_VOLTAGE, "DCDCOUT_CORE"),
	SPRD_ADC_CHANNEL(33, 13, IIO_VOLTAGE, "DCDCOUT_CORE"),
	SPRD_ADC_CHANNEL(34, 13, IIO_VOLTAGE, "DCDCOUT_WPA"),
	SPRD_ADC_CHANNEL(35, 13, IIO_VOLTAGE, "DCDCOUT_WPA"),
	SPRD_ADC_CHANNEL(36, 14, IIO_VOLTAGE, "VCHGSEN"),
	SPRD_ADC_CHANNEL(37, 14, IIO_VOLTAGE, "VCHGSEN"),
	SPRD_ADC_CHANNEL(38, 15, IIO_VOLTAGE, "VCHG_BG"),
	SPRD_ADC_CHANNEL(39, 15, IIO_VOLTAGE, "VCHG_BG"),
	SPRD_ADC_CHANNEL(40, 16, IIO_VOLTAGE, "PROG2ADC"),
	SPRD_ADC_CHANNEL(41, 16, IIO_VOLTAGE, "PROG2ADC"),
	SPRD_ADC_CHANNEL(42, 17, IIO_VOLTAGE, "FLOATTING_17"),
	SPRD_ADC_CHANNEL(43, 17, IIO_VOLTAGE, "FLOATTING_17"),
	SPRD_ADC_CHANNEL(44, 18, IIO_VOLTAGE, "FLOATTING_18"),
	SPRD_ADC_CHANNEL(45, 18, IIO_VOLTAGE, "FLOATTING_18"),
	SPRD_ADC_CHANNEL(46, 19, IIO_VOLTAGE, "SDAVDD"),
	SPRD_ADC_CHANNEL(47, 19, IIO_VOLTAGE, "SDAVDD"),
	SPRD_ADC_CHANNEL(48, 20, IIO_VOLTAGE, "HEADMIC_IN_DET"),
	SPRD_ADC_CHANNEL(49, 20, IIO_VOLTAGE, "HEADMIC_IN_DET"),
	SPRD_ADC_CHANNEL(50, 20, IIO_CURRENT, "HEADMIC_HEADSET_L_INT"),
	SPRD_ADC_CHANNEL(51, 20, IIO_VOLTAGE, "HEADMIC_HEADSET_L_INT"),
	SPRD_ADC_CHANNEL(52, 20, IIO_VOLTAGE, "HEADMIC_VDDVB"),
	SPRD_ADC_CHANNEL(53, 20, IIO_VOLTAGE, "HEADMIC_VDDVB"),
	SPRD_ADC_CHANNEL(54, 20, IIO_VOLTAGE, "HEADMIC_VDDPA"),
	SPRD_ADC_CHANNEL(55, 20, IIO_VOLTAGE, "HEADMIC_VDDPA"),
	SPRD_ADC_CHANNEL(56, 20, IIO_VOLTAGE, "HEADMIC_MICBIAS"),
	SPRD_ADC_CHANNEL(57, 20, IIO_VOLTAGE, "HEADMIC_MICBIAS"),
	SPRD_ADC_CHANNEL(58, 20, IIO_VOLTAGE, "HEADMIC_HEADMICBIAS"),
	SPRD_ADC_CHANNEL(59, 20, IIO_VOLTAGE, "HEADMIC_HEADMICBIAS"),
	SPRD_ADC_CHANNEL(60, 21, IIO_VOLTAGE, "LDO_CALOUT0"),
	SPRD_ADC_CHANNEL(61, 21, IIO_VOLTAGE, "LDO_CALOUT0"),
	SPRD_ADC_CHANNEL(62, 22, IIO_VOLTAGE, "LDO_CALOUT1"),
	SPRD_ADC_CHANNEL(63, 22, IIO_VOLTAGE, "LDO_CALOUT1"),
	SPRD_ADC_CHANNEL(64, 23, IIO_VOLTAGE, "LDO_CALOUT2"),
	SPRD_ADC_CHANNEL(65, 23, IIO_VOLTAGE, "LDO_CALOUT2"),
	SPRD_ADC_CHANNEL(66, 24, IIO_VOLTAGE, "FLOATTING_24"),
	SPRD_ADC_CHANNEL(67, 24, IIO_VOLTAGE, "FLOATTING_24"),
	SPRD_ADC_CHANNEL(68, 25, IIO_VOLTAGE, "FLOATTING_25"),
	SPRD_ADC_CHANNEL(69, 25, IIO_VOLTAGE, "FLOATTING_25"),
	SPRD_ADC_CHANNEL(70, 26, IIO_VOLTAGE, "FLOATTING_26"),
	SPRD_ADC_CHANNEL(71, 26, IIO_VOLTAGE, "FLOATTING_26"),
	SPRD_ADC_CHANNEL(72, 27, IIO_VOLTAGE, "FLOATTING_27"),
	SPRD_ADC_CHANNEL(73, 27, IIO_VOLTAGE, "FLOATTING_27"),
	SPRD_ADC_CHANNEL(74, 28, IIO_CURRENT, "FLOATTING_28"),
	SPRD_ADC_CHANNEL(75, 28, IIO_VOLTAGE, "FLOATTING_28"),
	SPRD_ADC_CHANNEL(76, 29, IIO_VOLTAGE, "FLOATTING_29"),
	SPRD_ADC_CHANNEL(77, 29, IIO_VOLTAGE, "FLOATTING_29"),
	SPRD_ADC_CHANNEL(78, 30, IIO_VOLTAGE, "DP"),
	SPRD_ADC_CHANNEL(79, 30, IIO_VOLTAGE, "DP"),
	SPRD_ADC_CHANNEL(80, 31, IIO_VOLTAGE, "DM"),
	SPRD_ADC_CHANNEL(81, 31, IIO_VOLTAGE, "DM"),

猜你喜欢

转载自blog.csdn.net/qq_16919359/article/details/107078518
ADC