All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 37/45] panel: Expand the backlight support
Date: Mon,  1 Oct 2018 12:22:41 -0600	[thread overview]
Message-ID: <20181001182249.129565-38-sjg@chromium.org> (raw)
In-Reply-To: <20181001182249.129565-1-sjg@chromium.org>

At present the panel can be turned on but not off, and the brightness
cannot be controlled at run-time. Add a new API function to both the panel
and backlight uclasses to handle this. Enhance the PWM backlight driver
to deal with custom levels properly and allow the backlight to be turned
on and off.

Update the test to cover thes new features.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

 drivers/video/backlight-uclass.c |  10 ++
 drivers/video/panel-uclass.c     |  18 +++
 drivers/video/pwm_backlight.c    | 186 +++++++++++++++++++++++++------
 drivers/video/simple_panel.c     |  20 +++-
 include/backlight.h              |  25 +++++
 include/panel.h                  |  22 +++-
 test/dm/panel.c                  |  29 +++++
 7 files changed, 273 insertions(+), 37 deletions(-)

diff --git a/drivers/video/backlight-uclass.c b/drivers/video/backlight-uclass.c
index 92715e2f130..0aadf8a1f97 100644
--- a/drivers/video/backlight-uclass.c
+++ b/drivers/video/backlight-uclass.c
@@ -18,6 +18,16 @@ int backlight_enable(struct udevice *dev)
 	return ops->enable(dev);
 }
 
+int backlight_set_brightness(struct udevice *dev, int percent)
+{
+	const struct backlight_ops *ops = backlight_get_ops(dev);
+
+	if (!ops->set_brightness)
+		return -ENOSYS;
+
+	return ops->set_brightness(dev, percent);
+}
+
 UCLASS_DRIVER(backlight) = {
 	.id		= UCLASS_PANEL_BACKLIGHT,
 	.name		= "backlight",
diff --git a/drivers/video/panel-uclass.c b/drivers/video/panel-uclass.c
index aec44a8bf7a..246d1b2836d 100644
--- a/drivers/video/panel-uclass.c
+++ b/drivers/video/panel-uclass.c
@@ -18,6 +18,24 @@ int panel_enable_backlight(struct udevice *dev)
 	return ops->enable_backlight(dev);
 }
 
+/**
+ * panel_set_backlight - Set brightness for the panel backlight
+ *
+ * @dev:	Panel device containing the backlight to update
+ * @percent:	Brightness value (0=off, 1=min brightness,
+ *		100=full brightness)
+ * @return 0 if OK, -ve on error
+ */
+int panel_set_backlight(struct udevice *dev, int percent)
+{
+	struct panel_ops *ops = panel_get_ops(dev);
+
+	if (!ops->set_backlight)
+		return -ENOSYS;
+
+	return ops->set_backlight(dev, percent);
+}
+
 int panel_get_display_timing(struct udevice *dev,
 			     struct display_timing *timings)
 {
diff --git a/drivers/video/pwm_backlight.c b/drivers/video/pwm_backlight.c
index 53953179bfb..33308ccbe63 100644
--- a/drivers/video/pwm_backlight.c
+++ b/drivers/video/pwm_backlight.c
@@ -4,6 +4,8 @@
  * Written by Simon Glass <sjg@chromium.org>
  */
 
+#define LOG_CATEGORY UCLASS_PANEL_BACKLIGHT
+
 #include <common.h>
 #include <dm.h>
 #include <backlight.h>
@@ -11,48 +13,155 @@
 #include <asm/gpio.h>
 #include <power/regulator.h>
 
+/**
+ * Private information for the PWM backlight
+ *
+ * If @num_levels is 0 then the levels are simple values with the backlight
+ * value going between the minimum (default 0) and the maximum (default 255).
+ * Otherwise the levels are an index into @levels (0..n-1).
+ *
+ * @reg: Regulator to enable to turn the backlight on (NULL if none)
+ * @enable, GPIO to set to enable the backlight (can be missing)
+ * @pwm: PWM to use to change the backlight brightness
+ * @channel: PWM channel to use
+ * @period_ns: Period of the backlight in nanoseconds
+ * @levels: Levels for the backlight, or NULL if not using indexed levels
+ * @num_levels: Number of levels
+ * @cur_level: Current level for the backlight (index or value)
+ * @default_level: Default level for the backlight (index or value)
+ * @min_level: Minimum level of the backlight (full off)
+ * @min_level: Maximum level of the backlight (full on)
+ * @enabled: true if backlight is enabled
+ */
 struct pwm_backlight_priv {
 	struct udevice *reg;
 	struct gpio_desc enable;
 	struct udevice *pwm;
 	uint channel;
 	uint period_ns;
+	u32 *levels;
+	int num_levels;
 	uint default_level;
+	int cur_level;
 	uint min_level;
 	uint max_level;
+	bool enabled;
 };
 
-static int pwm_backlight_enable(struct udevice *dev)
+static int set_pwm(struct pwm_backlight_priv *priv)
 {
-	struct pwm_backlight_priv *priv = dev_get_priv(dev);
-	struct dm_regulator_uclass_platdata *plat;
 	uint duty_cycle;
 	int ret;
 
-	if (priv->reg) {
-		plat = dev_get_uclass_platdata(priv->reg);
-		debug("%s: Enable '%s', regulator '%s'/'%s'\n", __func__,
-		      dev->name, priv->reg->name, plat->name);
-		ret = regulator_set_enable(priv->reg, true);
-		if (ret) {
-			debug("%s: Cannot enable regulator for PWM '%s'\n",
-			      __func__, dev->name);
-			return ret;
-		}
-		mdelay(120);
-	}
-
-	duty_cycle = priv->period_ns * (priv->default_level - priv->min_level) /
+	duty_cycle = priv->period_ns * (priv->cur_level - priv->min_level) /
 		(priv->max_level - priv->min_level + 1);
 	ret = pwm_set_config(priv->pwm, priv->channel, priv->period_ns,
 			     duty_cycle);
+
+	return log_ret(ret);
+}
+
+static int enable_sequence(struct udevice *dev, int seq)
+{
+	struct pwm_backlight_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	switch (seq) {
+	case 0:
+		if (priv->reg) {
+			struct dm_regulator_uclass_platdata *plat;
+
+			plat = dev_get_uclass_platdata(priv->reg);
+			log_debug("Enable '%s', regulator '%s'/'%s'\n",
+				  dev->name, priv->reg->name, plat->name);
+			ret = regulator_set_enable(priv->reg, true);
+			if (ret) {
+				log_debug("Cannot enable regulator for PWM '%s'\n",
+					  __func__, dev->name);
+				return log_ret(ret);
+			}
+			mdelay(120);
+		}
+		break;
+	case 1:
+		mdelay(10);
+		dm_gpio_set_value(&priv->enable, 1);
+		break;
+	}
+
+	return 0;
+}
+
+static int pwm_backlight_enable(struct udevice *dev)
+{
+	struct pwm_backlight_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	ret = enable_sequence(dev, 0);
+	if (ret)
+		return log_ret(ret);
+	ret = set_pwm(priv);
 	if (ret)
-		return ret;
+		return log_ret(ret);
 	ret = pwm_set_enable(priv->pwm, priv->channel, true);
 	if (ret)
-		return ret;
-	mdelay(10);
-	dm_gpio_set_value(&priv->enable, 1);
+		return log_ret(ret);
+	ret = enable_sequence(dev, 1);
+	if (ret)
+		return log_ret(ret);
+	priv->enabled = true;
+
+	return 0;
+}
+
+static int pwm_backlight_set_brightness(struct udevice *dev, int percent)
+{
+	struct pwm_backlight_priv *priv = dev_get_priv(dev);
+	bool disable = false;
+	int level;
+	int ret;
+
+	if (!priv->enabled) {
+		ret = enable_sequence(dev, 0);
+		if (ret)
+			return log_ret(ret);
+	}
+	if (percent == BACKLIGHT_OFF) {
+		disable = true;
+		percent = 0;
+	}
+	if (percent == BACKLIGHT_DEFAULT) {
+		level = priv->default_level;
+	} else {
+		if (priv->levels) {
+			level = priv->levels[percent * (priv->num_levels - 1)
+				/ 100];
+		} else {
+			level = priv->min_level +
+				(priv->max_level - priv->min_level) *
+				percent / 100;
+		}
+	}
+	priv->cur_level = level;
+
+	ret = set_pwm(priv);
+	if (ret)
+		return log_ret(ret);
+	if (!priv->enabled) {
+		ret = enable_sequence(dev, 1);
+		if (ret)
+			return log_ret(ret);
+		priv->enabled = true;
+	}
+	if (disable) {
+		dm_gpio_set_value(&priv->enable, 0);
+		if (priv->reg) {
+			ret = regulator_set_enable(priv->reg, false);
+			if (ret)
+				return log_ret(ret);
+		}
+		priv->enabled = false;
+	}
 
 	return 0;
 }
@@ -64,31 +173,32 @@ static int pwm_backlight_ofdata_to_platdata(struct udevice *dev)
 	int index, ret, count, len;
 	const u32 *cell;
 
-	debug("%s: start\n", __func__);
+	log_debug("start\n");
 	ret = uclass_get_device_by_phandle(UCLASS_REGULATOR, dev,
 					   "power-supply", &priv->reg);
 	if (ret)
-		debug("%s: Cannot get power supply: ret=%d\n", __func__, ret);
+		log_debug("Cannot get power supply: ret=%d\n", ret);
 	ret = gpio_request_by_name(dev, "enable-gpios", 0, &priv->enable,
 				   GPIOD_IS_OUT);
 	if (ret) {
-		debug("%s: Warning: cannot get enable GPIO: ret=%d\n",
-		      __func__, ret);
+		log_debug("Warning: cannot get enable GPIO: ret=%d\n", ret);
 		if (ret != -ENOENT)
-			return ret;
+			return log_ret(ret);
 	}
 	ret = dev_read_phandle_with_args(dev, "pwms", "#pwm-cells", 0, 0,
 					 &args);
 	if (ret) {
-		debug("%s: Cannot get PWM phandle: ret=%d\n", __func__, ret);
-		return ret;
+		log_debug("Cannot get PWM phandle: ret=%d\n", ret);
+		return log_ret(ret);
 	}
 
 	ret = uclass_get_device_by_ofnode(UCLASS_PWM, args.node, &priv->pwm);
 	if (ret) {
-		debug("%s: Cannot get PWM: ret=%d\n", __func__, ret);
-		return ret;
+		log_debug("Cannot get PWM: ret=%d\n", ret);
+		return log_ret(ret);
 	}
+	if (args.args_count < 2)
+		return log_msg_ret("Not enough arguments to pwm\n", -EINVAL);
 	priv->channel = args.args[0];
 	priv->period_ns = args.args[1];
 
@@ -96,13 +206,20 @@ static int pwm_backlight_ofdata_to_platdata(struct udevice *dev)
 	cell = dev_read_prop(dev, "brightness-levels", &len);
 	count = len / sizeof(u32);
 	if (cell && count > index) {
-		priv->default_level = fdt32_to_cpu(cell[index]);
-		priv->max_level = fdt32_to_cpu(cell[count - 1]);
+		priv->levels = malloc(len);
+		if (!priv->levels)
+			return log_ret(-ENOMEM);
+		dev_read_u32_array(dev, "brightness-levels", priv->levels,
+				   count);
+		priv->num_levels = count;
+		priv->default_level = priv->levels[index];
+		priv->max_level = priv->levels[count - 1];
 	} else {
 		priv->default_level = index;
 		priv->max_level = 255;
 	}
-	debug("%s: done\n", __func__);
+	priv->cur_level = priv->default_level;
+	log_debug("done\n");
 
 
 	return 0;
@@ -114,7 +231,8 @@ static int pwm_backlight_probe(struct udevice *dev)
 }
 
 static const struct backlight_ops pwm_backlight_ops = {
-	.enable	= pwm_backlight_enable,
+	.enable		= pwm_backlight_enable,
+	.set_brightness	= pwm_backlight_set_brightness,
 };
 
 static const struct udevice_id pwm_backlight_ids[] = {
diff --git a/drivers/video/simple_panel.c b/drivers/video/simple_panel.c
index 6c604f9bedb..7a968e740c5 100644
--- a/drivers/video/simple_panel.c
+++ b/drivers/video/simple_panel.c
@@ -32,6 +32,21 @@ static int simple_panel_enable_backlight(struct udevice *dev)
 	return 0;
 }
 
+static int simple_panel_set_backlight(struct udevice *dev, int percent)
+{
+	struct simple_panel_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	debug("%s: start, backlight = '%s'\n", __func__, priv->backlight->name);
+	dm_gpio_set_value(&priv->enable, 1);
+	ret = backlight_set_brightness(priv->backlight, percent);
+	debug("%s: done, ret = %d\n", __func__, ret);
+	if (ret)
+		return ret;
+
+	return 0;
+}
+
 static int simple_panel_ofdata_to_platdata(struct udevice *dev)
 {
 	struct simple_panel_priv *priv = dev_get_priv(dev);
@@ -51,7 +66,7 @@ static int simple_panel_ofdata_to_platdata(struct udevice *dev)
 					   "backlight", &priv->backlight);
 	if (ret) {
 		debug("%s: Cannot get backlight: ret=%d\n", __func__, ret);
-		return ret;
+		return log_ret(ret);
 	}
 	ret = gpio_request_by_name(dev, "enable-gpios", 0, &priv->enable,
 				   GPIOD_IS_OUT);
@@ -59,7 +74,7 @@ static int simple_panel_ofdata_to_platdata(struct udevice *dev)
 		debug("%s: Warning: cannot get enable GPIO: ret=%d\n",
 		      __func__, ret);
 		if (ret != -ENOENT)
-			return ret;
+			return log_ret(ret);
 	}
 
 	return 0;
@@ -82,6 +97,7 @@ static int simple_panel_probe(struct udevice *dev)
 
 static const struct panel_ops simple_panel_ops = {
 	.enable_backlight	= simple_panel_enable_backlight,
+	.set_backlight		= simple_panel_set_backlight,
 };
 
 static const struct udevice_id simple_panel_ids[] = {
diff --git a/include/backlight.h b/include/backlight.h
index a304c36e019..ac59eb293b4 100644
--- a/include/backlight.h
+++ b/include/backlight.h
@@ -7,6 +7,13 @@
 #ifndef _BACKLIGHT_H
 #define _BACKLIGHT_H
 
+enum {
+	BACKLIGHT_MAX		= 100,
+	BACKLIGHT_MIN		= 0,
+	BACKLIGHT_OFF		= -1,
+	BACKLIGHT_DEFAULT	= -2,
+};
+
 struct backlight_ops {
 	/**
 	 * enable() - Enable a backlight
@@ -15,6 +22,15 @@ struct backlight_ops {
 	 * @return 0 if OK, -ve on error
 	 */
 	int (*enable)(struct udevice *dev);
+
+	/**
+	 * set_brightness - Set brightness
+	 *
+	 * @dev:	Backlight device to update
+	 * @percent:	Brightness value (0 to 100, or BACKLIGHT_... value)
+	 * @return 0 if OK, -ve on error
+	 */
+	int (*set_brightness)(struct udevice *dev, int percent);
 };
 
 #define backlight_get_ops(dev)	((struct backlight_ops *)(dev)->driver->ops)
@@ -27,4 +43,13 @@ struct backlight_ops {
  */
 int backlight_enable(struct udevice *dev);
 
+/**
+ * backlight_set_brightness - Set brightness
+ *
+ * @dev:	Backlight device to update
+ * @percent:	Brightness value (0 to 100, or BACKLIGHT_... value)
+ * @return 0 if OK, -ve on error
+ */
+int backlight_set_brightness(struct udevice *dev, int percent);
+
 #endif
diff --git a/include/panel.h b/include/panel.h
index 6237d32657d..cd596d48c02 100644
--- a/include/panel.h
+++ b/include/panel.h
@@ -15,6 +15,16 @@ struct panel_ops {
 	 * @return 0 if OK, -ve on error
 	 */
 	int (*enable_backlight)(struct udevice *dev);
+
+	/**
+	 * set_backlight - Set panel backlight brightness
+	 *
+	 * @dev:	Panel device containing the backlight to update
+	 * @percent:	Brightness value (0 to 100, or BACKLIGHT_... value)
+	 * @return 0 if OK, -ve on error
+	 */
+	int (*set_backlight)(struct udevice *dev, int percent);
+
 	/**
 	 * get_timings() - Get display timings from panel.
 	 *
@@ -29,13 +39,23 @@ struct panel_ops {
 #define panel_get_ops(dev)	((struct panel_ops *)(dev)->driver->ops)
 
 /**
- * panel_enable_backlight() - Enable the panel backlight
+ * panel_enable_backlight() - Enable/disable the panel backlight
  *
  * @dev:	Panel device containing the backlight to enable
+ * @enable:	true to enable the backlight, false to dis
  * @return 0 if OK, -ve on error
  */
 int panel_enable_backlight(struct udevice *dev);
 
+/**
+ * panel_set_backlight - Set brightness for the panel backlight
+ *
+ * @dev:	Panel device containing the backlight to update
+ * @percent:	Brightness value (0 to 100, or BACKLIGHT_... value)
+ * @return 0 if OK, -ve on error
+ */
+int panel_set_backlight(struct udevice *dev, int percent);
+
 /**
  * panel_get_display_timing() - Get display timings from panel.
  *
diff --git a/test/dm/panel.c b/test/dm/panel.c
index ca032409f8c..7e4ebd6d81e 100644
--- a/test/dm/panel.c
+++ b/test/dm/panel.c
@@ -45,6 +45,35 @@ static int dm_test_panel(struct unit_test_state *uts)
 	ut_asserteq(1, sandbox_gpio_get_value(gpio, 1));
 	ut_asserteq(true, regulator_get_enable(reg));
 
+	ut_assertok(panel_set_backlight(dev, 40));
+	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
+					   &enable, &polarity));
+	ut_asserteq(64 * 1000 / 256, duty_ns);
+
+	ut_assertok(panel_set_backlight(dev, BACKLIGHT_MAX));
+	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
+					   &enable, &polarity));
+	ut_asserteq(255 * 1000 / 256, duty_ns);
+
+	ut_assertok(panel_set_backlight(dev, BACKLIGHT_MIN));
+	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
+					   &enable, &polarity));
+	ut_asserteq(0 * 1000 / 256, duty_ns);
+	ut_asserteq(1, sandbox_gpio_get_value(gpio, 1));
+
+	ut_assertok(panel_set_backlight(dev, BACKLIGHT_DEFAULT));
+	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
+					   &enable, &polarity));
+	ut_asserteq(true, enable);
+	ut_asserteq(170 * 1000 / 256, duty_ns);
+
+	ut_assertok(panel_set_backlight(dev, BACKLIGHT_OFF));
+	ut_assertok(sandbox_pwm_get_config(pwm, 0, &period_ns, &duty_ns,
+					   &enable, &polarity));
+	ut_asserteq(0 * 1000 / 256, duty_ns);
+	ut_asserteq(0, sandbox_gpio_get_value(gpio, 1));
+	ut_asserteq(false, regulator_get_enable(reg));
+
 	return 0;
 }
 DM_TEST(dm_test_panel, DM_TESTF_SCAN_PDATA | DM_TESTF_SCAN_FDT);
-- 
2.19.0.605.g01d371f741-goog

  parent reply	other threads:[~2018-10-01 18:22 UTC|newest]

Thread overview: 106+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-10-01 18:22 [U-Boot] [PATCH 00/45] Various fixes and improvements Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 01/45] dm: core: Alloc uclass-private data to be cache-aligned Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 02/45] dm: core: Update some functions to use const Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 03/45] dm: core: Add a function to find the first inactive child Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 04/45] dm: core: Update ofnode to read binman-style flash entry Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 05/45] sf: Avoid allocating memory on every read operation Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 06/45] spl: input: Allow input in SPL and TPL Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 07/45] Makefile: Add a warning if SPL/TPL cannot be built Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 08/45] spl: misc: Allow misc drivers in SPL and TPL Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 09/45] blk: Support block drivers in TPL Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 10/45] Kconfig: Convert CONFIG_RTC_MC146818 to Kconfig Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 11/45] rtc: Allow use of RTC in SPL and TPL Simon Glass
2018-10-11 19:21   ` [U-Boot] [U-Boot,11/45] " Heinrich Schuchardt
2018-10-11 19:56     ` Heinrich Schuchardt
2018-10-13  2:46       ` Bin Meng
2018-10-19  3:25         ` Simon Glass
2018-10-19  4:20           ` Bin Meng
2018-10-01 18:22 ` [U-Boot] [PATCH 12/45] fdt: Document the fact that dtc is now built Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 13/45] doc: Update docs for device tree in SPL, TPL Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 14/45] fdt: Allow indicating a node is for U-Boot proper only Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 15/45] tpm: Add support for SPL and TPL Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 16/45] serial: Allow serial to be absent in TPL Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 17/45] fdt: Allow libfdt " Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 18/45] cros: Update cros_ec code to use struct udevice Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 19/45] cros: Adjust board_get_cros_ec_dev() to return a udevice Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 20/45] dm: spi: Add logging of some return values Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 21/45] fdt: Remove fdtdec_decode_region() function Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 22/45] video: Adjust video_clear() to return an error Simon Glass
2018-10-01 19:23   ` Anatolij Gustschin
2018-10-09 23:55   ` sjg at google.com
2018-10-01 18:22 ` [U-Boot] [PATCH 23/45] tpm: Use livetree and allow children Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 24/45] tpm: Tidy up logging in tpm-common.c Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 25/45] tpm: Add a few new commands for v1 Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 26/45] binman: Move to three-digit test-file numbers Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 27/45] binman: Add a test for Intel reference code Simon Glass
2018-10-22 20:54   ` [U-Boot] [U-Boot, " Tom Rini
2018-10-01 18:22 ` [U-Boot] [PATCH 28/45] log: Add comments to the rest of the log categories Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 29/45] malloc_simple: Add logging of allocations Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 30/45] Add a header file for strings Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 31/45] Rename GPT_HEADER_SIGNATURE to avoid conflict Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 32/45] cros: Update ec_commands to latest version Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 33/45] x86: Update mtrr functions to allow leaving cache alone Simon Glass
2018-10-02 13:41   ` Bin Meng
2018-10-09 23:54   ` sjg at google.com
2018-10-01 18:22 ` [U-Boot] [PATCH 34/45] cros_ec: Update cros_ec_read_hash() to specify the image Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 35/45] cros_ec: Add support for v3 messages on LPC Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 36/45] test: panel: Add a test for the panel uclass Simon Glass
2018-10-01 18:22 ` Simon Glass [this message]
2018-10-01 18:22 ` [U-Boot] [PATCH 38/45] ctags: Minor changes to fix ctags output Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 39/45] fdt: Allow C++ comments in link scripts and DT files Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 40/45] pci: Add a little more debugging to pci_rom Simon Glass
2018-10-02 13:37   ` Bin Meng
2018-10-09 23:54   ` sjg at google.com
2018-10-01 18:22 ` [U-Boot] [PATCH 41/45] sysreset: Tidy up a few comments and logging Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 42/45] sysreset: Add a way to find the last reset Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 43/45] video: at91: Adjust vidconsole_position_cursor() to use char pos Simon Glass
2018-10-01 20:22   ` Anatolij Gustschin
2018-10-02  7:37     ` Eugen Hristev
2018-10-09  3:40       ` Simon Glass
2018-10-09 10:44         ` Eugen.Hristev at microchip.com
2018-10-09 23:54         ` sjg at google.com
2018-10-09  3:41     ` Simon Glass
2018-10-01 18:22 ` [U-Boot] [PATCH 44/45] video: Tidy up a few comments in video.o Simon Glass
2018-10-01 19:25   ` Anatolij Gustschin
2018-10-09 23:54   ` sjg at google.com
2018-10-01 18:22 ` [U-Boot] [PATCH 45/45] dtoc: Fix the value of SetInt() Simon Glass
2018-10-09 23:54 ` sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 42/45] sysreset: Add a way to find the last reset sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 41/45] sysreset: Tidy up a few comments and logging sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 38/45] ctags: Minor changes to fix ctags output sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 39/45] fdt: Allow C++ comments in link scripts and DT files sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 37/45] panel: Expand the backlight support sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 36/45] test: panel: Add a test for the panel uclass sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 35/45] cros_ec: Add support for v3 messages on LPC sjg at google.com
2018-10-09 23:54 ` [U-Boot] [PATCH 34/45] cros_ec: Update cros_ec_read_hash() to specify the image sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 32/45] cros: Update ec_commands to latest version sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 31/45] Rename GPT_HEADER_SIGNATURE to avoid conflict sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 30/45] Add a header file for strings sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 29/45] malloc_simple: Add logging of allocations sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 28/45] log: Add comments to the rest of the log categories sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 27/45] binman: Add a test for Intel reference code sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 26/45] binman: Move to three-digit test-file numbers sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 25/45] tpm: Add a few new commands for v1 sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 24/45] tpm: Tidy up logging in tpm-common.c sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 23/45] tpm: Use livetree and allow children sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 21/45] fdt: Remove fdtdec_decode_region() function sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 20/45] dm: spi: Add logging of some return values sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 19/45] cros: Adjust board_get_cros_ec_dev() to return a udevice sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 18/45] cros: Update cros_ec code to use struct udevice sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 17/45] fdt: Allow libfdt in TPL sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 16/45] serial: Allow serial to be absent " sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 15/45] tpm: Add support for SPL and TPL sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 14/45] fdt: Allow indicating a node is for U-Boot proper only sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 13/45] doc: Update docs for device tree in SPL, TPL sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 12/45] fdt: Document the fact that dtc is now built sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 11/45] rtc: Allow use of RTC in SPL and TPL sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 10/45] Kconfig: Convert CONFIG_RTC_MC146818 to Kconfig sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 09/45] blk: Support block drivers in TPL sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 08/45] spl: misc: Allow misc drivers in SPL and TPL sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 07/45] Makefile: Add a warning if SPL/TPL cannot be built sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 06/45] spl: input: Allow input in SPL and TPL sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 05/45] sf: Avoid allocating memory on every read operation sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 04/45] dm: core: Update ofnode to read binman-style flash entry sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 03/45] dm: core: Add a function to find the first inactive child sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 02/45] dm: core: Update some functions to use const sjg at google.com
2018-10-09 23:55 ` [U-Boot] [PATCH 01/45] dm: core: Alloc uclass-private data to be cache-aligned sjg at google.com

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20181001182249.129565-38-sjg@chromium.org \
    --to=sjg@chromium.org \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.