• Home
  • Raw
  • Download

Lines Matching refs:radio

333 	struct si476x_radio *radio = video_drvdata(file);  in si476x_radio_querycap()  local
335 strscpy(capability->driver, radio->v4l2dev.name, in si476x_radio_querycap()
339 "platform:%s", radio->v4l2dev.name); in si476x_radio_querycap()
347 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_enum_freq_bands() local
352 switch (radio->core->chip_id) { in si476x_radio_enum_freq_bands()
385 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_g_tuner() local
407 si476x_core_lock(radio->core); in si476x_radio_g_tuner()
409 if (si476x_core_is_a_secondary_tuner(radio->core)) { in si476x_radio_g_tuner()
413 } else if (si476x_core_has_am(radio->core)) { in si476x_radio_g_tuner()
414 if (si476x_core_is_a_primary_tuner(radio->core)) in si476x_radio_g_tuner()
436 tuner->audmode = radio->audmode; in si476x_radio_g_tuner()
441 err = radio->ops->rsq_status(radio->core, in si476x_radio_g_tuner()
452 si476x_core_unlock(radio->core); in si476x_radio_g_tuner()
460 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_tuner() local
467 radio->audmode = tuner->audmode; in si476x_radio_s_tuner()
469 radio->audmode = V4L2_TUNER_MODE_STEREO; in si476x_radio_s_tuner()
474 static int si476x_radio_init_vtable(struct si476x_radio *radio, in si476x_radio_init_vtable() argument
501 radio->ops = &fm_ops; in si476x_radio_init_vtable()
505 radio->ops = &am_ops; in si476x_radio_init_vtable()
513 static int si476x_radio_pretune(struct si476x_radio *radio, in si476x_radio_pretune() argument
529 args.freq = v4l2_to_si476x(radio->core, in si476x_radio_pretune()
531 retval = radio->ops->tune_freq(radio->core, &args); in si476x_radio_pretune()
534 args.freq = v4l2_to_si476x(radio->core, in si476x_radio_pretune()
536 retval = radio->ops->tune_freq(radio->core, &args); in si476x_radio_pretune()
545 static int si476x_radio_do_post_powerup_init(struct si476x_radio *radio, in si476x_radio_do_post_powerup_init() argument
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()
563 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()
579 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
586 if (si476x_core_has_diversity(radio->core)) { in si476x_radio_do_post_powerup_init()
587 err = si476x_core_cmd_fm_phase_diversity(radio->core, in si476x_radio_do_post_powerup_init()
588 radio->core->diversity_mode); in si476x_radio_do_post_powerup_init()
593 err = regcache_sync_region(radio->core->regmap, in si476x_radio_do_post_powerup_init()
600 return si476x_radio_init_vtable(radio, func); in si476x_radio_do_post_powerup_init()
604 static int si476x_radio_change_func(struct si476x_radio *radio, in si476x_radio_change_func() argument
614 if (func == radio->core->power_up_parameters.func) in si476x_radio_change_func()
618 err = si476x_core_stop(radio->core, soft); in si476x_radio_change_func()
625 err = si476x_core_stop(radio->core, soft); in si476x_radio_change_func()
632 radio->core->power_up_parameters.func = func; in si476x_radio_change_func()
634 err = si476x_core_start(radio->core, soft); in si476x_radio_change_func()
646 return si476x_radio_do_post_powerup_init(radio, func); in si476x_radio_change_func()
653 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_g_frequency() local
659 si476x_core_lock(radio->core); in si476x_radio_g_frequency()
661 if (radio->ops->rsq_status) { in si476x_radio_g_frequency()
671 err = radio->ops->rsq_status(radio->core, &args, &report); in si476x_radio_g_frequency()
673 f->frequency = si476x_to_v4l2(radio->core, in si476x_radio_g_frequency()
679 si476x_core_unlock(radio->core); in si476x_radio_g_frequency()
690 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_frequency() local
703 si476x_core_lock(radio->core); in si476x_radio_s_frequency()
711 (!si476x_core_has_am(radio->core) || in si476x_radio_s_frequency()
712 si476x_core_is_a_secondary_tuner(radio->core))) { in si476x_radio_s_frequency()
717 err = si476x_radio_change_func(radio, func); in si476x_radio_s_frequency()
724 args.freq = v4l2_to_si476x(radio->core, freq); in si476x_radio_s_frequency()
729 err = radio->ops->tune_freq(radio->core, &args); in si476x_radio_s_frequency()
732 si476x_core_unlock(radio->core); in si476x_radio_s_frequency()
742 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_hw_freq_seek() local
751 si476x_core_lock(radio->core); in si476x_radio_s_hw_freq_seek()
754 err = regmap_read(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
759 rangelow = si476x_to_v4l2(radio->core, rangelow); in si476x_radio_s_hw_freq_seek()
762 err = regmap_read(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
767 rangehigh = si476x_to_v4l2(radio->core, rangehigh); in si476x_radio_s_hw_freq_seek()
779 } else if (si476x_core_has_am(radio->core) && in si476x_radio_s_hw_freq_seek()
788 err = si476x_radio_change_func(radio, func); in si476x_radio_s_hw_freq_seek()
793 err = regmap_write(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
795 v4l2_to_si476x(radio->core, in si476x_radio_s_hw_freq_seek()
801 err = regmap_write(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
803 v4l2_to_si476x(radio->core, in si476x_radio_s_hw_freq_seek()
809 err = regmap_write(radio->core->regmap, in si476x_radio_s_hw_freq_seek()
811 v4l2_to_si476x(radio->core, in si476x_radio_s_hw_freq_seek()
817 err = radio->ops->seek_start(radio->core, in si476x_radio_s_hw_freq_seek()
821 si476x_core_unlock(radio->core); in si476x_radio_s_hw_freq_seek()
831 struct si476x_radio *radio = v4l2_ctrl_handler_to_radio(ctrl->handler); in si476x_radio_g_volatile_ctrl() local
833 si476x_core_lock(radio->core); in si476x_radio_g_volatile_ctrl()
837 if (si476x_core_has_diversity(radio->core)) { in si476x_radio_g_volatile_ctrl()
838 if (radio->ops->phase_diversity) { in si476x_radio_g_volatile_ctrl()
839 retval = radio->ops->phase_div_status(radio->core); in si476x_radio_g_volatile_ctrl()
857 si476x_core_unlock(radio->core); in si476x_radio_g_volatile_ctrl()
866 struct si476x_radio *radio = v4l2_ctrl_handler_to_radio(ctrl->handler); in si476x_radio_s_ctrl() local
868 si476x_core_lock(radio->core); in si476x_radio_s_ctrl()
872 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()
892 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
903 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
908 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
913 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
923 if (si476x_core_is_in_am_receiver_mode(radio->core)) in si476x_radio_s_ctrl()
924 regcache_cache_only(radio->core->regmap, true); in si476x_radio_s_ctrl()
927 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
929 radio->core->rds_fifo_depth); in si476x_radio_s_ctrl()
933 if (radio->core->client->irq) { in si476x_radio_s_ctrl()
934 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
942 retval = si476x_core_cmd_fm_rds_status(radio->core, in si476x_radio_s_ctrl()
950 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
955 retval = regmap_update_bits(radio->core->regmap, in si476x_radio_s_ctrl()
961 if (si476x_core_is_in_am_receiver_mode(radio->core)) in si476x_radio_s_ctrl()
962 regcache_cache_only(radio->core->regmap, false); in si476x_radio_s_ctrl()
965 retval = regmap_write(radio->core->regmap, in si476x_radio_s_ctrl()
973 if (mode == radio->core->diversity_mode) { in si476x_radio_s_ctrl()
978 if (si476x_core_is_in_am_receiver_mode(radio->core)) { in si476x_radio_s_ctrl()
983 radio->core->diversity_mode = mode; in si476x_radio_s_ctrl()
986 retval = radio->ops->phase_diversity(radio->core, mode); in si476x_radio_s_ctrl()
988 radio->core->diversity_mode = mode; in si476x_radio_s_ctrl()
997 si476x_core_unlock(radio->core); in si476x_radio_s_ctrl()
1008 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_g_register() local
1010 si476x_core_lock(radio->core); in si476x_radio_g_register()
1012 err = regmap_read(radio->core->regmap, in si476x_radio_g_register()
1015 si476x_core_unlock(radio->core); in si476x_radio_g_register()
1024 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_s_register() local
1026 si476x_core_lock(radio->core); in si476x_radio_s_register()
1027 err = regmap_write(radio->core->regmap, in si476x_radio_s_register()
1030 si476x_core_unlock(radio->core); in si476x_radio_s_register()
1038 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_open() local
1046 si476x_core_lock(radio->core); in si476x_radio_fops_open()
1047 err = si476x_core_set_power_state(radio->core, in si476x_radio_fops_open()
1052 err = si476x_radio_do_post_powerup_init(radio, in si476x_radio_fops_open()
1053 radio->core->power_up_parameters.func); in si476x_radio_fops_open()
1057 err = si476x_radio_pretune(radio, in si476x_radio_fops_open()
1058 radio->core->power_up_parameters.func); in si476x_radio_fops_open()
1062 si476x_core_unlock(radio->core); in si476x_radio_fops_open()
1064 v4l2_ctrl_handler_setup(&radio->ctrl_handler); in si476x_radio_fops_open()
1070 si476x_core_set_power_state(radio->core, in si476x_radio_fops_open()
1073 si476x_core_unlock(radio->core); in si476x_radio_fops_open()
1082 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_release() local
1085 atomic_read(&radio->core->is_alive)) in si476x_radio_fops_release()
1086 si476x_core_set_power_state(radio->core, in si476x_radio_fops_release()
1101 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_read() local
1104 if (kfifo_is_empty(&radio->core->rds_fifo)) { in si476x_radio_fops_read()
1108 rval = wait_event_interruptible(radio->core->rds_read_queue, in si476x_radio_fops_read()
1109 (!kfifo_is_empty(&radio->core->rds_fifo) || in si476x_radio_fops_read()
1110 !atomic_read(&radio->core->is_alive))); in si476x_radio_fops_read()
1114 if (!atomic_read(&radio->core->is_alive)) in si476x_radio_fops_read()
1118 fifo_len = kfifo_len(&radio->core->rds_fifo); in si476x_radio_fops_read()
1120 if (kfifo_to_user(&radio->core->rds_fifo, buf, in si476x_radio_fops_read()
1123 dev_warn(&radio->videodev.dev, in si476x_radio_fops_read()
1136 struct si476x_radio *radio = video_drvdata(file); in si476x_radio_fops_poll() local
1141 if (atomic_read(&radio->core->is_alive)) in si476x_radio_fops_poll()
1142 poll_wait(file, &radio->core->rds_read_queue, pts); in si476x_radio_fops_poll()
1144 if (!atomic_read(&radio->core->is_alive)) in si476x_radio_fops_poll()
1147 if (!kfifo_is_empty(&radio->core->rds_fifo)) in si476x_radio_fops_poll()
1197 struct si476x_radio *radio = file->private_data; in si476x_radio_read_acf_blob() local
1200 si476x_core_lock(radio->core); in si476x_radio_read_acf_blob()
1201 if (radio->ops->acf_status) in si476x_radio_read_acf_blob()
1202 err = radio->ops->acf_status(radio->core, &report); in si476x_radio_read_acf_blob()
1205 si476x_core_unlock(radio->core); in si476x_radio_read_acf_blob()
1225 struct si476x_radio *radio = file->private_data; in si476x_radio_read_rds_blckcnt_blob() local
1228 si476x_core_lock(radio->core); in si476x_radio_read_rds_blckcnt_blob()
1229 if (radio->ops->rds_blckcnt) in si476x_radio_read_rds_blckcnt_blob()
1230 err = radio->ops->rds_blckcnt(radio->core, true, in si476x_radio_read_rds_blckcnt_blob()
1234 si476x_core_unlock(radio->core); in si476x_radio_read_rds_blckcnt_blob()
1254 struct si476x_radio *radio = file->private_data; in si476x_radio_read_agc_blob() local
1257 si476x_core_lock(radio->core); in si476x_radio_read_agc_blob()
1258 if (radio->ops->rds_blckcnt) in si476x_radio_read_agc_blob()
1259 err = radio->ops->agc_status(radio->core, &report); in si476x_radio_read_agc_blob()
1262 si476x_core_unlock(radio->core); in si476x_radio_read_agc_blob()
1282 struct si476x_radio *radio = file->private_data; in si476x_radio_read_rsq_blob() local
1292 si476x_core_lock(radio->core); in si476x_radio_read_rsq_blob()
1293 if (radio->ops->rds_blckcnt) in si476x_radio_read_rsq_blob()
1294 err = radio->ops->rsq_status(radio->core, &args, &report); in si476x_radio_read_rsq_blob()
1297 si476x_core_unlock(radio->core); in si476x_radio_read_rsq_blob()
1317 struct si476x_radio *radio = file->private_data; in si476x_radio_read_rsq_primary_blob() local
1327 si476x_core_lock(radio->core); in si476x_radio_read_rsq_primary_blob()
1328 if (radio->ops->rds_blckcnt) in si476x_radio_read_rsq_primary_blob()
1329 err = radio->ops->rsq_status(radio->core, &args, &report); in si476x_radio_read_rsq_primary_blob()
1332 si476x_core_unlock(radio->core); in si476x_radio_read_rsq_primary_blob()
1348 static void si476x_radio_init_debugfs(struct si476x_radio *radio) in si476x_radio_init_debugfs() argument
1350 radio->debugfs = debugfs_create_dir(dev_name(radio->v4l2dev.dev), NULL); in si476x_radio_init_debugfs()
1352 debugfs_create_file("acf", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1355 debugfs_create_file("rds_blckcnt", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1358 debugfs_create_file("agc", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1361 debugfs_create_file("rsq", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1364 debugfs_create_file("rsq_primary", S_IRUGO, radio->debugfs, radio, in si476x_radio_init_debugfs()
1369 static int si476x_radio_add_new_custom(struct si476x_radio *radio, in si476x_radio_add_new_custom() argument
1375 ctrl = v4l2_ctrl_new_custom(&radio->ctrl_handler, in si476x_radio_add_new_custom()
1378 rval = radio->ctrl_handler.error; in si476x_radio_add_new_custom()
1380 dev_err(radio->v4l2dev.dev, in si476x_radio_add_new_custom()
1390 struct si476x_radio *radio; in si476x_radio_probe() local
1395 radio = devm_kzalloc(&pdev->dev, sizeof(*radio), GFP_KERNEL); in si476x_radio_probe()
1396 if (!radio) in si476x_radio_probe()
1399 radio->core = i2c_mfd_cell_to_core(&pdev->dev); in si476x_radio_probe()
1401 v4l2_device_set_name(&radio->v4l2dev, DRIVER_NAME, &instance); in si476x_radio_probe()
1403 rval = v4l2_device_register(&pdev->dev, &radio->v4l2dev); in si476x_radio_probe()
1409 memcpy(&radio->videodev, &si476x_viddev_template, in si476x_radio_probe()
1412 radio->videodev.v4l2_dev = &radio->v4l2dev; in si476x_radio_probe()
1413 radio->videodev.ioctl_ops = &si4761_ioctl_ops; in si476x_radio_probe()
1414 radio->videodev.device_caps = V4L2_CAP_TUNER | V4L2_CAP_RADIO | in si476x_radio_probe()
1417 si476x_core_lock(radio->core); in si476x_radio_probe()
1418 if (!si476x_core_is_a_secondary_tuner(radio->core)) in si476x_radio_probe()
1419 radio->videodev.device_caps |= V4L2_CAP_RDS_CAPTURE | in si476x_radio_probe()
1421 si476x_core_unlock(radio->core); in si476x_radio_probe()
1423 video_set_drvdata(&radio->videodev, radio); in si476x_radio_probe()
1424 platform_set_drvdata(pdev, radio); in si476x_radio_probe()
1427 radio->v4l2dev.ctrl_handler = &radio->ctrl_handler; in si476x_radio_probe()
1428 v4l2_ctrl_handler_init(&radio->ctrl_handler, in si476x_radio_probe()
1431 if (si476x_core_has_am(radio->core)) { in si476x_radio_probe()
1432 ctrl = v4l2_ctrl_new_std_menu(&radio->ctrl_handler, in si476x_radio_probe()
1437 rval = radio->ctrl_handler.error; in si476x_radio_probe()
1444 rval = si476x_radio_add_new_custom(radio, in si476x_radio_probe()
1450 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_RSSI_THRESHOLD); in si476x_radio_probe()
1454 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_SNR_THRESHOLD); in si476x_radio_probe()
1458 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_MAX_TUNE_ERROR); in si476x_radio_probe()
1462 ctrl = v4l2_ctrl_new_std_menu(&radio->ctrl_handler, in si476x_radio_probe()
1466 rval = radio->ctrl_handler.error; in si476x_radio_probe()
1473 ctrl = v4l2_ctrl_new_std(&radio->ctrl_handler, &si476x_ctrl_ops, in si476x_radio_probe()
1476 rval = radio->ctrl_handler.error; in si476x_radio_probe()
1483 if (si476x_core_has_diversity(radio->core)) { in si476x_radio_probe()
1485 si476x_phase_diversity_mode_to_idx(radio->core->diversity_mode); in si476x_radio_probe()
1486 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_DIVERSITY_MODE); in si476x_radio_probe()
1490 rval = si476x_radio_add_new_custom(radio, SI476X_IDX_INTERCHIP_LINK); in si476x_radio_probe()
1496 rval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, -1); in si476x_radio_probe()
1502 si476x_radio_init_debugfs(radio); in si476x_radio_probe()
1506 v4l2_ctrl_handler_free(radio->videodev.ctrl_handler); in si476x_radio_probe()
1512 struct si476x_radio *radio = platform_get_drvdata(pdev); in si476x_radio_remove() local
1514 v4l2_ctrl_handler_free(radio->videodev.ctrl_handler); in si476x_radio_remove()
1515 video_unregister_device(&radio->videodev); in si476x_radio_remove()
1516 v4l2_device_unregister(&radio->v4l2dev); in si476x_radio_remove()
1517 debugfs_remove_recursive(radio->debugfs); in si476x_radio_remove()