FAILED: patch "[PATCH] iio: adc: meson: fix core clock enable/disable moment" failed to apply to 5.15-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-5.15.y
git checkout FETCH_HEAD
git cherry-pick -x 09738ccbc4148c62d6c8c4644ff4a099d57f49ad
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2023081255-cinch-backside-03c0@gregkh' --subject-prefix 'PATCH 5.15.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 09738ccbc4148c62d6c8c4644ff4a099d57f49ad Mon Sep 17 00:00:00 2001
From: George Stark <[email protected]>
Date: Fri, 21 Jul 2023 13:23:08 +0300
Subject: [PATCH] iio: adc: meson: fix core clock enable/disable moment
Enable core clock at probe stage and disable it at remove stage. Core clock is responsible for turning on/off the entire SoC module so it should be on before the first module register is touched and be off at very last moment.
drivers/iio/adc/meson_saradc.c +12 -11
@@ -916,12 +916,6 @@ static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev) goto err_vref; } - ret =clk_prepare_enable (priv->core_clk); -if (ret) { -dev_err (dev,"failed to enable core clk\n" ); - goto err_core_clk; - } - regval =FIELD_PREP (MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK ,1 );regmap_update_bits (priv->regmap,MESON_SAR_ADC_REG0 ,MESON_SAR_ADC_REG0_FIFO_CNT_IRQ_MASK , regval);
@@ -948,8 +942,6 @@ static int meson_sar_adc_hw_enable(struct iio_dev *indio_dev)regmap_update_bits (priv->regmap,MESON_SAR_ADC_REG3 ,MESON_SAR_ADC_REG3_ADC_EN ,0 );meson_sar_adc_set_bandgap (indio_dev, false); -clk_disable_unprepare (priv->core_clk); -err_core_clk:regulator_disable (priv->vref); err_vref:meson_sar_adc_unlock (indio_dev);
@@ -977,8 +969,6 @@ static void meson_sar_adc_hw_disable(struct iio_dev *indio_dev)meson_sar_adc_set_bandgap (indio_dev, false); -clk_disable_unprepare (priv->core_clk); -regulator_disable (priv->vref);if (!ret)
@@ -1211,7 +1201,7 @@ static int meson_sar_adc_probe(struct platform_device *pdev)if (IS_ERR (priv->clkin))return dev_err_probe (dev,PTR_ERR (priv->clkin),"failed to get clkin\n" ); - priv->core_clk =devm_clk_get (dev,"core" ); + priv->core_clk =devm_clk_get_enabled (dev,"core" );if (IS_ERR (priv->core_clk))return dev_err_probe (dev,PTR_ERR (priv->core_clk),"failed to get core clk\n" );
@@ -1294,15 +1284,26 @@ static int meson_sar_adc_remove(struct platform_device *pdev)static int meson_sar_adc_suspend (struct device *dev) {struct iio_dev *indio_dev =dev_get_drvdata (dev); +struct meson_sar_adc_priv *priv =iio_priv (indio_dev);meson_sar_adc_hw_disable (indio_dev); +clk_disable_unprepare (priv->core_clk); +return 0 ; }static int meson_sar_adc_resume (struct device *dev) {struct iio_dev *indio_dev =dev_get_drvdata (dev); +struct meson_sar_adc_priv *priv =iio_priv (indio_dev); +int ret; + + ret =clk_prepare_enable (priv->core_clk); +if (ret) { +dev_err (dev,"failed to enable core clk\n" ); +return ret; + }return meson_sar_adc_hw_enable (indio_dev); }