From d602717735b09cdd39e4e8c75d69ce8c5e2d957d Mon Sep 17 00:00:00 2001 From: Andrew Ryabinin Date: Sun, 27 Oct 2013 22:34:24 +0400 Subject: [PATCH] Introduce HiFi E.T. MA9C port. The only difference between this target and HiFi E.T. MA9 is display driver (ILI9342 in MA9 and ILI9342c in MA9C) Change-Id: Icc3d2490f850902a653175360f12283f3708bbb7 --- bootloader/SOURCES | 3 +- firmware/SOURCES | 4 +- firmware/export/config.h | 3 + firmware/export/config/hifietma9c.h | 153 ++++++++++++++++++ firmware/target/arm/rk27xx/backlight-rk27xx.c | 2 +- firmware/target/arm/rk27xx/debug-rk27xx.c | 2 +- firmware/target/arm/rk27xx/ma/lcd-ma.c | 81 ++++++++++ firmware/target/arm/rk27xx/sd-rk27xx.c | 2 +- tools/configure | 25 ++- 9 files changed, 268 insertions(+), 7 deletions(-) create mode 100644 firmware/export/config/hifietma9c.h diff --git a/bootloader/SOURCES b/bootloader/SOURCES index e2f23bac6d..9db5965786 100644 --- a/bootloader/SOURCES +++ b/bootloader/SOURCES @@ -67,7 +67,8 @@ main-pp.c show_logo.c #elif defined(MPIO_HD200) || defined(MPIO_HD300) mpio_hd200_hd300.c -#elif defined(RK27_GENERIC) || defined(HM60X) || defined(HM801) || defined(MA9) +#elif defined(RK27_GENERIC) || defined(HM60X) || defined(HM801) \ + || defined(MA9) || defined(MA9C) rk27xx.c show_logo.c #elif defined(SANSA_CONNECT) diff --git a/firmware/SOURCES b/firmware/SOURCES index 2a9ae0c266..d8b2795f59 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES @@ -705,7 +705,7 @@ target/arm/ipod/lcd-gray.c target/arm/imx31/gigabeat-s/lcd-gigabeat-s.c #elif CONFIG_LCD == LCD_GIGABEAT || CONFIG_LCD == LCD_MINI2440 target/arm/s3c2440/lcd-s3c2440.c -#elif CONFIG_LCD == LCD_ILI9342 +#elif CONFIG_LCD == LCD_ILI9342 || CONFIG_LCD == LCD_ILI9342C target/arm/rk27xx/ma/lcd-ma.c #endif @@ -1745,7 +1745,7 @@ target/arm/rk27xx/hm801/powermgmt-hm801.c target/arm/rk27xx/hm801/power-hm801.c #endif -#if defined(MA9) +#if defined(MA9) || defined(MA9C) target/arm/rk27xx/ma/button-ma.c target/arm/rk27xx/ma/powermgmt-ma.c target/arm/rk27xx/ma/power-ma.c diff --git a/firmware/export/config.h b/firmware/export/config.h index a5c199484b..9c6f1f73c5 100644 --- a/firmware/export/config.h +++ b/firmware/export/config.h @@ -256,6 +256,7 @@ #define LCD_NWZE360 52 /* as used by Sony NWZ-E360 series */ #define LCD_CREATIVEZEN 55 /* as used by the Creative ZEN (X-Fi) (LMS250GF03-001(S6D0139)) */ #define LCD_CREATIVEZENMOZAIC 56 /* as used by the Creative ZEN Mozaic (FGD0801) */ +#define LCD_ILI9342C 57 /* another type of lcd used by HiFi E.T MA9/MA8 */ /* LCD_PIXELFORMAT */ #define HORIZONTAL_PACKING 1 @@ -532,6 +533,8 @@ Lyre prototype 1 */ #include "config/creativezen.h" #elif defined(MA9) #include "config/hifietma9.h" +#elif defined(MA9C) +#include "config/hifietma9c.h" #elif defined(SONY_NWZE370) #include "config/sonynwze370.h" #elif defined(SONY_NWZE360) diff --git a/firmware/export/config/hifietma9c.h b/firmware/export/config/hifietma9c.h new file mode 100644 index 0000000000..6162aa2762 --- /dev/null +++ b/firmware/export/config/hifietma9c.h @@ -0,0 +1,153 @@ +/* + * This config file is for HiFi E.T. MA9 reference design + */ + +/* For Rolo and boot loader */ +#define MODEL_NUMBER 84 + +#define MODEL_NAME "HiFi E.T. MA9C" + +/* define the bitmask of hardware sample rates */ +#define HW_SAMPR_CAPS (SAMPR_CAP_96 | SAMPR_CAP_48 | SAMPR_CAP_44 | \ + SAMPR_CAP_32 | SAMPR_CAP_24 | SAMPR_CAP_22 | \ + SAMPR_CAP_16 | SAMPR_CAP_12 | SAMPR_CAP_11 | SAMPR_CAP_8) + +#define HAVE_DF1704_CODEC + +#define CODEC_SLAVE +/* define this if you have a bitmap LCD display */ +#define HAVE_LCD_BITMAP + +/* define this if you can flip your LCD */ +/* #define HAVE_LCD_FLIP */ + +/* define this if you have a colour LCD */ +#define HAVE_LCD_COLOR + +/* define this if you want album art for this target */ +#define HAVE_ALBUMART + +/* define this to enable bitmap scaling */ +#define HAVE_BMP_SCALING + +/* define this to enable JPEG decoding */ +#define HAVE_JPEG + +/* define this if you can invert the colours on your LCD */ +/* #define HAVE_LCD_INVERT */ + +/* define this if you have access to the quickscreen */ +#define HAVE_QUICKSCREEN + +/* define this if you would like tagcache to build on this target */ +#define HAVE_TAGCACHE + +/* define this if you have a flash memory storage */ +#define HAVE_FLASH_STORAGE + +#define CONFIG_STORAGE (STORAGE_SD | STORAGE_NAND) + +#define CONFIG_NAND NAND_RK27XX +#define HAVE_SW_TONE_CONTROLS + +/* commented for now */ +/* #define HAVE_HOTSWAP */ + +#define NUM_DRIVES 2 +#define SECTOR_SIZE 512 + +/* for small(ish) SD cards */ +#define HAVE_FAT16SUPPORT + +/* LCD dimensions */ +#define LCD_WIDTH 320 +#define LCD_HEIGHT 240 +#define LCD_DEPTH 16 /* pseudo 262.144 colors */ +#define LCD_PIXELFORMAT RGB565 /* rgb565 */ + +/* Define this if your LCD can be enabled/disabled */ +#define HAVE_LCD_ENABLE + +#define CONFIG_KEYPAD MA_PAD + +/* Define this to enable morse code input */ +#define HAVE_MORSE_INPUT + +/* Define this if you do software codec */ +#define CONFIG_CODEC SWCODEC + +#define CONFIG_LCD LCD_ILI9342C + +/* Define this for LCD backlight available */ +#define HAVE_BACKLIGHT +#define HAVE_BACKLIGHT_BRIGHTNESS +#define MIN_BRIGHTNESS_SETTING 0 +#define MAX_BRIGHTNESS_SETTING 31 +#define DEFAULT_BRIGHTNESS_SETTING 31 +#define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_HW_REG + +/* 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 0x80000 + +/* TODO: Figure out real values */ +#define BATTERY_CAPACITY_DEFAULT 600 /* default battery capacity */ +#define BATTERY_CAPACITY_MIN 300 /* min. capacity selectable */ +#define BATTERY_CAPACITY_MAX 600 /* max. capacity selectable */ +#define BATTERY_CAPACITY_INC 10 /* capacity increment */ +#define BATTERY_TYPES_COUNT 1 /* only one type */ + +#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE + +/* Hardware controlled charging with monitoring */ +#define CONFIG_CHARGING CHARGING_MONITOR + +/* USB On-the-go */ +#define CONFIG_USBOTG USBOTG_RK27XX + +/* enable these for the experimental usb stack */ +#define HAVE_USBSTACK + +#define USE_ROCKBOX_USB +#define USB_VENDOR_ID 0x071b +#define USB_PRODUCT_ID 0x3202 +#define HAVE_BOOTLOADER_USB_MODE + +/* Define this if your LCD can set contrast */ +/* #define HAVE_LCD_CONTRAST */ + +/* The exact type of CPU */ +#define CONFIG_CPU RK27XX + +/* I2C interface */ +#define CONFIG_I2C I2C_RK27XX + +/* Define this to the CPU frequency */ +#define CPU_FREQ 200000000 + +/* define this if the hardware can be powered off while charging */ +/* #define HAVE_POWEROFF_WHILE_CHARGING */ + +/* 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 STORAGE_NEEDS_ALIGN + +/* Define this if you have adjustable CPU frequency */ +#define HAVE_ADJUSTABLE_CPU_FREQ + +/* Virtual LED (icon) */ +#define CONFIG_LED LED_VIRTUAL + +#define RKW_FORMAT +#define BOOTFILE_EXT "rkw" +#define BOOTFILE "rockbox." BOOTFILE_EXT +#define BOOTDIR "/.rockbox" diff --git a/firmware/target/arm/rk27xx/backlight-rk27xx.c b/firmware/target/arm/rk27xx/backlight-rk27xx.c index 9ea9c9984e..8c10d7af2a 100644 --- a/firmware/target/arm/rk27xx/backlight-rk27xx.c +++ b/firmware/target/arm/rk27xx/backlight-rk27xx.c @@ -61,7 +61,7 @@ static const unsigned short lin_brightness[] = { 562, 579, 596, 616, 637, 660, 684, 711, 739, 770, 802, 837, 874, 914, 955, 1000 }; -#elif defined(MA9) +#elif defined(MA9) || defined(MA9C) static const unsigned short lin_brightness[] = { 2, 4, 7, 10, 15, 21, 28, 36, 46, 58, 72, 87, 104, 124, 146, 171, diff --git a/firmware/target/arm/rk27xx/debug-rk27xx.c b/firmware/target/arm/rk27xx/debug-rk27xx.c index a73ca05c77..9f91f58f14 100644 --- a/firmware/target/arm/rk27xx/debug-rk27xx.c +++ b/firmware/target/arm/rk27xx/debug-rk27xx.c @@ -32,7 +32,7 @@ #ifdef RK27_GENERIC #define DEBUG_CANCEL BUTTON_VOL -#elif defined(HM60X) || defined(HM801) || defined(MA9) +#elif defined(HM60X) || defined(HM801) || defined(MA_PAD) #define DEBUG_CANCEL BUTTON_LEFT #endif diff --git a/firmware/target/arm/rk27xx/ma/lcd-ma.c b/firmware/target/arm/rk27xx/ma/lcd-ma.c index a35f13ba3a..3fecce2d18 100644 --- a/firmware/target/arm/rk27xx/ma/lcd-ma.c +++ b/firmware/target/arm/rk27xx/ma/lcd-ma.c @@ -27,8 +27,88 @@ #include "cpu.h" #include "lcdif-rk27xx.h" +#define ILI9342 0 +#define ILI9342C 1 +#define LCD_DRIVER ILI9342C + static bool display_on = false; +#if (CONFIG_LCD == LCD_ILI9342C) +void lcd_display_init(void) +{ + unsigned int x, y; + + lcd_cmd(0xC8); + lcd_data(0xFF); + lcd_data(0x93); + lcd_data(0x42); + + lcd_write_reg(0x36, 0xC8); + + lcd_write_reg(0x3A, 0x55); + + lcd_cmd(0xC0); + lcd_data(0x14); + lcd_data(0x0E); + + lcd_write_reg(0xC1, 0x01); + + lcd_write_reg(0xC5, 0xF4); + + lcd_cmd(0xB1); + lcd_data(0x00); + lcd_data(0x1B); + + lcd_write_reg(0xB4, 0x02); + + lcd_cmd(0xE0); + lcd_data(0x00); + lcd_data(0x0A); + lcd_data(0x11); + lcd_data(0x08); + lcd_data(0x16); + lcd_data(0x0A); + lcd_data(0x3C); + lcd_data(0x9B); + lcd_data(0x4A); + lcd_data(0x09); + lcd_data(0x0E); + lcd_data(0x0A); + lcd_data(0x1C); + lcd_data(0x1D); + lcd_data(0x0F); + + lcd_cmd(0xE1); + lcd_data(0x00); + lcd_data(0x23); + lcd_data(0x25); + lcd_data(0x04); + lcd_data(0x10); + lcd_data(0x07); + lcd_data(0x39); + lcd_data(0x46); + lcd_data(0x4A); + lcd_data(0x03); + lcd_data(0x0C); + lcd_data(0x0A); + lcd_data(0x31); + lcd_data(0x36); + lcd_data(0x0F); + + /* exit sleep */ + lcd_cmd(0x11); + udelay(5000); + lcd_cmd(0x29); + + lcd_cmd(0x2C); + for (x = 0; x < LCD_WIDTH; x++) + for(y=0; y < LCD_HEIGHT; y++) + lcd_data(0x00); + + display_on = true; +} + +#elif (CONFIG_LCD == LCD_ILI9342) void lcd_display_init(void) { @@ -131,6 +211,7 @@ void lcd_display_init(void) display_on = true; } +#endif void lcd_enable (bool on) { diff --git a/firmware/target/arm/rk27xx/sd-rk27xx.c b/firmware/target/arm/rk27xx/sd-rk27xx.c index ef9845d696..39a4330d2a 100644 --- a/firmware/target/arm/rk27xx/sd-rk27xx.c +++ b/firmware/target/arm/rk27xx/sd-rk27xx.c @@ -132,7 +132,7 @@ static inline bool card_detect_target(void) return !(GPIO_PCDR & 0x80); #elif defined(HM60X) || defined(HM801) return !(GPIO_PFDR & (1<<2)); -#elif defined(MA9) +#elif defined(MA9) || defined(MA9C) return (GPIO_PCDR & 0x80); #else #error "Unknown target" diff --git a/tools/configure b/tools/configure index 437a70bb2f..368a18611d 100755 --- a/tools/configure +++ b/tools/configure @@ -1330,7 +1330,7 @@ cat <