summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRafaël Carré <rafael.carre@gmail.com>2010-05-05 02:27:18 +0000
committerRafaël Carré <rafael.carre@gmail.com>2010-05-05 02:27:18 +0000
commitaec0af541335731031d879ca491cd46d5ea7ba16 (patch)
tree1f2e0d9201a26d89b5c1951e2bf49add3d5fdcbb
parente6bb174c628a4d628c20353e8fab6d45458cc764 (diff)
downloadrockbox-aec0af541335731031d879ca491cd46d5ea7ba16.tar.gz
rockbox-aec0af541335731031d879ca491cd46d5ea7ba16.zip
as3525 FM i2c : don't assume SCL and SDA are on the same GPIO
This seems to be the case for the Fuzev2 git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25817 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/arm/as3525/fmradio-i2c-as3525.c44
1 files changed, 26 insertions, 18 deletions
diff --git a/firmware/target/arm/as3525/fmradio-i2c-as3525.c b/firmware/target/arm/as3525/fmradio-i2c-as3525.c
index 622f339633..c86e3f53ab 100644
--- a/firmware/target/arm/as3525/fmradio-i2c-as3525.c
+++ b/firmware/target/arm/as3525/fmradio-i2c-as3525.c
@@ -32,26 +32,34 @@
32#include "fmradio_i2c.h" 32#include "fmradio_i2c.h"
33 33
34#if defined(SANSA_CLIP) || defined(SANSA_C200V2) 34#if defined(SANSA_CLIP) || defined(SANSA_C200V2)
35#define I2C_GPIO(x) GPIOB_PIN(x) 35#define I2C_SCL_GPIO(x) GPIOB_PIN(x)
36#define I2C_GPIO_DIR GPIOB_DIR 36#define I2C_SDA_GPIO(x) GPIOB_PIN(x)
37#define I2C_SCL_GPIO_DIR GPIOB_DIR
38#define I2C_SDA_GPIO_DIR GPIOB_DIR
37#define I2C_SCL_PIN 4 39#define I2C_SCL_PIN 4
38#define I2C_SDA_PIN 5 40#define I2C_SDA_PIN 5
39 41
40#elif defined(SANSA_CLIPV2) || defined(SANSA_CLIPPLUS) 42#elif defined(SANSA_CLIPV2) || defined(SANSA_CLIPPLUS)
41#define I2C_GPIO(x) GPIOB_PIN(x) 43#define I2C_SCL_GPIO(x) GPIOB_PIN(x)
42#define I2C_GPIO_DIR GPIOB_DIR 44#define I2C_SDA_GPIO(x) GPIOB_PIN(x)
45#define I2C_SCL_GPIO_DIR GPIOB_DIR
46#define I2C_SDA_GPIO_DIR GPIOB_DIR
43#define I2C_SCL_PIN 6 47#define I2C_SCL_PIN 6
44#define I2C_SDA_PIN 7 48#define I2C_SDA_PIN 7
45 49
46#elif defined(SANSA_M200V4) 50#elif defined(SANSA_M200V4)
47#define I2C_GPIO(x) GPIOD_PIN(x) 51#define I2C_SCL_GPIO(x) GPIOD_PIN(x)
48#define I2C_GPIO_DIR GPIOD_DIR 52#define I2C_SDA_GPIO(x) GPIOD_PIN(x)
53#define I2C_SCL_GPIO_DIR GPIOD_DIR
54#define I2C_SDA_GPIO_DIR GPIOD_DIR
49#define I2C_SCL_PIN 7 55#define I2C_SCL_PIN 7
50#define I2C_SDA_PIN 6 56#define I2C_SDA_PIN 6
51 57
52#elif defined(SANSA_FUZE) || defined(SANSA_E200V2) 58#elif defined(SANSA_FUZE) || defined(SANSA_E200V2)
53#define I2C_GPIO(x) GPIOA_PIN(x) 59#define I2C_SCL_GPIO(x) GPIOA_PIN(x)
54#define I2C_GPIO_DIR GPIOA_DIR 60#define I2C_SDA_GPIO(x) GPIOA_PIN(x)
61#define I2C_SCL_GPIO_DIR GPIOA_DIR
62#define I2C_SDA_GPIO_DIR GPIOA_DIR
55#define I2C_SCL_PIN 6 63#define I2C_SCL_PIN 6
56#define I2C_SDA_PIN 7 64#define I2C_SDA_PIN 7
57 65
@@ -63,52 +71,52 @@ static int fm_i2c_bus;
63 71
64static void fm_scl_hi(void) 72static void fm_scl_hi(void)
65{ 73{
66 I2C_GPIO(I2C_SCL_PIN) = 1 << I2C_SCL_PIN; 74 I2C_SCL_GPIO(I2C_SCL_PIN) = 1 << I2C_SCL_PIN;
67} 75}
68 76
69static void fm_scl_lo(void) 77static void fm_scl_lo(void)
70{ 78{
71 I2C_GPIO(I2C_SCL_PIN) = 0; 79 I2C_SCL_GPIO(I2C_SCL_PIN) = 0;
72} 80}
73 81
74static void fm_sda_hi(void) 82static void fm_sda_hi(void)
75{ 83{
76 I2C_GPIO(I2C_SDA_PIN) = 1 << I2C_SDA_PIN; 84 I2C_SDA_GPIO(I2C_SDA_PIN) = 1 << I2C_SDA_PIN;
77} 85}
78 86
79static void fm_sda_lo(void) 87static void fm_sda_lo(void)
80{ 88{
81 I2C_GPIO(I2C_SDA_PIN) = 0; 89 I2C_SDA_GPIO(I2C_SDA_PIN) = 0;
82} 90}
83 91
84static void fm_sda_input(void) 92static void fm_sda_input(void)
85{ 93{
86 I2C_GPIO_DIR &= ~(1 << I2C_SDA_PIN); 94 I2C_SDA_GPIO_DIR &= ~(1 << I2C_SDA_PIN);
87} 95}
88 96
89static void fm_sda_output(void) 97static void fm_sda_output(void)
90{ 98{
91 I2C_GPIO_DIR |= 1 << I2C_SDA_PIN; 99 I2C_SDA_GPIO_DIR |= 1 << I2C_SDA_PIN;
92} 100}
93 101
94static void fm_scl_input(void) 102static void fm_scl_input(void)
95{ 103{
96 I2C_GPIO_DIR &= ~(1 << I2C_SCL_PIN); 104 I2C_SCL_GPIO_DIR &= ~(1 << I2C_SCL_PIN);
97} 105}
98 106
99static void fm_scl_output(void) 107static void fm_scl_output(void)
100{ 108{
101 I2C_GPIO_DIR |= 1 << I2C_SCL_PIN; 109 I2C_SCL_GPIO_DIR |= 1 << I2C_SCL_PIN;
102} 110}
103 111
104static int fm_sda(void) 112static int fm_sda(void)
105{ 113{
106 return I2C_GPIO(I2C_SDA_PIN); 114 return I2C_SDA_GPIO(I2C_SDA_PIN);
107} 115}
108 116
109static int fm_scl(void) 117static int fm_scl(void)
110{ 118{
111 return I2C_GPIO(I2C_SCL_PIN); 119 return I2C_SCL_GPIO(I2C_SCL_PIN);
112} 120}
113 121
114/* simple and crude delay, used for all delays in the generic i2c driver */ 122/* simple and crude delay, used for all delays in the generic i2c driver */