diff options
author | Tomasz Moń <desowin@gmail.com> | 2011-11-16 14:08:01 +0000 |
---|---|---|
committer | Tomasz Moń <desowin@gmail.com> | 2011-11-16 14:08:01 +0000 |
commit | e8a8a1be43afe63079ae48ce1a9eb3052df3b1a4 (patch) | |
tree | 084e1cdf27a339ce58e24cff8fec8c31432b52db /bootloader/sansaconnect.c | |
parent | 992d4eb775cac48e107e18d72783ebfb39c4234f (diff) |
Sandisk Sansa Connect port (FS #12363)
Included are drivers for buttons, backlight, lcd, audio and storage.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31000 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'bootloader/sansaconnect.c')
-rw-r--r-- | bootloader/sansaconnect.c | 135 |
1 files changed, 135 insertions, 0 deletions
diff --git a/bootloader/sansaconnect.c b/bootloader/sansaconnect.c new file mode 100644 index 0000000000..9ef831f0b3 --- /dev/null +++ b/bootloader/sansaconnect.c @@ -0,0 +1,135 @@ +/*************************************************************************** +* __________ __ ___. +* Open \______ \ ____ ____ | | _\_ |__ _______ ___ +* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / +* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < +* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ +* \/ \/ \/ \/ \/ +* $Id: $ +* +* Copyright (C) 2011 by Tomasz Moń +* +* All files in this archive are subject to the GNU General Public License. +* See the file COPYING in the source tree root for full license agreement. +* +* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +* KIND, either express or implied. +* +****************************************************************************/ + +#include "system.h" +#include "lcd.h" +#include "kernel.h" +#include "thread.h" +#include "storage.h" +#include "ata-target.h" +#include "disk.h" +#include "font.h" +#include "backlight.h" +#include "button.h" +#include "common.h" +#include "version.h" +#include "uart-target.h" +#include "power.h" + +extern void show_logo(void); + +void main(void) +{ + unsigned char* loadbuffer; + int buffer_size; + int(*kernel_entry)(void); + int ret; + int btn; + + /* Make sure interrupts are disabled */ + set_irq_level(IRQ_DISABLED); + set_fiq_status(FIQ_DISABLED); + system_init(); + kernel_init(); + + /* Now enable interrupts */ + set_irq_level(IRQ_ENABLED); + set_fiq_status(FIQ_ENABLED); + backlight_init(); + lcd_init(); + font_init(); + button_init(); + +#ifdef HAVE_LCD_ENABLE + lcd_enable(true); +#endif + lcd_setfont(FONT_SYSFIXED); + reset_screen(); + show_logo(); + + btn = button_read_device(); + + printf("Rockbox boot loader"); + printf("Version " RBVERSION); + + ret = storage_init(); + if(ret) + printf("SD error: %d", ret); + + disk_init(IF_MD(0)); + + ret = disk_mount_all(); + if (ret <= 0) + error(EDISK, ret, true); + + if (btn & BUTTON_PREV) + { + printf("Loading OF firmware..."); + printf("Loading vmlinux.bin..."); + loadbuffer = (unsigned char*)0x01008000; + buffer_size = 0x200000; + + ret = load_raw_firmware(loadbuffer, "/vmlinux.bin", buffer_size); + + if (ret < 0) + { + printf("Unable to load vmlinux.bin"); + } + else + { + printf("Loading initrd.bin..."); + loadbuffer = (unsigned char*)0x04400020; + buffer_size = 0x200000; + ret = load_raw_firmware(loadbuffer, "/initrd.bin", buffer_size); + } + + if (ret > 0) + { + system_prepare_fw_start(); + + kernel_entry = (void*)0x01008000; + ret = kernel_entry(); + printf("FAILED to boot OF"); + } + } + + printf("Loading Rockbox firmware..."); + + loadbuffer = (unsigned char*)CONFIG_SDRAM_START; + buffer_size = 0x1000000; + + ret = load_firmware(loadbuffer, BOOTFILE, buffer_size); + + if(ret < 0) + { + error(EBOOTFILE, ret, true); + } + else if(ret == EOK) + { + system_prepare_fw_start(); + + kernel_entry = (void*) loadbuffer; + ret = kernel_entry(); + printf("FAILED!"); + } + + storage_sleepnow(); + + while(1); +} |