1 /* 2 * arch/arm/plat-omap/include/mach2/eac.h 3 * 4 * Defines for Enhanced Audio Controller 5 * 6 * Contact: Jarkko Nikula <jarkko.nikula@nokia.com> 7 * 8 * Copyright (C) 2006 Nokia Corporation 9 * Copyright (C) 2004 Texas Instruments, Inc. 10 * 11 * This program is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU General Public License 13 * version 2 as published by the Free Software Foundation. 14 * 15 * This program is distributed in the hope that it will be useful, but 16 * WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 18 * General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 23 * 02110-1301 USA 24 * 25 */ 26 27 #ifndef __ASM_ARM_ARCH_OMAP2_EAC_H 28 #define __ASM_ARM_ARCH_OMAP2_EAC_H 29 30 #include <mach/io.h> 31 #include <mach/hardware.h> 32 #include <asm/irq.h> 33 34 #include <sound/core.h> 35 36 /* master codec clock source */ 37 #define EAC_MCLK_EXT_MASK 0x100 38 enum eac_mclk_src { 39 EAC_MCLK_INT_11290000, /* internal 96 MHz / 8.5 = 11.29 Mhz */ 40 EAC_MCLK_EXT_11289600 = EAC_MCLK_EXT_MASK, 41 EAC_MCLK_EXT_12288000, 42 EAC_MCLK_EXT_2x11289600, 43 EAC_MCLK_EXT_2x12288000, 44 }; 45 46 /* codec port interface mode */ 47 enum eac_codec_mode { 48 EAC_CODEC_PCM, 49 EAC_CODEC_AC97, 50 EAC_CODEC_I2S_MASTER, /* codec port, I.e. EAC is the master */ 51 EAC_CODEC_I2S_SLAVE, 52 }; 53 54 /* configuration structure for I2S mode */ 55 struct eac_i2s_conf { 56 /* if enabled, then first data slot (left channel) is signaled as 57 * positive level of frame sync EAC.AC_FS */ 58 unsigned polarity_changed_mode:1; 59 /* if enabled, then serial data starts one clock cycle after the 60 * of EAC.AC_FS for first audio slot */ 61 unsigned sync_delay_enable:1; 62 }; 63 64 /* configuration structure for EAC codec port */ 65 struct eac_codec { 66 enum eac_mclk_src mclk_src; 67 68 enum eac_codec_mode codec_mode; 69 union { 70 struct eac_i2s_conf i2s; 71 } codec_conf; 72 73 int default_rate; /* audio sampling rate */ 74 75 int (* set_power)(void *private_data, int dac, int adc); 76 int (* register_controls)(void *private_data, 77 struct snd_card *card); 78 const char *short_name; 79 80 void *private_data; 81 }; 82 83 /* structure for passing platform dependent data to the EAC driver */ 84 struct eac_platform_data { 85 int (* init)(struct device *eac_dev); 86 void (* cleanup)(struct device *eac_dev); 87 /* these callbacks are used to configure & control external MCLK 88 * source. NULL if not used */ 89 int (* enable_ext_clocks)(struct device *eac_dev); 90 void (* disable_ext_clocks)(struct device *eac_dev); 91 }; 92 93 extern void omap_init_eac(struct eac_platform_data *pdata); 94 95 extern int eac_register_codec(struct device *eac_dev, struct eac_codec *codec); 96 extern void eac_unregister_codec(struct device *eac_dev); 97 98 extern int eac_set_mode(struct device *eac_dev, int play, int rec); 99 100 #endif /* __ASM_ARM_ARCH_OMAP2_EAC_H */ 101