diff options
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/drivers/mas.c | 6 | ||||
-rw-r--r-- | firmware/export/config-ondiosp.h | 4 | ||||
-rw-r--r-- | firmware/export/mas.h | 77 | ||||
-rw-r--r-- | firmware/export/mp3_playback.h | 4 | ||||
-rw-r--r-- | firmware/mp3_playback.c | 103 | ||||
-rw-r--r-- | firmware/mpeg.c | 96 |
6 files changed, 175 insertions, 115 deletions
diff --git a/firmware/drivers/mas.c b/firmware/drivers/mas.c index 9f6e0943c7..52a91c5e40 100644 --- a/firmware/drivers/mas.c +++ b/firmware/drivers/mas.c | |||
@@ -132,7 +132,7 @@ int mas_writemem(int bank, int addr, const unsigned long* src, int len) | |||
132 | 132 | ||
133 | j = 0; | 133 | j = 0; |
134 | while(len--) { | 134 | while(len--) { |
135 | #if CONFIG_HWCODEC == MAS3587F | 135 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
136 | buf[i++] = 0; | 136 | buf[i++] = 0; |
137 | buf[i++] = ptr[j+1]; | 137 | buf[i++] = ptr[j+1]; |
138 | buf[i++] = ptr[j+2]; | 138 | buf[i++] = ptr[j+2]; |
@@ -232,7 +232,7 @@ static int mas_devread(unsigned long *dest, int len) | |||
232 | if (i2c_getack()) { | 232 | if (i2c_getack()) { |
233 | for (i=0;len;i++) { | 233 | for (i=0;len;i++) { |
234 | len--; | 234 | len--; |
235 | #if CONFIG_HWCODEC == MAS3587F | 235 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
236 | i2c_inb(0); /* Dummy read */ | 236 | i2c_inb(0); /* Dummy read */ |
237 | ptr[i*4+0] = 0; | 237 | ptr[i*4+0] = 0; |
238 | ptr[i*4+1] = i2c_inb(0) & 0x0f; | 238 | ptr[i*4+1] = i2c_inb(0) & 0x0f; |
@@ -266,7 +266,7 @@ static int mas_devread(unsigned long *dest, int len) | |||
266 | return ret; | 266 | return ret; |
267 | } | 267 | } |
268 | 268 | ||
269 | #if CONFIG_HWCODEC == MAS3587F | 269 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
270 | void mas_reset(void) | 270 | void mas_reset(void) |
271 | { | 271 | { |
272 | or_b(0x01, &PAIORH); | 272 | or_b(0x01, &PAIORH); |
diff --git a/firmware/export/config-ondiosp.h b/firmware/export/config-ondiosp.h index 0a270e8ae5..e3fe6c718f 100644 --- a/firmware/export/config-ondiosp.h +++ b/firmware/export/config-ondiosp.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* define this if you have recording possibility */ | 1 | /* define this if you have recording possibility */ |
2 | #define HAVE_RECORDING 1 | 2 | /* #define HAVE_RECORDING */ |
3 | 3 | ||
4 | /* define this if you have a bitmap LCD display */ | 4 | /* define this if you have a bitmap LCD display */ |
5 | #define HAVE_LCD_BITMAP 1 | 5 | #define HAVE_LCD_BITMAP 1 |
@@ -17,7 +17,7 @@ | |||
17 | #define CONFIG_CPU SH7034 | 17 | #define CONFIG_CPU SH7034 |
18 | 18 | ||
19 | /* Define this if you have a MAS3539F */ | 19 | /* Define this if you have a MAS3539F */ |
20 | #define CONFIG_HWCODEC MAS3587F /* will be MAS3539F once prepared */ | 20 | #define CONFIG_HWCODEC MAS3539F |
21 | 21 | ||
22 | /* Define this if you have a LiIon battery */ | 22 | /* Define this if you have a LiIon battery */ |
23 | /* #define HAVE_LIION */ | 23 | /* #define HAVE_LIION */ |
diff --git a/firmware/export/mas.h b/firmware/export/mas.h index dac946ea63..f682fc676e 100644 --- a/firmware/export/mas.h +++ b/firmware/export/mas.h | |||
@@ -27,7 +27,7 @@ | |||
27 | /* | 27 | /* |
28 | MAS I2C defs | 28 | MAS I2C defs |
29 | */ | 29 | */ |
30 | #if CONFIG_HWCODEC == MAS3587F | 30 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
31 | #define MAS_ADR 0x3c | 31 | #define MAS_ADR 0x3c |
32 | #define MAS_DEV_WRITE (MAS_ADR | 0x00) | 32 | #define MAS_DEV_WRITE (MAS_ADR | 0x00) |
33 | #define MAS_DEV_READ (MAS_ADR | 0x01) | 33 | #define MAS_DEV_READ (MAS_ADR | 0x01) |
@@ -38,18 +38,18 @@ | |||
38 | #endif | 38 | #endif |
39 | 39 | ||
40 | /* registers..*/ | 40 | /* registers..*/ |
41 | #if CONFIG_HWCODEC == MAS3587F | 41 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
42 | #define MAS_DATA_WRITE 0x68 | 42 | #define MAS_DATA_WRITE 0x68 |
43 | #define MAS_DATA_READ 0x69 | 43 | #define MAS_DATA_READ 0x69 |
44 | #define MAS_CODEC_WRITE 0x6c | 44 | #define MAS_CODEC_WRITE 0x6c |
45 | #define MAS_CODEC_READ 0x6d | 45 | #define MAS_CODEC_READ 0x6d |
46 | #define MAS_CONTROL 0x6a | 46 | #define MAS_CONTROL 0x6a |
47 | #define MAS_DCCF 0x76 | 47 | #define MAS_DCCF 0x76 |
48 | #define MAS_DCFR 0x77 | 48 | #define MAS_DCFR 0x77 |
49 | #else | 49 | #else |
50 | #define MAS_DATA_WRITE 0x68 | 50 | #define MAS_DATA_WRITE 0x68 |
51 | #define MAS_DATA_READ 0x69 | 51 | #define MAS_DATA_READ 0x69 |
52 | #define MAS_CONTROL 0x6a | 52 | #define MAS_CONTROL 0x6a |
53 | #endif | 53 | #endif |
54 | 54 | ||
55 | /* | 55 | /* |
@@ -62,15 +62,15 @@ | |||
62 | #define MAS_REG_KPRESCALE 0xe7 | 62 | #define MAS_REG_KPRESCALE 0xe7 |
63 | #define MAS_REG_KBASS 0x6b | 63 | #define MAS_REG_KBASS 0x6b |
64 | #define MAS_REG_KTREBLE 0x6f | 64 | #define MAS_REG_KTREBLE 0x6f |
65 | #if CONFIG_HWCODEC == MAS3587F | 65 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
66 | #define MAS_REG_KMDB_SWITCH 0x21 | 66 | #define MAS_REG_KMDB_SWITCH 0x21 |
67 | #define MAS_REG_KMDB_STR 0x22 | 67 | #define MAS_REG_KMDB_STR 0x22 |
68 | #define MAS_REG_KMDB_HAR 0x23 | 68 | #define MAS_REG_KMDB_HAR 0x23 |
69 | #define MAS_REG_KMDB_FC 0x24 | 69 | #define MAS_REG_KMDB_FC 0x24 |
70 | #define MAS_REG_KLOUDNESS 0x1e | 70 | #define MAS_REG_KLOUDNESS 0x1e |
71 | #define MAS_REG_QPEAK_L 0x0a | 71 | #define MAS_REG_QPEAK_L 0x0a |
72 | #define MAS_REG_QPEAK_R 0x0b | 72 | #define MAS_REG_QPEAK_R 0x0b |
73 | #define MAS_REG_DQPEAK_L 0x0c | 73 | #define MAS_REG_DQPEAK_L 0x0c |
74 | #define MAS_REG_DQPEAK_R 0x0d | 74 | #define MAS_REG_DQPEAK_R 0x0d |
75 | #define MAS_REG_KAVC 0x12 | 75 | #define MAS_REG_KAVC 0x12 |
76 | #endif | 76 | #endif |
@@ -78,7 +78,7 @@ | |||
78 | /* | 78 | /* |
79 | * MAS commands | 79 | * MAS commands |
80 | */ | 80 | */ |
81 | #if CONFIG_HWCODEC == MAS3587F | 81 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
82 | #define MAS_CMD_READ_ANCILLARY 0x50 | 82 | #define MAS_CMD_READ_ANCILLARY 0x50 |
83 | #define MAS_CMD_FAST_PRG_DL 0x60 | 83 | #define MAS_CMD_FAST_PRG_DL 0x60 |
84 | #define MAS_CMD_READ_IC_VER 0x70 | 84 | #define MAS_CMD_READ_IC_VER 0x70 |
@@ -98,6 +98,55 @@ | |||
98 | #define MAS_CMD_READ_D1_MEM 0xf0 | 98 | #define MAS_CMD_READ_D1_MEM 0xf0 |
99 | #endif | 99 | #endif |
100 | 100 | ||
101 | /* | ||
102 | * MAS D0 memory cells (MAS3587F / MAS3539F) | ||
103 | */ | ||
104 | #if CONFIG_HWCODEC == MAS3587F | ||
105 | #define MAS_D0_APP_SELECT 0x7f6 | ||
106 | #define MAS_D0_APP_RUNNING 0x7f7 | ||
107 | #define MAS_D0_ENCODER_CONTROL 0x7f0 | ||
108 | #define MAS_D0_IO_CONTROL_MAIN 0x7f1 | ||
109 | #define MAS_D0_INTERFACE_CONTROL 0x7f2 | ||
110 | #define MAS_D0_OFREQ_CONTROL 0x7f3 | ||
111 | #define MAS_D0_OUT_CLK_CONFIG 0x7f4 | ||
112 | #define MAS_D0_SPD_OUT_BITS 0x7f8 | ||
113 | #define MAS_D0_SOFT_MUTE 0x7f9 | ||
114 | #define MAS_D0_OUT_LL 0x7fc | ||
115 | #define MAS_D0_OUT_LR 0x7fd | ||
116 | #define MAS_D0_OUT_RL 0x7fe | ||
117 | #define MAS_D0_OUT_RR 0x7ff | ||
118 | #define MAS_D0_MPEG_FRAME_COUNT 0xfd0 | ||
119 | #define MAS_D0_MPEG_STATUS_1 0xfd1 | ||
120 | #define MAS_D0_MPEG_STATUS_2 0xfd2 | ||
121 | #define MAS_D0_CRC_ERROR_COUNT 0xfd3 | ||
122 | |||
123 | #elif CONFIG_HWCODEC == MAS3539F | ||
124 | #define MAS_D0_APP_SELECT 0x34b | ||
125 | #define MAS_D0_APP_RUNNING 0x34c | ||
126 | /* no encoder :( */ | ||
127 | #define MAS_D0_IO_CONTROL_MAIN 0x346 | ||
128 | #define MAS_D0_INTERFACE_CONTROL 0x347 | ||
129 | #define MAS_D0_OFREQ_CONTROL 0x348 | ||
130 | #define MAS_D0_OUT_CLK_CONFIG 0x349 | ||
131 | #define MAS_D0_SPD_OUT_BITS 0x351 | ||
132 | #define MAS_D0_SOFT_MUTE 0x350 | ||
133 | #define MAS_D0_OUT_LL 0x354 | ||
134 | #define MAS_D0_OUT_LR 0x355 | ||
135 | #define MAS_D0_OUT_RL 0x356 | ||
136 | #define MAS_D0_OUT_RR 0x357 | ||
137 | #define MAS_D0_MPEG_FRAME_COUNT 0xfd0 | ||
138 | #define MAS_D0_MPEG_STATUS_1 0xfd1 | ||
139 | #define MAS_D0_MPEG_STATUS_2 0xfd2 | ||
140 | #define MAS_D0_CRC_ERROR_COUNT 0xfd3 | ||
141 | |||
142 | #else /* MAS3507D */ | ||
143 | #define MAS_D0_MPEG_FRAME_COUNT 0x300 | ||
144 | #define MAS_D0_MPEG_STATUS_1 0x301 | ||
145 | #define MAS_D0_MPEG_STATUS_2 0x302 | ||
146 | #define MAS_D0_CRC_ERROR_COUNT 0x303 | ||
147 | |||
148 | #endif | ||
149 | |||
101 | int mas_default_read(unsigned short *buf); | 150 | int mas_default_read(unsigned short *buf); |
102 | int mas_run(unsigned short address); | 151 | int mas_run(unsigned short address); |
103 | int mas_readmem(int bank, int addr, unsigned long* dest, int len); | 152 | int mas_readmem(int bank, int addr, unsigned long* dest, int len); |
diff --git a/firmware/export/mp3_playback.h b/firmware/export/mp3_playback.h index dd56940c37..456569342b 100644 --- a/firmware/export/mp3_playback.h +++ b/firmware/export/mp3_playback.h | |||
@@ -39,13 +39,13 @@ int mpeg_val2phys(int setting, int value); | |||
39 | const char *mpeg_sound_unit(int setting); | 39 | const char *mpeg_sound_unit(int setting); |
40 | int mpeg_sound_numdecimals(int setting); | 40 | int mpeg_sound_numdecimals(int setting); |
41 | int mpeg_sound_steps(int setting); | 41 | int mpeg_sound_steps(int setting); |
42 | #if CONFIG_HWCODEC == MAS3587F || defined(SIMULATOR) | 42 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) || defined(SIMULATOR) |
43 | void mpeg_set_pitch(int percent); | 43 | void mpeg_set_pitch(int percent); |
44 | #endif | 44 | #endif |
45 | 45 | ||
46 | 46 | ||
47 | /* exported just for mpeg.c, to keep the recording there */ | 47 | /* exported just for mpeg.c, to keep the recording there */ |
48 | #if CONFIG_HWCODEC == MAS3587F | 48 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
49 | void demand_irq_enable(bool on); | 49 | void demand_irq_enable(bool on); |
50 | #endif | 50 | #endif |
51 | 51 | ||
diff --git a/firmware/mp3_playback.c b/firmware/mp3_playback.c index fae8377c4b..4f1d16f9d3 100644 --- a/firmware/mp3_playback.c +++ b/firmware/mp3_playback.c | |||
@@ -41,11 +41,12 @@ enum | |||
41 | MPEG_DECODER, | 41 | MPEG_DECODER, |
42 | MPEG_ENCODER | 42 | MPEG_ENCODER |
43 | } mpeg_mode; | 43 | } mpeg_mode; |
44 | |||
45 | extern unsigned long shadow_7f1; | ||
46 | |||
47 | #endif /* #ifdef MAS3587F */ | 44 | #endif /* #ifdef MAS3587F */ |
48 | 45 | ||
46 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) | ||
47 | extern unsigned long shadow_io_control_main; | ||
48 | #endif | ||
49 | |||
49 | /**** globals ****/ | 50 | /**** globals ****/ |
50 | 51 | ||
51 | /* own version, independent of mpeg.c */ | 52 | /* own version, independent of mpeg.c */ |
@@ -124,7 +125,7 @@ static const int steps[] = | |||
124 | static const int minval[] = | 125 | static const int minval[] = |
125 | { | 126 | { |
126 | 0, /* Volume */ | 127 | 0, /* Volume */ |
127 | #if CONFIG_HWCODEC == MAS3587F | 128 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
128 | -12, /* Bass */ | 129 | -12, /* Bass */ |
129 | -12, /* Treble */ | 130 | -12, /* Treble */ |
130 | #else | 131 | #else |
@@ -149,7 +150,7 @@ static const int minval[] = | |||
149 | static const int maxval[] = | 150 | static const int maxval[] = |
150 | { | 151 | { |
151 | 100, /* Volume */ | 152 | 100, /* Volume */ |
152 | #if CONFIG_HWCODEC == MAS3587F | 153 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
153 | 12, /* Bass */ | 154 | 12, /* Bass */ |
154 | 12, /* Treble */ | 155 | 12, /* Treble */ |
155 | #else | 156 | #else |
@@ -174,7 +175,7 @@ static const int maxval[] = | |||
174 | static const int defaultval[] = | 175 | static const int defaultval[] = |
175 | { | 176 | { |
176 | 70, /* Volume */ | 177 | 70, /* Volume */ |
177 | #if CONFIG_HWCODEC == MAS3587F | 178 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
178 | 6, /* Bass */ | 179 | 6, /* Bass */ |
179 | 6, /* Treble */ | 180 | 6, /* Treble */ |
180 | #else | 181 | #else |
@@ -393,7 +394,7 @@ static void postpone_dma_tick(void) | |||
393 | #endif | 394 | #endif |
394 | 395 | ||
395 | 396 | ||
396 | #if CONFIG_HWCODEC == MAS3587F | 397 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
397 | void demand_irq_enable(bool on) | 398 | void demand_irq_enable(bool on) |
398 | { | 399 | { |
399 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | 400 | int oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); |
@@ -408,7 +409,7 @@ void demand_irq_enable(bool on) | |||
408 | 409 | ||
409 | set_irq_level(oldlevel); | 410 | set_irq_level(oldlevel); |
410 | } | 411 | } |
411 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ | 412 | #endif /* #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) */ |
412 | 413 | ||
413 | 414 | ||
414 | void play_tick(void) | 415 | void play_tick(void) |
@@ -455,10 +456,10 @@ void IMIA1(void) /* Timer 1 interrupt */ | |||
455 | if(playing) | 456 | if(playing) |
456 | play_tick(); | 457 | play_tick(); |
457 | TSR1 &= ~0x01; | 458 | TSR1 &= ~0x01; |
458 | #if CONFIG_HWCODEC == MAS3587F | 459 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
459 | /* Disable interrupt */ | 460 | /* Disable interrupt */ |
460 | IPRC &= ~0x000f; | 461 | IPRC &= ~0x000f; |
461 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ | 462 | #endif |
462 | } | 463 | } |
463 | 464 | ||
464 | #pragma interrupt | 465 | #pragma interrupt |
@@ -467,19 +468,21 @@ void IRQ6(void) /* PB14: MAS stop demand IRQ */ | |||
467 | SCR0 &= ~0x80; | 468 | SCR0 &= ~0x80; |
468 | } | 469 | } |
469 | 470 | ||
470 | #if CONFIG_HWCODEC == MAS3587F | 471 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
471 | #pragma interrupt | 472 | #pragma interrupt |
472 | void IRQ3(void) /* PA15: MAS demand IRQ */ | 473 | void IRQ3(void) /* PA15: MAS demand IRQ */ |
473 | { | 474 | { |
474 | /* Begin with setting the IRQ to edge sensitive */ | 475 | /* Begin with setting the IRQ to edge sensitive */ |
475 | ICR |= 0x0010; | 476 | ICR |= 0x0010; |
476 | 477 | ||
478 | #if CONFIG_HWCODEC == MAS3587F | ||
477 | if(mpeg_mode == MPEG_ENCODER) | 479 | if(mpeg_mode == MPEG_ENCODER) |
478 | rec_tick(); | 480 | rec_tick(); |
479 | else | 481 | else |
482 | #endif | ||
480 | postpone_dma_tick(); | 483 | postpone_dma_tick(); |
481 | } | 484 | } |
482 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ | 485 | #endif /* #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) */ |
483 | 486 | ||
484 | static void setup_sci0(void) | 487 | static void setup_sci0(void) |
485 | { | 488 | { |
@@ -519,7 +522,7 @@ static void setup_sci0(void) | |||
519 | } | 522 | } |
520 | #endif /* SIMULATOR */ | 523 | #endif /* SIMULATOR */ |
521 | 524 | ||
522 | #if CONFIG_HWCODEC == MAS3587F | 525 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
523 | static void init_playback(void) | 526 | static void init_playback(void) |
524 | { | 527 | { |
525 | unsigned long val; | 528 | unsigned long val; |
@@ -536,10 +539,10 @@ static void init_playback(void) | |||
536 | 539 | ||
537 | /* Stop the current application */ | 540 | /* Stop the current application */ |
538 | val = 0; | 541 | val = 0; |
539 | mas_writemem(MAS_BANK_D0,0x7f6,&val,1); | 542 | mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); |
540 | do | 543 | do |
541 | { | 544 | { |
542 | mas_readmem(MAS_BANK_D0, 0x7f7, &val, 1); | 545 | mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); |
543 | } while(val); | 546 | } while(val); |
544 | 547 | ||
545 | /* Enable the D/A Converter */ | 548 | /* Enable the D/A Converter */ |
@@ -551,23 +554,25 @@ static void init_playback(void) | |||
551 | 554 | ||
552 | /* Disable SDO and SDI */ | 555 | /* Disable SDO and SDI */ |
553 | val = 0x0d; | 556 | val = 0x0d; |
554 | mas_writemem(MAS_BANK_D0,0x7f2,&val,1); | 557 | mas_writemem(MAS_BANK_D0, MAS_D0_INTERFACE_CONTROL, &val, 1); |
555 | 558 | ||
556 | /* Set Demand mode and validate all settings */ | 559 | /* Set Demand mode and validate all settings */ |
557 | shadow_7f1 = 0x25; | 560 | shadow_io_control_main = 0x25; |
558 | mas_writemem(MAS_BANK_D0,0x7f1,&shadow_7f1,1); | 561 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); |
559 | 562 | ||
560 | /* Start the Layer2/3 decoder applications */ | 563 | /* Start the Layer2/3 decoder applications */ |
561 | val = 0x0c; | 564 | val = 0x0c; |
562 | mas_writemem(MAS_BANK_D0,0x7f6,&val,1); | 565 | mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); |
563 | do | 566 | do |
564 | { | 567 | { |
565 | mas_readmem(MAS_BANK_D0, 0x7f7, &val, 1); | 568 | mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); |
566 | } while((val & 0x0c) != 0x0c); | 569 | } while((val & 0x0c) != 0x0c); |
567 | 570 | ||
568 | mpeg_sound_channel_config(MPEG_SOUND_STEREO); | 571 | mpeg_sound_channel_config(MPEG_SOUND_STEREO); |
569 | 572 | ||
573 | #if CONFIG_HWCODEC == MAS3587F | ||
570 | mpeg_mode = MPEG_DECODER; | 574 | mpeg_mode = MPEG_DECODER; |
575 | #endif | ||
571 | 576 | ||
572 | /* set IRQ6 to edge detect */ | 577 | /* set IRQ6 to edge detect */ |
573 | ICR |= 0x02; | 578 | ICR |= 0x02; |
@@ -577,7 +582,7 @@ static void init_playback(void) | |||
577 | 582 | ||
578 | DEBUGF("MAS Decoding application started\n"); | 583 | DEBUGF("MAS Decoding application started\n"); |
579 | } | 584 | } |
580 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ | 585 | #endif /* #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) */ |
581 | 586 | ||
582 | #ifndef SIMULATOR | 587 | #ifndef SIMULATOR |
583 | #if CONFIG_HWCODEC == MAS3507D | 588 | #if CONFIG_HWCODEC == MAS3507D |
@@ -616,7 +621,7 @@ void set_prescaled_volume(void) | |||
616 | #endif /* MAS3507D */ | 621 | #endif /* MAS3507D */ |
617 | #endif /* !SIMULATOR */ | 622 | #endif /* !SIMULATOR */ |
618 | 623 | ||
619 | #if CONFIG_HWCODEC == MAS3587F | 624 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
620 | unsigned long mdb_shape_shadow = 0; | 625 | unsigned long mdb_shape_shadow = 0; |
621 | unsigned long loudness_shadow = 0; | 626 | unsigned long loudness_shadow = 0; |
622 | #endif | 627 | #endif |
@@ -638,7 +643,7 @@ void mpeg_sound_set(int setting, int value) | |||
638 | switch(setting) | 643 | switch(setting) |
639 | { | 644 | { |
640 | case SOUND_VOLUME: | 645 | case SOUND_VOLUME: |
641 | #if CONFIG_HWCODEC == MAS3587F | 646 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
642 | tmp = 0x7f00 * value / 100; | 647 | tmp = 0x7f00 * value / 100; |
643 | mas_codec_writereg(0x10, tmp & 0xff00); | 648 | mas_codec_writereg(0x10, tmp & 0xff00); |
644 | #else | 649 | #else |
@@ -671,7 +676,7 @@ void mpeg_sound_set(int setting, int value) | |||
671 | break; | 676 | break; |
672 | 677 | ||
673 | case SOUND_BALANCE: | 678 | case SOUND_BALANCE: |
674 | #if CONFIG_HWCODEC == MAS3587F | 679 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
675 | tmp = ((value * 127 / 100) & 0xff) << 8; | 680 | tmp = ((value * 127 / 100) & 0xff) << 8; |
676 | mas_codec_writereg(0x11, tmp & 0xff00); | 681 | mas_codec_writereg(0x11, tmp & 0xff00); |
677 | #else | 682 | #else |
@@ -680,7 +685,7 @@ void mpeg_sound_set(int setting, int value) | |||
680 | break; | 685 | break; |
681 | 686 | ||
682 | case SOUND_BASS: | 687 | case SOUND_BASS: |
683 | #if CONFIG_HWCODEC == MAS3587F | 688 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
684 | tmp = ((value * 8) & 0xff) << 8; | 689 | tmp = ((value * 8) & 0xff) << 8; |
685 | mas_codec_writereg(0x14, tmp & 0xff00); | 690 | mas_codec_writereg(0x14, tmp & 0xff00); |
686 | #else | 691 | #else |
@@ -691,7 +696,7 @@ void mpeg_sound_set(int setting, int value) | |||
691 | break; | 696 | break; |
692 | 697 | ||
693 | case SOUND_TREBLE: | 698 | case SOUND_TREBLE: |
694 | #if CONFIG_HWCODEC == MAS3587F | 699 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
695 | tmp = ((value * 8) & 0xff) << 8; | 700 | tmp = ((value * 8) & 0xff) << 8; |
696 | mas_codec_writereg(0x15, tmp & 0xff00); | 701 | mas_codec_writereg(0x15, tmp & 0xff00); |
697 | #else | 702 | #else |
@@ -701,7 +706,7 @@ void mpeg_sound_set(int setting, int value) | |||
701 | #endif | 706 | #endif |
702 | break; | 707 | break; |
703 | 708 | ||
704 | #if CONFIG_HWCODEC == MAS3587F | 709 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
705 | case SOUND_LOUDNESS: | 710 | case SOUND_LOUDNESS: |
706 | loudness_shadow = (loudness_shadow & 0x04) | | 711 | loudness_shadow = (loudness_shadow & 0x04) | |
707 | (MAX(MIN(value * 4, 0x44), 0) << 8); | 712 | (MAX(MIN(value * 4, 0x44), 0) << 8); |
@@ -771,7 +776,7 @@ void mpeg_sound_set(int setting, int value) | |||
771 | 776 | ||
772 | int mpeg_val2phys(int setting, int value) | 777 | int mpeg_val2phys(int setting, int value) |
773 | { | 778 | { |
774 | #if CONFIG_HWCODEC == MAS3587F | 779 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
775 | int result = 0; | 780 | int result = 0; |
776 | 781 | ||
777 | switch(setting) | 782 | switch(setting) |
@@ -858,11 +863,11 @@ void mpeg_sound_channel_config(int configuration) | |||
858 | break; | 863 | break; |
859 | } | 864 | } |
860 | 865 | ||
861 | #if CONFIG_HWCODEC == MAS3587F | 866 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
862 | mas_writemem(MAS_BANK_D0, 0x7fc, &val_ll, 1); /* LL */ | 867 | mas_writemem(MAS_BANK_D0, MAS_D0_OUT_LL, &val_ll, 1); /* LL */ |
863 | mas_writemem(MAS_BANK_D0, 0x7fd, &val_lr, 1); /* LR */ | 868 | mas_writemem(MAS_BANK_D0, MAS_D0_OUT_LR, &val_lr, 1); /* LR */ |
864 | mas_writemem(MAS_BANK_D0, 0x7fe, &val_rl, 1); /* RL */ | 869 | mas_writemem(MAS_BANK_D0, MAS_D0_OUT_RL, &val_rl, 1); /* RL */ |
865 | mas_writemem(MAS_BANK_D0, 0x7ff, &val_rr, 1); /* RR */ | 870 | mas_writemem(MAS_BANK_D0, MAS_D0_OUT_RR, &val_rr, 1); /* RR */ |
866 | #else | 871 | #else |
867 | mas_writemem(MAS_BANK_D1, 0x7f8, &val_ll, 1); /* LL */ | 872 | mas_writemem(MAS_BANK_D1, 0x7f8, &val_ll, 1); /* LL */ |
868 | mas_writemem(MAS_BANK_D1, 0x7f9, &val_lr, 1); /* LR */ | 873 | mas_writemem(MAS_BANK_D1, 0x7f9, &val_lr, 1); /* LR */ |
@@ -872,7 +877,7 @@ void mpeg_sound_channel_config(int configuration) | |||
872 | #endif | 877 | #endif |
873 | } | 878 | } |
874 | 879 | ||
875 | #if CONFIG_HWCODEC == MAS3587F | 880 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
876 | /* This function works by telling the decoder that we have another | 881 | /* This function works by telling the decoder that we have another |
877 | crystal frequency than we actually have. It will adjust its internal | 882 | crystal frequency than we actually have. It will adjust its internal |
878 | parameters and the result is that the audio is played at another pitch. | 883 | parameters and the result is that the audio is played at another pitch. |
@@ -889,11 +894,11 @@ void mpeg_set_pitch(int pitch) | |||
889 | /* Calculate the new (bogus) frequency */ | 894 | /* Calculate the new (bogus) frequency */ |
890 | val = 18432*pitch/1000; | 895 | val = 18432*pitch/1000; |
891 | 896 | ||
892 | mas_writemem(MAS_BANK_D0,0x7f3,&val,1); | 897 | mas_writemem(MAS_BANK_D0, MAS_D0_OFREQ_CONTROL, &val, 1); |
893 | 898 | ||
894 | /* We must tell the MAS that the frequency has changed. | 899 | /* We must tell the MAS that the frequency has changed. |
895 | This will unfortunately cause a short silence. */ | 900 | This will unfortunately cause a short silence. */ |
896 | mas_writemem(MAS_BANK_D0,0x7f1,&shadow_7f1,1); | 901 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); |
897 | } | 902 | } |
898 | #endif | 903 | #endif |
899 | 904 | ||
@@ -940,6 +945,14 @@ void mp3_init(int volume, int bass, int treble, int balance, int loudness, | |||
940 | DEBUGF("MAS3587 derivate %d, version %c%d\n", | 945 | DEBUGF("MAS3587 derivate %d, version %c%d\n", |
941 | (mas_version_code & 0xf000) >> 12, | 946 | (mas_version_code & 0xf000) >> 12, |
942 | 'A' + ((mas_version_code & 0x0f00) >> 8), mas_version_code & 0xff); | 947 | 'A' + ((mas_version_code & 0x0f00) >> 8), mas_version_code & 0xff); |
948 | #elif CONFIG_HW_CODEC == MAS3539F | ||
949 | or_b(0x08, &PAIORH); /* output for /PR */ | ||
950 | init_playback(); | ||
951 | |||
952 | mas_version_code = mas_readver(); | ||
953 | DEBUGF("MAS3539 derivate %d, version %c%d\n", | ||
954 | (mas_version_code & 0xf000) >> 12, | ||
955 | 'A' + ((mas_version_code & 0x0f00) >> 8), mas_version_code & 0xff); | ||
943 | #endif | 956 | #endif |
944 | 957 | ||
945 | #ifdef HAVE_DAC3550A | 958 | #ifdef HAVE_DAC3550A |
@@ -1001,20 +1014,20 @@ void mp3_init(int volume, int bass, int treble, int balance, int loudness, | |||
1001 | mpeg_sound_channel_config(channel_config); | 1014 | mpeg_sound_channel_config(channel_config); |
1002 | #endif | 1015 | #endif |
1003 | 1016 | ||
1004 | #if CONFIG_HWCODEC == MAS3587F | 1017 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
1005 | ICR &= ~0x0010; /* IRQ3 level sensitive */ | 1018 | ICR &= ~0x0010; /* IRQ3 level sensitive */ |
1006 | PACR1 = (PACR1 & 0x3fff) | 0x4000; /* PA15 is IRQ3 */ | 1019 | PACR1 = (PACR1 & 0x3fff) | 0x4000; /* PA15 is IRQ3 */ |
1007 | #endif | 1020 | #endif |
1008 | 1021 | ||
1009 | /* Must be done before calling mpeg_sound_set() */ | 1022 | /* Must be done before calling mpeg_sound_set() */ |
1010 | mpeg_is_initialized = true; | 1023 | mpeg_is_initialized = true; |
1011 | 1024 | ||
1012 | mpeg_sound_set(SOUND_BASS, bass); | 1025 | mpeg_sound_set(SOUND_BASS, bass); |
1013 | mpeg_sound_set(SOUND_TREBLE, treble); | 1026 | mpeg_sound_set(SOUND_TREBLE, treble); |
1014 | mpeg_sound_set(SOUND_BALANCE, balance); | 1027 | mpeg_sound_set(SOUND_BALANCE, balance); |
1015 | mpeg_sound_set(SOUND_VOLUME, volume); | 1028 | mpeg_sound_set(SOUND_VOLUME, volume); |
1016 | 1029 | ||
1017 | #if CONFIG_HWCODEC == MAS3587F | 1030 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
1018 | mpeg_sound_channel_config(channel_config); | 1031 | mpeg_sound_channel_config(channel_config); |
1019 | mpeg_sound_set(SOUND_LOUDNESS, loudness); | 1032 | mpeg_sound_set(SOUND_LOUDNESS, loudness); |
1020 | mpeg_sound_set(SOUND_AVC, avc); | 1033 | mpeg_sound_set(SOUND_AVC, avc); |
@@ -1034,9 +1047,9 @@ void mp3_init(int volume, int bass, int treble, int balance, int loudness, | |||
1034 | void mp3_shutdown(void) | 1047 | void mp3_shutdown(void) |
1035 | { | 1048 | { |
1036 | #ifndef SIMULATOR | 1049 | #ifndef SIMULATOR |
1037 | #if CONFIG_HWCODEC == MAS3587F | 1050 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
1038 | unsigned long val = 1; | 1051 | unsigned long val = 1; |
1039 | mas_writemem(MAS_BANK_D0, 0x7f9, &val, 1); /* Mute */ | 1052 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &val, 1); /* Mute */ |
1040 | #endif | 1053 | #endif |
1041 | 1054 | ||
1042 | #if CONFIG_HWCODEC == MAS3507D | 1055 | #if CONFIG_HWCODEC == MAS3507D |
@@ -1052,7 +1065,7 @@ void mp3_shutdown(void) | |||
1052 | 1065 | ||
1053 | void mp3_play_init(void) | 1066 | void mp3_play_init(void) |
1054 | { | 1067 | { |
1055 | #if CONFIG_HWCODEC == MAS3587F | 1068 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
1056 | init_playback(); | 1069 | init_playback(); |
1057 | #endif | 1070 | #endif |
1058 | playing = false; | 1071 | playing = false; |
@@ -1081,7 +1094,7 @@ void mp3_play_data(const unsigned char* start, int size, | |||
1081 | 1094 | ||
1082 | CHCR3 |= 0x0001; /* Enable DMA IRQ */ | 1095 | CHCR3 |= 0x0001; /* Enable DMA IRQ */ |
1083 | 1096 | ||
1084 | #if CONFIG_HWCODEC == MAS3587F | 1097 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
1085 | demand_irq_enable(true); | 1098 | demand_irq_enable(true); |
1086 | #endif | 1099 | #endif |
1087 | } | 1100 | } |
@@ -1107,7 +1120,7 @@ void mp3_play_stop(void) | |||
1107 | playing = false; | 1120 | playing = false; |
1108 | mp3_play_pause(false); | 1121 | mp3_play_pause(false); |
1109 | CHCR3 &= ~0x0001; /* Disable the DMA interrupt */ | 1122 | CHCR3 &= ~0x0001; /* Disable the DMA interrupt */ |
1110 | #if CONFIG_HWCODEC == MAS3587F | 1123 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
1111 | demand_irq_enable(false); | 1124 | demand_irq_enable(false); |
1112 | #endif | 1125 | #endif |
1113 | } | 1126 | } |
diff --git a/firmware/mpeg.c b/firmware/mpeg.c index df9e77a305..0eea71228c 100644 --- a/firmware/mpeg.c +++ b/firmware/mpeg.c | |||
@@ -326,11 +326,7 @@ unsigned long mpeg_get_last_header(void) | |||
326 | 326 | ||
327 | /* Read the frame data from the MAS and reconstruct it with the | 327 | /* Read the frame data from the MAS and reconstruct it with the |
328 | frame sync and all */ | 328 | frame sync and all */ |
329 | #if CONFIG_HWCODEC == MAS3587F | 329 | mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_STATUS_1, tmp, 2); |
330 | mas_readmem(MAS_BANK_D0, 0xfd1, tmp, 2); | ||
331 | #else | ||
332 | mas_readmem(MAS_BANK_D0, 0x301, tmp, 2); | ||
333 | #endif | ||
334 | return 0xffe00000 | ((tmp[0] & 0x7c00) << 6) | (tmp[1] & 0xffff); | 330 | return 0xffe00000 | ((tmp[0] & 0x7c00) << 6) | (tmp[1] & 0xffff); |
335 | #endif | 331 | #endif |
336 | } | 332 | } |
@@ -394,13 +390,15 @@ static int prerecord_count; /* Number of seconds in the prerecord buffer */ | |||
394 | static int prerecord_timeout; /* The tick count of the next prerecord data store */ | 390 | static int prerecord_timeout; /* The tick count of the next prerecord data store */ |
395 | 391 | ||
396 | /* Shadow MAS registers */ | 392 | /* Shadow MAS registers */ |
397 | unsigned long shadow_7f0 = 0; | 393 | unsigned long shadow_encoder_control = 0; |
398 | unsigned long shadow_7f1 = 0; | ||
399 | unsigned long shadow_7f6 = 0; | ||
400 | unsigned long shadow_7f9 = 0; | ||
401 | |||
402 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ | 394 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ |
403 | 395 | ||
396 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) | ||
397 | unsigned long shadow_io_control_main = 0; | ||
398 | unsigned long shadow_app_select = 0; | ||
399 | unsigned long shadow_soft_mute = 0; | ||
400 | #endif | ||
401 | |||
404 | static int mpeg_file; | 402 | static int mpeg_file; |
405 | 403 | ||
406 | /* Synchronization variables */ | 404 | /* Synchronization variables */ |
@@ -927,10 +925,10 @@ static void track_change(void) | |||
927 | { | 925 | { |
928 | DEBUGF("Track change\n"); | 926 | DEBUGF("Track change\n"); |
929 | 927 | ||
930 | #if CONFIG_HWCODEC == MAS3587F | 928 | #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) |
931 | /* Reset the AVC */ | 929 | /* Reset the AVC */ |
932 | mpeg_sound_set(SOUND_AVC, -1); | 930 | mpeg_sound_set(SOUND_AVC, -1); |
933 | #endif /* #if CONFIG_HWCODEC == MAS3587F */ | 931 | #endif /* #if (CONFIG_HWCODEC == MAS3587F) || (CONFIG_HWCODEC == MAS3539F) */ |
934 | remove_current_tag(); | 932 | remove_current_tag(); |
935 | 933 | ||
936 | update_playlist(); | 934 | update_playlist(); |
@@ -2100,10 +2098,10 @@ static void init_recording(void) | |||
2100 | 2098 | ||
2101 | /* Stop the current application */ | 2099 | /* Stop the current application */ |
2102 | val = 0; | 2100 | val = 0; |
2103 | mas_writemem(MAS_BANK_D0,0x7f6,&val,1); | 2101 | mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); |
2104 | do | 2102 | do |
2105 | { | 2103 | { |
2106 | mas_readmem(MAS_BANK_D0, 0x7f7, &val, 1); | 2104 | mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); |
2107 | } while(val); | 2105 | } while(val); |
2108 | 2106 | ||
2109 | /* Perform black magic as described by the data sheet */ | 2107 | /* Perform black magic as described by the data sheet */ |
@@ -2130,19 +2128,19 @@ static void init_recording(void) | |||
2130 | mas_codec_writereg(7, 0x4000); | 2128 | mas_codec_writereg(7, 0x4000); |
2131 | 2129 | ||
2132 | /* No mute */ | 2130 | /* No mute */ |
2133 | shadow_7f9 = 0; | 2131 | shadow_soft_mute = 0; |
2134 | mas_writemem(MAS_BANK_D0, 0x7f9, &shadow_7f9, 1); | 2132 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); |
2135 | 2133 | ||
2136 | /* Set Demand mode, monitoring OFF and validate all settings */ | 2134 | /* Set Demand mode, monitoring OFF and validate all settings */ |
2137 | shadow_7f1 = 0x125; | 2135 | shadow_io_control_main = 0x125; |
2138 | mas_writemem(MAS_BANK_D0, 0x7f1, &shadow_7f1, 1); | 2136 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); |
2139 | 2137 | ||
2140 | /* Start the encoder application */ | 2138 | /* Start the encoder application */ |
2141 | val = 0x40; | 2139 | val = 0x40; |
2142 | mas_writemem(MAS_BANK_D0, 0x7f6, &val, 1); | 2140 | mas_writemem(MAS_BANK_D0, MAS_D0_APP_SELECT, &val, 1); |
2143 | do | 2141 | do |
2144 | { | 2142 | { |
2145 | mas_readmem(MAS_BANK_D0, 0x7f7, &val, 1); | 2143 | mas_readmem(MAS_BANK_D0, MAS_D0_APP_RUNNING, &val, 1); |
2146 | } while(!(val & 0x40)); | 2144 | } while(!(val & 0x40)); |
2147 | 2145 | ||
2148 | #if 1 | 2146 | #if 1 |
@@ -2154,13 +2152,13 @@ static void init_recording(void) | |||
2154 | sleep(20); | 2152 | sleep(20); |
2155 | 2153 | ||
2156 | /* Now set it to Monitoring mode as default, saves power */ | 2154 | /* Now set it to Monitoring mode as default, saves power */ |
2157 | shadow_7f1 = 0x525; | 2155 | shadow_io_control_main = 0x525; |
2158 | mas_writemem(MAS_BANK_D0, 0x7f1, &shadow_7f1, 1); | 2156 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); |
2159 | 2157 | ||
2160 | /* Wait until the DSP has accepted the settings */ | 2158 | /* Wait until the DSP has accepted the settings */ |
2161 | do | 2159 | do |
2162 | { | 2160 | { |
2163 | mas_readmem(MAS_BANK_D0, 0x7f1, &val,1); | 2161 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); |
2164 | } while(val & 1); | 2162 | } while(val & 1); |
2165 | 2163 | ||
2166 | drain_dma_buffer(); | 2164 | drain_dma_buffer(); |
@@ -2209,14 +2207,14 @@ static void start_prerecording(void) | |||
2209 | is_prerecording = true; | 2207 | is_prerecording = true; |
2210 | 2208 | ||
2211 | /* Stop monitoring and start the encoder */ | 2209 | /* Stop monitoring and start the encoder */ |
2212 | shadow_7f1 &= ~(1 << 10); | 2210 | shadow_io_control_main &= ~(1 << 10); |
2213 | mas_writemem(MAS_BANK_D0, 0x7f1, &shadow_7f1, 1); | 2211 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); |
2214 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f1, %x)\n", shadow_7f1); | 2212 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); |
2215 | 2213 | ||
2216 | /* Wait until the DSP has accepted the settings */ | 2214 | /* Wait until the DSP has accepted the settings */ |
2217 | do | 2215 | do |
2218 | { | 2216 | { |
2219 | mas_readmem(MAS_BANK_D0, 0x7f1, &val,1); | 2217 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); |
2220 | } while(val & 1); | 2218 | } while(val & 1); |
2221 | 2219 | ||
2222 | is_recording = true; | 2220 | is_recording = true; |
@@ -2243,14 +2241,14 @@ static void start_recording(void) | |||
2243 | { | 2241 | { |
2244 | /* If prerecording is off, we need to stop the monitoring | 2242 | /* If prerecording is off, we need to stop the monitoring |
2245 | and start the encoder */ | 2243 | and start the encoder */ |
2246 | shadow_7f1 &= ~(1 << 10); | 2244 | shadow_io_control_main &= ~(1 << 10); |
2247 | mas_writemem(MAS_BANK_D0, 0x7f1, &shadow_7f1, 1); | 2245 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); |
2248 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f1, %x)\n", shadow_7f1); | 2246 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); |
2249 | 2247 | ||
2250 | /* Wait until the DSP has accepted the settings */ | 2248 | /* Wait until the DSP has accepted the settings */ |
2251 | do | 2249 | do |
2252 | { | 2250 | { |
2253 | mas_readmem(MAS_BANK_D0, 0x7f1, &val,1); | 2251 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); |
2254 | } while(val & 1); | 2252 | } while(val & 1); |
2255 | } | 2253 | } |
2256 | 2254 | ||
@@ -2275,8 +2273,8 @@ static void pause_recording(void) | |||
2275 | pause_start_time = current_tick; | 2273 | pause_start_time = current_tick; |
2276 | 2274 | ||
2277 | /* Set the pause bit */ | 2275 | /* Set the pause bit */ |
2278 | shadow_7f9 |= 2; | 2276 | shadow_soft_mute |= 2; |
2279 | mas_writemem(MAS_BANK_D0, 0x7f9, &shadow_7f9, 1); | 2277 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); |
2280 | 2278 | ||
2281 | paused = true; | 2279 | paused = true; |
2282 | } | 2280 | } |
@@ -2286,8 +2284,8 @@ static void resume_recording(void) | |||
2286 | paused = false; | 2284 | paused = false; |
2287 | 2285 | ||
2288 | /* Clear the pause bit */ | 2286 | /* Clear the pause bit */ |
2289 | shadow_7f9 &= ~2; | 2287 | shadow_soft_mute &= ~2; |
2290 | mas_writemem(MAS_BANK_D0, 0x7f9, &shadow_7f9, 1); | 2288 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute, 1); |
2291 | 2289 | ||
2292 | /* Compensate for the time we have been paused */ | 2290 | /* Compensate for the time we have been paused */ |
2293 | if(pause_start_time) | 2291 | if(pause_start_time) |
@@ -2313,17 +2311,17 @@ static void stop_recording(void) | |||
2313 | is_prerecording = false; | 2311 | is_prerecording = false; |
2314 | 2312 | ||
2315 | /* Read the number of frames recorded */ | 2313 | /* Read the number of frames recorded */ |
2316 | mas_readmem(MAS_BANK_D0, 0xfd0, &num_recorded_frames, 1); | 2314 | mas_readmem(MAS_BANK_D0, MAS_D0_MPEG_FRAME_COUNT, &num_recorded_frames, 1); |
2317 | 2315 | ||
2318 | /* Start monitoring */ | 2316 | /* Start monitoring */ |
2319 | shadow_7f1 |= (1 << 10); | 2317 | shadow_io_control_main |= (1 << 10); |
2320 | mas_writemem(MAS_BANK_D0, 0x7f1, &shadow_7f1, 1); | 2318 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main, 1); |
2321 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f1, %x)\n", shadow_7f1); | 2319 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); |
2322 | 2320 | ||
2323 | /* Wait until the DSP has accepted the settings */ | 2321 | /* Wait until the DSP has accepted the settings */ |
2324 | do | 2322 | do |
2325 | { | 2323 | { |
2326 | mas_readmem(MAS_BANK_D0, 0x7f1, &val,1); | 2324 | mas_readmem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &val,1); |
2327 | } while(val & 1); | 2325 | } while(val & 1); |
2328 | 2326 | ||
2329 | resume_recording(); | 2327 | resume_recording(); |
@@ -2340,30 +2338,30 @@ void mpeg_set_recording_options(int frequency, int quality, | |||
2340 | rec_version_index = is_mpeg1?3:2; | 2338 | rec_version_index = is_mpeg1?3:2; |
2341 | rec_frequency_index = frequency % 3; | 2339 | rec_frequency_index = frequency % 3; |
2342 | 2340 | ||
2343 | shadow_7f0 = (quality << 17) | | 2341 | shadow_encoder_control = (quality << 17) | |
2344 | (rec_frequency_index << 10) | | 2342 | (rec_frequency_index << 10) | |
2345 | ((is_mpeg1?1:0) << 9) | | 2343 | ((is_mpeg1?1:0) << 9) | |
2346 | (((channel_mode * 2 + 1) & 3) << 6) | | 2344 | (((channel_mode * 2 + 1) & 3) << 6) | |
2347 | (1 << 5) /* MS-stereo */ | | 2345 | (1 << 5) /* MS-stereo */ | |
2348 | (1 << 2) /* Is an original */; | 2346 | (1 << 2) /* Is an original */; |
2349 | mas_writemem(MAS_BANK_D0, 0x7f0, &shadow_7f0,1); | 2347 | mas_writemem(MAS_BANK_D0, MAS_D0_ENCODER_CONTROL, &shadow_encoder_control,1); |
2350 | 2348 | ||
2351 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f0, %x)\n", shadow_7f0); | 2349 | DEBUGF("mas_writemem(MAS_BANK_D0, ENCODER_CONTROL, %x)\n", shadow_encoder_control); |
2352 | 2350 | ||
2353 | shadow_7f9 = editable?4:0; | 2351 | shadow_soft_mute = editable?4:0; |
2354 | mas_writemem(MAS_BANK_D0, 0x7f9, &shadow_7f9,1); | 2352 | mas_writemem(MAS_BANK_D0, MAS_D0_SOFT_MUTE, &shadow_soft_mute,1); |
2355 | 2353 | ||
2356 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f9, %x)\n", shadow_7f9); | 2354 | DEBUGF("mas_writemem(MAS_BANK_D0, SOFT_MUTE, %x)\n", shadow_soft_mute); |
2357 | 2355 | ||
2358 | shadow_7f1 = ((1 << 10) | /* Monitoring ON */ | 2356 | shadow_io_control_main = ((1 << 10) | /* Monitoring ON */ |
2359 | ((source < 2)?1:2) << 8) | /* Input select */ | 2357 | ((source < 2)?1:2) << 8) | /* Input select */ |
2360 | (1 << 5) | /* SDO strobe invert */ | 2358 | (1 << 5) | /* SDO strobe invert */ |
2361 | ((is_mpeg1?0:1) << 3) | | 2359 | ((is_mpeg1?0:1) << 3) | |
2362 | (1 << 2) | /* Inverted SIBC clock signal */ | 2360 | (1 << 2) | /* Inverted SIBC clock signal */ |
2363 | 1; /* Validate */ | 2361 | 1; /* Validate */ |
2364 | mas_writemem(MAS_BANK_D0, 0x7f1, &shadow_7f1,1); | 2362 | mas_writemem(MAS_BANK_D0, MAS_D0_IO_CONTROL_MAIN, &shadow_io_control_main,1); |
2365 | 2363 | ||
2366 | DEBUGF("mas_writemem(MAS_BANK_D0, 0x7f1, %x)\n", shadow_7f1); | 2364 | DEBUGF("mas_writemem(MAS_BANK_D0, IO_CONTROL_MAIN, %x)\n", shadow_io_control_main); |
2367 | 2365 | ||
2368 | if(source == 0) /* Mic */ | 2366 | if(source == 0) /* Mic */ |
2369 | { | 2367 | { |