1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * Copyright (C) 2016  Nexell Co., Ltd.
4  *
5  * Author: junghyun, kim <jhkim@nexell.co.kr>
6  */
7 
8 #include <config.h>
9 #include <common.h>
10 #include <errno.h>
11 
12 #include <asm/arch/display.h>
13 
14 #include "soc/s5pxx18_soc_disptop.h"
15 
rgb_switch(int module,int input,struct dp_sync_info * sync,struct dp_rgb_dev * dev)16 static int rgb_switch(int module, int input, struct dp_sync_info *sync,
17 		      struct dp_rgb_dev *dev)
18 {
19 	int mpu = dev->lcd_mpu_type;
20 	int rsc = 0, sel = 0;
21 
22 	switch (module) {
23 	case 0:
24 		sel = mpu ? 1 : 0;
25 		break;
26 	case 1:
27 		sel = rsc ? 3 : 2;
28 		break;
29 	default:
30 		printf("Fail, %s nuknown module %d\n", __func__, module);
31 		return -1;
32 	}
33 
34 	nx_disp_top_set_primary_mux(sel);
35 	return 0;
36 }
37 
nx_rgb_display(int module,struct dp_sync_info * sync,struct dp_ctrl_info * ctrl,struct dp_plane_top * top,struct dp_plane_info * planes,struct dp_rgb_dev * dev)38 void nx_rgb_display(int module,
39 		    struct dp_sync_info *sync, struct dp_ctrl_info *ctrl,
40 		    struct dp_plane_top *top, struct dp_plane_info *planes,
41 		    struct dp_rgb_dev *dev)
42 {
43 	struct dp_plane_info *plane = planes;
44 	int input = module == 0 ? DP_DEVICE_DP0 : DP_DEVICE_DP1;
45 	int count = top->plane_num;
46 	int i = 0;
47 
48 	printf("RGB:   dp.%d\n", module);
49 
50 	dp_control_init(module);
51 	dp_plane_init(module);
52 
53 	/* set plane */
54 	dp_plane_screen_setup(module, top);
55 
56 	for (i = 0; count > i; i++, plane++) {
57 		if (!plane->enable)
58 			continue;
59 		dp_plane_layer_setup(module, plane);
60 		dp_plane_layer_enable(module, plane, 1);
61 	}
62 
63 	dp_plane_screen_enable(module, 1);
64 
65 	rgb_switch(module, input, sync, dev);
66 
67 	dp_control_setup(module, sync, ctrl);
68 	dp_control_enable(module, 1);
69 }
70