mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 13:27:06 +09:00
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:
committed by
Iliyan Malchev
parent
92ead7c3a8
commit
1b8f70341a
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user