/* We can't use the same notifier block for more than one supply and * there's no way I can see to get from a callback to the caller * except container_of().
*/ #define WM8962_REGULATOR_EVENT(n) \ staticint wm8962_regulator_event_##n(struct notifier_block *nb, \ unsignedlong event, void *data) \
{ \ struct wm8962_priv *wm8962 = container_of(nb, struct wm8962_priv, \
disable_nb[n]); \ if (event & REGULATOR_EVENT_DISABLE) { \
regcache_mark_dirty(wm8962->regmap); \
} \ return 0; \
}
staticbool wm8962_volatile_register(struct device *dev, unsignedint reg)
{ switch (reg) { case WM8962_CLOCKING1: case WM8962_SOFTWARE_RESET: case WM8962_THERMAL_SHUTDOWN_STATUS: case WM8962_ADDITIONAL_CONTROL_4: case WM8962_DC_SERVO_6: case WM8962_INTERRUPT_STATUS_1: case WM8962_INTERRUPT_STATUS_2: case WM8962_DSP2_EXECCONTROL: returntrue; default: returnfalse;
}
}
staticbool wm8962_readable_register(struct device *dev, unsignedint reg)
{ switch (reg) { case WM8962_LEFT_INPUT_VOLUME: case WM8962_RIGHT_INPUT_VOLUME: case WM8962_HPOUTL_VOLUME: case WM8962_HPOUTR_VOLUME: case WM8962_CLOCKING1: case WM8962_ADC_DAC_CONTROL_1: case WM8962_ADC_DAC_CONTROL_2: case WM8962_AUDIO_INTERFACE_0: case WM8962_CLOCKING2: case WM8962_AUDIO_INTERFACE_1: case WM8962_LEFT_DAC_VOLUME: case WM8962_RIGHT_DAC_VOLUME: case WM8962_AUDIO_INTERFACE_2: case WM8962_SOFTWARE_RESET: case WM8962_ALC1: case WM8962_ALC2: case WM8962_ALC3: case WM8962_NOISE_GATE: case WM8962_LEFT_ADC_VOLUME: case WM8962_RIGHT_ADC_VOLUME: case WM8962_ADDITIONAL_CONTROL_1: case WM8962_ADDITIONAL_CONTROL_2: case WM8962_PWR_MGMT_1: case WM8962_PWR_MGMT_2: case WM8962_ADDITIONAL_CONTROL_3: case WM8962_ANTI_POP: case WM8962_CLOCKING_3: case WM8962_INPUT_MIXER_CONTROL_1: case WM8962_LEFT_INPUT_MIXER_VOLUME: case WM8962_RIGHT_INPUT_MIXER_VOLUME: case WM8962_INPUT_MIXER_CONTROL_2: case WM8962_INPUT_BIAS_CONTROL: case WM8962_LEFT_INPUT_PGA_CONTROL: case WM8962_RIGHT_INPUT_PGA_CONTROL: case WM8962_SPKOUTL_VOLUME: case WM8962_SPKOUTR_VOLUME: case WM8962_THERMAL_SHUTDOWN_STATUS: case WM8962_ADDITIONAL_CONTROL_4: case WM8962_CLASS_D_CONTROL_1: case WM8962_CLASS_D_CONTROL_2: case WM8962_CLOCKING_4: case WM8962_DAC_DSP_MIXING_1: case WM8962_DAC_DSP_MIXING_2: case WM8962_DC_SERVO_0: case WM8962_DC_SERVO_1: case WM8962_DC_SERVO_4: case WM8962_DC_SERVO_6: case WM8962_ANALOGUE_PGA_BIAS: case WM8962_ANALOGUE_HP_0: case WM8962_ANALOGUE_HP_2: case WM8962_CHARGE_PUMP_1: case WM8962_CHARGE_PUMP_B: case WM8962_WRITE_SEQUENCER_CONTROL_1: case WM8962_WRITE_SEQUENCER_CONTROL_2: case WM8962_WRITE_SEQUENCER_CONTROL_3: case WM8962_CONTROL_INTERFACE: case WM8962_MIXER_ENABLES: case WM8962_HEADPHONE_MIXER_1: case WM8962_HEADPHONE_MIXER_2: case WM8962_HEADPHONE_MIXER_3: case WM8962_HEADPHONE_MIXER_4: case WM8962_SPEAKER_MIXER_1: case WM8962_SPEAKER_MIXER_2: case WM8962_SPEAKER_MIXER_3: case WM8962_SPEAKER_MIXER_4: case WM8962_SPEAKER_MIXER_5: case WM8962_BEEP_GENERATOR_1: case WM8962_OSCILLATOR_TRIM_3: case WM8962_OSCILLATOR_TRIM_4: case WM8962_OSCILLATOR_TRIM_7: case WM8962_ANALOGUE_CLOCKING1: case WM8962_ANALOGUE_CLOCKING2: case WM8962_ANALOGUE_CLOCKING3: case WM8962_PLL_SOFTWARE_RESET: case WM8962_PLL2: case WM8962_PLL_4: case WM8962_PLL_9: case WM8962_PLL_10: case WM8962_PLL_11: case WM8962_PLL_12: case WM8962_PLL_13: case WM8962_PLL_14: case WM8962_PLL_15: case WM8962_PLL_16: case WM8962_FLL_CONTROL_1: case WM8962_FLL_CONTROL_2: case WM8962_FLL_CONTROL_3: case WM8962_FLL_CONTROL_5: case WM8962_FLL_CONTROL_6: case WM8962_FLL_CONTROL_7: case WM8962_FLL_CONTROL_8: case WM8962_GENERAL_TEST_1: case WM8962_DF1: case WM8962_DF2: case WM8962_DF3: case WM8962_DF4: case WM8962_DF5: case WM8962_DF6: case WM8962_DF7: case WM8962_LHPF1: case WM8962_LHPF2: case WM8962_THREED1: case WM8962_THREED2: case WM8962_THREED3: case WM8962_THREED4: case WM8962_DRC_1: case WM8962_DRC_2: case WM8962_DRC_3: case WM8962_DRC_4: case WM8962_DRC_5: case WM8962_TLOOPBACK: case WM8962_EQ1: case WM8962_EQ2: case WM8962_EQ3: case WM8962_EQ4: case WM8962_EQ5: case WM8962_EQ6: case WM8962_EQ7: case WM8962_EQ8: case WM8962_EQ9: case WM8962_EQ10: case WM8962_EQ11: case WM8962_EQ12: case WM8962_EQ13: case WM8962_EQ14: case WM8962_EQ15: case WM8962_EQ16: case WM8962_EQ17: case WM8962_EQ18: case WM8962_EQ19: case WM8962_EQ20: case WM8962_EQ21: case WM8962_EQ22: case WM8962_EQ23: case WM8962_EQ24: case WM8962_EQ25: case WM8962_EQ26: case WM8962_EQ27: case WM8962_EQ28: case WM8962_EQ29: case WM8962_EQ30: case WM8962_EQ31: case WM8962_EQ32: case WM8962_EQ33: case WM8962_EQ34: case WM8962_EQ35: case WM8962_EQ36: case WM8962_EQ37: case WM8962_EQ38: case WM8962_EQ39: case WM8962_EQ40: case WM8962_EQ41: case WM8962_GPIO_2: case WM8962_GPIO_3: case WM8962_GPIO_5: case WM8962_GPIO_6: case WM8962_INTERRUPT_STATUS_1: case WM8962_INTERRUPT_STATUS_2: case WM8962_INTERRUPT_STATUS_1_MASK: case WM8962_INTERRUPT_STATUS_2_MASK: case WM8962_INTERRUPT_CONTROL: case WM8962_IRQ_DEBOUNCE: case WM8962_MICINT_SOURCE_POL: case WM8962_DSP2_POWER_MANAGEMENT: case WM8962_DSP2_EXECCONTROL: case WM8962_DSP2_INSTRUCTION_RAM_0: case WM8962_DSP2_ADDRESS_RAM_2: case WM8962_DSP2_ADDRESS_RAM_1: case WM8962_DSP2_ADDRESS_RAM_0: case WM8962_DSP2_DATA1_RAM_1: case WM8962_DSP2_DATA1_RAM_0: case WM8962_DSP2_DATA2_RAM_1: case WM8962_DSP2_DATA2_RAM_0: case WM8962_DSP2_DATA3_RAM_1: case WM8962_DSP2_DATA3_RAM_0: case WM8962_DSP2_COEFF_RAM_0: case WM8962_RETUNEADC_SHARED_COEFF_1: case WM8962_RETUNEADC_SHARED_COEFF_0: case WM8962_RETUNEDAC_SHARED_COEFF_1: case WM8962_RETUNEDAC_SHARED_COEFF_0: case WM8962_SOUNDSTAGE_ENABLES_1: case WM8962_SOUNDSTAGE_ENABLES_0: case WM8962_HDBASS_AI_1: case WM8962_HDBASS_AI_0: case WM8962_HDBASS_AR_1: case WM8962_HDBASS_AR_0: case WM8962_HDBASS_B_1: case WM8962_HDBASS_B_0: case WM8962_HDBASS_K_1: case WM8962_HDBASS_K_0: case WM8962_HDBASS_N1_1: case WM8962_HDBASS_N1_0: case WM8962_HDBASS_N2_1: case WM8962_HDBASS_N2_0: case WM8962_HDBASS_N3_1: case WM8962_HDBASS_N3_0: case WM8962_HDBASS_N4_1: case WM8962_HDBASS_N4_0: case WM8962_HDBASS_N5_1: case WM8962_HDBASS_N5_0: case WM8962_HDBASS_X1_1: case WM8962_HDBASS_X1_0: case WM8962_HDBASS_X2_1: case WM8962_HDBASS_X2_0: case WM8962_HDBASS_X3_1: case WM8962_HDBASS_X3_0: case WM8962_HDBASS_ATK_1: case WM8962_HDBASS_ATK_0: case WM8962_HDBASS_DCY_1: case WM8962_HDBASS_DCY_0: case WM8962_HDBASS_PG_1: case WM8962_HDBASS_PG_0: case WM8962_HPF_C_1: case WM8962_HPF_C_0: case WM8962_ADCL_RETUNE_C1_1: case WM8962_ADCL_RETUNE_C1_0: case WM8962_ADCL_RETUNE_C2_1: case WM8962_ADCL_RETUNE_C2_0: case WM8962_ADCL_RETUNE_C3_1: case WM8962_ADCL_RETUNE_C3_0: case WM8962_ADCL_RETUNE_C4_1: case WM8962_ADCL_RETUNE_C4_0: case WM8962_ADCL_RETUNE_C5_1: case WM8962_ADCL_RETUNE_C5_0: case WM8962_ADCL_RETUNE_C6_1: case WM8962_ADCL_RETUNE_C6_0: case WM8962_ADCL_RETUNE_C7_1: case WM8962_ADCL_RETUNE_C7_0: case WM8962_ADCL_RETUNE_C8_1: case WM8962_ADCL_RETUNE_C8_0: case WM8962_ADCL_RETUNE_C9_1: case WM8962_ADCL_RETUNE_C9_0: case WM8962_ADCL_RETUNE_C10_1: case WM8962_ADCL_RETUNE_C10_0: case WM8962_ADCL_RETUNE_C11_1: case WM8962_ADCL_RETUNE_C11_0: case WM8962_ADCL_RETUNE_C12_1: case WM8962_ADCL_RETUNE_C12_0: case WM8962_ADCL_RETUNE_C13_1: case WM8962_ADCL_RETUNE_C13_0: case WM8962_ADCL_RETUNE_C14_1: case WM8962_ADCL_RETUNE_C14_0: case WM8962_ADCL_RETUNE_C15_1: case WM8962_ADCL_RETUNE_C15_0: case WM8962_ADCL_RETUNE_C16_1: case WM8962_ADCL_RETUNE_C16_0: case WM8962_ADCL_RETUNE_C17_1: case WM8962_ADCL_RETUNE_C17_0: case WM8962_ADCL_RETUNE_C18_1: case WM8962_ADCL_RETUNE_C18_0: case WM8962_ADCL_RETUNE_C19_1: case WM8962_ADCL_RETUNE_C19_0: case WM8962_ADCL_RETUNE_C20_1: case WM8962_ADCL_RETUNE_C20_0: case WM8962_ADCL_RETUNE_C21_1: case WM8962_ADCL_RETUNE_C21_0: case WM8962_ADCL_RETUNE_C22_1: case WM8962_ADCL_RETUNE_C22_0: case WM8962_ADCL_RETUNE_C23_1: case WM8962_ADCL_RETUNE_C23_0: case WM8962_ADCL_RETUNE_C24_1: case WM8962_ADCL_RETUNE_C24_0: case WM8962_ADCL_RETUNE_C25_1: case WM8962_ADCL_RETUNE_C25_0: case WM8962_ADCL_RETUNE_C26_1: case WM8962_ADCL_RETUNE_C26_0: case WM8962_ADCL_RETUNE_C27_1: case WM8962_ADCL_RETUNE_C27_0: case WM8962_ADCL_RETUNE_C28_1: case WM8962_ADCL_RETUNE_C28_0: case WM8962_ADCL_RETUNE_C29_1: case WM8962_ADCL_RETUNE_C29_0: case WM8962_ADCL_RETUNE_C30_1: case WM8962_ADCL_RETUNE_C30_0: case WM8962_ADCL_RETUNE_C31_1: case WM8962_ADCL_RETUNE_C31_0: case WM8962_ADCL_RETUNE_C32_1: case WM8962_ADCL_RETUNE_C32_0: case WM8962_RETUNEADC_PG2_1: case WM8962_RETUNEADC_PG2_0: case WM8962_RETUNEADC_PG_1: case WM8962_RETUNEADC_PG_0: case WM8962_ADCR_RETUNE_C1_1: case WM8962_ADCR_RETUNE_C1_0: case WM8962_ADCR_RETUNE_C2_1: case WM8962_ADCR_RETUNE_C2_0: case WM8962_ADCR_RETUNE_C3_1: case WM8962_ADCR_RETUNE_C3_0: case WM8962_ADCR_RETUNE_C4_1: case WM8962_ADCR_RETUNE_C4_0: case WM8962_ADCR_RETUNE_C5_1: case WM8962_ADCR_RETUNE_C5_0: case WM8962_ADCR_RETUNE_C6_1: case WM8962_ADCR_RETUNE_C6_0: case WM8962_ADCR_RETUNE_C7_1: case WM8962_ADCR_RETUNE_C7_0: case WM8962_ADCR_RETUNE_C8_1: case WM8962_ADCR_RETUNE_C8_0: case WM8962_ADCR_RETUNE_C9_1: case WM8962_ADCR_RETUNE_C9_0: case WM8962_ADCR_RETUNE_C10_1: case WM8962_ADCR_RETUNE_C10_0: case WM8962_ADCR_RETUNE_C11_1: case WM8962_ADCR_RETUNE_C11_0: case WM8962_ADCR_RETUNE_C12_1: case WM8962_ADCR_RETUNE_C12_0: case WM8962_ADCR_RETUNE_C13_1: case WM8962_ADCR_RETUNE_C13_0: case WM8962_ADCR_RETUNE_C14_1: case WM8962_ADCR_RETUNE_C14_0: case WM8962_ADCR_RETUNE_C15_1: case WM8962_ADCR_RETUNE_C15_0: case WM8962_ADCR_RETUNE_C16_1: case WM8962_ADCR_RETUNE_C16_0: case WM8962_ADCR_RETUNE_C17_1: case WM8962_ADCR_RETUNE_C17_0: case WM8962_ADCR_RETUNE_C18_1: case WM8962_ADCR_RETUNE_C18_0: case WM8962_ADCR_RETUNE_C19_1: case WM8962_ADCR_RETUNE_C19_0: case WM8962_ADCR_RETUNE_C20_1: case WM8962_ADCR_RETUNE_C20_0: case WM8962_ADCR_RETUNE_C21_1: case WM8962_ADCR_RETUNE_C21_0: case WM8962_ADCR_RETUNE_C22_1: case WM8962_ADCR_RETUNE_C22_0: case WM8962_ADCR_RETUNE_C23_1: case WM8962_ADCR_RETUNE_C23_0: case WM8962_ADCR_RETUNE_C24_1: case WM8962_ADCR_RETUNE_C24_0: case WM8962_ADCR_RETUNE_C25_1: case WM8962_ADCR_RETUNE_C25_0: case WM8962_ADCR_RETUNE_C26_1: case WM8962_ADCR_RETUNE_C26_0: case WM8962_ADCR_RETUNE_C27_1: case WM8962_ADCR_RETUNE_C27_0: case WM8962_ADCR_RETUNE_C28_1: case WM8962_ADCR_RETUNE_C28_0: case WM8962_ADCR_RETUNE_C29_1: case WM8962_ADCR_RETUNE_C29_0: case WM8962_ADCR_RETUNE_C30_1: case WM8962_ADCR_RETUNE_C30_0: case WM8962_ADCR_RETUNE_C31_1: case WM8962_ADCR_RETUNE_C31_0: case WM8962_ADCR_RETUNE_C32_1: case WM8962_ADCR_RETUNE_C32_0: case WM8962_DACL_RETUNE_C1_1: case WM8962_DACL_RETUNE_C1_0: case WM8962_DACL_RETUNE_C2_1: case WM8962_DACL_RETUNE_C2_0: case WM8962_DACL_RETUNE_C3_1: case WM8962_DACL_RETUNE_C3_0: case WM8962_DACL_RETUNE_C4_1: case WM8962_DACL_RETUNE_C4_0: case WM8962_DACL_RETUNE_C5_1: case WM8962_DACL_RETUNE_C5_0: case WM8962_DACL_RETUNE_C6_1: case WM8962_DACL_RETUNE_C6_0: case WM8962_DACL_RETUNE_C7_1: case WM8962_DACL_RETUNE_C7_0: case WM8962_DACL_RETUNE_C8_1: case WM8962_DACL_RETUNE_C8_0: case WM8962_DACL_RETUNE_C9_1: case WM8962_DACL_RETUNE_C9_0: case WM8962_DACL_RETUNE_C10_1: case WM8962_DACL_RETUNE_C10_0: case WM8962_DACL_RETUNE_C11_1: case WM8962_DACL_RETUNE_C11_0: case WM8962_DACL_RETUNE_C12_1: case WM8962_DACL_RETUNE_C12_0: case WM8962_DACL_RETUNE_C13_1: case WM8962_DACL_RETUNE_C13_0: case WM8962_DACL_RETUNE_C14_1: case WM8962_DACL_RETUNE_C14_0: case WM8962_DACL_RETUNE_C15_1: case WM8962_DACL_RETUNE_C15_0: case WM8962_DACL_RETUNE_C16_1: case WM8962_DACL_RETUNE_C16_0: case WM8962_DACL_RETUNE_C17_1: case WM8962_DACL_RETUNE_C17_0: case WM8962_DACL_RETUNE_C18_1: case WM8962_DACL_RETUNE_C18_0: case WM8962_DACL_RETUNE_C19_1: case WM8962_DACL_RETUNE_C19_0: case WM8962_DACL_RETUNE_C20_1: case WM8962_DACL_RETUNE_C20_0: case WM8962_DACL_RETUNE_C21_1: case WM8962_DACL_RETUNE_C21_0: case WM8962_DACL_RETUNE_C22_1: case WM8962_DACL_RETUNE_C22_0: case WM8962_DACL_RETUNE_C23_1: case WM8962_DACL_RETUNE_C23_0: case WM8962_DACL_RETUNE_C24_1: case WM8962_DACL_RETUNE_C24_0: case WM8962_DACL_RETUNE_C25_1: case WM8962_DACL_RETUNE_C25_0: case WM8962_DACL_RETUNE_C26_1: case WM8962_DACL_RETUNE_C26_0: case WM8962_DACL_RETUNE_C27_1: case WM8962_DACL_RETUNE_C27_0: case WM8962_DACL_RETUNE_C28_1: case WM8962_DACL_RETUNE_C28_0: case WM8962_DACL_RETUNE_C29_1: case WM8962_DACL_RETUNE_C29_0: case WM8962_DACL_RETUNE_C30_1: case WM8962_DACL_RETUNE_C30_0: case WM8962_DACL_RETUNE_C31_1: case WM8962_DACL_RETUNE_C31_0: case WM8962_DACL_RETUNE_C32_1: case WM8962_DACL_RETUNE_C32_0: case WM8962_RETUNEDAC_PG2_1: case WM8962_RETUNEDAC_PG2_0: case WM8962_RETUNEDAC_PG_1: case WM8962_RETUNEDAC_PG_0: case WM8962_DACR_RETUNE_C1_1: case WM8962_DACR_RETUNE_C1_0: case WM8962_DACR_RETUNE_C2_1: case WM8962_DACR_RETUNE_C2_0: case WM8962_DACR_RETUNE_C3_1: case WM8962_DACR_RETUNE_C3_0: case WM8962_DACR_RETUNE_C4_1: case WM8962_DACR_RETUNE_C4_0: case WM8962_DACR_RETUNE_C5_1: case WM8962_DACR_RETUNE_C5_0: case WM8962_DACR_RETUNE_C6_1: case WM8962_DACR_RETUNE_C6_0: case WM8962_DACR_RETUNE_C7_1: case WM8962_DACR_RETUNE_C7_0: case WM8962_DACR_RETUNE_C8_1: case WM8962_DACR_RETUNE_C8_0: case WM8962_DACR_RETUNE_C9_1: case WM8962_DACR_RETUNE_C9_0: case WM8962_DACR_RETUNE_C10_1: case WM8962_DACR_RETUNE_C10_0: case WM8962_DACR_RETUNE_C11_1: case WM8962_DACR_RETUNE_C11_0: case WM8962_DACR_RETUNE_C12_1: case WM8962_DACR_RETUNE_C12_0: case WM8962_DACR_RETUNE_C13_1: case WM8962_DACR_RETUNE_C13_0: case WM8962_DACR_RETUNE_C14_1: case WM8962_DACR_RETUNE_C14_0: case WM8962_DACR_RETUNE_C15_1: case WM8962_DACR_RETUNE_C15_0: case WM8962_DACR_RETUNE_C16_1: case WM8962_DACR_RETUNE_C16_0: case WM8962_DACR_RETUNE_C17_1: case WM8962_DACR_RETUNE_C17_0: case WM8962_DACR_RETUNE_C18_1: case WM8962_DACR_RETUNE_C18_0: case WM8962_DACR_RETUNE_C19_1: case WM8962_DACR_RETUNE_C19_0: case WM8962_DACR_RETUNE_C20_1: case WM8962_DACR_RETUNE_C20_0: case WM8962_DACR_RETUNE_C21_1: case WM8962_DACR_RETUNE_C21_0: case WM8962_DACR_RETUNE_C22_1: case WM8962_DACR_RETUNE_C22_0: case WM8962_DACR_RETUNE_C23_1: case WM8962_DACR_RETUNE_C23_0: case WM8962_DACR_RETUNE_C24_1: case WM8962_DACR_RETUNE_C24_0: case WM8962_DACR_RETUNE_C25_1: case WM8962_DACR_RETUNE_C25_0: case WM8962_DACR_RETUNE_C26_1: case WM8962_DACR_RETUNE_C26_0: case WM8962_DACR_RETUNE_C27_1: case WM8962_DACR_RETUNE_C27_0: case WM8962_DACR_RETUNE_C28_1: case WM8962_DACR_RETUNE_C28_0: case WM8962_DACR_RETUNE_C29_1: case WM8962_DACR_RETUNE_C29_0: case WM8962_DACR_RETUNE_C30_1: case WM8962_DACR_RETUNE_C30_0: case WM8962_DACR_RETUNE_C31_1: case WM8962_DACR_RETUNE_C31_0: case WM8962_DACR_RETUNE_C32_1: case WM8962_DACR_RETUNE_C32_0: case WM8962_VSS_XHD2_1: case WM8962_VSS_XHD2_0: case WM8962_VSS_XHD3_1: case WM8962_VSS_XHD3_0: case WM8962_VSS_XHN1_1: case WM8962_VSS_XHN1_0: case WM8962_VSS_XHN2_1: case WM8962_VSS_XHN2_0: case WM8962_VSS_XHN3_1: case WM8962_VSS_XHN3_0: case WM8962_VSS_XLA_1: case WM8962_VSS_XLA_0: case WM8962_VSS_XLB_1: case WM8962_VSS_XLB_0: case WM8962_VSS_XLG_1: case WM8962_VSS_XLG_0: case WM8962_VSS_PG2_1: case WM8962_VSS_PG2_0: case WM8962_VSS_PG_1: case WM8962_VSS_PG_0: case WM8962_VSS_XTD1_1: case WM8962_VSS_XTD1_0: case WM8962_VSS_XTD2_1: case WM8962_VSS_XTD2_0: case WM8962_VSS_XTD3_1: case WM8962_VSS_XTD3_0: case WM8962_VSS_XTD4_1: case WM8962_VSS_XTD4_0: case WM8962_VSS_XTD5_1: case WM8962_VSS_XTD5_0: case WM8962_VSS_XTD6_1: case WM8962_VSS_XTD6_0: case WM8962_VSS_XTD7_1: case WM8962_VSS_XTD7_0: case WM8962_VSS_XTD8_1: case WM8962_VSS_XTD8_0: case WM8962_VSS_XTD9_1: case WM8962_VSS_XTD9_0: case WM8962_VSS_XTD10_1: case WM8962_VSS_XTD10_0: case WM8962_VSS_XTD11_1: case WM8962_VSS_XTD11_0: case WM8962_VSS_XTD12_1: case WM8962_VSS_XTD12_0: case WM8962_VSS_XTD13_1: case WM8962_VSS_XTD13_0: case WM8962_VSS_XTD14_1: case WM8962_VSS_XTD14_0: case WM8962_VSS_XTD15_1: case WM8962_VSS_XTD15_0: case WM8962_VSS_XTD16_1: case WM8962_VSS_XTD16_0: case WM8962_VSS_XTD17_1: case WM8962_VSS_XTD17_0: case WM8962_VSS_XTD18_1: case WM8962_VSS_XTD18_0: case WM8962_VSS_XTD19_1: case WM8962_VSS_XTD19_0: case WM8962_VSS_XTD20_1: case WM8962_VSS_XTD20_0: case WM8962_VSS_XTD21_1: case WM8962_VSS_XTD21_0: case WM8962_VSS_XTD22_1: case WM8962_VSS_XTD22_0: case WM8962_VSS_XTD23_1: case WM8962_VSS_XTD23_0: case WM8962_VSS_XTD24_1: case WM8962_VSS_XTD24_0: case WM8962_VSS_XTD25_1: case WM8962_VSS_XTD25_0: case WM8962_VSS_XTD26_1: case WM8962_VSS_XTD26_0: case WM8962_VSS_XTD27_1: case WM8962_VSS_XTD27_0: case WM8962_VSS_XTD28_1: case WM8962_VSS_XTD28_0: case WM8962_VSS_XTD29_1: case WM8962_VSS_XTD29_0: case WM8962_VSS_XTD30_1: case WM8962_VSS_XTD30_0: case WM8962_VSS_XTD31_1: case WM8962_VSS_XTD31_0: case WM8962_VSS_XTD32_1: case WM8962_VSS_XTD32_0: case WM8962_VSS_XTS1_1: case WM8962_VSS_XTS1_0: case WM8962_VSS_XTS2_1: case WM8962_VSS_XTS2_0: case WM8962_VSS_XTS3_1: case WM8962_VSS_XTS3_0: case WM8962_VSS_XTS4_1: case WM8962_VSS_XTS4_0: case WM8962_VSS_XTS5_1: case WM8962_VSS_XTS5_0: case WM8962_VSS_XTS6_1: case WM8962_VSS_XTS6_0: case WM8962_VSS_XTS7_1: case WM8962_VSS_XTS7_0: case WM8962_VSS_XTS8_1: case WM8962_VSS_XTS8_0: case WM8962_VSS_XTS9_1: case WM8962_VSS_XTS9_0: case WM8962_VSS_XTS10_1: case WM8962_VSS_XTS10_0: case WM8962_VSS_XTS11_1: case WM8962_VSS_XTS11_0: case WM8962_VSS_XTS12_1: case WM8962_VSS_XTS12_0: case WM8962_VSS_XTS13_1: case WM8962_VSS_XTS13_0: case WM8962_VSS_XTS14_1: case WM8962_VSS_XTS14_0: case WM8962_VSS_XTS15_1: case WM8962_VSS_XTS15_0: case WM8962_VSS_XTS16_1: case WM8962_VSS_XTS16_0: case WM8962_VSS_XTS17_1: case WM8962_VSS_XTS17_0: case WM8962_VSS_XTS18_1: case WM8962_VSS_XTS18_0: case WM8962_VSS_XTS19_1: case WM8962_VSS_XTS19_0: case WM8962_VSS_XTS20_1: case WM8962_VSS_XTS20_0: case WM8962_VSS_XTS21_1: case WM8962_VSS_XTS21_0: case WM8962_VSS_XTS22_1: case WM8962_VSS_XTS22_0: case WM8962_VSS_XTS23_1: case WM8962_VSS_XTS23_0: case WM8962_VSS_XTS24_1: case WM8962_VSS_XTS24_0: case WM8962_VSS_XTS25_1: case WM8962_VSS_XTS25_0: case WM8962_VSS_XTS26_1: case WM8962_VSS_XTS26_0: case WM8962_VSS_XTS27_1: case WM8962_VSS_XTS27_0: case WM8962_VSS_XTS28_1: case WM8962_VSS_XTS28_0: case WM8962_VSS_XTS29_1: case WM8962_VSS_XTS29_0: case WM8962_VSS_XTS30_1: case WM8962_VSS_XTS30_0: case WM8962_VSS_XTS31_1: case WM8962_VSS_XTS31_0: case WM8962_VSS_XTS32_1: case WM8962_VSS_XTS32_0: returntrue; default: returnfalse;
}
}
staticint wm8962_reset(struct wm8962_priv *wm8962)
{ int ret;
ret = regmap_write(wm8962->regmap, WM8962_SOFTWARE_RESET, 0x6243); if (ret != 0) return ret;
if (dsp2_running) { if (wm8962->dsp2_ena)
wm8962_dsp2_set_enable(component, wm8962->dsp2_ena); else
wm8962_dsp2_stop(component);
}
out:
mutex_unlock(&wm8962->dsp2_ena_lock);
return ret;
}
/* The VU bits for the headphones are in a different register to the mute * bits and only take effect on the PGA if it is actually powered.
*/ staticint wm8962_put_hp_sw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
{ struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); int ret;
/* Apply the update (if any) */
ret = snd_soc_put_volsw(kcontrol, ucontrol); if (ret == 0) return 0;
/* If the left PGA is enabled hit that VU bit... */
ret = snd_soc_component_read(component, WM8962_PWR_MGMT_2); if (ret & WM8962_HPOUTL_PGA_ENA) {
snd_soc_component_write(component, WM8962_HPOUTL_VOLUME,
snd_soc_component_read(component, WM8962_HPOUTL_VOLUME)); return 1;
}
/* ...otherwise the right. The VU is stereo. */ if (ret & WM8962_HPOUTR_PGA_ENA)
snd_soc_component_write(component, WM8962_HPOUTR_VOLUME,
snd_soc_component_read(component, WM8962_HPOUTR_VOLUME));
return 1;
}
/* The VU bits for the speakers are in a different register to the mute * bits and only take effect on the PGA if it is actually powered.
*/ staticint wm8962_put_spk_sw(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol)
{ struct snd_soc_component *component = snd_soc_kcontrol_component(kcontrol); int ret;
/* Apply the update (if any) */
ret = snd_soc_put_volsw(kcontrol, ucontrol); if (ret == 0) return 0;
/* If the left PGA is enabled hit that VU bit... */
ret = snd_soc_component_read(component, WM8962_PWR_MGMT_2); if (ret & WM8962_SPKOUTL_PGA_ENA) {
snd_soc_component_write(component, WM8962_SPKOUTL_VOLUME,
snd_soc_component_read(component, WM8962_SPKOUTL_VOLUME)); return 1;
}
/* ...otherwise the right. The VU is stereo. */ if (ret & WM8962_SPKOUTR_PGA_ENA)
snd_soc_component_write(component, WM8962_SPKOUTR_VOLUME,
snd_soc_component_read(component, WM8962_SPKOUTR_VOLUME));
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.