summaryrefslogtreecommitdiff
path: root/src/panel/pnl_init.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/panel/pnl_init.c')
-rw-r--r--src/panel/pnl_init.c531
1 files changed, 531 insertions, 0 deletions
diff --git a/src/panel/pnl_init.c b/src/panel/pnl_init.c
new file mode 100644
index 0000000..39b932e
--- /dev/null
+++ b/src/panel/pnl_init.c
@@ -0,0 +1,531 @@
+/* Copyright (c) 2005 Advanced Micro Devices, Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ *
+ * Neither the name of the Advanced Micro Devices, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from this
+ * software without specific prior written permission.
+ * */
+
+/*
+ * File Contents: This file contains the Geode frame buffer panel
+ * intialization functions.
+ *
+ * SubModule: Geode FlatPanel library
+ * */
+
+#include "panel.h"
+#include "gfx_regs.h"
+#include "gfx_type.h"
+
+/* defaults
+ * Panel: Enabled
+ * Platform: Centaurus
+ * 92xx Chip: 9211 Rev. A
+ * PanelType: DSTN
+ * XResxYRes: 800x600
+ * Depth: 16
+ * Mono_Color: Color
+ */
+static Pnl_PanelParams sPanelParam = {
+ 0, 1, CENTAURUS_PLATFORM, PNL_9211_A,
+ {PNL_DSTN, 800, 600, 16, PNL_COLOR_PANEL}
+};
+
+#if PLATFORM_DRACO
+#include "drac9210.c"
+#endif
+
+#if PLATFORM_CENTAURUS
+#include "cen9211.c"
+#endif
+
+#if PLATFORM_DORADO
+#include "dora9211.c"
+#endif
+
+#if PLATFORM_GX2BASED
+#include "gx2_9211.c"
+#endif
+#include "platform.c"
+
+/*
+ * return -1 - UnKnown
+ * 0 - Draco has 9210
+ * 1 - Centaurus has 9211 Rev. A
+ * 2 - Dorado has 9211 Rev. C
+ */
+
+/*-----------------------------------------------------------------
+ * Pnl_SetPlatform
+ *
+ * Description: This function sets the panel with hardware platform.
+ *
+ * parameters:
+ * platform: It specify the platform.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_SetPlatform(int platform)
+{
+ /* To Be Implemented */
+ sPanelParam.Platform = platform;
+
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_GetPlatform
+ *
+ * Description: This function returns the panel platform.
+ *
+ * parameters: none.
+ *
+ * return: On success it returns the panel platform.
+ *-----------------------------------------------------------------*/
+int
+Pnl_GetPlatform(void)
+{
+ sPanelParam.Platform = Detect_Platform();
+
+ return sPanelParam.Platform;
+
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_IsPanelPresent
+ *
+ * Description: This function specifies whether the panel is prsent
+ * or not.
+ *
+ * parameters: none.
+ *
+ * return: On success it returns an integer panel present value.
+ *-----------------------------------------------------------------*/
+int
+Pnl_IsPanelPresent(void)
+{
+ /* To Be Implemented */
+ return sPanelParam.PanelPresent;
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_SetPanelPresent
+ *
+ * Description: This function sets the panel_present parameter.
+ *
+ * parameters:
+ * present: It specifies the panel present value.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_SetPanelPresent(int present)
+{
+ /* To Be Implemented */
+ sPanelParam.PanelPresent = present;
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_SetPanelParam
+ *
+ * Description: This function sets the panel parameters
+ *
+ * parameters:
+ * pParam: It specifies the elements of the panel parameter
+ * structure.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_SetPanelParam(Pnl_PanelParams * pParam)
+{
+ if (pParam->Flags & PNL_PANELPRESENT) {
+ Pnl_SetPanelPresent(pParam->PanelPresent);
+ }
+ if (pParam->Flags & PNL_PLATFORM) {
+ Pnl_SetPlatform(pParam->Platform);
+ }
+ if (pParam->Flags & PNL_PANELCHIP) {
+ Pnl_SetPanelChip(pParam->PanelChip);
+ }
+ if (pParam->Flags & PNL_PANELSTAT) {
+ sPanelParam.PanelStat.XRes = pParam->PanelStat.XRes;
+ sPanelParam.PanelStat.YRes = pParam->PanelStat.YRes;
+ sPanelParam.PanelStat.Depth = pParam->PanelStat.Depth;
+ sPanelParam.PanelStat.MonoColor = pParam->PanelStat.MonoColor;
+ sPanelParam.PanelStat.Type = pParam->PanelStat.Type;
+ }
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_PowerUp
+ *
+ * Description: This function sets the power based on the
+ * hardware platforms dorado or centaraus.
+ *
+ * parameters: none.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_PowerUp(void)
+{
+ int Platform;
+ unsigned long dcfg, hw_video;
+
+ Platform = Pnl_GetPlatform();
+
+#if PLATFORM_CENTAURUS
+ if (Platform == CENTAURUS_PLATFORM) {
+ Centaurus_Power_Up();
+ return;
+ }
+#endif
+
+#if PLATFORM_DORADO
+ if (Platform == DORADO_PLATFORM) {
+ Dorado_Power_Up();
+ return;
+ }
+#endif
+
+#if PLATFORM_GX2BASED
+ if (Platform == REDCLOUD_PLATFORM) {
+ }
+#endif
+
+ hw_video = gfx_detect_video();
+
+ if (hw_video == GFX_VID_CS5530) {
+ /* READ DISPLAY CONFIG FROM CX5530 */
+ dcfg = READ_VID32(CS5530_DISPLAY_CONFIG);
+
+ /* SET RELEVANT FIELDS */
+ dcfg |= (CS5530_DCFG_FP_PWR_EN | CS5530_DCFG_FP_DATA_EN);
+ /* Enable the flatpanel power and data */
+ WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg);
+ } else if (hw_video == GFX_VID_SC1200) {
+ /* READ DISPLAY CONFIG FROM SC1200 */
+ dcfg = READ_VID32(SC1200_DISPLAY_CONFIG);
+
+ /* SET RELEVANT FIELDS */
+ dcfg |= (SC1200_DCFG_FP_PWR_EN | SC1200_DCFG_FP_DATA_EN);
+ /* Enable the flatpanel power and data */
+ WRITE_VID32(SC1200_DISPLAY_CONFIG, dcfg);
+ } else if (hw_video == GFX_VID_REDCLOUD) {
+ /* READ DISPLAY CONFIG FROM REDCLOUD */
+ dcfg = READ_VID32(RCDF_DISPLAY_CONFIG);
+
+ /* SET RELEVANT FIELDS */
+ dcfg |= (RCDF_DCFG_FP_PWR_EN | RCDF_DCFG_FP_DATA_EN);
+ /* Enable the flatpanel power and data */
+ WRITE_VID32(RCDF_DISPLAY_CONFIG, dcfg);
+ }
+
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_PowerDown
+ *
+ * Description: This function make power down based on the
+ * hardware platforms dorado or centaraus.
+ *
+ * parameters: none.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_PowerDown(void)
+{
+ int Platform;
+ unsigned long dcfg, hw_video;
+
+ Platform = Pnl_GetPlatform();
+
+#if PLATFORM_CENTAURUS
+ if (Platform == CENTAURUS_PLATFORM) {
+ Centaurus_Power_Down();
+ return;
+ }
+#endif
+#if PLATFORM_DORADO
+ if (Platform == DORADO_PLATFORM) {
+ Dorado_Power_Down();
+ return;
+ }
+#endif
+
+#if PLATFORM_GX2BASED
+ if (Platform == REDCLOUD_PLATFORM) {
+ }
+#endif
+
+ hw_video = gfx_detect_video();
+
+ if (hw_video == GFX_VID_CS5530) {
+ /* READ DISPLAY CONFIG FROM CX5530 */
+ dcfg = READ_VID32(CS5530_DISPLAY_CONFIG);
+
+ /* CLEAR RELEVANT FIELDS */
+ dcfg &= ~(CS5530_DCFG_FP_PWR_EN | CS5530_DCFG_FP_DATA_EN);
+ /* Disable the flatpanel power and data */
+ WRITE_VID32(CS5530_DISPLAY_CONFIG, dcfg);
+ } else if (hw_video == GFX_VID_SC1200) {
+ /* READ DISPLAY CONFIG FROM SC1200 */
+ dcfg = READ_VID32(SC1200_DISPLAY_CONFIG);
+
+ /* CLEAR RELEVANT FIELDS */
+ dcfg &= ~(SC1200_DCFG_FP_PWR_EN | SC1200_DCFG_FP_DATA_EN);
+ /* Disable the flatpanel power and data */
+ WRITE_VID32(SC1200_DISPLAY_CONFIG, dcfg);
+ } else if (hw_video == GFX_VID_REDCLOUD) {
+ /* READ DISPLAY CONFIG FROM REDCLOUD */
+ dcfg = READ_VID32(RCDF_DISPLAY_CONFIG);
+
+ /* CLEAR RELEVANT FIELDS */
+ dcfg &= ~(RCDF_DCFG_FP_PWR_EN | RCDF_DCFG_FP_DATA_EN);
+ /* Disable the flatpanel power and data */
+ WRITE_VID32(RCDF_DISPLAY_CONFIG, dcfg);
+ }
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_SavePanelState
+ *
+ * Description: This function saves the panel state based on the
+ * hardware platforms dorado or centaraus.
+ *
+ * parameters: none.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_SavePanelState(void)
+{
+ int Platform;
+
+ Platform = Pnl_GetPlatform();
+
+#if PLATFORM_CENTAURUS
+ if (Platform == CENTAURUS_PLATFORM) {
+ Centaurus_Save_Panel_State();
+ return;
+ }
+#endif
+
+#if PLATFORM_DORADO
+ if (Platform == DORADO_PLATFORM) {
+ Dorado_Save_Panel_State();
+ return;
+ }
+#endif
+
+#if PLATFORM_GX2BASED
+ if (Platform == REDCLOUD_PLATFORM) {
+ }
+#endif
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_RestorePanelState
+ *
+ * Description: This function restore the panel state based on the
+ * hardware platforms dorado or centaraus.
+ *
+ * parameters: none.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_RestorePanelState(void)
+{
+ int Platform;
+
+ Platform = Pnl_GetPlatform();
+#if PLATFORM_CENTAURUS
+ if (Platform == CENTAURUS_PLATFORM) {
+ Centaurus_Restore_Panel_State();
+ return;
+ }
+#endif
+
+#if PLATFORM_DORADO
+ if (Platform == DORADO_PLATFORM) {
+ Dorado_Restore_Panel_State();
+ return;
+ }
+#endif
+
+#if PLATFORM_GX2BASED
+ if (Platform == REDCLOUD_PLATFORM) {
+ }
+#endif
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_GetPanelParam
+ *
+ * Description: This function gets the panel parameters from the
+ * hardware platforms dorado or centaraus.
+ *
+ * parameters:
+ * pParam: It specifies the elements of the panel parameter
+ * structure.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+void
+Pnl_GetPanelParam(Pnl_PanelParams * pParam)
+{
+ if (pParam->Flags & PNL_PANELPRESENT) {
+ pParam->PanelPresent = Pnl_IsPanelPresent();
+ }
+ if (pParam->Flags & PNL_PLATFORM) {
+ pParam->Platform = Pnl_GetPlatform();
+ }
+ if ((pParam->Flags & PNL_PANELCHIP) || (pParam->Flags & PNL_PANELSTAT)) {
+#if PLATFORM_CENTAURUS
+ if (pParam->Platform == CENTAURUS_PLATFORM) {
+ Centaurus_Get_9211_Details(pParam->Flags, pParam);
+ return;
+ }
+#endif
+
+#if PLATFORM_DORADO
+ if (pParam->Platform == DORADO_PLATFORM) {
+ Dorado_Get_9211_Details(pParam->Flags, pParam);
+ return;
+ }
+#endif
+
+#if PLATFORM_GX2BASED
+ if (pParam->Platform == REDCLOUD_PLATFORM) {
+ }
+#endif
+
+ /* if unknown platform put unknown */
+ if (pParam->Flags & PNL_PANELCHIP)
+ pParam->PanelChip = PNL_UNKNOWN_CHIP;
+
+ if (pParam->Flags & PNL_PANELSTAT) {
+ pParam->PanelStat.XRes = 0;
+ pParam->PanelStat.YRes = 0;
+ pParam->PanelStat.Depth = 0;
+ pParam->PanelStat.MonoColor = PNL_UNKNOWN_COLOR;
+ pParam->PanelStat.Type = PNL_UNKNOWN_PANEL;
+ }
+ }
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_SetPanelChip
+ *
+ * Description: This function sets the panelchip parameter of panel
+ * structure.
+ *
+ * parameters:
+ * panelChip: It specifies the panelChip value.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+
+void
+Pnl_SetPanelChip(int panelChip)
+{
+ /* To Be Implemented */
+ sPanelParam.PanelChip = panelChip;
+
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_GetPanelChip
+ *
+ * Description: This function gets the panelchip parameter of panel
+ * structure.
+ *
+ * parameters: none
+ *
+ * return: On success it returns the panelchip.
+ *-----------------------------------------------------------------*/
+int
+Pnl_GetPanelChip(void)
+{
+ /* To Be Implemented */
+ return sPanelParam.PanelChip;
+}
+
+/*-----------------------------------------------------------------
+ * Pnl_InitPanel
+ *
+ * Description: This function initializes the panel with
+ * hardware platforms dorado or centaraus.
+ *
+ * parameters:
+ * pParam: It specifies the elements of the panel parameter
+ * structure.
+ *
+ * return: none.
+ *-----------------------------------------------------------------*/
+int
+Pnl_InitPanel(Pnl_PanelParams * pParam)
+{
+ Pnl_PanelParams *pPtr;
+
+ if (pParam == 0x0) /* NULL use the static table */
+ pPtr = &sPanelParam;
+ else
+ pPtr = pParam;
+
+ if (!pPtr->PanelPresent) {
+ return -1; /* error */
+ } else {
+ if ((pPtr->PanelChip < 0) || (pPtr->Platform < 0))
+ return -1; /* error */
+
+#if PLATFORM_DRACO
+ /* check we are init. the right one */
+ if ((pPtr->Platform == DRACO_PLATFORM)
+ && (pPtr->PanelChip == PNL_9210)) {
+ Draco9210Init(&(pPtr->PanelStat));
+ }
+#endif
+
+#if PLATFORM_CENTAURUS
+ /* check we are init. the right one */
+ if (pPtr->Platform == CENTAURUS_PLATFORM) {
+ Centaurus_9211init(&(pPtr->PanelStat));
+ }
+#endif
+
+#if PLATFORM_DORADO
+ /* check we are init. the right one */
+ if ((pPtr->Platform == DORADO_PLATFORM) &&
+ (pPtr->PanelChip == PNL_9211_C)) {
+ Dorado9211Init(&(pPtr->PanelStat));
+ }
+#endif
+#if PLATFORM_GX2BASED
+ if (pPtr->Platform == REDCLOUD_PLATFORM) {
+ Redcloud_9211init(&(pPtr->PanelStat));
+ }
+#endif
+ } /* else end */
+ return 1;
+}