xref: /openbmc/linux/include/sound/sh_fsi.h (revision b6bec26c)
1 #ifndef __SOUND_FSI_H
2 #define __SOUND_FSI_H
3 
4 /*
5  * Fifo-attached Serial Interface (FSI) support for SH7724
6  *
7  * Copyright (C) 2009 Renesas Solutions Corp.
8  * Kuninori Morimoto <morimoto.kuninori@renesas.com>
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License version 2 as
12  * published by the Free Software Foundation.
13  */
14 
15 #define FSI_PORT_A	0
16 #define FSI_PORT_B	1
17 
18 #include <linux/clk.h>
19 #include <sound/soc.h>
20 
21 /*
22  * flags format
23  *
24  * 0x00000CBA
25  *
26  * A:  inversion
27  * B:  format mode
28  * C:  chip specific
29  * D:  clock selecter if master mode
30  */
31 
32 /* A: clock inversion */
33 #define SH_FSI_INVERSION_MASK	0x0000000F
34 #define SH_FSI_LRM_INV		(1 << 0)
35 #define SH_FSI_BRM_INV		(1 << 1)
36 #define SH_FSI_LRS_INV		(1 << 2)
37 #define SH_FSI_BRS_INV		(1 << 3)
38 
39 /* B: format mode */
40 #define SH_FSI_FMT_MASK		0x000000F0
41 #define SH_FSI_FMT_DAI		(0 << 4)
42 #define SH_FSI_FMT_SPDIF	(1 << 4)
43 
44 /* C: chip specific */
45 #define SH_FSI_OPTION_MASK	0x00000F00
46 #define SH_FSI_ENABLE_STREAM_MODE	(1 << 8) /* for 16bit data */
47 
48 /* D:  clock selecter if master mode */
49 #define SH_FSI_CLK_MASK		0x0000F000
50 #define SH_FSI_CLK_EXTERNAL	(0 << 12)
51 #define SH_FSI_CLK_CPG		(1 << 12) /* FSIxCK + FSI-DIV */
52 
53 /*
54  * set_rate return value
55  *
56  * see ACKMD/BPFMD on
57  *     ACK_MD (FSI2)
58  *     CKG1   (FSI)
59  *
60  * err		: return value <  0
61  * no change	: return value == 0
62  * change xMD	: return value >  0
63  *
64  * 0x-00000AB
65  *
66  * A:  ACKMD value
67  * B:  BPFMD value
68  */
69 
70 #define SH_FSI_ACKMD_MASK	(0xF << 0)
71 #define SH_FSI_ACKMD_512	(1 << 0)
72 #define SH_FSI_ACKMD_256	(2 << 0)
73 #define SH_FSI_ACKMD_128	(3 << 0)
74 #define SH_FSI_ACKMD_64		(4 << 0)
75 #define SH_FSI_ACKMD_32		(5 << 0)
76 
77 #define SH_FSI_BPFMD_MASK	(0xF << 4)
78 #define SH_FSI_BPFMD_512	(1 << 4)
79 #define SH_FSI_BPFMD_256	(2 << 4)
80 #define SH_FSI_BPFMD_128	(3 << 4)
81 #define SH_FSI_BPFMD_64		(4 << 4)
82 #define SH_FSI_BPFMD_32		(5 << 4)
83 #define SH_FSI_BPFMD_16		(6 << 4)
84 
85 struct sh_fsi_port_info {
86 	unsigned long flags;
87 	int tx_id;
88 	int rx_id;
89 	int (*set_rate)(struct device *dev, int rate, int enable);
90 };
91 
92 struct sh_fsi_platform_info {
93 	struct sh_fsi_port_info port_a;
94 	struct sh_fsi_port_info port_b;
95 };
96 
97 #endif /* __SOUND_FSI_H */
98