summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--firmware/export/as3525.h1
-rw-r--r--firmware/target/arm/as3525/ata_sd_as3525.c12
-rw-r--r--firmware/target/arm/as3525/backlight-e200v2-fuze.c4
-rw-r--r--firmware/target/arm/as3525/sansa-fuze/button-fuze.c1
4 files changed, 14 insertions, 4 deletions
diff --git a/firmware/export/as3525.h b/firmware/export/as3525.h
index 50b1fbe06b..70462c7e8e 100644
--- a/firmware/export/as3525.h
+++ b/firmware/export/as3525.h
@@ -273,6 +273,7 @@ interface */
#define UART_LNSTATUS_REG (*(volatile unsigned long*)(UART0_BASE + 0x14)) /* Line status register */
+#define SD_MCI_POWER (*(volatile unsigned long*)(SD_MCI_BASE + 0x0))
#define TIMER1_LOAD (*(volatile unsigned long*)(TIMER_BASE + 0x00)) /* 32-bit width */
diff --git a/firmware/target/arm/as3525/ata_sd_as3525.c b/firmware/target/arm/as3525/ata_sd_as3525.c
index b68df4c930..44fe3e4314 100644
--- a/firmware/target/arm/as3525/ata_sd_as3525.c
+++ b/firmware/target/arm/as3525/ata_sd_as3525.c
@@ -476,10 +476,10 @@ static void init_pl180_controller(const int drive)
int sd_init(void)
{
int ret;
- CGU_IDE = (1<<7) /* AHB interface enable */ |
+ CGU_IDE = (1<<7) /* AHB interface enable */ |
(1<<6) /* interface enable */ |
((CLK_DIV(AS3525_PLLA_FREQ, AS3525_IDE_FREQ) - 1) << 2) |
- 1 /* clock source = PLLA */;
+ 1; /* clock source = PLLA */
CGU_PERI |= CGU_NAF_CLOCK_ENABLE;
@@ -741,6 +741,10 @@ void sd_enable(bool on)
CGU_PERI |= CGU_NAF_CLOCK_ENABLE;
#ifdef HAVE_MULTIVOLUME
CGU_PERI |= CGU_MCI_CLOCK_ENABLE;
+ /* Needed for buttonlight and MicroSD to work at the same time */
+ /* Turn ROD control on, as the OF does */
+ SD_MCI_POWER |= (1<<7);
+ CCU_IO |= (1<<2);
#endif
CGU_IDE |= (1<<7) /* AHB interface enable */ |
(1<<6) /* interface enable */;
@@ -751,6 +755,10 @@ void sd_enable(bool on)
CGU_PERI &= ~CGU_NAF_CLOCK_ENABLE;
#ifdef HAVE_MULTIVOLUME
CGU_PERI &= ~CGU_MCI_CLOCK_ENABLE;
+ /* Needed for buttonlight and MicroSD to work at the same time */
+ /* Turn ROD control off, as the OF does */
+ SD_MCI_POWER &= ~(1<<7);
+ CCU_IO &= ~(1<<2);
#endif
CGU_IDE &= ~((1<<7)|(1<<6));
sd_enabled = false;
diff --git a/firmware/target/arm/as3525/backlight-e200v2-fuze.c b/firmware/target/arm/as3525/backlight-e200v2-fuze.c
index c642064591..c26d3919c3 100644
--- a/firmware/target/arm/as3525/backlight-e200v2-fuze.c
+++ b/firmware/target/arm/as3525/backlight-e200v2-fuze.c
@@ -57,12 +57,12 @@ void _backlight_off(void)
void _buttonlight_on(void)
{
- GPIOD_PIN(7) = (1<<7);
GPIOD_DIR |= (1<<7);
+ GPIOD_PIN(7) = (1<<7);
}
void _buttonlight_off(void)
{
GPIOD_PIN(7) = 0;
- GPIOD_DIR |= (1<<7);
+ GPIOD_DIR &= ~(1<<7);
}
diff --git a/firmware/target/arm/as3525/sansa-fuze/button-fuze.c b/firmware/target/arm/as3525/sansa-fuze/button-fuze.c
index 2414900727..ff07965f90 100644
--- a/firmware/target/arm/as3525/sansa-fuze/button-fuze.c
+++ b/firmware/target/arm/as3525/sansa-fuze/button-fuze.c
@@ -108,6 +108,7 @@ static void get_wheel(void)
* the rockbox menus */
if (queue_empty(&button_queue) && ++counter >= 4)
{
+ buttonlight_on();
backlight_on();
/* 1<<24 is rather arbitary, seems to work well */
queue_post(&button_queue, btn, 1<<24);