Selaa lähdekoodia

dm: panel: Add a panel uclass

LCD panels can usefully be modelled as their own uclass. They can be probed
(which powers them up ready for use). If they have a backlight, this can be
enabled.

Signed-off-by: Simon Glass <sjg@chromium.org>
Simon Glass 8 vuotta sitten
vanhempi
commit
f563dc1d19
4 muutettua tiedostoa jossa 58 lisäystä ja 0 poistoa
  1. 1 0
      drivers/video/Makefile
  2. 25 0
      drivers/video/panel-uclass.c
  3. 1 0
      include/dm/uclass-id.h
  4. 31 0
      include/panel.h

+ 1 - 0
drivers/video/Makefile

@@ -8,6 +8,7 @@
 ifdef CONFIG_DM
 obj-$(CONFIG_DISPLAY_PORT) += dp-uclass.o
 obj-$(CONFIG_DM_VIDEO) += backlight-uclass.o
+obj-$(CONFIG_DM_VIDEO) += panel-uclass.o
 obj-$(CONFIG_DM_VIDEO) += video-uclass.o vidconsole-uclass.o console_normal.o
 obj-$(CONFIG_DM_VIDEO) += video_bmp.o
 ifdef CONFIG_DM_VIDEO

+ 25 - 0
drivers/video/panel-uclass.c

@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2016 Google, Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <panel.h>
+
+int panel_enable_backlight(struct udevice *dev)
+{
+	struct panel_ops *ops = panel_get_ops(dev);
+
+	if (!ops->enable_backlight)
+		return -ENOSYS;
+
+	return ops->enable_backlight(dev);
+}
+
+UCLASS_DRIVER(panel) = {
+	.id		= UCLASS_PANEL,
+	.name		= "panel",
+};

+ 1 - 0
include/dm/uclass-id.h

@@ -45,6 +45,7 @@ enum uclass_id {
 	UCLASS_MMC,		/* SD / MMC card or chip */
 	UCLASS_MOD_EXP,		/* RSA Mod Exp device */
 	UCLASS_MTD,		/* Memory Technology Device (MTD) device */
+	UCLASS_PANEL,		/* Display panel, such as an LCD */
 	UCLASS_PANEL_BACKLIGHT,	/* Backlight controller for panel */
 	UCLASS_PCH,		/* x86 platform controller hub */
 	UCLASS_PCI,		/* PCI bus */

+ 31 - 0
include/panel.h

@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2016 Google, Inc
+ * Written by Simon Glass <sjg@chromium.org>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#ifndef _PANEL_H
+#define _PANEL_H
+
+struct panel_ops {
+	/**
+	 * enable_backlight() - Enable the panel backlight
+	 *
+	 * @dev:	Panel device containing the backlight to enable
+	 * @return 0 if OK, -ve on error
+	 */
+	int (*enable_backlight)(struct udevice *dev);
+};
+
+#define panel_get_ops(dev)	((struct panel_ops *)(dev)->driver->ops)
+
+/**
+ * panel_enable_backlight() - Enable the panel backlight
+ *
+ * @dev:	Panel device containing the backlight to enable
+ * @return 0 if OK, -ve on error
+ */
+int panel_enable_backlight(struct udevice *dev);
+
+#endif