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