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

Minor default jack pop performance updates

Merge series from Charles Keepax <ckeepax@opensource.cirrus.com>:

Some small updates to the driver defaults to ensure a good pop
performance on jack insert and removal.

+21 -21
+2 -2
Documentation/devicetree/bindings/sound/cirrus,cs42l43.yaml
··· 83 83 Current at which the headset micbias sense clamp will engage, 0 to 84 84 disable. 85 85 enum: [ 0, 14, 23, 41, 50, 60, 68, 86, 95 ] 86 - default: 0 86 + default: 14 87 87 88 88 cirrus,bias-ramp-ms: 89 89 description: ··· 97 97 Time in microseconds the type detection will run for. Long values will 98 98 cause more audible effects, but give more accurate detection. 99 99 enum: [ 20, 100, 1000, 10000, 50000, 75000, 100000, 200000 ] 100 - default: 10000 100 + default: 1000 101 101 102 102 cirrus,button-automute: 103 103 type: boolean
+19 -19
sound/soc/codecs/cs42l43-jack.c
··· 110 110 priv->buttons[3] = 735; 111 111 } 112 112 113 - ret = cs42l43_find_index(priv, "cirrus,detect-us", 10000, &priv->detect_us, 113 + ret = cs42l43_find_index(priv, "cirrus,detect-us", 1000, &priv->detect_us, 114 114 cs42l43_accdet_us, ARRAY_SIZE(cs42l43_accdet_us)); 115 115 if (ret < 0) 116 116 goto error; ··· 127 127 128 128 hs2 |= ret << CS42L43_HSBIAS_RAMP_SHIFT; 129 129 130 - ret = cs42l43_find_index(priv, "cirrus,bias-sense-microamp", 0, 130 + ret = cs42l43_find_index(priv, "cirrus,bias-sense-microamp", 14, 131 131 &priv->bias_sense_ua, cs42l43_accdet_bias_sense, 132 132 ARRAY_SIZE(cs42l43_accdet_bias_sense)); 133 133 if (ret < 0) ··· 250 250 if (!force_high && priv->bias_low) 251 251 val = 0x2 << CS42L43_HSBIAS_MODE_SHIFT; 252 252 253 + if (priv->bias_sense_ua) { 254 + regmap_update_bits(cs42l43->regmap, 255 + CS42L43_HS_BIAS_SENSE_AND_CLAMP_AUTOCONTROL, 256 + CS42L43_HSBIAS_SENSE_EN_MASK | 257 + CS42L43_AUTO_HSBIAS_CLAMP_EN_MASK, 258 + CS42L43_HSBIAS_SENSE_EN_MASK | 259 + CS42L43_AUTO_HSBIAS_CLAMP_EN_MASK); 260 + } 261 + 253 262 regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1, 254 263 CS42L43_HSBIAS_MODE_MASK, val); 255 264 ··· 276 267 277 268 regmap_update_bits(cs42l43->regmap, CS42L43_HS2, 278 269 CS42L43_HS_CLAMP_DISABLE_MASK, 0); 270 + 271 + if (priv->bias_sense_ua) { 272 + regmap_update_bits(cs42l43->regmap, 273 + CS42L43_HS_BIAS_SENSE_AND_CLAMP_AUTOCONTROL, 274 + CS42L43_HSBIAS_SENSE_EN_MASK | 275 + CS42L43_AUTO_HSBIAS_CLAMP_EN_MASK, 0); 276 + } 279 277 } 280 278 281 279 irqreturn_t cs42l43_bias_detect_clamp(int irq, void *data) ··· 290 274 struct cs42l43_codec *priv = data; 291 275 292 276 queue_delayed_work(system_wq, &priv->bias_sense_timeout, 293 - msecs_to_jiffies(250)); 277 + msecs_to_jiffies(1000)); 294 278 295 279 return IRQ_HANDLED; 296 280 } ··· 334 318 regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1, 335 319 CS42L43_BUTTON_DETECT_MODE_MASK | 336 320 CS42L43_MIC_LVL_DET_DISABLE_MASK, val); 337 - 338 - if (priv->bias_sense_ua) { 339 - regmap_update_bits(cs42l43->regmap, 340 - CS42L43_HS_BIAS_SENSE_AND_CLAMP_AUTOCONTROL, 341 - CS42L43_HSBIAS_SENSE_EN_MASK | 342 - CS42L43_AUTO_HSBIAS_CLAMP_EN_MASK, 343 - CS42L43_HSBIAS_SENSE_EN_MASK | 344 - CS42L43_AUTO_HSBIAS_CLAMP_EN_MASK); 345 - } 346 321 } 347 322 348 323 static void cs42l43_stop_button_detect(struct cs42l43_codec *priv) ··· 341 334 struct cs42l43 *cs42l43 = priv->core; 342 335 343 336 dev_dbg(priv->dev, "Stop button detect\n"); 344 - 345 - if (priv->bias_sense_ua) { 346 - regmap_update_bits(cs42l43->regmap, 347 - CS42L43_HS_BIAS_SENSE_AND_CLAMP_AUTOCONTROL, 348 - CS42L43_HSBIAS_SENSE_EN_MASK | 349 - CS42L43_AUTO_HSBIAS_CLAMP_EN_MASK, 0); 350 - } 351 337 352 338 regmap_update_bits(cs42l43->regmap, CS42L43_MIC_DETECT_CONTROL_1, 353 339 CS42L43_BUTTON_DETECT_MODE_MASK |