596 lines
15 KiB
C
596 lines
15 KiB
C
|
#ifndef __LINUX_TAVARUA_H
|
||
|
#define __LINUX_TAVARUA_H
|
||
|
|
||
|
#ifdef __KERNEL__
|
||
|
#include <linux/types.h>
|
||
|
#include <asm/sizes.h>
|
||
|
#else
|
||
|
#include <stdint.h>
|
||
|
#endif
|
||
|
#include <linux/ioctl.h>
|
||
|
#include <linux/videodev2.h>
|
||
|
|
||
|
|
||
|
#undef FM_DEBUG
|
||
|
|
||
|
/* constants */
|
||
|
#define RDS_BLOCKS_NUM (4)
|
||
|
#define BYTES_PER_BLOCK (3)
|
||
|
#define MAX_PS_LENGTH (96)
|
||
|
#define MAX_RT_LENGTH (64)
|
||
|
#define RX_STATIONS0_LEN (15)
|
||
|
|
||
|
#define XFRDAT0 (0x20)
|
||
|
#define XFRDAT1 (0x21)
|
||
|
#define XFRDAT2 (0x22)
|
||
|
|
||
|
#define INTDET_PEEK_MSB (0x88)
|
||
|
#define INTDET_PEEK_LSB (0x26)
|
||
|
|
||
|
#define RMSSI_PEEK_MSB (0x88)
|
||
|
#define RMSSI_PEEK_LSB (0xA8)
|
||
|
|
||
|
#define MPX_DCC_BYPASS_POKE_MSB (0x88)
|
||
|
#define MPX_DCC_BYPASS_POKE_LSB (0xC0)
|
||
|
|
||
|
#define MPX_DCC_PEEK_MSB_REG1 (0x88)
|
||
|
#define MPX_DCC_PEEK_LSB_REG1 (0xC2)
|
||
|
|
||
|
#define MPX_DCC_PEEK_MSB_REG2 (0x88)
|
||
|
#define MPX_DCC_PEEK_LSB_REG2 (0xC3)
|
||
|
|
||
|
#define MPX_DCC_PEEK_MSB_REG3 (0x88)
|
||
|
#define MPX_DCC_PEEK_LSB_REG3 (0xC4)
|
||
|
|
||
|
#define ON_CHANNEL_TH_MSB (0x0B)
|
||
|
#define ON_CHANNEL_TH_LSB (0xA8)
|
||
|
|
||
|
#define OFF_CHANNEL_TH_MSB (0x0B)
|
||
|
#define OFF_CHANNEL_TH_LSB (0xAC)
|
||
|
|
||
|
#define ENF_200Khz (1)
|
||
|
#define SRCH200KHZ_OFFSET (7)
|
||
|
#define SRCH_MASK (1 << SRCH200KHZ_OFFSET)
|
||
|
|
||
|
/* Standard buffer size */
|
||
|
#define STD_BUF_SIZE (256)
|
||
|
/* Search direction */
|
||
|
#define SRCH_DIR_UP (0)
|
||
|
#define SRCH_DIR_DOWN (1)
|
||
|
|
||
|
/* control options */
|
||
|
#define CTRL_ON (1)
|
||
|
#define CTRL_OFF (0)
|
||
|
|
||
|
#define US_LOW_BAND (87.5)
|
||
|
#define US_HIGH_BAND (108)
|
||
|
|
||
|
/* constant for Tx */
|
||
|
|
||
|
#define MASK_PI (0x0000FFFF)
|
||
|
#define MASK_PI_MSB (0x0000FF00)
|
||
|
#define MASK_PI_LSB (0x000000FF)
|
||
|
#define MASK_PTY (0x0000001F)
|
||
|
#define MASK_TXREPCOUNT (0x0000000F)
|
||
|
|
||
|
#undef FMDBG
|
||
|
#ifdef FM_DEBUG
|
||
|
#define FMDBG(fmt, args...) printk(KERN_INFO "tavarua_radio: " fmt, ##args)
|
||
|
#else
|
||
|
#define FMDBG(fmt, args...)
|
||
|
#endif
|
||
|
|
||
|
#undef FMDERR
|
||
|
#define FMDERR(fmt, args...) printk(KERN_INFO "tavarua_radio: " fmt, ##args)
|
||
|
|
||
|
#undef FMDBG_I2C
|
||
|
#ifdef FM_DEBUG_I2C
|
||
|
#define FMDBG_I2C(fmt, args...) printk(KERN_INFO "fm_i2c: " fmt, ##args)
|
||
|
#else
|
||
|
#define FMDBG_I2C(fmt, args...)
|
||
|
#endif
|
||
|
|
||
|
/* function declarations */
|
||
|
/* FM Core audio paths. */
|
||
|
#define TAVARUA_AUDIO_OUT_ANALOG_OFF (0)
|
||
|
#define TAVARUA_AUDIO_OUT_ANALOG_ON (1)
|
||
|
#define TAVARUA_AUDIO_OUT_DIGITAL_OFF (0)
|
||
|
#define TAVARUA_AUDIO_OUT_DIGITAL_ON (1)
|
||
|
|
||
|
int tavarua_set_audio_path(int digital_on, int analog_on);
|
||
|
|
||
|
/* defines and enums*/
|
||
|
|
||
|
#define MARIMBA_A0 0x01010013
|
||
|
#define MARIMBA_2_1 0x02010204
|
||
|
#define BAHAMA_1_0 0x0302010A
|
||
|
#define BAHAMA_2_0 0x04020205
|
||
|
#define BAHAMA_2_1 0x04020309
|
||
|
#define WAIT_TIMEOUT 2000
|
||
|
#define RADIO_INIT_TIME 15
|
||
|
#define TAVARUA_DELAY 10
|
||
|
/*
|
||
|
* The frequency is set in units of 62.5 Hz when using V4L2_TUNER_CAP_LOW,
|
||
|
* 62.5 kHz otherwise.
|
||
|
* The tuner is able to have a channel spacing of 50, 100 or 200 kHz.
|
||
|
* tuner->capability is therefore set to V4L2_TUNER_CAP_LOW
|
||
|
* The FREQ_MUL is then: 1 MHz / 62.5 Hz = 16000
|
||
|
*/
|
||
|
#define FREQ_MUL (1000000 / 62.5)
|
||
|
|
||
|
enum v4l2_cid_private_tavarua_t {
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SRCHMODE = (V4L2_CID_PRIVATE_BASE + 1),
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SCANDWELL,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SRCHON,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_STATE,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_TRANSMIT_MODE,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_RDSGROUP_MASK,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_REGION,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SIGNAL_TH,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SRCH_PTY,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SRCH_PI,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SRCH_CNT,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_EMPHASIS,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_RDS_STD,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SPACING,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_RDSON,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_RDSGROUP_PROC,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_LP_MODE,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_ANTENNA,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_RDSD_BUF,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_PSALL,
|
||
|
/*v4l2 Tx controls*/
|
||
|
V4L2_CID_PRIVATE_TAVARUA_TX_SETPSREPEATCOUNT,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_STOP_RDS_TX_PS_NAME,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_STOP_RDS_TX_RT,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_IOVERC,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_INTDET,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_MPX_DCC,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_AF_JUMP,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_RSSI_DELTA,
|
||
|
V4L2_CID_PRIVATE_TAVARUA_HLSI,
|
||
|
|
||
|
/*
|
||
|
* Here we have IOCTl's that are specific to IRIS
|
||
|
* (V4L2_CID_PRIVATE_BASE + 0x1E to V4L2_CID_PRIVATE_BASE + 0x28)
|
||
|
*/
|
||
|
V4L2_CID_PRIVATE_SOFT_MUTE,/* 0x800001E*/
|
||
|
V4L2_CID_PRIVATE_RIVA_ACCS_ADDR,
|
||
|
V4L2_CID_PRIVATE_RIVA_ACCS_LEN,
|
||
|
V4L2_CID_PRIVATE_RIVA_PEEK,
|
||
|
V4L2_CID_PRIVATE_RIVA_POKE,
|
||
|
V4L2_CID_PRIVATE_SSBI_ACCS_ADDR,
|
||
|
V4L2_CID_PRIVATE_SSBI_PEEK,
|
||
|
V4L2_CID_PRIVATE_SSBI_POKE,
|
||
|
V4L2_CID_PRIVATE_TX_TONE,
|
||
|
V4L2_CID_PRIVATE_RDS_GRP_COUNTERS,
|
||
|
V4L2_CID_PRIVATE_SET_NOTCH_FILTER,/* 0x8000028 */
|
||
|
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SET_AUDIO_PATH,/* 0x8000029 */
|
||
|
V4L2_CID_PRIVATE_TAVARUA_DO_CALIBRATION,/* 0x800002A : IRIS */
|
||
|
V4L2_CID_PRIVATE_TAVARUA_SRCH_ALGORITHM,/* 0x800002B */
|
||
|
V4L2_CID_PRIVATE_IRIS_GET_SINR, /* 0x800002C : IRIS */
|
||
|
V4L2_CID_PRIVATE_INTF_LOW_THRESHOLD, /* 0x800002D */
|
||
|
V4L2_CID_PRIVATE_INTF_HIGH_THRESHOLD, /* 0x800002E */
|
||
|
V4L2_CID_PRIVATE_SINR_THRESHOLD, /* 0x800002F : IRIS */
|
||
|
V4L2_CID_PRIVATE_SINR_SAMPLES, /* 0x8000030 : IRIS */
|
||
|
V4L2_CID_PRIVATE_SPUR_FREQ,
|
||
|
V4L2_CID_PRIVATE_SPUR_FREQ_RMSSI,
|
||
|
V4L2_CID_PRIVATE_SPUR_SELECTION,
|
||
|
V4L2_CID_PRIVATE_UPDATE_SPUR_TABLE,
|
||
|
V4L2_CID_PRIVATE_VALID_CHANNEL,
|
||
|
|
||
|
};
|
||
|
|
||
|
enum tavarua_buf_t {
|
||
|
TAVARUA_BUF_SRCH_LIST,
|
||
|
TAVARUA_BUF_EVENTS,
|
||
|
TAVARUA_BUF_RT_RDS,
|
||
|
TAVARUA_BUF_PS_RDS,
|
||
|
TAVARUA_BUF_RAW_RDS,
|
||
|
TAVARUA_BUF_AF_LIST,
|
||
|
TAVARUA_BUF_MAX
|
||
|
};
|
||
|
|
||
|
enum tavarua_xfr_t {
|
||
|
TAVARUA_XFR_SYNC,
|
||
|
TAVARUA_XFR_ERROR,
|
||
|
TAVARUA_XFR_SRCH_LIST,
|
||
|
TAVARUA_XFR_RT_RDS,
|
||
|
TAVARUA_XFR_PS_RDS,
|
||
|
TAVARUA_XFR_AF_LIST,
|
||
|
TAVARUA_XFR_MAX
|
||
|
};
|
||
|
|
||
|
enum channel_spacing {
|
||
|
FM_CH_SPACE_200KHZ,
|
||
|
FM_CH_SPACE_100KHZ,
|
||
|
FM_CH_SPACE_50KHZ
|
||
|
};
|
||
|
|
||
|
enum step_size {
|
||
|
NO_SRCH200khz,
|
||
|
ENF_SRCH200khz
|
||
|
};
|
||
|
|
||
|
enum emphasis {
|
||
|
EMP_75,
|
||
|
EMP_50
|
||
|
};
|
||
|
|
||
|
enum rds_std {
|
||
|
RBDS_STD,
|
||
|
RDS_STD
|
||
|
};
|
||
|
|
||
|
/* offsets */
|
||
|
#define RAW_RDS 0x0F
|
||
|
#define RDS_BLOCK 3
|
||
|
|
||
|
/* registers*/
|
||
|
#define MARIMBA_XO_BUFF_CNTRL 0x07
|
||
|
#define RADIO_REGISTERS 0x30
|
||
|
#define XFR_REG_NUM 16
|
||
|
#define STATUS_REG_NUM 3
|
||
|
|
||
|
/* TX constants */
|
||
|
#define HEADER_SIZE 4
|
||
|
#define TX_ON 0x80
|
||
|
#define TAVARUA_TX_RT RDS_RT_0
|
||
|
#define TAVARUA_TX_PS RDS_PS_0
|
||
|
|
||
|
enum register_t {
|
||
|
STATUS_REG1 = 0,
|
||
|
STATUS_REG2,
|
||
|
STATUS_REG3,
|
||
|
RDCTRL,
|
||
|
FREQ,
|
||
|
TUNECTRL,
|
||
|
SRCHRDS1,
|
||
|
SRCHRDS2,
|
||
|
SRCHCTRL,
|
||
|
IOCTRL,
|
||
|
RDSCTRL,
|
||
|
ADVCTRL,
|
||
|
AUDIOCTRL,
|
||
|
RMSSI,
|
||
|
IOVERC,
|
||
|
AUDIOIND = 0x1E,
|
||
|
XFRCTRL,
|
||
|
FM_CTL0 = 0xFF,
|
||
|
LEAKAGE_CNTRL = 0xFE,
|
||
|
};
|
||
|
#define BAHAMA_RBIAS_CTL1 0x07
|
||
|
#define BAHAMA_FM_MODE_REG 0xFD
|
||
|
#define BAHAMA_FM_CTL1_REG 0xFE
|
||
|
#define BAHAMA_FM_CTL0_REG 0xFF
|
||
|
#define BAHAMA_FM_MODE_NORMAL 0x00
|
||
|
#define BAHAMA_LDO_DREG_CTL0 0xF0
|
||
|
#define BAHAMA_LDO_AREG_CTL0 0xF4
|
||
|
|
||
|
/* Radio Control */
|
||
|
#define RDCTRL_STATE_OFFSET 0
|
||
|
#define RDCTRL_STATE_MASK (3 << RDCTRL_STATE_OFFSET)
|
||
|
#define RDCTRL_BAND_OFFSET 2
|
||
|
#define RDCTRL_BAND_MASK (1 << RDCTRL_BAND_OFFSET)
|
||
|
#define RDCTRL_CHSPACE_OFFSET 3
|
||
|
#define RDCTRL_CHSPACE_MASK (3 << RDCTRL_CHSPACE_OFFSET)
|
||
|
#define RDCTRL_DEEMPHASIS_OFFSET 5
|
||
|
#define RDCTRL_DEEMPHASIS_MASK (1 << RDCTRL_DEEMPHASIS_OFFSET)
|
||
|
#define RDCTRL_HLSI_OFFSET 6
|
||
|
#define RDCTRL_HLSI_MASK (3 << RDCTRL_HLSI_OFFSET)
|
||
|
#define RDSAF_OFFSET 6
|
||
|
#define RDSAF_MASK (1 << RDSAF_OFFSET)
|
||
|
|
||
|
/* Tune Control */
|
||
|
#define TUNE_STATION 0x01
|
||
|
#define ADD_OFFSET (1 << 1)
|
||
|
#define SIGSTATE (1 << 5)
|
||
|
#define MOSTSTATE (1 << 6)
|
||
|
#define RDSSYNC (1 << 7)
|
||
|
/* Search Control */
|
||
|
#define SRCH_MODE_OFFSET 0
|
||
|
#define SRCH_MODE_MASK (7 << SRCH_MODE_OFFSET)
|
||
|
#define SRCH_DIR_OFFSET 3
|
||
|
#define SRCH_DIR_MASK (1 << SRCH_DIR_OFFSET)
|
||
|
#define SRCH_DWELL_OFFSET 4
|
||
|
#define SRCH_DWELL_MASK (7 << SRCH_DWELL_OFFSET)
|
||
|
#define SRCH_STATE_OFFSET 7
|
||
|
#define SRCH_STATE_MASK (1 << SRCH_STATE_OFFSET)
|
||
|
|
||
|
/* I/O Control */
|
||
|
#define IOC_HRD_MUTE 0x03
|
||
|
#define IOC_SFT_MUTE (1 << 2)
|
||
|
#define IOC_MON_STR (1 << 3)
|
||
|
#define IOC_SIG_BLND (1 << 4)
|
||
|
#define IOC_INTF_BLND (1 << 5)
|
||
|
#define IOC_ANTENNA (1 << 6)
|
||
|
#define IOC_ANTENNA_OFFSET 6
|
||
|
#define IOC_ANTENNA_MASK (1 << IOC_ANTENNA_OFFSET)
|
||
|
|
||
|
/* RDS Control */
|
||
|
#define RDS_ON 0x01
|
||
|
#define RDSCTRL_STANDARD_OFFSET 1
|
||
|
#define RDSCTRL_STANDARD_MASK (1 << RDSCTRL_STANDARD_OFFSET)
|
||
|
|
||
|
/* Advanced features controls */
|
||
|
#define RDSRTEN (1 << 3)
|
||
|
#define RDSPSEN (1 << 4)
|
||
|
|
||
|
/* Audio path control */
|
||
|
#define AUDIORX_ANALOG_OFFSET 0
|
||
|
#define AUDIORX_ANALOG_MASK (1 << AUDIORX_ANALOG_OFFSET)
|
||
|
#define AUDIORX_DIGITAL_OFFSET 1
|
||
|
#define AUDIORX_DIGITAL_MASK (1 << AUDIORX_DIGITAL_OFFSET)
|
||
|
#define AUDIOTX_OFFSET 2
|
||
|
#define AUDIOTX_MASK (1 << AUDIOTX_OFFSET)
|
||
|
#define I2SCTRL_OFFSET 3
|
||
|
#define I2SCTRL_MASK (1 << I2SCTRL_OFFSET)
|
||
|
|
||
|
/* Search options */
|
||
|
enum search_t {
|
||
|
SEEK,
|
||
|
SCAN,
|
||
|
SCAN_FOR_STRONG,
|
||
|
SCAN_FOR_WEAK,
|
||
|
RDS_SEEK_PTY,
|
||
|
RDS_SCAN_PTY,
|
||
|
RDS_SEEK_PI,
|
||
|
RDS_AF_JUMP,
|
||
|
};
|
||
|
|
||
|
/* Band limits */
|
||
|
#define REGION_US_EU_BAND_LOW 87500
|
||
|
#define REGION_US_EU_BAND_HIGH 108000
|
||
|
#define REGION_JAPAN_STANDARD_BAND_LOW 76000
|
||
|
#define REGION_JAPAN_STANDARD_BAND_HIGH 90000
|
||
|
#define REGION_JAPAN_WIDE_BAND_LOW 90000
|
||
|
#define REGION_JAPAN_WIDE_BAND_HIGH 108000
|
||
|
#define MPX_DCC_BYPASS_REG 0x88C0
|
||
|
#define MPX_DCC_DATA_REG 0x88C2
|
||
|
|
||
|
enum audio_path {
|
||
|
FM_DIGITAL_PATH,
|
||
|
FM_ANALOG_PATH
|
||
|
};
|
||
|
#define SRCH_MODE 0x07
|
||
|
#define SRCH_DIR 0x08 /* 0-up 1-down */
|
||
|
#define SCAN_DWELL 0x70
|
||
|
#define SRCH_ON 0x80
|
||
|
|
||
|
/* RDS CONFIG */
|
||
|
#define RDS_CONFIG_PSALL 0x01
|
||
|
|
||
|
#define FM_ENABLE 0x22
|
||
|
#define SET_REG_FIELD(reg, val, offset, mask) \
|
||
|
(reg = (reg & ~mask) | (((val) << offset) & mask))
|
||
|
#define GET_REG_FIELD(reg, offset, mask) ((reg & mask) >> offset)
|
||
|
#define RSH_DATA(val, offset) ((val) >> (offset))
|
||
|
#define LSH_DATA(val, offset) ((val) << (offset))
|
||
|
#define GET_ABS_VAL(val) ((val) & (0xFF))
|
||
|
|
||
|
enum radio_state_t {
|
||
|
FM_OFF,
|
||
|
FM_RECV,
|
||
|
FM_TRANS,
|
||
|
FM_RESET,
|
||
|
};
|
||
|
|
||
|
#define XFRCTRL_WRITE (1 << 7)
|
||
|
|
||
|
/* Interrupt status */
|
||
|
|
||
|
/* interrupt register 1 */
|
||
|
#define READY (1 << 0) /* Radio ready after powerup or reset */
|
||
|
#define TUNE (1 << 1) /* Tune completed */
|
||
|
#define SEARCH (1 << 2) /* Search completed (read FREQ) */
|
||
|
#define SCANNEXT (1 << 3) /* Scanning for next station */
|
||
|
#define SIGNAL (1 << 4) /* Signal indicator change (read SIGSTATE) */
|
||
|
#define INTF (1 << 5) /* Interference cnt has fallen outside range */
|
||
|
#define SYNC (1 << 6) /* RDS sync state change (read RDSSYNC) */
|
||
|
#define AUDIO (1 << 7) /* Audio Control indicator (read AUDIOIND) */
|
||
|
|
||
|
/* interrupt register 2 */
|
||
|
#define RDSDAT (1 << 0) /* New unread RDS data group available */
|
||
|
#define BLOCKB (1 << 1) /* Block-B match condition exists */
|
||
|
#define PROGID (1 << 2) /* Block-A or Block-C matched stored PI value*/
|
||
|
#define RDSPS (1 << 3) /* New RDS Program Service Table available */
|
||
|
#define RDSRT (1 << 4) /* New RDS Radio Text available */
|
||
|
#define RDSAF (1 << 5) /* New RDS AF List available */
|
||
|
#define TXRDSDAT (1 << 6) /* Transmitted an RDS group */
|
||
|
#define TXRDSDONE (1 << 7) /* RDS raw group one-shot transmit completed */
|
||
|
|
||
|
/* interrupt register 3 */
|
||
|
#define TRANSFER (1 << 0) /* Data transfer (XFR) completed */
|
||
|
#define RDSPROC (1 << 1) /* Dynamic RDS Processing complete */
|
||
|
#define ERROR (1 << 7) /* Err occurred.Read code to determine cause */
|
||
|
|
||
|
|
||
|
#define FM_TX_PWR_LVL_0 0 /* Lowest power lvl that can be set for Tx */
|
||
|
#define FM_TX_PWR_LVL_MAX 7 /* Max power lvl for Tx */
|
||
|
|
||
|
/* Tone Generator control value */
|
||
|
#define TONE_GEN_CTRL_BYTE 0x00
|
||
|
#define TONE_CHANNEL_EN_AND_SCALING_BYTE 0x01
|
||
|
#define TONE_LEFT_FREQ_BYTE 0x02
|
||
|
#define TONE_RIGHT_FREQ_BYTE 0x03
|
||
|
#define TONE_LEFT_PHASE 0x04
|
||
|
#define TONE_RIGHT_PHASE 0x05
|
||
|
|
||
|
#define TONE_LEFT_CH_ENABLED 0x01
|
||
|
#define TONE_RIGHT_CH_ENABLED 0x02
|
||
|
#define TONE_LEFT_RIGHT_CH_ENABLED (TONE_LEFT_CH_ENABLED\
|
||
|
| TONE_RIGHT_CH_ENABLED)
|
||
|
|
||
|
#define TONE_SCALING_SHIFT 0x02
|
||
|
|
||
|
/* Transfer */
|
||
|
enum tavarua_xfr_ctrl_t {
|
||
|
RDS_PS_0 = 0x01,
|
||
|
RDS_PS_1,
|
||
|
RDS_PS_2,
|
||
|
RDS_PS_3,
|
||
|
RDS_PS_4,
|
||
|
RDS_PS_5,
|
||
|
RDS_PS_6,
|
||
|
RDS_RT_0,
|
||
|
RDS_RT_1,
|
||
|
RDS_RT_2,
|
||
|
RDS_RT_3,
|
||
|
RDS_RT_4,
|
||
|
RDS_AF_0,
|
||
|
RDS_AF_1,
|
||
|
RDS_CONFIG,
|
||
|
RDS_TX_GROUPS,
|
||
|
RDS_COUNT_0,
|
||
|
RDS_COUNT_1,
|
||
|
RDS_COUNT_2,
|
||
|
RADIO_CONFIG,
|
||
|
RX_CONFIG,
|
||
|
RX_TIMERS,
|
||
|
RX_STATIONS_0,
|
||
|
RX_STATIONS_1,
|
||
|
INT_CTRL,
|
||
|
ERROR_CODE,
|
||
|
CHIPID,
|
||
|
CAL_DAT_0 = 0x20,
|
||
|
CAL_DAT_1,
|
||
|
CAL_DAT_2,
|
||
|
CAL_DAT_3,
|
||
|
CAL_CFG_0,
|
||
|
CAL_CFG_1,
|
||
|
DIG_INTF_0,
|
||
|
DIG_INTF_1,
|
||
|
DIG_AGC_0,
|
||
|
DIG_AGC_1,
|
||
|
DIG_AGC_2,
|
||
|
DIG_AUDIO_0,
|
||
|
DIG_AUDIO_1,
|
||
|
DIG_AUDIO_2,
|
||
|
DIG_AUDIO_3,
|
||
|
DIG_AUDIO_4,
|
||
|
DIG_RXRDS,
|
||
|
DIG_DCC,
|
||
|
DIG_SPUR,
|
||
|
DIG_MPXDCC,
|
||
|
DIG_PILOT,
|
||
|
DIG_DEMOD,
|
||
|
DIG_MOST,
|
||
|
DIG_TX_0,
|
||
|
DIG_TX_1,
|
||
|
PHY_TXGAIN = 0x3B,
|
||
|
PHY_CONFIG,
|
||
|
PHY_TXBLOCK,
|
||
|
PHY_TCB,
|
||
|
XFR_EXT,
|
||
|
XFR_PEEK_MODE = 0x40,
|
||
|
XFR_POKE_MODE = 0xC0,
|
||
|
TAVARUA_XFR_CTRL_MAX
|
||
|
};
|
||
|
|
||
|
enum tavarua_evt_t {
|
||
|
TAVARUA_EVT_RADIO_READY,
|
||
|
TAVARUA_EVT_TUNE_SUCC,
|
||
|
TAVARUA_EVT_SEEK_COMPLETE,
|
||
|
TAVARUA_EVT_SCAN_NEXT,
|
||
|
TAVARUA_EVT_NEW_RAW_RDS,
|
||
|
TAVARUA_EVT_NEW_RT_RDS,
|
||
|
TAVARUA_EVT_NEW_PS_RDS,
|
||
|
TAVARUA_EVT_ERROR,
|
||
|
TAVARUA_EVT_BELOW_TH,
|
||
|
TAVARUA_EVT_ABOVE_TH,
|
||
|
TAVARUA_EVT_STEREO,
|
||
|
TAVARUA_EVT_MONO,
|
||
|
TAVARUA_EVT_RDS_AVAIL,
|
||
|
TAVARUA_EVT_RDS_NOT_AVAIL,
|
||
|
TAVARUA_EVT_NEW_SRCH_LIST,
|
||
|
TAVARUA_EVT_NEW_AF_LIST,
|
||
|
TAVARUA_EVT_TXRDSDAT,
|
||
|
TAVARUA_EVT_TXRDSDONE,
|
||
|
TAVARUA_EVT_RADIO_DISABLED
|
||
|
};
|
||
|
|
||
|
enum tavarua_region_t {
|
||
|
TAVARUA_REGION_US,
|
||
|
TAVARUA_REGION_EU,
|
||
|
TAVARUA_REGION_JAPAN,
|
||
|
TAVARUA_REGION_JAPAN_WIDE,
|
||
|
TAVARUA_REGION_OTHER
|
||
|
};
|
||
|
|
||
|
enum {
|
||
|
ONE_BYTE = 1,
|
||
|
TWO_BYTE,
|
||
|
THREE_BYTE,
|
||
|
FOUR_BYTE,
|
||
|
FIVE_BYTE,
|
||
|
SIX_BYTE,
|
||
|
SEVEN_BYTE,
|
||
|
EIGHT_BYTE,
|
||
|
NINE_BYTE,
|
||
|
TEN_BYTE,
|
||
|
ELEVEN_BYTE,
|
||
|
TWELVE_BYTE,
|
||
|
THIRTEEN_BYTE
|
||
|
};
|
||
|
|
||
|
#define XFR_READ (0)
|
||
|
#define XFR_WRITE (1)
|
||
|
#define XFR_MODE_OFFSET (0)
|
||
|
#define XFR_ADDR_MSB_OFFSET (1)
|
||
|
#define XFR_ADDR_LSB_OFFSET (2)
|
||
|
#define XFR_DATA_OFFSET (3)
|
||
|
#define SPUR_DATA_SIZE (3)
|
||
|
#define MAX_SPUR_FREQ_LIMIT (30)
|
||
|
#define READ_COMPLETE (0x20)
|
||
|
#define SPUR_TABLE_ADDR (0x0BB7)
|
||
|
#define SPUR_TABLE_START_ADDR (SPUR_TABLE_ADDR + 1)
|
||
|
#define XFR_PEEK_COMPLETE (XFR_PEEK_MODE | READ_COMPLETE)
|
||
|
#define XFR_POKE_COMPLETE (XFR_POKE_MODE)
|
||
|
#define TUNE_MULT (16)
|
||
|
#define ADJ_CHANNEL_KHZ (50)
|
||
|
#define MPX_DCC_UPPER_LIMIT (20000)
|
||
|
#define MPX_DCC_LIMIT (12566)
|
||
|
#define INVALID_CHANNEL (0)
|
||
|
#define VALID_CHANNEL (1)
|
||
|
|
||
|
#define COMPUTE_SPUR(val) ((((val) - (76000)) / (50)))
|
||
|
#define GET_FREQ(val, bit) ((bit == 1) ? ((val) >> 8) : ((val) & 0xFF))
|
||
|
|
||
|
struct fm_spur_data {
|
||
|
int freq[MAX_SPUR_FREQ_LIMIT];
|
||
|
__s8 rmssi[MAX_SPUR_FREQ_LIMIT];
|
||
|
} __packed;
|
||
|
|
||
|
struct fm_def_data_wr_req {
|
||
|
__u8 mode;
|
||
|
__u8 length;
|
||
|
__u8 data[XFR_REG_NUM];
|
||
|
} __packed;
|
||
|
|
||
|
enum Internal_tone_gen_vals {
|
||
|
ONE_KHZ_LR_EQUA_0DBFS = 1,
|
||
|
ONE_KHZ_LEFTONLY_EQUA_0DBFS,
|
||
|
ONE_KHZ_RIGHTONLY_EQUA_0DBFS,
|
||
|
ONE_KHZ_LR_EQUA_l8DBFS,
|
||
|
FIFTEEN_KHZ_LR_EQUA_l8DBFS
|
||
|
};
|
||
|
|
||
|
enum Tone_scaling_indexes {
|
||
|
TONE_SCALE_IND_0,
|
||
|
TONE_SCALE_IND_1,
|
||
|
TONE_SCALE_IND_2,
|
||
|
TONE_SCALE_IND_3,
|
||
|
TONE_SCALE_IND_4,
|
||
|
TONE_SCALE_IND_5,
|
||
|
TONE_SCALE_IND_6,
|
||
|
TONE_SCALE_IND_7,
|
||
|
TONE_SCALE_IND_8,
|
||
|
TONE_SCALE_IND_9,
|
||
|
TONE_SCALE_IND_10,
|
||
|
TONE_SCALE_IND_11,
|
||
|
TONE_SCALE_IND_12
|
||
|
};
|
||
|
|
||
|
#endif /* __LINUX_TAVARUA_H */
|