summaryrefslogtreecommitdiff
path: root/firmware/target/arm/imx233/sansa-fuzeplus/fmradio-i2c-fuzeplus.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/target/arm/imx233/sansa-fuzeplus/fmradio-i2c-fuzeplus.c')
-rw-r--r--firmware/target/arm/imx233/sansa-fuzeplus/fmradio-i2c-fuzeplus.c76
1 files changed, 1 insertions, 75 deletions
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/fmradio-i2c-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/fmradio-i2c-fuzeplus.c
index 15e061103f..2167bb6897 100644
--- a/firmware/target/arm/imx233/sansa-fuzeplus/fmradio-i2c-fuzeplus.c
+++ b/firmware/target/arm/imx233/sansa-fuzeplus/fmradio-i2c-fuzeplus.c
@@ -21,91 +21,17 @@
21 21
22#include "config.h" 22#include "config.h"
23#include "system.h" 23#include "system.h"
24#include "fmradio_i2c.h"
25#include "pinctrl-imx233.h" 24#include "pinctrl-imx233.h"
26#include "generic_i2c.h"
27#include "rds.h" 25#include "rds.h"
28#include "si4700.h" 26#include "si4700.h"
29 27
30/** 28/**
31 * Sansa Fuze+ fmradio uses the following pins: 29 * Sansa Fuze+ fmradio uses the following pins:
32 * - B0P29 as CE apparently (active high) 30 * - B0P29 as CE (active high)
33 * - B1P24 as SDA 31 * - B1P24 as SDA
34 * - B1P22 as SCL 32 * - B1P22 as SCL
35 * - B2P27 as STC/RDS 33 * - B2P27 as STC/RDS
36 */ 34 */
37static int fmradio_i2c_bus = -1;
38
39static void i2c_scl_dir(bool out)
40{
41 imx233_pinctrl_enable_gpio(1, 22, out);
42}
43
44static void i2c_sda_dir(bool out)
45{
46 imx233_pinctrl_enable_gpio(1, 24, out);
47}
48
49static void i2c_scl_out(bool high)
50{
51 imx233_pinctrl_set_gpio(1, 22, high);
52}
53
54static void i2c_sda_out(bool high)
55{
56 imx233_pinctrl_set_gpio(1, 24, high);
57}
58
59static bool i2c_scl_in(void)
60{
61 return imx233_pinctrl_get_gpio(1, 22);
62}
63
64static bool i2c_sda_in(void)
65{
66 return imx233_pinctrl_get_gpio(1, 24);
67}
68
69static void i2c_delay(int d)
70{
71 udelay(d);
72}
73
74struct i2c_interface fmradio_i2c =
75{
76 .scl_dir = i2c_scl_dir,
77 .sda_dir = i2c_sda_dir,
78 .scl_out = i2c_scl_out,
79 .sda_out = i2c_sda_out,
80 .scl_in = i2c_scl_in,
81 .sda_in = i2c_sda_in,
82 .delay = i2c_delay,
83 .delay_hd_sta = 4,
84 .delay_hd_dat = 5,
85 .delay_su_dat = 1,
86 .delay_su_sto = 4,
87 .delay_su_sta = 5,
88 .delay_thigh = 4
89};
90
91void fmradio_i2c_init(void)
92{
93 imx233_pinctrl_acquire(1, 24, "fmradio i2c");
94 imx233_pinctrl_acquire(1, 22, "fmradio i2c");
95 imx233_pinctrl_set_function(1, 24, PINCTRL_FUNCTION_GPIO);
96 imx233_pinctrl_set_function(1, 22, PINCTRL_FUNCTION_GPIO);
97 fmradio_i2c_bus = i2c_add_node(&fmradio_i2c);
98}
99
100int fmradio_i2c_write(unsigned char address, const unsigned char* buf, int count)
101{
102 return i2c_write_data(fmradio_i2c_bus, address, -1, buf, count);
103}
104
105int fmradio_i2c_read(unsigned char address, unsigned char* buf, int count)
106{
107 return i2c_read_data(fmradio_i2c_bus, address, -1, buf, count);
108}
109 35
110#ifdef HAVE_RDS_CAP 36#ifdef HAVE_RDS_CAP
111/* Low-level RDS Support */ 37/* Low-level RDS Support */