/* * at91-pcm.h - ALSA PCM interface for the Atmel AT91 SoC. * * Copyright (C) 2005 SAN People * Copyright (C) 2008 Atmel * * Authors: Sedji Gaouaou <sedji.gaouaou@atmel.com> * * Based on at91-pcm. by: * Frank Mandarino <fmandarino@endrelia.com> * Copyright 2006 Endrelia Technologies Inc. * * Based on pxa2xx-pcm.c by: * * Author: Nicolas Pitre * Created: Nov 30, 2004 * Copyright: (C) 2004 MontaVista Software, Inc. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #ifndef _ATMEL_PCM_H #define _ATMEL_PCM_H #include <linux/atmel-ssc.h> #define ATMEL_SSC_DMABUF_SIZE (64 * 1024) /* * Registers and status bits that are required by the PCM driver. */ struct atmel_pdc_regs { unsigned int xpr; /* PDC recv/trans pointer */ unsigned int xcr; /* PDC recv/trans counter */ unsigned int xnpr; /* PDC next recv/trans pointer */ unsigned int xncr; /* PDC next recv/trans counter */ unsigned int ptcr; /* PDC transfer control */ }; struct atmel_ssc_mask { u32 ssc_enable; /* SSC recv/trans enable */ u32 ssc_disable; /* SSC recv/trans disable */ u32 ssc_error; /* SSC error conditions */ u32 ssc_endx; /* SSC ENDTX or ENDRX */ u32 ssc_endbuf; /* SSC TXBUFE or RXBUFF */ u32 pdc_enable; /* PDC recv/trans enable */ u32 pdc_disable; /* PDC recv/trans disable */ }; /* * This structure, shared between the PCM driver and the interface, * contains all information required by the PCM driver to perform the * PDC DMA operation. All fields except dma_intr_handler() are initialized * by the interface. The dma_intr_handler() pointer is set by the PCM * driver and called by the interface SSC interrupt handler if it is * non-NULL. */ struct atmel_pcm_dma_params { char *name; /* stream identifier */ int pdc_xfer_size; /* PDC counter increment in bytes */ struct ssc_device *ssc; /* SSC device for stream */ struct atmel_pdc_regs *pdc; /* PDC receive or transmit registers */ struct atmel_ssc_mask *mask; /* SSC & PDC status bits */ struct snd_pcm_substream *substream; void (*dma_intr_handler)(u32, struct snd_pcm_substream *); }; /* * SSC register access (since ssc_writel() / ssc_readl() require literal name) */ #define ssc_readx(base, reg) (__raw_readl((base) + (reg))) #define ssc_writex(base, reg, value) __raw_writel((value), (base) + (reg)) #if defined(CONFIG_SND_ATMEL_SOC_PDC) || \ defined(CONFIG_SND_ATMEL_SOC_PDC_MODULE) int atmel_pcm_pdc_platform_register(struct device *dev); void atmel_pcm_pdc_platform_unregister(struct device *dev); #else static inline int atmel_pcm_pdc_platform_register(struct device *dev) { return 0; } static inline void atmel_pcm_pdc_platform_unregister(struct device *dev) { } #endif #if defined(CONFIG_SND_ATMEL_SOC_DMA) || \ defined(CONFIG_SND_ATMEL_SOC_DMA_MODULE) int atmel_pcm_dma_platform_register(struct device *dev); void atmel_pcm_dma_platform_unregister(struct device *dev); #else static inline int atmel_pcm_dma_platform_register(struct device *dev) { return 0; } static inline void atmel_pcm_dma_platform_unregister(struct device *dev) { } #endif #endif /* _ATMEL_PCM_H */ 7'>7</option><option value='8'>8</option><option value='9'>9</option><option value='10'>10</option><option value='15'>15</option><option value='20'>20</option><option value='25'>25</option><option value='30'>30</option><option value='35'>35</option><option value='40'>40</option></select></td></tr><tr><td class='label'>space:</td><td class='ctrl'><select name='ignorews' onchange='this.form.submit();'><option value='0' selected='selected'>include</option><option value='1'>ignore</option></select></td></tr><tr><td class='label'>mode:</td><td class='ctrl'><select name='dt' onchange='this.form.submit();'><option value='0' selected='selected'>unified</option><option value='1'>ssdiff</option><option value='2'>stat only</option></select></td></tr><tr><td/><td class='ctrl'><noscript><input type='submit' value='reload'/></noscript></td></tr></table></form></div><table summary='commit info' class='commit-info'> <tr><th>author</th><td>Thomas Gleixner <tglx@linutronix.de></td><td class='right'>2017-01-31 19:03:21 +0100</td></tr> <tr><th>committer</th><td>Thomas Gleixner <tglx@linutronix.de></td><td class='right'>2017-01-31 20:22:18 +0100</td></tr> <tr><th>commit</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/sound/soc/codecs/cs53l30.c?id=aaaec6fc755447a1d056765b11b24d8ff2b81366'>aaaec6fc755447a1d056765b11b24d8ff2b81366</a> (<a href='/cgit.cgi/linux/net-next.git/patch/sound/soc/codecs/cs53l30.c?id=aaaec6fc755447a1d056765b11b24d8ff2b81366'>patch</a>)</td></tr> <tr><th>tree</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/tree/?id=aaaec6fc755447a1d056765b11b24d8ff2b81366'>a7f4167960ee1df86739905b6ccdeb95465bfe5f</a> /<a href='/cgit.cgi/linux/net-next.git/tree/sound/soc/codecs/cs53l30.c?id=aaaec6fc755447a1d056765b11b24d8ff2b81366'>sound/soc/codecs/cs53l30.c</a></td></tr> <tr><th>parent</th><td colspan='2' class='oid'><a href='/cgit.cgi/linux/net-next.git/commit/sound/soc/codecs/cs53l30.c?id=08d85f3ea99f1eeafc4e8507936190e86a16ee8c'>08d85f3ea99f1eeafc4e8507936190e86a16ee8c</a> (<a href='/cgit.cgi/linux/net-next.git/diff/sound/soc/codecs/cs53l30.c?id=aaaec6fc755447a1d056765b11b24d8ff2b81366&id2=08d85f3ea99f1eeafc4e8507936190e86a16ee8c'>diff</a>)</td></tr></table> <div class='commit-subject'>x86/irq: Make irq activate operations symmetric</div><div class='commit-msg'>The recent commit which prevents double activation of interrupts unearthed interesting code in x86. The code (ab)uses irq_domain_activate_irq() to reconfigure an already activated interrupt. That trips over the prevention code now. Fix it by deactivating the interrupt before activating the new configuration. Fixes: 08d85f3ea99f1 "irqdomain: Avoid activating interrupts more than once" Reported-and-tested-by: Mike Galbraith <efault@gmx.de> Reported-and-tested-by: Borislav Petkov <bp@alien8.de> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Andrey Ryabinin <aryabinin@virtuozzo.com> Cc: Marc Zyngier <marc.zyngier@arm.com> Cc: stable@vger.kernel.org Link: http://lkml.kernel.org/r/alpine.DEB.2.20.1701311901580.3457@nanos </div><div class='diffstat-header'><a href='/cgit.cgi/linux/net-next.git/diff/?id=aaaec6fc755447a1d056765b11b24d8ff2b81366'>Diffstat</a> (limited to 'sound/soc/codecs/cs53l30.c')</div><table summary='diffstat' class='diffstat'>