2016-06-09 12:54:08 +03:00
/*
* Copyright ( c ) 2016 Laurent Pinchart < laurent . pinchart @ ideasonboard . com >
*
* Permission to use , copy , modify , distribute , and sell this software and its
* documentation for any purpose is hereby granted without fee , provided that
* the above copyright notice appear in all copies and that both that copyright
* notice and this permission notice appear in supporting documentation , and
* that the name of the copyright holders not be used in advertising or
* publicity pertaining to distribution of the software without specific ,
* written prior permission . The copyright holders make no representations
* about the suitability of this software for any purpose . It is provided " as
* is " without express or implied warranty.
*
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE ,
* INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS , IN NO
* EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL , INDIRECT OR
* CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE ,
* DATA OR PROFITS , WHETHER IN AN ACTION OF CONTRACT , NEGLIGENCE OR OTHER
* TORTIOUS ACTION , ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
* OF THIS SOFTWARE .
*/
# ifndef __DRM_FOURCC_H__
# define __DRM_FOURCC_H__
# include <linux/types.h>
# include <uapi/drm/drm_fourcc.h>
2018-09-05 08:04:41 +02:00
/*
* DRM formats are little endian . Define host endian variants for the
* most common formats here , to reduce the # ifdefs needed in drivers .
*
* Note that the DRM_FORMAT_BIG_ENDIAN flag should only be used in
* case the format can ' t be specified otherwise , so we don ' t end up
* with two values describing the same format .
*/
# ifdef __BIG_ENDIAN
# define DRM_FORMAT_HOST_XRGB1555 (DRM_FORMAT_XRGB1555 | \
DRM_FORMAT_BIG_ENDIAN )
# define DRM_FORMAT_HOST_RGB565 (DRM_FORMAT_RGB565 | \
DRM_FORMAT_BIG_ENDIAN )
# define DRM_FORMAT_HOST_XRGB8888 DRM_FORMAT_BGRX8888
# define DRM_FORMAT_HOST_ARGB8888 DRM_FORMAT_BGRA8888
# else
# define DRM_FORMAT_HOST_XRGB1555 DRM_FORMAT_XRGB1555
# define DRM_FORMAT_HOST_RGB565 DRM_FORMAT_RGB565
# define DRM_FORMAT_HOST_XRGB8888 DRM_FORMAT_XRGB8888
# define DRM_FORMAT_HOST_ARGB8888 DRM_FORMAT_ARGB8888
# endif
2017-03-21 20:12:16 +02:00
struct drm_device ;
struct drm_mode_fb_cmd2 ;
2016-10-18 01:41:09 +03:00
/**
* struct drm_format_info - information about a DRM format
* @ format : 4 CC format identifier ( DRM_FORMAT_ * )
* @ depth : Color depth ( number of bits per pixel excluding padding bits ) ,
* valid for a subset of RGB formats only . This is a legacy field , do not
* use in new code and set to 0 for new formats .
* @ num_planes : Number of color planes ( 1 to 3 )
* @ cpp : Number of bytes per pixel ( per plane )
* @ hsub : Horizontal chroma subsampling factor
* @ vsub : Vertical chroma subsampling factor
2017-12-22 15:29:26 +01:00
* @ has_alpha : Does the format embeds an alpha component ?
2018-07-17 18:13:42 +01:00
* @ is_yuv : Is it a YUV format ?
2016-10-18 01:41:09 +03:00
*/
struct drm_format_info {
u32 format ;
u8 depth ;
u8 num_planes ;
u8 cpp [ 3 ] ;
u8 hsub ;
u8 vsub ;
2017-12-22 15:29:26 +01:00
bool has_alpha ;
2018-07-17 18:13:42 +01:00
bool is_yuv ;
2016-10-18 01:41:09 +03:00
} ;
2016-11-12 01:12:56 +00:00
/**
* struct drm_format_name_buf - name of a DRM format
* @ str : string buffer containing the format name
*/
struct drm_format_name_buf {
char str [ 32 ] ;
} ;
2016-10-18 01:41:12 +03:00
const struct drm_format_info * __drm_format_info ( u32 format ) ;
2016-10-18 01:41:09 +03:00
const struct drm_format_info * drm_format_info ( u32 format ) ;
2017-03-21 20:12:16 +02:00
const struct drm_format_info *
drm_get_format_info ( struct drm_device * dev ,
const struct drm_mode_fb_cmd2 * mode_cmd ) ;
2016-08-29 10:27:54 +02:00
uint32_t drm_mode_legacy_fb_format ( uint32_t bpp , uint32_t depth ) ;
2018-09-21 15:46:59 +02:00
uint32_t drm_driver_legacy_fb_format ( struct drm_device * dev ,
uint32_t bpp , uint32_t depth ) ;
2016-06-09 12:54:08 +03:00
int drm_format_num_planes ( uint32_t format ) ;
int drm_format_plane_cpp ( uint32_t format , int plane ) ;
int drm_format_horz_chroma_subsampling ( uint32_t format ) ;
int drm_format_vert_chroma_subsampling ( uint32_t format ) ;
int drm_format_plane_width ( int width , uint32_t format , int plane ) ;
int drm_format_plane_height ( int height , uint32_t format , int plane ) ;
2016-11-12 01:12:56 +00:00
const char * drm_get_format_name ( uint32_t format , struct drm_format_name_buf * buf ) ;
2016-06-09 12:54:08 +03:00
# endif /* __DRM_FOURCC_H__ */