0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015 #ifndef SI4713_I2C_H
0016 #define SI4713_I2C_H
0017
0018 #include <linux/platform_device.h>
0019 #include <linux/regulator/consumer.h>
0020 #include <linux/gpio/consumer.h>
0021 #include <media/v4l2-subdev.h>
0022 #include <media/v4l2-ctrls.h>
0023 #include <linux/platform_data/media/si4713.h>
0024
0025 #define SI4713_PRODUCT_NUMBER 0x0D
0026
0027
0028 #define DEFAULT_TIMEOUT 500
0029 #define TIMEOUT_SET_PROPERTY 20
0030 #define TIMEOUT_TX_TUNE_POWER 30000
0031 #define TIMEOUT_TX_TUNE 110000
0032 #define TIMEOUT_POWER_UP 200000
0033
0034
0035
0036
0037 #define SI4713_PWUP_CTSIEN (1<<7)
0038 #define SI4713_PWUP_GPO2OEN (1<<6)
0039 #define SI4713_PWUP_PATCH (1<<5)
0040 #define SI4713_PWUP_XOSCEN (1<<4)
0041 #define SI4713_PWUP_FUNC_TX 0x02
0042 #define SI4713_PWUP_FUNC_PATCH 0x0F
0043 #define SI4713_PWUP_OPMOD_ANALOG 0x50
0044 #define SI4713_PWUP_OPMOD_DIGITAL 0x0F
0045 #define SI4713_PWUP_NARGS 2
0046 #define SI4713_PWUP_NRESP 1
0047 #define SI4713_CMD_POWER_UP 0x01
0048
0049 #define SI4713_GETREV_NRESP 9
0050 #define SI4713_CMD_GET_REV 0x10
0051
0052 #define SI4713_PWDN_NRESP 1
0053 #define SI4713_CMD_POWER_DOWN 0x11
0054
0055 #define SI4713_SET_PROP_NARGS 5
0056 #define SI4713_SET_PROP_NRESP 1
0057 #define SI4713_CMD_SET_PROPERTY 0x12
0058
0059 #define SI4713_GET_PROP_NARGS 3
0060 #define SI4713_GET_PROP_NRESP 4
0061 #define SI4713_CMD_GET_PROPERTY 0x13
0062
0063 #define SI4713_GET_STATUS_NRESP 1
0064 #define SI4713_CMD_GET_INT_STATUS 0x14
0065
0066 #define SI4713_CMD_PATCH_ARGS 0x15
0067 #define SI4713_CMD_PATCH_DATA 0x16
0068
0069 #define SI4713_MAX_FREQ 10800
0070 #define SI4713_MIN_FREQ 7600
0071 #define SI4713_TXFREQ_NARGS 3
0072 #define SI4713_TXFREQ_NRESP 1
0073 #define SI4713_CMD_TX_TUNE_FREQ 0x30
0074
0075 #define SI4713_MAX_POWER 120
0076 #define SI4713_MIN_POWER 88
0077 #define SI4713_MAX_ANTCAP 191
0078 #define SI4713_MIN_ANTCAP 0
0079 #define SI4713_TXPWR_NARGS 4
0080 #define SI4713_TXPWR_NRESP 1
0081 #define SI4713_CMD_TX_TUNE_POWER 0x31
0082
0083 #define SI4713_TXMEA_NARGS 4
0084 #define SI4713_TXMEA_NRESP 1
0085 #define SI4713_CMD_TX_TUNE_MEASURE 0x32
0086
0087 #define SI4713_INTACK_MASK 0x01
0088 #define SI4713_TXSTATUS_NARGS 1
0089 #define SI4713_TXSTATUS_NRESP 8
0090 #define SI4713_CMD_TX_TUNE_STATUS 0x33
0091
0092 #define SI4713_OVERMOD_BIT (1 << 2)
0093 #define SI4713_IALH_BIT (1 << 1)
0094 #define SI4713_IALL_BIT (1 << 0)
0095 #define SI4713_ASQSTATUS_NARGS 1
0096 #define SI4713_ASQSTATUS_NRESP 5
0097 #define SI4713_CMD_TX_ASQ_STATUS 0x34
0098
0099 #define SI4713_RDSBUFF_MODE_MASK 0x87
0100 #define SI4713_RDSBUFF_NARGS 7
0101 #define SI4713_RDSBUFF_NRESP 6
0102 #define SI4713_CMD_TX_RDS_BUFF 0x35
0103
0104 #define SI4713_RDSPS_PSID_MASK 0x1F
0105 #define SI4713_RDSPS_NARGS 5
0106 #define SI4713_RDSPS_NRESP 1
0107 #define SI4713_CMD_TX_RDS_PS 0x36
0108
0109 #define SI4713_CMD_GPO_CTL 0x80
0110 #define SI4713_CMD_GPO_SET 0x81
0111
0112
0113
0114
0115 #define SI4713_CTS (1<<7)
0116 #define SI4713_ERR (1<<6)
0117 #define SI4713_RDS_INT (1<<2)
0118 #define SI4713_ASQ_INT (1<<1)
0119 #define SI4713_STC_INT (1<<0)
0120
0121
0122
0123
0124 #define SI4713_GPO_IEN 0x0001
0125 #define SI4713_DIG_INPUT_FORMAT 0x0101
0126 #define SI4713_DIG_INPUT_SAMPLE_RATE 0x0103
0127 #define SI4713_REFCLK_FREQ 0x0201
0128 #define SI4713_REFCLK_PRESCALE 0x0202
0129 #define SI4713_TX_COMPONENT_ENABLE 0x2100
0130 #define SI4713_TX_AUDIO_DEVIATION 0x2101
0131 #define SI4713_TX_PILOT_DEVIATION 0x2102
0132 #define SI4713_TX_RDS_DEVIATION 0x2103
0133 #define SI4713_TX_LINE_INPUT_LEVEL 0x2104
0134 #define SI4713_TX_LINE_INPUT_MUTE 0x2105
0135 #define SI4713_TX_PREEMPHASIS 0x2106
0136 #define SI4713_TX_PILOT_FREQUENCY 0x2107
0137 #define SI4713_TX_ACOMP_ENABLE 0x2200
0138 #define SI4713_TX_ACOMP_THRESHOLD 0x2201
0139 #define SI4713_TX_ACOMP_ATTACK_TIME 0x2202
0140 #define SI4713_TX_ACOMP_RELEASE_TIME 0x2203
0141 #define SI4713_TX_ACOMP_GAIN 0x2204
0142 #define SI4713_TX_LIMITER_RELEASE_TIME 0x2205
0143 #define SI4713_TX_ASQ_INTERRUPT_SOURCE 0x2300
0144 #define SI4713_TX_ASQ_LEVEL_LOW 0x2301
0145 #define SI4713_TX_ASQ_DURATION_LOW 0x2302
0146 #define SI4713_TX_ASQ_LEVEL_HIGH 0x2303
0147 #define SI4713_TX_ASQ_DURATION_HIGH 0x2304
0148 #define SI4713_TX_RDS_INTERRUPT_SOURCE 0x2C00
0149 #define SI4713_TX_RDS_PI 0x2C01
0150 #define SI4713_TX_RDS_PS_MIX 0x2C02
0151 #define SI4713_TX_RDS_PS_MISC 0x2C03
0152 #define SI4713_TX_RDS_PS_REPEAT_COUNT 0x2C04
0153 #define SI4713_TX_RDS_PS_MESSAGE_COUNT 0x2C05
0154 #define SI4713_TX_RDS_PS_AF 0x2C06
0155 #define SI4713_TX_RDS_FIFO_SIZE 0x2C07
0156
0157 #define PREEMPHASIS_USA 75
0158 #define PREEMPHASIS_EU 50
0159 #define PREEMPHASIS_DISABLED 0
0160 #define FMPE_USA 0x00
0161 #define FMPE_EU 0x01
0162 #define FMPE_DISABLED 0x02
0163
0164 #define POWER_UP 0x01
0165 #define POWER_DOWN 0x00
0166
0167 #define MAX_RDS_PTY 31
0168 #define MAX_RDS_DEVIATION 90000
0169
0170
0171
0172
0173
0174 #define MAX_RDS_PS_NAME 96
0175
0176
0177
0178
0179
0180
0181 #define MAX_RDS_RADIO_TEXT 384
0182
0183 #define MAX_LIMITER_RELEASE_TIME 102390
0184 #define MAX_LIMITER_DEVIATION 90000
0185
0186 #define MAX_PILOT_DEVIATION 90000
0187 #define MAX_PILOT_FREQUENCY 19000
0188
0189 #define MAX_ACOMP_RELEASE_TIME 1000000
0190 #define MAX_ACOMP_ATTACK_TIME 5000
0191 #define MAX_ACOMP_THRESHOLD 0
0192 #define MIN_ACOMP_THRESHOLD (-40)
0193 #define MAX_ACOMP_GAIN 20
0194
0195
0196
0197
0198 struct si4713_device {
0199
0200 struct v4l2_subdev sd;
0201 struct v4l2_ctrl_handler ctrl_handler;
0202
0203 struct {
0204
0205
0206
0207
0208 struct v4l2_ctrl *mute;
0209 struct v4l2_ctrl *rds_ps_name;
0210 struct v4l2_ctrl *rds_radio_text;
0211 struct v4l2_ctrl *rds_pi;
0212 struct v4l2_ctrl *rds_deviation;
0213 struct v4l2_ctrl *rds_pty;
0214 struct v4l2_ctrl *rds_compressed;
0215 struct v4l2_ctrl *rds_art_head;
0216 struct v4l2_ctrl *rds_stereo;
0217 struct v4l2_ctrl *rds_ta;
0218 struct v4l2_ctrl *rds_tp;
0219 struct v4l2_ctrl *rds_ms;
0220 struct v4l2_ctrl *rds_dyn_pty;
0221 struct v4l2_ctrl *rds_alt_freqs_enable;
0222 struct v4l2_ctrl *rds_alt_freqs;
0223 struct v4l2_ctrl *compression_enabled;
0224 struct v4l2_ctrl *compression_threshold;
0225 struct v4l2_ctrl *compression_gain;
0226 struct v4l2_ctrl *compression_attack_time;
0227 struct v4l2_ctrl *compression_release_time;
0228 struct v4l2_ctrl *pilot_tone_enabled;
0229 struct v4l2_ctrl *pilot_tone_freq;
0230 struct v4l2_ctrl *pilot_tone_deviation;
0231 struct v4l2_ctrl *limiter_enabled;
0232 struct v4l2_ctrl *limiter_deviation;
0233 struct v4l2_ctrl *limiter_release_time;
0234 struct v4l2_ctrl *tune_preemphasis;
0235 struct v4l2_ctrl *tune_pwr_level;
0236 struct v4l2_ctrl *tune_ant_cap;
0237 };
0238 struct completion work;
0239 struct regulator *vdd;
0240 struct regulator *vio;
0241 struct gpio_desc *gpio_reset;
0242 struct platform_device *pd;
0243 u32 power_state;
0244 u32 rds_enabled;
0245 u32 frequency;
0246 u32 preemphasis;
0247 u32 stereo;
0248 u32 tune_rnl;
0249 };
0250
0251 struct radio_si4713_platform_data {
0252 struct i2c_client *subdev;
0253 };
0254 #endif