Lines Matching refs:radio
194 static int si470x_set_band(struct si470x_device *radio, int band) in si470x_set_band() argument
196 if (radio->band == band) in si470x_set_band()
199 radio->band = band; in si470x_set_band()
200 radio->registers[SYSCONFIG2] &= ~SYSCONFIG2_BAND; in si470x_set_band()
201 radio->registers[SYSCONFIG2] |= radio->band << 6; in si470x_set_band()
202 return si470x_set_register(radio, SYSCONFIG2); in si470x_set_band()
208 static int si470x_set_chan(struct si470x_device *radio, unsigned short chan) in si470x_set_chan() argument
215 radio->registers[CHANNEL] &= ~CHANNEL_CHAN; in si470x_set_chan()
216 radio->registers[CHANNEL] |= CHANNEL_TUNE | chan; in si470x_set_chan()
217 retval = si470x_set_register(radio, CHANNEL); in si470x_set_chan()
222 reinit_completion(&radio->completion); in si470x_set_chan()
223 time_left = wait_for_completion_timeout(&radio->completion, in si470x_set_chan()
228 if ((radio->registers[STATUSRSSI] & STATUSRSSI_STC) == 0) in si470x_set_chan()
229 dev_warn(&radio->videodev.dev, "tune does not complete\n"); in si470x_set_chan()
231 dev_warn(&radio->videodev.dev, in si470x_set_chan()
235 radio->registers[CHANNEL] &= ~CHANNEL_TUNE; in si470x_set_chan()
236 retval = si470x_set_register(radio, CHANNEL); in si470x_set_chan()
245 static unsigned int si470x_get_step(struct si470x_device *radio) in si470x_get_step() argument
248 switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_SPACE) >> 4) { in si470x_get_step()
265 static int si470x_get_freq(struct si470x_device *radio, unsigned int *freq) in si470x_get_freq() argument
270 retval = si470x_get_register(radio, READCHAN); in si470x_get_freq()
271 chan = radio->registers[READCHAN] & READCHAN_READCHAN; in si470x_get_freq()
274 *freq = chan * si470x_get_step(radio) + bands[radio->band].rangelow; in si470x_get_freq()
283 int si470x_set_freq(struct si470x_device *radio, unsigned int freq) in si470x_set_freq() argument
287 freq = clamp(freq, bands[radio->band].rangelow, in si470x_set_freq()
288 bands[radio->band].rangehigh); in si470x_set_freq()
290 chan = (freq - bands[radio->band].rangelow) / si470x_get_step(radio); in si470x_set_freq()
292 return si470x_set_chan(radio, chan); in si470x_set_freq()
299 static int si470x_set_seek(struct si470x_device *radio, in si470x_set_seek() argument
319 if (radio->band != band) { in si470x_set_seek()
320 retval = si470x_get_freq(radio, &freq); in si470x_set_seek()
323 retval = si470x_set_band(radio, band); in si470x_set_seek()
326 retval = si470x_set_freq(radio, freq); in si470x_set_seek()
332 radio->registers[POWERCFG] |= POWERCFG_SEEK; in si470x_set_seek()
334 radio->registers[POWERCFG] &= ~POWERCFG_SKMODE; in si470x_set_seek()
336 radio->registers[POWERCFG] |= POWERCFG_SKMODE; in si470x_set_seek()
338 radio->registers[POWERCFG] |= POWERCFG_SEEKUP; in si470x_set_seek()
340 radio->registers[POWERCFG] &= ~POWERCFG_SEEKUP; in si470x_set_seek()
341 retval = si470x_set_register(radio, POWERCFG); in si470x_set_seek()
346 reinit_completion(&radio->completion); in si470x_set_seek()
347 time_left = wait_for_completion_timeout(&radio->completion, in si470x_set_seek()
352 if ((radio->registers[STATUSRSSI] & STATUSRSSI_STC) == 0) in si470x_set_seek()
353 dev_warn(&radio->videodev.dev, "seek does not complete\n"); in si470x_set_seek()
354 if (radio->registers[STATUSRSSI] & STATUSRSSI_SF) in si470x_set_seek()
355 dev_warn(&radio->videodev.dev, in si470x_set_seek()
359 radio->registers[POWERCFG] &= ~POWERCFG_SEEK; in si470x_set_seek()
360 retval = si470x_set_register(radio, POWERCFG); in si470x_set_seek()
372 int si470x_start(struct si470x_device *radio) in si470x_start() argument
377 radio->registers[POWERCFG] = in si470x_start()
379 retval = si470x_set_register(radio, POWERCFG); in si470x_start()
384 radio->registers[SYSCONFIG1] = in si470x_start()
386 retval = si470x_set_register(radio, SYSCONFIG1); in si470x_start()
391 radio->registers[SYSCONFIG2] = in si470x_start()
393 ((radio->band << 6) & SYSCONFIG2_BAND) |/* BAND */ in si470x_start()
396 retval = si470x_set_register(radio, SYSCONFIG2); in si470x_start()
401 retval = si470x_set_chan(radio, in si470x_start()
402 radio->registers[CHANNEL] & CHANNEL_CHAN); in si470x_start()
412 int si470x_stop(struct si470x_device *radio) in si470x_stop() argument
417 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_RDS; in si470x_stop()
418 retval = si470x_set_register(radio, SYSCONFIG1); in si470x_stop()
423 radio->registers[POWERCFG] &= ~POWERCFG_DMUTE; in si470x_stop()
425 radio->registers[POWERCFG] |= POWERCFG_ENABLE | POWERCFG_DISABLE; in si470x_stop()
426 retval = si470x_set_register(radio, POWERCFG); in si470x_stop()
436 static int si470x_rds_on(struct si470x_device *radio) in si470x_rds_on() argument
441 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDS; in si470x_rds_on()
442 retval = si470x_set_register(radio, SYSCONFIG1); in si470x_rds_on()
444 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_RDS; in si470x_rds_on()
461 struct si470x_device *radio = video_drvdata(file); in si470x_fops_read() local
466 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) in si470x_fops_read()
467 si470x_rds_on(radio); in si470x_fops_read()
470 while (radio->wr_index == radio->rd_index) { in si470x_fops_read()
475 if (wait_event_interruptible(radio->read_queue, in si470x_fops_read()
476 radio->wr_index != radio->rd_index) < 0) { in si470x_fops_read()
487 if (radio->rd_index == radio->wr_index) in si470x_fops_read()
491 if (copy_to_user(buf, &radio->buffer[radio->rd_index], 3)) in si470x_fops_read()
496 radio->rd_index += 3; in si470x_fops_read()
497 if (radio->rd_index >= radio->buf_size) in si470x_fops_read()
498 radio->rd_index = 0; in si470x_fops_read()
517 struct si470x_device *radio = video_drvdata(file); in si470x_fops_poll() local
523 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) in si470x_fops_poll()
524 si470x_rds_on(radio); in si470x_fops_poll()
526 poll_wait(file, &radio->read_queue, pts); in si470x_fops_poll()
528 if (radio->rd_index != radio->wr_index) in si470x_fops_poll()
557 struct si470x_device *radio = in si470x_s_ctrl() local
562 radio->registers[SYSCONFIG2] &= ~SYSCONFIG2_VOLUME; in si470x_s_ctrl()
563 radio->registers[SYSCONFIG2] |= ctrl->val; in si470x_s_ctrl()
564 return si470x_set_register(radio, SYSCONFIG2); in si470x_s_ctrl()
567 radio->registers[POWERCFG] &= ~POWERCFG_DMUTE; in si470x_s_ctrl()
569 radio->registers[POWERCFG] |= POWERCFG_DMUTE; in si470x_s_ctrl()
570 return si470x_set_register(radio, POWERCFG); in si470x_s_ctrl()
583 struct si470x_device *radio = video_drvdata(file); in si470x_vidioc_g_tuner() local
589 if (!radio->status_rssi_auto_update) { in si470x_vidioc_g_tuner()
590 retval = si470x_get_register(radio, STATUSRSSI); in si470x_vidioc_g_tuner()
606 if ((radio->registers[STATUSRSSI] & STATUSRSSI_ST) == 0) in si470x_vidioc_g_tuner()
616 if ((radio->registers[POWERCFG] & POWERCFG_MONO) == 0) in si470x_vidioc_g_tuner()
623 tuner->signal = (radio->registers[STATUSRSSI] & STATUSRSSI_RSSI); in si470x_vidioc_g_tuner()
631 tuner->afc = (radio->registers[STATUSRSSI] & STATUSRSSI_AFCRL) ? 1 : 0; in si470x_vidioc_g_tuner()
643 struct si470x_device *radio = video_drvdata(file); in si470x_vidioc_s_tuner() local
651 radio->registers[POWERCFG] |= POWERCFG_MONO; /* force mono */ in si470x_vidioc_s_tuner()
655 radio->registers[POWERCFG] &= ~POWERCFG_MONO; /* try stereo */ in si470x_vidioc_s_tuner()
659 return si470x_set_register(radio, POWERCFG); in si470x_vidioc_s_tuner()
669 struct si470x_device *radio = video_drvdata(file); in si470x_vidioc_g_frequency() local
675 return si470x_get_freq(radio, &freq->frequency); in si470x_vidioc_g_frequency()
685 struct si470x_device *radio = video_drvdata(file); in si470x_vidioc_s_frequency() local
691 if (freq->frequency < bands[radio->band].rangelow || in si470x_vidioc_s_frequency()
692 freq->frequency > bands[radio->band].rangehigh) { in si470x_vidioc_s_frequency()
694 retval = si470x_set_band(radio, 1); in si470x_vidioc_s_frequency()
698 return si470x_set_freq(radio, freq->frequency); in si470x_vidioc_s_frequency()
708 struct si470x_device *radio = video_drvdata(file); in si470x_vidioc_s_hw_freq_seek() local
716 return si470x_set_seek(radio, seek); in si470x_vidioc_s_hw_freq_seek()