static int fm_v4l2_s_ctrl(struct v4l2_ctrl *ctrl) { struct fmdev *fmdev = container_of(ctrl->handler, struct fmdev, ctrl_handler); int ret; switch (ctrl->id) { case V4L2_CID_AUDIO_VOLUME: /* set volume */ return fm_rx_set_volume(fmdev, (u16)ctrl->val); case V4L2_CID_AUDIO_MUTE: /* set mute */ return fmc_set_mute_mode(fmdev, (u8)ctrl->val); case V4L2_CID_TUNE_POWER_LEVEL: /* set TX power level - ext control */ return fm_tx_set_pwr_lvl(fmdev, (u8)ctrl->val); case V4L2_CID_TUNE_PREEMPHASIS: return fm_tx_set_preemph_filter(fmdev, (u8) ctrl->val); case V4L2_CID_RDS_TX_PI: ret = set_rds_picode(fmdev, ctrl->val); if (ret < 0) { fmerr("Failed to set RDS Radio PS Name\n"); return ret; } return 0; case V4L2_CID_RDS_TX_PTY: ret = set_rds_pty(fmdev, ctrl->val); if (ret < 0) { fmerr("Failed to set RDS Radio PS Name\n"); return ret; } return 0; case V4L2_CID_RDS_TX_PS_NAME: ret = fm_tx_set_radio_text(fmdev, ctrl->string, 1); if (ret < 0) { fmerr("Failed to set RDS Radio PS Name\n"); return ret; } return 0; case V4L2_CID_RDS_TX_RADIO_TEXT: ret = fm_tx_set_radio_text(fmdev, ctrl->string, 2); if (ret < 0) { fmerr("Failed to set RDS Radio Text\n"); return ret; } return 0; default: return -EINVAL; } }
/* Set TX Frequency */ int fm_tx_set_freq(struct fmdev *fmdev, u32 freq_to_set) { struct fmtx_data *tx = &fmdev->tx_data; u16 payload, chanl_index; int ret; if (test_bit(FM_CORE_TX_XMITING, &fmdev->flag)) { enable_xmit(fmdev, 0); clear_bit(FM_CORE_TX_XMITING, &fmdev->flag); } /* Enable FR, BL interrupts */ payload = (FM_FR_EVENT | FM_BL_EVENT); ret = fmc_send_cmd(fmdev, INT_MASK_SET, REG_WR, &payload, sizeof(payload), NULL, NULL); if (ret < 0) return ret; tx->tx_frq = (unsigned long)freq_to_set; fmdbg("tx: freq_to_set %ld\n", (long int)tx->tx_frq); chanl_index = freq_to_set / 10; /* Set current tuner channel */ payload = chanl_index; ret = fmc_send_cmd(fmdev, CHANL_SET, REG_WR, &payload, sizeof(payload), NULL, NULL); if (ret < 0) return ret; fm_tx_set_pwr_lvl(fmdev, tx->pwr_lvl); fm_tx_set_preemph_filter(fmdev, tx->preemph); tx->audio_io = 0x01; /* I2S */ set_audio_io(fmdev); enable_xmit(fmdev, 0x01); /* Enable transmission */ tx->aud_mode = FM_STEREO_MODE; tx->rds.flag = FM_RDS_DISABLE; tx->tx_frq = freq_to_set * 1000; /* in KHz */ return 0; }
static int fm_v4l2_s_ctrl(struct v4l2_ctrl *ctrl) { struct fmdev *fmdev = container_of(ctrl->handler, struct fmdev, ctrl_handler); switch (ctrl->id) { case V4L2_CID_AUDIO_VOLUME: /* set volume */ return fm_rx_set_volume(fmdev, (u16)ctrl->val); case V4L2_CID_AUDIO_MUTE: /* set mute */ return fmc_set_mute_mode(fmdev, (u8)ctrl->val); case V4L2_CID_TUNE_POWER_LEVEL: /* set TX power level - ext control */ return fm_tx_set_pwr_lvl(fmdev, (u8)ctrl->val); case V4L2_CID_TUNE_PREEMPHASIS: return fm_tx_set_preemph_filter(fmdev, (u8) ctrl->val); default: return -EINVAL; } }