From 7abf2b53a462612808d46d6d77a7f35261a0e5a3 Mon Sep 17 00:00:00 2001 From: Michael Sevakis Date: Fri, 9 Apr 2010 01:21:53 +0000 Subject: Gigabeat S/i.MX31: Sort files in the /target tree into things that are SoC-generic (into /imx31) and player-specific (into /gigabeat-s, based upon current appearances). Move i2s clock init into the appropriate file. Housekeeping only-- no functional changes. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25547 a1c6a512-1295-4272-9138-f99709370657 --- .../arm/imx31/gigabeat-s/wmcodec-gigabeat-s.c | 67 ++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 firmware/target/arm/imx31/gigabeat-s/wmcodec-gigabeat-s.c (limited to 'firmware/target/arm/imx31/gigabeat-s/wmcodec-gigabeat-s.c') diff --git a/firmware/target/arm/imx31/gigabeat-s/wmcodec-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/wmcodec-gigabeat-s.c new file mode 100644 index 0000000000..96324cc162 --- /dev/null +++ b/firmware/target/arm/imx31/gigabeat-s/wmcodec-gigabeat-s.c @@ -0,0 +1,67 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Gigabeat S specific code for the WM8978 codec + * + * Copyright (C) 2008 Michael Sevakis + * + * 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 "config.h" +#include "system.h" +#include "kernel.h" +#include "sound.h" +#include "wmcodec.h" +#include "i2s.h" +#include "i2c-imx31.h" + +/* NOTE: Some port-specific bits will have to be moved away (node and GPIO + * writes) for cleanest implementation. */ + +static struct i2c_node wm8978_i2c_node = +{ + .num = I2C1_NUM, + .ifdr = I2C_IFDR_DIV192, /* 66MHz/.4MHz = 165, closest = 192 = 343750Hz */ + /* Just hard-code for now - scaling may require + * updating */ + .addr = WMC_I2C_ADDR, +}; + +void audiohw_init(void) +{ + i2s_reset(); + + i2c_enable_node(&wm8978_i2c_node, true); + + audiohw_preinit(); + + imx31_regset32(&GPIO3_DR, (1 << 21)); /* Turn on analogue LDO */ +} + +void audiohw_enable_headphone_jack(bool enable) +{ + /* Turn headphone jack output on or off. */ + imx31_regmod32(&GPIO3_DR, enable ? (1 << 22) : 0, (1 << 22)); +} + +void wmcodec_write(int reg, int data) +{ + unsigned char d[2]; + /* |aaaaaaad|dddddddd| */ + d[0] = (reg << 1) | ((data & 0x100) >> 8); + d[1] = data; + i2c_write(&wm8978_i2c_node, d, 2); +} -- cgit v1.2.3