diff options
Diffstat (limited to 'firmware/drivers')
-rw-r--r-- | firmware/drivers/ata.c | 40 | ||||
-rw-r--r-- | firmware/drivers/power.c | 8 |
2 files changed, 48 insertions, 0 deletions
diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index e4600e171a..8b3e54da44 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c | |||
@@ -246,6 +246,43 @@ int ide_read_register(int reg) { | |||
246 | return ide_reg_temp; | 246 | return ide_reg_temp; |
247 | } | 247 | } |
248 | 248 | ||
249 | #elif defined(TOSHIBA_GIGABEAT_F) | ||
250 | |||
251 | /* don't use sh7034 assembler routines */ | ||
252 | #define PREFER_C_READING | ||
253 | #define PREFER_C_WRITING | ||
254 | |||
255 | #define ATA_IOBASE 0x20000000 | ||
256 | #define ATA_DATA (*((volatile unsigned short*)(ATA_IOBASE))) | ||
257 | #define ATA_ERROR (*((volatile unsigned char*)(ATA_IOBASE + 0x02))) | ||
258 | #define ATA_NSECTOR (*((volatile unsigned char*)(ATA_IOBASE + 0x04))) | ||
259 | #define ATA_SECTOR (*((volatile unsigned char*)(ATA_IOBASE + 0x06))) | ||
260 | #define ATA_LCYL (*((volatile unsigned char*)(ATA_IOBASE + 0x08))) | ||
261 | #define ATA_HCYL (*((volatile unsigned char*)(ATA_IOBASE + 0x10))) | ||
262 | #define ATA_SELECT (*((volatile unsigned char*)(ATA_IOBASE + 0x12))) | ||
263 | #define ATA_COMMAND (*((volatile unsigned char*)(ATA_IOBASE + 0x14))) | ||
264 | #define ATA_CONTROL (*((volatile unsigned char*)(0x21000000 + 0x1c))) | ||
265 | |||
266 | #define STATUS_BSY 0x80 | ||
267 | #define STATUS_RDY 0x40 | ||
268 | #define STATUS_DF 0x20 | ||
269 | #define STATUS_DRQ 0x08 | ||
270 | #define STATUS_ERR 0x01 | ||
271 | #define ERROR_ABRT 0x04 | ||
272 | |||
273 | #define WRITE_PATTERN1 0xa5 | ||
274 | #define WRITE_PATTERN2 0x5a | ||
275 | #define WRITE_PATTERN3 0xaa | ||
276 | #define WRITE_PATTERN4 0x55 | ||
277 | |||
278 | #define READ_PATTERN1 0xa5 | ||
279 | #define READ_PATTERN2 0x5a | ||
280 | #define READ_PATTERN3 0xaa | ||
281 | #define READ_PATTERN4 0x55 | ||
282 | |||
283 | #define SET_REG(reg,val) reg = (val) | ||
284 | #define SET_16BITREG(reg,val) reg = (val) | ||
285 | |||
249 | #endif | 286 | #endif |
250 | 287 | ||
251 | #define ATA_FEATURE ATA_ERROR | 288 | #define ATA_FEATURE ATA_ERROR |
@@ -1429,6 +1466,9 @@ int ata_init(void) | |||
1429 | #elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) | 1466 | #elif (CONFIG_CPU == PP5002) || (CONFIG_CPU == PP5020) |
1430 | bool coldstart = false; | 1467 | bool coldstart = false; |
1431 | /* TODO: Implement coldstart variable */ | 1468 | /* TODO: Implement coldstart variable */ |
1469 | #elif defined(TOSHIBA_GIGABEAT_F) | ||
1470 | /* TODO */ | ||
1471 | bool coldstart = true; | ||
1432 | #else | 1472 | #else |
1433 | bool coldstart = (PACR2 & 0x4000) != 0; | 1473 | bool coldstart = (PACR2 & 0x4000) != 0; |
1434 | #endif | 1474 | #endif |
diff --git a/firmware/drivers/power.c b/firmware/drivers/power.c index d7750a33b2..b62121298d 100644 --- a/firmware/drivers/power.c +++ b/firmware/drivers/power.c | |||
@@ -122,6 +122,8 @@ bool charger_inserted(void) | |||
122 | /* FM or V2, can also charge from the USB port */ | 122 | /* FM or V2, can also charge from the USB port */ |
123 | return (adc_read(ADC_CHARGE_REGULATOR) < 0x1FF) || | 123 | return (adc_read(ADC_CHARGE_REGULATOR) < 0x1FF) || |
124 | (adc_read(ADC_USB_POWER) < 0x1FF); | 124 | (adc_read(ADC_USB_POWER) < 0x1FF); |
125 | #elif defined(TOSHIBA_GIGABEAT_F) | ||
126 | return false; | ||
125 | #else | 127 | #else |
126 | /* Player */ | 128 | /* Player */ |
127 | return (PADR & 1) == 0; | 129 | return (PADR & 1) == 0; |
@@ -189,6 +191,8 @@ void ide_power_enable(bool on) | |||
189 | P1 &= ~0x08; | 191 | P1 &= ~0x08; |
190 | #elif CONFIG_CPU == PNX0101 | 192 | #elif CONFIG_CPU == PNX0101 |
191 | /* no ide controller */ | 193 | /* no ide controller */ |
194 | #elif defined(TOSHIBA_GIGABEAT_F) | ||
195 | /* Gigabeat TODO */ | ||
192 | #else /* SH1 based archos */ | 196 | #else /* SH1 based archos */ |
193 | bool touched = false; | 197 | bool touched = false; |
194 | #ifdef NEEDS_ATA_POWER_ON | 198 | #ifdef NEEDS_ATA_POWER_ON |
@@ -241,6 +245,8 @@ bool ide_powered(void) | |||
241 | return true; | 245 | return true; |
242 | #elif defined(GMINI_ARCH) | 246 | #elif defined(GMINI_ARCH) |
243 | return (P1 & 0x08?true:false); | 247 | return (P1 & 0x08?true:false); |
248 | #elif defined(TOSHIBA_GIGABEAT_F) | ||
249 | return false; | ||
244 | #else /* SH1 based archos */ | 250 | #else /* SH1 based archos */ |
245 | #if defined(NEEDS_ATA_POWER_ON) || defined(HAVE_ATA_POWER_OFF) | 251 | #if defined(NEEDS_ATA_POWER_ON) || defined(HAVE_ATA_POWER_OFF) |
246 | #ifdef ATA_POWER_PLAYERSTYLE | 252 | #ifdef ATA_POWER_PLAYERSTYLE |
@@ -283,6 +289,8 @@ void power_off(void) | |||
283 | #elif defined(GMINI_ARCH) | 289 | #elif defined(GMINI_ARCH) |
284 | P1 &= ~1; | 290 | P1 &= ~1; |
285 | P1CON &= ~1; | 291 | P1CON &= ~1; |
292 | #elif defined(TOSHIBA_GIGABEAT_F) | ||
293 | /* FIXME: Can we turn the device off, or only enter sleep mode? */ | ||
286 | #else | 294 | #else |
287 | #ifdef HAVE_POWEROFF_ON_PBDR | 295 | #ifdef HAVE_POWEROFF_ON_PBDR |
288 | and_b(~0x10, &PBDRL); | 296 | and_b(~0x10, &PBDRL); |