1 #include <linux/module.h>
2 #include <linux/rk_fb.h>
3 #include <linux/device.h>
5 #include "../hdmi/rockchip-hdmi.h"
7 static struct rk_screen *rk_screen;
9 int rk_fb_get_extern_screen(struct rk_screen *screen)
11 if (unlikely(!rk_screen) || unlikely(!screen))
14 memcpy(screen, rk_screen, sizeof(struct rk_screen));
15 screen->dsp_lut = NULL;
16 screen->cabc_lut = NULL;
17 screen->type = SCREEN_NULL;
22 int rk_fb_get_prmry_screen(struct rk_screen *screen)
24 if (unlikely(!rk_screen) || unlikely(!screen))
27 memcpy(screen, rk_screen, sizeof(struct rk_screen));
31 int rk_fb_set_prmry_screen(struct rk_screen *screen)
33 if (unlikely(!rk_screen) || unlikely(!screen))
36 rk_screen->lcdc_id = screen->lcdc_id;
37 rk_screen->screen_id = screen->screen_id;
38 rk_screen->x_mirror = screen->x_mirror;
39 rk_screen->y_mirror = screen->y_mirror;
40 rk_screen->overscan.left = screen->overscan.left;
41 rk_screen->overscan.top = screen->overscan.left;
42 rk_screen->overscan.right = screen->overscan.left;
43 rk_screen->overscan.bottom = screen->overscan.left;
47 size_t get_fb_size(u8 reserved_fb)
53 if (unlikely(!rk_screen))
56 xres = rk_screen->mode.xres;
57 yres = rk_screen->mode.yres;
59 /* align as 64 bytes(16*4) in an odd number of times */
60 xres = ALIGN_64BYTE_ODD_TIMES(xres, ALIGN_PIXEL_64BYTE_RGB8888);
61 if (reserved_fb == 1) {
62 size = (xres * yres << 2) << 1;/*two buffer*/
64 #if defined(CONFIG_THREE_FB_BUFFER)
65 size = (xres * yres << 2) * 3; /* three buffer */
67 size = (xres * yres << 2) << 1; /* two buffer */
70 return ALIGN(size, SZ_1M);
73 static int rk_screen_probe(struct platform_device *pdev)
75 struct device_node *np = pdev->dev.of_node;
79 dev_err(&pdev->dev, "Missing device tree node.\n");
82 rk_screen = devm_kzalloc(&pdev->dev,
83 sizeof(struct rk_screen), GFP_KERNEL);
85 dev_err(&pdev->dev, "kmalloc for rk screen fail!");
88 ret = rk_fb_prase_timing_dt(np, rk_screen);
89 dev_info(&pdev->dev, "rockchip screen probe %s\n",
90 ret ? "failed" : "success");
94 static const struct of_device_id rk_screen_dt_ids[] = {
95 { .compatible = "rockchip,screen", },
99 static struct platform_driver rk_screen_driver = {
100 .probe = rk_screen_probe,
103 .owner = THIS_MODULE,
104 .of_match_table = of_match_ptr(rk_screen_dt_ids),
108 static int __init rk_screen_init(void)
110 return platform_driver_register(&rk_screen_driver);
113 static void __exit rk_screen_exit(void)
115 platform_driver_unregister(&rk_screen_driver);
118 fs_initcall(rk_screen_init);
119 module_exit(rk_screen_exit);