move the iriver h1x0/h3x0 targets to the target tree
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11392 a1c6a512-1295-4272-9138-f99709370657
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 95e8450..e506a1b 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -253,18 +253,30 @@
#endif
#endif
-#ifdef IRIVER_H100_SERIES
+#ifdef IRIVER_H300_SERIES
+target/coldfire/iriver/h300/power-h300.c
#ifndef SIMULATOR
-target/coldfire/iriver/h100/button-h100.c
+target/coldfire/pcf50606-coldfire.c
+target/coldfire/iriver/ata-iriver.c
+target/coldfire/iriver/system-iriver.c
+target/coldfire/iriver/h300/adc-h300.c
+target/coldfire/iriver/h300/backlight-h300.c
+target/coldfire/iriver/h300/button-h300.c
+target/coldfire/iriver/h300/lcd-as-h300.S
+target/coldfire/iriver/h300/pcf50606-h300.c
+target/coldfire/iriver/h300/usb-h300.c
#endif
#endif
-#ifdef IRIVER_H300_SERIES
+#ifdef IRIVER_H100_SERIES
+target/coldfire/iriver/h100/power-h100.c
#ifndef SIMULATOR
-target/coldfire/iriver/h300/lcd-as-h300.S
-target/coldfire/iriver/h300/button-h300.c
-target/coldfire/pcf50606-coldfire.c
-target/coldfire/iriver/h300/pcf50606-h300.c
+target/coldfire/iriver/ata-iriver.c
+target/coldfire/iriver/system-iriver.c
+target/coldfire/iriver/h100/adc-h100.c
+target/coldfire/iriver/h100/backlight-h100.c
+target/coldfire/iriver/h100/button-h100.c
+target/coldfire/iriver/h100/usb-h100.c
#endif
#endif
diff --git a/firmware/backlight.c b/firmware/backlight.c
index 997e26d..46e2882 100644
--- a/firmware/backlight.c
+++ b/firmware/backlight.c
@@ -61,13 +61,7 @@
#ifndef TARGET_TREE
static inline void __backlight_on(void)
{
-#if CONFIG_BACKLIGHT == BL_IRIVER_H100
- and_l(~0x00020000, &GPIO1_OUT);
-#elif CONFIG_BACKLIGHT == BL_IRIVER_H300
- lcd_enable(true);
- sleep(HZ/100); /* lcd needs time - avoid flashing for dark screens */
- or_l(0x00020000, &GPIO1_OUT);
-#elif CONFIG_BACKLIGHT == BL_RTC
+#if CONFIG_BACKLIGHT == BL_RTC
/* Enable square wave */
rtc_write(0x0a, rtc_read(0x0a) | 0x40);
#elif CONFIG_BACKLIGHT == BL_PA14_LO /* Player */
@@ -84,12 +78,7 @@
static inline void __backlight_off(void)
{
-#if CONFIG_BACKLIGHT == BL_IRIVER_H100
- or_l(0x00020000, &GPIO1_OUT);
-#elif CONFIG_BACKLIGHT == BL_IRIVER_H300
- and_l(~0x00020000, &GPIO1_OUT);
- lcd_enable(false);
-#elif CONFIG_BACKLIGHT == BL_RTC
+#if CONFIG_BACKLIGHT == BL_RTC
/* Disable square wave */
rtc_write(0x0a, rtc_read(0x0a) & ~0x40);
#elif CONFIG_BACKLIGHT == BL_PA14_LO /* Player */
@@ -162,7 +151,7 @@
#if defined(HAVE_BACKLIGHT_PWM_FADING) && !defined(SIMULATOR)
/* backlight fading */
-#define BL_PWM_INTERVAL 5000 /* Cycle interval in µs */
+#define BL_PWM_INTERVAL 5000 /* Cycle interval in s */
#define BL_PWM_COUNT 100
static const char backlight_fade_value[8] = { 0, 1, 2, 4, 6, 8, 10, 20 };
static int fade_in_count = 1;
@@ -352,26 +341,6 @@
{
sim_remote_backlight(0);
}
-#else
-#ifndef TARGET_TREE
-static void __remote_backlight_on(void)
-{
-#if defined(IRIVER_H300_SERIES)
- and_l(~0x00000002, &GPIO1_OUT);
-#else
- and_l(~0x00000800, &GPIO_OUT);
-#endif
-}
-
-static void __remote_backlight_off(void)
-{
-#if defined(IRIVER_H300_SERIES)
- or_l(0x00000002, &GPIO1_OUT);
-#else
- or_l(0x00000800, &GPIO_OUT);
-#endif
-}
-#endif /* TARGET_TREE */
#endif /* SIMULATOR */
#endif /* HAVE_REMOTE_LCD */
diff --git a/firmware/drivers/adc.c b/firmware/drivers/adc.c
index 646509b..388ff66 100644
--- a/firmware/drivers/adc.c
+++ b/firmware/drivers/adc.c
@@ -108,135 +108,6 @@
sleep(2); /* Ensure valid readings when adc_init returns */
}
-#elif CONFIG_CPU == MCF5249
-static unsigned char adcdata[NUM_ADC_CHANNELS];
-
-#ifdef IRIVER_H300_SERIES
-static int adcc2_parms[] =
-{
- [ADC_BUTTONS] = 0x80 | (5 << 1) | 1, /* ADCIN2 */
- [ADC_REMOTE] = 0x80 | (6 << 1) | 1, /* ADCIN3 */
- [ADC_BATTERY] = 0x80 | (0 << 1) | 1, /* BATVOLT, resistive divider */
- [ADC_REMOTEDETECT] = 0x80 | (2 << 1) | 1, /* ADCIN1, resistive divider */
-};
-
-unsigned short adc_scan(int channel)
-{
- int level = set_irq_level(HIGHEST_IRQ_LEVEL);
- unsigned char data;
-
- pcf50606_write(0x2f, adcc2_parms[channel]);
- data = pcf50606_read(0x30);
-
- adcdata[channel] = data;
-
- set_irq_level(level);
- return data;
-}
-#else
-
-#define CS_LO and_l(~0x80, &GPIO_OUT)
-#define CS_HI or_l(0x80, &GPIO_OUT)
-#define CLK_LO and_l(~0x00400000, &GPIO_OUT)
-#define CLK_HI or_l(0x00400000, &GPIO_OUT)
-#define DO (GPIO_READ & 0x80000000)
-#define DI_LO and_l(~0x00200000, &GPIO_OUT)
-#define DI_HI or_l(0x00200000, &GPIO_OUT)
-
-/* delay loop */
-#define DELAY do { int _x; for(_x=0;_x<10;_x++);} while (0)
-
-unsigned short adc_scan(int channel)
-{
- unsigned char data = 0;
- int i;
-
- CS_LO;
-
- DI_HI; /* Start bit */
- DELAY;
- CLK_HI;
- DELAY;
- CLK_LO;
-
- DI_HI; /* Single channel */
- DELAY;
- CLK_HI;
- DELAY;
- CLK_LO;
-
- if(channel & 1) /* LSB of channel number */
- DI_HI;
- else
- DI_LO;
- DELAY;
- CLK_HI;
- DELAY;
- CLK_LO;
-
- if(channel & 2) /* MSB of channel number */
- DI_HI;
- else
- DI_LO;
- DELAY;
- CLK_HI;
- DELAY;
- CLK_LO;
-
- DELAY;
-
- for(i = 0;i < 8;i++) /* 8 bits of data */
- {
- CLK_HI;
- DELAY;
- CLK_LO;
- DELAY;
- data <<= 1;
- data |= DO?1:0;
- }
-
- CS_HI;
-
- adcdata[channel] = data;
-
- return data;
-}
-#endif
-
-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_REMOTEDETECT); /* Temporary. Remove when the remote
- detection feels stable. */
- }
-}
-
-void adc_init(void)
-{
-#ifndef IRIVER_H300_SERIES
- or_l(0x80600080, &GPIO_FUNCTION); /* GPIO7: CS
- GPIO21: Data In (to the ADC)
- GPIO22: CLK
- GPIO31: Data Out (from the ADC) */
- or_l(0x00600080, &GPIO_ENABLE);
- or_l(0x80, &GPIO_OUT); /* CS high */
- and_l(~0x00400000, &GPIO_OUT); /* CLK low */
-#endif
-
- adc_scan(ADC_BATTERY);
-
- tick_add_task(adc_tick);
-}
#elif CONFIG_CPU == TCC730
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c
index babbab0..39827f7 100644
--- a/firmware/drivers/ata.c
+++ b/firmware/drivers/ata.c
@@ -1476,12 +1476,6 @@
/* state HRR1 */
or_b(0x02, &PADRH); /* negate _RESET */
sleep(1); /* > 2ms */
-#elif defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
- and_l(~0x00080000, &GPIO_OUT);
- sleep(1); /* > 25us */
-
- or_l(0x00080000, &GPIO_OUT);
- sleep(1); /* > 25us */
#elif CONFIG_CPU == TCC730
P6 &= ~0x40;
@@ -1627,14 +1621,6 @@
or_b(0x80, &PADRL); /* disable ATA */
or_b(0x80, &PAIORL);
-#elif defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
- if(on)
- and_l(~0x0040000, &GPIO_OUT);
- else
- or_l(0x0040000, &GPIO_OUT);
-
- or_l(0x00040000, &GPIO_ENABLE);
- or_l(0x00040000, &GPIO_FUNCTION);
#elif CONFIG_CPU == TCC730
#endif
@@ -1788,8 +1774,6 @@
bool coldstart = ata_is_coldstart();
#elif CONFIG_CPU == TCC730
bool coldstart = (P1 & 0x80) == 0;
-#elif defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
- bool coldstart = (GPIO_FUNCTION & 0x00080000) == 0;
#else
bool coldstart = (PACR2 & 0x4000) != 0;
#endif
diff --git a/firmware/export/adc.h b/firmware/export/adc.h
index 95728d4..4dced55 100644
--- a/firmware/export/adc.h
+++ b/firmware/export/adc.h
@@ -24,28 +24,6 @@
#ifdef TARGET_TREE
#include "adc-target.h"
-#elif defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
-#define NUM_ADC_CHANNELS 4
-
-#define ADC_BUTTONS 0
-#define ADC_REMOTE 1
-#define ADC_BATTERY 2
-#define ADC_REMOTEDETECT 3
-#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */
-
-/* ADC values for different remote control types */
-#ifdef IRIVER_H100_SERIES
-#define ADCVAL_H300_LCD_REMOTE 0x5E
-#define ADCVAL_H100_LCD_REMOTE 0x96
-#define ADCVAL_H300_LCD_REMOTE_HOLD 0xCC
-#define ADCVAL_H100_LCD_REMOTE_HOLD 0xEA
-#else /* H300 series */
-#define ADCVAL_H300_LCD_REMOTE 0x35
-#define ADCVAL_H100_LCD_REMOTE 0x54
-#define ADCVAL_H300_LCD_REMOTE_HOLD 0x72
-#define ADCVAL_H100_LCD_REMOTE_HOLD 0x83
-#endif
-
#elif defined(IRIVER_IFP7XX)
#define NUM_ADC_CHANNELS 5
@@ -100,9 +78,4 @@
unsigned short adc_read(int channel);
void adc_init(void);
-#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
-/* Force a scan now */
-unsigned short adc_scan(int channel);
-#endif
-
#endif /* _ADC_H_ */
diff --git a/firmware/export/config-h100.h b/firmware/export/config-h100.h
index 12f1066..6f74078 100644
--- a/firmware/export/config-h100.h
+++ b/firmware/export/config-h100.h
@@ -2,6 +2,8 @@
#error "re-run configure this just so wrong"
#endif
+#define TARGET_TREE /* this target is using the target tree system */
+
/*
* This config file is for iriver iHP-100, iHP-110, iHP-115
*/
@@ -145,6 +147,13 @@
#endif /* !SIMULATOR */
+#define DEFAULT_CONTRAST_SETTING 40
+#define MIN_CONTRAST_SETTING 5
+#define MAX_CONTRAST_SETTING 63
+#define DEFAULT_REMOTE_CONTRAST_SETTING 42
+#define MIN_REMOTE_CONTRAST_SETTING MIN_CONTRAST_SETTING
+#define MAX_REMOTE_CONTRAST_SETTING MAX_CONTRAST_SETTING
+
/* Define this for S/PDIF input available */
#define HAVE_SPDIF_IN
diff --git a/firmware/export/config-h120.h b/firmware/export/config-h120.h
index 21451dc..1476102 100644
--- a/firmware/export/config-h120.h
+++ b/firmware/export/config-h120.h
@@ -1,3 +1,4 @@
+#define TARGET_TREE /* this target is using the target tree system */
/*
* This config file is for iriver H120 and H140
*/
@@ -142,6 +143,13 @@
#endif /* !SIMULATOR */
+#define DEFAULT_CONTRAST_SETTING 40
+#define MIN_CONTRAST_SETTING 5
+#define MAX_CONTRAST_SETTING 63
+#define DEFAULT_REMOTE_CONTRAST_SETTING 42
+#define MIN_REMOTE_CONTRAST_SETTING MIN_CONTRAST_SETTING
+#define MAX_REMOTE_CONTRAST_SETTING MAX_CONTRAST_SETTING
+
/* Define this for S/PDIF input available */
#define HAVE_SPDIF_IN
diff --git a/firmware/export/config-h300.h b/firmware/export/config-h300.h
index c9aad43..31f0f67 100644
--- a/firmware/export/config-h300.h
+++ b/firmware/export/config-h300.h
@@ -1,3 +1,4 @@
+#define TARGET_TREE /* this target is using the target tree system */
/*
* This config file is for iriver H320, H340
*/
@@ -144,8 +145,15 @@
#define HAVE_EEPROM
#endif /* SIMULATOR */
+/* Main LCD contrast range and defaults */
+#define MIN_CONTRAST_SETTING 5
+#define MAX_CONTRAST_SETTING 63
+#define DEFAULT_CONTRAST_SETTING 40
-#define DEFAULT_REMOTE_CONTRAST_SETTING 42
+/* Remote LCD contrast range and defaults */
+#define MIN_REMOTE_CONTRAST_SETTING MIN_CONTRAST_SETTING
+#define MAX_REMOTE_CONTRAST_SETTING MAX_CONTRAST_SETTING
+#define DEFAULT_REMOTE_CONTRAST_SETTING 42
/* Define this for FM radio input available */
#define HAVE_FMRADIO_IN
diff --git a/firmware/system.c b/firmware/system.c
index c597fc5..4dbc41b 100644
--- a/firmware/system.c
+++ b/firmware/system.c
@@ -376,7 +376,7 @@
/* IRQ12 SIO INT */
/* IRQ13 IIS0 INT */
/* IRQ14 IIS1 INT */
-/* IRQ15 */
+/* IRQ15 */
extra_init();
}
@@ -667,115 +667,8 @@
return oldmode;
}
-#ifndef TARGET_TREE
-#if MEM < 32
-#define MAX_REFRESH_TIMER 59
-#define NORMAL_REFRESH_TIMER 21
-#define DEFAULT_REFRESH_TIMER 4
-#else
-#define MAX_REFRESH_TIMER 29
-#define NORMAL_REFRESH_TIMER 10
-#define DEFAULT_REFRESH_TIMER 1
-#endif
-
-#ifdef IRIVER_H300_SERIES
-#define RECALC_DELAYS(f) \
- pcf50606_i2c_recalc_delay(f)
-#else
-#define RECALC_DELAYS(f)
-#endif
-
-#ifdef HAVE_SERIAL
-#define BAUD_RATE 57600
-#define BAUDRATE_DIV_DEFAULT (CPUFREQ_DEFAULT/(BAUD_RATE*32*2))
-#define BAUDRATE_DIV_NORMAL (CPUFREQ_NORMAL/(BAUD_RATE*32*2))
-#define BAUDRATE_DIV_MAX (CPUFREQ_MAX/(BAUD_RATE*32*2))
-#endif
-
-void set_cpu_frequency (long) __attribute__ ((section (".icode")));
-void set_cpu_frequency(long frequency)
-{
- switch(frequency)
- {
- case CPUFREQ_MAX:
- DCR = (0x8200 | DEFAULT_REFRESH_TIMER);
- /* Refresh timer for bypass frequency */
- PLLCR &= ~1; /* Bypass mode */
- timers_adjust_prescale(CPUFREQ_DEFAULT_MULT, false);
- RECALC_DELAYS(CPUFREQ_MAX);
- PLLCR = 0x11c56005;
- CSCR0 = 0x00001180; /* Flash: 4 wait states */
- CSCR1 = 0x00000980; /* LCD: 2 wait states */
-#if CONFIG_USBOTG == USBOTG_ISP1362
- CSCR3 = 0x00002180; /* USBOTG: 8 wait states */
-#endif
- while(!(PLLCR & 0x80000000)) {}; /* Wait until the PLL has locked.
- This may take up to 10ms! */
- timers_adjust_prescale(CPUFREQ_MAX_MULT, true);
- DCR = (0x8200 | MAX_REFRESH_TIMER); /* Refresh timer */
- cpu_frequency = CPUFREQ_MAX;
- IDECONFIG1 = 0x10100000 | (1 << 13) | (2 << 10);
- /* SRE active on write (H300 USBOTG) | BUFEN2 enable | CS2Post | CS2Pre */
- IDECONFIG2 = 0x40000 | (2 << 8); /* TA enable + CS2wait */
-
-#ifdef HAVE_SERIAL
- UBG10 = BAUDRATE_DIV_MAX >> 8;
- UBG20 = BAUDRATE_DIV_MAX & 0xff;
-#endif
- break;
-
- case CPUFREQ_NORMAL:
- DCR = (DCR & ~0x01ff) | DEFAULT_REFRESH_TIMER;
- /* Refresh timer for bypass frequency */
- PLLCR &= ~1; /* Bypass mode */
- timers_adjust_prescale(CPUFREQ_DEFAULT_MULT, false);
- RECALC_DELAYS(CPUFREQ_NORMAL);
- PLLCR = 0x13c5e005;
- CSCR0 = 0x00000580; /* Flash: 1 wait state */
- CSCR1 = 0x00000180; /* LCD: 0 wait states */
-#if CONFIG_USBOTG == USBOTG_ISP1362
- CSCR3 = 0x00000580; /* USBOTG: 1 wait state */
-#endif
- while(!(PLLCR & 0x80000000)) {}; /* Wait until the PLL has locked.
- This may take up to 10ms! */
- timers_adjust_prescale(CPUFREQ_NORMAL_MULT, true);
- DCR = (0x8000 | NORMAL_REFRESH_TIMER); /* Refresh timer */
- cpu_frequency = CPUFREQ_NORMAL;
- IDECONFIG1 = 0x10100000 | (0 << 13) | (1 << 10);
- /* SRE active on write (H300 USBOTG) | BUFEN2 enable | CS2Post | CS2Pre */
- IDECONFIG2 = 0x40000 | (0 << 8); /* TA enable + CS2wait */
-
-#ifdef HAVE_SERIAL
- UBG10 = BAUDRATE_DIV_NORMAL >> 8;
- UBG20 = BAUDRATE_DIV_NORMAL & 0xff;
-#endif
- break;
- default:
- DCR = (DCR & ~0x01ff) | DEFAULT_REFRESH_TIMER;
- /* Refresh timer for bypass frequency */
- PLLCR &= ~1; /* Bypass mode */
- timers_adjust_prescale(CPUFREQ_DEFAULT_MULT, true);
- RECALC_DELAYS(CPUFREQ_DEFAULT);
- PLLCR = 0x10c00200; /* Power down PLL, but keep CLSEL and CRSEL */
- CSCR0 = 0x00000180; /* Flash: 0 wait states */
- CSCR1 = 0x00000180; /* LCD: 0 wait states */
-#if CONFIG_USBOTG == USBOTG_ISP1362
- CSCR3 = 0x00000180; /* USBOTG: 0 wait states */
-#endif
- DCR = (0x8000 | DEFAULT_REFRESH_TIMER); /* Refresh timer */
- cpu_frequency = CPUFREQ_DEFAULT;
- IDECONFIG1 = 0x10100000 | (0 << 13) | (1 << 10);
- /* SRE active on write (H300 USBOTG) | BUFEN2 enable | CS2Post | CS2Pre */
- IDECONFIG2 = 0x40000 | (0 << 8); /* TA enable + CS2wait */
-
-#ifdef HAVE_SERIAL
- UBG10 = BAUDRATE_DIV_DEFAULT >> 8;
- UBG20 = BAUDRATE_DIV_DEFAULT & 0xff;
-#endif
- break;
- }
-}
-#endif
+/* void set_cpu_frequency(long frequency) is in
+ target tree for all 3 coldfire targets */
#elif CONFIG_CPU == SH7034
#include "led.h"
diff --git a/firmware/target/coldfire/iriver/ata-iriver.c b/firmware/target/coldfire/iriver/ata-iriver.c
new file mode 100644
index 0000000..82dae32
--- /dev/null
+++ b/firmware/target/coldfire/iriver/ata-iriver.c
@@ -0,0 +1,66 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 "kernel.h"
+#include "system.h"
+#include "power.h"
+#include "pcf50606.h"
+
+void ata_reset(void)
+{
+ and_l(~0x00080000, &GPIO_OUT);
+ sleep(1); /* > 25us */
+
+ or_l(0x00080000, &GPIO_OUT);
+ sleep(1); /* > 25us */
+}
+
+void ata_enable(bool on)
+{
+ if(on)
+ and_l(~0x0040000, &GPIO_OUT);
+ else
+ or_l(0x0040000, &GPIO_OUT);
+
+ or_l(0x00040000, &GPIO_ENABLE);
+ or_l(0x00040000, &GPIO_FUNCTION);
+}
+
+bool ata_is_coldstart(void)
+{
+ return (GPIO_FUNCTION & 0x00080000) == 0;
+}
+
+void ata_device_init(void)
+{
+#ifdef HAVE_ATA_LED_CTRL
+ /* Enable disk LED & ISD chip power control */
+ and_l(~0x0000240, &GPIO_OUT);
+ or_l(0x00000240, &GPIO_ENABLE);
+ or_l(0x00000200, &GPIO_FUNCTION);
+#endif
+
+ /* ATA reset */
+ or_l(0x00080000, &GPIO_OUT);
+ or_l(0x00080000, &GPIO_ENABLE);
+ or_l(0x00080000, &GPIO_FUNCTION);
+
+}
diff --git a/firmware/target/coldfire/iriver/ata-target.h b/firmware/target/coldfire/iriver/ata-target.h
new file mode 100644
index 0000000..1801a7d
--- /dev/null
+++ b/firmware/target/coldfire/iriver/ata-target.h
@@ -0,0 +1,26 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 ATA_TARGET_H
+#define ATA_TARGET_H
+
+void ata_reset(void);
+void ata_device_init(void);
+bool ata_is_coldstart(void);
+
+#endif
diff --git a/firmware/target/coldfire/iriver/backlight-target.h b/firmware/target/coldfire/iriver/backlight-target.h
new file mode 100644
index 0000000..262650a
--- /dev/null
+++ b/firmware/target/coldfire/iriver/backlight-target.h
@@ -0,0 +1,27 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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
+
+void __backlight_on(void);
+void __backlight_off(void);
+void __remote_backlight_on(void);
+void __remote_backlight_off(void);
+
+#endif
diff --git a/firmware/target/coldfire/iriver/h100/adc-h100.c b/firmware/target/coldfire/iriver/h100/adc-h100.c
new file mode 100644
index 0000000..b29a224
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h100/adc-h100.c
@@ -0,0 +1,117 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 char adcdata[NUM_ADC_CHANNELS];
+
+
+#define CS_LO and_l(~0x80, &GPIO_OUT)
+#define CS_HI or_l(0x80, &GPIO_OUT)
+#define CLK_LO and_l(~0x00400000, &GPIO_OUT)
+#define CLK_HI or_l(0x00400000, &GPIO_OUT)
+#define DO (GPIO_READ & 0x80000000)
+#define DI_LO and_l(~0x00200000, &GPIO_OUT)
+#define DI_HI or_l(0x00200000, &GPIO_OUT)
+
+/* delay loop */
+#define DELAY do { int _x; for(_x=0;_x<10;_x++);} while (0)
+
+unsigned short adc_scan(int channel)
+{
+ unsigned char data = 0;
+ int i;
+
+ CS_LO;
+
+ DI_HI; /* Start bit */
+ DELAY;
+ CLK_HI;
+ DELAY;
+ CLK_LO;
+
+ DI_HI; /* Single channel */
+ DELAY;
+ CLK_HI;
+ DELAY;
+ CLK_LO;
+
+ if(channel & 1) /* LSB of channel number */
+ DI_HI;
+ else
+ DI_LO;
+ DELAY;
+ CLK_HI;
+ DELAY;
+ CLK_LO;
+
+ if(channel & 2) /* MSB of channel number */
+ DI_HI;
+ else
+ DI_LO;
+ DELAY;
+ CLK_HI;
+ DELAY;
+ CLK_LO;
+
+ DELAY;
+
+ for(i = 0;i < 8;i++) /* 8 bits of data */
+ {
+ CLK_HI;
+ DELAY;
+ CLK_LO;
+ DELAY;
+ data <<= 1;
+ data |= DO?1:0;
+ }
+
+ CS_HI;
+
+ adcdata[channel] = data;
+
+ return 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_REMOTEDETECT); /* Temporary. Remove when the remote
+ detection feels stable. */
+ }
+}
+
+void adc_init(void)
+{
+ adc_scan(ADC_BATTERY);
+
+ tick_add_task(adc_tick);
+}
diff --git a/firmware/target/coldfire/iriver/h100/adc-target.h b/firmware/target/coldfire/iriver/h100/adc-target.h
new file mode 100644
index 0000000..54e7bc9
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h100/adc-target.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Linus Nielsen Feltzing
+ *
+ * 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.
+ *
+ ****************************************************************************/
+/* for the iriver h1x0 */
+
+#ifndef _ADC_TARGET_H_
+#define _ADC_TARGET_H_
+
+#define NUM_ADC_CHANNELS 4
+
+#define ADC_BUTTONS 0
+#define ADC_REMOTE 1
+#define ADC_BATTERY 2
+#define ADC_REMOTEDETECT 3
+#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */
+
+/* ADC values for different remote control types */
+#define ADCVAL_H300_LCD_REMOTE 0x5E
+#define ADCVAL_H100_LCD_REMOTE 0x96
+#define ADCVAL_H300_LCD_REMOTE_HOLD 0xCC
+#define ADCVAL_H100_LCD_REMOTE_HOLD 0xEA
+
+/* Force a scan now */
+unsigned short adc_scan(int channel);
+
+#endif /* _ADC_TARGET_H_ */
diff --git a/firmware/target/coldfire/iriver/h100/backlight-h100.c b/firmware/target/coldfire/iriver/h100/backlight-h100.c
new file mode 100644
index 0000000..8ceac8a
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h100/backlight-h100.c
@@ -0,0 +1,45 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 "kernel.h"
+#include "thread.h"
+#include "system.h"
+#include "backlight.h"
+#include "lcd.h"
+
+void __backlight_on(void)
+{
+ and_l(~0x00020000, &GPIO1_OUT);
+}
+
+void __backlight_off(void)
+{
+ or_l(0x00020000, &GPIO1_OUT);
+}
+
+void __remote_backlight_on(void)
+{
+ and_l(~0x00000800, &GPIO_OUT);
+}
+
+void __remote_backlight_off(void)
+{
+ or_l(0x00000800, &GPIO_OUT);
+}
diff --git a/firmware/target/coldfire/iriver/h100/power-h100.c b/firmware/target/coldfire/iriver/h100/power-h100.c
new file mode 100644
index 0000000..0714ab2
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h100/power-h100.c
@@ -0,0 +1,143 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Linus Nielsen Feltzing
+ *
+ * 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 "kernel.h"
+#include "system.h"
+#include "power.h"
+
+
+#ifdef CONFIG_TUNER
+
+static bool powered = false;
+
+bool radio_powered(void)
+{
+ return powered;
+}
+
+bool radio_power(bool status)
+{
+ bool old_status = powered;
+ powered = status;
+ return old_status;
+}
+
+#endif /* #ifdef CONFIG_TUNER */
+
+#ifndef SIMULATOR
+
+void power_init(void)
+{
+ or_l(0x00080000, &GPIO1_OUT);
+ or_l(0x00080000, &GPIO1_ENABLE);
+ or_l(0x00080000, &GPIO1_FUNCTION);
+
+#ifndef BOOTLOADER
+ /* The boot loader controls the power */
+ ide_power_enable(true);
+#endif
+ or_l(0x80000000, &GPIO_ENABLE);
+ or_l(0x80000000, &GPIO_FUNCTION);
+#ifdef HAVE_SPDIF_POWER
+ spdif_power_enable(false);
+#endif
+}
+
+
+bool charger_inserted(void)
+{
+ return (GPIO1_READ & 0x00400000)?true:false;
+}
+/* Returns true if the unit is charging the batteries. */
+bool charging_state(void) {
+ return charger_inserted();
+}
+
+#ifdef HAVE_SPDIF_POWER
+void spdif_power_enable(bool on)
+{
+ or_l(0x01000000, &GPIO1_FUNCTION);
+ or_l(0x01000000, &GPIO1_ENABLE);
+
+#ifdef SPDIF_POWER_INVERTED
+ if(!on)
+#else
+ if(on)
+#endif
+ and_l(~0x01000000, &GPIO1_OUT);
+ else
+ or_l(0x01000000, &GPIO1_OUT);
+}
+#endif
+
+void ide_power_enable(bool on)
+{
+ if(on)
+ and_l(~0x80000000, &GPIO_OUT);
+ else
+ or_l(0x80000000, &GPIO_OUT);
+}
+
+
+bool ide_powered(void)
+{
+ return (GPIO_OUT & 0x80000000)?false:true;
+}
+
+
+void power_off(void)
+{
+ set_irq_level(HIGHEST_IRQ_LEVEL);
+ and_l(~0x00080000, &GPIO1_OUT);
+ asm("halt");
+ while(1)
+ yield();
+}
+
+#else
+
+bool charger_inserted(void)
+{
+ return false;
+}
+
+void charger_enable(bool on)
+{
+ (void)on;
+}
+
+void power_off(void)
+{
+}
+
+void ide_power_enable(bool on)
+{
+ (void)on;
+}
+
+#ifdef HAVE_SPDIF_POWER
+void spdif_power_enable(bool on)
+{
+ (void)on;
+}
+#endif
+
+#endif /* SIMULATOR */
diff --git a/firmware/target/coldfire/iriver/h100/usb-h100.c b/firmware/target/coldfire/iriver/h100/usb-h100.c
new file mode 100644
index 0000000..3b00e96
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h100/usb-h100.c
@@ -0,0 +1,51 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 <stdbool.h>
+#include "cpu.h"
+#include "system.h"
+#include "kernel.h"
+
+void usb_init_device(void)
+{
+ or_l(0x00000080, &GPIO1_FUNCTION); /* GPIO39 is the USB detect input */
+ and_l(~0x01000040, &GPIO_OUT); /* GPIO24 is the Cypress chip power */
+ or_l(0x01000040, &GPIO_ENABLE);
+ or_l(0x01000040, &GPIO_FUNCTION);
+}
+
+bool usb_detect(void)
+{
+ return (GPIO1_READ & 0x80)?true:false;
+}
+
+void usb_enable(bool on)
+{
+ if(on)
+ {
+ /* Power on the Cypress chip */
+ or_l(0x01000040, &GPIO_OUT);
+ sleep(2);
+ }
+ else
+ {
+ /* Power off the Cypress chip */
+ and_l(~0x01000040, &GPIO_OUT);
+ }
+}
diff --git a/firmware/target/coldfire/iriver/h300/adc-h300.c b/firmware/target/coldfire/iriver/h300/adc-h300.c
new file mode 100644
index 0000000..31702ea
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h300/adc-h300.c
@@ -0,0 +1,83 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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"
+#include "pcf50606.h"
+
+static unsigned char adcdata[NUM_ADC_CHANNELS];
+
+static int adcc2_parms[] =
+{
+ [ADC_BUTTONS] = 0x80 | (5 << 1) | 1, /* ADCIN2 */
+ [ADC_REMOTE] = 0x80 | (6 << 1) | 1, /* ADCIN3 */
+ [ADC_BATTERY] = 0x80 | (0 << 1) | 1, /* BATVOLT, resistive divider */
+ [ADC_REMOTEDETECT] = 0x80 | (2 << 1) | 1, /* ADCIN1, resistive divider */
+};
+
+unsigned short adc_scan(int channel)
+{
+ int level = set_irq_level(HIGHEST_IRQ_LEVEL);
+ unsigned char data;
+
+ pcf50606_write(0x2f, adcc2_parms[channel]);
+ data = pcf50606_read(0x30);
+
+ adcdata[channel] = data;
+
+ set_irq_level(level);
+ return 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_REMOTEDETECT); /* Temporary. Remove when the remote
+ detection feels stable. */
+ }
+}
+
+void adc_init(void)
+{
+ or_l(0x80600080, &GPIO_FUNCTION); /* GPIO7: CS
+ GPIO21: Data In (to the ADC)
+ GPIO22: CLK
+ GPIO31: Data Out (from the ADC) */
+ or_l(0x00600080, &GPIO_ENABLE);
+ or_l(0x80, &GPIO_OUT); /* CS high */
+ and_l(~0x00400000, &GPIO_OUT); /* CLK low */
+
+ adc_scan(ADC_BATTERY);
+
+ tick_add_task(adc_tick);
+}
diff --git a/firmware/target/coldfire/iriver/h300/adc-target.h b/firmware/target/coldfire/iriver/h300/adc-target.h
new file mode 100644
index 0000000..0420090
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h300/adc-target.h
@@ -0,0 +1,41 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Linus Nielsen Feltzing
+ *
+ * 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.
+ *
+ ****************************************************************************/
+/* for the iriver h3x0 */
+
+#ifndef _ADC_TARGET_H_
+#define _ADC_TARGET_H_
+
+#define NUM_ADC_CHANNELS 4
+
+#define ADC_BUTTONS 0
+#define ADC_REMOTE 1
+#define ADC_BATTERY 2
+#define ADC_REMOTEDETECT 3
+#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */
+
+/* ADC values for different remote control types */
+#define ADCVAL_H300_LCD_REMOTE 0x35
+#define ADCVAL_H100_LCD_REMOTE 0x54
+#define ADCVAL_H300_LCD_REMOTE_HOLD 0x72
+#define ADCVAL_H100_LCD_REMOTE_HOLD 0x83
+
+/* Force a scan now */
+unsigned short adc_scan(int channel);
+
+#endif /* _ADC_TARGET_H_ */
diff --git a/firmware/target/coldfire/iriver/h300/backlight-h300.c b/firmware/target/coldfire/iriver/h300/backlight-h300.c
new file mode 100644
index 0000000..d5322c2
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h300/backlight-h300.c
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 "kernel.h"
+#include "thread.h"
+#include "system.h"
+#include "backlight.h"
+#include "pcf50606.h"
+#include "lcd.h"
+
+void __backlight_on(void)
+{
+ lcd_enable(true);
+ sleep(HZ/100); /* lcd needs time - avoid flashing for dark screens */
+ or_l(0x00020000, &GPIO1_OUT);
+}
+
+void __backlight_off(void)
+{
+ and_l(~0x00020000, &GPIO1_OUT);
+ lcd_enable(false);
+}
+
+void __remote_backlight_on(void)
+{
+ and_l(~0x00000002, &GPIO1_OUT);
+}
+
+void __remote_backlight_off(void)
+{
+ or_l(0x00000002, &GPIO1_OUT);
+}
diff --git a/firmware/target/coldfire/iriver/h300/power-h300.c b/firmware/target/coldfire/iriver/h300/power-h300.c
new file mode 100644
index 0000000..7c95aaf
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h300/power-h300.c
@@ -0,0 +1,101 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2002 by Linus Nielsen Feltzing
+ *
+ * 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 "kernel.h"
+#include "system.h"
+#include "power.h"
+#include "pcf50606.h"
+
+
+#ifdef CONFIG_TUNER
+
+static bool powered = false;
+
+bool radio_powered(void)
+{
+ return powered;
+}
+
+bool radio_power(bool status)
+{
+ bool old_status = powered;
+ powered = status;
+ return old_status;
+}
+
+#endif /* #ifdef CONFIG_TUNER */
+
+#ifndef SIMULATOR
+
+void power_init(void)
+{
+ or_l(0x00080000, &GPIO1_OUT);
+ or_l(0x00080000, &GPIO1_ENABLE);
+ or_l(0x00080000, &GPIO1_FUNCTION);
+
+#ifndef BOOTLOADER
+ /* The boot loader controls the power */
+ ide_power_enable(true);
+#endif
+ or_l(0x80000000, &GPIO_ENABLE);
+ or_l(0x80000000, &GPIO_FUNCTION);
+ pcf50606_init();
+}
+
+
+#ifdef CONFIG_CHARGING
+bool charger_inserted(void)
+{
+ return (GPIO1_READ & 0x00400000)?true:false;
+}
+#endif /* CONFIG_CHARGING */
+
+/* Returns true if the unit is charging the batteries. */
+bool charging_state(void) {
+ return (GPIO_READ & 0x00800000)?true:false;
+}
+
+
+void ide_power_enable(bool on)
+{
+ if(on)
+ and_l(~0x80000000, &GPIO_OUT);
+ else
+ or_l(0x80000000, &GPIO_OUT);
+}
+
+
+bool ide_powered(void)
+{
+ return (GPIO_OUT & 0x80000000)?false:true;
+}
+
+
+void power_off(void)
+{
+ set_irq_level(HIGHEST_IRQ_LEVEL);
+ and_l(~0x00080000, &GPIO1_OUT);
+ asm("halt");
+ while(1)
+ yield();
+}
+
+#endif /* SIMULATOR */
diff --git a/firmware/target/coldfire/iriver/h300/usb-h300.c b/firmware/target/coldfire/iriver/h300/usb-h300.c
new file mode 100644
index 0000000..d08cc24
--- /dev/null
+++ b/firmware/target/coldfire/iriver/h300/usb-h300.c
@@ -0,0 +1,56 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 <stdbool.h>
+#include "cpu.h"
+#include "system.h"
+#include "kernel.h"
+
+void usb_init_device(void)
+{
+ or_l(0x00000080, &GPIO1_FUNCTION); /* GPIO39 is the USB detect input */
+ /* ISD300 3.3V ON */
+ or_l(8,&GPIO1_FUNCTION);
+ or_l(8,&GPIO1_OUT);
+ or_l(8,&GPIO1_ENABLE);
+
+ /* Tristate the SCK/SDA to the ISD300 config EEPROM */
+ and_l(~0x03000000, &GPIO_ENABLE);
+ or_l(0x03000000, &GPIO_FUNCTION);
+}
+
+bool usb_detect(void)
+{
+ return (GPIO1_READ & 0x80)?true:false;
+}
+
+void usb_enable(bool on)
+{
+ if(on)
+ {
+ /* Power on the Cypress chip */
+ and_l(~0x00000008,&GPIO1_OUT);
+ sleep(2);
+ }
+ else
+ {
+ /* Power off the Cypress chip */
+ or_l(0x00000008,&GPIO1_OUT);
+ }
+}
diff --git a/firmware/target/coldfire/iriver/system-iriver.c b/firmware/target/coldfire/iriver/system-iriver.c
new file mode 100644
index 0000000..5f404fb
--- /dev/null
+++ b/firmware/target/coldfire/iriver/system-iriver.c
@@ -0,0 +1,133 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 "kernel.h"
+#include "system.h"
+#include "power.h"
+#include "timer.h"
+#include "pcf50606.h"
+
+#if MEM < 32
+#define MAX_REFRESH_TIMER 59
+#define NORMAL_REFRESH_TIMER 21
+#define DEFAULT_REFRESH_TIMER 4
+#else
+#define MAX_REFRESH_TIMER 29
+#define NORMAL_REFRESH_TIMER 10
+#define DEFAULT_REFRESH_TIMER 1
+#endif
+
+#ifdef IRIVER_H300_SERIES
+#define RECALC_DELAYS(f) \
+ pcf50606_i2c_recalc_delay(f)
+#else
+#define RECALC_DELAYS(f)
+#endif
+
+#ifdef HAVE_SERIAL
+#define BAUD_RATE 57600
+#define BAUDRATE_DIV_DEFAULT (CPUFREQ_DEFAULT/(BAUD_RATE*32*2))
+#define BAUDRATE_DIV_NORMAL (CPUFREQ_NORMAL/(BAUD_RATE*32*2))
+#define BAUDRATE_DIV_MAX (CPUFREQ_MAX/(BAUD_RATE*32*2))
+#endif
+
+void set_cpu_frequency (long) __attribute__ ((section (".icode")));
+void set_cpu_frequency(long frequency)
+{
+ switch(frequency)
+ {
+ case CPUFREQ_MAX:
+ DCR = (0x8200 | DEFAULT_REFRESH_TIMER);
+ /* Refresh timer for bypass frequency */
+ PLLCR &= ~1; /* Bypass mode */
+ timers_adjust_prescale(CPUFREQ_DEFAULT_MULT, false);
+ RECALC_DELAYS(CPUFREQ_MAX);
+ PLLCR = 0x11c56005;
+ CSCR0 = 0x00001180; /* Flash: 4 wait states */
+ CSCR1 = 0x00000980; /* LCD: 2 wait states */
+#if CONFIG_USBOTG == USBOTG_ISP1362
+ CSCR3 = 0x00002180; /* USBOTG: 8 wait states */
+#endif
+ while(!(PLLCR & 0x80000000)) {}; /* Wait until the PLL has locked.
+ This may take up to 10ms! */
+ timers_adjust_prescale(CPUFREQ_MAX_MULT, true);
+ DCR = (0x8200 | MAX_REFRESH_TIMER); /* Refresh timer */
+ cpu_frequency = CPUFREQ_MAX;
+ IDECONFIG1 = 0x10100000 | (1 << 13) | (2 << 10);
+ /* SRE active on write (H300 USBOTG) | BUFEN2 enable | CS2Post | CS2Pre */
+ IDECONFIG2 = 0x40000 | (2 << 8); /* TA enable + CS2wait */
+
+#ifdef HAVE_SERIAL
+ UBG10 = BAUDRATE_DIV_MAX >> 8;
+ UBG20 = BAUDRATE_DIV_MAX & 0xff;
+#endif
+ break;
+
+ case CPUFREQ_NORMAL:
+ DCR = (DCR & ~0x01ff) | DEFAULT_REFRESH_TIMER;
+ /* Refresh timer for bypass frequency */
+ PLLCR &= ~1; /* Bypass mode */
+ timers_adjust_prescale(CPUFREQ_DEFAULT_MULT, false);
+ RECALC_DELAYS(CPUFREQ_NORMAL);
+ PLLCR = 0x13c5e005;
+ CSCR0 = 0x00000580; /* Flash: 1 wait state */
+ CSCR1 = 0x00000180; /* LCD: 0 wait states */
+#if CONFIG_USBOTG == USBOTG_ISP1362
+ CSCR3 = 0x00000580; /* USBOTG: 1 wait state */
+#endif
+ while(!(PLLCR & 0x80000000)) {}; /* Wait until the PLL has locked.
+ This may take up to 10ms! */
+ timers_adjust_prescale(CPUFREQ_NORMAL_MULT, true);
+ DCR = (0x8000 | NORMAL_REFRESH_TIMER); /* Refresh timer */
+ cpu_frequency = CPUFREQ_NORMAL;
+ IDECONFIG1 = 0x10100000 | (0 << 13) | (1 << 10);
+ /* SRE active on write (H300 USBOTG) | BUFEN2 enable | CS2Post | CS2Pre */
+ IDECONFIG2 = 0x40000 | (0 << 8); /* TA enable + CS2wait */
+
+#ifdef HAVE_SERIAL
+ UBG10 = BAUDRATE_DIV_NORMAL >> 8;
+ UBG20 = BAUDRATE_DIV_NORMAL & 0xff;
+#endif
+ break;
+ default:
+ DCR = (DCR & ~0x01ff) | DEFAULT_REFRESH_TIMER;
+ /* Refresh timer for bypass frequency */
+ PLLCR &= ~1; /* Bypass mode */
+ timers_adjust_prescale(CPUFREQ_DEFAULT_MULT, true);
+ RECALC_DELAYS(CPUFREQ_DEFAULT);
+ PLLCR = 0x10c00200; /* Power down PLL, but keep CLSEL and CRSEL */
+ CSCR0 = 0x00000180; /* Flash: 0 wait states */
+ CSCR1 = 0x00000180; /* LCD: 0 wait states */
+#if CONFIG_USBOTG == USBOTG_ISP1362
+ CSCR3 = 0x00000180; /* USBOTG: 0 wait states */
+#endif
+ DCR = (0x8000 | DEFAULT_REFRESH_TIMER); /* Refresh timer */
+ cpu_frequency = CPUFREQ_DEFAULT;
+ IDECONFIG1 = 0x10100000 | (0 << 13) | (1 << 10);
+ /* SRE active on write (H300 USBOTG) | BUFEN2 enable | CS2Post | CS2Pre */
+ IDECONFIG2 = 0x40000 | (0 << 8); /* TA enable + CS2wait */
+
+#ifdef HAVE_SERIAL
+ UBG10 = BAUDRATE_DIV_DEFAULT >> 8;
+ UBG20 = BAUDRATE_DIV_DEFAULT & 0xff;
+#endif
+ break;
+ }
+}
diff --git a/firmware/target/coldfire/iriver/usb-target.h b/firmware/target/coldfire/iriver/usb-target.h
new file mode 100644
index 0000000..ab8cac6
--- /dev/null
+++ b/firmware/target/coldfire/iriver/usb-target.h
@@ -0,0 +1,24 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id$
+ *
+ * Copyright (C) 2006 by Linus Nielsen Feltzing
+ *
+ * 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 USB_TARGET_H
+#define USB_TARGET_H
+
+bool usb_init_device(void);
+
+#endif
diff --git a/firmware/usb.c b/firmware/usb.c
index f83cb44..a0ffef1 100644
--- a/firmware/usb.c
+++ b/firmware/usb.c
@@ -155,26 +155,6 @@
}
}
}
-#elif defined(USB_IRIVERSTYLE)
- if(on)
- {
- /* Power on the Cypress chip */
-#ifdef IRIVER_H100_SERIES
- or_l(0x01000040, &GPIO_OUT);
-#else
- and_l(~0x00000008,&GPIO1_OUT);
-#endif
- sleep(2);
- }
- else
- {
- /* Power off the Cypress chip */
-#ifdef IRIVER_H100_SERIES
- and_l(~0x01000040, &GPIO_OUT);
-#else
- or_l(0x00000008,&GPIO1_OUT);
-#endif
- }
#elif defined(USB_ISP1582)
/* TODO: Implement USB_ISP1582 */
(void) on;
@@ -391,9 +371,6 @@
#ifdef USB_PLAYERSTYLE
current_status = (PADR & 0x8000)?false:true;
#endif
-#ifdef USB_IRIVERSTYLE
- current_status = (GPIO1_READ & 0x80)?true:false;
-#endif
#ifdef USB_GMINISTYLE
current_status = (P5 & 0x10)?true:false;
#endif
@@ -481,24 +458,6 @@
#ifdef TARGET_TREE
usb_init_device();
-#elif defined USB_IRIVERSTYLE
- or_l(0x00000080, &GPIO1_FUNCTION); /* GPIO39 is the USB detect input */
-
-#ifdef IRIVER_H300_SERIES
- /* ISD300 3.3V ON */
- or_l(8,&GPIO1_FUNCTION);
- or_l(8,&GPIO1_OUT);
- or_l(8,&GPIO1_ENABLE);
-
- /* Tristate the SCK/SDA to the ISD300 config EEPROM */
- and_l(~0x03000000, &GPIO_ENABLE);
- or_l(0x03000000, &GPIO_FUNCTION);
-#else
- and_l(~0x01000040, &GPIO_OUT); /* GPIO24 is the Cypress chip power */
- or_l(0x01000040, &GPIO_ENABLE);
- or_l(0x01000040, &GPIO_FUNCTION);
-#endif
-
#endif
usb_enable(false);