Unverified Commit 67907494 authored by Vitaly Rodionov's avatar Vitaly Rodionov Committed by Mark Brown
Browse files

ASoC: arizona/madera: use fsleep() in up/down DAPM event delays.



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: default avatarVitaly Rodionov <vitalyr@opensource.cirrus.com>
Link: https://patch.msgid.link/20250205160849.500306-1-vitalyr@opensource.cirrus.com


Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent dabbd325
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -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;
			}
			break;
@@ -1053,7 +1053,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;
+5 −5
Original line number Diff line number Diff line
@@ -2323,10 +2323,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;
	}

@@ -2357,7 +2357,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;
@@ -2376,7 +2376,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;
@@ -2393,7 +2393,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;
+4 −4
Original line number Diff line number Diff line
@@ -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: