wm8737.c (ab303e4a17f07d6ebbf6f1528f89e3c1c248a4e6) wm8737.c (14ba3ec1de043260cecd9e828ea2e3a0ad302893)
1/*
2 * wm8737.c -- WM8737 ALSA SoC Audio driver
3 *
4 * Copyright 2010 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 469 unchanged lines hidden (view full) ---

478 ret);
479 return ret;
480 }
481
482 regcache_sync(wm8737->regmap);
483
484 /* Fast VMID ramp at 2*2.5k */
485 snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
1/*
2 * wm8737.c -- WM8737 ALSA SoC Audio driver
3 *
4 * Copyright 2010 Wolfson Microelectronics plc
5 *
6 * Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
7 *
8 * This program is free software; you can redistribute it and/or modify

--- 469 unchanged lines hidden (view full) ---

478 ret);
479 return ret;
480 }
481
482 regcache_sync(wm8737->regmap);
483
484 /* Fast VMID ramp at 2*2.5k */
485 snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
486 WM8737_VMIDSEL_MASK, 0x4);
486 WM8737_VMIDSEL_MASK,
487 2 << WM8737_VMIDSEL_SHIFT);
487
488 /* Bring VMID up */
489 snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
490 WM8737_VMID_MASK |
491 WM8737_VREF_MASK,
492 WM8737_VMID_MASK |
493 WM8737_VREF_MASK);
494
495 msleep(500);
496 }
497
498 /* VMID at 2*300k */
499 snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
488
489 /* Bring VMID up */
490 snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
491 WM8737_VMID_MASK |
492 WM8737_VREF_MASK,
493 WM8737_VMID_MASK |
494 WM8737_VREF_MASK);
495
496 msleep(500);
497 }
498
499 /* VMID at 2*300k */
500 snd_soc_update_bits(codec, WM8737_MISC_BIAS_CONTROL,
500 WM8737_VMIDSEL_MASK, 2);
501 WM8737_VMIDSEL_MASK,
502 1 << WM8737_VMIDSEL_SHIFT);
501
502 break;
503
504 case SND_SOC_BIAS_OFF:
505 snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
506 WM8737_VMID_MASK | WM8737_VREF_MASK, 0);
507
508 regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies),
509 wm8737->supplies);
510 break;
511 }
512
503
504 break;
505
506 case SND_SOC_BIAS_OFF:
507 snd_soc_update_bits(codec, WM8737_POWER_MANAGEMENT,
508 WM8737_VMID_MASK | WM8737_VREF_MASK, 0);
509
510 regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies),
511 wm8737->supplies);
512 break;
513 }
514
515 codec->dapm.bias_level = level;
513 return 0;
514}
515
516#define WM8737_RATES SNDRV_PCM_RATE_8000_96000
517
518#define WM8737_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
519 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
520

--- 33 unchanged lines hidden (view full) ---

554 goto err_enable;
555 }
556
557 snd_soc_update_bits(codec, WM8737_LEFT_PGA_VOLUME, WM8737_LVU,
558 WM8737_LVU);
559 snd_soc_update_bits(codec, WM8737_RIGHT_PGA_VOLUME, WM8737_RVU,
560 WM8737_RVU);
561
516 return 0;
517}
518
519#define WM8737_RATES SNDRV_PCM_RATE_8000_96000
520
521#define WM8737_FORMATS (SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S20_3LE |\
522 SNDRV_PCM_FMTBIT_S24_LE | SNDRV_PCM_FMTBIT_S32_LE)
523

--- 33 unchanged lines hidden (view full) ---

557 goto err_enable;
558 }
559
560 snd_soc_update_bits(codec, WM8737_LEFT_PGA_VOLUME, WM8737_LVU,
561 WM8737_LVU);
562 snd_soc_update_bits(codec, WM8737_RIGHT_PGA_VOLUME, WM8737_RVU,
563 WM8737_RVU);
564
562 snd_soc_codec_force_bias_level(codec, SND_SOC_BIAS_STANDBY);
565 wm8737_set_bias_level(codec, SND_SOC_BIAS_STANDBY);
563
564 /* Bias level configuration will have done an extra enable */
565 regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);
566
567 return 0;
568
569err_enable:
570 regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);

--- 182 unchanged lines hidden ---
566
567 /* Bias level configuration will have done an extra enable */
568 regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);
569
570 return 0;
571
572err_enable:
573 regulator_bulk_disable(ARRAY_SIZE(wm8737->supplies), wm8737->supplies);

--- 182 unchanged lines hidden ---