static int fm_v4l2_fops_release(struct file *file) { int ret; struct fmdev *fmdev; fmdev = video_drvdata(file); if (!radio_disconnected) { fmdbg("FM device is already closed\n"); return 0; } mutex_lock(&fmdev->mutex); ret = fmc_set_mode(fmdev, FM_MODE_OFF); if (ret < 0) { fmerr("Unable to turn off the chip\n"); goto release_unlock; } ret = fmc_release(fmdev); if (ret < 0) { fmerr("FM CORE release failed\n"); goto release_unlock; } radio_disconnected = 0; release_unlock: mutex_unlock(&fmdev->mutex); return ret; }
static int fm_v4l2_fops_release(struct file *file) { int ret; struct fmdev *fmdev; fmdev = video_drvdata(file); if (fmdev->rx.comp_scan_status == 1) { if (fmdev->rx.comp_scan_done == 0) { ret = fm_rx_seek(fmdev, 1, 0, FM_CHANNEL_SPACING_200KHZ, COMP_SCAN_STOP); if (ret < 0) fmerr("RX complete scan failed - %d\n", ret); } } if (!radio_disconnected) { fmdbg("FM device is already closed\n"); return 0; } ret = fmc_set_mode(fmdev, FM_MODE_OFF); if (ret < 0) { fmerr("Unable to turn off the chip\n"); return ret; } sysfs_remove_group(&fmdev->radio_dev->dev.kobj, &v4l2_fm_attr_grp); ret = fmc_release(fmdev); if (ret < 0) { fmerr("FM CORE release failed\n"); return ret; } radio_disconnected = 0; return ret; }