[coreboot-gerrit] New patch to review for coreboot: fd243a6 tegra124: Program PWM1 to drive panel backlight

Marc Jones (marc.jones@se-eng.com) gerrit at coreboot.org
Tue Nov 11 04:14:09 CET 2014


Marc Jones (marc.jones at se-eng.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/7402

-gerrit

commit fd243a6d718e009b709b1a8a6e3bdfa1bde340d4
Author: Andrew Chew <achew at nvidia.com>
Date:   Mon Feb 10 16:44:18 2014 -0800

    tegra124: Program PWM1 to drive panel backlight
    
    Repurpose config->pwm to mean the particular PWM device (we use PWM1 on
    nyan), and add code to program the PWM device.
    
    BUG=none
    TEST=emerge-nyan chromeos-coreboot-nyan, regenerate bootimage, and boot.
    See that the backlight comes up in the bootloader, and brightness can be
    adjusted via pwm_bl driver in the kernel.
    
    Original-Change-Id: I2db047e5ef23c0e8fb66dd05ad6339d60918d493
    Original-Signed-off-by: Andrew Chew <achew at nvidia.com>
    Original-Reviewed-on: https://chromium-review.googlesource.com/185772
    Original-Reviewed-by: Andrew Bresticker <abrestic at chromium.org>
    (cherry picked from commit 0dee98dd0c8510ecd630b5c6cb9ea49724dc8b55)
    Signed-off-by: Marc Jones <marc.jones at se-eng.com>
    
    Change-Id: Ie53610f3afa30b2d8f484685fb0e8c0b12cd8241
---
 src/mainboard/google/nyan/devicetree.cb     |  2 +-
 src/mainboard/google/nyan_big/devicetree.cb |  2 +-
 src/soc/nvidia/tegra124/display.c           | 16 +++++++++++-----
 3 files changed, 13 insertions(+), 7 deletions(-)

diff --git a/src/mainboard/google/nyan/devicetree.cb b/src/mainboard/google/nyan/devicetree.cb
index 5894556..5ae8691 100644
--- a/src/mainboard/google/nyan/devicetree.cb
+++ b/src/mainboard/google/nyan/devicetree.cb
@@ -38,7 +38,7 @@ chip soc/nvidia/tegra124
 	register "lvds_shutdown_gpio" = "0"
 	register "backlight_vdd_gpio" = "GPIO(P2)"
 	register "panel_vdd_gpio" = "0"
-	register "pwm" = "GPIO(H1)"
+	register "pwm" = "1"
 
 # taken from u-boot; these look wrong however.
 	register "vdd_delay" = "400"
diff --git a/src/mainboard/google/nyan_big/devicetree.cb b/src/mainboard/google/nyan_big/devicetree.cb
index cb55b72..9541ce9 100644
--- a/src/mainboard/google/nyan_big/devicetree.cb
+++ b/src/mainboard/google/nyan_big/devicetree.cb
@@ -38,7 +38,7 @@ chip soc/nvidia/tegra124
 	register "lvds_shutdown_gpio" = "0"
 	register "backlight_vdd_gpio" = "GPIO(P2)"
 	register "panel_vdd_gpio" = "0"
-	register "pwm" = "GPIO(H1)"
+	register "pwm" = "1"
 
 # taken from u-boot; these look wrong however.
 	register "vdd_delay" = "400"
diff --git a/src/soc/nvidia/tegra124/display.c b/src/soc/nvidia/tegra124/display.c
index 2fbec50..8c4e823 100644
--- a/src/soc/nvidia/tegra124/display.c
+++ b/src/soc/nvidia/tegra124/display.c
@@ -33,6 +33,7 @@
 #include <edid.h>
 #include <soc/clock.h>
 #include <soc/nvidia/tegra/dc.h>
+#include <soc/nvidia/tegra/pwm.h>
 #include <soc/nvidia/tegra124/sdram.h>
 #include "chip.h"
 #include <soc/display.h>
@@ -240,6 +241,7 @@ void display_startup(device_t dev)
 	int i;
 	struct soc_nvidia_tegra124_config *config = dev->chip_info;
 	struct display_controller *dc = (void *)config->display_controller;
+	struct pwm_controller *pwm = (void *)TEGRA_PWM_BASE;
 	struct disp_ctl_win window;
 
 	/* should probably just make it all MiB ... in future */
@@ -270,11 +272,15 @@ void display_startup(device_t dev)
 			__func__, config->backlight_en_gpio, 1);
 	}
 
-	if (config->pwm){
-		gpio_output(config->pwm, 1);
-		printk(BIOS_SPEW,"%s: pwm setting gpio %08x to %d\n",
-			__func__, config->pwm, 1);
-	}
+	/* Set up Tegra PWM n (where n is specified in config->pwm) to drive the
+	 * panel backlight.
+	 */
+	printk(BIOS_SPEW, "%s: enable panel backlight pwm\n", __func__);
+	WRITEL(((1 << NV_PWM_CSR_ENABLE_SHIFT) |
+		(220 << NV_PWM_CSR_PULSE_WIDTH_SHIFT) | /* 220/256 */
+		0x02e), /* frequency divider */
+	       &pwm->pwm[config->pwm].csr);
+
 	printk(BIOS_SPEW,
 		"%s: xres %d yres %d framebuffer_bits_per_pixel %d\n",
 		__func__,



More information about the coreboot-gerrit mailing list