Lines Matching refs:radio

327 	struct si476x_radio *radio = video_drvdata(file);  in si476x_radio_querycap()  local
329 strscpy(capability->driver, radio->v4l2dev.name, in si476x_radio_querycap()
333 "platform:%s", radio->v4l2dev.name); in si476x_radio_querycap()
341 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_enum_freq_bands() local
346 switch (radio->core->chip_id) { in si476x_radio_enum_freq_bands()
379 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_g_tuner() local
401 si476x_core_lock(radio->core); in si476x_radio_g_tuner()
403 if (si476x_core_is_a_secondary_tuner(radio->core)) { in si476x_radio_g_tuner()
407 } else if (si476x_core_has_am(radio->core)) { in si476x_radio_g_tuner()
408 if (si476x_core_is_a_primary_tuner(radio->core)) in si476x_radio_g_tuner()
430 tuner->audmode = radio->audmode; in si476x_radio_g_tuner()
435 err = radio->ops->rsq_status(radio->core, in si476x_radio_g_tuner()
446 si476x_core_unlock(radio->core); in si476x_radio_g_tuner()
454 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_tuner() local
461 radio->audmode = tuner->audmode; in si476x_radio_s_tuner()
463 radio->audmode = V4L2_TUNER_MODE_STEREO; in si476x_radio_s_tuner()
468 static int si476x_radio_init_vtable(struct si476x_radio *radio, in si476x_radio_init_vtable() argument
495 radio->ops = &fm_ops; in si476x_radio_init_vtable()
499 radio->ops = &am_ops; in si476x_radio_init_vtable()
507 static int si476x_radio_pretune(struct si476x_radio *radio, in si476x_radio_pretune() argument
523 args.freq = v4l2_to_si476x(radio->core, in si476x_radio_pretune()
525 retval = radio->ops->tune_freq(radio->core, &args); in si476x_radio_pretune()
528 args.freq = v4l2_to_si476x(radio->core, in si476x_radio_pretune()
530 retval = radio->ops->tune_freq(radio->core, &args); in si476x_radio_pretune()
539 static int si476x_radio_do_post_powerup_init(struct si476x_radio *radio, in si476x_radio_do_post_powerup_init() argument
545 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
551 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
557 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
567 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
573 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
580 if (si476x_core_has_diversity(radio->core)) { in si476x_radio_do_post_powerup_init()
581 err = si476x_core_cmd_fm_phase_diversity(radio->core, in si476x_radio_do_post_powerup_init()
582 radio->core->diversity_mode); in si476x_radio_do_post_powerup_init()
587 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
594 return si476x_radio_init_vtable(radio, func); in si476x_radio_do_post_powerup_init()
598 static int si476x_radio_change_func(struct si476x_radio *radio, in si476x_radio_change_func() argument
608 if (func == radio->core->power_up_parameters.func) in si476x_radio_change_func()
612 err = si476x_core_stop(radio->core, soft); in si476x_radio_change_func()
619 err = si476x_core_stop(radio->core, soft); in si476x_radio_change_func()
626 radio->core->power_up_parameters.func = func; in si476x_radio_change_func()
628 err = si476x_core_start(radio->core, soft); in si476x_radio_change_func()
640 return si476x_radio_do_post_powerup_init(radio, func); in si476x_radio_change_func()
647 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_g_frequency() local
653 si476x_core_lock(radio->core); in si476x_radio_g_frequency()
655 if (radio->ops->rsq_status) { in si476x_radio_g_frequency()
665 err = radio->ops->rsq_status(radio->core, &args, &report); in si476x_radio_g_frequency()
667 f->frequency = si476x_to_v4l2(radio->core, in si476x_radio_g_frequency()
673 si476x_core_unlock(radio->core); in si476x_radio_g_frequency()
684 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_frequency() local
697 si476x_core_lock(radio->core); in si476x_radio_s_frequency()
705 (!si476x_core_has_am(radio->core) || in si476x_radio_s_frequency()
706 si476x_core_is_a_secondary_tuner(radio->core))) { in si476x_radio_s_frequency()
711 err = si476x_radio_change_func(radio, func); in si476x_radio_s_frequency()
718 args.freq = v4l2_to_si476x(radio->core, freq); in si476x_radio_s_frequency()
723 err = radio->ops->tune_freq(radio->core, &args); in si476x_radio_s_frequency()
726 si476x_core_unlock(radio->core); in si476x_radio_s_frequency()
736 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_hw_freq_seek() local
745 si476x_core_lock(radio->core); in si476x_radio_s_hw_freq_seek()
748 err = regmap_read(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
753 rangelow = si476x_to_v4l2(radio->core, rangelow); in si476x_radio_s_hw_freq_seek()
756 err = regmap_read(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
761 rangehigh = si476x_to_v4l2(radio->core, rangehigh); in si476x_radio_s_hw_freq_seek()
773 } else if (si476x_core_has_am(radio->core) && in si476x_radio_s_hw_freq_seek()
782 err = si476x_radio_change_func(radio, func); in si476x_radio_s_hw_freq_seek()
787 err = regmap_write(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
789 v4l2_to_si476x(radio->core, in si476x_radio_s_hw_freq_seek()
795 err = regmap_write(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
797 v4l2_to_si476x(radio->core, in si476x_radio_s_hw_freq_seek()
803 err = regmap_write(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
805 v4l2_to_si476x(radio->core, in si476x_radio_s_hw_freq_seek()
811 err = radio->ops->seek_start(radio->core, in si476x_radio_s_hw_freq_seek()
815 si476x_core_unlock(radio->core); in si476x_radio_s_hw_freq_seek()
825 struct si476x_radio *radio = v4l2_ctrl_handler_to_radio(ctrl->handler); in si476x_radio_g_volatile_ctrl() local
827 si476x_core_lock(radio->core); in si476x_radio_g_volatile_ctrl()
831 if (si476x_core_has_diversity(radio->core)) { in si476x_radio_g_volatile_ctrl()
832 if (radio->ops->phase_diversity) { in si476x_radio_g_volatile_ctrl()
833 retval = radio->ops->phase_div_status(radio->core); in si476x_radio_g_volatile_ctrl()
851 si476x_core_unlock(radio->core); in si476x_radio_g_volatile_ctrl()
860 struct si476x_radio *radio = v4l2_ctrl_handler_to_radio(ctrl->handler); in si476x_radio_s_ctrl() local
862 si476x_core_lock(radio->core); in si476x_radio_s_ctrl()
866 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
874 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
880 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
886 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
897 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
902 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
907 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
917 if (si476x_core_is_in_am_receiver_mode(radio->core)) in si476x_radio_s_ctrl()
918 regcache_cache_only(radio->core->regmap, true); in si476x_radio_s_ctrl()
921 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
923 radio->core->rds_fifo_depth); in si476x_radio_s_ctrl()
927 if (radio->core->client->irq) { in si476x_radio_s_ctrl()
928 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
936 retval = si476x_core_cmd_fm_rds_status(radio->core, in si476x_radio_s_ctrl()
944 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
949 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
955 if (si476x_core_is_in_am_receiver_mode(radio->core)) in si476x_radio_s_ctrl()
956 regcache_cache_only(radio->core->regmap, false); in si476x_radio_s_ctrl()
959 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
967 if (mode == radio->core->diversity_mode) { in si476x_radio_s_ctrl()
972 if (si476x_core_is_in_am_receiver_mode(radio->core)) { in si476x_radio_s_ctrl()
977 radio->core->diversity_mode = mode; in si476x_radio_s_ctrl()
980 retval = radio->ops->phase_diversity(radio->core, mode); in si476x_radio_s_ctrl()
982 radio->core->diversity_mode = mode; in si476x_radio_s_ctrl()
991 si476x_core_unlock(radio->core); in si476x_radio_s_ctrl()
1002 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_g_register() local
1004 si476x_core_lock(radio->core); in si476x_radio_g_register()
1006 err = regmap_read(radio->core->regmap, in si476x_radio_g_register()
1009 si476x_core_unlock(radio->core); in si476x_radio_g_register()
1018 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_register() local
1020 si476x_core_lock(radio->core); in si476x_radio_s_register()
1021 err = regmap_write(radio->core->regmap, in si476x_radio_s_register()
1024 si476x_core_unlock(radio->core); in si476x_radio_s_register()
1032 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_open() local
1040 si476x_core_lock(radio->core); in si476x_radio_fops_open()
1041 err = si476x_core_set_power_state(radio->core, in si476x_radio_fops_open()
1046 err = si476x_radio_do_post_powerup_init(radio, in si476x_radio_fops_open()
1047 radio->core->power_up_parameters.func); in si476x_radio_fops_open()
1051 err = si476x_radio_pretune(radio, in si476x_radio_fops_open()
1052 radio->core->power_up_parameters.func); in si476x_radio_fops_open()
1056 si476x_core_unlock(radio->core); in si476x_radio_fops_open()
1058 v4l2_ctrl_handler_setup(&radio->ctrl_handler); in si476x_radio_fops_open()
1064 si476x_core_set_power_state(radio->core, in si476x_radio_fops_open()
1067 si476x_core_unlock(radio->core); in si476x_radio_fops_open()
1075 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_release() local
1078 atomic_read(&radio->core->is_alive)) in si476x_radio_fops_release()
1079 si476x_core_set_power_state(radio->core, in si476x_radio_fops_release()
1092 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_read() local
1095 if (kfifo_is_empty(&radio->core->rds_fifo)) { in si476x_radio_fops_read()
1099 rval = wait_event_interruptible(radio->core->rds_read_queue, in si476x_radio_fops_read()
1100 (!kfifo_is_empty(&radio->core->rds_fifo) || in si476x_radio_fops_read()
1101 !atomic_read(&radio->core->is_alive))); in si476x_radio_fops_read()
1105 if (!atomic_read(&radio->core->is_alive)) in si476x_radio_fops_read()
1109 fifo_len = kfifo_len(&radio->core->rds_fifo); in si476x_radio_fops_read()
1111 if (kfifo_to_user(&radio->core->rds_fifo, buf, in si476x_radio_fops_read()
1114 dev_warn(&radio->videodev.dev, in si476x_radio_fops_read()
1127 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_poll() local
1132 if (atomic_read(&radio->core->is_alive)) in si476x_radio_fops_poll()
1133 poll_wait(file, &radio->core->rds_read_queue, pts); in si476x_radio_fops_poll()
1135 if (!atomic_read(&radio->core->is_alive)) in si476x_radio_fops_poll()
1138 if (!kfifo_is_empty(&radio->core->rds_fifo)) in si476x_radio_fops_poll()
1188 struct si476x_radio *radio = file->private_data; in si476x_radio_read_acf_blob() local
1191 si476x_core_lock(radio->core); in si476x_radio_read_acf_blob()
1192 if (radio->ops->acf_status) in si476x_radio_read_acf_blob()
1193 err = radio->ops->acf_status(radio->core, &report); in si476x_radio_read_acf_blob()
1196 si476x_core_unlock(radio->core); in si476x_radio_read_acf_blob()
1216 struct si476x_radio *radio = file->private_data; in si476x_radio_read_rds_blckcnt_blob() local
1219 si476x_core_lock(radio->core); in si476x_radio_read_rds_blckcnt_blob()
1220 if (radio->ops->rds_blckcnt) in si476x_radio_read_rds_blckcnt_blob()
1221 err = radio->ops->rds_blckcnt(radio->core, true, in si476x_radio_read_rds_blckcnt_blob()
1225 si476x_core_unlock(radio->core); in si476x_radio_read_rds_blckcnt_blob()
1245 struct si476x_radio *radio = file->private_data; in si476x_radio_read_agc_blob() local
1248 si476x_core_lock(radio->core); in si476x_radio_read_agc_blob()
1249 if (radio->ops->rds_blckcnt) in si476x_radio_read_agc_blob()
1250 err = radio->ops->agc_status(radio->core, &report); in si476x_radio_read_agc_blob()
1253 si476x_core_unlock(radio->core); in si476x_radio_read_agc_blob()
1273 struct si476x_radio *radio = file->private_data; in si476x_radio_read_rsq_blob() local
1283 si476x_core_lock(radio->core); in si476x_radio_read_rsq_blob()
1284 if (radio->ops->rds_blckcnt) in si476x_radio_read_rsq_blob()
1285 err = radio->ops->rsq_status(radio->core, &args, &report); in si476x_radio_read_rsq_blob()
1288 si476x_core_unlock(radio->core); in si476x_radio_read_rsq_blob()
1308 struct si476x_radio *radio = file->private_data; in si476x_radio_read_rsq_primary_blob() local
1318 si476x_core_lock(radio->core); in si476x_radio_read_rsq_primary_blob()
1319 if (radio->ops->rds_blckcnt) in si476x_radio_read_rsq_primary_blob()
1320 err = radio->ops->rsq_status(radio->core, &args, &report); in si476x_radio_read_rsq_primary_blob()
1323 si476x_core_unlock(radio->core); in si476x_radio_read_rsq_primary_blob()
1339 static void si476x_radio_init_debugfs(struct si476x_radio *radio) in si476x_radio_init_debugfs() argument
1341 radio->debugfs = debugfs_create_dir(dev_name(radio->v4l2dev.dev), NULL); in si476x_radio_init_debugfs()
1343 debugfs_create_file("acf", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1346 debugfs_create_file("rds_blckcnt", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1349 debugfs_create_file("agc", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1352 debugfs_create_file("rsq", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1355 debugfs_create_file("rsq_primary", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1360 static int si476x_radio_add_new_custom(struct si476x_radio *radio, in si476x_radio_add_new_custom() argument
1366 ctrl = v4l2_ctrl_new_custom(&radio->ctrl_handler, in si476x_radio_add_new_custom()
1369 rval = radio->ctrl_handler.error; in si476x_radio_add_new_custom()
1371 dev_err(radio->v4l2dev.dev, in si476x_radio_add_new_custom()
1381 struct si476x_radio *radio; in si476x_radio_probe() local
1386 radio = devm_kzalloc(&pdev->dev, sizeof(*radio), GFP_KERNEL); in si476x_radio_probe()
1387 if (!radio) in si476x_radio_probe()
1390 radio->core = i2c_mfd_cell_to_core(&pdev->dev); in si476x_radio_probe()
1392 v4l2_device_set_name(&radio->v4l2dev, DRIVER_NAME, &instance); in si476x_radio_probe()
1394 rval = v4l2_device_register(&pdev->dev, &radio->v4l2dev); in si476x_radio_probe()
1400 memcpy(&radio->videodev, &si476x_viddev_template, in si476x_radio_probe()
1403 radio->videodev.v4l2_dev = &radio->v4l2dev; in si476x_radio_probe()
1404 radio->videodev.ioctl_ops = &si4761_ioctl_ops; in si476x_radio_probe()
1405 radio->videodev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | in si476x_radio_probe()
1408 si476x_core_lock(radio->core); in si476x_radio_probe()
1409 if (!si476x_core_is_a_secondary_tuner(radio->core)) in si476x_radio_probe()
1410 radio->videodev.device_caps |= V4L2_CAP_RDS_CAPTURE | in si476x_radio_probe()
1412 si476x_core_unlock(radio->core); in si476x_radio_probe()
1414 video_set_drvdata(&radio->videodev, radio); in si476x_radio_probe()
1415 platform_set_drvdata(pdev, radio); in si476x_radio_probe()
1418 radio->v4l2dev.ctrl_handler = &radio->ctrl_handler; in si476x_radio_probe()
1419 v4l2_ctrl_handler_init(&radio->ctrl_handler, in si476x_radio_probe()
1422 if (si476x_core_has_am(radio->core)) { in si476x_radio_probe()
1423 ctrl = v4l2_ctrl_new_std_menu(&radio->ctrl_handler, in si476x_radio_probe()
1428 rval = radio->ctrl_handler.error; in si476x_radio_probe()
1435 rval = si476x_radio_add_new_custom(radio, in si476x_radio_probe()
1441 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_RSSI_THRESHOLD); in si476x_radio_probe()
1445 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_SNR_THRESHOLD); in si476x_radio_probe()
1449 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_MAX_TUNE_ERROR); in si476x_radio_probe()
1453 ctrl = v4l2_ctrl_new_std_menu(&radio->ctrl_handler, in si476x_radio_probe()
1457 rval = radio->ctrl_handler.error; in si476x_radio_probe()
1464 ctrl = v4l2_ctrl_new_std(&radio->ctrl_handler, &si476x_ctrl_ops, in si476x_radio_probe()
1467 rval = radio->ctrl_handler.error; in si476x_radio_probe()
1474 if (si476x_core_has_diversity(radio->core)) { in si476x_radio_probe()
1476 si476x_phase_diversity_mode_to_idx(radio->core->diversity_mode); in si476x_radio_probe()
1477 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_DIVERSITY_MODE); in si476x_radio_probe()
1481 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_INTERCHIP_LINK); in si476x_radio_probe()
1487 rval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, -1); in si476x_radio_probe()
1493 si476x_radio_init_debugfs(radio); in si476x_radio_probe()
1497 v4l2_ctrl_handler_free(radio->videodev.ctrl_handler); in si476x_radio_probe()
1503 struct si476x_radio *radio = platform_get_drvdata(pdev); in si476x_radio_remove() local
1505 v4l2_ctrl_handler_free(radio->videodev.ctrl_handler); in si476x_radio_remove()
1506 video_unregister_device(&radio->videodev); in si476x_radio_remove()
1507 v4l2_device_unregister(&radio->v4l2dev); in si476x_radio_remove()
1508 debugfs_remove_recursive(radio->debugfs); in si476x_radio_remove()