Module Name: src Committed By: bouyer Date: Fri Nov 20 18:32:13 UTC 2015
Modified Files: src/sys/arch/arm/allwinner: awin_tcon.c Log Message: Turn off more bits when turning off the display. Saves about 50ma on the 5V supply. To generate a diff of this commit: cvs rdiff -u -r1.10 -r1.11 src/sys/arch/arm/allwinner/awin_tcon.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/allwinner/awin_tcon.c diff -u src/sys/arch/arm/allwinner/awin_tcon.c:1.10 src/sys/arch/arm/allwinner/awin_tcon.c:1.11 --- src/sys/arch/arm/allwinner/awin_tcon.c:1.10 Thu Nov 19 18:48:22 2015 +++ src/sys/arch/arm/allwinner/awin_tcon.c Fri Nov 20 18:32:13 2015 @@ -1,4 +1,4 @@ -/* $NetBSD: awin_tcon.c,v 1.10 2015/11/19 18:48:22 bouyer Exp $ */ +/* $NetBSD: awin_tcon.c,v 1.11 2015/11/20 18:32:13 bouyer Exp $ */ /*- * Copyright (c) 2014 Jared D. McNeill <jmcne...@invisible.ca> @@ -29,7 +29,7 @@ #include "opt_allwinner.h" #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: awin_tcon.c,v 1.10 2015/11/19 18:48:22 bouyer Exp $"); +__KERNEL_RCSID(0, "$NetBSD: awin_tcon.c,v 1.11 2015/11/20 18:32:13 bouyer Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -555,13 +555,29 @@ awin_tcon0_enable(struct awin_tcon_softc awin_debe_enable(device_unit(sc->sc_dev), enable); delay(20000); - val = TCON_READ(sc, AWIN_TCON_GCTL_REG); if (enable) { + val = TCON_READ(sc, AWIN_TCON_GCTL_REG); val |= AWIN_TCON_GCTL_EN; + TCON_WRITE(sc, AWIN_TCON_GCTL_REG, val); + val = TCON_READ(sc, AWIN_TCON0_CTL_REG); + val |= AWIN_TCONx_CTL_EN; + TCON_WRITE(sc, AWIN_TCON0_CTL_REG, val); + val = TCON_READ(sc, AWIN_TCON0_LVDS_IF_REG); + val |= AWIN_TCON0_LVDS_IF_EN; + TCON_WRITE(sc, AWIN_TCON0_LVDS_IF_REG, val); + TCON_WRITE(sc, AWIN_TCON0_IO_TRI_REG, 0); } else { + TCON_WRITE(sc, AWIN_TCON0_IO_TRI_REG, 0xffffffff); + val = TCON_READ(sc, AWIN_TCON0_LVDS_IF_REG); + val &= ~AWIN_TCON0_LVDS_IF_EN; + TCON_WRITE(sc, AWIN_TCON0_LVDS_IF_REG, val); + val = TCON_READ(sc, AWIN_TCON0_CTL_REG); + val &= ~AWIN_TCONx_CTL_EN; + TCON_WRITE(sc, AWIN_TCON0_CTL_REG, val); + val = TCON_READ(sc, AWIN_TCON_GCTL_REG); val &= ~AWIN_TCON_GCTL_EN; + TCON_WRITE(sc, AWIN_TCON_GCTL_REG, val); } - TCON_WRITE(sc, AWIN_TCON_GCTL_REG, val); } void @@ -581,15 +597,23 @@ awin_tcon1_enable(int unit, bool enable) awin_debe_enable(device_unit(sc->sc_dev), enable); delay(20000); - val = TCON_READ(sc, AWIN_TCON_GCTL_REG); if (enable) { + val = TCON_READ(sc, AWIN_TCON_GCTL_REG); val |= AWIN_TCON_GCTL_EN; + TCON_WRITE(sc, AWIN_TCON_GCTL_REG, val); + val = TCON_READ(sc, AWIN_TCON1_CTL_REG); + val |= AWIN_TCONx_CTL_EN; + TCON_WRITE(sc, AWIN_TCON1_CTL_REG, val); + TCON_WRITE(sc, AWIN_TCON1_IO_TRI_REG, 0); } else { + TCON_WRITE(sc, AWIN_TCON1_IO_TRI_REG, 0xffffffff); + val = TCON_READ(sc, AWIN_TCON1_CTL_REG); + val &= ~AWIN_TCONx_CTL_EN; + TCON_WRITE(sc, AWIN_TCON1_CTL_REG, val); + val = TCON_READ(sc, AWIN_TCON_GCTL_REG); val &= ~AWIN_TCON_GCTL_EN; + TCON_WRITE(sc, AWIN_TCON_GCTL_REG, val); } - TCON_WRITE(sc, AWIN_TCON_GCTL_REG, val); - - TCON_WRITE(sc, AWIN_TCON1_IO_TRI_REG, 0); KASSERT(tcon_mux_inited); val = bus_space_read_4(sc->sc_bst, tcon_mux_bsh, 0);