• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2020 HiSilicon (Shanghai) Technologies CO., LIMITED.
3  *
4  * This program is free software; you can redistribute  it and/or modify it
5  * under  the terms of  the GNU General  Public License as published by the
6  * Free Software Foundation;  either version 2 of the  License, or (at your
7  * option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
16  *
17  */
18 
19 #include <common.h>
20 #include <command.h>
21 #include "hi3559av100_vo.h"
22 
23 #define CMD_VO_ARGS_BASE10 10
24 #define CMD_VO_ARGS_BASE16 16
25 #define CMD_VO_ARGS_BASE_ALL 0
26 
27 extern int set_vobg(unsigned int dev, unsigned int rgb);
28 extern int start_vo(unsigned int dev, unsigned int type, unsigned int sync);
29 extern int stop_vo(unsigned int dev);
30 extern int start_gx(unsigned int layer, unsigned long addr, unsigned int strd, hi_vo_rect gx_rect);
31 extern int stop_gx(unsigned int layer);
32 extern int start_videolayer(unsigned int layer, unsigned long addr, unsigned int strd, hi_vo_rect layer_rect);
33 extern int stop_videolayer(unsigned int layer);
34 
35 #if CONFIG_HI_HDMI_SUPPORT
36 extern int hdmi_display(unsigned int vosync, unsigned int input, unsigned int output);
37 extern void hdmi_stop(void);
38 #endif
39 
40 extern int mipi_tx_display(unsigned int vosync);
41 extern int mipi_tx_stop(void);
42 
43 #define VO_DEV_MAX_NUM 3
44 static unsigned int g_a_interface_type[VO_DEV_MAX_NUM] = {[0 ... (VO_DEV_MAX_NUM - 1)] = 0};
45 
vo_is_lcd_intf(unsigned int intf_type)46 static int vo_is_lcd_intf(unsigned int intf_type)
47 {
48     if (VO_INTF_LCD & intf_type ||
49         VO_INTF_LCD_8BIT & intf_type ||
50         VO_INTF_LCD_6BIT & intf_type ||
51         VO_INTF_LCD_16BIT & intf_type ||
52         VO_INTF_LCD_18BIT & intf_type ||
53         VO_INTF_LCD_24BIT & intf_type) {
54         return 1;
55     }
56     return 0;
57 }
58 
vou_drv_check_lcd_sync(vo_dev dev,unsigned int intf_type,unsigned int intf_sync)59 static int vou_drv_check_lcd_sync(vo_dev dev, unsigned int intf_type, unsigned int intf_sync)
60 {
61     if (dev == VO_DEV_DHD0) {
62         if (intf_sync != VO_OUTPUT_USER) {
63             printf("DHD0 only support VO_OUTPUT_USER when intf is LCD!\n");
64             return -1;
65         }
66     }
67 
68     if (VO_INTF_LCD_8BIT & intf_type) {
69         if (intf_sync != VO_OUTPUT_320x240_60) {
70             printf("for LCD 8bit intface,vo%u's intfsync %u illegal!\n", dev, intf_sync);
71             return -1;
72         }
73     }
74 
75     if (VO_INTF_LCD_6BIT & intf_type) {
76         if ((intf_sync < VO_OUTPUT_320x240_50) || (intf_sync > VO_OUTPUT_240x320_50)) {
77             printf("for LCD 6bit intface,vo%u's intfsync %u illegal!\n", dev, intf_sync);
78             return -1;
79         }
80     }
81 
82     if (VO_INTF_LCD_16BIT & intf_type) {
83         if (intf_sync != VO_OUTPUT_240x320_60) {
84             printf("for LCD 16bit intface,vo%u's intfsync %u illegal!\n", dev, intf_sync);
85             return -1;
86         }
87     }
88 
89     if (VO_INTF_LCD_18BIT & intf_type) {
90         if (intf_sync != VO_OUTPUT_240x320_60) {
91             printf("for LCD 18bit intface,vo%u's intfsync %u illegal!\n", dev, intf_sync);
92             return -1;
93         }
94     }
95 
96     if (VO_INTF_LCD_24BIT & intf_type) {
97         if (intf_sync != VO_OUTPUT_800x600_50) {
98             printf("for LCD 24bit intface,vo%u's intfsync %u illegal!\n", dev, intf_sync);
99             return -1;
100         }
101     }
102 
103     return 0;
104 }
105 
check_vo_support(unsigned int dev,unsigned int type,unsigned int sync)106 static int check_vo_support(unsigned int dev, unsigned int type, unsigned int sync)
107 {
108     /* check interface type, ONLY VGA & HDMI interface is supported. */
109     if (dev == VO_DEV_DHD0) {
110         if ((type & ~(VO_INTF_MIPI | VO_INTF_HDMI | VO_INTF_BT656 |
111                   VO_INTF_BT1120 | VO_INTF_LCD_8BIT | VO_INTF_LCD_6BIT |
112                   VO_INTF_LCD_16BIT | VO_INTF_LCD_18BIT | VO_INTF_LCD_24BIT)) ||
113             (type == 0)) {
114             printf("hd%u only supports HDMI,BT.656,BT.1120,mipi_tx,lcd intftype, intf %u is illegal!\n", dev, type);
115             return -1;
116         }
117         /* just one interface at the the time for a dev. */
118         if ((type & ~(VO_INTF_HDMI | VO_INTF_MIPI)) &&
119             (type & ~VO_INTF_BT656) &&
120             (type & ~VO_INTF_LCD_8BIT) &&
121             (type & ~VO_INTF_LCD_6BIT) &&
122             (type & ~VO_INTF_LCD_18BIT) &&
123             (type & ~VO_INTF_LCD_16BIT) &&
124             (type & ~VO_INTF_LCD_24BIT)) {
125             printf("for VO %u, only HDMI+MIPI can be used at the same time!\n",
126                    dev);
127             return -1;
128         }
129     } else if (dev == VO_DEV_DHD1) {
130         if ((type & ~(VO_INTF_BT1120 | VO_INTF_BT656 | VO_INTF_MIPI |
131                   VO_INTF_LCD_6BIT | VO_INTF_LCD_8BIT | VO_INTF_LCD_16BIT |
132                   VO_INTF_LCD_18BIT | VO_INTF_LCD_24BIT)) || (type == 0)) {
133             printf("hd%u only supports BT.656,BT.1120,mipi_tx,LCD intftype, intf %u is illegal!\n", dev, type);
134             return -1;
135         }
136         /* just one interface at the the time for a dev. */
137         if ((type & ~VO_INTF_BT1120) && (type & ~VO_INTF_BT656) && (type & ~VO_INTF_MIPI) &&
138             (type & ~VO_INTF_LCD_6BIT) && (type & ~VO_INTF_LCD_8BIT) &&
139             (type & ~VO_INTF_LCD_16BIT) && (type & ~VO_INTF_LCD_18BIT) && (type & ~VO_INTF_LCD_24BIT)) {
140             printf("vo(%u), none of (BT.1120,BT.656,MIPI,LCD) can use at the same time!\n",
141                    dev);
142             return -1;
143         }
144 
145     } else {
146         printf("unknow dev(%u)!\n", dev);
147         return -1;
148     }
149 
150     if (sync == VO_OUTPUT_USER) {
151         return 0;
152     }
153 
154     /* check interface sync. */
155     if (VO_INTF_HDMI & type) {
156         if ((sync < VO_OUTPUT_1080P24) ||
157             (VO_OUTPUT_1080I50 == sync) ||
158             (VO_OUTPUT_1080I60 == sync) ||
159             (VO_OUTPUT_960H_PAL == sync) ||
160             (VO_OUTPUT_960H_NTSC == sync) ||
161             ((sync >= VO_OUTPUT_320x240_60) && (sync <= VO_OUTPUT_1080x1920_60)) ||
162             (sync == VO_OUTPUT_7680x4320_30) ||
163             (sync >= VO_OUTPUT_USER)) {
164             printf("vo%u's intfsync %u illegal!\n", dev, sync);
165             return -1;
166         }
167     }
168 
169     if (VO_INTF_BT1120 & type) {
170         if (dev == VO_DEV_DHD0) {
171             if ((sync < VO_OUTPUT_1080P24) ||
172                 (VO_OUTPUT_1080I60 == sync) ||
173                 (VO_OUTPUT_1080I50 == sync) ||
174                 (sync > VO_OUTPUT_640x480_60)) {
175                 printf("vo%u's intfsync %u illegal!\n", dev, sync);
176                 return -1;
177             }
178         } else if (dev == VO_DEV_DHD1) {
179             if ((sync < VO_OUTPUT_1080P24) ||
180                 (sync > VO_OUTPUT_480P60)) {
181                 printf("vo%u's intfsync %u illegal!\n", dev, sync);
182                 return -1;
183             }
184         }
185     }
186 
187     if (VO_INTF_MIPI & type) {
188         if (dev == VO_DEV_DHD0) {
189             if ((sync != VO_OUTPUT_576P50) &&
190                 (sync != VO_OUTPUT_720P50) &&
191                 (sync != VO_OUTPUT_720P60) &&
192                 (sync != VO_OUTPUT_1024x768_60) &&
193                 (sync != VO_OUTPUT_1280x1024_60) &&
194                 (sync != VO_OUTPUT_720x1280_60) &&
195                 (sync != VO_OUTPUT_1080x1920_60) &&
196                 (sync != VO_OUTPUT_1080P60)) {
197                 printf("vo%u's intfsync %u illegal!\n", dev, sync);
198                 return -1;
199             }
200         } else if (dev == VO_DEV_DHD1) {
201             if ((sync != VO_OUTPUT_576P50) &&
202                 (sync != VO_OUTPUT_720P50) &&
203                 (sync != VO_OUTPUT_720P60) &&
204                 (sync != VO_OUTPUT_1024x768_60) &&
205                 (sync != VO_OUTPUT_1280x1024_60) &&
206                 (sync != VO_OUTPUT_720x1280_60) &&
207                 (sync != VO_OUTPUT_1080x1920_60) &&
208                 (sync != VO_OUTPUT_1080P60)) {
209                 printf("vo%u's intfsync %u illegal!\n", dev, sync);
210                 return -1;
211             }
212         }
213     }
214 
215     if (vo_is_lcd_intf(type)) {
216         if (vou_drv_check_lcd_sync(dev, type, sync) != 0) {
217             return -1;
218         }
219     }
220 
221     return 0;
222 }
223 
do_vobg(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])224 static int do_vobg(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
225 {
226     unsigned int dev, rgb;
227 
228     if (argc < 3) {
229         printf("insufficient parameter!\n");
230         printf("usage:\n%s\n", cmdtp->usage);
231         return -1;
232     }
233 
234     dev = (unsigned int)simple_strtoul(argv[1], NULL, CMD_VO_ARGS_BASE10);
235     rgb = (unsigned int)simple_strtoul(argv[2], NULL, CMD_VO_ARGS_BASE_ALL);
236     if (dev >= VO_DEV_BUTT) {
237         printf("invalid parameter!\n");
238         return -1;
239     }
240 
241     set_vobg(dev, rgb);
242 
243     printf("dev %u set background color!\n", dev);
244 
245     return 0;
246 }
247 
do_startvo(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])248 static int do_startvo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
249 {
250     unsigned int dev, intftype, sync;
251 
252     if (argc < 4) {
253         printf("insufficient parameter!\n");
254         printf("usage:\n%s\n", cmdtp->usage);
255         return -1;
256     }
257 
258     dev = (unsigned int)simple_strtoul(argv[1], NULL, CMD_VO_ARGS_BASE10);
259     intftype = (unsigned int)simple_strtoul(argv[2], NULL, CMD_VO_ARGS_BASE10);
260     sync = (unsigned int)simple_strtoul(argv[3], NULL, CMD_VO_ARGS_BASE10);
261     if ((dev >= VO_DEV_BUTT) || (sync >= VO_OUTPUT_BUTT)) {
262         printf("invalid parameter!\n");
263         return -1;
264     }
265 
266     if (check_vo_support(dev, intftype, sync)) {
267         printf("unsupport parameter!\n");
268         return -1;
269     }
270 
271     start_vo(dev, intftype, sync);
272 
273     g_a_interface_type[dev] = intftype;
274 
275 #if CONFIG_HI_HDMI_SUPPORT
276     if (intftype & VO_INTF_HDMI) {
277         if (intftype == (VO_INTF_HDMI | VO_INTF_MIPI)) {
278             hdmi_display(sync, 0, 2);
279         } else {
280             hdmi_display(sync, 2, 2);
281         }
282     }
283 #endif
284 
285     if (intftype & VO_INTF_MIPI) {
286         // to call mipi_display.
287         mipi_tx_display(sync);
288     }
289 
290     if (vo_is_lcd_intf(intftype)) {
291         g_a_interface_type[dev] =  intftype;
292     }
293 
294     printf("dev %u opened!\n", dev);
295 
296     return 0;
297 }
298 
do_stopvo(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])299 static int do_stopvo(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
300 {
301     unsigned int dev;
302     if (argc < 2) {
303         printf("insufficient parameter!\n");
304         printf("usage:\n%s\n", cmdtp->usage);
305         return -1;
306     }
307 
308     dev = (unsigned int)simple_strtoul(argv[1], NULL, CMD_VO_ARGS_BASE10);
309     if (dev >= VO_DEV_BUTT) {
310         printf("invalid parameter!\n");
311         return -1;
312     }
313 #if CONFIG_HI_HDMI_SUPPORT
314     if (g_a_interface_type[dev] & VO_INTF_HDMI) {
315         g_a_interface_type[dev] = 0;
316         hdmi_stop();
317     }
318 #endif
319 
320     if (g_a_interface_type[dev] & VO_INTF_MIPI) {
321         g_a_interface_type[dev] = 0;
322         mipi_tx_stop();
323     }
324 
325     if (vo_is_lcd_intf(g_a_interface_type[dev])) {
326         g_a_interface_type[dev] = 0;
327     }
328 
329     stop_vo(dev);
330 
331     printf("dev %u closed!\n", dev);
332 
333     return 0;
334 }
335 
do_startgx(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])336 static int do_startgx(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
337 {
338     unsigned int layer, strd, x, y, w, h;
339     unsigned long addr;
340     hi_vo_rect gx_rect;
341     int max_x, max_y, layer_max_w, layer_max_h;
342     if (argc < 8) {
343         printf("insufficient parameter!\n");
344         printf("usage:\n%s\n", cmdtp->usage);
345         return -1;
346     }
347 
348     layer = (unsigned int)simple_strtoul(argv[1], NULL, CMD_VO_ARGS_BASE10);
349     addr = (unsigned long)simple_strtoul(argv[2], NULL, CMD_VO_ARGS_BASE16);
350     strd = (unsigned int)simple_strtoul(argv[3], NULL, CMD_VO_ARGS_BASE10);
351     x = (unsigned int)simple_strtoul(argv[4], NULL, CMD_VO_ARGS_BASE10);
352     y = (unsigned int)simple_strtoul(argv[5], NULL, CMD_VO_ARGS_BASE10);
353     w = (unsigned int)simple_strtoul(argv[6], NULL, CMD_VO_ARGS_BASE10);
354     h = (unsigned int)simple_strtoul(argv[7], NULL, CMD_VO_ARGS_BASE10);
355 
356     if (layer == VO_GRAPHC_G0) {
357         max_x = PIC_MAX_WIDTH;
358         max_y = PIC_MAX_HEIGHT;
359         layer_max_w = GFX0_PIC_MAX_WIDTH;
360         layer_max_h = GFX0_PIC_MAX_HEIGHT;
361     } else if (layer == VO_GRAPHC_G1) {
362         max_x =GFX1_PIC_MAX_WIDTH;
363         max_y = GFX1_PIC_MAX_HEIGHT;
364         layer_max_w = GFX1_PIC_MAX_WIDTH;
365         layer_max_h = GFX1_PIC_MAX_HEIGHT;
366     } else {
367         printf("invalid parameter!\n");
368         return -1;
369     }
370 
371     if((strd > (layer_max_w * 2)) ||
372         (x > max_x) || (x & 0x1) ||
373         (y > max_y) || (y & 0x1) ||
374         (w > layer_max_w) || (w & 0x1) || (w < PIC_MIN_LENTH) ||
375         (h > layer_max_h) || (h & 0x1) || (h < PIC_MIN_LENTH)) {
376         printf("invalid parameter!\n");
377         return -1;
378     }
379 
380     gx_rect.x = x;
381     gx_rect.y = y;
382     gx_rect.w = w;
383     gx_rect.h = h;
384 
385     start_gx(layer, addr, strd, gx_rect);
386 
387     printf("graphic layer %u opened!\n", layer);
388 
389     return 0;
390 }
391 
do_stopgx(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])392 static int do_stopgx(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
393 {
394     unsigned int layer;
395 
396     if (argc < 2) {
397         printf("insufficient parameter!\n");
398         printf("usage:\n%s\n", cmdtp->usage);
399         return -1;
400     }
401 
402     layer = (unsigned int)simple_strtoul(argv[1], NULL, CMD_VO_ARGS_BASE10);
403 
404     if (layer >= VO_GRAPHC_BUTT) {
405         printf("invalid parameter!\n");
406         return -1;
407     }
408 
409     stop_gx(layer);
410 
411     printf("graphic layer %u closed!\n", layer);
412 
413     return 0;
414 }
415 
do_startvl(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])416 static int do_startvl(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
417 {
418     unsigned int layer, strd, x, y, w, h;
419     unsigned long addr;
420     hi_vo_rect layer_rect;
421     int max_x, max_y, layer_max_w, layer_max_h;
422 
423     if (argc < 8) {
424         printf("insufficient parameter!\n");
425         printf("usage:\n%s\n", cmdtp->usage);
426         return -1;
427     }
428 
429     layer = (unsigned int)simple_strtoul(argv[1], NULL, CMD_VO_ARGS_BASE10);
430     addr = (unsigned long)simple_strtoul(argv[2], NULL, CMD_VO_ARGS_BASE16);
431     strd = (unsigned int)simple_strtoul(argv[3], NULL, CMD_VO_ARGS_BASE10);
432     x = (unsigned int)simple_strtoul(argv[4], NULL, CMD_VO_ARGS_BASE10);
433     y = (unsigned int)simple_strtoul(argv[5], NULL, CMD_VO_ARGS_BASE10);
434     w = (unsigned int)simple_strtoul(argv[6], NULL, CMD_VO_ARGS_BASE10);
435     h = (unsigned int)simple_strtoul(argv[7], NULL, CMD_VO_ARGS_BASE10);
436 
437     if (layer == VO_LAYER_VHD0) {
438         max_x = VHD0_PIC_MAX_WIDTH;
439         max_y = VHD0_PIC_MAX_HEIGHT;
440         layer_max_w = VHD0_PIC_MAX_WIDTH;
441         layer_max_h = VHD0_PIC_MAX_HEIGHT;
442     } else if (layer == VO_LAYER_VHD1) {
443         max_x =VHD1_PIC_MAX_WIDTH;
444         max_y = VHD1_PIC_MAX_HEIGHT;
445         layer_max_w = VHD1_PIC_MAX_WIDTH;
446         layer_max_h = VHD1_PIC_MAX_HEIGHT;
447     } else {
448         printf("invalid parameter!\n");
449         return -1;
450     }
451 
452     if((strd > (layer_max_w * 2)) ||
453         (x > max_x) || (x & 0x1) ||
454         (y > max_y) || (y & 0x1) ||
455         (w > layer_max_w) || (w & 0x1) || (w < PIC_MIN_LENTH) ||
456         (h > layer_max_h) || (h & 0x1) || (h < PIC_MIN_LENTH)) {
457         printf("invalid parameter!\n");
458         return -1;
459     }
460 
461     layer_rect.x = x;
462     layer_rect.y = y;
463     layer_rect.w = w;
464     layer_rect.h = h;
465 
466     start_videolayer(layer, addr, strd, layer_rect);
467 
468     printf("video layer %u opened!\n", layer);
469 
470     return 0;
471 }
472 
do_stopvl(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])473 static int do_stopvl(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
474 {
475     unsigned int layer;
476 
477     if (argc < 2) {
478         printf("insufficient parameter!\n");
479         printf("usage:\n%s\n", cmdtp->usage);
480         return -1;
481     }
482 
483     layer = (unsigned int)simple_strtoul(argv[1], NULL, CMD_VO_ARGS_BASE10);
484 
485     if ((layer > VO_LAYER_VSD0) || (layer == VO_LAYER_VP)) {
486         printf("invalid parameter!\n");
487         return -1;
488     }
489 
490     stop_videolayer(layer);
491 
492     printf("video layer %u closed!\n", layer);
493 
494     return 0;
495 }
496 
497 U_BOOT_CMD(startvo, CFG_MAXARGS, 1, do_startvo,
498        "startvo   - open vo device with a certain output interface.\n"
499        "\t- startvo [dev intftype sync]",
500        "\nargs: [dev, intftype, sync]\n"
501        "\t-<dev> : 0: DHD0,1: DHD1\n"
502        "\t-<intftype>: 8(BT.656),16(BT.1120),32(HDMI),64(LCD),1024(LCD_8BIT),16384(mipi_tx)\n"
503        "\t-<sync>:\n"
504        "\t\t0(PAL),          1(NTSC),         2(1080P24),      3(1080P25)\n"
505        "\t\t4(1080P30),      5(720P50),       6(720P60),       7(1080I50)\n"
506        "\t\t8(1080I60),      9(1080P50),      10(1080P60),     11(576P50)\n"
507        "\t\t12(480P60),      13(800x600),     14(1024x768),    15(1280x1024)\n"
508        "\t\t16(1366x768),    17(1440x900),    18(1280x800),    19(1600x1200)\n"
509        "\t\t20(1680x1050),   21(1920x1200),   22(640x480),     23(960H_PAL)\n"
510        "\t\t24(960H_NTSC),   25(1920x2160),   26(2560x1440_30),27(2560x1440_60)\n"
511        "\t\t28(2560x1600_60),29(3840x2160_24),30(3840x2160_25),31(3840x2160_30)\n"
512        "\t\t32(3840x2160_50),33(3840x2160_60),34(4096x2160_24),35(4096x2160_25)\n"
513        "\t\t36(4096x2160_30),37(4096x2160_50),38(4096x2160_60),39(320x240_60)\n"
514        "\t\t40(320x240_50),  41(240x320_50),  42(240x320_60),  43(800x600_50)\n"
515        "\t\t44(720x1280_60), 45(1080x1920_60),46(7680x4320_30),47(user)\n");
516 
517 U_BOOT_CMD(stopvo, CFG_MAXARGS, 1, do_stopvo,
518        "stopvo   - close interface of vo device.\n"
519        "\t- stopvo [dev]",
520        "\nargs: [dev]\n"
521        "\t-<dev> : 0~1(HD0~1)\n");
522 
523 U_BOOT_CMD(startgx, CFG_MAXARGS, 1, do_startgx,
524        "startgx   - open graphics layer.\n"
525        "\t- startgx [layer addr stride x y w h]\n",
526        "\nargs: [layer, addr, stride, x, y, w, h]\n"
527        "\t-<layer>   : 0(G0), 1(G1)\n"
528        "\t-<addr>    : picture address\n"
529        "\t-<stride>  : picture stride\n"
530        "\t-<x,y,w,h> : display area\n");
531 
532 U_BOOT_CMD(stopgx, CFG_MAXARGS, 1, do_stopgx,
533        "stopgx   - close graphics layer.\n"
534        "\t- stopgx [layer]",
535        "\nargs: [layer]\n"
536        "\t-<layer> : 0(G0), 1(G1)\n");
537 
538 U_BOOT_CMD(startvl, CFG_MAXARGS, 1, do_startvl,
539        "startvl   - open video layer.\n"
540        "\t- startvl [layer addr stride x y w h]\n",
541        "\nargs: [layer, addr, stride, x, y, w, h]\n"
542        "\t-<layer>   : 0(V0), 1(V1)\n"
543        "\t-<addr>    : picture address\n"
544        "\t-<stride>  : picture stride\n"
545        "\t-<x,y,w,h> : display area\n");
546 
547 U_BOOT_CMD(stopvl, CFG_MAXARGS, 1, do_stopvl,
548        "stopvl   - close video layer.\n"
549        "\t- stopvl [layer]",
550        "\nargs: [layer]\n"
551        "\t-<layer> : 0(V0), 1(V1)\n");
552 
553 U_BOOT_CMD(setvobg, CFG_MAXARGS, 1, do_vobg,
554        "setvobg   - set vo backgroud color.\n"
555        "\t- setvobg [dev color]",
556        "\nargs: [dev, color]\n"
557        "\t-<dev> : 0~1(HD0~1)\n"
558        "\t-<color>: rgb color space\n");
559