]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
ASoC: arizona/madera: use fsleep() in up/down DAPM event delays.
authorVitaly Rodionov <vitalyr@opensource.cirrus.com>
Wed, 5 Feb 2025 16:08:46 +0000 (16:08 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Apr 2025 12:30:50 +0000 (14:30 +0200)
[ Upstream commit 679074942c2502a95842a80471d8fb718165ac77 ]

Using `fsleep` instead of `msleep` resolves some customer complaints
regarding the precision of up/down DAPM event timing. `fsleep()`
automatically selects the appropriate sleep function, making the delay
time more predictable.

Signed-off-by: Vitaly Rodionov <vitalyr@opensource.cirrus.com>
Link: https://patch.msgid.link/20250205160849.500306-1-vitalyr@opensource.cirrus.com
Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/codecs/arizona.c
sound/soc/codecs/madera.c
sound/soc/codecs/wm5110.c

index 1228f2de02975cadb757c3c92c94119c1b612572..f796b8e5865dec473b63c2de5ed19b77116ab985 100644 (file)
@@ -967,7 +967,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
                case ARIZONA_OUT3L_ENA_SHIFT:
                case ARIZONA_OUT3R_ENA_SHIFT:
                        priv->out_up_pending++;
-                       priv->out_up_delay += 17;
+                       priv->out_up_delay += 17000;
                        break;
                case ARIZONA_OUT4L_ENA_SHIFT:
                case ARIZONA_OUT4R_ENA_SHIFT:
@@ -977,7 +977,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
                        case WM8997:
                                break;
                        default:
-                               priv->out_up_delay += 10;
+                               priv->out_up_delay += 10000;
                                break;
                        }
                        break;
@@ -999,7 +999,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
                        if (!priv->out_up_pending && priv->out_up_delay) {
                                dev_dbg(component->dev, "Power up delay: %d\n",
                                        priv->out_up_delay);
-                               msleep(priv->out_up_delay);
+                               fsleep(priv->out_up_delay);
                                priv->out_up_delay = 0;
                        }
                        break;
@@ -1017,7 +1017,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
                case ARIZONA_OUT3L_ENA_SHIFT:
                case ARIZONA_OUT3R_ENA_SHIFT:
                        priv->out_down_pending++;
-                       priv->out_down_delay++;
+                       priv->out_down_delay += 1000;
                        break;
                case ARIZONA_OUT4L_ENA_SHIFT:
                case ARIZONA_OUT4R_ENA_SHIFT:
@@ -1028,10 +1028,10 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
                                break;
                        case WM8998:
                        case WM1814:
-                               priv->out_down_delay += 5;
+                               priv->out_down_delay += 5000;
                                break;
                        default:
-                               priv->out_down_delay++;
+                               priv->out_down_delay += 1000;
                                break;
                        }
                default:
@@ -1052,7 +1052,7 @@ int arizona_out_ev(struct snd_soc_dapm_widget *w,
                        if (!priv->out_down_pending && priv->out_down_delay) {
                                dev_dbg(component->dev, "Power down delay: %d\n",
                                        priv->out_down_delay);
-                               msleep(priv->out_down_delay);
+                               fsleep(priv->out_down_delay);
                                priv->out_down_delay = 0;
                        }
                        break;
index bbab4bc1f6b50f0c98f04a113e2c46668ea02f3a..aa7543a15d8c7d96f5602e2c29e8fa68c46c44ff 100644 (file)
@@ -2322,10 +2322,10 @@ int madera_out_ev(struct snd_soc_dapm_widget *w,
        case CS42L92:
        case CS47L92:
        case CS47L93:
-               out_up_delay = 6;
+               out_up_delay = 6000;
                break;
        default:
-               out_up_delay = 17;
+               out_up_delay = 17000;
                break;
        }
 
@@ -2356,7 +2356,7 @@ int madera_out_ev(struct snd_soc_dapm_widget *w,
                case MADERA_OUT3R_ENA_SHIFT:
                        priv->out_up_pending--;
                        if (!priv->out_up_pending) {
-                               msleep(priv->out_up_delay);
+                               fsleep(priv->out_up_delay);
                                priv->out_up_delay = 0;
                        }
                        break;
@@ -2375,7 +2375,7 @@ int madera_out_ev(struct snd_soc_dapm_widget *w,
                case MADERA_OUT3L_ENA_SHIFT:
                case MADERA_OUT3R_ENA_SHIFT:
                        priv->out_down_pending++;
-                       priv->out_down_delay++;
+                       priv->out_down_delay += 1000;
                        break;
                default:
                        break;
@@ -2392,7 +2392,7 @@ int madera_out_ev(struct snd_soc_dapm_widget *w,
                case MADERA_OUT3R_ENA_SHIFT:
                        priv->out_down_pending--;
                        if (!priv->out_down_pending) {
-                               msleep(priv->out_down_delay);
+                               fsleep(priv->out_down_delay);
                                priv->out_down_delay = 0;
                        }
                        break;
index d0cef982215dcb7b105ec9deb8e4d2a4c2209f74..aed067bf346f550b50bd88e698547449ee82af1d 100644 (file)
@@ -302,7 +302,7 @@ static int wm5110_hp_pre_enable(struct snd_soc_dapm_widget *w)
                } else {
                        wseq = wm5110_no_dre_left_enable;
                        nregs = ARRAY_SIZE(wm5110_no_dre_left_enable);
-                       priv->out_up_delay += 10;
+                       priv->out_up_delay += 10000;
                }
                break;
        case ARIZONA_OUT1R_ENA_SHIFT:
@@ -312,7 +312,7 @@ static int wm5110_hp_pre_enable(struct snd_soc_dapm_widget *w)
                } else {
                        wseq = wm5110_no_dre_right_enable;
                        nregs = ARRAY_SIZE(wm5110_no_dre_right_enable);
-                       priv->out_up_delay += 10;
+                       priv->out_up_delay += 10000;
                }
                break;
        default:
@@ -338,7 +338,7 @@ static int wm5110_hp_pre_disable(struct snd_soc_dapm_widget *w)
                        snd_soc_component_update_bits(component,
                                                      ARIZONA_SPARE_TRIGGERS,
                                                      ARIZONA_WS_TRG1, 0);
-                       priv->out_down_delay += 27;
+                       priv->out_down_delay += 27000;
                }
                break;
        case ARIZONA_OUT1R_ENA_SHIFT:
@@ -350,7 +350,7 @@ static int wm5110_hp_pre_disable(struct snd_soc_dapm_widget *w)
                        snd_soc_component_update_bits(component,
                                                      ARIZONA_SPARE_TRIGGERS,
                                                      ARIZONA_WS_TRG2, 0);
-                       priv->out_down_delay += 27;
+                       priv->out_down_delay += 27000;
                }
                break;
        default: