summaryrefslogtreecommitdiff
path: root/firmware/target/hosted/ypr0/radio-ypr0.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/hosted/ypr0/radio-ypr0.c')
-rw-r--r--firmware/target/hosted/ypr0/radio-ypr0.c66
1 files changed, 66 insertions, 0 deletions
diff --git a/firmware/target/hosted/ypr0/radio-ypr0.c b/firmware/target/hosted/ypr0/radio-ypr0.c
new file mode 100644
index 0000000000..c3597bd18c
--- /dev/null
+++ b/firmware/target/hosted/ypr0/radio-ypr0.c
@@ -0,0 +1,66 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 *
9 * Module wrapper for SI4709 FM Radio Chip, using /dev/si470x (si4709.ko) of Samsung YP-R0
10 *
11 * Copyright (c) 2012 Lorenzo Miori
12 *
13 * This program is free software; you can redistribute it and/or
14 * modify it under the terms of the GNU General Public License
15 * as published by the Free Software Foundation; either version 2
16 * of the License, or (at your option) any later version.
17 *
18 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19 * KIND, either express or implied.
20 *
21 ****************************************************************************/
22
23#include <unistd.h>
24#include <fcntl.h>
25#include <sys/ioctl.h>
26#include "stdint.h"
27#include "string.h"
28
29#include "radio-ypr0.h"
30
31static int radio_dev = -1;
32
33void radiodev_open(void) {
34 radio_dev = open("/dev/si470x", O_RDWR);
35}
36
37void radiodev_close(void) {
38 close(radio_dev);
39}
40
41/* High-level registers access */
42void si4709_write_reg(int addr, uint16_t value) {
43 sSi4709_t r = { .addr = addr, .value = value };
44 ioctl(radio_dev, IOCTL_SI4709_WRITE_BYTE, &r);
45}
46
47uint16_t si4709_read_reg(int addr) {
48 sSi4709_t r = { .addr = addr, .value = 0 };
49 ioctl(radio_dev, IOCTL_SI4709_READ_BYTE, &r);
50 return r.value;
51}
52
53/* Low-level i2c channel access */
54int fmradio_i2c_write(unsigned char address, unsigned char* buf, int count)
55{
56 (void)address;
57 sSi4709_i2c_t r = { .size = count, .buf = buf };
58 return ioctl(radio_dev, IOCTL_SI4709_I2C_WRITE, &r);
59}
60
61int fmradio_i2c_read(unsigned char address, unsigned char* buf, int count)
62{
63 (void)address;
64 sSi4709_i2c_t r = { .size = count, .buf = buf };
65 return ioctl(radio_dev, IOCTL_SI4709_I2C_READ, &r);
66} \ No newline at end of file