Lines Matching refs:radio

84 static int si470x_get_register(struct si470x_device *radio, int regnr)  in si470x_get_register()  argument
89 .addr = radio->client->addr, in si470x_get_register()
96 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_get_register()
99 radio->registers[regnr] = __be16_to_cpu(buf[READ_INDEX(regnr)]); in si470x_get_register()
108 static int si470x_set_register(struct si470x_device *radio, int regnr) in si470x_set_register() argument
114 .addr = radio->client->addr, in si470x_set_register()
121 buf[i] = __cpu_to_be16(radio->registers[WRITE_INDEX(i)]); in si470x_set_register()
123 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_set_register()
138 static int si470x_get_all_registers(struct si470x_device *radio) in si470x_get_all_registers() argument
144 .addr = radio->client->addr, in si470x_get_all_registers()
151 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_get_all_registers()
155 radio->registers[i] = __be16_to_cpu(buf[READ_INDEX(i)]); in si470x_get_all_registers()
171 struct si470x_device *radio = video_drvdata(file); in si470x_fops_open() local
179 retval = si470x_start(radio); in si470x_fops_open()
184 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDSIEN; in si470x_fops_open()
185 radio->registers[SYSCONFIG1] |= SYSCONFIG1_STCIEN; in si470x_fops_open()
186 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_GPIO2; in si470x_fops_open()
187 radio->registers[SYSCONFIG1] |= 0x1 << 2; in si470x_fops_open()
188 retval = si470x_set_register(radio, SYSCONFIG1); in si470x_fops_open()
203 struct si470x_device *radio = video_drvdata(file); in si470x_fops_release() local
207 si470x_stop(radio); in si470x_fops_release()
240 struct si470x_device *radio = dev_id; in si470x_i2c_interrupt() local
249 retval = si470x_get_register(radio, STATUSRSSI); in si470x_i2c_interrupt()
253 if (radio->registers[STATUSRSSI] & STATUSRSSI_STC) in si470x_i2c_interrupt()
254 complete(&radio->completion); in si470x_i2c_interrupt()
257 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) in si470x_i2c_interrupt()
262 retval = si470x_get_register(radio, STATUSRSSI + regnr); in si470x_i2c_interrupt()
268 if ((radio->registers[STATUSRSSI] & STATUSRSSI_RDSR) == 0) in si470x_i2c_interrupt()
275 bler = (radio->registers[STATUSRSSI] & in si470x_i2c_interrupt()
277 rds = radio->registers[RDSA]; in si470x_i2c_interrupt()
280 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
282 rds = radio->registers[RDSB]; in si470x_i2c_interrupt()
285 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
287 rds = radio->registers[RDSC]; in si470x_i2c_interrupt()
290 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
292 rds = radio->registers[RDSD]; in si470x_i2c_interrupt()
306 memcpy(&radio->buffer[radio->wr_index], &tmpbuf, 3); in si470x_i2c_interrupt()
307 radio->wr_index += 3; in si470x_i2c_interrupt()
310 if (radio->wr_index >= radio->buf_size) in si470x_i2c_interrupt()
311 radio->wr_index = 0; in si470x_i2c_interrupt()
314 if (radio->wr_index == radio->rd_index) { in si470x_i2c_interrupt()
316 radio->rd_index += 3; in si470x_i2c_interrupt()
317 if (radio->rd_index >= radio->buf_size) in si470x_i2c_interrupt()
318 radio->rd_index = 0; in si470x_i2c_interrupt()
322 if (radio->wr_index != radio->rd_index) in si470x_i2c_interrupt()
323 wake_up_interruptible(&radio->read_queue); in si470x_i2c_interrupt()
335 struct si470x_device *radio; in si470x_i2c_probe() local
339 radio = devm_kzalloc(&client->dev, sizeof(*radio), GFP_KERNEL); in si470x_i2c_probe()
340 if (!radio) { in si470x_i2c_probe()
345 radio->client = client; in si470x_i2c_probe()
346 radio->band = 1; /* Default to 76 - 108 MHz */ in si470x_i2c_probe()
347 mutex_init(&radio->lock); in si470x_i2c_probe()
348 init_completion(&radio->completion); in si470x_i2c_probe()
350 radio->get_register = si470x_get_register; in si470x_i2c_probe()
351 radio->set_register = si470x_set_register; in si470x_i2c_probe()
352 radio->fops_open = si470x_fops_open; in si470x_i2c_probe()
353 radio->fops_release = si470x_fops_release; in si470x_i2c_probe()
354 radio->vidioc_querycap = si470x_vidioc_querycap; in si470x_i2c_probe()
356 retval = v4l2_device_register(&client->dev, &radio->v4l2_dev); in si470x_i2c_probe()
362 v4l2_ctrl_handler_init(&radio->hdl, 2); in si470x_i2c_probe()
363 v4l2_ctrl_new_std(&radio->hdl, &si470x_ctrl_ops, in si470x_i2c_probe()
365 v4l2_ctrl_new_std(&radio->hdl, &si470x_ctrl_ops, in si470x_i2c_probe()
367 if (radio->hdl.error) { in si470x_i2c_probe()
368 retval = radio->hdl.error; in si470x_i2c_probe()
374 radio->videodev = si470x_viddev_template; in si470x_i2c_probe()
375 radio->videodev.ctrl_handler = &radio->hdl; in si470x_i2c_probe()
376 radio->videodev.lock = &radio->lock; in si470x_i2c_probe()
377 radio->videodev.v4l2_dev = &radio->v4l2_dev; in si470x_i2c_probe()
378 radio->videodev.release = video_device_release_empty; in si470x_i2c_probe()
379 radio->videodev.device_caps = in si470x_i2c_probe()
382 video_set_drvdata(&radio->videodev, radio); in si470x_i2c_probe()
384 radio->gpio_reset = devm_gpiod_get_optional(&client->dev, "reset", in si470x_i2c_probe()
386 if (IS_ERR(radio->gpio_reset)) { in si470x_i2c_probe()
387 retval = PTR_ERR(radio->gpio_reset); in si470x_i2c_probe()
392 if (radio->gpio_reset) in si470x_i2c_probe()
393 gpiod_set_value(radio->gpio_reset, 1); in si470x_i2c_probe()
396 radio->registers[POWERCFG] = POWERCFG_ENABLE; in si470x_i2c_probe()
397 if (si470x_set_register(radio, POWERCFG) < 0) { in si470x_i2c_probe()
404 if (si470x_get_all_registers(radio) < 0) { in si470x_i2c_probe()
409 radio->registers[DEVICEID], radio->registers[SI_CHIPID]); in si470x_i2c_probe()
410 if ((radio->registers[SI_CHIPID] & SI_CHIPID_FIRMWARE) < RADIO_FW_VERSION) { in si470x_i2c_probe()
415 radio->registers[SI_CHIPID] & SI_CHIPID_FIRMWARE); in si470x_i2c_probe()
419 si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ in si470x_i2c_probe()
422 radio->buf_size = rds_buf * 3; in si470x_i2c_probe()
423 radio->buffer = devm_kmalloc(&client->dev, radio->buf_size, GFP_KERNEL); in si470x_i2c_probe()
424 if (!radio->buffer) { in si470x_i2c_probe()
430 radio->wr_index = 0; in si470x_i2c_probe()
431 radio->rd_index = 0; in si470x_i2c_probe()
432 init_waitqueue_head(&radio->read_queue); in si470x_i2c_probe()
437 DRIVER_NAME, radio); in si470x_i2c_probe()
444 retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, in si470x_i2c_probe()
450 i2c_set_clientdata(client, radio); in si470x_i2c_probe()
454 v4l2_ctrl_handler_free(&radio->hdl); in si470x_i2c_probe()
455 v4l2_device_unregister(&radio->v4l2_dev); in si470x_i2c_probe()
466 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_remove() local
468 video_unregister_device(&radio->videodev); in si470x_i2c_remove()
470 if (radio->gpio_reset) in si470x_i2c_remove()
471 gpiod_set_value(radio->gpio_reset, 0); in si470x_i2c_remove()
473 v4l2_ctrl_handler_free(&radio->hdl); in si470x_i2c_remove()
474 v4l2_device_unregister(&radio->v4l2_dev); in si470x_i2c_remove()
485 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_suspend() local
488 radio->registers[POWERCFG] |= POWERCFG_DISABLE; in si470x_i2c_suspend()
489 if (si470x_set_register(radio, POWERCFG) < 0) in si470x_i2c_suspend()
502 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_resume() local
505 radio->registers[POWERCFG] |= POWERCFG_ENABLE; in si470x_i2c_resume()
506 if (si470x_set_register(radio, POWERCFG) < 0) in si470x_i2c_resume()