From owner-svn-src-head@freebsd.org Tue Dec 20 18:47:03 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 865ECC87595; Tue, 20 Dec 2016 18:47:03 +0000 (UTC) (envelope-from br@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 31AB818D0; Tue, 20 Dec 2016 18:47:03 +0000 (UTC) (envelope-from br@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id uBKIl2qm010272; Tue, 20 Dec 2016 18:47:02 GMT (envelope-from br@FreeBSD.org) Received: (from br@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id uBKIl25t010271; Tue, 20 Dec 2016 18:47:02 GMT (envelope-from br@FreeBSD.org) Message-Id: <201612201847.uBKIl25t010271@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: br set sender to br@FreeBSD.org using -f From: Ruslan Bukin Date: Tue, 20 Dec 2016 18:47:02 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r310334 - head/sys/mips/ingenic X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 20 Dec 2016 18:47:03 -0000 Author: br Date: Tue Dec 20 18:47:02 2016 New Revision: 310334 URL: https://svnweb.freebsd.org/changeset/base/310334 Log: o Unmute headphones on Imgtec CI20 board. o Add some delay between codec initialization procedures. Sponsored by: DARPA, AFRL Modified: head/sys/mips/ingenic/jz4780_codec.c Modified: head/sys/mips/ingenic/jz4780_codec.c ============================================================================== --- head/sys/mips/ingenic/jz4780_codec.c Tue Dec 20 18:27:53 2016 (r310333) +++ head/sys/mips/ingenic/jz4780_codec.c Tue Dec 20 18:47:02 2016 (r310334) @@ -43,6 +43,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include @@ -50,9 +51,14 @@ __FBSDID("$FreeBSD$"); #include #include +#include + #include #include +#define CI20_HP_PIN 13 +#define CI20_HP_PORT 3 + struct codec_softc { device_t dev; struct resource *res[1]; @@ -149,6 +155,41 @@ codec_print_registers(struct codec_softc 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 codec_probe(device_t dev) { @@ -187,10 +228,14 @@ codec_attach(device_t dev) reg &= ~(VIC_SB_SLEEP | VIC_SB); codec_write(sc, CR_VIC, reg); + DELAY(20000); + reg = codec_read(sc, CR_DAC); reg &= ~(DAC_SB | DAC_MUTE); codec_write(sc, CR_DAC, reg); + DELAY(10000); + /* I2S, 16-bit, 96 kHz. */ reg = codec_read(sc, AICR_DAC); reg &= ~(AICR_DAC_SB | DAC_ADWL_M); @@ -199,13 +244,19 @@ codec_attach(device_t dev) reg |= AUDIOIF_I2S; codec_write(sc, AICR_DAC, reg); + DELAY(10000); + reg = FCR_DAC_96; codec_write(sc, FCR_DAC, reg); + DELAY(10000); + /* Unmute headphones. */ reg = codec_read(sc, CR_HP); reg &= ~(HP_SB | HP_MUTE); - codec_write(sc, CR_HP, 0); + codec_write(sc, CR_HP, reg); + + ci20_hp_unmute(sc); return (0); }