linux-stable/sound/soc/codecs/wm_hubs.h
Mark Brown 94aa733a47 ASoC: wm_hubs: Cache multiple DCS offsets
Rather than invalidating the cached DCS value every time the headphone
gain changes store multiple values, indexed by gain. This allows the
optimisation we get from the cache to take effect more often.

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
2012-05-01 19:21:07 +01:00

68 lines
1.8 KiB
C

/*
* wm_hubs.h -- WM899x common code
*
* Copyright 2009 Wolfson Microelectronics plc
*
* Author: Mark Brown <broonie@opensource.wolfsonmicro.com>
*
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*/
#ifndef _WM_HUBS_H
#define _WM_HUBS_H
#include <linux/completion.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <sound/control.h>
struct snd_soc_codec;
extern const unsigned int wm_hubs_spkmix_tlv[];
/* This *must* be the first element of the codec->private_data struct */
struct wm_hubs_data {
int dcs_codes_l;
int dcs_codes_r;
int dcs_readback_mode;
int hp_startup_mode;
int series_startup;
int no_series_update;
bool no_cache_dac_hp_direct;
struct list_head dcs_cache;
bool (*check_class_w_digital)(struct snd_soc_codec *);
bool lineout1_se;
bool lineout1n_ena;
bool lineout1p_ena;
bool lineout2_se;
bool lineout2n_ena;
bool lineout2p_ena;
bool dcs_done_irq;
struct completion dcs_done;
};
extern int wm_hubs_add_analogue_controls(struct snd_soc_codec *);
extern int wm_hubs_add_analogue_routes(struct snd_soc_codec *, int, int);
extern int wm_hubs_handle_analogue_pdata(struct snd_soc_codec *,
int lineout1_diff, int lineout2_diff,
int lineout1fb, int lineout2fb,
int jd_scthr, int jd_thr,
int micbias1_lvl, int micbias2_lvl);
extern irqreturn_t wm_hubs_dcs_done(int irq, void *data);
extern void wm_hubs_vmid_ena(struct snd_soc_codec *codec);
extern void wm_hubs_set_bias_level(struct snd_soc_codec *codec,
enum snd_soc_bias_level level);
extern void wm_hubs_update_class_w(struct snd_soc_codec *codec);
extern const struct snd_kcontrol_new wm_hubs_hpl_mux;
extern const struct snd_kcontrol_new wm_hubs_hpr_mux;
#endif