o Unmute headphones on Imgtec CI20 board.
o Add some delay between codec initialization procedures. Sponsored by: DARPA, AFRL
This commit is contained in:
parent
b9c5487b3f
commit
b5c980fe56
@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <sys/mutex.h>
|
#include <sys/mutex.h>
|
||||||
#include <sys/resource.h>
|
#include <sys/resource.h>
|
||||||
#include <sys/rman.h>
|
#include <sys/rman.h>
|
||||||
|
#include <sys/gpio.h>
|
||||||
|
|
||||||
#include <machine/bus.h>
|
#include <machine/bus.h>
|
||||||
|
|
||||||
@ -50,9 +51,14 @@ __FBSDID("$FreeBSD$");
|
|||||||
#include <dev/ofw/ofw_bus.h>
|
#include <dev/ofw/ofw_bus.h>
|
||||||
#include <dev/ofw/ofw_bus_subr.h>
|
#include <dev/ofw/ofw_bus_subr.h>
|
||||||
|
|
||||||
|
#include <dev/gpio/gpiobusvar.h>
|
||||||
|
|
||||||
#include <mips/ingenic/jz4780_common.h>
|
#include <mips/ingenic/jz4780_common.h>
|
||||||
#include <mips/ingenic/jz4780_codec.h>
|
#include <mips/ingenic/jz4780_codec.h>
|
||||||
|
|
||||||
|
#define CI20_HP_PIN 13
|
||||||
|
#define CI20_HP_PORT 3
|
||||||
|
|
||||||
struct codec_softc {
|
struct codec_softc {
|
||||||
device_t dev;
|
device_t dev;
|
||||||
struct resource *res[1];
|
struct resource *res[1];
|
||||||
@ -149,6 +155,41 @@ codec_print_registers(struct codec_softc *sc)
|
|||||||
printf("codec DR_ADC_AGC %x\n", codec_read(sc, DR_ADC_AGC));
|
printf("codec DR_ADC_AGC %x\n", codec_read(sc, DR_ADC_AGC));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* CI20 board-specific
|
||||||
|
*/
|
||||||
|
static int
|
||||||
|
ci20_hp_unmute(struct codec_softc *sc)
|
||||||
|
{
|
||||||
|
device_t dev;
|
||||||
|
int port;
|
||||||
|
int err;
|
||||||
|
int pin;
|
||||||
|
|
||||||
|
pin = CI20_HP_PIN;
|
||||||
|
port = CI20_HP_PORT;
|
||||||
|
|
||||||
|
dev = devclass_get_device(devclass_find("gpio"), port);
|
||||||
|
if (dev == NULL)
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
err = GPIO_PIN_SETFLAGS(dev, pin, GPIO_PIN_OUTPUT);
|
||||||
|
if (err != 0) {
|
||||||
|
device_printf(dev, "Cannot configure GPIO pin %d on %s\n",
|
||||||
|
pin, device_get_nameunit(dev));
|
||||||
|
return (err);
|
||||||
|
}
|
||||||
|
|
||||||
|
err = GPIO_PIN_SET(dev, pin, 0);
|
||||||
|
if (err != 0) {
|
||||||
|
device_printf(dev, "Cannot configure GPIO pin %d on %s\n",
|
||||||
|
pin, device_get_nameunit(dev));
|
||||||
|
return (err);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
codec_probe(device_t dev)
|
codec_probe(device_t dev)
|
||||||
{
|
{
|
||||||
@ -187,10 +228,14 @@ codec_attach(device_t dev)
|
|||||||
reg &= ~(VIC_SB_SLEEP | VIC_SB);
|
reg &= ~(VIC_SB_SLEEP | VIC_SB);
|
||||||
codec_write(sc, CR_VIC, reg);
|
codec_write(sc, CR_VIC, reg);
|
||||||
|
|
||||||
|
DELAY(20000);
|
||||||
|
|
||||||
reg = codec_read(sc, CR_DAC);
|
reg = codec_read(sc, CR_DAC);
|
||||||
reg &= ~(DAC_SB | DAC_MUTE);
|
reg &= ~(DAC_SB | DAC_MUTE);
|
||||||
codec_write(sc, CR_DAC, reg);
|
codec_write(sc, CR_DAC, reg);
|
||||||
|
|
||||||
|
DELAY(10000);
|
||||||
|
|
||||||
/* I2S, 16-bit, 96 kHz. */
|
/* I2S, 16-bit, 96 kHz. */
|
||||||
reg = codec_read(sc, AICR_DAC);
|
reg = codec_read(sc, AICR_DAC);
|
||||||
reg &= ~(AICR_DAC_SB | DAC_ADWL_M);
|
reg &= ~(AICR_DAC_SB | DAC_ADWL_M);
|
||||||
@ -199,13 +244,19 @@ codec_attach(device_t dev)
|
|||||||
reg |= AUDIOIF_I2S;
|
reg |= AUDIOIF_I2S;
|
||||||
codec_write(sc, AICR_DAC, reg);
|
codec_write(sc, AICR_DAC, reg);
|
||||||
|
|
||||||
|
DELAY(10000);
|
||||||
|
|
||||||
reg = FCR_DAC_96;
|
reg = FCR_DAC_96;
|
||||||
codec_write(sc, FCR_DAC, reg);
|
codec_write(sc, FCR_DAC, reg);
|
||||||
|
|
||||||
|
DELAY(10000);
|
||||||
|
|
||||||
/* Unmute headphones. */
|
/* Unmute headphones. */
|
||||||
reg = codec_read(sc, CR_HP);
|
reg = codec_read(sc, CR_HP);
|
||||||
reg &= ~(HP_SB | HP_MUTE);
|
reg &= ~(HP_SB | HP_MUTE);
|
||||||
codec_write(sc, CR_HP, 0);
|
codec_write(sc, CR_HP, reg);
|
||||||
|
|
||||||
|
ci20_hp_unmute(sc);
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user