Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iio: adc: mt6359: Add support for MediaTek MT6373 PMIC AUXADC

MediaTek MT6373 is a PMIC found on MT8196/MT6991 board designs
and communicates with the SoC over SPMI.

This PMIC integrates an Auxiliary ADC (AUXADC) which has a grand
total of 54 channels, of which usually only 9 are used as this
is usually paired with MT6363 on the same board.

For the Auxiliary ADC part, this reuses the same register layout
as the MT6363 PMIC, but exposes only a subset of the ADC chans.

Reviewed-by: Nícolas F. R. A. Prado <nfraprado@collabora.com>
Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Link: https://patch.msgid.link/20250703141146.171431-7-angelogioacchino.delregno@collabora.com
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>

authored by

AngeloGioacchino Del Regno and committed by
Jonathan Cameron
1a4deda6 d6f49313

+50
+50
drivers/iio/adc/mt6359-auxadc.c
··· 50 50 #define MT6363_EXT_CHAN_MASK GENMASK(2, 0) 51 51 #define MT6363_EXT_PURES_MASK GENMASK(4, 3) 52 52 #define MT6363_PULLUP_RES_100K 0 53 + #define MT6363_PULLUP_RES_30K 1 53 54 #define MT6363_PULLUP_RES_OPEN 3 54 55 55 56 enum mtk_pmic_auxadc_regs { ··· 413 412 [PMIC_AUXADC_IMP1] = 0x1209, 414 413 }; 415 414 415 + static const struct iio_chan_spec mt6373_auxadc_channels[] = { 416 + MTK_PMIC_IIO_CHAN(MT6363, chip_temp, CHIP_TEMP, 4, 12, IIO_TEMP), 417 + MTK_PMIC_IIO_CHAN(MT6363, vcore_temp, VCORE_TEMP, 38, 12, IIO_TEMP), 418 + MTK_PMIC_IIO_CHAN(MT6363, vproc_temp, VPROC_TEMP, 39, 12, IIO_TEMP), 419 + MTK_PMIC_IIO_CHAN(MT6363, vgpu_temp, VGPU_TEMP, 40, 12, IIO_TEMP), 420 + 421 + /* For VIN, ADC12 holds the result depending on which GPIO was activated */ 422 + MTK_PMIC_IIO_CHAN(MT6363, in1_v, VIN1, 45, 15, IIO_VOLTAGE), 423 + MTK_PMIC_IIO_CHAN(MT6363, in2_v, VIN2, 45, 15, IIO_VOLTAGE), 424 + MTK_PMIC_IIO_CHAN(MT6363, in3_v, VIN3, 45, 15, IIO_VOLTAGE), 425 + MTK_PMIC_IIO_CHAN(MT6363, in4_v, VIN4, 45, 15, IIO_VOLTAGE), 426 + MTK_PMIC_IIO_CHAN(MT6363, in5_v, VIN5, 45, 15, IIO_VOLTAGE), 427 + }; 428 + 429 + static const struct mtk_pmic_auxadc_chan mt6373_auxadc_ch_desc[] = { 430 + MTK_PMIC_ADC_CHAN(CHIP_TEMP, PMIC_AUXADC_RQST0, 4, PMIC_AUXADC_ADC0, 15, 32, 1, 1), 431 + MTK_PMIC_ADC_CHAN(VCORE_TEMP, PMIC_AUXADC_RQST3, 0, PMIC_AUXADC_ADC0, 15, 32, 1, 1), 432 + MTK_PMIC_ADC_CHAN(VPROC_TEMP, PMIC_AUXADC_RQST3, 1, PMIC_AUXADC_ADC0, 15, 32, 1, 1), 433 + MTK_PMIC_ADC_CHAN(VGPU_TEMP, PMIC_AUXADC_RQST3, 2, PMIC_AUXADC_ADC0, 15, 32, 1, 1), 434 + 435 + MTK_PMIC_ADC_EXT_CHAN(VIN1, 436 + PMIC_AUXADC_RQST1, 4, PMIC_AUXADC_ADC0, 15, 437 + PMIC_AUXADC_SDMADC_CON0, 1, MT6363_PULLUP_RES_30K, 32, 1, 1), 438 + MTK_PMIC_ADC_EXT_CHAN(VIN2, 439 + PMIC_AUXADC_RQST1, 4, PMIC_AUXADC_ADC0, 15, 440 + PMIC_AUXADC_SDMADC_CON0, 2, MT6363_PULLUP_RES_OPEN, 32, 1, 1), 441 + MTK_PMIC_ADC_EXT_CHAN(VIN3, 442 + PMIC_AUXADC_RQST1, 4, PMIC_AUXADC_ADC0, 15, 443 + PMIC_AUXADC_SDMADC_CON0, 3, MT6363_PULLUP_RES_OPEN, 32, 1, 1), 444 + MTK_PMIC_ADC_EXT_CHAN(VIN4, 445 + PMIC_AUXADC_RQST1, 4, PMIC_AUXADC_ADC0, 15, 446 + PMIC_AUXADC_SDMADC_CON0, 4, MT6363_PULLUP_RES_OPEN, 32, 1, 1), 447 + MTK_PMIC_ADC_EXT_CHAN(VIN5, 448 + PMIC_AUXADC_RQST1, 4, PMIC_AUXADC_ADC0, 15, 449 + PMIC_AUXADC_SDMADC_CON0, 5, MT6363_PULLUP_RES_OPEN, 32, 1, 1), 450 + }; 451 + 416 452 static void mt6358_stop_imp_conv(struct mt6359_auxadc *adc_dev) 417 453 { 418 454 const struct mtk_pmic_auxadc_info *cinfo = adc_dev->chip_info; ··· 586 548 .channels = mt6363_auxadc_channels, 587 549 .num_channels = ARRAY_SIZE(mt6363_auxadc_channels), 588 550 .desc = mt6363_auxadc_ch_desc, 551 + .regs = mt6363_auxadc_regs, 552 + .is_spmi = true, 553 + .no_reset = true, 554 + .vref_mV = 1840, 555 + }; 556 + 557 + static const struct mtk_pmic_auxadc_info mt6373_chip_info = { 558 + .model_name = "MT6373", 559 + .channels = mt6373_auxadc_channels, 560 + .num_channels = ARRAY_SIZE(mt6373_auxadc_channels), 561 + .desc = mt6373_auxadc_ch_desc, 589 562 .regs = mt6363_auxadc_regs, 590 563 .is_spmi = true, 591 564 .no_reset = true, ··· 889 840 { .compatible = "mediatek,mt6358-auxadc", .data = &mt6358_chip_info }, 890 841 { .compatible = "mediatek,mt6359-auxadc", .data = &mt6359_chip_info }, 891 842 { .compatible = "mediatek,mt6363-auxadc", .data = &mt6363_chip_info }, 843 + { .compatible = "mediatek,mt6373-auxadc", .data = &mt6373_chip_info }, 892 844 { } 893 845 }; 894 846 MODULE_DEVICE_TABLE(of, mt6359_auxadc_of_match);