diff options
| author | Andrew Ryabinin <ryabinin.a.a@gmail.com> | 2013-04-15 09:51:22 +0400 |
|---|---|---|
| committer | Andrew Ryabinin <ryabinin.a.a@gmail.com> | 2013-05-06 14:09:24 +0400 |
| commit | fa4e1baa83a5f3f28f98b5b744b7692be9fb4fca (patch) | |
| tree | dbb558d0e36b25031131d0c1e62f8c1ff8238470 /firmware/drivers/audio | |
| parent | 3fd25dcbed6ef964b828698facf6cc15189441ca (diff) | |
| download | rockbox-fa4e1baa83a5f3f28f98b5b744b7692be9fb4fca.zip rockbox-fa4e1baa83a5f3f28f98b5b744b7692be9fb4fca.tar.gz rockbox-fa4e1baa83a5f3f28f98b5b744b7692be9fb4fca.tar.bz2 rockbox-fa4e1baa83a5f3f28f98b5b744b7692be9fb4fca.tar.xz | |
Introduce HiFi E.T MA9 port.
Change-Id: I79aadc958fd5222f26f91ed127f8c6fb2c465dc2
Diffstat (limited to 'firmware/drivers/audio')
| -rw-r--r-- | firmware/drivers/audio/df1704.c | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/firmware/drivers/audio/df1704.c b/firmware/drivers/audio/df1704.c new file mode 100644 index 0000000..b0b9d7b --- /dev/null +++ b/firmware/drivers/audio/df1704.c @@ -0,0 +1,115 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2013 Andrew Ryabinin + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "system.h" +#include "df1704.h" +#include "config.h" +#include "audio.h" +#include "audiohw.h" + +static void df1704_write_reg(const int reg, const unsigned int value) +{ + int i; + + df1704_set_ml_dir(0); + df1704_set_ml(1); + df1704_set_md(1); + df1704_set_mc(1); + + for (i = (1<<15); i; i >>= 1) { + udelay(40); + df1704_set_mc(0); + + if ((reg|value) & i) { + df1704_set_md(1); + } else { + df1704_set_md(0); + } + + udelay(40); + df1704_set_mc(1); + } + + df1704_set_ml(0); + udelay(130); + df1704_set_ml(1); + udelay(130); + df1704_set_ml_dir(1); +} + +static int vol_tenthdb2hw(const int tdb) +{ + if (tdb < DF1704_VOLUME_MIN) { + return 0; + } else if (tdb > DF1704_VOLUME_MAX) { + return 0xff; + } else { + return (tdb/5+0xff); + } +} + + +void df1704_init(void) +{ + df1704_write_reg(DF1704_MODE(2), + DF1704_OW_24 | + DF1704_IW_16_I2S | + DF1704_DEM_OFF | + DF1704_MUTE_OFF); + df1704_write_reg(DF1704_MODE(3), + DF1704_CKO_HALF | + DF1704_SRO_SHARP| + DF1704_LRP_H | + DF1704_I2S_ON); +} + +void df1704_mute(void) +{ + df1704_write_reg(DF1704_MODE(2), + DF1704_OW_24 | + DF1704_IW_16_I2S | + DF1704_DEM_OFF | + DF1704_MUTE_ON); +} + +void df1704_unmute(void) +{ + df1704_write_reg(DF1704_MODE(2), + DF1704_OW_24 | + DF1704_IW_16_I2S | + DF1704_DEM_OFF | + DF1704_MUTE_OFF); +} + +void audiohw_preinit(void) +{ +} + +void audiohw_set_frequency(int fsel) +{ + (void)fsel; +} + +void audiohw_set_volume(int vol_l, int vol_r) +{ + df1704_write_reg(DF1704_MODE(0), DF1704_LDL_ON|vol_tenthdb2hw(vol_l)); + df1704_write_reg(DF1704_MODE(1), DF1704_LDR_ON|vol_tenthdb2hw(vol_r)); +} |