misc: cec: add worker handler for resume
[linux-3.10.git] / drivers / misc / tegra-cec / tegra_cec.h
1 /*
2  * drivers/misc/tegra-cec/tegra_cec.h
3  *
4  * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms and conditions of the GNU General Public License,
8  * version 2, as published by the Free Software Foundation.
9  *
10  * This program is distributed in the hope it will be useful, but WITHOUT
11  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13  * more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  */
18
19 #include <linux/pm.h>
20
21
22 struct tegra_cec {
23         struct device           *dev;
24         struct miscdevice       misc_dev;
25         struct clk              *clk;
26         void __iomem            *cec_base;
27         int                     tegra_cec_irq;
28         wait_queue_head_t       rx_waitq;
29         wait_queue_head_t       tx_waitq;
30         unsigned int            rx_wake;
31         unsigned int            tx_wake;
32         unsigned short          rx_buffer;
33         struct work_struct      work;
34 };
35 static int tegra_cec_remove(struct platform_device *pdev);
36
37 /*CEC Timing registers*/
38 #define TEGRA_CEC_SW_CONTROL     0X000
39 #define TEGRA_CEC_HW_CONTROL     0X004
40 #define TEGRA_CEC_INPUT_FILTER   0X008
41 #define TEGRA_CEC_TX_REGISTER    0X010
42 #define TEGRA_CEC_RX_REGISTER    0X014
43 #define TEGRA_CEC_RX_TIMING_0    0X018
44 #define TEGRA_CEC_RX_TIMING_1    0X01C
45 #define TEGRA_CEC_RX_TIMING_2    0X020
46 #define TEGRA_CEC_TX_TIMING_0    0X024
47 #define TEGRA_CEC_TX_TIMING_1    0X028
48 #define TEGRA_CEC_TX_TIMING_2    0X02C
49 #define TEGRA_CEC_INT_STAT       0X030
50 #define TEGRA_CEC_INT_MASK       0X034
51 #define TEGRA_CEC_HW_DEBUG_RX    0X038
52 #define TEGRA_CEC_HW_DEBUG_TX    0X03C
53
54 #define TEGRA_CEC_LOGICAL_ADDR  0x10
55
56 #define TEGRA_CEC_HW_CONTROL_RX_LOGICAL_ADDRS_MASK      0
57 #define TEGRA_CEC_HW_CONTROL_RX_SNOOP                   (1<<15)
58 #define TEGRA_CEC_HW_CONTROL_RX_NAK_MODE                (1<<16)
59 #define TEGRA_CEC_HW_CONTROL_TX_NAK_MODE                (1<<24)
60 #define TEGRA_CEC_HW_CONTROL_FAST_SIM_MODE              (1<<30)
61 #define TEGRA_CEC_HW_CONTROL_TX_RX_MODE                 (1<<31)
62
63 #define TEGRA_CEC_INPUT_FILTER_MODE             (1<<31)
64 #define TEGRA_CEC_INPUT_FILTER_FIFO_LENGTH_MASK 0
65
66 #define TEGRA_CEC_TX_REGISTER_DATA_MASK                 0
67 #define TEGRA_CEC_TX_REGISTER_EOM_MASK                  8
68 #define TEGRA_CEC_TX_REGISTER_ADDRESS_MODE_MASK         12
69 #define TEGRA_CEC_TX_REGISTER_GENERATE_START_BIT_MASK   16
70 #define TEGRA_CEC_TX_REGISTER_RETRY_FRAME_MASK          17
71
72 #define TEGRA_CEC_RX_REGISTER_MASK       0
73 #define TEGRA_CEC_RX_REGISTER_EOM        (1<<8)
74 #define TEGRA_CEC_RX_REGISTER_ACK        (1<<9)
75
76 #define TEGRA_CEC_RX_TIMING_0_RX_START_BIT_MAX_LO_TIME_MASK      0
77 #define TEGRA_CEC_RX_TIMING_0_RX_START_BIT_MIN_LO_TIME_MASK      8
78 #define TEGRA_CEC_RX_TIMING_0_RX_START_BIT_MAX_DURATION_MASK     16
79 #define TEGRA_CEC_RX_TIMING_0_RX_START_BIT_MIN_DURATION_MASK     24
80
81 #define TEGRA_CEC_RX_TIMING_1_RX_DATA_BIT_MAX_LO_TIME_MASK       0
82 #define TEGRA_CEC_RX_TIMING_1_RX_DATA_BIT_SAMPLE_TIME_MASK       8
83 #define TEGRA_CEC_RX_TIMING_1_RX_DATA_BIT_MAX_DURATION_MASK      16
84 #define TEGRA_CEC_RX_TIMING_1_RX_DATA_BIT_MIN_DURATION_MASK      24
85
86 #define TEGRA_CEC_RX_TIMING_2_RX_END_OF_BLOCK_TIME_MASK  0
87
88 #define TEGRA_CEC_TX_TIMING_0_TX_START_BIT_LO_TIME_MASK         0
89 #define TEGRA_CEC_TX_TIMING_0_TX_START_BIT_DURATION_MASK        8
90 #define TEGRA_CEC_TX_TIMING_0_TX_BUS_XITION_TIME_MASK           16
91 #define TEGRA_CEC_TX_TIMING_0_TX_BUS_ERROR_LO_TIME_MASK         24
92
93 #define TEGRA_CEC_TX_TIMING_1_TX_LO_DATA_BIT_LO_TIME_MASK       0
94 #define TEGRA_CEC_TX_TIMING_1_TX_HI_DATA_BIT_LO_TIME_MASK       8
95 #define TEGRA_CEC_TX_TIMING_1_TX_DATA_BIT_DURATION_MASK         16
96 #define TEGRA_CEC_TX_TIMING_1_TX_ACK_NAK_BIT_SAMPLE_TIME_MASK   24
97
98 #define TEGRA_CEC_TX_TIMING_2_BUS_IDLE_TIME_ADDITIONAL_FRAME_MASK       0
99 #define TEGRA_CEC_TX_TIMING_2_TX_BUS_IDLE_TIME_NEW_FRAME_MASK           4
100 #define TEGRA_CEC_TX_TIMING_2_TX_BUS_IDLE_TIME_RETRY_FRAME_MASK         8
101
102 #define TEGRA_CEC_INT_STAT_TX_REGISTER_EMPTY                    (1<<0)
103 #define TEGRA_CEC_INT_STAT_TX_REGISTER_UNDERRUN                 (1<<1)
104 #define TEGRA_CEC_INT_STAT_TX_FRAME_OR_BLOCK_NAKD               (1<<2)
105 #define TEGRA_CEC_INT_STAT_TX_ARBITRATION_FAILED                (1<<3)
106 #define TEGRA_CEC_INT_STAT_TX_BUS_ANOMALY_DETECTED              (1<<4)
107 #define TEGRA_CEC_INT_STAT_TX_FRAME_TRANSMITTED                 (1<<5)
108 #define TEGRA_CEC_INT_STAT_RX_REGISTER_FULL                     (1<<8)
109 #define TEGRA_CEC_INT_STAT_RX_REGISTER_OVERRUN                  (1<<9)
110 #define TEGRA_CEC_INT_STAT_RX_START_BIT_DETECTED                (1<<10)
111 #define TEGRA_CEC_INT_STAT_RX_BUS_ANOMALY_DETECTED              (1<<11)
112 #define TEGRA_CEC_INT_STAT_RX_BUS_ERROR_DETECTED                (1<<12)
113 #define TEGRA_CEC_INT_STAT_FILTERED_RX_DATA_PIN_TRANSITION_H2L  (1<<13)
114 #define TEGRA_CEC_INT_STAT_FILTERED_RX_DATA_PIN_TRANSITION_L2H  (1<<14)
115
116 #define TEGRA_CEC_INT_MASK_TX_REGISTER_EMPTY                    (1<<0)
117 #define TEGRA_CEC_INT_MASK_TX_REGISTER_UNDERRUN                 (1<<1)
118 #define TEGRA_CEC_INT_MASK_TX_FRAME_OR_BLOCK_NAKD               (1<<2)
119 #define TEGRA_CEC_INT_MASK_TX_ARBITRATION_FAILED                (1<<3)
120 #define TEGRA_CEC_INT_MASK_TX_BUS_ANOMALY_DETECTED              (1<<4)
121 #define TEGRA_CEC_INT_MASK_TX_FRAME_TRANSMITTED                 (1<<5)
122 #define TEGRA_CEC_INT_MASK_RX_REGISTER_FULL                     (1<<8)
123 #define TEGRA_CEC_INT_MASK_RX_REGISTER_OVERRUN                  (1<<9)
124 #define TEGRA_CEC_INT_MASK_RX_START_BIT_DETECTED                (1<<10)
125 #define TEGRA_CEC_INT_MASK_RX_BUS_ANOMALY_DETECTED              (1<<11)
126 #define TEGRA_CEC_INT_MASK_RX_BUS_ERROR_DETECTED                (1<<12)
127 #define TEGRA_CEC_INT_MASK_FILTERED_RX_DATA_PIN_TRANSITION_H2L  (1<<13)
128 #define TEGRA_CEC_INT_MASK_FILTERED_RX_DATA_PIN_TRANSITION_L2H  (1<<14)
129
130 #define TEGRA_CEC_HW_DEBUG_TX_DURATION_COUNT_MASK       0
131 #define TEGRA_CEC_HW_DEBUG_TX_TXBIT_COUNT_MASK          17
132 #define TEGRA_CEC_HW_DEBUG_TX_STATE_MASK                21
133 #define TEGRA_CEC_HW_DEBUG_TX_FORCELOOUT                (1<<25)
134 #define TEGRA_CEC_HW_DEBUG_TX_TXDATABIT_SAMPLE_TIMER    (1<<26)
135
136 #define TEGRA_CEC_NAME "tegra_cec"