Initial commit for the Olympus m:robe 100 port (PP5020). The LCD driver works. The ADC driver was copied from the H10 port (they can probably be combined later), but the battery readings aren't right and it shuts down. The touch pad buttons do not work. Install the bootloader and rockbox the H10 way. Still lots of work to do.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@16030 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Mark Arigo 2008-01-09 07:24:43 +00:00
parent f59a327f67
commit e66ddd754f
22 changed files with 798 additions and 17 deletions

View File

@ -162,4 +162,6 @@ keymaps/keymap-c200.c
keymaps/keymap-av300.c
#elif CONFIG_KEYPAD == MROBE500_PAD
keymaps/keymap-mr500.c
#elif CONFIG_KEYPAD == MROBE100_PAD
keymaps/keymap-mr100.c
#endif

View File

@ -2,7 +2,11 @@
/* Rockbox logo */
#if (LCD_DEPTH == 1)
#if (LCD_WIDTH == 160)
rockboxlogo.160x53x1.bmp
#else
rockboxlogo.112x30x1.bmp
#endif
#elif (LCD_WIDTH == 128) && (LCD_DEPTH == 16)
rockboxlogo.128x40x16.bmp
#elif (LCD_WIDTH == 132) && (LCD_DEPTH == 16)

View File

@ -983,7 +983,8 @@ static bool dbg_spdif(void)
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
# define DEBUG_CANCEL BUTTON_REC
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD) || \
(CONFIG_KEYPAD == MROBE100_PAD)
# define DEBUG_CANCEL BUTTON_REW
#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \

View File

@ -3888,17 +3888,17 @@
<source>
*: none
e200: "Wheel Light Timeout"
c200,gigabeatf: "Button Light Timeout"
c200,gigabeatf,mrobe100: "Button Light Timeout"
</source>
<dest>
*: none
e200: "Wheel Light Timeout"
c200,gigabeatf: "Button Light Timeout"
c200,gigabeatf,mrobe100: "Button Light Timeout"
</dest>
<voice>
*: none
e200: "Wheel Light Timeout"
c200,gigabeatf: "Button Light Timeout"
c200,gigabeatf,mrobe100: "Button Light Timeout"
</voice>
</phrase>
<phrase>

View File

@ -8,7 +8,8 @@ gigabeat.c
gigabeat-s.c
../firmware/target/arm/imx31/gigabeat-s/mmu-imx31.c
#elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB) || \
defined(SANSA_E200) || defined(SANSA_C200)
defined(SANSA_E200) || defined(SANSA_C200) || \
defined(MROBE_100)
#ifdef E200R_INSTALLER
main-e200r-installer.c
#else

View File

@ -54,6 +54,9 @@
#elif CONFIG_KEYPAD == SANSA_C200_PAD
#define BOOTLOADER_BOOT_OF BUTTON_LEFT
#elif CONFIG_KEYPAD == MROBE100_PAD
#define BOOTLOADER_BOOT_OF BUTTON_LEFT
#endif
/* Maximum allowed firmware image size. 10MB is more than enough */
@ -444,8 +447,11 @@ void* main(void)
i2c_init();
_backlight_on();
#endif
#if LCD_DEPTH > 1
lcd_set_foreground(LCD_WHITE);
lcd_set_background(LCD_BLACK);
#endif
lcd_clear_display();
if (button_hold())

View File

@ -652,6 +652,22 @@ target/arm/tms320dm320/dsp-dm320.c
#endif /* SIMULATOR */
#endif /* MROBE_500 */
#ifdef MROBE_100
#ifndef SIMULATOR
target/arm/ata-as-arm.S
target/arm/ata-pp5020.c
target/arm/wmcodec-pp.c
target/arm/i2s-pp.c
target/arm/olympus/mrobe-100/adc-mr100.c
target/arm/olympus/mrobe-100/backlight-mr100.c
target/arm/olympus/mrobe-100/button-mr100.c
target/arm/olympus/mrobe-100/lcd-mr100.c
target/arm/olympus/mrobe-100/power-mr100.c
target/arm/olympus/mrobe-100/powermgmt-mr100.c
target/arm/usb-fw-pp502x.c
#endif /* SIMULATOR */
#endif /* MROBE_100 */
#ifdef ELIO_TPJ1022
#ifndef SIMULATOR
target/arm/ata-as-arm.S

View File

@ -156,6 +156,7 @@ SECTIONS
*(.icode)
*(.irodata)
*(.idata)
. = ALIGN(0x4);
_iramend = .;
} > IRAM AT> DRAM

View File

@ -137,7 +137,6 @@ static int get_free_volume(void)
int disk_mount(int drive)
{
int i;
int mounted = 0; /* reset partition-on-drive flag */
int volume = get_free_volume();
struct partinfo* pinfo = disk_init(IF_MV(drive));
@ -146,14 +145,14 @@ int disk_mount(int drive)
{
return 0;
}
#ifndef ELIO_TPJ1022
#if !defined(ELIO_TPJ1022) && !defined(MROBE_100)
/* The Elio's hard drive has no partition table and probing for partitions causes
Rockbox to crash - so we temporarily disable the probing until we fix the
real problem. */
#ifdef TOSHIBA_GIGABEAT_S
i = 1; /* For the Gigabeat S, we mount the second partition */
int i = 1; /* For the Gigabeat S, we mount the second partition */
#else
i = 0;
int i = 0;
#endif
for (; volume != -1 && i<4; i++)
{

View File

@ -71,10 +71,11 @@
#define SANSA_C200_PAD 14
#define ELIO_TPJ1022_PAD 15
#define ARCHOS_AV300_PAD 16
#define MROBE500_PAD 17
#define GIGABEAT_S_PAD 18
#define LOGIK_DAX_PAD 19
#define IAUDIO67_PAD 20
#define MROBE100_PAD 17
#define MROBE500_PAD 18
#define GIGABEAT_S_PAD 19
#define LOGIK_DAX_PAD 20
#define IAUDIO67_PAD 21
/* CONFIG_REMOTE_KEYPAD */
#define H100_REMOTE 1
@ -107,8 +108,9 @@
#define LCD_DSC25 16 /* as used by Archos AV300 */
#define LCD_C200 17 /* as used by Sandisk Sansa c200 */
#define LCD_MROBE500 18 /* as used by Olympus M:Robe 500i */
#define LCD_LOGIKDAX 19 /* as used by Logik DAX - SSD1815 */
#define LCD_IAUDIO67 20 /* as used by iAudio 6/7 - unknown */
#define LCD_MROBE100 19 /* as used by Olympus M:Robe 100 */
#define LCD_LOGIKDAX 20 /* as used by Logik DAX - SSD1815 */
#define LCD_IAUDIO67 21 /* as used by iAudio 6/7 - unknown */
/* LCD_PIXELFORMAT */
#define HORIZONTAL_PACKING 1
@ -221,6 +223,8 @@
#include "config-c200.h"
#elif defined(ELIO_TPJ1022)
#include "config-tpj1022.h"
#elif defined(MROBE_100)
#include "config-mrobe100.h"
#elif defined(MROBE_500)
#include "config-mrobe500.h"
#elif defined(LOGIK_DAX)

View File

@ -50,7 +50,8 @@
#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
#define USBPOWER_BUTTON BUTTON_MENU
#define USBPOWER_BTN_IGNORE BUTTON_BACK
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD) || \
(CONFIG_KEYPAD == MROBE100_PAD)
#define USBPOWER_BUTTON BUTTON_RIGHT
#define USBPOWER_BTN_IGNORE BUTTON_POWER
#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \

View File

@ -0,0 +1,141 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Barry Wardell
*
* 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 "config.h"
#include "cpu.h"
#include "system.h"
#include "kernel.h"
#include "thread.h"
#include "adc.h"
static unsigned short adcdata[NUM_ADC_CHANNELS];
/* Scan ADC so that adcdata[channel] gets updated. */
unsigned short adc_scan(int channel)
{
unsigned int adc_data_1;
unsigned int adc_data_2;
/* Start conversion */
ADC_ADDR |= 0x80000000;
/* Wait for conversion to complete */
while((ADC_STATUS & (0x40<<8*channel))==0);
/* Stop conversion */
ADC_ADDR &=~ 0x80000000;
/* ADC_DATA_1 and ADC_DATA_2 are both four bytes, one byte per channel.
For each channel, ADC_DATA_1 stores the 8-bit msb, ADC_DATA_2 stores the
2-bit lsb (in bits 0 and 1). Each channel is 10 bits total. */
adc_data_1 = ((ADC_DATA_1 >> (8*channel)) & 0xff);
adc_data_2 = ((ADC_DATA_2 >> (8*channel+6)) & 0x3);
adcdata[channel] = (adc_data_1<<2 | adc_data_2);
/* ADC values read low if PLL is enabled */
if(PLL_CONTROL & 0x80000000){
adcdata[channel] += 0x14;
if(adcdata[channel] > 0x400)
adcdata[channel] = 0x400;
}
return adcdata[channel];
}
/* Read 10-bit channel data */
unsigned short adc_read(int channel)
{
return adcdata[channel];
}
static int adc_counter;
static void adc_tick(void)
{
if(++adc_counter == HZ)
{
adc_counter = 0;
adc_scan(ADC_BATTERY);
adc_scan(ADC_UNKNOWN_1);
adc_scan(ADC_REMOTE);
adc_scan(ADC_SCROLLPAD);
}
}
/* Figured out from how the OF does things */
void adc_init(void)
{
ADC_INIT |= 1;
ADC_INIT |= 0x40000000;
udelay(100);
/* Reset ADC */
DEV_RS2 |= 0x20;
udelay(100);
DEV_RS2 &=~ 0x20;
udelay(100);
/* Enable ADC */
DEV_EN2 |= 0x20;
udelay(100);
ADC_CLOCK_SRC |= 0x3;
udelay(100);
ADC_ADDR |= 0x40;
ADC_ADDR |= 0x20000000;
udelay(100);
ADC_INIT;
ADC_INIT = 0;
udelay(100);
ADC_STATUS = 0;
/* Enable channel 0 (battery) */
DEV_INIT1 &=~0x3;
ADC_ADDR |= 0x1000000;
ADC_STATUS |= 0x20;
/* Enable channel 1 (unknown, temperature?) */
DEV_INIT1 &=~30;
ADC_ADDR |= 0x2000000;
ADC_STATUS |= 0x2000;
/* Enable channel 2 (remote) */
DEV_INIT1 &=~0x300;
DEV_INIT1 |= 0x100;
ADC_ADDR |= 0x4000000;
ADC_STATUS |= 0x200000;
/* Enable channel 3 (scroll pad) */
DEV_INIT1 &=~0x3000;
DEV_INIT1 |= 0x1000;
ADC_ADDR |= 0x8000000;
ADC_STATUS |= 0x20000000;
/* Force a scan of all channels to get initial values */
adc_scan(ADC_BATTERY);
adc_scan(ADC_UNKNOWN_1);
adc_scan(ADC_REMOTE);
adc_scan(ADC_SCROLLPAD);
tick_add_task(adc_tick);
}

View File

@ -0,0 +1,39 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Barry Wardell
*
* 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.
*
****************************************************************************/
#ifndef _ADC_TARGET_H_
#define _ADC_TARGET_H_
#define ADC_ADDR (*(volatile unsigned long*)(0x7000ad00))
#define ADC_STATUS (*(volatile unsigned long*)(0x7000ad04))
#define ADC_DATA_1 (*(volatile unsigned long*)(0x7000ad20))
#define ADC_DATA_2 (*(volatile unsigned long*)(0x7000ad24))
#define ADC_INIT (*(volatile unsigned long*)(0x7000ad2c))
#define NUM_ADC_CHANNELS 4
#define ADC_BATTERY 0
#define ADC_UNKNOWN_1 1
#define ADC_REMOTE 2
#define ADC_SCROLLPAD 3
#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */
/* Force a scan now */
unsigned short adc_scan(int channel);
#endif

View File

@ -0,0 +1,57 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 by Mark Arigo
*
* 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 "backlight-target.h"
#include "system.h"
#include "lcd.h"
#include "backlight.h"
#include "i2c-pp.h"
void _backlight_on(void)
{
}
void _backlight_off(void)
{
}
void _buttonlight_on(void)
{
/* turn on all touchpad leds */
GPIOA_OUTPUT_VAL |= BUTTONLIGHT_ALL;
#if 0
/* Writing to 0x7000a010 controls the brightness of the leds.
This routine fades the leds from dim to bright, like when
you first turn the unit on. */
unsigned long val = 0x80ff08ff;
int i = 0;
for (i = 0; i < 16; i++)
outl(val, 0x7000a010);
udelay(100000);
val -= 0x110000;
}
#endif
}
void _buttonlight_off(void)
{
/* turn off all touchpad leds */
GPIOA_OUTPUT_VAL &= ~BUTTONLIGHT_ALL;
}

View File

@ -0,0 +1,41 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 by Mark Arigo
*
* 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.
*
****************************************************************************/
#ifndef BACKLIGHT_TARGET_H
#define BACKLIGHT_TARGET_H
#define _backlight_init() true
void _backlight_on(void);
void _backlight_off(void);
/* Button lights are controlled by GPIOA_OUTPUT_VAL */
#define BUTTONLIGHT_PLAY 0x01
#define BUTTONLIGHT_MENU 0x02
#define BUTTONLIGHT_DISPLAY 0x04
#define BUTTONLIGHT_LEFT 0x08
#define BUTTONLIGHT_RIGHT 0x10
#define BUTTONLIGHT_SCROLL 0x20
#define BUTTONLIGHT_ALL (BUTTONLIGHT_PLAY | BUTTONLIGHT_MENU | \
BUTTONLIGHT_DISPLAY | BUTTONLIGHT_LEFT | \
BUTTONLIGHT_RIGHT | BUTTONLIGHT_SCROLL)
void _buttonlight_on(void);
void _buttonlight_off(void);
#endif

View File

@ -0,0 +1,60 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 by Mark Arigo
*
* 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 <stdlib.h>
#include "config.h"
#include "cpu.h"
#include "system.h"
#include "button.h"
#include "kernel.h"
#include "backlight.h"
#include "backlight-target.h"
#include "system.h"
void button_int(void)
{
}
void button_init_device(void)
{
/* taken from the mr-100 bootloader (offset 0x1e72) */
//~ DEV_EN |= 0x20000; /* enable the touchpad ?? */
/* enable touchpad leds */
GPIOA_ENABLE |= 0xff;
GPIOA_OUTPUT_EN |= BUTTONLIGHT_ALL;
}
/*
* Get button pressed from hardware
*/
int button_read_device(void)
{
return BUTTON_NONE;
}
bool button_hold(void)
{
return (GPIOD_INPUT_VAL & BUTTON_HOLD) ? false : true;
}
bool headphones_inserted(void)
{
return (GPIOD_INPUT_VAL & 0x80) ? true : false;
}

View File

@ -0,0 +1,64 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 by Mark Arigo
*
* 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.
*
****************************************************************************/
#ifndef _BUTTON_TARGET_H_
#define _BUTTON_TARGET_H_
#include <stdbool.h>
#include "config.h"
#define HAS_BUTTON_HOLD
bool button_hold(void);
void button_init_device(void);
int button_read_device(void);
/* Power button is on GPIOA */
#define BUTTON_POWER 0x80
#define POWEROFF_BUTTON BUTTON_POWER
#define POWEROFF_COUNT 10
/* Hold button is on GPIOD */
#define BUTTON_HOLD 0x10
/* FIXME: Until the buttons are figured out, we use the button definitions
for the H10 keypad & remote. THESE ARE NOT CORRECT! */
/* Main unit's buttons */
#define BUTTON_LEFT 0x00000002
#define BUTTON_RIGHT 0x00000004
#define BUTTON_REW 0x00000008
#define BUTTON_PLAY 0x00000010
#define BUTTON_FF 0x00000020
#define BUTTON_SCROLL_UP 0x00000040
#define BUTTON_SCROLL_DOWN 0x00000080
#define BUTTON_MAIN (BUTTON_POWER|BUTTON_O|BUTTON_BACK|BUTTON_REW\
|BUTTON_PLAY|BUTTON_FF)
/* Remote control's buttons */
#define BUTTON_RC_REW 0x00080000
#define BUTTON_RC_PLAY 0x00100000
#define BUTTON_RC_FF 0x00200000
#define BUTTON_RC_VOL_UP 0x00400000
#define BUTTON_RC_VOL_DOWN 0x00800000
#define BUTTON_REMOTE (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP|BUTTON_RC_VOL_DOWN\
|BUTTON_RC_REW|BUTTON_RC_FF)
#define RC_POWEROFF_BUTTON BUTTON_RC_PLAY
#endif /* _BUTTON_TARGET_H_ */

View File

@ -0,0 +1,192 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2008 by Mark Arigo
*
* 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 "config.h"
#include "cpu.h"
#include "lcd.h"
#include "kernel.h"
#include "system.h"
/* send LCD data */
static void lcd_send_data(unsigned data)
{
while (LCD1_CONTROL & LCD1_BUSY_MASK); /* wait for LCD */
LCD1_DATA = data;
}
/* send LCD command */
static void lcd_send_command(unsigned cmd)
{
while (LCD1_CONTROL & LCD1_BUSY_MASK); /* wait for LCD */
LCD1_CMD = cmd;
}
/* LCD init */
void lcd_init_device(void)
{
int i;
DEV_INIT1 &= ~0xfc000000;
i = DEV_INIT1;
DEV_INIT1 = i;
DEV_INIT2 &= ~0x400;
udelay(10000);
LCD1_CONTROL &= ~0x4;
udelay(15);
LCD1_CONTROL |= 0x4;
udelay(10);
LCD1_CONTROL = 0x690;
LCD1_CONTROL = 0x694;
/* OF just reads these */
i = LCD1_CONTROL;
i = inl(0x70003004);
i = LCD1_CMD;
i = inl(0x7000300c);
#if 0
/* this is skipped in the OF */
LCD1_CONTROL &= ~0x200;
LCD1_CONTROL &= ~0x800;
LCD1_CONTROL &= ~0x400;
#endif
LCD1_CONTROL |= 0x1;
udelay(15000);
lcd_send_command(0xe2);
lcd_send_command(0x2f);
lcd_send_command(0x26);
lcd_send_command(0xcc);
lcd_send_command(0xe8);
lcd_send_command(0x81);
lcd_send_command(0);
lcd_send_command(0x40);
lcd_send_command(0xa6);
lcd_send_command(0x88);
lcd_send_command(0xb0);
lcd_send_command(0x10);
lcd_send_command(0);
}
/*** hardware configuration ***/
int lcd_default_contrast(void)
{
return DEFAULT_CONTRAST_SETTING;
}
void lcd_set_contrast(int val)
{
lcd_send_command(0x81);
lcd_send_command(val);
}
void lcd_set_invert_display(bool yesno)
{
/* TODO: Implement lcd_set_invert_display() */
(void)yesno;
}
/* turn the display upside down (call lcd_update() afterwards) */
void lcd_set_flip(bool yesno)
{
/* TODO: Implement lcd_set_flip() */
(void)yesno;
}
/*** update functions ***/
/* Performance function that works with an external buffer
note that by and bheight are in 4-pixel units! */
void lcd_blit(const fb_data* data, int x, int by, int width,
int bheight, int stride)
{
/* TODO: Implement lcd_blit() */
(void)data;
(void)x;
(void)by;
(void)width;
(void)bheight;
(void)stride;
}
/* Performance function to blit a YUV bitmap directly to the LCD */
void lcd_yuv_blit(unsigned char * const src[3],
int src_x, int src_y, int stride,
int x, int y, int width, int height)
{
(void)src;
(void)src_x;
(void)src_y;
(void)stride;
(void)x;
(void)y;
(void)width;
(void)height;
}
/* Update the display.
This must be called after all other LCD functions that change the display. */
void lcd_update(void)
{
lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
}
/* Update a fraction of the display. */
void lcd_update_rect(int x0, int y0, int width, int height)
{
unsigned char *addr;
unsigned int cmd0, cmd1, cmd2;
int r, c, x1, y1, start_row, last_row;
x1 = (x0 + width) - 1;
y1 = (y0 + height) - 1;
if ((x1 <= 0) || (y1 <= 0))
return;
if(x1 >= LCD_WIDTH)
x1 = LCD_WIDTH - 1;
if(y1 >= LCD_HEIGHT)
y1 = LCD_HEIGHT - 1;
start_row = y0/8;
last_row = y1/8;
cmd1 = (x0 & 0xff) >> 4;
cmd1 = (cmd1 + 5) | 0x10;
cmd2 = x0 & 0xf;
for (r = start_row; r <= last_row; r++) {
cmd0 = (r & 0xff) | 0xb0;
lcd_send_command(cmd0);
lcd_send_command(cmd1);
lcd_send_command(cmd2);
addr = (unsigned char*)&lcd_framebuffer[r][x0];
for (c = x0; c <= x1; c++)
lcd_send_data(*(addr++));
}
lcd_send_command(0xaf);
}

View File

@ -0,0 +1,62 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2006 by Barry Wardell
*
* 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 "config.h"
#include "cpu.h"
#include <stdbool.h>
#include "adc.h"
#include "kernel.h"
#include "system.h"
#include "power.h"
#include "logf.h"
#include "usb.h"
#if CONFIG_CHARGING == CHARGING_CONTROL
bool charger_enabled;
#endif
void power_init(void)
{
}
bool charger_inserted(void)
{
return false;
}
void ide_power_enable(bool on)
{
(void)on;
/* We do nothing on the iPod */
}
bool ide_powered(void)
{
/* pretend we are always powered - we don't turn it off on the ipod */
return true;
}
void power_off(void)
{
/* Give things a second to settle before cutting power */
sleep(HZ);
//GPIOF_OUTPUT_VAL &=~ 0x20;
}

View File

@ -0,0 +1,59 @@
/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id$
*
* Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese
* Revisions copyright (C) 2005 by Gerald Van Baren
*
* 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 "config.h"
#include "adc.h"
#include "powermgmt.h"
/* FIXME: All voltages copied from H10/Tatung Elio. This will need changing
proper power management. */
const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] =
{
3760
};
const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
{
3650
};
/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
{
{ 3760, 3800, 3850, 3870, 3900, 3950, 4020, 4070, 4110, 4180, 4240 }
};
#if CONFIG_CHARGING
/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
const unsigned short percent_to_volt_charge[11] =
{
3990, 4030, 4060, 4080, 4100, 4120, 4150, 4180, 4220, 4260, 4310
};
#endif /* CONFIG_CHARGING */
#define BATTERY_SCALE_FACTOR 4650
/* full-scale ADC readout (2^10) in millivolt */
/* Returns battery voltage from ADC [millivolts] */
unsigned int battery_adc_voltage(void)
{
return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10;
}

29
tools/configure vendored
View File

@ -603,6 +603,7 @@ cat <<EOF
==Tatung== ==Olympus== ==Logik==
60) Elio TPJ-1022 70) M:Robe 500 80) DAX 1GB MP3/DAB
71) M:Robe 100
EOF
buildfor=`input`;
@ -1292,6 +1293,34 @@ EOF
t_model="mrobe-500"
;;
71|mrobe100)
target_id=31
archos="mrobe100"
target="-DMROBE_100"
memory=32 # always
arm7tdmicc
tool="$rootdir/tools/scramble -mi4v2 -model=m100 -type=RBOS"
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotemono="$rootdir/tools/bmp2rb -f 0"
bmp2rb_remotenative="$rootdir/tools/bmp2rb -f 0"
output="rockbox.mi4"
appextra="recorder:gui"
archosrom=""
flash=""
plugins=""
swcodec="yes"
boottool="$rootdir/tools/scramble -mi4v2 -model=m100 -type=RBBL"
bootoutput="pp5020.mi4"
# toolset is the tools within the tools directory that we build for
# this particular target.
toolset="$genericbitmaptools scramble"
# architecture, manufacturer and model for the target-tree build
t_cpu="arm"
t_manufacturer="olympus"
t_model="mrobe-100"
;;
80|logikdax)
target_id=31
archos="logikdax"

View File

@ -107,7 +107,7 @@ void usage(void)
"\t-add=X Rockbox generic \"add-up\" checksum format\n"
"\t (X values: h100, h120, h140, h300, ipco, nano, ipvd, mn2g\n"
"\t ip3g, ip4g, mini, iax5, h10, h10_5gb, tpj2,\n"
"\t c200, e200, giga, m500)\n"
"\t c200, e200, giga, m100, m500)\n"
"\nNo option results in Archos standard player/recorder format.\n");
exit(1);
@ -253,6 +253,8 @@ int main (int argc, char** argv)
modelnum = 21;
else if(!strcmp(&argv[1][5], "m500"))
modelnum = 22;
else if(!strcmp(&argv[1][5], "m100"))
modelnum = 23;
else {
fprintf(stderr, "unsupported model: %s\n", &argv[1][5]);
return 2;