static ssize_t store_fmtx_af(struct device *dev, struct device_attribute *attr, char *buf, size_t size) { int ret; unsigned long af_freq; struct fmdev *fmdev = dev_get_drvdata(dev); if (strict_strtoul(buf, 0, &af_freq)) return -EINVAL; ret = fm_tx_set_af(fmdev, af_freq); if (ret < 0) { fmerr("Failed to set FM TX AF Frequency\n"); return ret; } return size; }
/* 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; }
/* 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); }