mfd: cpcap: Improve ST DAC enable time

Workaround provided by ST to improve ST DAC enable time.

Change-Id: I246ef7af1e9b5c2d21f9ec311d35fc704b4589bd
Signed-off-by: Greg Meiste <w30289@motorola.com>
Signed-off-by: Iliyan Malchev <malchev@google.com>
This commit is contained in:
Greg Meiste
2010-12-10 15:35:52 -06:00
committed by Iliyan Malchev
parent 92ead7c3a8
commit 1b8f70341a
3 changed files with 27 additions and 3 deletions

View File

@@ -32,11 +32,16 @@
#include <mach/cpcap_audio.h>
#define SLEEP_ACTIVATE_POWER_DELAY_MS 2
#define STM_STDAC_ACTIVATE_RAMP_TIME 60
#define STM_STDAC_ACTIVATE_RAMP_TIME 1
#define CLOCK_TREE_RESET_DELAY_MS 1
#define CPCAP_AUDIO_SPI_READBACK 1
#define STM_STDAC_EN_TEST_PRE 0x090C
#define STM_STDAC_EN_TEST_POST 0x0000
#define STM_STDAC_EN_ST_TEST1_PRE 0x2400
#define STM_STDAC_EN_ST_TEST1_POST 0x0400
#define E(args...) pr_err("cpcap-audio: " args)
static struct cpcap_audio_state current_state = {
@@ -765,11 +770,25 @@ static void cpcap_audio_configure_stdac(struct cpcap_audio_state *state,
stdac_changes.mask = stdac_changes.value | prev_stdac_data;
prev_stdac_data = stdac_changes.value;
if ((stdac_changes.value | CPCAP_BIT_ST_DAC_EN) &&
(state->cpcap->vendor == CPCAP_VENDOR_ST)) {
logged_cpcap_write(state->cpcap, CPCAP_REG_TEST,
STM_STDAC_EN_TEST_PRE, 0xFFFF);
logged_cpcap_write(state->cpcap, CPCAP_REG_ST_TEST1,
STM_STDAC_EN_ST_TEST1_PRE, 0xFFFF);
}
logged_cpcap_write(state->cpcap, CPCAP_REG_SDAC,
stdac_changes.value, stdac_changes.mask);
if ((stdac_changes.value | CPCAP_BIT_ST_DAC_EN) &&
(state->cpcap->vendor == CPCAP_VENDOR_ST))
(state->cpcap->vendor == CPCAP_VENDOR_ST)) {
msleep(STM_STDAC_ACTIVATE_RAMP_TIME);
logged_cpcap_write(state->cpcap, CPCAP_REG_ST_TEST1,
STM_STDAC_EN_ST_TEST1_POST, 0xFFFF);
logged_cpcap_write(state->cpcap, CPCAP_REG_TEST,
STM_STDAC_EN_TEST_POST, 0xFFFF);
}
}
}

View File

@@ -242,6 +242,8 @@ static const struct {
[CPCAP_REG_LGDET] = {1181, 0xFF00, 0xFFFF},
[CPCAP_REG_LMISC] = {1182, 0xFF07, 0xFFFF},
[CPCAP_REG_LMACE] = {1183, 0xFFF8, 0xFFFF},
[CPCAP_REG_TEST] = {7936, 0x0000, 0xFFFF},
[CPCAP_REG_ST_TEST1] = {8002, 0x0000, 0xFFFF},
};
static int cpcap_spi_access(struct spi_device *spi, u8 *buf,

View File

@@ -306,7 +306,10 @@ enum cpcap_reg {
CPCAP_REG_LMISC, /* LMR Misc Bits */
CPCAP_REG_LMACE, /* LMR Mace IC Support */
CPCAP_REG_END = CPCAP_REG_LMACE, /* End of CPCAP registers. */
CPCAP_REG_TEST, /* Test */
CPCAP_REG_ST_TEST1, /* ST Test 1 */
CPCAP_REG_END = CPCAP_REG_ST_TEST1, /* End of CPCAP registers. */
CPCAP_REG_MAX /* The largest valid register value. */
= CPCAP_REG_END,