Make Clip+ bootloader build

Now making the Fuzev2 bootloader build should be pretty easy

TODO:
    - write button driver (FlynDice found all buttons already)
    - find button light
    - decide if lcd-ssd1303.c must be modified for Clip+ using SSP or forked
    - check if backlight code works (I copied Clipv2 code)

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@24520 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Rafaël Carré 2010-02-05 12:40:25 +00:00
parent a9ab407f84
commit 12af2926e5
13 changed files with 421 additions and 12 deletions

View file

@ -58,7 +58,8 @@ void main(void)
button_init_device();
int btn = button_read_device();
#if !defined(SANSA_FUZE) && !defined(SANSA_CLIP) && !defined(SANSA_CLIPV2)
#if !defined(SANSA_FUZE) && !defined(SANSA_CLIP) && !defined(SANSA_CLIPV2) \
&& !defined(SANSA_CLIPPLUS)
if (button_hold())
{
verbose = true;

View file

@ -41,7 +41,7 @@ int show_logo( void )
lcd_clear_display();
lcd_setfont(FONT_SYSFIXED);
#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2) || defined(SANSA_CLIPPLUS)
/* The top 16 lines of the Sansa Clip screen are yellow, and the bottom 48
are blue, so we reverse the usual positioning */
lcd_putsxy(TEXT_XPOS, 0, BOOT_VERSION);

View file

@ -1204,6 +1204,19 @@ target/arm/tcc77x/c100/audio-c100.c
#endif /* SIMULATOR */
#endif /* SANSA_C100 */
#ifdef SANSA_CLIPPLUS
#ifndef SIMULATOR
target/arm/as3525/sansa-clip/lcd-ssd1303.c /* FIXME */
target/arm/as3525/sansa-clip/lcd-as-clip.S
target/arm/as3525/sansa-clipplus/button-clip.c
target/arm/as3525/sansa-clipplus/backlight-clip.c
#ifndef BOOTLOADER
target/arm/powermgmt-ascodec.c
target/arm/as3525/sansa-clip/powermgmt-clip.c
#endif /* !BOOTLOADER */
#endif /* !SIMULATOR */
#endif /* SANSA_CLIPV2 */
#ifdef SANSA_CLIPV2
#ifndef SIMULATOR
target/arm/as3525/sansa-clip/lcd-ssd1303.c

View file

@ -384,6 +384,8 @@ Lyre prototype 1 */
#include "config/sansaclip.h"
#elif defined(SANSA_CLIPV2)
#include "config/sansaclipv2.h"
#elif defined(SANSA_CLIPPLUS)
#include "config/sansaclipplus.h"
#elif defined(SANSA_E200V2)
#include "config/sansae200v2.h"
#elif defined(SANSA_M200V4)

View file

@ -0,0 +1,215 @@
/*
* This config file is for the Sandisk Sansa Clip+
*/
#define TARGET_TREE /* this target is using the target tree system */
/* For Rolo and boot loader */
#define MODEL_NUMBER 68
#define MODEL_NAME "Sandisk Sansa Clip+"
#define FIRMWARE_OFFSET_FILE_DATA 8
#define FIRMWARE_OFFSET_FILE_CRC 0
#if 0 /* disabled since there is no driver (yet) */
#define HW_SAMPR_CAPS (SAMPR_CAP_44)
/* define this if you have recording possibility */
#define HAVE_RECORDING
#define REC_SAMPR_CAPS (SAMPR_CAP_22)
#define REC_FREQ_DEFAULT REC_FREQ_22 /* Default is not 44.1kHz */
#define REC_SAMPR_DEFAULT SAMPR_22
#endif
/* Define bitmask of input sources - recordable bitmask can be defined
explicitly if different */
#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_FMRADIO)
/* define this if you have a bitmap LCD display */
#define HAVE_LCD_BITMAP
/* define this if you have a light associated with the buttons */
#define HAVE_BUTTON_LIGHT
/* define this if you have access to the quickscreen */
#define HAVE_QUICKSCREEN
/* define this if you have access to the pitchscreen */
#define HAVE_PITCHSCREEN
/* define this if you would like tagcache to build on this target */
#define HAVE_TAGCACHE
/* LCD dimensions */
#define LCD_WIDTH 128
#define LCD_HEIGHT 64
#define LCD_DEPTH 1
#define LCD_PIXELFORMAT VERTICAL_PACKING
#define HAVE_NEGATIVE_LCD /* bright on dark */
#define HAVE_LCD_SPLIT /* split display */
/* Display colours, for screenshots and sim (0xRRGGBB) */
#define LCD_DARKCOLOR 0x000000
#define LCD_BRIGHTCOLOR 0x000000
#define LCD_BL_DARKCOLOR 0x000000
#define LCD_BL_BRIGHTCOLOR 0x0de2e5
#define LCD_DARKCOLOR_2 0x000000
#define LCD_BRIGHTCOLOR_2 0x000000
#define LCD_BL_DARKCOLOR_2 0x000000
#define LCD_BL_BRIGHTCOLOR_2 0xffe60f
#define LCD_SPLIT_POS 16
#define LCD_SPLIT_LINES 2
/* define this if you have LCD enable function */
#define HAVE_LCD_ENABLE
#ifndef BOOTLOADER
/* Define this if your LCD can be put to sleep.
* HAVE_LCD_ENABLE should be defined as well. */
//#define HAVE_LCD_SLEEP
//#define HAVE_LCD_SLEEP_SETTING
#endif
/* define this if you can flip your LCD */
#define HAVE_LCD_FLIP
/* define this if you can invert the pixels */
#define HAVE_LCD_INVERT
/* Define this if your LCD can set contrast */
#define HAVE_LCD_CONTRAST
#define MIN_CONTRAST_SETTING 0
#define MAX_CONTRAST_SETTING 50
#define DEFAULT_CONTRAST_SETTING 30
#define IRAM_LCDFRAMEBUFFER IDATA_ATTR /* put the lcd frame buffer in IRAM */
#define CONFIG_KEYPAD SANSA_CLIP_PAD
/* define this if the target has volume keys which can be used in the lists */
#define HAVE_VOLUME_IN_LIST
/* Define this if you do software codec */
#define CONFIG_CODEC SWCODEC
/* There is no hardware tone control */
#define HAVE_SW_TONE_CONTROLS
/* We're working on the assumption that the AS3525 has something
similar to the AS3514 for audio codec etc */
#define HAVE_AS3514
/* define this if you have a real-time clock */
#ifndef BOOTLOADER
#define CONFIG_RTC RTC_AS3514
#endif
/* Define this if you have a software controlled poweroff */
#define HAVE_SW_POWEROFF
#define HAVE_FAT16SUPPORT
/* The number of bytes reserved for loadable codecs */
#define CODEC_SIZE 0x100000
/* The number of bytes reserved for loadable plugins */
#define PLUGIN_BUFFER_SIZE 0x80000
#define AB_REPEAT_ENABLE 1
/* FM Tuner */
#define CONFIG_TUNER SI4700 /* in fact SI4702 */
//#define HAVE_TUNER_PWR_CTRL
/* Define this for LCD backlight available */
#define HAVE_BACKLIGHT
/* define this if you have a flash memory storage */
#define HAVE_FLASH_STORAGE
/* define this if the flash memory uses the SecureDigital Memory Card protocol */
#define CONFIG_STORAGE STORAGE_SD
#define BATTERY_CAPACITY_DEFAULT 380 /* default battery capacity */
#define BATTERY_CAPACITY_MIN 380 /* min. capacity selectable */
#define BATTERY_CAPACITY_MAX 380 /* max. capacity selectable */
#define BATTERY_CAPACITY_INC 0 /* capacity increment */
#define BATTERY_TYPES_COUNT 1 /* only one type */
/* Charging implemented in a target-specific algorithm */
#define CONFIG_CHARGING CHARGING_TARGET
/* define this if the unit can be powered or charged via USB */
#define HAVE_USB_POWER
/** Non-simulator section **/
#ifndef SIMULATOR
/* Define this if you have a AMS AS3525v2 SoC */
#define CONFIG_CPU AS3525v2
/* Define this if you want to use the AS3525 i2c interface */
#define CONFIG_I2C I2C_AS3525 /* FIXME : looks similar to AS353x interface */
/* define this if the hardware can be powered off while charging */
/* Sansa can't be powered off while charging */
/* #define HAVE_POWEROFF_WHILE_CHARGING */
/* The start address index for ROM builds */
#define ROM_START 0x00000000
/* Define this to the CPU frequency */
#define CPU_FREQ 250000000
/* Type of LCD */
#define CONFIG_LCD LCD_SSD1303
#ifndef BOOTLOADER
#define USB_HANDLED_BY_OF
#if 0 /* disabled since there is no USB driver */
/* USB On-the-go */
#define CONFIG_USBOTG USBOTG_ARC
/* enable these for the experimental usb stack */
#define HAVE_USBSTACK
#define USB_VENDOR_ID 0x0781
#define USB_PRODUCT_ID 0x7433
#endif /* BOOTLOADER */
#endif
/* Virtual LED (icon) */
#define CONFIG_LED LED_VIRTUAL
/* Define this if you have adjustable CPU frequency */
#define HAVE_ADJUSTABLE_CPU_FREQ
#define BOOTFILE_EXT "sansa"
#define BOOTFILE "rockbox." BOOTFILE_EXT
#define BOOTDIR "/.rockbox"
#define ICODE_ATTR_TREMOR_NOT_MDCT
#define INCLUDE_TIMEOUT_API
#endif /* SIMULATOR */
/** Port-specific settings **/
/* Main LCD backlight brightness range and defaults */
#define MIN_BRIGHTNESS_SETTING 1
#define MAX_BRIGHTNESS_SETTING 12
#define DEFAULT_BRIGHTNESS_SETTING 6
/* Default recording levels */
#define DEFAULT_REC_MIC_GAIN 23
#define DEFAULT_REC_LEFT_GAIN 23
#define DEFAULT_REC_RIGHT_GAIN 23

View file

@ -6,7 +6,7 @@ OUTPUT_FORMAT(elf32-littlearm)
OUTPUT_ARCH(arm)
STARTUP(target/arm/crt0.o)
#ifdef SANSA_CLIPV2
#if CONFIG_CPU == AS3525v2
#define RAMORIG 0x0 /* DRAM */
#define RAMSIZE (MEM*0x100000)
#else

View file

@ -56,7 +56,7 @@
#define AS3525_CLK_FCLK 3 /* Available as PCLK input only */
/** ************ Change these to reconfigure clocking scheme *******************/
#ifdef SANSA_CLIPV2
#if CONFIG_CPU == AS3525v2
/* PLL* registers differ from AS3525 */
#define AS3525_PLLA_FREQ 240000000
@ -74,7 +74,7 @@
#define AS3525_PLLB_FREQ 384000000 /* allows 44.1kHz with 0.04% error*/
#define AS3525_PLLB_SETTING 0x2630
#endif /* SANSA_CLIPV2 */
#endif /* CONFIG_CPU == AS3525v2 */
//#define AS3525_PLLA_FREQ 384000000 /*192,128,96,76.8,64,54.9,48,42.7,38.4*/
/* FCLK_PREDIV-> *7/8 = 336MHz 168, 112, 84, 67.2, 56, 48, 42, 37.3*/
@ -142,12 +142,12 @@
#define AS3525_IDE_SEL AS3525_CLK_PLLA /* Input Source */
#define AS3525_IDE_DIV (CLK_DIV(AS3525_PLLA_FREQ, AS3525_IDE_FREQ) - 1)/*div=1/(n+1)*/
#ifdef SANSA_CLIPV2
#if CONFIG_CPU == AS3525v2
#define AS3525_MS_FREQ 120000000
#define AS3525_IDE_FREQ 80000000
#else
#define AS3525_IDE_FREQ 50000000 /* The OF uses 66MHz maximal freq */
#endif /* SANSA_CLIPV2 */
#endif /* CONFIG_CPU == AS3525v2 */
//#define AS3525_USB_SEL AS3525_CLK_PLLA /* Input Source */

View file

@ -22,7 +22,9 @@
#ifndef POWERMGMT_TARGET_H
#define POWERMGMT_TARGET_H
#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
#if defined(SANSA_CLIP) \
|| defined(SANSA_CLIPV2) /* FIXME */ \
|| defined(SANSA_CLIPPLUS) /* FIXME */
/* Check if topped-off and monitor voltage while plugged. */
#define BATT_FULL_VOLTAGE 4160

View file

@ -0,0 +1,53 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright © 2009 Rafaël Carré
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "backlight-target.h"
#include "lcd.h"
#include "as3525v2.h"
#include "ascodec-target.h"
/* FIXME : this is clipv2 code, not sure if it works the same on clip+ */
void _backlight_on(void)
{
ascodec_write(0x25, ascodec_read(0x25) | 2); /* lcd power */
ascodec_write(0x1c, 8|1);
ascodec_write(0x1b, 0x90);
lcd_enable(true);
}
void _backlight_off(void)
{
ascodec_write(0x25, ascodec_read(0x25) & ~2); /* lcd power */
lcd_enable(false);
}
void _buttonlight_on(void)
{
GPIOA_DIR |= (1<<5);
GPIOA_PIN(5) = (1<<5); /* set pin a5 high */
}
void _buttonlight_off(void)
{
GPIOA_DIR |= (1<<5);
GPIOA_PIN(5) = 0; /* set pin a5 low */
}

View file

@ -0,0 +1,32 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright © 2009 Rafaël Carré
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef BACKLIGHT_TARGET_H
#define BACKLIGHT_TARGET_H
#define _backlight_init() true
void _backlight_on(void);
void _backlight_off(void);
void _buttonlight_on(void);
void _buttonlight_off(void);
#endif

View file

@ -0,0 +1,33 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 François Dinel
* Copyright © 2008-2009 Rafaël Carré
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "button-target.h"
#include "as3525v2.h"
#include "kernel.h"
void button_init_device(void)
{
}
int button_read_device(void)
{
return 0;
}

View file

@ -0,0 +1,57 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 François Dinel
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#ifndef _BUTTON_TARGET_H_
#define _BUTTON_TARGET_H_
#include <stdbool.h>
#include "config.h"
void button_init_device(void);
int button_read_device(void);
bool button_hold(void);
/* Main unit's buttons */
#define BUTTON_HOME 0x00000001
#define BUTTON_VOL_UP 0x00000002
#define BUTTON_VOL_DOWN 0x00000004
#define BUTTON_UP 0x00000008
#define BUTTON_DOWN 0x00000010
#define BUTTON_LEFT 0x00000020
#define BUTTON_RIGHT 0x00000040
#define BUTTON_SELECT 0x00000080
#define BUTTON_POWER 0x00000100
#define BUTTON_MAIN (BUTTON_HOME|BUTTON_VOL_UP|BUTTON_VOL_DOWN\
|BUTTON_UP|BUTTON_DOWN|BUTTON_LEFT|BUTTON_RIGHT\
|BUTTON_SELECT|BUTTON_POWER)
#define BUTTON_REMOTE 0
/* Software power-off */
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10
#endif /* _BUTTON_TARGET_H_ */

View file

@ -205,7 +205,8 @@ static void sdram_init(void)
/* 16 bits external bus, low power SDRAM, 16 Mbits = 2 Mbytes */
#define MEMORY_MODEL 0x21
#elif defined(SANSA_E200V2) || defined(SANSA_FUZE) || defined(SANSA_CLIPV2)
#elif defined(SANSA_E200V2) || defined(SANSA_FUZE) || defined(SANSA_CLIPV2) \
|| defined(SANSA_CLIPPLUS)
/* 16 bits external bus, high performance SDRAM, 64 Mbits = 8 Mbytes */
#define MEMORY_MODEL 0x5
@ -256,7 +257,7 @@ void memory_init(void)
void system_init(void)
{
#ifdef SANSA_CLIPV2
#if CONFIG_CPU == AS3525v2
/* Init procedure isn't fully understood yet
* CCU_* registers differ from AS3525
*/
@ -270,7 +271,7 @@ void system_init(void)
CGU_PERI &= ~0x7f; /* pclk 24 MHz */
CGU_PERI |= ((CLK_DIV(AS3525_PLLA_FREQ, AS3525_PCLK_FREQ) - 1) << 2)
| 1; /* clk_in = PLLA */
#else /* SANSA_CLIPV2 */
#else
unsigned int reset_loops = 640;
CCU_SRC = 0x1fffff0
@ -315,7 +316,7 @@ void system_init(void)
sdram_init();
#endif /* BOOTLOADER */
#endif /* SANSA_CLIPV2 */
#endif /* CONFIG_CPU == AS3525v2 */
#if 0 /* the GPIO clock is already enabled by the dualboot function */
CGU_PERI |= CGU_GPIO_CLOCK_ENABLE;