13ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru/*
23ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  TI FM kernel driver's sample application.
33ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *
43ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  Copyright (C) 2010 Texas Instruments
53ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *
63ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  This program is free software; you can redistribute it and/or modify
73ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  it under the terms of the GNU General Public License version 2 as
83ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  published by the Free Software Foundation.
93ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *
103ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  This program is distributed in the hope that it will be useful,
113ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  but WITHOUT ANY WARRANTY; without even the implied warranty of
123ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
133ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  GNU General Public License for more details.
143ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *
153ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  You should have received a copy of the GNU General Public License
163ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  along with this program; if not, write to the Free Software
173ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
183ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru *
193ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru */
203ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
213ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#ifndef _KFMAPP_H
223ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define _KFMAPP_H
233ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
243ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define DEFAULT_RADIO_DEVICE    "/dev/radio0"
253ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
263ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FMRX_BAND_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmrx_band"
273ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FMRX_RDS_AF_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmrx_rds_af"
283ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FMRX_RSSI_LVL_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmrx_rssi_lvl"
293ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
303ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FMTX_RDS_AF_SYSFS_ENTRY    "/sys/class/video4linux/radio0/fmtx_rds_af"
313ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
323ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define CTL_INDEX_0                0
333ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define CTL_INDEX_1                1
343ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
353ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FMAPP_BATCH                0
363ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FMAPP_INTERACTIVE          1
373ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
383ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_MUTE_OFF                0
393ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_MUTE_ON                 1
403ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
413ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_SEARCH_DIRECTION_DOWN   0
423ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_SEARCH_DIRECTION_UP     1
433ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
443ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_MODE_SWITCH_CTL_NAME   "Mode Switch"
453ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_MODE_OFF              0
463ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_MODE_TX               1
473ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_MODE_RX               2
483ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
493ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_BAND_SWITCH_CTL_NAME    "Region Switch"
503ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_BAND_EUROPE_US          0
513ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_BAND_JAPAN              1
523ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
533ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RF_DEPENDENT_MUTE_CTL_NAME     "RF Dependent Mute"
543ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_RF_DEPENDENT_MUTE_ON        1
553ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_RF_DEPENDENT_MUTE_OFF       0
563ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
573ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_GET_RSSI_LVL_CTL_NAME       "RSSI Level"
583ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_RSSI_THRESHOLD_LVL_CTL_NAME "RSSI Threshold"
593ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
603ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_STEREO_MONO_CTL_NAME              "Stereo/Mono"
613ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_STEREO_MODE                    0
623ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_MONO_MODE                      1
633ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
643ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_DEEMPHASIS_CTL_NAME          "De-emphasis Filter"
653ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_EMPHASIS_FILTER_50_USEC     0
663ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_EMPHASIS_FILTER_75_USEC     1
673ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
683ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RDS_SWITCH_CTL_NAME          "RDS Switch"
693ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RDS_DISABLE                    0
703ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RDS_ENABLE                     1
713ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
723ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_RDS_OPMODE_CTL_NAME      "RDS Operation Mode"
733ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RDS_SYSTEM_RDS                  0
743ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RDS_SYSTEM_RBDS                 1
753ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
763ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_AF_SWITCH_CTL_NAME      "AF Switch"
773ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_RDS_AF_SWITCH_MODE_ON        1
783ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define FM_RX_RDS_AF_SWITCH_MODE_OFF       0
793ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
803ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru/* Auto scan info */
813ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define  FMAPP_ASCAN_SIGNAL_THRESHOLD_PER  50 /* 50 % */
823ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define  FMAPP_ASCAN_NO_OF_SIGNAL_SAMPLE   3  /* 3 Samples */
833ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
843ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define  FMAPP_AF_MAX_FREQ_RANGE	6
853ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
863ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_CHANNEL_SPACING (V4L2_CID_PRIVATE_BASE + 0)
873ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
883ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Querustruct tx_rds {
893ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        unsigned char   text_type;
903ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        unsigned char   text[25];
913ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        unsigned int    af_freq;
923ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru};
933ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CTRL_CLASS_FM_TX 0x009b0000        /* FM Modulator control class */
943ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru/* FM Modulator class control IDs */
953ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_FM_TX_CLASS_BASE               (V4L2_CTRL_CLASS_FM_TX | 0x900)
963ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_FM_TX_CLASS                    (V4L2_CTRL_CLASS_FM_TX | 1)
973ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
983ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_TUNE_PREEMPHASIS               (V4L2_CID_FM_TX_CLASS_BASE + 112)
993ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
1003ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_RDS_TX_DEVIATION               (V4L2_CID_FM_TX_CLASS_BASE + 1)
1013ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_RDS_TX_PI                      (V4L2_CID_FM_TX_CLASS_BASE + 2)
1023ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_RDS_TX_PTY                     (V4L2_CID_FM_TX_CLASS_BASE + 3)
1033ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_RDS_TX_PS_NAME                 (V4L2_CID_FM_TX_CLASS_BASE + 5)
1043ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_RDS_TX_RADIO_TEXT              (V4L2_CID_FM_TX_CLASS_BASE + 6)
1053ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
1063ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_TUNE_POWER_LEVEL               (V4L2_CID_FM_TX_CLASS_BASE + 113)
1073ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_CID_TUNE_ANTENNA_CAPACITOR         (V4L2_CID_FM_TX_CLASS_BASE + 114)
1083ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define V4L2_TUNER_SUB_RDS              0x0010
1093ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
1103ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru/* Following macros and structs are re-declared since android
1113ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Querufile system has old videodev2.h but kfmapp needs new K35 videodev2.h
1123ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Querudeclarations, So need to remove these definitions once android headers
1133ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Querumove to K35 plus */
1143ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#undef VIDIOC_S_MODULATOR
1153ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#define VIDIOC_S_MODULATOR    1078220343
1163ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
1173ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Querustruct v4l2_ext_control_kfmapp {
1183ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        __u32 id;
1193ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        __u32 size;
1203ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        __u32 reserved2[1];
1213ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        union {
1223ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru                __s32 value;
1233ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru                __s64 value64;
1243ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru                char *string;
1253ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        };
1263ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru} __attribute__ ((packed));
1273ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
1283ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Querustruct v4l2_ext_controls_kfmapp {
1293ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        __u32 ctrl_class;
1303ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        __u32 count;
1313ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        __u32 error_idx;
1323ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        __u32 reserved[2];
1333ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru        struct v4l2_ext_control_kfmapp *controls;
1343ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru};
1353ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
1363ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru/* Presently android videodev2.h is from k2.6.35 so remove below struct when
1373ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru * android header files moves to k3.0+ kernel header
1383ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru * */
1393ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Querustruct ti_v4l2_hw_freq_seek {
1403ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru    __u32                 tuner;
1413ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru    enum v4l2_tuner_type  type;
1423ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru    __u32                 seek_upward;
1433ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru    __u32                 wrap_around;
1443ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru    __u32                 spacing;
1453ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru    __u32                 reserved[7];
1463ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru};
1473ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
1483ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru#endif
1493ece7d9e08052989401e008bc397dbcd2557cfd0Jean-Baptiste Queru
150