ipod Classic: implement HAVE_RECORDING

This patch has been tested on iPod 80 and 160slim, actually
it works but some updates must be done to the final version:

 - unlimitted input buffer
 - decrease CHUNK_SIZE
 - use non-cached addresses instead of discard d-cache ???

Capture hardware versions:

 Ver  iPod models   capture support
 ---  -----------   ---------------
 0    80/160fat     dock line-in
 1    120/160slim   dock line-in + jack mic

 HW version 1 includes an amplifier for the jack plug mic.

 Capture HW detection only tested on iPod 80 and 160slim.

CODEC power:

 AFAIK, OF powers CS42L55 at VA=2.4V for capture (1.8V for
 playback) and turns on the ADC charge pump. CODEC datasheet
 recommmends to disable the charge pump for VA>2.1V.

 CS42L55 DS, s4.13 (Required Initialization Settings): for
 VA>2.1V, some adjustments "must" be done using undocummented
 "control port compensation" registers. OF does not modifies
 these registers when VA=2.4V.

 This patch configures capture HW in the same way as OF does.

TODO:
 - ADC full scale voltage depends on VA, perform tests to find
   clipping levels for VA=1.8V and VA=2.4V

Change-Id: I7e20fd3ecaa83b1c58d5c746f5153fe5c3891d75
This commit is contained in:
Cástor Muñoz 2014-12-06 19:00:34 +01:00
parent 42abc6a496
commit 291b2338c9
6 changed files with 246 additions and 14 deletions

View file

@ -26,6 +26,40 @@
#include "gpio-s5l8702.h"
#include "panic.h"
int rec_hw_ver;
void INIT_ATTR gpio_init(void)
{
/* Capture hardware versions:
*
* HW version 1 includes an amplifier for the jack plug
* microphone, it is activated configuring GPIO E7 as output
* high. It is posible to detect capture HW version (even
* when HP are not plugged) reading GPIO E7:
*
* Ver GPIO E7 models capture support
* --- ------- ------ ---------------
* 0 1 80/160fat dock line-in
* 1 0 120/160slim dock line-in + jack mic
*/
GPIOCMD = 0xe0700;
rec_hw_ver = (PDAT(14) & (1 << 7)) ? 0 : 1;
/* default GPIO configuration */
GPIOCMD = 0xe070e;
if (rec_hw_ver == 0) {
GPIOCMD = 0xe060e;
}
else {
/* GPIO E6 is connected to mikey IRQ line (active low),
configure it as pull-up input */
GPIOCMD = 0xe0600;
PUNB(14) |= (1 << 6);
}
/* TODO: initialize GPIO ports for minimum power consumption */
}
/*
* XXX: disabled, not used and never tested!
@ -47,11 +81,6 @@ static int n_handlers = 0;
/* API */
void INIT_ATTR gpio_init(void)
{
/* TODO: initialize GPIO ports for minimum power consumption */
}
uint32_t gpio_group_get(int group)
{
uint32_t pcon = PCON(group);