Merge tag 'pm+acpi-for-3.8-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git...
[platform/adaptation/renesas_rcar/renesas_kernel.git] / include / sound / sh_fsi.h
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 */