/* * This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. * * Copyright 2003 Vivien Chappelier * Copyright 2008 Thomas Bogendoerfer */ #ifndef __SOUND_AD1843_H #define __SOUND_AD1843_H struct snd_ad1843 { void *chip; int (*read)(void *chip, int reg); int (*write)(void *chip, int reg, int val); }; #define AD1843_GAIN_RECLEV 0 #define AD1843_GAIN_LINE 1 #define AD1843_GAIN_LINE_2 2 #define AD1843_GAIN_MIC 3 #define AD1843_GAIN_PCM_0 4 #define AD1843_GAIN_PCM_1 5 #define AD1843_GAIN_SIZE (AD1843_GAIN_PCM_1+1) int ad1843_get_gain_max(struct snd_ad1843 *ad1843, int id); int ad1843_get_gain(struct snd_ad1843 *ad1843, int id); int ad1843_set_gain(struct snd_ad1843 *ad1843, int id, int newval); int ad1843_get_recsrc(struct snd_ad1843 *ad1843); int ad1843_set_recsrc(struct snd_ad1843 *ad1843, int newsrc); void ad1843_setup_dac(struct snd_ad1843 *ad1843, unsigned int id, unsigned int framerate, snd_pcm_format_t fmt, unsigned int channels); void ad1843_shutdown_dac(struct snd_ad1843 *ad1843, unsigned int id); void ad1843_setup_adc(struct snd_ad1843 *ad1843, unsigned int framerate, snd_pcm_format_t fmt, unsigned int channels); void ad1843_shutdown_adc(struct snd_ad1843 *ad1843); int ad1843_init(struct snd_ad1843 *ad1843); #endif /* __SOUND_AD1843_H */ summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-01-31 09:37:34 +0100
committerThomas Gleixner <tglx@linutronix.de>2017-01-31 21:47:58 +0100
commit0becc0ae5b42828785b589f686725ff5bc3b9b25 (patch)
treebe6d0e1f37c38ed0a7dd5da2d4b1e93f0fb43101 /net/802/garp.c
parent24c2503255d35c269b67162c397a1a1c1e02f6ce (diff)
x86/mce: Make timer handling more robust
Erik reported that on a preproduction hardware a CMCI storm triggers the BUG_ON in add_timer_on(). The reason is that the per CPU MCE timer is started by the CMCI logic before the MCE CPU hotplug callback starts the timer with add_timer_on(). So the timer is already queued which triggers the BUG. Using add_timer_on() is pretty pointless in this code because the timer is strictlty per CPU, initialized as pinned and all operations which arm the timer happen on the CPU to which the timer belongs. Simplify the whole machinery by using mod_timer() instead of add_timer_on() which avoids the problem because mod_timer() can handle already queued timers. Use __start_timer() everywhere so the earliest armed expiry time is preserved. Reported-by: Erik Veijola <erik.veijola@intel.com> Tested-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Reviewed-by: Borislav Petkov <bp@alien8.de> Cc: Tony Luck <tony.luck@intel.com> Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1701310936080.3457@nanos Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'net/802/garp.c')