diff --git a/firmware/export/config/sansaclipzip.h b/firmware/export/config/sansaclipzip.h index fcffbce6ab..1f5a7cd1c8 100644 --- a/firmware/export/config/sansaclipzip.h +++ b/firmware/export/config/sansaclipzip.h @@ -45,7 +45,7 @@ #define LCD_WIDTH 96 #define LCD_HEIGHT 96 #define LCD_DEPTH 16 /* 65536 colours */ -#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 swapped */ +#define LCD_PIXELFORMAT RGB565 /* define this if you have LCD enable function */ #define HAVE_LCD_ENABLE @@ -114,6 +114,8 @@ /* Define this for LCD backlight available */ #define HAVE_BACKLIGHT +#define HAVE_BACKLIGHT_BRIGHTNESS + /* define this if you have a flash memory storage */ #define HAVE_FLASH_STORAGE @@ -189,9 +191,9 @@ /** Port-specific settings **/ /* Main LCD backlight brightness range and defaults */ -#define MIN_BRIGHTNESS_SETTING 1 /* TODO */ -#define MAX_BRIGHTNESS_SETTING 12 /* TODO */ -#define DEFAULT_BRIGHTNESS_SETTING 6 /* TODO */ +#define MIN_BRIGHTNESS_SETTING 0 +#define MAX_BRIGHTNESS_SETTING 9 +#define DEFAULT_BRIGHTNESS_SETTING 6 /* Default recording levels */ #define DEFAULT_REC_MIC_GAIN 23 diff --git a/firmware/target/arm/as3525/sansa-clipzip/backlight-clipzip.c b/firmware/target/arm/as3525/sansa-clipzip/backlight-clipzip.c index 758aa875cc..589f80436e 100644 --- a/firmware/target/arm/as3525/sansa-clipzip/backlight-clipzip.c +++ b/firmware/target/arm/as3525/sansa-clipzip/backlight-clipzip.c @@ -25,11 +25,14 @@ #include "lcd.h" #include "as3525v2.h" #include "ascodec-target.h" +#include "lcd-target.h" bool _backlight_init() { /* GPIO B1 controls backlight */ GPIOB_DIR |= (1 << 1); + ascodec_write_pmu(AS3543_BACKLIGHT, 1, 0x91); + GPIOB_PIN(1) = (1 << 1); return true; } @@ -37,13 +40,6 @@ bool _backlight_init() void _backlight_on(void) { GPIOB_PIN(1) = (1 << 1); - - ascodec_write_pmu(AS3543_BACKLIGHT, 1, 0x91); - sleep(1); - ascodec_write_pmu(AS3543_BACKLIGHT, 1, 0x91); - sleep(1); - ascodec_write_pmu(AS3543_BACKLIGHT, 1, 0x91); - #ifdef HAVE_LCD_ENABLE lcd_enable(true); #endif @@ -54,9 +50,11 @@ void _backlight_off(void) #ifdef HAVE_LCD_ENABLE lcd_enable(false); #endif - GPIOB_PIN(1) = 0; - - ascodec_write_pmu(AS3543_BACKLIGHT, 1, 0x91); +} + +void _backlight_set_brightness(int brightness) +{ + oled_brightness(brightness); } diff --git a/firmware/target/arm/as3525/sansa-clipzip/button-clipzip.c b/firmware/target/arm/as3525/sansa-clipzip/button-clipzip.c index 104c227378..e960b49b77 100644 --- a/firmware/target/arm/as3525/sansa-clipzip/button-clipzip.c +++ b/firmware/target/arm/as3525/sansa-clipzip/button-clipzip.c @@ -71,13 +71,13 @@ int button_read_device(void) udelay(500); if (GPIOC_PIN(3)) { - buttons |= BUTTON_LEFT; + buttons |= BUTTON_RIGHT; } if (GPIOC_PIN(4)) { buttons |= BUTTON_SELECT; } if (GPIOC_PIN(5)) { - buttons |= BUTTON_RIGHT; + buttons |= BUTTON_UP; } /* key matrix buttons, second row */ @@ -86,14 +86,14 @@ int button_read_device(void) udelay(500); if (GPIOC_PIN(3)) { - buttons |= BUTTON_UP; - } - if (GPIOC_PIN(4)) { buttons |= BUTTON_HOME; } - if (GPIOC_PIN(5)) { + if (GPIOC_PIN(4)) { buttons |= BUTTON_DOWN; } + if (GPIOC_PIN(5)) { + buttons |= BUTTON_LEFT; + } /* deselect scan rows */ GPIOC_PIN(2) = 0; diff --git a/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c b/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c index 899eb538ea..0ae049b6ff 100644 --- a/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c +++ b/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c @@ -51,12 +51,16 @@ static int lcd_hw_init(void) SSP_IMSC &= ~0xF; /* disable interrupts */ SSP_DMACR &= ~0x3; /* disable DMA */ + /* GPIO A3 is ??? but needs to be set */ + GPIOA_DIR |= (1 << 3); + GPIOA_PIN(3) = (1 << 3); + /* configure GPIO B2 (lcd D/C#) as output */ GPIOB_DIR |= (1<<2); /* configure GPIO B3 (lcd type detect) as input */ GPIOB_DIR &= ~(1<<3); - + /* configure GPIO A5 (lcd reset#) as output and perform lcd reset */ GPIOA_DIR |= (1 << 5); GPIOA_PIN(5) = 0; @@ -154,7 +158,7 @@ static void lcd_write_nibbles(uint8_t val) /* initialises lcd type 1 */ static void lcd_init_type1(void) { - static const uint8_t curve[256] = { + static const uint8_t curve[128] = { /* 5-bit curve */ 0, 5, 10, 15, 20, 25, 30, 35, 39, 43, 47, 51, 55, 59, 63, 67, 71, 75, 79, 83, 87, 91, 95, 99, 103, 105, 109, 113, 117, 121, 123, 127, @@ -242,7 +246,7 @@ static void lcd_init_type1(void) lcd_write_dat(0x10); lcd_write_cmd(0x3A); - for (i = 0; i < 256; i++) { + for (i = 0; i < 128; i++) { lcd_write_nibbles(curve[i]); } diff --git a/firmware/target/arm/as3525/sd-as3525v2.c b/firmware/target/arm/as3525/sd-as3525v2.c index 7410b19550..74925a3aab 100644 --- a/firmware/target/arm/as3525/sd-as3525v2.c +++ b/firmware/target/arm/as3525/sd-as3525v2.c @@ -376,11 +376,8 @@ static inline bool card_detect_target(void) #if defined(HAVE_MULTIDRIVE) #if defined(SANSA_FUZEV2) return GPIOA_PIN(2); -#elif defined(SANSA_CLIPPLUS) +#elif defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) return !(GPIOA_PIN(2)); -#elif defined(SANSA_CLIPZIP) - /* TODO for ClipZip: determine polarity of uSD detect */ - return false; #else #error "microSD pin not defined for your target" #endif @@ -398,14 +395,14 @@ static bool send_cmd(const int drive, const int cmd, const int arg, const int fl !send_cmd(drive, SD_APP_CMD, card_info[drive].rca, MCI_RESP, response)) return false; -#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) if (amsv2_variant == 1) GPIOB_PIN(5) = (drive == INTERNAL_AS3525) ? 1 << 5 : 0; #endif MCI_ARGUMENT = arg; -#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) if (amsv2_variant == 1) card_no = 1 << 16; else @@ -565,7 +562,7 @@ static int sd_init_card(const int drive) return -17; /* Now that card is widebus make controller aware */ -#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) if (amsv2_variant == 1) MCI_CTYPE |= 1<<1; else @@ -575,7 +572,7 @@ static int sd_init_card(const int drive) #endif /* ! BOOTLOADER */ /* Set low power mode */ -#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) if (amsv2_variant == 1) MCI_CLKENA |= 1<<(1 + 16); else @@ -673,7 +670,7 @@ static void init_controller(void) int card_mask = (1 << hcon_numcards) - 1; int pwr_mask; -#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) if (amsv2_variant == 1) pwr_mask = 1 << 1; else @@ -738,7 +735,7 @@ int sd_init(void) semaphore_init(&transfer_completion_signal, 1, 0); semaphore_init(&command_completion_signal, 1, 0); -#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) if (amsv2_variant == 1) GPIOB_DIR |= 1 << 5; #endif diff --git a/firmware/target/arm/as3525/system-as3525.c b/firmware/target/arm/as3525/system-as3525.c index a79b934aaa..2a40724208 100644 --- a/firmware/target/arm/as3525/system-as3525.c +++ b/firmware/target/arm/as3525/system-as3525.c @@ -184,7 +184,7 @@ static void check_model_variant(void) c200v2_variant = !GPIOA_PIN(7); GPIOA_DIR = saved_dir; } -#elif defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#elif defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) int amsv2_variant; static void check_model_variant(void) diff --git a/firmware/target/arm/as3525/system-target.h b/firmware/target/arm/as3525/system-target.h index 7c9dcccc0c..cdcc2e6687 100644 --- a/firmware/target/arm/as3525/system-target.h +++ b/firmware/target/arm/as3525/system-target.h @@ -46,7 +46,7 @@ ? (((uintptr_t)(a)) - IRAM_ORIG) \ : ((uintptr_t)(a)))) -#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) +#if defined(SANSA_FUZEV2) || defined(SANSA_CLIPPLUS) || defined(SANSA_CLIPZIP) extern int amsv2_variant; #endif diff --git a/rbutil/mkamsboot/dualboot.c b/rbutil/mkamsboot/dualboot.c index b6ca1b3db5..b1bf69d12b 100644 --- a/rbutil/mkamsboot/dualboot.c +++ b/rbutil/mkamsboot/dualboot.c @@ -154,15 +154,16 @@ unsigned char dualboot_fuzev2[332] = { 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0d, 0xc8, 0x10, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x07, 0xc8 }; -unsigned char dualboot_clipzip[152] = { +unsigned char dualboot_clipzip[168] = { 0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x1f, 0xe5, 0x24, 0x10, 0x1f, 0xe5, 0x01, 0x20, 0x40, 0xe0, 0x18, 0x30, 0x1f, 0xe5, 0x01, 0x40, 0x50, 0xe4, 0x01, 0x40, 0x43, 0xe4, 0x00, 0x00, 0x52, 0xe1, 0xfb, 0xff, 0xff, 0x1a, - 0x2c, 0x30, 0x0f, 0xe5, 0x48, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3, - 0x00, 0x10, 0x80, 0xe5, 0x02, 0x00, 0x00, 0xea, 0x4c, 0x00, 0x1f, 0xe5, 0x4c, 0x10, 0x1f, 0xe5, - 0x01, 0x00, 0x00, 0xea, 0x60, 0x00, 0x1f, 0xe5, 0x60, 0x10, 0x1f, 0xe5, 0x58, 0x30, 0x1f, 0xe5, - 0x02, 0x50, 0x83, 0xe2, 0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4, 0x01, 0x20, 0x43, 0xe4, - 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, - 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8 + 0x2c, 0x30, 0x0f, 0xe5, 0x54, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3, + 0x00, 0x10, 0x80, 0xe5, 0x48, 0x00, 0x9f, 0xe5, 0x00, 0x11, 0x90, 0xe5, 0x00, 0x00, 0x51, 0xe3, + 0x02, 0x00, 0x00, 0x1a, 0x58, 0x00, 0x1f, 0xe5, 0x58, 0x10, 0x1f, 0xe5, 0x01, 0x00, 0x00, 0xea, + 0x6c, 0x00, 0x1f, 0xe5, 0x6c, 0x10, 0x1f, 0xe5, 0x64, 0x30, 0x1f, 0xe5, 0x02, 0x50, 0x83, 0xe2, + 0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4, 0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, + 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, + 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0b, 0xc8 }; diff --git a/rbutil/mkamsboot/dualboot.h b/rbutil/mkamsboot/dualboot.h index 787aa095f0..a635753c69 100644 --- a/rbutil/mkamsboot/dualboot.h +++ b/rbutil/mkamsboot/dualboot.h @@ -9,4 +9,4 @@ extern unsigned char dualboot_fuze[176]; extern unsigned char dualboot_clipv2[248]; extern unsigned char dualboot_clipplus[340]; extern unsigned char dualboot_fuzev2[332]; -extern unsigned char dualboot_clipzip[152]; +extern unsigned char dualboot_clipzip[168]; diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S index 5d8fe1268c..4df69a45cc 100644 --- a/rbutil/mkamsboot/dualboot/dualboot.S +++ b/rbutil/mkamsboot/dualboot/dualboot.S @@ -175,8 +175,12 @@ uclcopy: bne boot_of @ branch directly to OF if either pin high #elif defined(SANSA_CLIPZIP) - @ just boot the OF - b boot_of + @ read pins + ldr r0, =GPIOA + ldr r1, [r0, #4*(1<<6)] @ read GPIO A6 "vol-" + + cmp r1, #0 @ test input from pins + bne boot_of @ branch directly to OF if either pin high #elif defined(SANSA_C200V2) .set BUTTON_LEFT, (1<< 2) diff --git a/rbutil/mkamsboot/mkamsboot.c b/rbutil/mkamsboot/mkamsboot.c index c50fe9f5b4..073b32c217 100644 --- a/rbutil/mkamsboot/mkamsboot.c +++ b/rbutil/mkamsboot/mkamsboot.c @@ -171,11 +171,11 @@ static struct md5sums sansasums[] = { { MODEL_FUZEV2, "2.02.26", "d4f6f85c3e4a8ea8f2e5acc421641801" }, { MODEL_FUZEV2, "2.03.31", "74fb197ccd51707388f3b233402186a6" }, { MODEL_FUZEV2, "2.03.33", "1599cc73d02ea7fe53fe2d4379c24b66" }, -#if 0 /* disabled for now because it's not been proven they can be patched */ +#if 1 /* disabled for now because it's not been proven they can be patched */ { MODEL_CLIPZIP, "1.01.12", "45adea0873326b5af34f096e5c402f78" }, { MODEL_CLIPZIP, "1.01.15", "f62af954334cd9ba1a87a7fa58ec6074" }, - { MODEL_CLIPZIP, "1.01.17", "27bcb343d6950f35dc261629e22ba60c" }, #endif + { MODEL_CLIPZIP, "1.01.17", "27bcb343d6950f35dc261629e22ba60c" }, }; #define NUM_MD5S (sizeof(sansasums)/sizeof(sansasums[0]))