1/*
2 *  TI FM kernel driver's sample application.
3 *
4 *  Copyright (C) 2010 Texas Instruments
5 *
6 *  This program is free software; you can redistribute it and/or modify
7 *  it under the terms of the GNU General Public License version 2 as
8 *  published by the Free Software Foundation.
9 *
10 *  This program is distributed in the hope that it will be useful,
11 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13 *  GNU General Public License for more details.
14 *
15 *  You should have received a copy of the GNU General Public License
16 *  along with this program; if not, write to the Free Software
17 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18 *
19 */
20
21#ifndef _KFMAPP_H
22#define _KFMAPP_H
23
24#define DEFAULT_RADIO_DEVICE    "/dev/radio0"
25
26#define FMRX_BAND_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmrx_band"
27#define FMRX_RDS_AF_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmrx_rds_af"
28#define FMRX_RSSI_LVL_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmrx_rssi_lvl"
29
30#define FMTX_RDS_AF_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmtx_rds_af"
31
32#define CTL_INDEX_0                0
33#define CTL_INDEX_1                1
34
35#define FMAPP_BATCH                0
36#define FMAPP_INTERACTIVE          1
37
38#define FM_MUTE_OFF                0
39#define FM_MUTE_ON                 1
40
41#define FM_SEARCH_DIRECTION_DOWN   0
42#define FM_SEARCH_DIRECTION_UP     1
43
44#define FM_MODE_SWITCH_CTL_NAME   "Mode Switch"
45#define FM_MODE_OFF              0
46#define FM_MODE_TX               1
47#define FM_MODE_RX               2
48
49#define FM_BAND_SWITCH_CTL_NAME    "Region Switch"
50#define FM_BAND_EUROPE_US          0
51#define FM_BAND_JAPAN              1
52
53#define FM_RF_DEPENDENT_MUTE_CTL_NAME     "RF Dependent Mute"
54#define FM_RX_RF_DEPENDENT_MUTE_ON        1
55#define FM_RX_RF_DEPENDENT_MUTE_OFF       0
56
57#define FM_RX_GET_RSSI_LVL_CTL_NAME       "RSSI Level"
58#define FM_RX_RSSI_THRESHOLD_LVL_CTL_NAME "RSSI Threshold"
59
60#define FM_STEREO_MONO_CTL_NAME              "Stereo/Mono"
61#define FM_STEREO_MODE                    0
62#define FM_MONO_MODE                      1
63
64#define FM_RX_DEEMPHASIS_CTL_NAME          "De-emphasis Filter"
65#define FM_RX_EMPHASIS_FILTER_50_USEC     0
66#define FM_RX_EMPHASIS_FILTER_75_USEC     1
67
68#define FM_RDS_SWITCH_CTL_NAME          "RDS Switch"
69#define FM_RDS_DISABLE                    0
70#define FM_RDS_ENABLE                     1
71
72#define FM_RX_RDS_OPMODE_CTL_NAME      "RDS Operation Mode"
73#define FM_RDS_SYSTEM_RDS                  0
74#define FM_RDS_SYSTEM_RBDS                 1
75
76#define FM_RX_AF_SWITCH_CTL_NAME      "AF Switch"
77#define FM_RX_RDS_AF_SWITCH_MODE_ON        1
78#define FM_RX_RDS_AF_SWITCH_MODE_OFF       0
79
80/* Auto scan info */
81#define  FMAPP_ASCAN_SIGNAL_THRESHOLD_PER  50 /* 50 % */
82#define  FMAPP_ASCAN_NO_OF_SIGNAL_SAMPLE   3  /* 3 Samples */
83
84#define  FMAPP_AF_MAX_FREQ_RANGE	6
85
86#define V4L2_CID_CHANNEL_SPACING (V4L2_CID_PRIVATE_BASE + 0)
87
88struct tx_rds {
89        unsigned char   text_type;
90        unsigned char   text[25];
91        unsigned int    af_freq;
92};
93#define V4L2_CTRL_CLASS_FM_TX 0x009b0000        /* FM Modulator control class */
94/* FM Modulator class control IDs */
95#define V4L2_CID_FM_TX_CLASS_BASE               (V4L2_CTRL_CLASS_FM_TX | 0x900)
96#define V4L2_CID_FM_TX_CLASS                    (V4L2_CTRL_CLASS_FM_TX | 1)
97
98#define V4L2_CID_TUNE_PREEMPHASIS               (V4L2_CID_FM_TX_CLASS_BASE + 112)
99
100#define V4L2_CID_RDS_TX_DEVIATION               (V4L2_CID_FM_TX_CLASS_BASE + 1)
101#define V4L2_CID_RDS_TX_PI                      (V4L2_CID_FM_TX_CLASS_BASE + 2)
102#define V4L2_CID_RDS_TX_PTY                     (V4L2_CID_FM_TX_CLASS_BASE + 3)
103#define V4L2_CID_RDS_TX_PS_NAME                 (V4L2_CID_FM_TX_CLASS_BASE + 5)
104#define V4L2_CID_RDS_TX_RADIO_TEXT              (V4L2_CID_FM_TX_CLASS_BASE + 6)
105
106#define V4L2_CID_TUNE_POWER_LEVEL               (V4L2_CID_FM_TX_CLASS_BASE + 113)
107#define V4L2_CID_TUNE_ANTENNA_CAPACITOR         (V4L2_CID_FM_TX_CLASS_BASE + 114)
108#define V4L2_TUNER_SUB_RDS              0x0010
109
110/* Following macros and structs are re-declared since android
111file system has old videodev2.h but kfmapp needs new K35 videodev2.h
112declarations, So need to remove these definitions once android headers
113move to K35 plus */
114#undef VIDIOC_S_MODULATOR
115#define VIDIOC_S_MODULATOR    1078220343
116
117struct v4l2_ext_control_kfmapp {
118        __u32 id;
119        __u32 size;
120        __u32 reserved2[1];
121        union {
122                __s32 value;
123                __s64 value64;
124                char *string;
125        };
126} __attribute__ ((packed));
127
128struct v4l2_ext_controls_kfmapp {
129        __u32 ctrl_class;
130        __u32 count;
131        __u32 error_idx;
132        __u32 reserved[2];
133        struct v4l2_ext_control_kfmapp *controls;
134};
135
136/* Presently android videodev2.h is from k2.6.35 so remove below struct when
137 * android header files moves to k3.0+ kernel header
138 * */
139struct ti_v4l2_hw_freq_seek {
140    __u32                 tuner;
141    enum v4l2_tuner_type  type;
142    __u32                 seek_upward;
143    __u32                 wrap_around;
144    __u32                 spacing;
145    __u32                 reserved[7];
146};
147
148#endif
149
150