/*
* TI FM kernel driver's sample application.
*
* Copyright (C) 2010 Texas Instruments
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
#ifndef _KFMAPP_H
#define _KFMAPP_H
#define DEFAULT_RADIO_DEVICE "/dev/radio0"
#define FMRX_BAND_SYSFS_ENTRY "/sys/class/video4linux/radio0/fmrx_band"
#define FMRX_RDS_AF_SYSFS_ENTRY "/sys/class/video4linux/radio0/fmrx_rds_af"
#define FMRX_RSSI_LVL_SYSFS_ENTRY "/sys/class/video4linux/radio0/fmrx_rssi_lvl"
#define FMTX_RDS_AF_SYSFS_ENTRY "/sys/class/video4linux/radio0/fmtx_rds_af"
#define CTL_INDEX_0 0
#define CTL_INDEX_1 1
#define FMAPP_BATCH 0
#define FMAPP_INTERACTIVE 1
#define FM_MUTE_OFF 0
#define FM_MUTE_ON 1
#define FM_SEARCH_DIRECTION_DOWN 0
#define FM_SEARCH_DIRECTION_UP 1
#define FM_MODE_SWITCH_CTL_NAME "Mode Switch"
#define FM_MODE_OFF 0
#define FM_MODE_TX 1
#define FM_MODE_RX 2
#define FM_BAND_SWITCH_CTL_NAME "Region Switch"
#define FM_BAND_EUROPE_US 0
#define FM_BAND_JAPAN 1
#define FM_RF_DEPENDENT_MUTE_CTL_NAME "RF Dependent Mute"
#define FM_RX_RF_DEPENDENT_MUTE_ON 1
#define FM_RX_RF_DEPENDENT_MUTE_OFF 0
#define FM_RX_GET_RSSI_LVL_CTL_NAME "RSSI Level"
#define FM_RX_RSSI_THRESHOLD_LVL_CTL_NAME "RSSI Threshold"
#define FM_STEREO_MONO_CTL_NAME "Stereo/Mono"
#define FM_STEREO_MODE 0
#define FM_MONO_MODE 1
#define FM_RX_DEEMPHASIS_CTL_NAME "De-emphasis Filter"
#define FM_RX_EMPHASIS_FILTER_50_USEC 0
#define FM_RX_EMPHASIS_FILTER_75_USEC 1
#define FM_RDS_SWITCH_CTL_NAME "RDS Switch"
#define FM_RDS_DISABLE 0
#define FM_RDS_ENABLE 1
#define FM_RX_RDS_OPMODE_CTL_NAME "RDS Operation Mode"
#define FM_RDS_SYSTEM_RDS 0
#define FM_RDS_SYSTEM_RBDS 1
#define FM_RX_AF_SWITCH_CTL_NAME "AF Switch"
#define FM_RX_RDS_AF_SWITCH_MODE_ON 1
#define FM_RX_RDS_AF_SWITCH_MODE_OFF 0
/* Auto scan info */
#define FMAPP_ASCAN_SIGNAL_THRESHOLD_PER 50 /* 50 % */
#define FMAPP_ASCAN_NO_OF_SIGNAL_SAMPLE 3 /* 3 Samples */
#define FMAPP_AF_MAX_FREQ_RANGE 6
#define V4L2_CID_CHANNEL_SPACING (V4L2_CID_PRIVATE_BASE + 0)
struct tx_rds {
unsigned char text_type;
unsigned char text[25];
unsigned int af_freq;
};
#define V4L2_CTRL_CLASS_FM_TX 0x009b0000 /* FM Modulator control class */
/* FM Modulator class control IDs */
#define V4L2_CID_FM_TX_CLASS_BASE (V4L2_CTRL_CLASS_FM_TX | 0x900)
#define V4L2_CID_FM_TX_CLASS (V4L2_CTRL_CLASS_FM_TX | 1)
#define V4L2_CID_TUNE_PREEMPHASIS (V4L2_CID_FM_TX_CLASS_BASE + 112)
#define V4L2_CID_RDS_TX_DEVIATION (V4L2_CID_FM_TX_CLASS_BASE + 1)
#define V4L2_CID_RDS_TX_PI (V4L2_CID_FM_TX_CLASS_BASE + 2)
#define V4L2_CID_RDS_TX_PTY (V4L2_CID_FM_TX_CLASS_BASE + 3)
#define V4L2_CID_RDS_TX_PS_NAME (V4L2_CID_FM_TX_CLASS_BASE + 5)
#define V4L2_CID_RDS_TX_RADIO_TEXT (V4L2_CID_FM_TX_CLASS_BASE + 6)
#define V4L2_CID_TUNE_POWER_LEVEL (V4L2_CID_FM_TX_CLASS_BASE + 113)
#define V4L2_CID_TUNE_ANTENNA_CAPACITOR (V4L2_CID_FM_TX_CLASS_BASE + 114)
#define V4L2_TUNER_SUB_RDS 0x0010
/* Following macros and structs are re-declared since android
file system has old videodev2.h but kfmapp needs new K35 videodev2.h
declarations, So need to remove these definitions once android headers
move to K35 plus */
#undef VIDIOC_S_MODULATOR
#define VIDIOC_S_MODULATOR 1078220343
struct v4l2_ext_control_kfmapp {
__u32 id;
__u32 size;
__u32 reserved2[1];
union {
__s32 value;
__s64 value64;
char *string;
};
} __attribute__ ((packed));
struct v4l2_ext_controls_kfmapp {
__u32 ctrl_class;
__u32 count;
__u32 error_idx;
__u32 reserved[2];
struct v4l2_ext_control_kfmapp *controls;
};
/* Presently android videodev2.h is from k2.6.35 so remove below struct when
* android header files moves to k3.0+ kernel header
* */
struct ti_v4l2_hw_freq_seek {
__u32 tuner;
enum v4l2_tuner_type type;
__u32 seek_upward;
__u32 wrap_around;
__u32 spacing;
__u32 reserved[7];
};
#endif