Linux Audio
Check our new training course
Embedded Linux Audio
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254
/* * drivers/media/radio/si4713-i2c.h * * Property and commands definitions for Si4713 radio transmitter chip. * * Copyright (c) 2008 Instituto Nokia de Tecnologia - INdT * Contact: Eduardo Valentin <eduardo.valentin@nokia.com> * * This file is licensed under the terms of the GNU General Public License * version 2. This program is licensed "as is" without any warranty of any * kind, whether express or implied. * */ #ifndef SI4713_I2C_H #define SI4713_I2C_H #include <linux/platform_device.h> #include <linux/regulator/consumer.h> #include <linux/gpio/consumer.h> #include <media/v4l2-subdev.h> #include <media/v4l2-ctrls.h> #include <linux/platform_data/media/si4713.h> #define SI4713_PRODUCT_NUMBER 0x0D /* Command Timeouts */ #define DEFAULT_TIMEOUT 500 #define TIMEOUT_SET_PROPERTY 20 #define TIMEOUT_TX_TUNE_POWER 30000 #define TIMEOUT_TX_TUNE 110000 #define TIMEOUT_POWER_UP 200000 /* * Command and its arguments definitions */ #define SI4713_PWUP_CTSIEN (1<<7) #define SI4713_PWUP_GPO2OEN (1<<6) #define SI4713_PWUP_PATCH (1<<5) #define SI4713_PWUP_XOSCEN (1<<4) #define SI4713_PWUP_FUNC_TX 0x02 #define SI4713_PWUP_FUNC_PATCH 0x0F #define SI4713_PWUP_OPMOD_ANALOG 0x50 #define SI4713_PWUP_OPMOD_DIGITAL 0x0F #define SI4713_PWUP_NARGS 2 #define SI4713_PWUP_NRESP 1 #define SI4713_CMD_POWER_UP 0x01 #define SI4713_GETREV_NRESP 9 #define SI4713_CMD_GET_REV 0x10 #define SI4713_PWDN_NRESP 1 #define SI4713_CMD_POWER_DOWN 0x11 #define SI4713_SET_PROP_NARGS 5 #define SI4713_SET_PROP_NRESP 1 #define SI4713_CMD_SET_PROPERTY 0x12 #define SI4713_GET_PROP_NARGS 3 #define SI4713_GET_PROP_NRESP 4 #define SI4713_CMD_GET_PROPERTY 0x13 #define SI4713_GET_STATUS_NRESP 1 #define SI4713_CMD_GET_INT_STATUS 0x14 #define SI4713_CMD_PATCH_ARGS 0x15 #define SI4713_CMD_PATCH_DATA 0x16 #define SI4713_MAX_FREQ 10800 #define SI4713_MIN_FREQ 7600 #define SI4713_TXFREQ_NARGS 3 #define SI4713_TXFREQ_NRESP 1 #define SI4713_CMD_TX_TUNE_FREQ 0x30 #define SI4713_MAX_POWER 120 #define SI4713_MIN_POWER 88 #define SI4713_MAX_ANTCAP 191 #define SI4713_MIN_ANTCAP 0 #define SI4713_TXPWR_NARGS 4 #define SI4713_TXPWR_NRESP 1 #define SI4713_CMD_TX_TUNE_POWER 0x31 #define SI4713_TXMEA_NARGS 4 #define SI4713_TXMEA_NRESP 1 #define SI4713_CMD_TX_TUNE_MEASURE 0x32 #define SI4713_INTACK_MASK 0x01 #define SI4713_TXSTATUS_NARGS 1 #define SI4713_TXSTATUS_NRESP 8 #define SI4713_CMD_TX_TUNE_STATUS 0x33 #define SI4713_OVERMOD_BIT (1 << 2) #define SI4713_IALH_BIT (1 << 1) #define SI4713_IALL_BIT (1 << 0) #define SI4713_ASQSTATUS_NARGS 1 #define SI4713_ASQSTATUS_NRESP 5 #define SI4713_CMD_TX_ASQ_STATUS 0x34 #define SI4713_RDSBUFF_MODE_MASK 0x87 #define SI4713_RDSBUFF_NARGS 7 #define SI4713_RDSBUFF_NRESP 6 #define SI4713_CMD_TX_RDS_BUFF 0x35 #define SI4713_RDSPS_PSID_MASK 0x1F #define SI4713_RDSPS_NARGS 5 #define SI4713_RDSPS_NRESP 1 #define SI4713_CMD_TX_RDS_PS 0x36 #define SI4713_CMD_GPO_CTL 0x80 #define SI4713_CMD_GPO_SET 0x81 /* * Bits from status response */ #define SI4713_CTS (1<<7) #define SI4713_ERR (1<<6) #define SI4713_RDS_INT (1<<2) #define SI4713_ASQ_INT (1<<1) #define SI4713_STC_INT (1<<0) /* * Property definitions */ #define SI4713_GPO_IEN 0x0001 #define SI4713_DIG_INPUT_FORMAT 0x0101 #define SI4713_DIG_INPUT_SAMPLE_RATE 0x0103 #define SI4713_REFCLK_FREQ 0x0201 #define SI4713_REFCLK_PRESCALE 0x0202 #define SI4713_TX_COMPONENT_ENABLE 0x2100 #define SI4713_TX_AUDIO_DEVIATION 0x2101 #define SI4713_TX_PILOT_DEVIATION 0x2102 #define SI4713_TX_RDS_DEVIATION 0x2103 #define SI4713_TX_LINE_INPUT_LEVEL 0x2104 #define SI4713_TX_LINE_INPUT_MUTE 0x2105 #define SI4713_TX_PREEMPHASIS 0x2106 #define SI4713_TX_PILOT_FREQUENCY 0x2107 #define SI4713_TX_ACOMP_ENABLE 0x2200 #define SI4713_TX_ACOMP_THRESHOLD 0x2201 #define SI4713_TX_ACOMP_ATTACK_TIME 0x2202 #define SI4713_TX_ACOMP_RELEASE_TIME 0x2203 #define SI4713_TX_ACOMP_GAIN 0x2204 #define SI4713_TX_LIMITER_RELEASE_TIME 0x2205 #define SI4713_TX_ASQ_INTERRUPT_SOURCE 0x2300 #define SI4713_TX_ASQ_LEVEL_LOW 0x2301 #define SI4713_TX_ASQ_DURATION_LOW 0x2302 #define SI4713_TX_ASQ_LEVEL_HIGH 0x2303 #define SI4713_TX_ASQ_DURATION_HIGH 0x2304 #define SI4713_TX_RDS_INTERRUPT_SOURCE 0x2C00 #define SI4713_TX_RDS_PI 0x2C01 #define SI4713_TX_RDS_PS_MIX 0x2C02 #define SI4713_TX_RDS_PS_MISC 0x2C03 #define SI4713_TX_RDS_PS_REPEAT_COUNT 0x2C04 #define SI4713_TX_RDS_PS_MESSAGE_COUNT 0x2C05 #define SI4713_TX_RDS_PS_AF 0x2C06 #define SI4713_TX_RDS_FIFO_SIZE 0x2C07 #define PREEMPHASIS_USA 75 #define PREEMPHASIS_EU 50 #define PREEMPHASIS_DISABLED 0 #define FMPE_USA 0x00 #define FMPE_EU 0x01 #define FMPE_DISABLED 0x02 #define POWER_UP 0x01 #define POWER_DOWN 0x00 #define MAX_RDS_PTY 31 #define MAX_RDS_DEVIATION 90000 /* * PSNAME is known to be defined as 8 character sized (RDS Spec). * However, there is receivers which scroll PSNAME 8xN sized. */ #define MAX_RDS_PS_NAME 96 /* * MAX_RDS_RADIO_TEXT is known to be defined as 32 (2A group) or 64 (2B group) * character sized (RDS Spec). * However, there is receivers which scroll them as well. */ #define MAX_RDS_RADIO_TEXT 384 #define MAX_LIMITER_RELEASE_TIME 102390 #define MAX_LIMITER_DEVIATION 90000 #define MAX_PILOT_DEVIATION 90000 #define MAX_PILOT_FREQUENCY 19000 #define MAX_ACOMP_RELEASE_TIME 1000000 #define MAX_ACOMP_ATTACK_TIME 5000 #define MAX_ACOMP_THRESHOLD 0 #define MIN_ACOMP_THRESHOLD (-40) #define MAX_ACOMP_GAIN 20 /* * si4713_device - private data */ struct si4713_device { /* v4l2_subdev and i2c reference (v4l2_subdev priv data) */ struct v4l2_subdev sd; struct v4l2_ctrl_handler ctrl_handler; /* private data structures */ struct { /* si4713 control cluster */ /* This is one big cluster since the mute control * powers off the device and after unmuting again all * controls need to be set at once. The only way of doing * that is by making it one big cluster. */ struct v4l2_ctrl *mute; struct v4l2_ctrl *rds_ps_name; struct v4l2_ctrl *rds_radio_text; struct v4l2_ctrl *rds_pi; struct v4l2_ctrl *rds_deviation; struct v4l2_ctrl *rds_pty; struct v4l2_ctrl *rds_compressed; struct v4l2_ctrl *rds_art_head; struct v4l2_ctrl *rds_stereo; struct v4l2_ctrl *rds_ta; struct v4l2_ctrl *rds_tp; struct v4l2_ctrl *rds_ms; struct v4l2_ctrl *rds_dyn_pty; struct v4l2_ctrl *rds_alt_freqs_enable; struct v4l2_ctrl *rds_alt_freqs; struct v4l2_ctrl *compression_enabled; struct v4l2_ctrl *compression_threshold; struct v4l2_ctrl *compression_gain; struct v4l2_ctrl *compression_attack_time; struct v4l2_ctrl *compression_release_time; struct v4l2_ctrl *pilot_tone_enabled; struct v4l2_ctrl *pilot_tone_freq; struct v4l2_ctrl *pilot_tone_deviation; struct v4l2_ctrl *limiter_enabled; struct v4l2_ctrl *limiter_deviation; struct v4l2_ctrl *limiter_release_time; struct v4l2_ctrl *tune_preemphasis; struct v4l2_ctrl *tune_pwr_level; struct v4l2_ctrl *tune_ant_cap; }; struct completion work; struct regulator *vdd; struct regulator *vio; struct gpio_desc *gpio_reset; struct platform_device *pd; u32 power_state; u32 rds_enabled; u32 frequency; u32 preemphasis; u32 stereo; u32 tune_rnl; }; struct radio_si4713_platform_data { struct i2c_client *subdev; }; #endif /* ifndef SI4713_I2C_H */