From 56c4e9fa600557242d8b78f5fd8e32c2245b76fc Mon Sep 17 00:00:00 2001 From: Marcin Bukat Date: Sun, 31 Oct 2010 21:09:34 +0000 Subject: Separate mas35xx lowlevel stuff. Move SH specific bits to target tree. FS#11189 by me. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@28425 a1c6a512-1295-4272-9138-f99709370657 --- firmware/export/mas35xx.h | 162 ++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 148 insertions(+), 14 deletions(-) (limited to 'firmware/export/mas35xx.h') diff --git a/firmware/export/mas35xx.h b/firmware/export/mas35xx.h index 1c50b7f02b..f75658fce1 100644 --- a/firmware/export/mas35xx.h +++ b/firmware/export/mas35xx.h @@ -25,27 +25,55 @@ #define _MAS35XX_H #include "config.h" +#include "mascodec.h" -#if CONFIG_CODEC == MAS3507D +#define MAS_BANK_D0 0 +#define MAS_BANK_D1 1 -#define VOLUME_MIN -780 -#define VOLUME_MAX 180 -#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) +/* registers common to all MAS35xx */ +#define MAS_REG_DCCF 0x8e +#define MAS_REG_MUTE 0xaa +#define MAS_REG_PIODATA 0xc8 +#define MAS_REG_StartUpConfig 0xe6 +#define MAS_REG_KPRESCALE 0xe7 -#else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */ +#if CONFIG_CODEC == MAS3507D -/* MAS3587F and MAS3539F handle clipping prevention internally so we do not need - * the prescaler -> CLIPPING_CAP - */ +/* I2C defines */ +#define MAS_ADR 0x3a +#define MAS_DEV_WRITE (MAS_ADR | 0x00) +#define MAS_DEV_READ (MAS_ADR | 0x01) -#define VOLUME_MIN -400 -#define VOLUME_MAX 600 -#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BALANCE_CAP | CLIPPING_CAP) +/* MAS3507D registers */ +#define MAS_DATA_WRITE 0x68 +#define MAS_DATA_READ 0x69 +#define MAS_CONTROL 0x6a -#endif +#define MAS_REG_KBASS 0x6b +#define MAS_REG_KTREBLE 0x6f +/* MAS3507D commands */ +#define MAS_CMD_READ_ANCILLARY 0x30 +#define MAS_CMD_WRITE_REG 0x90 +#define MAS_CMD_WRITE_D0_MEM 0xa0 +#define MAS_CMD_WRITE_D1_MEM 0xb0 +#define MAS_CMD_READ_REG 0xd0 +#define MAS_CMD_READ_D0_MEM 0xe0 +#define MAS_CMD_READ_D1_MEM 0xf0 -#if CONFIG_CODEC == MAS3507D +/* MAS3507D D0 memmory cells */ +#define MAS_D0_MPEG_FRAME_COUNT 0x300 +#define MAS_D0_MPEG_STATUS_1 0x301 +#define MAS_D0_MPEG_STATUS_2 0x302 +#define MAS_D0_CRC_ERROR_COUNT 0x303 +#define MAS_D0_OUT_LL 0x7f8 +#define MAS_D0_OUT_LR 0x7f9 +#define MAS_D0_OUT_RL 0x7fa +#define MAS_D0_OUT_RR 0x7fb + +#define VOLUME_MIN -780 +#define VOLUME_MAX 180 +#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | PRESCALER_CAP) static const unsigned int bass_table[] = { @@ -136,6 +164,112 @@ static const unsigned int prescale_table[] = 0xe6800, /* 14dB */ 0xe9400 /* 15dB */ }; -#endif /*CONFIG_CODEC == MAS3507D*/ + +#else /* CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F */ + +/* I2C defines */ +#define MAS_ADR 0x3c +#define MAS_DEV_WRITE (MAS_ADR | 0x00) +#define MAS_DEV_READ (MAS_ADR | 0x01) + +/* MAS3587F/MAS3539F registers */ +#define MAS_DATA_WRITE 0x68 +#define MAS_DATA_READ 0x69 +#define MAS_CODEC_WRITE 0x6c +#define MAS_CODEC_READ 0x6d +#define MAS_CONTROL 0x6a +#define MAS_DCCF 0x76 +#define MAS_DCFR 0x77 + +#define MAS_REG_KMDB_SWITCH 0x21 +#define MAS_REG_KMDB_STR 0x22 +#define MAS_REG_KMDB_HAR 0x23 +#define MAS_REG_KMDB_FC 0x24 +#define MAS_REG_KLOUDNESS 0x1e +#define MAS_REG_QPEAK_L 0x0a +#define MAS_REG_QPEAK_R 0x0b +#define MAS_REG_DQPEAK_L 0x0c +#define MAS_REG_DQPEAK_R 0x0d +#define MAS_REG_VOLUME_CONTROL 0x10 +#define MAS_REG_BALANCE 0x11 +#define MAS_REG_KAVC 0x12 +#define MAS_REG_KBASS 0x14 +#define MAS_REG_KTREBLE 0x15 + +/* MAS3587F/MAS3539F commands */ +#define MAS_CMD_READ_ANCILLARY 0x50 +#define MAS_CMD_FAST_PRG_DL 0x60 +#define MAS_CMD_READ_IC_VER 0x70 +#define MAS_CMD_READ_REG 0xa0 +#define MAS_CMD_WRITE_REG 0xb0 +#define MAS_CMD_READ_D0_MEM 0xc0 +#define MAS_CMD_READ_D1_MEM 0xd0 +#define MAS_CMD_WRITE_D0_MEM 0xe0 +#define MAS_CMD_WRITE_D1_MEM 0xf0 + +/* MAS3587F D0 memory cells */ +#if CONFIG_CODEC == MAS3587F +#define MAS_D0_APP_SELECT 0x7f6 +#define MAS_D0_APP_RUNNING 0x7f7 +#define MAS_D0_ENCODER_CONTROL 0x7f0 +#define MAS_D0_IO_CONTROL_MAIN 0x7f1 +#define MAS_D0_INTERFACE_CONTROL 0x7f2 +#define MAS_D0_OFREQ_CONTROL 0x7f3 +#define MAS_D0_OUT_CLK_CONFIG 0x7f4 +#define MAS_D0_SPD_OUT_BITS 0x7f8 +#define MAS_D0_SOFT_MUTE 0x7f9 +#define MAS_D0_OUT_LL 0x7fc +#define MAS_D0_OUT_LR 0x7fd +#define MAS_D0_OUT_RL 0x7fe +#define MAS_D0_OUT_RR 0x7ff +#define MAS_D0_MPEG_FRAME_COUNT 0xfd0 +#define MAS_D0_MPEG_STATUS_1 0xfd1 +#define MAS_D0_MPEG_STATUS_2 0xfd2 +#define MAS_D0_CRC_ERROR_COUNT 0xfd3 + +/* MAS3539F D0 memory cells */ +#elif CONFIG_CODEC == MAS3539F +#define MAS_D0_APP_SELECT 0x34b +#define MAS_D0_APP_RUNNING 0x34c +/* no encoder :( */ +#define MAS_D0_IO_CONTROL_MAIN 0x346 +#define MAS_D0_INTERFACE_CONTROL 0x347 +#define MAS_D0_OFREQ_CONTROL 0x348 +#define MAS_D0_OUT_CLK_CONFIG 0x349 +#define MAS_D0_SPD_OUT_BITS 0x351 +#define MAS_D0_SOFT_MUTE 0x350 +#define MAS_D0_OUT_LL 0x354 +#define MAS_D0_OUT_LR 0x355 +#define MAS_D0_OUT_RL 0x356 +#define MAS_D0_OUT_RR 0x357 +#define MAS_D0_MPEG_FRAME_COUNT 0xfd0 +#define MAS_D0_MPEG_STATUS_1 0xfd1 +#define MAS_D0_MPEG_STATUS_2 0xfd2 +#define MAS_D0_CRC_ERROR_COUNT 0xfd3 +#endif + +/* MAS3587F and MAS3539F handle clipping prevention internally so we do not need + * the prescaler -> CLIPPING_CAP + */ + +#define VOLUME_MIN -400 +#define VOLUME_MAX 600 +#define AUDIOHW_CAPS (BASS_CAP | TREBLE_CAP | BALANCE_CAP | CLIPPING_CAP) + +#endif /* CONFIG_CODEC */ + +/* Function prototypes */ +#if CONFIG_CODEC == MAS3587F || CONFIG_CODEC == MAS3539F +extern void audiohw_set_loudness(int value); +extern void audiohw_set_avc(int value); +extern void audiohw_set_mdb_strength(int value); +extern void audiohw_set_mdb_harmonics(int value); +extern void audiohw_set_mdb_center(int value); +extern void audiohw_set_mdb_shape(int value); +extern void audiohw_set_mdb_enable(int value); +extern void audiohw_set_superbass(int value); +extern void audiohw_set_balance(int val); +extern void audiohw_set_pitch(unsigned long val); +#endif #endif /* _MAS35XX_H */ -- cgit v1.2.3