aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorSimon Glass2017-04-05 16:23:44 -0600
committerTom Rini2017-05-09 20:27:17 -0400
commitea843b6dabdd0473c5f12e8b7ccb560aededd2e4 (patch)
tree5c7d8625e17a67909b0912ca062852202e9f0d04 /drivers
parentd08e42a8cb2a68ed6cdb7c615472934ea674eb15 (diff)
dm: video: arm: rpi: Convert to use driver model for video
Adjust the video driver to work with driver model and move over existing baords. There is no need to keep the old code. We can also drop setting of CONFIG_FB_ADDR since driver model doesn't have this problem. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Anatolij Gustschin <agust@denx.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/bcm2835.c62
1 files changed, 28 insertions, 34 deletions
diff --git a/drivers/video/bcm2835.c b/drivers/video/bcm2835.c
index cd15f7f32ae..952ef596611 100644
--- a/drivers/video/bcm2835.c
+++ b/drivers/video/bcm2835.c
@@ -5,62 +5,56 @@
*/
#include <common.h>
-#include <lcd.h>
-#include <memalign.h>
-#include <phys2bus.h>
+#include <dm.h>
+#include <video.h>
#include <asm/arch/mbox.h>
#include <asm/arch/msg.h>
-#include <asm/global_data.h>
-DECLARE_GLOBAL_DATA_PTR;
-
-/* Global variables that lcd.c expects to exist */
-vidinfo_t panel_info;
-
-static int bcm2835_pitch;
-
-void lcd_ctrl_init(void *lcdbase)
+static int bcm2835_video_probe(struct udevice *dev)
{
+ struct video_uc_platdata *plat = dev_get_uclass_platdata(dev);
+ struct video_priv *uc_priv = dev_get_uclass_priv(dev);
int ret;
- int w, h;
+ int w, h, pitch;
ulong fb_base, fb_size, fb_start, fb_end;
debug("bcm2835: Query resolution...\n");
ret = bcm2835_get_video_size(&w, &h);
- if (ret) {
- /* FIXME: How to disable the LCD to prevent errors? hang()? */
- return;
- }
+ if (ret)
+ return -EIO;
debug("bcm2835: Setting up display for %d x %d\n", w, h);
ret = bcm2835_set_video_params(&w, &h, 32, BCM2835_MBOX_PIXEL_ORDER_RGB,
BCM2835_MBOX_ALPHA_MODE_IGNORED,
- &fb_base, &fb_size, &bcm2835_pitch);
+ &fb_base, &fb_size, &pitch);
debug("bcm2835: Final resolution is %d x %d\n", w, h);
- panel_info.vl_col = w;
- panel_info.vl_row = h;
- panel_info.vl_bpix = LCD_COLOR32;
-
- gd->fb_base = fb_base;
-
/* Enable dcache for the frame buffer */
fb_start = fb_base & ~(MMU_SECTION_SIZE - 1);
fb_end = fb_base + fb_size;
fb_end = ALIGN(fb_end, 1 << MMU_SECTION_SHIFT);
mmu_set_region_dcache_behaviour(fb_start, fb_end - fb_start,
DCACHE_WRITEBACK);
- lcd_set_flush_dcache(1);
-}
+ video_set_flush_dcache(dev, true);
-void lcd_enable(void)
-{
-}
+ uc_priv->xsize = w;
+ uc_priv->ysize = h;
+ uc_priv->bpix = VIDEO_BPP32;
+ plat->base = fb_base;
+ plat->size = fb_size;
-int lcd_get_size(int *line_length)
-{
- *line_length = bcm2835_pitch;
-
- return *line_length * panel_info.vl_row;
+ return 0;
}
+
+static const struct udevice_id bcm2835_video_ids[] = {
+ { .compatible = "brcm,bcm2835-hdmi" },
+ { }
+};
+
+U_BOOT_DRIVER(bcm2835_video) = {
+ .name = "bcm2835_video",
+ .id = UCLASS_VIDEO,
+ .of_match = bcm2835_video_ids,
+ .probe = bcm2835_video_probe,
+};