Squashed commit of the following:

drivers/lcd/tda19988.c:  Now uses the new common videomode structure of include/nuttx/video/videomode.h as do other video components.

    video/, include/nuttx/video/videomode.h:  Separate EDID and from videomode managment.  They really are separate things.
This commit is contained in:
Gregory Nutt 2019-07-10 09:00:17 -06:00
parent d2e884f43c
commit 2811a297c7
12 changed files with 213 additions and 175 deletions

View file

@ -82,7 +82,7 @@
****************************************************************************/ ****************************************************************************/
static uint32_t static uint32_t
am335x_videomode_vrefresh(FAR const struct edid_videomode_s *videomode) am335x_videomode_vrefresh(FAR const struct videomode_s *videomode)
{ {
uint32_t refresh; uint32_t refresh;
@ -113,7 +113,7 @@ static uint32_t
****************************************************************************/ ****************************************************************************/
static bool static bool
am335x_videomode_valid(FAR const struct edid_videomode_s *videomode) am335x_videomode_valid(FAR const struct videomode_s *videomode)
{ {
size_t fbstride; size_t fbstride;
size_t fbsize; size_t fbsize;
@ -216,10 +216,10 @@ static bool
* *
****************************************************************************/ ****************************************************************************/
static const struct edid_videomode_s * static const struct videomode_s *
am335x_lcd_pickmode(FAR struct edid_info_s *ei) am335x_lcd_pickmode(FAR struct edid_info_s *ei)
{ {
FAR const struct edid_videomode_s *videomode; FAR const struct videomode_s *videomode;
int n; int n;
/* Get standard VGA as default */ /* Get standard VGA as default */
@ -242,7 +242,7 @@ static const struct edid_videomode_s *
* are sorted on closest match to that mode. * are sorted on closest match to that mode.
*/ */
edid_sort_modes(ei->edid_modes, &ei->edid_preferred_mode, ei->edid_nmodes); sort_videomodes(ei->edid_modes, &ei->edid_preferred_mode, ei->edid_nmodes);
/* Pick the first valid mode in the list */ /* Pick the first valid mode in the list */
@ -280,7 +280,7 @@ static const struct edid_videomode_s *
* *
****************************************************************************/ ****************************************************************************/
void am335x_lcd_videomode(FAR const struct edid_videomode_s *videomode, void am335x_lcd_videomode(FAR const struct videomode_s *videomode,
FAR struct am335x_panel_info_s *panel) FAR struct am335x_panel_info_s *panel)
{ {
lcdinfo("Detected videomode: %dx%d @ %dKHz\n", lcdinfo("Detected videomode: %dx%d @ %dKHz\n",
@ -355,9 +355,9 @@ void am335x_lcd_videomode(FAR const struct edid_videomode_s *videomode,
void am335x_lcd_edid(FAR const uint8_t *edid, size_t edid_len, void am335x_lcd_edid(FAR const uint8_t *edid, size_t edid_len,
FAR struct am335x_panel_info_s *panel, FAR struct am335x_panel_info_s *panel,
FAR struct edid_videomode_s *selected) FAR const struct videomode_s **selected)
{ {
FAR const struct edid_videomode_s *videomode = NULL; FAR const struct videomode_s *videomode = NULL;
struct edid_info_s ei; struct edid_info_s ei;
/* Do we have EDID data? */ /* Do we have EDID data? */
@ -380,7 +380,7 @@ void am335x_lcd_edid(FAR const uint8_t *edid, size_t edid_len,
if (videomode == NULL) if (videomode == NULL)
{ {
videomode = edid_mode_lookup("640x480x60"); videomode = videomode_lookup("640x480x60");
DEBUGASSERT(videomode != NULL); DEBUGASSERT(videomode != NULL);
} }
@ -392,6 +392,6 @@ void am335x_lcd_edid(FAR const uint8_t *edid, size_t edid_len,
if (selected != NULL) if (selected != NULL)
{ {
memcpy(selected, videomode, sizeof(struct edid_videomode_s)); *selected = videomode;
} }
} }

View file

@ -251,9 +251,9 @@ void am335x_lcdclear(nxgl_mxpixel_t color);
* *
****************************************************************************/ ****************************************************************************/
struct edid_videomode_s; /* Forward reference */ struct videomode_s; /* Forward reference */
void am335x_lcd_videomode(FAR const struct edid_videomode_s *videomode, void am335x_lcd_videomode(FAR const struct videomode_s *videomode,
FAR struct am335x_panel_info_s *panel); FAR struct am335x_panel_info_s *panel);
/**************************************************************************** /****************************************************************************
@ -281,7 +281,7 @@ void am335x_lcd_videomode(FAR const struct edid_videomode_s *videomode,
void am335x_lcd_edid(FAR const uint8_t *edid, size_t edid_len, void am335x_lcd_edid(FAR const uint8_t *edid, size_t edid_len,
FAR struct am335x_panel_info_s *panel, FAR struct am335x_panel_info_s *panel,
FAR struct edid_videomode_s *selected); FAR const struct videomode_s **selected);
/**************************************************************************** /****************************************************************************
* Name: am335x_backlight * Name: am335x_backlight

View file

@ -47,6 +47,7 @@
#include <nuttx/lcd/tda19988.h> #include <nuttx/lcd/tda19988.h>
#include <nuttx/video/fb.h> #include <nuttx/video/fb.h>
#include <nuttx/video/edid.h> #include <nuttx/video/edid.h>
#include <nuttx/video/videomode.h>
#include "am335x_lcdc.h" #include "am335x_lcdc.h"
#include "beaglebone-black.h" #include "beaglebone-black.h"
@ -132,11 +133,13 @@ static int am335x_enable(const struct tda19988_lower_s *lower, bool enable)
int up_fbinitialize(int display) int up_fbinitialize(int display)
{ {
FAR const struct edid_videomode_s *videomode; FAR const struct videomode_s *videomode;
struct am335x_panel_info_s panel; struct am335x_panel_info_s panel;
int ret; int ret;
#ifdef HAVE_TDA19988 #ifdef HAVE_TDA19988
TDA19988_HANDLE handle;
/* Initialize the TDA19988 GPIO interrupt input */ /* Initialize the TDA19988 GPIO interrupt input */
/* Initialize the TDA19988 lower half state instance */ /* Initialize the TDA19988 lower half state instance */
/* Initialize the TDA19988 HDMI controller driver */ /* Initialize the TDA19988 HDMI controller driver */
@ -149,7 +152,7 @@ int up_fbinitialize(int display)
#else #else
/* Lookup the video mode corresponding to the default video mode */ /* Lookup the video mode corresponding to the default video mode */
videomode = edid_mode_lookup(CONFIG_BEAGLEBONE_VIDEOMODE); videomode = videomode_lookup(CONFIG_BEAGLEBONE_VIDEOMODE);
if (videomode == NULL) if (videomode == NULL)
{ {
lcderr("ERROR: Videomode \"%s\" is not supported.\n", lcderr("ERROR: Videomode \"%s\" is not supported.\n",
@ -158,7 +161,7 @@ int up_fbinitialize(int display)
} }
#endif #endif
/* Convert the video mode to a AM335X LCD panel configuration */ /* Convert the selected video mode to a AM335X LCD panel configuration */
am335x_lcd_videomode(videomode, &panel); am335x_lcd_videomode(videomode, &panel);
@ -172,10 +175,14 @@ int up_fbinitialize(int display)
} }
#ifdef HAVE_TDA19988 #ifdef HAVE_TDA19988
/* Convert the EDID video mode to a TDA19988 video mode */ /* Initialize the HDMI controller using the selected video mode */
/* Initialize the HDMI controller using the TDA19988 video mode */
#warning Missing logic ret = tda19988_videomode(handle, videomode);
if (ret < 0)
{
lcderr("ERROR: tda19988_videomode() failed: %d\n", ret);
return ret;
}
#endif #endif
return OK; return OK;

View file

@ -172,7 +172,7 @@ static int tda19988_unlink(FAR struct inode *inode);
static int tda19988_hwinitialize(FAR struct tda1988_dev_s *priv); static int tda19988_hwinitialize(FAR struct tda1988_dev_s *priv);
static int tda19988_videomode_internal(FAR struct tda1988_dev_s *priv, static int tda19988_videomode_internal(FAR struct tda1988_dev_s *priv,
FAR const struct tda19988_videomode_s *mode); FAR const struct videomode_s *mode);
#ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS #ifndef CONFIG_DISABLE_PSEUDOFS_OPERATIONS
static void tda19988_shutdown(FAR struct tda1988_dev_s *priv); static void tda19988_shutdown(FAR struct tda1988_dev_s *priv);
#endif #endif
@ -229,7 +229,8 @@ static int tda19988_getregs(FAR const struct tda19988_i2c_s *dev,
return -1; return -1;
} }
lcdinfo("Read: %02x:%02x->%02x\n", page, regaddr, *regval); lcdinfo("Write: %02x<-%02x\n", regaddr, *regval);
lcderrdumpbuffer("Read:", regval, nregs);
return OK; return OK;
} }
@ -263,7 +264,7 @@ static int tda19988_putreg(FAR const struct tda19988_i2c_s *dev,
return ret; return ret;
} }
lcdinfo("Wrote: %02x:%02x<-%02x\n", page, regaddr, regval); lcdinfo("Wrote: %02x<-%02x\n", regaddr, regval);
return OK; return OK;
} }
@ -298,7 +299,7 @@ static int tda19988_putreg16(FAR const struct tda19988_i2c_s *dev,
return ret; return ret;
} }
lcdinfo("Wrote: %02x:%02x<-%02x\n", page, regaddr, regval); lcdinfo("Wrote: 02x<-%04x\n", regaddr, regval);
return OK; return OK;
} }
@ -729,7 +730,7 @@ static int tda19988_fetch_edid(struct tda1988_dev_s *priv)
goto done; goto done;
} }
blocks = priv->edid[EDID_TRAILER_NEXTENSIONS]; blocks = priv->edid[EDID_TRAILER_NEXTENSIONS_OFFSET];
if (blocks > 0) if (blocks > 0)
{ {
FAR uint8_t *edid; FAR uint8_t *edid;
@ -1125,15 +1126,15 @@ static int tda19988_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
* of the initialization of the driver. This is * of the initialization of the driver. This is
* equivalent to calling tda18899_videomode() within * equivalent to calling tda18899_videomode() within
* the OS. * the OS.
* Argument: A reference to a tda19988_videomode_s structure * Argument: A reference to a videomode_s structure
* instance. * instance.
* Returns: None * Returns: None
*/ */
case TDA19988_IOC_VIDEOMODE: case TDA19988_IOC_VIDEOMODE:
{ {
FAR const struct tda19988_videomode_s *mode = FAR const struct videomode_s *mode =
(FAR const struct tda19988_videomode_s *)((uintptr_t)arg); (FAR const struct videomode_s *)((uintptr_t)arg);
if (mode == NULL) if (mode == NULL)
{ {
@ -1385,7 +1386,7 @@ done:
static int static int
tda19988_videomode_internal(FAR struct tda1988_dev_s *priv, tda19988_videomode_internal(FAR struct tda1988_dev_s *priv,
FAR const struct tda19988_videomode_s *mode) FAR const struct videomode_s *mode)
{ {
uint16_t ref_pix; uint16_t ref_pix;
uint16_t ref_line; uint16_t ref_line;
@ -1462,7 +1463,7 @@ static int
(mode->vsync_end - mode->vsync_start) / 2; (mode->vsync_end - mode->vsync_start) / 2;
} }
div = 148500 / mode->dot_clock; div = 148500 / mode->dotclock;
if (div != 0) if (div != 0)
{ {
if (--div > 3) if (--div > 3)
@ -1732,7 +1733,7 @@ TDA19988_HANDLE tda19988_register(FAR const char *devpath,
****************************************************************************/ ****************************************************************************/
int tda19988_videomode(TDA19988_HANDLE handle, int tda19988_videomode(TDA19988_HANDLE handle,
FAR const struct tda19988_videomode_s *mode) FAR const struct videomode_s *mode)
{ {
FAR struct tda1988_dev_s *priv = (FAR struct tda1988_dev_s *)handle; FAR struct tda1988_dev_s *priv = (FAR struct tda1988_dev_s *)handle;
int ret; int ret;

View file

@ -46,6 +46,7 @@
#include <nuttx/irq.h> #include <nuttx/irq.h>
#include <nuttx/i2c/i2c_master.h> #include <nuttx/i2c/i2c_master.h>
#include <nuttx/lcd/lcd_ioctl.h> #include <nuttx/lcd/lcd_ioctl.h>
#include <nuttx/video/videomode.h>
#ifdef CONFIG_LCD_TDA19988 #ifdef CONFIG_LCD_TDA19988
@ -59,30 +60,13 @@
* Description: Select the video mode. This must be done as part of the * Description: Select the video mode. This must be done as part of the
* initialization of the driver. This is equivalent to * initialization of the driver. This is equivalent to
* calling tda18899_videomode() within the OS. * calling tda18899_videomode() within the OS.
* Argument: A reference to a tda19988_videomode_s structure instance. * Argument: A reference to a videomode_s structure instance.
* See struct tda19988_videomode_s below. * See struct videomode_s below.
* Returns: None * Returns: None
*/ */
#define TDA19988_IOC_VIDEOMODE _LCDIOC(TDA19988_NIOCTL_BASE + 0) #define TDA19988_IOC_VIDEOMODE _LCDIOC(TDA19988_NIOCTL_BASE + 0)
/* Values for video mode flags */
#define VID_PHSYNC 0x0001
#define VID_NHSYNC 0x0002
#define VID_PVSYNC 0x0004
#define VID_NVSYNC 0x0008
#define VID_INTERLACE 0x0010
#define VID_DBLSCAN 0x0020
#define VID_CSYNC 0x0040
#define VID_PCSYNC 0x0080
#define VID_NCSYNC 0x0100
#define VID_HSKEW 0x0200
#define VID_BCAST 0x0400
#define VID_PIXMUX 0x1000
#define VID_DBLCLK 0x2000
#define VID_CLKDIV2 0x4000
/**************************************************************************** /****************************************************************************
* Public Types * Public Types
****************************************************************************/ ****************************************************************************/
@ -91,26 +75,6 @@
typedef FAR void *TDA19988_HANDLE; typedef FAR void *TDA19988_HANDLE;
/* Structure that provides the TDA19988 video mode */
struct tda19988_videomode_s
{
int dot_clock; /* Dot clock frequency in kHz. */
int hdisplay;
int hsync_start;
int hsync_end;
int htotal;
int vdisplay;
int vsync_start;
int vsync_end;
int vtotal;
int flags; /* Video mode flags; see above. */
int hskew;
};
/* This structure defines the I2C interface. /* This structure defines the I2C interface.
* REVISIT: This could be simplified because the CEC and HDMI reside on * REVISIT: This could be simplified because the CEC and HDMI reside on
* the same I2C bus (pins CSCL and CSCA). * the same I2C bus (pins CSCL and CSCA).
@ -210,7 +174,7 @@ TDA19988_HANDLE tda19988_register(FAR const char *devpath,
****************************************************************************/ ****************************************************************************/
int tda19988_videomode(TDA19988_HANDLE handle, int tda19988_videomode(TDA19988_HANDLE handle,
FAR const struct tda19988_videomode_s *mode); FAR const struct videomode_s *mode);
/**************************************************************************** /****************************************************************************
* Name: tda19988_read_edid * Name: tda19988_read_edid

View file

@ -50,6 +50,7 @@
********************************************************************************************/ ********************************************************************************************/
#include <stdint.h> #include <stdint.h>
#include <nuttx/video/videomode.h>
/******************************************************************************************** /********************************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -479,46 +480,10 @@
* from manufacturer. However, the value is * from manufacturer. However, the value is
* later used by DDDB. */ * later used by DDDB. */
/* Video mode flags used in struct hdmi_videomode_s */
#define VID_PHSYNC (1 << 0)
#define VID_NHSYNC (1 << 1)
#define VID_PVSYNC (1 << 2)
#define VID_NVSYNC (1 << 3)
#define VID_INTERLACE (1 << 4)
#define VID_DBLSCAN (1 << 5)
#define VID_CSYNC (1 << 6)
#define VID_PCSYNC (1 << 7)
#define VID_NCSYNC (1 << 8)
#define VID_HSKEW (1 << 9)
#define VID_BCAST (1 << 10)
#define VID_PIXMUX (1 << 11)
#define VID_DBLCLK (1 << 12)
#define VID_CLKDIV2 (1 << 13)
/******************************************************************************************** /********************************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
********************************************************************************************/ ********************************************************************************************/
/* This structure represents one video mode extracted from the EDID. CAREFUL: Fields
* may not change without also modification to initializer in edid_videomode.c.
*/
struct edid_videomode_s
{
uint32_t dotclock; /* Dot clock frequency in kHz. */
uint16_t hdisplay;
uint16_t hsync_start;
uint16_t hsync_end;
uint16_t htotal;
uint16_t vdisplay;
uint16_t vsync_start;
uint16_t vsync_end;
uint16_t vtotal;
uint16_t flags; /* Video mode flags; see above. */
FAR const char *name;
};
/* These structures is a user-friendly digest of the EDID data. */ /* These structures is a user-friendly digest of the EDID data. */
struct edid_chroma_s struct edid_chroma_s
@ -570,9 +535,9 @@ struct edid_info_s
/* Parsed modes */ /* Parsed modes */
FAR struct edid_videomode_s *edid_preferred_mode; FAR struct videomode_s *edid_preferred_mode;
int edid_nmodes; int edid_nmodes;
struct edid_videomode_s edid_modes[64]; struct videomode_s edid_modes[64];
}; };
/******************************************************************************************** /********************************************************************************************
@ -598,38 +563,4 @@ struct edid_info_s
int edid_parse(FAR const uint8_t *data, FAR struct edid_info_s *edid); int edid_parse(FAR const uint8_t *data, FAR struct edid_info_s *edid);
/********************************************************************************************
* Name: edid_sort_modes
*
* Description:
* Sort video modes by refresh rate, aspect ratio, then resolution.
* Preferred mode or largest mode is first in the list and other modes
* are sorted on closest match to that mode.
*
* Note that the aspect ratio calculation treats "close" aspect ratios
* (within 12.5%) as the same for this purpose.
*
* Input Parameters:
* modes - A reference to the first entry in a list of video modes
* preferred - A pointer to the pointer to the preferred mode in the list
* nmodes - The number of modes in the list
*
* Returned Value:
* None
*
********************************************************************************************/
void edid_sort_modes(FAR struct edid_videomode_s *modes,
FAR struct edid_videomode_s **preferred, unsigned int nmodes);
/********************************************************************************************
* Name: edid_mode_lookup
*
* Description:
* Find the video mode in a look-up table
*
********************************************************************************************/
FAR const struct edid_videomode_s *edid_mode_lookup(FAR const char *name);
#endif /* __INCLUDE_NUTTX_VIDEO_EDID_H */ #endif /* __INCLUDE_NUTTX_VIDEO_EDID_H */

View file

@ -0,0 +1,135 @@
/********************************************************************************************
* include/nuttx/video/videomode.h
* EDID (Extended Display Identification Data) Format
*
* Copyright (C) 2019 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org>
*
* Some of structures in this file derive from FreeBSD which has a
* compatible 2-clause BSD license:
*
* Copyright (c) 2006 Itronix Inc. All rights reserved.
* Written by Garrett D'Amore for Itronix Inc.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
* 3. Neither the name NuttX nor the names of its contributors may be
* used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
********************************************************************************************/
#ifndef __INCLUDE_NUTTX_VIDEO_VIDEOMODE_H
#define __INCLUDE_NUTTX_VIDEO_VIDEOMODE_H
/********************************************************************************************
* Included Files
********************************************************************************************/
#include <stdint.h>
/********************************************************************************************
* Pre-processor Definitions
********************************************************************************************/
/* Video mode flags used in struct hdmi_videomode_s */
#define VID_PHSYNC (1 << 0)
#define VID_NHSYNC (1 << 1)
#define VID_PVSYNC (1 << 2)
#define VID_NVSYNC (1 << 3)
#define VID_INTERLACE (1 << 4)
#define VID_DBLSCAN (1 << 5)
#define VID_CSYNC (1 << 6)
#define VID_PCSYNC (1 << 7)
#define VID_NCSYNC (1 << 8)
#define VID_HSKEW (1 << 9)
#define VID_BCAST (1 << 10)
#define VID_PIXMUX (1 << 12)
#define VID_DBLCLK (1 << 13)
#define VID_CLKDIV2 (1 << 14)
/********************************************************************************************
* Pre-processor Definitions
********************************************************************************************/
/* This structure represents one video mode extracted from the EDID. CAREFUL: Fields
* may not change without also modification to initializer in videomode.c.
*/
struct videomode_s
{
uint32_t dotclock; /* Dot clock frequency in kHz. */
uint16_t hdisplay;
uint16_t hsync_start;
uint16_t hsync_end;
uint16_t htotal;
uint16_t vdisplay;
uint16_t vsync_start;
uint16_t vsync_end;
uint16_t vtotal;
uint16_t hskew;
uint16_t flags; /* Video mode flags; see above. */
FAR const char *name;
};
/********************************************************************************************
* Public Function Prototypes
********************************************************************************************/
/********************************************************************************************
* Name: sort_videomodes
*
* Description:
* Sort video modes by refresh rate, aspect ratio, then resolution.
* Preferred mode or largest mode is first in the list and other modes
* are sorted on closest match to that mode.
*
* Note that the aspect ratio calculation treats "close" aspect ratios
* (within 12.5%) as the same for this purpose.
*
* Input Parameters:
* modes - A reference to the first entry in a list of video modes
* preferred - A pointer to the pointer to the preferred mode in the list
* nmodes - The number of modes in the list
*
* Returned Value:
* None
*
********************************************************************************************/
void sort_videomodes(FAR struct videomode_s *modes,
FAR struct videomode_s **preferred, unsigned int nmodes);
/********************************************************************************************
* Name: videomode_lookup
*
* Description:
* Find the video mode in a look-up table
*
********************************************************************************************/
FAR const struct videomode_s *videomode_lookup(FAR const char *name);
#endif /* __INCLUDE_NUTTX_VIDEO_VIDEOMODE_H */

View file

@ -4,7 +4,7 @@
# #
config VIDEO_EDID config VIDEO_EDID
bool "EDID Support" bool "EDID / Videomode Support"
default n default n
---help--- ---help---
Enable support for managing EDID data EDID (Extended Display Enable support for managing EDID data EDID (Extended Display

View file

@ -38,7 +38,7 @@ ifeq ($(CONFIG_VIDEO_EDID),y)
# Files required for EDID support # Files required for EDID support
ASRCS += ASRCS +=
CSRCS += edid_parse.c edid_videomode.c edid_sort.c CSRCS += edid_parse.c videomode_lookup.c videomode_sort.c
# Include EDID build support # Include EDID build support

View file

@ -52,6 +52,7 @@
#include <errno.h> #include <errno.h>
#include <nuttx/video/edid.h> #include <nuttx/video/edid.h>
#include <nuttx/video/videomode.h>
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -134,9 +135,9 @@ static bool edid_valid(FAR const uint8_t *data)
****************************************************************************/ ****************************************************************************/
static bool edid_std_timing(FAR const uint8_t *stdtim, static bool edid_std_timing(FAR const uint8_t *stdtim,
FAR struct edid_videomode_s *mode) FAR struct videomode_s *mode)
{ {
FAR const struct edid_videomode_s *lookup; FAR const struct videomode_s *lookup;
char name[80]; char name[80];
unsigned x; unsigned x;
unsigned y; unsigned y;
@ -175,7 +176,7 @@ static bool edid_std_timing(FAR const uint8_t *stdtim,
/* First try to lookup the mode as a DMT timing */ /* First try to lookup the mode as a DMT timing */
snprintf(name, sizeof(name), "%dx%dx%d", x, y, f); snprintf(name, sizeof(name), "%dx%dx%d", x, y, f);
if ((lookup = edid_mode_lookup(name)) != NULL) if ((lookup = videomode_lookup(name)) != NULL)
{ {
*mode = *lookup; *mode = *lookup;
} }
@ -205,9 +206,9 @@ static bool edid_std_timing(FAR const uint8_t *stdtim,
* *
****************************************************************************/ ****************************************************************************/
static struct edid_videomode_s * static struct videomode_s *
edid_search_mode(FAR struct edid_info_s *edid, edid_search_mode(FAR struct edid_info_s *edid,
FAR const struct edid_videomode_s *mode) FAR const struct videomode_s *mode)
{ {
int refresh; int refresh;
int i; int i;
@ -238,7 +239,7 @@ static struct edid_videomode_s *
****************************************************************************/ ****************************************************************************/
static bool edid_desc_timing(FAR const uint8_t *desc, static bool edid_desc_timing(FAR const uint8_t *desc,
FAR struct edid_videomode_s *mode) FAR struct videomode_s *mode)
{ {
uint16_t hactive; uint16_t hactive;
unsigned int hblank; unsigned int hblank;
@ -322,8 +323,8 @@ static bool edid_desc_timing(FAR const uint8_t *desc,
static void edid_block(FAR struct edid_info_s *edid, FAR const uint8_t *desc) static void edid_block(FAR struct edid_info_s *edid, FAR const uint8_t *desc)
{ {
struct edid_videomode_s mode; struct videomode_s mode;
FAR struct edid_videomode_s *exist_mode; FAR struct videomode_s *exist_mode;
uint16_t pixclk; uint16_t pixclk;
int i; int i;
@ -461,7 +462,7 @@ static void edid_block(FAR struct edid_info_s *edid, FAR const uint8_t *desc)
int edid_parse(FAR const uint8_t *data, FAR struct edid_info_s *edid) int edid_parse(FAR const uint8_t *data, FAR struct edid_info_s *edid)
{ {
FAR const struct edid_videomode_s *mode; FAR const struct videomode_s *mode;
uint16_t manufacturer; uint16_t manufacturer;
uint16_t estmodes; uint16_t estmodes;
uint8_t gamma; uint8_t gamma;
@ -532,7 +533,7 @@ int edid_parse(FAR const uint8_t *data, FAR struct edid_info_s *edid)
{ {
if (estmodes & (1 << i)) if (estmodes & (1 << i))
{ {
mode = edid_mode_lookup(g_edid_modes[i]); mode = videomode_lookup(g_edid_modes[i]);
if (mode != NULL) if (mode != NULL)
{ {
edid->edid_modes[edid->edid_nmodes] = *mode; edid->edid_modes[edid->edid_nmodes] = *mode;
@ -550,8 +551,8 @@ int edid_parse(FAR const uint8_t *data, FAR struct edid_info_s *edid)
for (i = 0; i < EDID_STDTIMING_NUMBER; i++) for (i = 0; i < EDID_STDTIMING_NUMBER; i++)
{ {
struct edid_videomode_s stdmode; struct videomode_s stdmode;
FAR struct edid_videomode_s *exist_mode; FAR struct videomode_s *exist_mode;
if (edid_std_timing(data + EDID_STDTIMING_OFFSET + i * 2, &stdmode)) if (edid_std_timing(data + EDID_STDTIMING_OFFSET + i * 2, &stdmode))
{ {

View file

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* video/edid/edid_parse.c * video/edid/videomode_lookup.c
* *
* Copyright (C) 2019 Gregory Nutt. All rights reserved. * Copyright (C) 2019 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>
@ -48,7 +48,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include <nuttx/video/edid.h> #include <nuttx/video/videomode.h>
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -65,14 +65,14 @@
#define M(nm,hr,vr,clk,hs,he,ht,vs,ve,vt,f) \ #define M(nm,hr,vr,clk,hs,he,ht,vs,ve,vt,f) \
{ \ { \
clk, hr, hs, he, ht, vr, vs, ve, vt, f, nm \ clk, hr, hs, he, ht, vr, vs, ve, vt, 0, f, nm \
} }
/**************************************************************************** /****************************************************************************
* Private Data * Private Data
****************************************************************************/ ****************************************************************************/
static const struct edid_videomode_s g_videomodes[] = static const struct videomode_s g_videomodes[] =
{ {
M("640x350x85", 640, 350, 31500, 672, 736, 832, 382, 385, 445, HP|VN), M("640x350x85", 640, 350, 31500, 672, 736, 832, 382, 385, 445, HP|VN),
M("640x400x85", 640, 400, 31500, 672, 736, 832, 401, 404, 445, HN|VP), M("640x400x85", 640, 400, 31500, 672, 736, 832, 401, 404, 445, HN|VP),
@ -185,7 +185,7 @@ static const int g_nvideomodes = 46;
* *
****************************************************************************/ ****************************************************************************/
FAR const struct edid_videomode_s *edid_mode_lookup(FAR const char *name) FAR const struct videomode_s *edid_mode_lookup(FAR const char *name)
{ {
int i; int i;

View file

@ -1,5 +1,5 @@
/**************************************************************************** /****************************************************************************
* video/edid/edid_sort.c * video/edid/videomode_sort.c
* *
* Copyright (C) 2019 Gregory Nutt. All rights reserved. * Copyright (C) 2019 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <gnutt@nuttx.org> * Author: Gregory Nutt <gnutt@nuttx.org>
@ -43,7 +43,7 @@
#include <sys/types.h> #include <sys/types.h>
#include <string.h> #include <string.h>
#include <nuttx/video/edid.h> #include <nuttx/video/videomode.h>
/**************************************************************************** /****************************************************************************
* Pre-processor Definitions * Pre-processor Definitions
@ -55,10 +55,10 @@
* Private Functions * Private Functions
****************************************************************************/ ****************************************************************************/
static inline void swap_modes(FAR struct edid_videomode_s *left, static inline void videomode_swap(FAR struct videomode_s *left,
FAR struct edid_videomode_s *right) FAR struct videomode_s *right)
{ {
struct edid_videomode_s temp; struct videomode_s temp;
temp = *left; temp = *left;
*left = *right; *left = *right;
@ -81,8 +81,7 @@ static inline int _abs(int a)
* Public Functions * Public Functions
****************************************************************************/ ****************************************************************************/
/**************************************************************************** /* Name: sort_videomodes
* Name: edid_sort_modes
* *
* Description: * Description:
* Sort video modes by refresh rate, aspect ratio, then resolution. * Sort video modes by refresh rate, aspect ratio, then resolution.
@ -100,12 +99,12 @@ static inline int _abs(int a)
* Returned Value: * Returned Value:
* None * None
* *
****************************************************************************/ ********************************************************************************************/
void edid_sort_modes(FAR struct edid_videomode_s *modes, void sort_videomodes(FAR struct videomode_s *modes,
FAR struct edid_videomode_s **preferred, unsigned int nmodes) FAR struct videomode_s **preferred, unsigned int nmodes)
{ {
FAR struct edid_videomode_s *tmpmode = NULL; FAR struct videomode_s *tmpmode = NULL;
int aspect; int aspect;
int refresh; int refresh;
int hbest; int hbest;
@ -131,7 +130,7 @@ void edid_sort_modes(FAR struct edid_videomode_s *modes,
(*preferred)->htotal), (*preferred)->vtotal); (*preferred)->htotal), (*preferred)->vtotal);
if (*preferred != modes) if (*preferred != modes)
{ {
swap_modes(*preferred, modes); videomode_swap(*preferred, modes);
*preferred = modes; *preferred = modes;
} }
} }
@ -165,7 +164,7 @@ void edid_sort_modes(FAR struct edid_videomode_s *modes,
tmpmode->htotal), tmpmode->vtotal); tmpmode->htotal), tmpmode->vtotal);
if (tmpmode != modes) if (tmpmode != modes)
{ {
swap_modes(tmpmode, modes); videomode_swap(tmpmode, modes);
} }
} }
@ -220,7 +219,7 @@ void edid_sort_modes(FAR struct edid_videomode_s *modes,
if (tmpmode != &modes[j]) if (tmpmode != &modes[j])
{ {
swap_modes(tmpmode, &modes[j]); videomode_swap(tmpmode, &modes[j]);
} }
} }
} }