walnux/include/nuttx/video/fb.h

1222 lines
51 KiB
C

/****************************************************************************
* include/nuttx/video/fb.h
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership. The
* ASF licenses this file to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance with the
* License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations
* under the License.
*
****************************************************************************/
#ifndef __INCLUDE_NUTTX_VIDEO_FB_H
#define __INCLUDE_NUTTX_VIDEO_FB_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
#include <sys/types.h>
#include <stdint.h>
#include <errno.h>
#include <debug.h>
#ifdef CONFIG_VIDEO_FB_SPLASHSCREEN
# include <nuttx/video/rgbcolors.h>
#endif
#include <nuttx/compiler.h>
#include <nuttx/fs/ioctl.h>
/****************************************************************************
* Pre-processor definitions
****************************************************************************/
/* Color format definitions. This pretty much defines the color pixel
* processing organization of the video controller.
*/
/* Monochrome Formats *******************************************************/
#define FB_FMT_Y1 0 /* BPP=1, monochrome */
#define FB_FMT_Y2 1 /* BPP=2, 2-bit uncompressed greyscale */
#define FB_FMT_Y4 2 /* BPP=4, 4-bit uncompressed greyscale */
#define FB_FMT_Y8 3 /* BPP=8, 8-bit uncompressed greyscale */
#define FB_FMT_Y16 4 /* BPP=16, 16-bit uncompressed greyscale */
#define FB_FMT_GREY FB_FMT_Y8 /* BPP=8 */
#define FB_FMT_Y800 FB_FMT_Y8 /* BPP=8 */
#define FB_ISMONO(f) (((f) >= FB_FMT_Y1) && (f) <= FB_FMT_Y16)
/* RGB video formats ********************************************************/
/* Standard RGB */
#define FB_FMT_RGB4 5 /* BPP=4 */
#define FB_FMT_RGB8 6 /* BPP=8 RGB palette index */
#define FB_FMT_RGB8_222 7 /* BPP=8 R=2, G=2, B=2 */
#define FB_FMT_RGB8_332 8 /* BPP=8 R=3, G=3, B=2 */
#define FB_FMT_RGB12_444 9 /* BPP=12 R=4, G=4, B=4 */
#define FB_FMT_RGB16_555 10 /* BPP=16 R=5, G=5, B=5 (1 unused bit) */
#define FB_FMT_RGB16_565 11 /* BPP=16 R=5, G=6, B=5 */
#define FB_FMT_RGB24 12 /* BPP=24 */
#define FB_FMT_RGB32 13 /* BPP=32 */
/* Run length encoded RGB */
#define FB_FMT_RGBRLE4 14 /* BPP=4 */
#define FB_FMT_RGBRLE8 15 /* BPP=8 */
/* Raw RGB */
#define FB_FMT_RGBRAW 16 /* BPP=? */
/* Raw RGB with arbitrary sample packing within a pixel. Packing and
* precision of R, G and B components is determined by bit masks for each.
*/
#define FB_FMT_RGBBTFLD16 17 /* BPP=16 */
#define FB_FMT_RGBBTFLD24 18 /* BPP=24 */
#define FB_FMT_RGBBTFLD32 19 /* BPP=32 */
#define FB_FMT_RGBA16 20 /* BPP=16 Raw RGB with alpha */
#define FB_FMT_RGBA32 21 /* BPP=32 Raw RGB with alpha */
/* Raw RGB with a transparency field. Layout is as for standard RGB at 16 and
* 32 bits per pixel but the msb in each pixel indicates whether the pixel is
* transparent or not.
*/
#define FB_FMT_RGBT16 22 /* BPP=16 */
#define FB_FMT_RGBT32 23 /* BPP=32 */
#define FB_ISRGB(f) (((f) >= FB_FMT_RGB4) && (f) <= FB_FMT_RGBT32)
/* Packed YUV Formats *******************************************************/
#define FB_FMT_AYUV 24 /* BPP=32 Combined YUV and alpha */
#define FB_FMT_CLJR 25 /* BPP=8 4 pixels packed into a uint32_t.
* YUV 4:1:1 with l< 8 bits
* per YUV sample */
#define FB_FMT_CYUV 26 /* BPP=16 UYVY except that height is
* reversed */
#define FB_FMT_IRAW 27 /* BPP=? Intel uncompressed YUV */
#define FB_FMT_IUYV 28 /* BPP=16 Interlaced UYVY (line order
* 0,2,4,.., 1,3,5...) */
#define FB_FMT_IY41 29 /* BPP=12 Interlaced Y41P (line order
* 0,2,4,.., 1,3,5...) */
#define FB_FMT_IYU2 30 /* BPP=24 */
#define FB_FMT_HDYC 31 /* BPP=16 UYVY except uses the BT709
* color space */
#define FB_FMT_UYVP 32 /* BPP=24? YCbCr 4:2:2, 10-bits per
* component in U0Y0V0Y1 order */
#define FB_FMT_UYVY 33 /* BPP=16 YUV 4:2:2 */
#define FB_FMT_UYNV FB_FMT_UYVY /* BPP=16 */
#define FB_FMT_Y422 FB_FMT_UYVY /* BPP=16 */
#define FB_FMT_V210 34 /* BPP=32 10-bit 4:2:2 YCrCb */
#define FB_FMT_V422 35 /* BPP=16 Upside down version of UYVY */
#define FB_FMT_V655 36 /* BPP=16? 16-bit YUV 4:2:2 */
#define FB_FMT_VYUY 37 /* BPP=? ATI Packed YUV Data */
#define FB_FMT_YUYV 38 /* BPP=16 YUV 4:2:2 */
#define FB_FMT_YUY2 FB_FMT_YUYV /* BPP=16 YUV 4:2:2 */
#define FB_FMT_YUNV FB_FMT_YUYV /* BPP=16 YUV 4:2:2 */
#define FB_FMT_YVYU 39 /* BPP=16 YUV 4:2:2 */
#define FB_FMT_Y41P 40 /* BPP=12 YUV 4:1:1 */
#define FB_FMT_Y411 41 /* BPP=12 YUV 4:1:1 */
#define FB_FMT_Y211 42 /* BPP=8 */
#define FB_FMT_Y41T 43 /* BPP=12 Y41P LSB for transparency */
#define FB_FMT_Y42T 44 /* BPP=16 UYVY LSB for transparency */
#define FB_FMT_YUVP 45 /* BPP=24? YCbCr 4:2:2 Y0U0Y1V0 order */
#define FB_ISYUVPACKED(f) (((f) >= FB_FMT_AYUV) && (f) <= FB_FMT_YUVP)
/* Packed Planar YUV Formats ************************************************/
#define FB_FMT_YVU9 46 /* BPP=9 8-bit Y followed by 8-bit
* 4x4 VU */
#define FB_FMT_YUV9 47 /* BPP=9? */
#define FB_FMT_IF09 48 /* BPP=9.5 YVU9 + 4x4 plane of delta
* relative to tframe. */
#define FB_FMT_YV16 49 /* BPP=16 8-bit Y followed by 8-bit
* 2x1 VU */
#define FB_FMT_YV12 50 /* BPP=12 8-bit Y followed by 8-bit
* 2x2 VU */
#define FB_FMT_I420 51 /* BPP=12 8-bit Y followed by 8-bit
* 2x2 UV */
#define FB_FMT_IYUV FB_FMT_I420 /* BPP=12 */
#define FB_FMT_NV12 52 /* BPP=12 8-bit Y followed by an
* interleaved 2x2 UV */
#define FB_FMT_NV21 53 /* BPP=12 NV12 with UV reversed */
#define FB_FMT_IMC1 54 /* BPP=12 YV12 except UV planes same
* stride as Y */
#define FB_FMT_IMC2 55 /* BPP=12 IMC1 except UV lines
* interleaved at half stride
* boundaries */
#define FB_FMT_IMC3 56 /* BPP=12 As IMC1 except that UV
* swapped */
#define FB_FMT_IMC4 57 /* BPP=12 As IMC2 except that UV
* swapped */
#define FB_FMT_CLPL 58 /* BPP=12 YV12 but including a level
* of indirection. */
#define FB_FMT_Y41B 59 /* BPP=12? 4:1:1 planar. */
#define FB_FMT_Y42B 60 /* BPP=16? YUV 4:2:2 planar. */
#define FB_FMT_CXY1 61 /* BPP=12 */
#define FB_FMT_CXY2 62 /* BPP=16 */
#define FB_ISYUVPLANAR(f) (((f) >= FB_FMT_YVU9) && (f) <= FB_FMT_CXY2)
#define FB_ISYUV(f) (FB_ISYUVPACKED(f) || FB_ISYUVPLANAR(f))
/* Hardware cursor control **************************************************/
#ifdef CONFIG_FB_HWCURSOR
# define FB_CUR_ENABLE 0x01 /* Enable the cursor */
# define FB_CUR_SETIMAGE 0x02 /* Set the cursor image */
# define FB_CUR_SETPOSITION 0x04 /* Set the position of the cursor */
# define FB_CUR_SETSIZE 0x08 /* Set the size of the cursor */
# define FB_CUR_XOR 0x10 /* Use XOR vs COPY ROP on image */
#endif
/* Hardware overlay acceleration ********************************************/
#define FB_NO_OVERLAY -1
#ifdef CONFIG_FB_OVERLAY
# define FB_ACCL_TRANSP 0x01 /* Hardware transparency support */
# define FB_ACCL_CHROMA 0x02 /* Hardware chromakey support */
# define FB_ACCL_COLOR 0x04 /* Hardware color support */
# define FB_ACCL_AREA 0x08 /* Hardware support area selection */
#ifdef CONFIG_FB_OVERLAY_BLIT
# define FB_ACCL_BLIT 0x10 /* Hardware blit support */
# define FB_ACCL_BLEND 0x20 /* Hardware blend support */
#endif
/* Overlay transparency mode ************************************************/
# define FB_CONST_ALPHA 0x00 /* Transparency by alpha value */
# define FB_PIXEL_ALPHA 0x01 /* Transparency by pixel alpha value */
#endif /* CONFIG_FB_OVERLAY */
/* FB character driver IOCTL commands ***************************************/
/* ioctls */
#define FBIOGET_VIDEOINFO _FBIOC(0x0001) /* Get color plane info */
/* Argument: writable struct
* fb_videoinfo_s */
#define FBIOGET_PLANEINFO _FBIOC(0x0002) /* Get video plane info */
/* Argument: writable struct
* fb_planeinfo_s */
#ifdef CONFIG_FB_CMAP
# define FBIOGET_CMAP _FBIOC(0x0003) /* Get RGB color mapping */
/* Argument: writable struct
* fb_cmap_s */
# define FBIOPUT_CMAP _FBIOC(0x0004) /* Put RGB color mapping */
/* Argument: read-only struct
* fb_cmap_s */
#endif
#ifdef CONFIG_FB_HWCURSOR
# define FBIOGET_CURSOR _FBIOC(0x0005) /* Get cursor attributes */
/* Argument: writable struct
* fb_cursorattrib_s */
# define FBIOPUT_CURSOR _FBIOC(0x0006) /* Set cursor attributes */
/* Argument: read-only struct
* fb_setcursor_s */
#endif
#ifdef CONFIG_FB_UPDATE
# define FBIO_UPDATE _FBIOC(0x0007) /* Update a rectangular region in
* the framebuffer
* Argument: read-only struct
* fb_area_s */
#endif
#ifdef CONFIG_FB_SYNC
# define FBIO_WAITFORVSYNC _FBIOC(0x0008) /* Wait for vertical sync */
#endif
#ifdef CONFIG_FB_OVERLAY
# define FBIOGET_OVERLAYINFO _FBIOC(0x0009) /* Get video overlay info */
/* Argument: writable struct
* fb_overlayinfo_s */
# define FBIO_SELECT_OVERLAY _FBIOC(0x000a) /* Select overlay */
/* Argument: read-only
* unsigned long */
# define FBIOSET_TRANSP _FBIOC(0x000b) /* Set opacity or transparency
* Argument: read-only struct
* fb_overlayinfo_s */
# define FBIOSET_CHROMAKEY _FBIOC(0x000c) /* Set chroma key
* Argument: read-only struct
* fb_overlayinfo_s */
# define FBIOSET_COLOR _FBIOC(0x000d) /* Set color
* Aŕgument: read-only struct
* fb_overlayinfo_s */
# define FBIOSET_BLANK _FBIOC(0x000e) /* Blank or unblank
* Argument: read-only struct
* fb_overlayinfo_s */
# define FBIOSET_AREA _FBIOC(0x000f) /* Set active overlay area
* Argument: read-only struct
* fb_overlayinfo_s */
# define FBIOSET_DESTAREA _FBIOC(0x0010) /* Set destination area on
* primary FB.
* Argument: read-only struct
* fb_overlayinfo_s */
#ifdef CONFIG_FB_OVERLAY_BLIT
# define FBIOSET_BLIT _FBIOC(0x0011) /* Blit area between overlays
* Argument: read-only struct
* fb_overlayblit_s */
# define FBIOSET_BLEND _FBIOC(0x0012) /* Blend area between overlays
* Argument: read-only struct
* fb_overlayblend_s */
#endif
#define FBIOPAN_OVERLAY _FBIOC(0x0013) /* Pan display for overlay
* Argument: read-only struct
* fb_overlayinfo_s */
#endif /* CONFIG_FB_OVERLAY */
/* Specific Controls ********************************************************/
#define FBIOSET_POWER _FBIOC(0x0014) /* Set panel power
* Argument: int */
#define FBIOGET_POWER _FBIOC(0x0015) /* Get panel current power
* Argument: int* */
#define FBIOSET_FRAMERATE _FBIOC(0x0016) /* Set frame rate
* Argument: int */
#define FBIOGET_FRAMERATE _FBIOC(0x0017) /* Get frame rate
* Argument: int* */
#define FBIOPAN_DISPLAY _FBIOC(0x0018) /* Pan display
* Argument: read-only struct
* fb_planeinfo_s* */
#define FBIOPAN_CLEAR _FBIOC(0x0019) /* Pan clear */
/* Argument: read-only
* unsigned long */
#define FBIOSET_VSYNCOFFSET _FBIOC(0x001a) /* Set VSync offset in usec
* Argument: int */
/* Linux Support ************************************************************/
#define FBIOGET_VSCREENINFO _FBIOC(0x001b) /* Get video variable info */
/* Argument: writable struct
* fb_var_screeninfo */
#define FBIOGET_FSCREENINFO _FBIOC(0x001c) /* Get video fix info */
/* Argument: writable struct
* fb_fix_screeninfo */
#define FB_TYPE_PACKED_PIXELS 0 /* Packed Pixels */
#define FB_TYPE_PLANES 1 /* Non interleaved planes */
#define FB_TYPE_INTERLEAVED_PLANES 2 /* Interleaved planes */
#define FB_TYPE_TEXT 3 /* Text/attributes */
#define FB_TYPE_VGA_PLANES 4 /* EGA/VGA planes */
#define FB_TYPE_FOURCC 5 /* Type identified by a V4L2 FOURCC */
#define FB_AUX_TEXT_MDA 0 /* Monochrome text */
#define FB_AUX_TEXT_CGA 1 /* CGA/EGA/VGA Color text */
#define FB_AUX_TEXT_S3_MMIO 2 /* S3 MMIO fasttext */
#define FB_AUX_TEXT_MGA_STEP16 3 /* MGA Millennium I: text, attr, */
/* 14 reserved bytes */
#define FB_AUX_TEXT_MGA_STEP8 4 /* other MGAs: text, attr, */
/* 6 reserved bytes */
#define FB_AUX_TEXT_SVGA_GROUP 8 /* 8-15: SVGA tileblit */
/* compatible modes */
#define FB_AUX_TEXT_SVGA_MASK 7 /* lower three bits says step */
#define FB_AUX_TEXT_SVGA_STEP2 8 /* SVGA text mode: text, attr */
#define FB_AUX_TEXT_SVGA_STEP4 9 /* SVGA text mode: text, attr, */
/* 2 reserved bytes */
#define FB_AUX_TEXT_SVGA_STEP8 10 /* SVGA text mode: text, attr, */
/* 6 reserved bytes */
#define FB_AUX_TEXT_SVGA_STEP16 11 /* SVGA text mode: text, attr, */
/* 14 reserved bytes */
#define FB_AUX_TEXT_SVGA_LAST 15 /* reserved up to 15 */
#define FB_AUX_VGA_PLANES_VGA4 0 /* 16 color planes (EGA/VGA) */
#define FB_AUX_VGA_PLANES_CFB4 1 /* CFB4 in planes (VGA) */
#define FB_AUX_VGA_PLANES_CFB8 2 /* CFB8 in planes (VGA) */
#define FB_VISUAL_MONO01 0 /* Monochr. 1=Black 0=White */
#define FB_VISUAL_MONO10 1 /* Monochr. 1=White 0=Black */
#define FB_VISUAL_TRUECOLOR 2 /* True color */
#define FB_VISUAL_PSEUDOCOLOR 3 /* Pseudo color (like atari) */
#define FB_VISUAL_DIRECTCOLOR 4 /* Direct color */
#define FB_VISUAL_STATIC_PSEUDOCOLOR 5 /* Pseudo color readonly */
#define FB_VISUAL_FOURCC 6 /* Visual identified by */
/* a V4L2 FOURCC */
#define FB_ACCEL_NONE 0 /* no hardware accelerator */
#define FB_ACCEL_ATARIBLITT 1 /* Atari Blitter */
#define FB_ACCEL_AMIGABLITT 2 /* Amiga Blitter */
#define FB_ACCEL_S3_TRIO64 3 /* Cybervision64 (S3 Trio64) */
#define FB_ACCEL_NCR_77C32BLT 4 /* RetinaZ3 (NCR 77C32BLT) */
#define FB_ACCEL_S3_VIRGE 5 /* Cybervision64/3D (S3 ViRGE) */
#define FB_ACCEL_ATI_MACH64GX 6 /* ATI Mach 64GX family */
#define FB_ACCEL_DEC_TGA 7 /* DEC 21030 TGA */
#define FB_ACCEL_ATI_MACH64CT 8 /* ATI Mach 64CT family */
#define FB_ACCEL_ATI_MACH64VT 9 /* ATI Mach 64CT family VT class */
#define FB_ACCEL_ATI_MACH64GT 10 /* ATI Mach 64CT family GT class */
#define FB_ACCEL_SUN_CREATOR 11 /* Sun Creator/Creator3D */
#define FB_ACCEL_SUN_CGSIX 12 /* Sun cg6 */
#define FB_ACCEL_SUN_LEO 13 /* Sun leo/zx */
#define FB_ACCEL_IMS_TWINTURBO 14 /* IMS Twin Turbo */
#define FB_ACCEL_3DLABS_PERMEDIA2 15 /* 3Dlabs Permedia 2 */
#define FB_ACCEL_MATROX_MGA2064W 16 /* Matrox MGA2064W (Millennium) */
#define FB_ACCEL_MATROX_MGA1064SG 17 /* Matrox MGA1064SG (Mystique) */
#define FB_ACCEL_MATROX_MGA2164W 18 /* Matrox MGA2164W (Millennium II) */
#define FB_ACCEL_MATROX_MGA2164W_AGP 19 /* Matrox MGA2164W (Millennium II) */
#define FB_ACCEL_MATROX_MGAG100 20 /* Matrox G100 (Productiva G100) */
#define FB_ACCEL_MATROX_MGAG200 21 /* Matrox G200 (Myst, Mill, ...) */
#define FB_ACCEL_SUN_CG14 22 /* Sun cgfourteen */
#define FB_ACCEL_SUN_BWTWO 23 /* Sun bwtwo */
#define FB_ACCEL_SUN_CGTHREE 24 /* Sun cgthree */
#define FB_ACCEL_SUN_TCX 25 /* Sun tcx */
#define FB_ACCEL_MATROX_MGAG400 26 /* Matrox G400 */
#define FB_ACCEL_NV3 27 /* nVidia RIVA 128 */
#define FB_ACCEL_NV4 28 /* nVidia RIVA TNT */
#define FB_ACCEL_NV5 29 /* nVidia RIVA TNT2 */
#define FB_ACCEL_CT_6555x 30 /* C&T 6555x */
#define FB_ACCEL_3DFX_BANSHEE 31 /* 3Dfx Banshee */
#define FB_ACCEL_ATI_RAGE128 32 /* ATI Rage128 family */
#define FB_ACCEL_IGS_CYBER2000 33 /* CyberPro 2000 */
#define FB_ACCEL_IGS_CYBER2010 34 /* CyberPro 2010 */
#define FB_ACCEL_IGS_CYBER5000 35 /* CyberPro 5000 */
#define FB_ACCEL_SIS_GLAMOUR 36 /* SiS 300/630/540 */
#define FB_ACCEL_3DLABS_PERMEDIA3 37 /* 3Dlabs Permedia 3 */
#define FB_ACCEL_ATI_RADEON 38 /* ATI Radeon family */
#define FB_ACCEL_I810 39 /* Intel 810/815 */
#define FB_ACCEL_SIS_GLAMOUR_2 40 /* SiS 315, 650, 740 */
#define FB_ACCEL_SIS_XABRE 41 /* SiS 330 ("Xabre") */
#define FB_ACCEL_I830 42 /* Intel 830M/845G/85x/865G */
#define FB_ACCEL_NV_10 43 /* nVidia Arch 10 */
#define FB_ACCEL_NV_20 44 /* nVidia Arch 20 */
#define FB_ACCEL_NV_30 45 /* nVidia Arch 30 */
#define FB_ACCEL_NV_40 46 /* nVidia Arch 40 */
#define FB_ACCEL_XGI_VOLARI_V 47 /* XGI Volari V3XT, V5, V8 */
#define FB_ACCEL_XGI_VOLARI_Z 48 /* XGI Volari Z7 */
#define FB_ACCEL_OMAP1610 49 /* TI OMAP16xx */
#define FB_ACCEL_TRIDENT_TGUI 50 /* Trident TGUI */
#define FB_ACCEL_TRIDENT_3DIMAGE 51 /* Trident 3DImage */
#define FB_ACCEL_TRIDENT_BLADE3D 52 /* Trident Blade3D */
#define FB_ACCEL_TRIDENT_BLADEXP 53 /* Trident BladeXP */
#define FB_ACCEL_CIRRUS_ALPINE 53 /* Cirrus Logic 543x/544x/5480 */
#define FB_ACCEL_NEOMAGIC_NM2070 90 /* NeoMagic NM2070 */
#define FB_ACCEL_NEOMAGIC_NM2090 91 /* NeoMagic NM2090 */
#define FB_ACCEL_NEOMAGIC_NM2093 92 /* NeoMagic NM2093 */
#define FB_ACCEL_NEOMAGIC_NM2097 93 /* NeoMagic NM2097 */
#define FB_ACCEL_NEOMAGIC_NM2160 94 /* NeoMagic NM2160 */
#define FB_ACCEL_NEOMAGIC_NM2200 95 /* NeoMagic NM2200 */
#define FB_ACCEL_NEOMAGIC_NM2230 96 /* NeoMagic NM2230 */
#define FB_ACCEL_NEOMAGIC_NM2360 97 /* NeoMagic NM2360 */
#define FB_ACCEL_NEOMAGIC_NM2380 98 /* NeoMagic NM2380 */
#define FB_ACCEL_PXA3XX 99 /* PXA3xx */
#define FB_ACCEL_SAVAGE4 0x80 /* S3 Savage4 */
#define FB_ACCEL_SAVAGE3D 0x81 /* S3 Savage3D */
#define FB_ACCEL_SAVAGE3D_MV 0x82 /* S3 Savage3D-MV */
#define FB_ACCEL_SAVAGE2000 0x83 /* S3 Savage2000 */
#define FB_ACCEL_SAVAGE_MX_MV 0x84 /* S3 Savage/MX-MV */
#define FB_ACCEL_SAVAGE_MX 0x85 /* S3 Savage/MX */
#define FB_ACCEL_SAVAGE_IX_MV 0x86 /* S3 Savage/IX-MV */
#define FB_ACCEL_SAVAGE_IX 0x87 /* S3 Savage/IX */
#define FB_ACCEL_PROSAVAGE_PM 0x88 /* S3 ProSavage PM133 */
#define FB_ACCEL_PROSAVAGE_KM 0x89 /* S3 ProSavage KM133 */
#define FB_ACCEL_S3TWISTER_P 0x8a /* S3 Twister */
#define FB_ACCEL_S3TWISTER_K 0x8b /* S3 TwisterK */
#define FB_ACCEL_SUPERSAVAGE 0x8c /* S3 Supersavage */
#define FB_ACCEL_PROSAVAGE_DDR 0x8d /* S3 ProSavage DDR */
#define FB_ACCEL_PROSAVAGE_DDRK 0x8e /* S3 ProSavage DDR-K */
#define FB_ACCEL_PUV3_UNIGFX 0xa0 /* PKUnity-v3 Unigfx */
#define FB_NONSTD_HAM 1 /* Hold-And-Modify (HAM) */
#define FB_NONSTD_REV_PIX_IN_B 2 /* Order of pixels in each byte */
/* is reversed */
#define FB_ACTIVATE_NOW 0 /* Set values immediately (or vbl) */
#define FB_ACTIVATE_NXTOPEN 1 /* Activate on next open */
#define FB_ACTIVATE_TEST 2 /* Don't set, round up impossible */
#define FB_ACTIVATE_MASK 15 /* values */
#define FB_ACTIVATE_VBL 16 /* Activate values on next vbl */
#define FB_CHANGE_CMAP_VBL 32 /* Change colormap on vbl */
#define FB_ACTIVATE_ALL 64 /* Change all VCs on this fb */
#define FB_ACTIVATE_FORCE 128 /* Force apply even when no change */
#define FB_ACTIVATE_INV_MODE 256 /* Invalidate videomode */
#define FB_ACCELF_TEXT 1 /* (OBSOLETE) See fb_info.flags */
/* and vc_mode */
#define FB_SYNC_HOR_HIGH_ACT 1 /* Horizontal sync high active */
#define FB_SYNC_VERT_HIGH_ACT 2 /* Vertical sync high active */
#define FB_SYNC_EXT 4 /* External sync */
#define FB_SYNC_COMP_HIGH_ACT 8 /* Composite sync high active */
#define FB_SYNC_BROADCAST 16 /* Broadcast video timings */
/* vtotal = 144d/288n/576i => PAL */
/* vtotal = 121d/242n/484i => NTSC */
#define FB_SYNC_ON_GREEN 32 /* Sync on green */
#define FB_VMODE_NONINTERLACED 0 /* Non interlaced */
#define FB_VMODE_INTERLACED 1 /* Interlaced */
#define FB_VMODE_DOUBLE 2 /* Double scan */
#define FB_VMODE_ODD_FLD_FIRST 4 /* Interlaced: top line first */
#define FB_VMODE_MASK 255
#define FB_VMODE_YWRAP 256 /* Ywrap instead of panning */
#define FB_VMODE_SMOOTH_XPAN 512 /* Smooth xpan possible */
/* (internally used) */
#define FB_VMODE_CONUPDATE 512 /* Don't update x/yoffset */
#define FB_ROTATE_UR 0
#define FB_ROTATE_CW 1
#define FB_ROTATE_UD 2
#define FB_ROTATE_CCW 3
#ifdef CONFIG_VIDEO_FB_SPLASHSCREEN
# if defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP32)
# define MKRGB ARGBTO32
# elif defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP24)
# define MKRGB RGBTO24
# elif defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP16)
# define MKRGB RGBTO16
# elif defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP8)
# define MKRGB RGBTO8
# endif /* CONFIG_VIDEO_FB_SPLASHSCREEN_BPP32 */
#endif /* CONFIG_VIDEO_FB_SPLASHSCREEN */
/****************************************************************************
* Public Types
****************************************************************************/
/* If any dimension of the display exceeds 65,536 pixels, then the following
* type will need to change:
*/
typedef uint16_t fb_coord_t;
/* This structure describes the overall video controller */
struct fb_videoinfo_s
{
uint8_t fmt; /* see FB_FMT_* */
fb_coord_t xres; /* Horizontal resolution in pixel columns */
fb_coord_t yres; /* Vertical resolution in pixel rows */
uint8_t nplanes; /* Number of color planes supported */
#ifdef CONFIG_FB_OVERLAY
uint8_t noverlays; /* Number of overlays supported */
#endif
#ifdef CONFIG_FB_MODULEINFO
uint8_t moduleinfo[128]; /* Module information filled by vendor */
#endif
};
/* This structure describes one color plane. Some YUV formats may support
* up to 4 planes
*/
struct fb_planeinfo_s
{
FAR void *fbmem; /* Start of frame buffer memory */
size_t fblen; /* Length of frame buffer memory in bytes */
fb_coord_t stride; /* Length of a line in bytes */
uint8_t display; /* Display number */
uint8_t bpp; /* Bits per pixel */
uint32_t xres_virtual; /* Virtual Horizontal resolution in pixel columns */
uint32_t yres_virtual; /* Virtual Vertical resolution in pixel rows */
uint32_t xoffset; /* Offset from virtual to visible resolution */
uint32_t yoffset; /* Offset from virtual to visible resolution */
};
/* This structure describes an area. */
struct fb_area_s
{
fb_coord_t x; /* x-offset of the area */
fb_coord_t y; /* y-offset of the area */
fb_coord_t w; /* Width of the area */
fb_coord_t h; /* Height of the area */
};
#ifdef CONFIG_FB_OVERLAY
/* This structure describes the transparency. */
struct fb_transp_s
{
uint8_t transp; /* Transparency */
uint8_t transp_mode; /* Transparency mode */
};
/* This structure describes one overlay. */
struct fb_overlayinfo_s
{
FAR void *fbmem; /* Start of frame buffer memory */
size_t fblen; /* Length of frame buffer memory in bytes */
fb_coord_t stride; /* Length of a line in bytes */
uint8_t overlay; /* Overlay number */
uint8_t bpp; /* Bits per pixel */
uint32_t xres; /* Horizontal resolution in pixel columns */
uint32_t yres; /* Vertical resolution in pixel rows */
uint32_t xres_virtual; /* Virtual Horizontal resolution in pixel columns */
uint32_t yres_virtual; /* Virtual Vertical resolution in pixel rows */
uint32_t xoffset; /* Offset from virtual to visible resolution */
uint32_t yoffset; /* Offset from virtual to visible resolution */
uint8_t blank; /* Blank or unblank */
uint32_t chromakey; /* Chroma key argb8888 formatted */
uint32_t color; /* Color argb8888 formatted */
struct fb_transp_s transp; /* Transparency */
struct fb_area_s sarea; /* Selected area within the overlay */
struct fb_area_s darea; /* Destination area on the primary FB */
uint32_t accl; /* Supported hardware acceleration */
};
#ifdef CONFIG_FB_OVERLAY_BLIT
/* This structure describes an overlay area within a whole overlay */
struct fb_overlayarea_s
{
uint8_t overlay; /* Number overlay */
struct fb_area_s area; /* Overlay area */
};
/* This structure describes blit operation */
struct fb_overlayblit_s
{
struct fb_overlayarea_s dest; /* The destination overlay area */
struct fb_overlayarea_s src; /* The source overlay area */
};
/* This structure describes blend operation */
struct fb_overlayblend_s
{
struct fb_overlayarea_s dest; /* The destination overlay area */
struct fb_overlayarea_s foreground; /* The foreground overlay area */
struct fb_overlayarea_s background; /* The background overlay area */
};
#endif
#endif /* CONFIG_FB_OVERLAY */
/* On video controllers that support mapping of a pixel palette value
* to an RGB encoding, the following structure may be used to define
* that mapping.
*/
#ifdef CONFIG_FB_CMAP
struct fb_cmap_s
{
uint16_t first; /* Offset offset first color entry in tables */
uint16_t len; /* Number of color entries in tables */
/* Tables of color component. Any may be NULL if not used */
uint8_t *red; /* Table of 8-bit red values */
uint8_t *green; /* Table of 8-bit green values */
uint8_t *blue; /* Table of 8-bit blue values */
#ifdef CONFIG_FB_TRANSPARENCY
uint8_t *transp; /* Table of 8-bit transparency */
#endif
};
#endif
#ifdef CONFIG_FB_HWCURSOR
#ifdef CONFIG_FB_HWCURSORIMAGE
/* If the video controller hardware supports a hardware cursor and
* that hardware cursor supports user-provided images, then the
* following structure may be used to provide the cursor image
*/
struct fb_cursorimage_s
{
fb_coord_t width; /* Width of the cursor image in pixels */
fb_coord_t height /* Height of the cursor image in pixels */
const uint8_t *image; /* Pointer to image data */
};
#endif
/* The following structure defines the cursor position/size */
struct fb_cursorpos_s
{
fb_coord_t x; /* X position in pixels */
fb_coord_t y; /* Y position in rows */
};
/* If the hardware supports setting the cursor size, then this structure
* is used to provide the size.
*/
#ifdef CONFIG_FB_HWCURSORSIZE
struct fb_cursorsize_s
{
fb_coord_t h; /* Height in rows */
fb_coord_t w; /* Width in pixels */
};
#endif
/* The following are used to get/set the cursor attributes via IOCTL
* command.
*/
struct fb_cursorattrib_s
{
#ifdef CONFIG_FB_HWCURSORIMAGE
uint8_t fmt; /* Video format of cursor */
#endif
struct fb_cursorpos_s pos; /* Current cursor position */
#ifdef CONFIG_FB_HWCURSORSIZE
struct fb_cursorsize_s mxsize; /* Maximum cursor size */
struct fb_cursorsize_s size; /* Current size */
#endif
};
struct fb_setcursor_s
{
uint8_t flags; /* See FB_CUR_* definitions */
struct fb_cursorpos_s pos; /* Cursor position */
#ifdef CONFIG_FB_HWCURSORSIZE
struct fb_cursorsize_s size; /* Cursor size */
#endif
#ifdef CONFIG_FB_HWCURSORIMAGE
struct fb_cursorimage_s img; /* Cursor image */
#endif
};
#endif
union fb_paninfo_u
{
struct fb_planeinfo_s planeinfo;
#ifdef CONFIG_FB_OVERLAY
struct fb_overlayinfo_s overlayinfo;
#endif
};
/* The framebuffer "object" is accessed through within the OS via
* the following vtable:
*/
struct fb_vtable_s
{
/* Get information about the video controller configuration and the
* configuration of each color plane.
*/
int (*getvideoinfo)(FAR struct fb_vtable_s *vtable,
FAR struct fb_videoinfo_s *vinfo);
int (*getplaneinfo)(FAR struct fb_vtable_s *vtable, int planeno,
FAR struct fb_planeinfo_s *pinfo);
/* open/close window. */
int (*open)(FAR struct fb_vtable_s *vtable);
int (*close)(FAR struct fb_vtable_s *vtable);
#ifdef CONFIG_FB_CMAP
/* The following are provided only if the video hardware supports RGB
* color mapping
*/
int (*getcmap)(FAR struct fb_vtable_s *vtable,
FAR struct fb_cmap_s *cmap);
int (*putcmap)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_cmap_s *cmap);
#endif
#ifdef CONFIG_FB_HWCURSOR
/* The following are provided only if the video hardware supports a
* hardware cursor.
*/
int (*getcursor)(FAR struct fb_vtable_s *vtable,
FAR struct fb_cursorattrib_s *attrib);
int (*setcursor)(FAR struct fb_vtable_s *vtable,
FAR struct fb_setcursor_s *settings);
#endif
#ifdef CONFIG_FB_UPDATE
/* The following are provided only if the video hardware need extera
* notification to update display content.
*/
int (*updatearea)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_area_s *area);
#endif
#ifdef CONFIG_FB_SYNC
/* The following are provided only if the video hardware signals
* vertical sync.
*/
int (*waitforvsync)(FAR struct fb_vtable_s *vtable);
#endif
#ifdef CONFIG_FB_OVERLAY
/* Get information about the video controller configuration and the
* configuration of each overlay.
*/
int (*getoverlayinfo)(FAR struct fb_vtable_s *vtable, int overlayno,
FAR struct fb_overlayinfo_s *oinfo);
/* The following are provided only if the video hardware supports
* transparency
*/
int (*settransp)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayinfo_s *oinfo);
/* The following are provided only if the video hardware supports
* chromakey
*/
int (*setchromakey)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayinfo_s *oinfo);
/* The following are provided only if the video hardware supports
* filling the overlay with a color.
*/
int (*setcolor)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayinfo_s *oinfo);
/* The following allows to switch the overlay on or off */
int (*setblank)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayinfo_s *oinfo);
/* The following allows to set the active area for subsequently overlay
* operations.
*/
int (*setarea)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayinfo_s *oinfo);
/* The following allows to set the display area for subsequently overlay
* operations.
*/
int (*setdestarea)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayinfo_s *oinfo);
# ifdef CONFIG_FB_OVERLAY_BLIT
/* The following are provided only if the video hardware supports
* blit operation between overlays.
*/
int (*blit)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayblit_s *blit);
/* The following are provided only if the video hardware supports
* blend operation between overlays.
*/
int (*blend)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayblend_s *blend);
# endif
/* The following allows to pan display for multiple buffers.
*/
int (*panoverlay)(FAR struct fb_vtable_s *vtable,
FAR const struct fb_overlayinfo_s *oinfo);
#endif
/* Pan display for multiple buffers. */
int (*pandisplay)(FAR struct fb_vtable_s *vtable,
FAR struct fb_planeinfo_s *pinfo);
/* Specific Controls ******************************************************/
/* Set the frequency of the framebuffer update panel (0: disable refresh) */
int (*setframerate)(FAR struct fb_vtable_s *vtable, int rate);
/* Get the frequency of the framebuffer update panel (0: disable refresh) */
int (*getframerate)(FAR struct fb_vtable_s *vtable);
/* Get the panel power status (0: full off). */
int (*getpower)(FAR struct fb_vtable_s *vtable);
/* Enable/disable panel power (0: full off). */
int (*setpower)(FAR struct fb_vtable_s *vtable, int power);
/* Passthrough the unknown ioctl commands. */
int (*ioctl)(FAR struct fb_vtable_s *vtable, int cmd, unsigned long arg);
/* Pointer to framebuffer device private data. */
FAR void *priv;
};
/* Linux Support ************************************************************/
struct fb_fix_screeninfo
{
char id[16]; /* Identification string eg "TT Builtin" */
unsigned long smem_start; /* Start of frame buffer mem */
/* (physical address) */
uint32_t smem_len; /* Length of frame buffer mem */
uint32_t type; /* See FB_TYPE_* */
uint32_t type_aux; /* Interleave for interleaved Planes */
uint32_t visual; /* See FB_VISUAL_* */
uint16_t xpanstep; /* Zero if no hardware panning */
uint16_t ypanstep; /* Zero if no hardware panning */
uint16_t ywrapstep; /* Zero if no hardware ywrap */
uint32_t line_length; /* Length of a line in bytes */
unsigned long mmio_start; /* Start of Memory Mapped I/O */
/* (physical address) */
uint32_t mmio_len; /* Length of Memory Mapped I/O */
uint32_t accel; /* Indicate to driver which */
/* specific chip/card we have */
uint16_t capabilities; /* See FB_CAP_* */
uint16_t reserved[2]; /* Reserved for future compatibility */
};
/* Interpretation of offset for color fields: All offsets are from the right,
* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
* can use the offset as right argument to <<). A pixel afterwards is a bit
* stream and is written to video memory as that unmodified.
*
* For pseudocolor: offset and length should be the same for all color
* components. Offset specifies the position of the least significant bit
* of the palette index in a pixel value. Length indicates the number
* of available palette entries (i.e. # of entries = 1 << length).
*/
struct fb_bitfield
{
uint32_t offset; /* Beginning of bitfield */
uint32_t length; /* Length of bitfield */
uint32_t msb_right; /* != 0 : Most significant bit is right */
};
struct fb_var_screeninfo
{
uint32_t xres; /* Visible resolution */
uint32_t yres;
uint32_t xres_virtual; /* Virtual resolution */
uint32_t yres_virtual;
uint32_t xoffset; /* Offset from virtual to visible */
uint32_t yoffset; /* Resolution */
uint32_t bits_per_pixel; /* Guess what */
uint32_t grayscale; /* 0 = color, 1 = grayscale, >1 = FOURCC */
struct fb_bitfield red; /* Bitfield in fb mem if true color, */
struct fb_bitfield green; /* else only length is significant */
struct fb_bitfield blue;
struct fb_bitfield transp; /* Transparency */
uint32_t nonstd; /* != 0 Non standard pixel format */
uint32_t activate; /* See FB_ACTIVATE_* */
uint32_t height; /* Height of picture in mm */
uint32_t width; /* Width of picture in mm */
uint32_t accel_flags; /* (OBSOLETE) See fb_info.flags */
/* Timing: All values in pixclocks, except pixclock (of course) */
uint32_t pixclock; /* Pixel clock in ps (pico seconds) */
uint32_t left_margin; /* Time from sync to picture */
uint32_t right_margin; /* Time from picture to sync */
uint32_t upper_margin; /* Time from sync to picture */
uint32_t lower_margin;
uint32_t hsync_len; /* Length of horizontal sync */
uint32_t vsync_len; /* Length of vertical sync */
uint32_t sync; /* See FB_SYNC_* */
uint32_t vmode; /* See FB_VMODE_* */
uint32_t rotate; /* Angle we rotate counter clockwise */
uint32_t colorspace; /* Colorspace for FOURCC-based modes */
uint32_t reserved[4]; /* Reserved for future compatibility */
};
#ifdef CONFIG_VIDEO_FB_SPLASHSCREEN
# if defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP8) || \
defined(CONFIG_VIDEO_FB_SPLASHSCREEN_MONO) || \
defined(CONFIG_VIDEO_FB_SPLASHSCREEN_GREY)
typedef uint8_t fb_pixel_t;
# elif defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP16)
typedef uint16_t fb_pixel_t;
#elif defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP24)
typedef uint32_t fb_pixel_t;
# elif defined(CONFIG_VIDEO_FB_SPLASHSCREEN_BPP32)
typedef uint32_t fb_pixel_t;
# else
# error "Pixel depth is unknown"
#endif
/* Describes a point on the display */
struct fb_point_s
{
fb_coord_t x; /* X position, range: 0 to screen width - 1 */
fb_coord_t y; /* Y position, range: 0 to screen height - 1 */
};
struct fb_rect_s
{
struct fb_point_s pt1; /* Upper, left-hand corner */
struct fb_point_s pt2; /* Lower, right-hand corner */
};
/* This structure describes the splashscreen */
struct splscr_bitmap_s
{
uint8_t npixels; /* Number of pixels */
uint8_t lookup; /* Pixel RGB lookup index */
};
struct palette_bitmap_s
{
fb_coord_t width; /* Width in pixels */
fb_coord_t height; /* Height in rows */
FAR const fb_pixel_t *lut; /* Pointer to the palette (LUT) */
FAR const struct
splscr_bitmap_s *data; /* The RLE data */
};
#endif
/****************************************************************************
* Public Data
****************************************************************************/
#ifdef __cplusplus
#define EXTERN extern "C"
extern "C"
{
#else
#define EXTERN extern
#endif
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
* If an architecture supports a framebuffer, then it must provide the
* following APIs to access the framebuffer.
****************************************************************************/
/****************************************************************************
* Name: up_fbinitialize
*
* Description:
* Initialize the framebuffer video hardware associated with the display.
*
* There are multiple logic paths that may call up_fbinitialize() so any
* implementation of up_fbinitialize() should be tolerant of being called
* multiple times.
*
* Input Parameters:
* display - In the case of hardware with multiple displays, this
* specifies the display. Normally this is zero.
*
* Returned Value:
* Zero is returned on success; a negated errno value is returned on any
* failure.
*
****************************************************************************/
int up_fbinitialize(int display);
/****************************************************************************
* Name: up_fbgetvplane
*
* Description:
* Return a a reference to the framebuffer object for the specified video
* plane of the specified plane. Many OSDs support multiple planes of
* video.
*
* Input Parameters:
* display - In the case of hardware with multiple displays, this
* specifies the display. Normally this is zero.
* vplane - Identifies the plane being queried.
*
* Returned Value:
* A non-NULL pointer to the frame buffer access structure is returned on
* success; NULL is returned on any failure.
*
****************************************************************************/
FAR struct fb_vtable_s *up_fbgetvplane(int display, int vplane);
/****************************************************************************
* Name: up_fbuninitialize
*
* Description:
* Uninitialize the framebuffer support for the specified display.
*
* Input Parameters:
* display - In the case of hardware with multiple displays, this
* specifies the display. Normally this is zero.
*
* Returned Value:
* None
*
****************************************************************************/
void up_fbuninitialize(int display);
/****************************************************************************
* Name: fb_notify_vsync
* Description:
* notify that the vsync comes.
*
* Input Parameters:
* vtable - Pointer to framebuffer's virtual table.
*
****************************************************************************/
void fb_notify_vsync(FAR struct fb_vtable_s *vtable);
/****************************************************************************
* Name: fb_peek_paninfo
* Description:
* Peek a frame from pan info queue of the specified overlay.
*
* Input Parameters:
* vtable - Pointer to framebuffer's virtual table.
* info - Pointer to pan info.
* overlay - Overlay index.
*
* Returned Value:
* Zero is returned on success; a negated errno value is returned on any
* failure.
****************************************************************************/
int fb_peek_paninfo(FAR struct fb_vtable_s *vtable,
FAR union fb_paninfo_u *info,
int overlay);
/****************************************************************************
* Name: fb_remove_paninfo
* Description:
* Remove a frame from pan info queue of the specified overlay.
*
* Input Parameters:
* vtable - Pointer to framebuffer's virtual table.
* overlay - Overlay index.
*
* Returned Value:
* Zero is returned on success; a negated errno value is returned on any
* failure.
****************************************************************************/
int fb_remove_paninfo(FAR struct fb_vtable_s *vtable, int overlay);
/****************************************************************************
* Name: fb_paninfo_count
* Description:
* Get pan info count of specified overlay pan info queue.
*
* Input Parameters:
* vtable - Pointer to framebuffer's virtual table.
* overlay - Overlay index.
*
* Returned Value:
* a non-negative value is returned on success; a negated errno value is
* returned on any failure.
****************************************************************************/
int fb_paninfo_count(FAR struct fb_vtable_s *vtable, int overlay);
/****************************************************************************
* Name: fb_register_device
*
* Description:
* Register the framebuffer character device at /dev/fbN where N is the
* display number if the devices supports only a single plane. If the
* hardware supports multiple color planes, then the device will be
* registered at /dev/fbN.M where N is the again display number but M
* is the display plane.
*
* Input Parameters:
* display - The display number for the case of boards supporting multiple
* displays or for hardware that supports multiple
* layers (each layer is consider a display). Typically zero.
* plane - Identifies the color plane on hardware that supports separate
* framebuffer "planes" for each color component.
* vtable - Pointer to framebuffer's virtual table.
*
* Returned Value:
* Zero (OK) is returned success; a negated errno value is returned on any
* failure.
*
****************************************************************************/
int fb_register_device(int display, int plane,
FAR struct fb_vtable_s *vtable);
/****************************************************************************
* Name: fb_register
*
* Description:
* Register the framebuffer character device at /dev/fbN where N is the
* display number if the devices supports only a single plane. If the
* hardware supports multiple color planes, then the device will be
* registered at /dev/fbN.M where N is the again display number but M
* is the display plane.
*
* Input Parameters:
* display - The display number for the case of boards supporting multiple
* displays or for hardware that supports multiple
* layers (each layer is consider a display). Typically zero.
* plane - Identifies the color plane on hardware that supports separate
* framebuffer "planes" for each color component.
*
* Returned Value:
* Zero (OK) is returned success; a negated errno value is returned on any
* failure.
*
****************************************************************************/
static inline_function unused_code int fb_register(int display, int plane)
{
FAR struct fb_vtable_s *vtable;
int ret;
/* Initialize the frame buffer device. */
ret = up_fbinitialize(display);
if (ret < 0)
{
gerr("ERROR: up_fbinitialize() failed for display %d: %d\n",
display, ret);
return ret;
}
vtable = up_fbgetvplane(display, plane);
if (vtable == NULL)
{
gerr("ERROR: up_fbgetvplane() failed, vplane=%d\n", plane);
return -EINVAL;
}
return fb_register_device(display, plane, vtable);
}
#undef EXTERN
#ifdef __cplusplus
}
#endif
#endif /* __INCLUDE_NUTTX_VIDEO_FB_H */