Пример #1
0
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;
	}
}
Пример #2
0
/* Write TX RDS data */
static ssize_t fm_v4l2_fops_write(struct file *file, const char __user * buf,
		size_t count, loff_t *ppos)
{
	struct tx_rds rds;
	int ret;
	struct fmdev *fmdev;

	ret = copy_from_user(&rds, buf, sizeof(rds));
	fmdbg("(%d)type: %d, text %s, af %d\n",
		   ret, rds.text_type, rds.text, rds.af_freq);

	fmdev = video_drvdata(file);
	fm_tx_set_radio_text(fmdev, rds.text, rds.text_type);
	fm_tx_set_af(fmdev, rds.af_freq);

	return 0;
}
Пример #3
0
/* Write TX RDS data */
static ssize_t fm_v4l2_fops_write(struct file *file, const char __user * buf,
		size_t count, loff_t *ppos)
{
	struct tx_rds rds;
	int ret;
	struct fmdev *fmdev;

	ret = copy_from_user(&rds, buf, sizeof(rds));
	rds.text[sizeof(rds.text) - 1] = '\0';
	fmdbg("(%d)type: %d, text %s, af %d\n",
		   ret, rds.text_type, rds.text, rds.af_freq);
	if (ret)
		return -EFAULT;

	fmdev = video_drvdata(file);
	if (mutex_lock_interruptible(&fmdev->mutex))
		return -ERESTARTSYS;
	fm_tx_set_radio_text(fmdev, rds.text, rds.text_type);
	fm_tx_set_af(fmdev, rds.af_freq);
	mutex_unlock(&fmdev->mutex);

	return sizeof(rds);
}