From c15e7e291072b90cc23884d25f0462bc358e8e4a Mon Sep 17 00:00:00 2001 From: Daniel Golle Date: Thu, 20 Oct 2022 20:20:41 +0100 Subject: [PATCH] mediatek: filogic: consolidate adc '32k' clock Add dependency to '32k' ADC clock so it is always enabled for thermal and raw access to ADC values. This allows to remove the patch for the ADC driver and reduce the patch adding thermal support for MT7986 to only add the new efuse layout and temperature decoding for V3. Suggested-by: AngeloGioacchino Del Regno Signed-off-by: Daniel Golle --- .../arch/arm64/boot/dts/mediatek/mt7986a.dtsi | 10 +- .../clk/mediatek/clk-mt7986-infracfg.c | 2 +- .../501-auxadc-add-auxadc-32k-clk.patch | 103 ------------------ ...mediatek-add-support-for-MT7986-and-.patch | 79 ++------------ 4 files changed, 14 insertions(+), 180 deletions(-) delete mode 100644 target/linux/mediatek/patches-5.15/501-auxadc-add-auxadc-32k-clk.patch diff --git a/target/linux/mediatek/files-5.15/arch/arm64/boot/dts/mediatek/mt7986a.dtsi b/target/linux/mediatek/files-5.15/arch/arm64/boot/dts/mediatek/mt7986a.dtsi index be82acd204..060b88f9dd 100644 --- a/target/linux/mediatek/files-5.15/arch/arm64/boot/dts/mediatek/mt7986a.dtsi +++ b/target/linux/mediatek/files-5.15/arch/arm64/boot/dts/mediatek/mt7986a.dtsi @@ -297,9 +297,8 @@ compatible = "mediatek,mt7986-auxadc", "mediatek,mt7622-auxadc"; reg = <0 0x1100d000 0 0x1000>; - clocks = <&infracfg CLK_INFRA_ADC_26M_CK>, - <&infracfg CLK_INFRA_ADC_FRC_CK>; - clock-names = "main", "32k"; + clocks = <&infracfg CLK_INFRA_ADC_26M_CK>; + clock-names = "main"; #io-channel-cells = <1>; }; @@ -349,9 +348,8 @@ reg = <0 0x1100c800 0 0x800>; interrupts = ; clocks = <&infracfg CLK_INFRA_THERM_CK>, - <&infracfg CLK_INFRA_ADC_26M_CK>, - <&infracfg CLK_INFRA_ADC_FRC_CK>; - clock-names = "therm", "auxadc", "adc_32k"; + <&infracfg CLK_INFRA_ADC_26M_CK>; + clock-names = "therm", "auxadc"; mediatek,auxadc = <&auxadc>; mediatek,apmixedsys = <&apmixedsys>; nvmem-cells = <&thermal_calibration>; diff --git a/target/linux/mediatek/files-5.15/drivers/clk/mediatek/clk-mt7986-infracfg.c b/target/linux/mediatek/files-5.15/drivers/clk/mediatek/clk-mt7986-infracfg.c index 3be168c34f..82279dfcf5 100644 --- a/target/linux/mediatek/files-5.15/drivers/clk/mediatek/clk-mt7986-infracfg.c +++ b/target/linux/mediatek/files-5.15/drivers/clk/mediatek/clk-mt7986-infracfg.c @@ -153,7 +153,7 @@ static const struct mtk_gate infra_clks[] = { 18), GATE_INFRA1(CLK_INFRA_MSDC_66M_CK, "infra_msdc_66m", "infra_sysaxi_d2", 19), - GATE_INFRA1(CLK_INFRA_ADC_26M_CK, "infra_adc_26m", "csw_f26m_sel", 20), + GATE_INFRA1(CLK_INFRA_ADC_26M_CK, "infra_adc_26m", "infra_adc_frc", 20), GATE_INFRA1(CLK_INFRA_ADC_FRC_CK, "infra_adc_frc", "csw_f26m_sel", 21), GATE_INFRA1(CLK_INFRA_FBIST2FPC_CK, "infra_fbist2fpc", "nfi1x_sel", 23), /* INFRA2 */ diff --git a/target/linux/mediatek/patches-5.15/501-auxadc-add-auxadc-32k-clk.patch b/target/linux/mediatek/patches-5.15/501-auxadc-add-auxadc-32k-clk.patch deleted file mode 100644 index 9b7d13563c..0000000000 --- a/target/linux/mediatek/patches-5.15/501-auxadc-add-auxadc-32k-clk.patch +++ /dev/null @@ -1,103 +0,0 @@ -From patchwork Wed Oct 19 14:37:35 2022 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -X-Patchwork-Submitter: Daniel Golle -X-Patchwork-Id: 13011901 -Date: Wed, 19 Oct 2022 15:37:35 +0100 -From: Daniel Golle -To: Jonathan Cameron , - Lars-Peter Clausen , - Matthias Brugger , - linux-iio@vger.kernel.org -Cc: David Bauer , - Gwendal Grignou , - AngeloGioacchino Del Regno , - linux-arm-kernel@lists.infradead.org, - linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org -Subject: [PATCH 1/2] iio: adc: mt6577_auxadc: add optional 32k clock -Message-ID: - -MIME-Version: 1.0 -Content-Disposition: inline -X-BeenThere: linux-mediatek@lists.infradead.org -X-Mailman-Version: 2.1.34 -Precedence: list -List-Id: - -MediaTek MT7986 and MT7981 require an additional clock to be brought up -for AUXADC. Add support for that in the driver, similar to how it's -done in MediaTek's SDK[1]. - -[1]: https://git01.mediatek.com/plugins/gitiles/openwrt/feeds/mtk-openwrt-feeds/+/refs/heads/master/target/linux/mediatek/patches-5.4/500-auxadc-add-auxadc-32k-clk.patch -Signed-off-by: Daniel Golle ---- - drivers/iio/adc/mt6577_auxadc.c | 22 ++++++++++++++++++++++ - 1 file changed, 22 insertions(+) - ---- a/drivers/iio/adc/mt6577_auxadc.c -+++ b/drivers/iio/adc/mt6577_auxadc.c -@@ -42,6 +42,7 @@ struct mtk_auxadc_compatible { - struct mt6577_auxadc_device { - void __iomem *reg_base; - struct clk *adc_clk; -+ struct clk *adc_32k_clk; - struct mutex lock; - const struct mtk_auxadc_compatible *dev_comp; - }; -@@ -222,6 +223,12 @@ static int __maybe_unused mt6577_auxadc_ - return ret; - } - -+ ret = clk_prepare_enable(adc_dev->adc_32k_clk); -+ if (ret) { -+ pr_err("failed to enable auxadc clock\n"); -+ return ret; -+ } -+ - mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC, - MT6577_AUXADC_PDN_EN, 0); - mdelay(MT6577_AUXADC_POWER_READY_MS); -@@ -236,6 +243,8 @@ static int __maybe_unused mt6577_auxadc_ - - mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC, - 0, MT6577_AUXADC_PDN_EN); -+ -+ clk_disable_unprepare(adc_dev->adc_32k_clk); - clk_disable_unprepare(adc_dev->adc_clk); - - return 0; -@@ -277,6 +286,17 @@ static int mt6577_auxadc_probe(struct pl - return ret; - } - -+ adc_dev->adc_32k_clk = devm_clk_get_optional(&pdev->dev, "32k"); -+ if (IS_ERR(adc_dev->adc_32k_clk)) { -+ dev_err(&pdev->dev, "failed to get auxadc 32k clock\n"); -+ return PTR_ERR(adc_dev->adc_32k_clk); -+ } -+ ret = clk_prepare_enable(adc_dev->adc_32k_clk); -+ if (ret) { -+ dev_err(&pdev->dev, "failed to enable auxadc 32k clock\n"); -+ return ret; -+ } -+ - adc_clk_rate = clk_get_rate(adc_dev->adc_clk); - if (!adc_clk_rate) { - ret = -EINVAL; -@@ -306,6 +326,7 @@ err_power_off: - mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC, - 0, MT6577_AUXADC_PDN_EN); - err_disable_clk: -+ clk_disable_unprepare(adc_dev->adc_32k_clk); - clk_disable_unprepare(adc_dev->adc_clk); - return ret; - } -@@ -320,6 +341,7 @@ static int mt6577_auxadc_remove(struct p - mt6577_auxadc_mod_reg(adc_dev->reg_base + MT6577_AUXADC_MISC, - 0, MT6577_AUXADC_PDN_EN); - -+ clk_disable_unprepare(adc_dev->adc_32k_clk); - clk_disable_unprepare(adc_dev->adc_clk); - - return 0; diff --git a/target/linux/mediatek/patches-5.15/805-thermal-drivers-mediatek-add-support-for-MT7986-and-.patch b/target/linux/mediatek/patches-5.15/805-thermal-drivers-mediatek-add-support-for-MT7986-and-.patch index ff2b71872c..ed72f78009 100644 --- a/target/linux/mediatek/patches-5.15/805-thermal-drivers-mediatek-add-support-for-MT7986-and-.patch +++ b/target/linux/mediatek/patches-5.15/805-thermal-drivers-mediatek-add-support-for-MT7986-and-.patch @@ -70,15 +70,7 @@ Signed-off-by: Daniel Golle struct mtk_thermal; struct thermal_bank_cfg { -@@ -279,6 +316,7 @@ struct mtk_thermal { - - struct clk *clk_peri_therm; - struct clk *clk_auxadc; -+ struct clk *clk_adc_32k; - /* lock: for getting and putting banks */ - struct mutex lock; - -@@ -386,6 +424,14 @@ static const int mt7622_mux_values[MT762 +@@ -386,6 +423,14 @@ static const int mt7622_mux_values[MT762 static const int mt7622_vts_index[MT7622_NUM_SENSORS] = { VTS1 }; static const int mt7622_tc_offset[MT7622_NUM_CONTROLLER] = { 0x0, }; @@ -93,7 +85,7 @@ Signed-off-by: Daniel Golle /* * The MT8173 thermal controller has four banks. Each bank can read up to * four temperature sensors simultaneously. The MT8173 has a total of 5 -@@ -549,6 +595,30 @@ static const struct mtk_thermal_data mt8 +@@ -549,6 +594,30 @@ static const struct mtk_thermal_data mt8 .version = MTK_THERMAL_V1, }; @@ -124,7 +116,7 @@ Signed-off-by: Daniel Golle /** * raw_to_mcelsius - convert a raw ADC value to mcelsius * @mt: The thermal controller -@@ -603,6 +673,22 @@ static int raw_to_mcelsius_v2(struct mtk +@@ -603,6 +672,22 @@ static int raw_to_mcelsius_v2(struct mtk return (format_2 - tmp) * 100; } @@ -147,7 +139,7 @@ Signed-off-by: Daniel Golle /** * mtk_thermal_get_bank - get bank * @bank: The bank -@@ -659,9 +745,12 @@ static int mtk_thermal_bank_temperature( +@@ -659,9 +744,12 @@ static int mtk_thermal_bank_temperature( if (mt->conf->version == MTK_THERMAL_V1) { temp = raw_to_mcelsius_v1( mt, conf->bank_data[bank->id].sensors[i], raw); @@ -161,7 +153,7 @@ Signed-off-by: Daniel Golle } /* -@@ -887,6 +976,26 @@ static int mtk_thermal_extract_efuse_v2( +@@ -887,6 +975,26 @@ static int mtk_thermal_extract_efuse_v2( return 0; } @@ -188,7 +180,7 @@ Signed-off-by: Daniel Golle static int mtk_thermal_get_calibration_data(struct device *dev, struct mtk_thermal *mt) { -@@ -897,6 +1006,7 @@ static int mtk_thermal_get_calibration_d +@@ -897,6 +1005,7 @@ static int mtk_thermal_get_calibration_d /* Start with default values */ mt->adc_ge = 512; @@ -196,7 +188,7 @@ Signed-off-by: Daniel Golle for (i = 0; i < mt->conf->num_sensors; i++) mt->vts[i] = 260; mt->degc_cali = 40; -@@ -924,8 +1034,10 @@ static int mtk_thermal_get_calibration_d +@@ -924,8 +1033,10 @@ static int mtk_thermal_get_calibration_d if (mt->conf->version == MTK_THERMAL_V1) ret = mtk_thermal_extract_efuse_v1(mt, buf); @@ -208,7 +200,7 @@ Signed-off-by: Daniel Golle if (ret) { dev_info(dev, "Device not calibrated, using default calibration values\n"); -@@ -956,6 +1068,10 @@ static const struct of_device_id mtk_the +@@ -956,6 +1067,10 @@ static const struct of_device_id mtk_the .data = (void *)&mt7622_thermal_data, }, { @@ -219,40 +211,7 @@ Signed-off-by: Daniel Golle .compatible = "mediatek,mt8183-thermal", .data = (void *)&mt8183_thermal_data, }, { -@@ -1009,6 +1125,12 @@ static int mtk_thermal_probe(struct plat - if (IS_ERR(mt->clk_auxadc)) - return PTR_ERR(mt->clk_auxadc); - -+ if (mt->conf->version == MTK_THERMAL_V3) { -+ mt->clk_adc_32k = devm_clk_get(&pdev->dev, "adc_32k"); -+ if (IS_ERR(mt->clk_adc_32k)) -+ return PTR_ERR(mt->clk_adc_32k); -+ } -+ - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - mt->thermal_base = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(mt->thermal_base)) -@@ -1058,10 +1180,18 @@ static int mtk_thermal_probe(struct plat - if (ret) - return ret; - -+ if (mt->conf->version == MTK_THERMAL_V3) { -+ ret = clk_prepare_enable(mt->clk_adc_32k); -+ if (ret) { -+ dev_err(&pdev->dev, "Can't enable auxadc 32k clk: %d\n", ret); -+ return ret; -+ } -+ } -+ - ret = clk_prepare_enable(mt->clk_auxadc); - if (ret) { - dev_err(&pdev->dev, "Can't enable auxadc clk: %d\n", ret); -- return ret; -+ goto err_disable_clk_adc_32k; - } - - ret = clk_prepare_enable(mt->clk_peri_therm); -@@ -1070,7 +1200,8 @@ static int mtk_thermal_probe(struct plat +@@ -1070,7 +1185,8 @@ static int mtk_thermal_probe(struct plat goto err_disable_clk_auxadc; } @@ -262,23 +221,3 @@ Signed-off-by: Daniel Golle mtk_thermal_turn_on_buffer(apmixed_base); mtk_thermal_release_periodic_ts(mt, auxadc_base); } -@@ -1099,6 +1230,9 @@ err_disable_clk_peri_therm: - clk_disable_unprepare(mt->clk_peri_therm); - err_disable_clk_auxadc: - clk_disable_unprepare(mt->clk_auxadc); -+err_disable_clk_adc_32k: -+ if (mt->conf->version == MTK_THERMAL_V3) -+ clk_disable_unprepare(mt->clk_adc_32k); - - return ret; - } -@@ -1110,6 +1244,9 @@ static int mtk_thermal_remove(struct pla - clk_disable_unprepare(mt->clk_peri_therm); - clk_disable_unprepare(mt->clk_auxadc); - -+ if (mt->conf->version == MTK_THERMAL_V3) -+ clk_disable_unprepare(mt->clk_adc_32k); -+ - return 0; - } - -- 2.30.2