summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-rw-r--r--firmware/SOURCES2
-rw-r--r--firmware/target/arm/as3525/fmradio-i2c-as3525.c (renamed from firmware/target/arm/as3525/sansa-clip/fmradio-i2c-clip.c)39
2 files changed, 31 insertions, 10 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 3fadec005e..68d10876c8 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -1094,6 +1094,8 @@ target/arm/lcd-ssd1815.c
1094target/arm/as3525/sansa-m200v4/button-m200v4.c 1094target/arm/as3525/sansa-m200v4/button-m200v4.c
1095#ifndef BOOTLOADER 1095#ifndef BOOTLOADER
1096target/arm/as3525/powermgmt-as3525.c 1096target/arm/as3525/powermgmt-as3525.c
1097drivers/generic_i2c.c
1098target/arm/as3525/fmradio-i2c-as3525.c
1097#endif /* !BOOTLOADER */ 1099#endif /* !BOOTLOADER */
1098#endif /* !SIMULATOR */ 1100#endif /* !SIMULATOR */
1099#endif /* SANSA_M200V4 */ 1101#endif /* SANSA_M200V4 */
diff --git a/firmware/target/arm/as3525/sansa-clip/fmradio-i2c-clip.c b/firmware/target/arm/as3525/fmradio-i2c-as3525.c
index e3444b8acf..18f29dbc57 100644
--- a/firmware/target/arm/as3525/sansa-clip/fmradio-i2c-clip.c
+++ b/firmware/target/arm/as3525/fmradio-i2c-as3525.c
@@ -31,57 +31,70 @@
31#include "generic_i2c.h" 31#include "generic_i2c.h"
32#include "fmradio_i2c.h" 32#include "fmradio_i2c.h"
33 33
34#if defined(SANSA_CLIP)
35#define I2C_GPIO(x) GPIOB_PIN(x)
36#define I2C_GPIO_DIR GPIOB_DIR
34#define I2C_SCL_PIN 4 37#define I2C_SCL_PIN 4
35#define I2C_SDA_PIN 5 38#define I2C_SDA_PIN 5
36 39
40#elif defined(SANSA_M200V4)
41#define I2C_GPIO(x) GPIOD_PIN(x)
42#define I2C_GPIO_DIR GPIOD_DIR
43#define I2C_SCL_PIN 7
44#define I2C_SDA_PIN 6
45
46#elif
47#error no FM I2C GPIOPIN defines
48#endif
49
37static void fm_scl_hi(void) 50static void fm_scl_hi(void)
38{ 51{
39 GPIOB_PIN(I2C_SCL_PIN) = 1 << I2C_SCL_PIN; 52 I2C_GPIO(I2C_SCL_PIN) = 1 << I2C_SCL_PIN;
40} 53}
41 54
42static void fm_scl_lo(void) 55static void fm_scl_lo(void)
43{ 56{
44 GPIOB_PIN(I2C_SCL_PIN) = 0; 57 I2C_GPIO(I2C_SCL_PIN) = 0;
45} 58}
46 59
47static void fm_sda_hi(void) 60static void fm_sda_hi(void)
48{ 61{
49 GPIOB_PIN(I2C_SDA_PIN) = 1 << I2C_SDA_PIN; 62 I2C_GPIO(I2C_SDA_PIN) = 1 << I2C_SDA_PIN;
50} 63}
51 64
52static void fm_sda_lo(void) 65static void fm_sda_lo(void)
53{ 66{
54 GPIOB_PIN(I2C_SDA_PIN) = 0; 67 I2C_GPIO(I2C_SDA_PIN) = 0;
55} 68}
56 69
57static void fm_sda_input(void) 70static void fm_sda_input(void)
58{ 71{
59 GPIOB_DIR &= ~(1 << I2C_SDA_PIN); 72 I2C_GPIO_DIR &= ~(1 << I2C_SDA_PIN);
60} 73}
61 74
62static void fm_sda_output(void) 75static void fm_sda_output(void)
63{ 76{
64 GPIOB_DIR |= 1 << I2C_SDA_PIN; 77 I2C_GPIO_DIR |= 1 << I2C_SDA_PIN;
65} 78}
66 79
67static void fm_scl_input(void) 80static void fm_scl_input(void)
68{ 81{
69 GPIOB_DIR &= ~(1 << I2C_SCL_PIN); 82 I2C_GPIO_DIR &= ~(1 << I2C_SCL_PIN);
70} 83}
71 84
72static void fm_scl_output(void) 85static void fm_scl_output(void)
73{ 86{
74 GPIOB_DIR |= 1 << I2C_SCL_PIN; 87 I2C_GPIO_DIR |= 1 << I2C_SCL_PIN;
75} 88}
76 89
77static int fm_sda(void) 90static int fm_sda(void)
78{ 91{
79 return GPIOB_PIN(I2C_SDA_PIN); 92 return I2C_GPIO(I2C_SDA_PIN);
80} 93}
81 94
82static int fm_scl(void) 95static int fm_scl(void)
83{ 96{
84 return GPIOB_PIN(I2C_SCL_PIN); 97 return I2C_GPIO(I2C_SCL_PIN);
85} 98}
86 99
87/* simple and crude delay, used for all delays in the generic i2c driver */ 100/* simple and crude delay, used for all delays in the generic i2c driver */
@@ -96,7 +109,13 @@ static void fm_delay(void)
96 109
97/* interface towards the generic i2c driver */ 110/* interface towards the generic i2c driver */
98static struct i2c_interface fm_i2c_interface = { 111static struct i2c_interface fm_i2c_interface = {
112#if defined(SANSA_CLIP)
99 .address = 0x10 << 1, 113 .address = 0x10 << 1,
114#elif defined(SANSA_M200V4)
115 .address = 0xC0,
116#elif
117#error no fm i2c address defined
118#endif
100 119
101 .scl_hi = fm_scl_hi, 120 .scl_hi = fm_scl_hi,
102 .scl_lo = fm_scl_lo, 121 .scl_lo = fm_scl_lo,