@@ -38,8 +38,7 @@
#include "fmdrv_common.h"
#include "st.h"
#include "fmdrv_rx.h"
-/* TODO: Enable when FM TX is supported */
-/* #include "fmdrv_tx.h" */
+#include "fmdrv_tx.h"
#ifndef DEBUG
#ifdef pr_info
@@ -188,6 +187,8 @@ static struct fm_reg_table fm_reg_info[] = {
{0x51, REG_RD, "MS_GET"},
{0x52, REG_WR, "PS_SCROLL_SPEED_SET"},
{0x52, REG_RD, "PS_SCROLL_SPEED_GET"},
+ {0x57, REG_WR, "ANT_IMP_SET"},
+ {0x57, REG_RD, "ANT_IMP_GET"},
};
/* Region info */
@@ -1507,9 +1508,8 @@ int fmc_set_frequency(struct fmdrv_ops *fmdev, unsigned int freq_to_set)
break;
case FM_MODE_TX:
- /* TODO: Enable when FM TX is supported */
- /* ret = fm_tx_set_frequency(fmdev, freq_to_set); */
- /* break; */
+ ret = fm_tx_set_frequency(fmdev, freq_to_set);
+ break;
default:
ret = -EINVAL;
@@ -1548,13 +1548,6 @@ exit:
return ret;
}
-/* Returns current band index (0-Europe/US; 1-Japan) */
-int fmc_get_region(struct fmdrv_ops *fmdev, unsigned char *region)
-{
- *region = fmdev->rx.region.region_index;
- return 0;
-}
-
int fmc_set_region(struct fmdrv_ops *fmdev, unsigned char region_to_set)
{
int ret;
@@ -1565,9 +1558,8 @@ int fmc_set_region(struct fmdrv_ops *fmdev, unsigned char region_to_set)
break;
case FM_MODE_TX:
- /* TODO: Enable when FM TX is supported */
- /* ret = fm_tx_set_region(fmdev, region_to_set); */
- /* break; */
+ ret = fm_tx_set_region(fmdev, region_to_set);
+ break;
default:
ret = -EINVAL;
@@ -1585,9 +1577,8 @@ int fmc_set_mute_mode(struct fmdrv_ops *fmdev, unsigned char mute_mode_toset)
break;
case FM_MODE_TX:
- /* TODO: Enable when FM TX is supported */
- /* ret = fm_tx_set_mute_mode(fmdev, mute_mode_toset); */
- /* break; */
+ ret = fm_tx_set_mute_mode(fmdev, mute_mode_toset);
+ break;
default:
ret = -EINVAL;
@@ -1605,9 +1596,8 @@ int fmc_set_stereo_mono(struct fmdrv_ops *fmdev, unsigned short mode)
break;
case FM_MODE_TX:
- /* TODO: Enable when FM TX is supported */
- /* ret = fm_tx_set_stereo_mono(fmdev, mode); */
- /* break; */
+ ret = fm_tx_set_stereo_mono(fmdev, mode);
+ break;
default:
ret = -EINVAL;
@@ -1625,9 +1615,8 @@ int fmc_set_rds_mode(struct fmdrv_ops *fmdev, unsigned char rds_en_dis)
break;
case FM_MODE_TX:
- /* TODO: Enable when FM TX is supported */
- /* ret = fm_tx_set_rds_mode(fmdev, rds_en_dis); */
- /* break; */
+ ret = fm_tx_set_rds_mode(fmdev, rds_en_dis);
+ break;
default:
ret = -EINVAL;
@@ -2101,6 +2090,8 @@ static int __init fm_drv_init(void)
fmdev->irq_info.fm_int_handlers = g_IntHandlerTable;
fmdev->curr_fmmode = FM_MODE_OFF;
+ fmdev->tx_data.pwr_lvl = FM_PWR_LVL_DEF;
+ fmdev->tx_data.preemph = FM_TX_PREEMPH_50US;
goto exit;
rel_rdsbuf:
@@ -173,6 +173,8 @@ enum fm_reg_index {
MS_GET,
PS_SCROLL_SPEED_SET,
PS_SCROLL_SPEED_GET,
+ IMP_SET,
+ IMP_GET,
FM_REG_MAX_ENTRIES
};
@@ -300,8 +302,8 @@ struct bts_action_delay {
#define FM_RX_VOLUME_GAIN_STEP 0x370
/* Mute modes */
-#define FM_MUTE_ON 0
-#define FM_MUTE_OFF 1
+#define FM_MUTE_OFF 0
+#define FM_MUTE_ON 1
#define FM_MUTE_ATTENUATE 2
#define FM_RX_MUTE_UNMUTE_MODE 0x00
@@ -432,6 +434,23 @@ struct bts_action_delay {
#define FM_DEFAULT_RX_VOLUME 10
#define FM_DEFAULT_RSSI_THRESHOLD 3
+/* Range for TX power level in units for dB/uV */
+#define FM_PWR_LVL_LOW 91
+#define FM_PWR_LVL_HIGH 122
+
+/* Chip specific default TX power level value */
+#define FM_PWR_LVL_DEF 4
+
+/* FM TX Pre-emphasis filter values */
+#define FM_TX_PREEMPH_OFF 1
+#define FM_TX_PREEMPH_50US 0
+#define FM_TX_PREEMPH_75US 2
+
+/* FM TX antenna impedence values */
+#define FM_TX_ANT_IMP_50 0
+#define FM_TX_ANT_IMP_200 1
+#define FM_TX_ANT_IMP_500 2
+
/* Functions exported by FM common sub-module */
int fmc_prepare(struct fmdrv_ops *);
int fmc_release(struct fmdrv_ops *);