From 40ec54305250e9a4a5e54a293abb974121d4a110 Mon Sep 17 00:00:00 2001 From: Maurus Cuelenaere Date: Fri, 19 Dec 2008 11:13:58 +0000 Subject: [PATCH] * Add support for Onda VX747+ (FS#9674 by Olivier Barbut) * Fix Onda VX767 support * Small cleanup git-svn-id: svn://svn.rockbox.org/rockbox/trunk@19481 a1c6a512-1295-4272-9138-f99709370657 --- bootloader/SOURCES | 2 +- bootloader/ondavx747.c | 55 ++---- docs/CREDITS | 1 + firmware/SOURCES | 2 +- firmware/export/config-ondavx747.h | 2 - firmware/export/config-ondavx747p.h | 164 ++++++++++++++++++ firmware/export/config-ondavx767.h | 16 +- firmware/export/config.h | 6 + .../onda_vx747/sadc-onda_vx747.c | 27 ++- .../ingenic_jz47xx/onda_vx767/usb-target.h | 20 +-- tools/configure | 25 ++- 11 files changed, 255 insertions(+), 65 deletions(-) mode change 100644 => 100755 bootloader/SOURCES mode change 100644 => 100755 bootloader/ondavx747.c mode change 100644 => 100755 docs/CREDITS mode change 100644 => 100755 firmware/SOURCES mode change 100644 => 100755 firmware/export/config-ondavx747.h create mode 100755 firmware/export/config-ondavx747p.h mode change 100644 => 100755 firmware/export/config-ondavx767.h mode change 100644 => 100755 firmware/export/config.h mode change 100644 => 100755 firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c mode change 100644 => 100755 firmware/target/mips/ingenic_jz47xx/onda_vx767/usb-target.h diff --git a/bootloader/SOURCES b/bootloader/SOURCES old mode 100644 new mode 100755 index 67c0d0eb74..693644df5e --- a/bootloader/SOURCES +++ b/bootloader/SOURCES @@ -40,7 +40,7 @@ meizu_m6sl.c meizu_m6sp.c #elif defined(MEIZU_M3) meizu_m3.c -#elif defined(ONDA_VX747) || defined(ONDA_VX767) +#elif defined(ONDA_VX747) || defined(ONDA_VX747P) || defined(ONDA_VX767) ondavx747.c #elif defined(CREATIVE_ZVx) creativezvm.c diff --git a/bootloader/ondavx747.c b/bootloader/ondavx747.c old mode 100644 new mode 100755 index 13c537b9be..0695dc0190 --- a/bootloader/ondavx747.c +++ b/bootloader/ondavx747.c @@ -21,11 +21,15 @@ #include #include +#include #include "config.h" #include "jz4740.h" #include "backlight.h" #include "font.h" #include "lcd.h" +#include "ata.h" +#include "usb.h" +#include "storage.h" #include "system.h" #include "button.h" #include "timefuncs.h" @@ -33,14 +37,9 @@ #include "common.h" #include "mipsregs.h" -static void audiotest(void) -{ - __i2s_internal_codec(); - __aic_enable(); - __aic_reset(); - __aic_select_i2s(); - __aic_enable_loopback(); -} +#ifdef ONDA_VX747P + #define ONDA_VX747 +#endif int main(void) { @@ -54,12 +53,16 @@ int main(void) backlight_init(); +#if 0 /* Enable this when multi storage works */ storage_init(); +#else + ata_init(); +#endif int touch, btn; char datetime[30]; reset_screen(); - printf("Rockbox bootloader v0.000001"); + printf("Rockbox bootloader v0.0001"); printf("REG_EMC_SACR0: 0x%x", REG_EMC_SACR0); printf("REG_EMC_SACR1: 0x%x", REG_EMC_SACR1); printf("REG_EMC_SACR2: 0x%x", REG_EMC_SACR2); @@ -85,46 +88,20 @@ int main(void) if(read_c0_config1() & (1 << 6)) printf(" * CP2 available"); printf("C0_STATUS: 0x%x", read_c0_status()); -#if 0 - unsigned char testdata[4096]; - char msg[30]; - int j = 1; - while(1) - { - memset(testdata, 0, 4096); - reset_screen(); - jz_nand_read(0, j, &testdata); - printf("Page %d", j); - int i; - for(i=0; i<768; i+=16) - { - snprintf(msg, 30, "%02x%02x%02x%02x%02x%02x%02x%02x %02x%02x%02x%02x%02x%02x%02x%02x", - testdata[i], testdata[i+1], testdata[i+2], testdata[i+3], testdata[i+4], testdata[i+5], testdata[i+6], testdata[i+7], - testdata[i+8], testdata[i+9], testdata[i+10], testdata[i+11], testdata[i+12], testdata[i+13], testdata[i+14], testdata[i+15] - ); - printf(msg); - } - while(!((btn = button_read_device(&touch)) & (BUTTON_VOL_UP|BUTTON_VOL_DOWN))); - if(btn & BUTTON_VOL_UP) - j++; - if(btn & BUTTON_VOL_DOWN) - j--; - if(j<0) - j = 0; - } -#endif + lcd_puts_scroll(0, 25, "This is a very very long scrolling line.... VERY LONG VERY LONG VERY LONG VERY LONG VERY LONG VERY LONG!!!!!"); + while(1) { #ifdef ONDA_VX747 #if 1 btn = button_get(false); touch = button_get_data(); -#else +#else /* button_get() has performance issues */ btn = button_read_device(&touch); #endif #else btn = button_read_device(); -#endif +#endif /* ONDA_VX747 */ #define KNOP(x,y) lcd_set_foreground(LCD_BLACK); \ if(btn & x) \ lcd_set_foreground(LCD_WHITE); \ diff --git a/docs/CREDITS b/docs/CREDITS old mode 100644 new mode 100755 index aef990ecaf..0fdcd27dbe --- a/docs/CREDITS +++ b/docs/CREDITS @@ -439,6 +439,7 @@ Anton Veretenenko Vicente Ibarra Rui Araújo Brian Cloutier +Olivier Barbut The libmad team diff --git a/firmware/SOURCES b/firmware/SOURCES old mode 100644 new mode 100755 index 278fcda9d6..711a7c0c56 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -1215,7 +1215,7 @@ target/mips/ingenic_jz47xx/usb-jz4740.c drivers/nand_id.c #endif -#ifdef ONDA_VX747 +#if defined(ONDA_VX747) || defined(ONDA_VX747P) target/mips/ingenic_jz47xx/onda_vx747/backlight-onda_vx747.c target/mips/ingenic_jz47xx/onda_vx747/lcd-onda_vx747.c target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c diff --git a/firmware/export/config-ondavx747.h b/firmware/export/config-ondavx747.h old mode 100644 new mode 100755 index e92e5a9829..2856e7e16d --- a/firmware/export/config-ondavx747.h +++ b/firmware/export/config-ondavx747.h @@ -161,6 +161,4 @@ #define USB_VENDOR_ID 0x041e #define USB_PRODUCT_ID 0x4133 -#include /* HACKY */ - #endif diff --git a/firmware/export/config-ondavx747p.h b/firmware/export/config-ondavx747p.h new file mode 100755 index 0000000000..5c4d3e7aea --- /dev/null +++ b/firmware/export/config-ondavx747p.h @@ -0,0 +1,164 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2008 by Olivier Barbut + * + * 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. + * + ****************************************************************************/ + +/* + * This config file is for the Onda VX747+ + */ +#define TARGET_TREE /* this target is using the target tree system */ + +#define CONFIG_SDRAM_START 0x80004000 + +#define ONDA_VX747P 1 + +#define MODEL_NAME "Onda VX747+" + +/* For Rolo and boot loader */ +#define MODEL_NUMBER 44 + +//#define HAVE_ATA_SD +//#define HAVE_HOTSWAP + +//#define CONFIG_STORAGE (STORAGE_NAND | STORAGE_SD) +#define CONFIG_STORAGE STORAGE_RAMDISK /* Multivolume currently handled at firmware/target/ level */ + +#define CONFIG_NAND NAND_CC + +#define HAVE_MULTIVOLUME + +/* define this if you have a bitmap LCD display */ +#define HAVE_LCD_BITMAP + +/* define this if you have a colour LCD */ +#define HAVE_LCD_COLOR + +/* 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 + +/* define this if the target has volume keys which can be used in the lists */ +#define HAVE_VOLUME_IN_LIST + +/* LCD dimensions */ +#define CONFIG_LCD LCD_ONDAVX747 + +#define LCD_WIDTH 240 +#define LCD_HEIGHT 400 + +#define LCD_DEPTH 16 /* 16bit colours */ +#define LCD_PIXELFORMAT RGB565 /* rgb565 */ + +/* Define this if your LCD can be enabled/disabled */ +#define HAVE_LCD_ENABLE + +#define CONFIG_KEYPAD ONDAVX747_PAD +#define HAVE_TOUCHSCREEN +#define HAVE_BUTTON_DATA + +/* Define this if you do software codec */ +#define CONFIG_CODEC SWCODEC + +/* define this if you have a real-time clock */ +#define CONFIG_RTC RTC_JZ47XX + +/* Define this for LCD backlight available */ +#define HAVE_BACKLIGHT + +#define HAVE_BACKLIGHT_BRIGHTNESS + +/* Main LCD backlight brightness range and defaults */ +#define MIN_BRIGHTNESS_SETTING 100 +#define MAX_BRIGHTNESS_SETTING 300 +#define DEFAULT_BRIGHTNESS_SETTING 300 /* "full brightness" */ +#define DEFAULT_DIMNESS_SETTING 100 /* "most dim" */ + +/* Define this if you have a software controlled poweroff */ +//#define HAVE_SW_POWEROFF + +/* The number of bytes reserved for loadable codecs */ +#define CODEC_SIZE 0x100000 + +/* The number of bytes reserved for loadable plugins */ +#define PLUGIN_BUFFER_SIZE 0x100000 + +/* Define this if you have the */ +//#define HAVE_INGENIC_CODEC + +#define CONFIG_I2C I2C_JZ47XX + +/* TLV320 has no tone controls, so we use the software ones */ +//#define HAVE_SW_TONE_CONTROLS + +/*#define HW_SAMPR_CAPS (SAMPR_CAP_88 | SAMPR_CAP_44 | SAMPR_CAP_22 | \ + SAMPR_CAP_11)*/ + +#define BATTERY_CAPACITY_DEFAULT 1250 /* default battery capacity */ +#define BATTERY_CAPACITY_MIN 500 /* min. capacity selectable */ +#define BATTERY_CAPACITY_MAX 2500 /* max. capacity selectable */ +#define BATTERY_CAPACITY_INC 100 /* capacity increment */ +#define BATTERY_TYPES_COUNT 1 /* only one type */ + +/* Hardware controlled charging with monitoring */ +//#define CONFIG_CHARGING CHARGING_MONITOR + +#ifndef SIMULATOR + +/* Define this if you have a Ingenic JZ4732 */ +#define CONFIG_CPU JZ4732 + +/* define this if the hardware can be powered off while charging */ +#define HAVE_POWEROFF_WHILE_CHARGING + +/* Define this to the CPU frequency */ +#define CPU_FREQ 3686400 + +/* define this if you have a flash memory storage */ +#define HAVE_FLASH_STORAGE + +/* Virtual LED (icon) */ +#define CONFIG_LED LED_VIRTUAL + +/* define this if the backlight can be set to a brightness */ +#define __BACKLIGHT_INIT + +/* Offset ( in the firmware file's header ) to the file CRC */ +#define FIRMWARE_OFFSET_FILE_CRC 0 + +/* Offset ( in the firmware file's header ) to the real data */ +#define FIRMWARE_OFFSET_FILE_DATA 8 + +/* Define this if you have adjustable CPU frequency */ +/* #define HAVE_ADJUSTABLE_CPU_FREQ */ + +#define BOOTFILE_EXT "vx747p" +#define BOOTFILE "rockbox." BOOTFILE_EXT +#define BOOTDIR "/.rockbox" + +#define CONFIG_USBOTG USBOTG_JZ4740 +#define HAVE_USBSTACK +#define USB_VENDOR_ID 0x041e +#define USB_PRODUCT_ID 0x4133 + +#endif diff --git a/firmware/export/config-ondavx767.h b/firmware/export/config-ondavx767.h old mode 100644 new mode 100755 index 7a635b50e9..7216ef0d35 --- a/firmware/export/config-ondavx767.h +++ b/firmware/export/config-ondavx767.h @@ -33,11 +33,13 @@ /* For Rolo and boot loader */ #define MODEL_NUMBER 36 -/* define this if you use an ATA controller */ -//#define CONFIG_STORAGE STORAGE_ATA +//#define HAVE_ATA_SD +//#define HAVE_HOTSWAP -#define HAVE_ATA_SD -#define HAVE_HOTSWAP +//#define CONFIG_STORAGE (STORAGE_NAND | STORAGE_SD) +#define CONFIG_STORAGE STORAGE_RAMDISK /* Multivolume currently handled at firmware/target/ level */ + +#define CONFIG_NAND NAND_CC #define HAVE_MULTIVOLUME @@ -152,11 +154,9 @@ #define BOOTFILE "rockbox." BOOTFILE_EXT #define BOOTDIR "/.rockbox" -/*#define CONFIG_USBOTG USBOTG_INGENIC +#define CONFIG_USBOTG USBOTG_JZ4740 #define HAVE_USBSTACK #define USB_VENDOR_ID 0x041e -#define USB_PRODUCT_ID 0x4133*/ - -#include /* HACKY */ +#define USB_PRODUCT_ID 0x4133 #endif diff --git a/firmware/export/config.h b/firmware/export/config.h old mode 100644 new mode 100755 index 221e9a8124..75aa76a898 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -316,6 +316,8 @@ #include "config-meizu-m3.h" #elif defined(ONDA_VX747) #include "config-ondavx747.h" +#elif defined(ONDA_VX747P) +#include "config-ondavx747p.h" #elif defined(ONDA_VX767) #include "config-ondavx767.h" #elif defined(SANSA_CLIP) @@ -634,4 +636,8 @@ #define STORAGE_GET_INFO #endif +#ifdef CPU_MIPS +#include /* MIPS GCC fix? */ +#endif + #endif /* __CONFIG_H__ */ diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c b/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c old mode 100644 new mode 100755 index 2624eb3d82..1aa98819fe --- a/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c +++ b/firmware/target/mips/ingenic_jz47xx/onda_vx747/sadc-onda_vx747.c @@ -27,11 +27,22 @@ #include "powermgmt.h" #include "kernel.h" +#ifdef ONDA_VX747 #define BTN_OFF (1 << 29) #define BTN_VOL_DOWN (1 << 27) #define BTN_HOLD (1 << 16) #define BTN_MENU (1 << 1) #define BTN_VOL_UP (1 << 0) +#elif defined(ONDA_VX747P) +#define BTN_OFF (1 << 29) +#define BTN_VOL_DOWN (1 << 27) +#define BTN_HOLD (1 << 22) /* on REG_GPIO_PXPIN(2) */ +#define BTN_MENU (1 << 20) +#define BTN_VOL_UP (1 << 19) +#else +#error No buttons defined! +#endif + #define BTN_MASK (BTN_OFF | BTN_VOL_DOWN | \ BTN_MENU | BTN_VOL_UP) @@ -130,11 +141,19 @@ void button_init_device(void) REG_SADC_CTRL = (~(SADC_CTRL_PENDM | SADC_CTRL_PENUM | SADC_CTRL_TSRDYM | SADC_CTRL_PBATRDYM)); REG_SADC_ENA = (SADC_ENA_TSEN | SADC_ENA_PBATEN); +#ifdef ONDA_VX747 __gpio_as_input(32*3 + 29); __gpio_as_input(32*3 + 27); __gpio_as_input(32*3 + 16); __gpio_as_input(32*3 + 1); __gpio_as_input(32*3 + 0); +#elif defined(ONDA_VX747P) + __gpio_as_input(32*3 + 29); + __gpio_as_input(32*3 + 27); + __gpio_as_input(32*3 + 20); + __gpio_as_input(32*3 + 19); + __gpio_as_input(32*2 + 22); +#endif mutex_init(&battery_mtx); } @@ -173,7 +192,13 @@ int button_read_device(int *data) int ret = 0, tmp; /* Filter button events out if HOLD button is pressed at firmware/ level */ - if((~REG_GPIO_PXPIN(3)) & BTN_HOLD) + if( +#ifdef ONDA_VX747 + (~REG_GPIO_PXPIN(3)) & BTN_HOLD +#elif defined(ONDA_VX747P) + (~REG_GPIO_PXPIN(2)) & BTN_HOLD +#endif + ) return 0; tmp = (~REG_GPIO_PXPIN(3)) & BTN_MASK; diff --git a/firmware/target/mips/ingenic_jz47xx/onda_vx767/usb-target.h b/firmware/target/mips/ingenic_jz47xx/onda_vx767/usb-target.h old mode 100644 new mode 100755 index c681bdaa12..887d7415d0 --- a/firmware/target/mips/ingenic_jz47xx/onda_vx767/usb-target.h +++ b/firmware/target/mips/ingenic_jz47xx/onda_vx767/usb-target.h @@ -24,23 +24,19 @@ #include "config.h" -#define __gpio_as_usb_detect() \ -do { \ - REG_GPIO_PXFUNS(3) = 0x10000000; \ - REG_GPIO_PXSELS(3) = 0x10000000; \ - REG_GPIO_PXPES(3) = 0x10000000; \ -} while (0) - #define GPIO_UDC_DETE (32 * 3 + 28) #define IRQ_GPIO_UDC_DETE (IRQ_GPIO_0 + GPIO_UDC_DETE) -static inline void usb_init_gpio(void) -{ - __gpio_as_usb_detect(); - system_enable_irq(IRQ_UDC); - __gpio_as_input(GPIO_UDC_DETE); +#define USB_INIT_GPIO() \ +{ \ + REG_GPIO_PXFUNS(3) = 0x10000000; \ + REG_GPIO_PXSELS(3) = 0x10000000; \ + REG_GPIO_PXPES(3) = 0x10000000; \ + __gpio_as_input(GPIO_UDC_DETE); \ } +#define USB_DRV_CONNECTED() (__gpio_get_pin(GPIO_UDC_DETE) == 1) + int usb_detect(void); void usb_init_device(void); bool usb_drv_connected(void); diff --git a/tools/configure b/tools/configure index 1d98ca8a6c..979d8cea7c 100755 --- a/tools/configure +++ b/tools/configure @@ -711,7 +711,7 @@ cat <