Lines Matching refs:radio
139 static int wl1273_fm_rds(struct wl1273_device *radio) in wl1273_fm_rds() argument
141 struct wl1273_core *core = radio->core; in wl1273_fm_rds()
178 dev_err(radio->dev, WL1273_FM_DRIVER_NAME in wl1273_fm_rds()
202 memcpy(&radio->buffer[radio->wr_index], &rds, RDS_BLOCK_SIZE); in wl1273_fm_rds()
203 radio->wr_index += 3; in wl1273_fm_rds()
206 if (radio->wr_index >= radio->buf_size) in wl1273_fm_rds()
207 radio->wr_index = 0; in wl1273_fm_rds()
210 if (radio->wr_index == radio->rd_index) { in wl1273_fm_rds()
211 dev_dbg(radio->dev, "RDS OVERFLOW"); in wl1273_fm_rds()
213 radio->rd_index = 0; in wl1273_fm_rds()
214 radio->wr_index = 0; in wl1273_fm_rds()
220 if (radio->wr_index != radio->rd_index) in wl1273_fm_rds()
221 wake_up_interruptible(&radio->read_queue); in wl1273_fm_rds()
228 struct wl1273_device *radio = dev_id; in wl1273_fm_irq_thread_handler() local
229 struct wl1273_core *core = radio->core; in wl1273_fm_irq_thread_handler()
238 radio->irq_received = flags; in wl1273_fm_irq_thread_handler()
239 dev_dbg(radio->dev, "IRQ: BL\n"); in wl1273_fm_irq_thread_handler()
245 wl1273_fm_rds(radio); in wl1273_fm_irq_thread_handler()
249 dev_dbg(radio->dev, "IRQ: BBLK\n"); in wl1273_fm_irq_thread_handler()
252 dev_dbg(radio->dev, "IRQ: LSYNC\n"); in wl1273_fm_irq_thread_handler()
262 dev_dbg(radio->dev, "IRQ: LEV: 0x%x04\n", level); in wl1273_fm_irq_thread_handler()
266 dev_dbg(radio->dev, "IRQ: IFFR\n"); in wl1273_fm_irq_thread_handler()
269 dev_dbg(radio->dev, "IRQ: PI\n"); in wl1273_fm_irq_thread_handler()
272 dev_dbg(radio->dev, "IRQ: PD\n"); in wl1273_fm_irq_thread_handler()
275 dev_dbg(radio->dev, "IRQ: STIC\n"); in wl1273_fm_irq_thread_handler()
278 dev_dbg(radio->dev, "IRQ: MAL\n"); in wl1273_fm_irq_thread_handler()
281 complete(&radio->busy); in wl1273_fm_irq_thread_handler()
282 dev_dbg(radio->dev, "NOT BUSY\n"); in wl1273_fm_irq_thread_handler()
283 dev_dbg(radio->dev, "IRQ: POW_ENB\n"); in wl1273_fm_irq_thread_handler()
287 dev_dbg(radio->dev, "IRQ: SCAN_OVER\n"); in wl1273_fm_irq_thread_handler()
290 dev_dbg(radio->dev, "IRQ: ERROR\n"); in wl1273_fm_irq_thread_handler()
295 dev_dbg(radio->dev, "IRQ: FR:\n"); in wl1273_fm_irq_thread_handler()
301 dev_err(radio->dev, in wl1273_fm_irq_thread_handler()
311 if (radio->band == WL1273_BAND_JAPAN) in wl1273_fm_irq_thread_handler()
312 radio->rx_frequency = WL1273_BAND_JAPAN_LOW + in wl1273_fm_irq_thread_handler()
315 radio->rx_frequency = WL1273_BAND_OTHER_LOW + in wl1273_fm_irq_thread_handler()
323 dev_dbg(radio->dev, "%dkHz\n", radio->rx_frequency); in wl1273_fm_irq_thread_handler()
330 dev_dbg(radio->dev, "%dkHz\n", freq); in wl1273_fm_irq_thread_handler()
332 dev_dbg(radio->dev, "%s: NOT BUSY\n", __func__); in wl1273_fm_irq_thread_handler()
336 core->write(core, WL1273_INT_MASK_SET, radio->irq_flags); in wl1273_fm_irq_thread_handler()
337 complete(&radio->busy); in wl1273_fm_irq_thread_handler()
342 static int wl1273_fm_set_tx_freq(struct wl1273_device *radio, unsigned int freq) in wl1273_fm_set_tx_freq() argument
344 struct wl1273_core *core = radio->core; in wl1273_fm_set_tx_freq()
349 dev_err(radio->dev, in wl1273_fm_set_tx_freq()
356 dev_err(radio->dev, in wl1273_fm_set_tx_freq()
368 dev_dbg(radio->dev, "%s: freq: %d kHz\n", __func__, freq); in wl1273_fm_set_tx_freq()
375 reinit_completion(&radio->busy); in wl1273_fm_set_tx_freq()
378 t = wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(2000)); in wl1273_fm_set_tx_freq()
382 dev_dbg(radio->dev, "WL1273_CHANL_SET: %lu\n", t); in wl1273_fm_set_tx_freq()
389 reinit_completion(&radio->busy); in wl1273_fm_set_tx_freq()
392 t = wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(1000)); in wl1273_fm_set_tx_freq()
396 radio->tx_frequency = freq; in wl1273_fm_set_tx_freq()
397 dev_dbg(radio->dev, "WL1273_POWER_ENB_SET: %lu\n", t); in wl1273_fm_set_tx_freq()
402 static int wl1273_fm_set_rx_freq(struct wl1273_device *radio, unsigned int freq) in wl1273_fm_set_rx_freq() argument
404 struct wl1273_core *core = radio->core; in wl1273_fm_set_rx_freq()
408 if (freq < radio->rangelow) { in wl1273_fm_set_rx_freq()
409 dev_err(radio->dev, in wl1273_fm_set_rx_freq()
411 radio->rangelow); in wl1273_fm_set_rx_freq()
416 if (freq > radio->rangehigh) { in wl1273_fm_set_rx_freq()
417 dev_err(radio->dev, in wl1273_fm_set_rx_freq()
419 radio->rangehigh); in wl1273_fm_set_rx_freq()
424 dev_dbg(radio->dev, "%s: %dkHz\n", __func__, freq); in wl1273_fm_set_rx_freq()
426 core->write(core, WL1273_INT_MASK_SET, radio->irq_flags); in wl1273_fm_set_rx_freq()
428 if (radio->band == WL1273_BAND_JAPAN) in wl1273_fm_set_rx_freq()
435 dev_err(radio->dev, "FREQ_SET fails\n"); in wl1273_fm_set_rx_freq()
441 dev_err(radio->dev, "TUNER_MODE_SET fails\n"); in wl1273_fm_set_rx_freq()
445 reinit_completion(&radio->busy); in wl1273_fm_set_rx_freq()
447 t = wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(2000)); in wl1273_fm_set_rx_freq()
449 dev_err(radio->dev, "%s: TIMEOUT\n", __func__); in wl1273_fm_set_rx_freq()
453 radio->rd_index = 0; in wl1273_fm_set_rx_freq()
454 radio->wr_index = 0; in wl1273_fm_set_rx_freq()
455 radio->rx_frequency = freq; in wl1273_fm_set_rx_freq()
461 static int wl1273_fm_get_freq(struct wl1273_device *radio) in wl1273_fm_get_freq() argument
463 struct wl1273_core *core = radio->core; in wl1273_fm_get_freq()
473 dev_dbg(radio->dev, "Freq get: 0x%04x\n", f); in wl1273_fm_get_freq()
474 if (radio->band == WL1273_BAND_JAPAN) in wl1273_fm_get_freq()
497 static int wl1273_fm_upload_firmware_patch(struct wl1273_device *radio) in wl1273_fm_upload_firmware_patch() argument
499 struct wl1273_core *core = radio->core; in wl1273_fm_upload_firmware_patch()
503 struct device *dev = radio->dev; in wl1273_fm_upload_firmware_patch()
538 static int wl1273_fm_stop(struct wl1273_device *radio) in wl1273_fm_stop() argument
540 struct wl1273_core *core = radio->core; in wl1273_fm_stop()
546 dev_err(radio->dev, "%s: POWER_SET fails: %d\n", in wl1273_fm_stop()
552 dev_err(radio->dev, in wl1273_fm_stop()
558 dev_dbg(radio->dev, "Back to reset\n"); in wl1273_fm_stop()
564 static int wl1273_fm_start(struct wl1273_device *radio, int new_mode) in wl1273_fm_start() argument
566 struct wl1273_core *core = radio->core; in wl1273_fm_start()
568 struct device *dev = radio->dev; in wl1273_fm_start()
572 dev_dbg(radio->dev, "Out of reset\n"); in wl1273_fm_start()
581 if (radio->rds_on) in wl1273_fm_start()
597 radio->wr_index = 0; in wl1273_fm_start()
598 radio->rd_index = 0; in wl1273_fm_start()
613 if (radio->rds_on) { in wl1273_fm_start()
633 r = wl1273_fm_upload_firmware_patch(radio); in wl1273_fm_start()
644 if (radio->rds_on) in wl1273_fm_start()
671 static int wl1273_fm_suspend(struct wl1273_device *radio) in wl1273_fm_suspend() argument
673 struct wl1273_core *core = radio->core; in wl1273_fm_suspend()
687 dev_err(radio->dev, "%s: POWER_SET fails: %d\n", __func__, r); in wl1273_fm_suspend()
695 static int wl1273_fm_set_mode(struct wl1273_device *radio, int mode) in wl1273_fm_set_mode() argument
697 struct wl1273_core *core = radio->core; in wl1273_fm_set_mode()
698 struct device *dev = radio->dev; in wl1273_fm_set_mode()
703 dev_dbg(dev, "Forbidden modes: 0x%02x\n", radio->forbidden); in wl1273_fm_set_mode()
706 if (mode & radio->forbidden) { in wl1273_fm_set_mode()
714 r = wl1273_fm_start(radio, mode); in wl1273_fm_set_mode()
717 wl1273_fm_stop(radio); in wl1273_fm_set_mode()
722 r = core->write(core, WL1273_INT_MASK_SET, radio->irq_flags); in wl1273_fm_set_mode()
730 r = wl1273_fm_set_rx_freq(radio, radio->rx_frequency); in wl1273_fm_set_mode()
745 r = wl1273_fm_set_tx_freq(radio, radio->tx_frequency); in wl1273_fm_set_mode()
752 dev_dbg(radio->dev, "%s: Set audio mode.\n", __func__); in wl1273_fm_set_mode()
760 r = wl1273_fm_stop(radio); in wl1273_fm_set_mode()
769 r = wl1273_fm_suspend(radio); in wl1273_fm_set_mode()
789 static int wl1273_fm_set_seek(struct wl1273_device *radio, in wl1273_fm_set_seek() argument
794 struct wl1273_core *core = radio->core; in wl1273_fm_set_seek()
799 f = radio->rx_frequency; in wl1273_fm_set_seek()
800 dev_dbg(radio->dev, "rx_frequency: %d\n", f); in wl1273_fm_set_seek()
802 if (dir && f + radio->spacing <= radio->rangehigh) in wl1273_fm_set_seek()
803 r = wl1273_fm_set_rx_freq(radio, f + radio->spacing); in wl1273_fm_set_seek()
805 r = wl1273_fm_set_rx_freq(radio, radio->rangelow); in wl1273_fm_set_seek()
806 else if (f - radio->spacing >= radio->rangelow) in wl1273_fm_set_seek()
807 r = wl1273_fm_set_rx_freq(radio, f - radio->spacing); in wl1273_fm_set_seek()
809 r = wl1273_fm_set_rx_freq(radio, radio->rangehigh); in wl1273_fm_set_seek()
817 reinit_completion(&radio->busy); in wl1273_fm_set_seek()
818 dev_dbg(radio->dev, "%s: BUSY\n", __func__); in wl1273_fm_set_seek()
820 r = core->write(core, WL1273_INT_MASK_SET, radio->irq_flags); in wl1273_fm_set_seek()
824 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_set_seek()
839 wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(1000)); in wl1273_fm_set_seek()
840 if (!(radio->irq_received & WL1273_BL_EVENT)) { in wl1273_fm_set_seek()
845 radio->irq_received &= ~WL1273_BL_EVENT; in wl1273_fm_set_seek()
851 dev_dbg(radio->dev, "Wrap around in HW seek.\n"); in wl1273_fm_set_seek()
854 f = radio->rangelow; in wl1273_fm_set_seek()
856 f = radio->rangehigh; in wl1273_fm_set_seek()
858 r = wl1273_fm_set_rx_freq(radio, f); in wl1273_fm_set_seek()
862 reinit_completion(&radio->busy); in wl1273_fm_set_seek()
863 dev_dbg(radio->dev, "%s: BUSY\n", __func__); in wl1273_fm_set_seek()
870 if (!wait_for_completion_timeout(&radio->busy, msecs_to_jiffies(1000))) in wl1273_fm_set_seek()
873 dev_dbg(radio->dev, "%s: Err: %d\n", __func__, r); in wl1273_fm_set_seek()
881 static unsigned int wl1273_fm_get_tx_ctune(struct wl1273_device *radio) in wl1273_fm_get_tx_ctune() argument
883 struct wl1273_core *core = radio->core; in wl1273_fm_get_tx_ctune()
884 struct device *dev = radio->dev; in wl1273_fm_get_tx_ctune()
910 static int wl1273_fm_set_preemphasis(struct wl1273_device *radio, in wl1273_fm_set_preemphasis() argument
913 struct wl1273_core *core = radio->core; in wl1273_fm_set_preemphasis()
942 radio->preemphasis = preemphasis; in wl1273_fm_set_preemphasis()
949 static int wl1273_fm_rds_on(struct wl1273_device *radio) in wl1273_fm_rds_on() argument
951 struct wl1273_core *core = radio->core; in wl1273_fm_rds_on()
954 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_rds_on()
955 if (radio->rds_on) in wl1273_fm_rds_on()
963 r = wl1273_fm_set_rx_freq(radio, radio->rx_frequency); in wl1273_fm_rds_on()
965 dev_err(radio->dev, "set freq fails: %d.\n", r); in wl1273_fm_rds_on()
970 static int wl1273_fm_rds_off(struct wl1273_device *radio) in wl1273_fm_rds_off() argument
972 struct wl1273_core *core = radio->core; in wl1273_fm_rds_off()
975 if (!radio->rds_on) in wl1273_fm_rds_off()
978 radio->irq_flags &= ~WL1273_RDS_EVENT; in wl1273_fm_rds_off()
980 r = core->write(core, WL1273_INT_MASK_SET, radio->irq_flags); in wl1273_fm_rds_off()
985 wake_up_interruptible(&radio->read_queue); in wl1273_fm_rds_off()
987 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_rds_off()
993 r = wl1273_fm_set_rx_freq(radio, radio->rx_frequency); in wl1273_fm_rds_off()
995 dev_err(radio->dev, "set freq fails: %d.\n", r); in wl1273_fm_rds_off()
997 dev_dbg(radio->dev, "%s: exiting...\n", __func__); in wl1273_fm_rds_off()
1002 static int wl1273_fm_set_rds(struct wl1273_device *radio, unsigned int new_mode) in wl1273_fm_set_rds() argument
1005 struct wl1273_core *core = radio->core; in wl1273_fm_set_rds()
1021 r = wl1273_fm_rds_off(radio); in wl1273_fm_set_rds()
1023 r = wl1273_fm_rds_on(radio); in wl1273_fm_set_rds()
1025 dev_err(radio->dev, "%s: Unknown mode: %d\n", in wl1273_fm_set_rds()
1031 radio->rds_on = (new_mode == WL1273_RDS_ON) ? true : false; in wl1273_fm_set_rds()
1039 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_fops_write() local
1040 struct wl1273_core *core = radio->core; in wl1273_fm_fops_write()
1044 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_fops_write()
1049 if (radio->rds_users == 0) { in wl1273_fm_fops_write()
1050 dev_warn(radio->dev, "%s: RDS not on.\n", __func__); in wl1273_fm_fops_write()
1060 if (radio->owner && radio->owner != file) { in wl1273_fm_fops_write()
1064 radio->owner = file; in wl1273_fm_fops_write()
1074 if (copy_from_user(radio->write_buf + 1, buf, val)) { in wl1273_fm_fops_write()
1079 dev_dbg(radio->dev, "Count: %d\n", val); in wl1273_fm_fops_write()
1080 dev_dbg(radio->dev, "From user: \"%s\"\n", radio->write_buf); in wl1273_fm_fops_write()
1082 radio->write_buf[0] = WL1273_RDS_DATA_SET; in wl1273_fm_fops_write()
1083 core->write_data(core, radio->write_buf, val + 1); in wl1273_fm_fops_write()
1095 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_fops_poll() local
1096 struct wl1273_core *core = radio->core; in wl1273_fm_fops_poll()
1098 if (radio->owner && radio->owner != file) in wl1273_fm_fops_poll()
1101 radio->owner = file; in wl1273_fm_fops_poll()
1104 poll_wait(file, &radio->read_queue, pts); in wl1273_fm_fops_poll()
1106 if (radio->rd_index != radio->wr_index) in wl1273_fm_fops_poll()
1118 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_fops_open() local
1119 struct wl1273_core *core = radio->core; in wl1273_fm_fops_open()
1122 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_fops_open()
1124 if (core->mode == WL1273_MODE_RX && radio->rds_on && in wl1273_fm_fops_open()
1125 !radio->rds_users) { in wl1273_fm_fops_open()
1126 dev_dbg(radio->dev, "%s: Mode: %d\n", __func__, core->mode); in wl1273_fm_fops_open()
1131 radio->irq_flags |= WL1273_RDS_EVENT; in wl1273_fm_fops_open()
1134 radio->irq_flags); in wl1273_fm_fops_open()
1140 radio->rds_users++; in wl1273_fm_fops_open()
1150 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_fops_release() local
1151 struct wl1273_core *core = radio->core; in wl1273_fm_fops_release()
1154 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_fops_release()
1156 if (radio->rds_users > 0) { in wl1273_fm_fops_release()
1157 radio->rds_users--; in wl1273_fm_fops_release()
1158 if (radio->rds_users == 0) { in wl1273_fm_fops_release()
1161 radio->irq_flags &= ~WL1273_RDS_EVENT; in wl1273_fm_fops_release()
1166 radio->irq_flags); in wl1273_fm_fops_release()
1176 if (file == radio->owner) in wl1273_fm_fops_release()
1177 radio->owner = NULL; in wl1273_fm_fops_release()
1186 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_fops_read() local
1187 struct wl1273_core *core = radio->core; in wl1273_fm_fops_read()
1191 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_fops_read()
1196 if (radio->rds_users == 0) { in wl1273_fm_fops_read()
1197 dev_warn(radio->dev, "%s: RDS not on.\n", __func__); in wl1273_fm_fops_read()
1208 if (radio->owner && radio->owner != file) { in wl1273_fm_fops_read()
1212 radio->owner = file; in wl1273_fm_fops_read()
1216 dev_err(radio->dev, "%s: Get RDS_SYNC fails.\n", __func__); in wl1273_fm_fops_read()
1219 dev_info(radio->dev, "RDS_SYNC: Not synchronized\n"); in wl1273_fm_fops_read()
1225 while (radio->wr_index == radio->rd_index) { in wl1273_fm_fops_read()
1231 dev_dbg(radio->dev, "%s: Wait for RDS data.\n", __func__); in wl1273_fm_fops_read()
1232 if (wait_event_interruptible(radio->read_queue, in wl1273_fm_fops_read()
1233 radio->wr_index != in wl1273_fm_fops_read()
1234 radio->rd_index) < 0) { in wl1273_fm_fops_read()
1245 if (radio->rd_index == radio->wr_index) in wl1273_fm_fops_read()
1249 if (copy_to_user(buf, &radio->buffer[radio->rd_index], in wl1273_fm_fops_read()
1254 radio->rd_index += RDS_BLOCK_SIZE; in wl1273_fm_fops_read()
1255 if (radio->rd_index >= radio->buf_size) in wl1273_fm_fops_read()
1256 radio->rd_index = 0; in wl1273_fm_fops_read()
1265 dev_dbg(radio->dev, "%s: exit\n", __func__); in wl1273_fm_fops_read()
1284 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_querycap() local
1286 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_querycap()
1292 strlcpy(capability->bus_info, radio->bus_type, in wl1273_fm_vidioc_querycap()
1308 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_g_input() local
1310 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_g_input()
1320 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_s_input() local
1322 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_s_input()
1335 static int wl1273_fm_set_tx_power(struct wl1273_device *radio, u16 power) in wl1273_fm_set_tx_power() argument
1337 struct wl1273_core *core = radio->core; in wl1273_fm_set_tx_power()
1351 radio->tx_power = power; in wl1273_fm_set_tx_power()
1362 static int wl1273_fm_tx_set_spacing(struct wl1273_device *radio, in wl1273_fm_tx_set_spacing() argument
1365 struct wl1273_core *core = radio->core; in wl1273_fm_tx_set_spacing()
1371 radio->spacing = 100; in wl1273_fm_tx_set_spacing()
1375 radio->spacing = 50; in wl1273_fm_tx_set_spacing()
1379 radio->spacing = 100; in wl1273_fm_tx_set_spacing()
1383 radio->spacing = 200; in wl1273_fm_tx_set_spacing()
1391 struct wl1273_device *radio = ctrl->priv; in wl1273_fm_g_volatile_ctrl() local
1392 struct wl1273_core *core = radio->core; in wl1273_fm_g_volatile_ctrl()
1394 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_g_volatile_ctrl()
1401 ctrl->val = wl1273_fm_get_tx_ctune(radio); in wl1273_fm_g_volatile_ctrl()
1405 dev_warn(radio->dev, "%s: Unknown IOCTL: %d\n", in wl1273_fm_g_volatile_ctrl()
1428 struct wl1273_device *radio = to_radio(ctrl); in wl1273_fm_vidioc_s_ctrl() local
1429 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_s_ctrl()
1432 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_s_ctrl()
1457 r = wl1273_fm_set_mode(radio, WL1273_MODE_OFF); in wl1273_fm_vidioc_s_ctrl()
1463 r = wl1273_fm_set_preemphasis(radio, ctrl->val); in wl1273_fm_vidioc_s_ctrl()
1467 r = wl1273_fm_set_tx_power(radio, ctrl->val); in wl1273_fm_vidioc_s_ctrl()
1471 dev_warn(radio->dev, "%s: Unknown IOCTL: %d\n", in wl1273_fm_vidioc_s_ctrl()
1476 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_s_ctrl()
1483 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_g_audio() local
1485 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_g_audio()
1499 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_s_audio() local
1501 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_s_audio()
1515 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_g_tuner() local
1516 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_g_tuner()
1520 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_g_tuner()
1535 if (radio->stereo) in wl1273_fm_vidioc_g_tuner()
1560 dev_dbg(radio->dev, "Signal: %d\n", tuner->signal); in wl1273_fm_vidioc_g_tuner()
1579 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_s_tuner() local
1580 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_s_tuner()
1583 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_s_tuner()
1584 dev_dbg(radio->dev, "tuner->index: %d\n", tuner->index); in wl1273_fm_vidioc_s_tuner()
1585 dev_dbg(radio->dev, "tuner->name: %s\n", tuner->name); in wl1273_fm_vidioc_s_tuner()
1586 dev_dbg(radio->dev, "tuner->capability: 0x%04x\n", tuner->capability); in wl1273_fm_vidioc_s_tuner()
1587 dev_dbg(radio->dev, "tuner->rxsubchans: 0x%04x\n", tuner->rxsubchans); in wl1273_fm_vidioc_s_tuner()
1588 dev_dbg(radio->dev, "tuner->rangelow: %d\n", tuner->rangelow); in wl1273_fm_vidioc_s_tuner()
1589 dev_dbg(radio->dev, "tuner->rangehigh: %d\n", tuner->rangehigh); in wl1273_fm_vidioc_s_tuner()
1597 r = wl1273_fm_set_mode(radio, WL1273_MODE_RX); in wl1273_fm_vidioc_s_tuner()
1602 r = wl1273_fm_set_rds(radio, WL1273_RDS_ON); in wl1273_fm_vidioc_s_tuner()
1604 r = wl1273_fm_set_rds(radio, WL1273_RDS_OFF); in wl1273_fm_vidioc_s_tuner()
1607 dev_warn(radio->dev, "%s: RDS fails: %d\n", __func__, r); in wl1273_fm_vidioc_s_tuner()
1612 dev_warn(radio->dev, "%s: MOST_MODE fails: %d\n", in wl1273_fm_vidioc_s_tuner()
1616 radio->stereo = false; in wl1273_fm_vidioc_s_tuner()
1620 dev_warn(radio->dev, "%s: MOST_MODE fails: %d\n", in wl1273_fm_vidioc_s_tuner()
1624 radio->stereo = true; in wl1273_fm_vidioc_s_tuner()
1626 dev_err(radio->dev, "%s: tuner->audmode: %d\n", in wl1273_fm_vidioc_s_tuner()
1641 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_g_frequency() local
1642 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_g_frequency()
1644 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_g_frequency()
1650 freq->frequency = WL1273_FREQ(wl1273_fm_get_freq(radio)); in wl1273_fm_vidioc_g_frequency()
1660 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_s_frequency() local
1661 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_s_frequency()
1664 dev_dbg(radio->dev, "%s: %d\n", __func__, freq->frequency); in wl1273_fm_vidioc_s_frequency()
1667 dev_dbg(radio->dev, in wl1273_fm_vidioc_s_frequency()
1676 dev_dbg(radio->dev, "freq: %d\n", freq->frequency); in wl1273_fm_vidioc_s_frequency()
1678 r = wl1273_fm_set_rx_freq(radio, in wl1273_fm_vidioc_s_frequency()
1681 dev_warn(radio->dev, WL1273_FM_DRIVER_NAME in wl1273_fm_vidioc_s_frequency()
1684 r = wl1273_fm_set_tx_freq(radio, in wl1273_fm_vidioc_s_frequency()
1687 dev_warn(radio->dev, WL1273_FM_DRIVER_NAME in wl1273_fm_vidioc_s_frequency()
1693 dev_dbg(radio->dev, "wl1273_vidioc_s_frequency: DONE\n"); in wl1273_fm_vidioc_s_frequency()
1702 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_s_hw_freq_seek() local
1703 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_s_hw_freq_seek()
1706 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_s_hw_freq_seek()
1717 r = wl1273_fm_set_mode(radio, WL1273_MODE_RX); in wl1273_fm_vidioc_s_hw_freq_seek()
1721 r = wl1273_fm_tx_set_spacing(radio, seek->spacing); in wl1273_fm_vidioc_s_hw_freq_seek()
1723 dev_warn(radio->dev, "HW seek failed: %d\n", r); in wl1273_fm_vidioc_s_hw_freq_seek()
1725 r = wl1273_fm_set_seek(radio, seek->wrap_around, seek->seek_upward, in wl1273_fm_vidioc_s_hw_freq_seek()
1728 dev_warn(radio->dev, "HW seek failed: %d\n", r); in wl1273_fm_vidioc_s_hw_freq_seek()
1738 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_s_modulator() local
1739 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_s_modulator()
1742 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_s_modulator()
1750 r = wl1273_fm_set_mode(radio, WL1273_MODE_TX); in wl1273_fm_vidioc_s_modulator()
1755 r = wl1273_fm_set_rds(radio, WL1273_RDS_ON); in wl1273_fm_vidioc_s_modulator()
1757 r = wl1273_fm_set_rds(radio, WL1273_RDS_OFF); in wl1273_fm_vidioc_s_modulator()
1765 dev_warn(radio->dev, WL1273_FM_DRIVER_NAME in wl1273_fm_vidioc_s_modulator()
1776 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_g_modulator() local
1777 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_g_modulator()
1781 dev_dbg(radio->dev, "%s\n", __func__); in wl1273_fm_vidioc_g_modulator()
1807 if (radio->rds_on) in wl1273_fm_vidioc_g_modulator()
1817 struct wl1273_device *radio = video_get_drvdata(video_devdata(file)); in wl1273_fm_vidioc_log_status() local
1818 struct wl1273_core *core = radio->core; in wl1273_fm_vidioc_log_status()
1819 struct device *dev = radio->dev; in wl1273_fm_vidioc_log_status()
1872 int bf = radio->rangelow; in wl1273_fm_vidioc_log_status()
1994 struct wl1273_device *radio = platform_get_drvdata(pdev); in wl1273_fm_radio_remove() local
1995 struct wl1273_core *core = radio->core; in wl1273_fm_radio_remove()
1999 free_irq(core->client->irq, radio); in wl1273_fm_radio_remove()
2002 v4l2_ctrl_handler_free(&radio->ctrl_handler); in wl1273_fm_radio_remove()
2003 video_unregister_device(&radio->videodev); in wl1273_fm_radio_remove()
2004 v4l2_device_unregister(&radio->v4l2dev); in wl1273_fm_radio_remove()
2012 struct wl1273_device *radio; in wl1273_fm_radio_probe() local
2024 radio = devm_kzalloc(&pdev->dev, sizeof(*radio), GFP_KERNEL); in wl1273_fm_radio_probe()
2025 if (!radio) { in wl1273_fm_radio_probe()
2031 radio->buf_size = rds_buf * RDS_BLOCK_SIZE; in wl1273_fm_radio_probe()
2032 radio->buffer = devm_kzalloc(&pdev->dev, radio->buf_size, GFP_KERNEL); in wl1273_fm_radio_probe()
2033 if (!radio->buffer) { in wl1273_fm_radio_probe()
2039 radio->core = *core; in wl1273_fm_radio_probe()
2040 radio->irq_flags = WL1273_IRQ_MASK; in wl1273_fm_radio_probe()
2041 radio->dev = &radio->core->client->dev; in wl1273_fm_radio_probe()
2042 radio->rds_on = false; in wl1273_fm_radio_probe()
2043 radio->core->mode = WL1273_MODE_OFF; in wl1273_fm_radio_probe()
2044 radio->tx_power = 118; in wl1273_fm_radio_probe()
2045 radio->core->audio_mode = WL1273_AUDIO_ANALOG; in wl1273_fm_radio_probe()
2046 radio->band = WL1273_BAND_OTHER; in wl1273_fm_radio_probe()
2047 radio->core->i2s_mode = WL1273_I2S_DEF_MODE; in wl1273_fm_radio_probe()
2048 radio->core->channel_number = 2; in wl1273_fm_radio_probe()
2049 radio->core->volume = WL1273_DEFAULT_VOLUME; in wl1273_fm_radio_probe()
2050 radio->rx_frequency = WL1273_BAND_OTHER_LOW; in wl1273_fm_radio_probe()
2051 radio->tx_frequency = WL1273_BAND_OTHER_HIGH; in wl1273_fm_radio_probe()
2052 radio->rangelow = WL1273_BAND_OTHER_LOW; in wl1273_fm_radio_probe()
2053 radio->rangehigh = WL1273_BAND_OTHER_HIGH; in wl1273_fm_radio_probe()
2054 radio->stereo = true; in wl1273_fm_radio_probe()
2055 radio->bus_type = "I2C"; in wl1273_fm_radio_probe()
2057 if (radio->core->pdata->request_resources) { in wl1273_fm_radio_probe()
2058 r = radio->core->pdata->request_resources(radio->core->client); in wl1273_fm_radio_probe()
2060 dev_err(radio->dev, WL1273_FM_DRIVER_NAME in wl1273_fm_radio_probe()
2065 dev_dbg(radio->dev, "irq: %d\n", radio->core->client->irq); in wl1273_fm_radio_probe()
2067 r = request_threaded_irq(radio->core->client->irq, NULL, in wl1273_fm_radio_probe()
2070 "wl1273-fm", radio); in wl1273_fm_radio_probe()
2072 dev_err(radio->dev, WL1273_FM_DRIVER_NAME in wl1273_fm_radio_probe()
2077 dev_err(radio->dev, WL1273_FM_DRIVER_NAME ": Core WL1273 IRQ not configured"); in wl1273_fm_radio_probe()
2082 init_completion(&radio->busy); in wl1273_fm_radio_probe()
2083 init_waitqueue_head(&radio->read_queue); in wl1273_fm_radio_probe()
2085 radio->write_buf = devm_kzalloc(&pdev->dev, 256, GFP_KERNEL); in wl1273_fm_radio_probe()
2086 if (!radio->write_buf) { in wl1273_fm_radio_probe()
2091 radio->dev = &pdev->dev; in wl1273_fm_radio_probe()
2092 radio->v4l2dev.ctrl_handler = &radio->ctrl_handler; in wl1273_fm_radio_probe()
2093 radio->rds_users = 0; in wl1273_fm_radio_probe()
2095 r = v4l2_device_register(&pdev->dev, &radio->v4l2dev); in wl1273_fm_radio_probe()
2102 radio->videodev = wl1273_viddev_template; in wl1273_fm_radio_probe()
2104 radio->videodev.v4l2_dev = &radio->v4l2dev; in wl1273_fm_radio_probe()
2106 v4l2_ctrl_handler_init(&radio->ctrl_handler, 6); in wl1273_fm_radio_probe()
2109 v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops, in wl1273_fm_radio_probe()
2113 v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops, in wl1273_fm_radio_probe()
2116 v4l2_ctrl_new_std_menu(&radio->ctrl_handler, &wl1273_ctrl_ops, in wl1273_fm_radio_probe()
2121 v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops, in wl1273_fm_radio_probe()
2124 ctrl = v4l2_ctrl_new_std(&radio->ctrl_handler, &wl1273_ctrl_ops, in wl1273_fm_radio_probe()
2130 if (radio->ctrl_handler.error) { in wl1273_fm_radio_probe()
2131 r = radio->ctrl_handler.error; in wl1273_fm_radio_probe()
2136 video_set_drvdata(&radio->videodev, radio); in wl1273_fm_radio_probe()
2137 platform_set_drvdata(pdev, radio); in wl1273_fm_radio_probe()
2140 r = video_register_device(&radio->videodev, VFL_TYPE_RADIO, radio_nr); in wl1273_fm_radio_probe()
2150 v4l2_ctrl_handler_free(&radio->ctrl_handler); in wl1273_fm_radio_probe()
2151 v4l2_device_unregister(&radio->v4l2dev); in wl1273_fm_radio_probe()
2153 free_irq(radio->core->client->irq, radio); in wl1273_fm_radio_probe()
2155 radio->core->pdata->free_resources(); in wl1273_fm_radio_probe()