1a4d7d550SKuninori Morimoto #ifndef __SOUND_FSI_H 2a4d7d550SKuninori Morimoto #define __SOUND_FSI_H 3a4d7d550SKuninori Morimoto 4a4d7d550SKuninori Morimoto /* 5a4d7d550SKuninori Morimoto * Fifo-attached Serial Interface (FSI) support for SH7724 6a4d7d550SKuninori Morimoto * 7a4d7d550SKuninori Morimoto * Copyright (C) 2009 Renesas Solutions Corp. 8a4d7d550SKuninori Morimoto * Kuninori Morimoto <morimoto.kuninori@renesas.com> 9a4d7d550SKuninori Morimoto * 10a4d7d550SKuninori Morimoto * This program is free software; you can redistribute it and/or modify 11a4d7d550SKuninori Morimoto * it under the terms of the GNU General Public License version 2 as 12a4d7d550SKuninori Morimoto * published by the Free Software Foundation. 13a4d7d550SKuninori Morimoto */ 14a4d7d550SKuninori Morimoto 153c2ef841SKuninori Morimoto #define FSI_PORT_A 0 163c2ef841SKuninori Morimoto #define FSI_PORT_B 1 173c2ef841SKuninori Morimoto 18a4d7d550SKuninori Morimoto #include <linux/clk.h> 19a4d7d550SKuninori Morimoto #include <sound/soc.h> 20a4d7d550SKuninori Morimoto 21f17c13caSKuninori Morimoto /* 22f17c13caSKuninori Morimoto * flags format 23f17c13caSKuninori Morimoto * 24f17c13caSKuninori Morimoto * 0x000000BA 25f17c13caSKuninori Morimoto * 26f17c13caSKuninori Morimoto * A: inversion 27f17c13caSKuninori Morimoto * B: format mode 28f17c13caSKuninori Morimoto */ 29a4d7d550SKuninori Morimoto 30f17c13caSKuninori Morimoto /* A: clock inversion */ 31f17c13caSKuninori Morimoto #define SH_FSI_INVERSION_MASK 0x0000000F 32f17c13caSKuninori Morimoto #define SH_FSI_LRM_INV (1 << 0) 33f17c13caSKuninori Morimoto #define SH_FSI_BRM_INV (1 << 1) 34f17c13caSKuninori Morimoto #define SH_FSI_LRS_INV (1 << 2) 35f17c13caSKuninori Morimoto #define SH_FSI_BRS_INV (1 << 3) 36a4d7d550SKuninori Morimoto 37f17c13caSKuninori Morimoto /* B: format mode */ 38f17c13caSKuninori Morimoto #define SH_FSI_FMT_MASK 0x000000F0 39f17c13caSKuninori Morimoto #define SH_FSI_FMT_DAI (0 << 4) 40f17c13caSKuninori Morimoto #define SH_FSI_FMT_SPDIF (1 << 4) 41a4d7d550SKuninori Morimoto 42ccad7b44SKuninori Morimoto 43ccad7b44SKuninori Morimoto /* 44ccad7b44SKuninori Morimoto * set_rate return value 45ccad7b44SKuninori Morimoto * 46ccad7b44SKuninori Morimoto * see ACKMD/BPFMD on 47ccad7b44SKuninori Morimoto * ACK_MD (FSI2) 48ccad7b44SKuninori Morimoto * CKG1 (FSI) 49ccad7b44SKuninori Morimoto * 50ccad7b44SKuninori Morimoto * err : return value < 0 51d4bc99b9SKuninori Morimoto * no change : return value == 0 52d4bc99b9SKuninori Morimoto * change xMD : return value > 0 53ccad7b44SKuninori Morimoto * 54ccad7b44SKuninori Morimoto * 0x-00000AB 55ccad7b44SKuninori Morimoto * 56ccad7b44SKuninori Morimoto * A: ACKMD value 57ccad7b44SKuninori Morimoto * B: BPFMD value 58ccad7b44SKuninori Morimoto */ 59ccad7b44SKuninori Morimoto 60ccad7b44SKuninori Morimoto #define SH_FSI_ACKMD_MASK (0xF << 0) 61ccad7b44SKuninori Morimoto #define SH_FSI_ACKMD_512 (1 << 0) 62ccad7b44SKuninori Morimoto #define SH_FSI_ACKMD_256 (2 << 0) 63ccad7b44SKuninori Morimoto #define SH_FSI_ACKMD_128 (3 << 0) 64ccad7b44SKuninori Morimoto #define SH_FSI_ACKMD_64 (4 << 0) 65ccad7b44SKuninori Morimoto #define SH_FSI_ACKMD_32 (5 << 0) 66ccad7b44SKuninori Morimoto 67ccad7b44SKuninori Morimoto #define SH_FSI_BPFMD_MASK (0xF << 4) 68ccad7b44SKuninori Morimoto #define SH_FSI_BPFMD_512 (1 << 4) 69ccad7b44SKuninori Morimoto #define SH_FSI_BPFMD_256 (2 << 4) 70ccad7b44SKuninori Morimoto #define SH_FSI_BPFMD_128 (3 << 4) 71ccad7b44SKuninori Morimoto #define SH_FSI_BPFMD_64 (4 << 4) 72ccad7b44SKuninori Morimoto #define SH_FSI_BPFMD_32 (5 << 4) 73ccad7b44SKuninori Morimoto #define SH_FSI_BPFMD_16 (6 << 4) 74ccad7b44SKuninori Morimoto 75fec691e7SKuninori Morimoto struct sh_fsi_port_info { 76fec691e7SKuninori Morimoto unsigned long flags; 777da9ced6SKuninori Morimoto int tx_id; 787da9ced6SKuninori Morimoto int rx_id; 79fec691e7SKuninori Morimoto int (*set_rate)(struct device *dev, int rate, int enable); 80fec691e7SKuninori Morimoto }; 81fec691e7SKuninori Morimoto 82a4d7d550SKuninori Morimoto struct sh_fsi_platform_info { 83fec691e7SKuninori Morimoto struct sh_fsi_port_info port_a; 84fec691e7SKuninori Morimoto struct sh_fsi_port_info port_b; 85a4d7d550SKuninori Morimoto }; 86a4d7d550SKuninori Morimoto 8745f31216SKuninori Morimoto /* 8845f31216SKuninori Morimoto * for fsi-ak4642 8945f31216SKuninori Morimoto */ 9045f31216SKuninori Morimoto struct fsi_ak4642_info { 9145f31216SKuninori Morimoto const char *name; 9245f31216SKuninori Morimoto const char *card; 9345f31216SKuninori Morimoto const char *cpu_dai; 9445f31216SKuninori Morimoto const char *codec; 9545f31216SKuninori Morimoto const char *platform; 9645f31216SKuninori Morimoto int id; 9745f31216SKuninori Morimoto }; 9845f31216SKuninori Morimoto 99a4d7d550SKuninori Morimoto #endif /* __SOUND_FSI_H */ 100