Lines Matching refs:radio

97 int si470x_get_register(struct si470x_device *radio, int regnr)  in si470x_get_register()  argument
102 .addr = radio->client->addr, in si470x_get_register()
109 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_get_register()
112 radio->registers[regnr] = __be16_to_cpu(buf[READ_INDEX(regnr)]); in si470x_get_register()
121 int si470x_set_register(struct si470x_device *radio, int regnr) in si470x_set_register() argument
127 .addr = radio->client->addr, in si470x_set_register()
134 buf[i] = __cpu_to_be16(radio->registers[WRITE_INDEX(i)]); in si470x_set_register()
136 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_set_register()
151 static int si470x_get_all_registers(struct si470x_device *radio) in si470x_get_all_registers() argument
157 .addr = radio->client->addr, in si470x_get_all_registers()
164 if (i2c_transfer(radio->client->adapter, msgs, 1) != 1) in si470x_get_all_registers()
168 radio->registers[i] = __be16_to_cpu(buf[READ_INDEX(i)]); in si470x_get_all_registers()
184 struct si470x_device *radio = video_drvdata(file); in si470x_fops_open() local
192 retval = si470x_start(radio); in si470x_fops_open()
197 radio->registers[SYSCONFIG1] |= SYSCONFIG1_RDSIEN; in si470x_fops_open()
198 radio->registers[SYSCONFIG1] |= SYSCONFIG1_STCIEN; in si470x_fops_open()
199 radio->registers[SYSCONFIG1] &= ~SYSCONFIG1_GPIO2; in si470x_fops_open()
200 radio->registers[SYSCONFIG1] |= 0x1 << 2; in si470x_fops_open()
201 retval = si470x_set_register(radio, SYSCONFIG1); in si470x_fops_open()
216 struct si470x_device *radio = video_drvdata(file); in si470x_fops_release() local
220 si470x_stop(radio); in si470x_fops_release()
257 struct si470x_device *radio = dev_id; in si470x_i2c_interrupt() local
266 retval = si470x_get_register(radio, STATUSRSSI); in si470x_i2c_interrupt()
270 if (radio->registers[STATUSRSSI] & STATUSRSSI_STC) in si470x_i2c_interrupt()
271 complete(&radio->completion); in si470x_i2c_interrupt()
274 if ((radio->registers[SYSCONFIG1] & SYSCONFIG1_RDS) == 0) in si470x_i2c_interrupt()
279 retval = si470x_get_register(radio, STATUSRSSI + regnr); in si470x_i2c_interrupt()
285 if ((radio->registers[STATUSRSSI] & STATUSRSSI_RDSR) == 0) in si470x_i2c_interrupt()
292 bler = (radio->registers[STATUSRSSI] & in si470x_i2c_interrupt()
294 rds = radio->registers[RDSA]; in si470x_i2c_interrupt()
297 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
299 rds = radio->registers[RDSB]; in si470x_i2c_interrupt()
302 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
304 rds = radio->registers[RDSC]; in si470x_i2c_interrupt()
307 bler = (radio->registers[READCHAN] & in si470x_i2c_interrupt()
309 rds = radio->registers[RDSD]; in si470x_i2c_interrupt()
323 memcpy(&radio->buffer[radio->wr_index], &tmpbuf, 3); in si470x_i2c_interrupt()
324 radio->wr_index += 3; in si470x_i2c_interrupt()
327 if (radio->wr_index >= radio->buf_size) in si470x_i2c_interrupt()
328 radio->wr_index = 0; in si470x_i2c_interrupt()
331 if (radio->wr_index == radio->rd_index) { in si470x_i2c_interrupt()
333 radio->rd_index += 3; in si470x_i2c_interrupt()
334 if (radio->rd_index >= radio->buf_size) in si470x_i2c_interrupt()
335 radio->rd_index = 0; in si470x_i2c_interrupt()
339 if (radio->wr_index != radio->rd_index) in si470x_i2c_interrupt()
340 wake_up_interruptible(&radio->read_queue); in si470x_i2c_interrupt()
353 struct si470x_device *radio; in si470x_i2c_probe() local
358 radio = kzalloc(sizeof(struct si470x_device), GFP_KERNEL); in si470x_i2c_probe()
359 if (!radio) { in si470x_i2c_probe()
364 radio->client = client; in si470x_i2c_probe()
365 radio->band = 1; /* Default to 76 - 108 MHz */ in si470x_i2c_probe()
366 mutex_init(&radio->lock); in si470x_i2c_probe()
367 init_completion(&radio->completion); in si470x_i2c_probe()
370 radio->videodev = si470x_viddev_template; in si470x_i2c_probe()
371 video_set_drvdata(&radio->videodev, radio); in si470x_i2c_probe()
374 radio->registers[POWERCFG] = POWERCFG_ENABLE; in si470x_i2c_probe()
375 if (si470x_set_register(radio, POWERCFG) < 0) { in si470x_i2c_probe()
382 if (si470x_get_all_registers(radio) < 0) { in si470x_i2c_probe()
387 radio->registers[DEVICEID], radio->registers[CHIPID]); in si470x_i2c_probe()
388 if ((radio->registers[CHIPID] & CHIPID_FIRMWARE) < RADIO_FW_VERSION) { in si470x_i2c_probe()
394 radio->registers[CHIPID] & CHIPID_FIRMWARE); in si470x_i2c_probe()
408 si470x_set_freq(radio, 87.5 * FREQ_MUL); /* available in all regions */ in si470x_i2c_probe()
411 radio->buf_size = rds_buf * 3; in si470x_i2c_probe()
412 radio->buffer = kmalloc(radio->buf_size, GFP_KERNEL); in si470x_i2c_probe()
413 if (!radio->buffer) { in si470x_i2c_probe()
419 radio->wr_index = 0; in si470x_i2c_probe()
420 radio->rd_index = 0; in si470x_i2c_probe()
421 init_waitqueue_head(&radio->read_queue); in si470x_i2c_probe()
424 IRQF_TRIGGER_FALLING, DRIVER_NAME, radio); in si470x_i2c_probe()
431 retval = video_register_device(&radio->videodev, VFL_TYPE_RADIO, in si470x_i2c_probe()
437 i2c_set_clientdata(client, radio); in si470x_i2c_probe()
441 free_irq(client->irq, radio); in si470x_i2c_probe()
443 kfree(radio->buffer); in si470x_i2c_probe()
445 kfree(radio); in si470x_i2c_probe()
456 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_remove() local
458 free_irq(client->irq, radio); in si470x_i2c_remove()
459 video_unregister_device(&radio->videodev); in si470x_i2c_remove()
460 kfree(radio); in si470x_i2c_remove()
473 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_suspend() local
476 radio->registers[POWERCFG] |= POWERCFG_DISABLE; in si470x_i2c_suspend()
477 if (si470x_set_register(radio, POWERCFG) < 0) in si470x_i2c_suspend()
490 struct si470x_device *radio = i2c_get_clientdata(client); in si470x_i2c_resume() local
493 radio->registers[POWERCFG] |= POWERCFG_ENABLE; in si470x_i2c_resume()
494 if (si470x_set_register(radio, POWERCFG) < 0) in si470x_i2c_resume()