123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409 |
- /*
- * Copyright 2019-2021 NXP
- * All rights reserved.
- *
- *
- * SPDX-License-Identifier: BSD-3-Clause
- */
- #include "fsl_display.h"
- #include "fsl_rm68200.h"
- /*******************************************************************************
- * Definitions
- ******************************************************************************/
- #define RM68200_DelayMs VIDEO_DelayMs
- /*******************************************************************************
- * Variables
- ******************************************************************************/
- uint8_t RM68200_DDB_START[5] = {0x00, 0x00, 0x00, 0x00, 0xff};
- static const uint8_t lcmInitPage0Setting[][2] = {
- {0xFE, 0x01}, {0x24, 0xC0}, {0x25, 0x53}, {0x26, 0x00}, {0x2B, 0xE5}, {0x27, 0x0A},
- {0x29, 0x0A}, {0x16, 0x52}, {0x2F, 0x53}, {0x34, 0x5A}, {0x1B, 0x00}, {0x12, 0x0A},
- {0x1A, 0x06}, {0x46, 0x56}, {0x52, 0xA0}, {0x53, 0x00}, {0x54, 0xA0}, {0x55, 0x00},
- };
- static const uint8_t lcmInitSetting[][2] = {
- {0xFE, 0x03},
- {0x00, 0x05},
- {0x02, 0x0B},
- {0x03, 0x0F},
- {0x04, 0x7D},
- {0x05, 0x00},
- {0x06, 0x50},
- {0x07, 0x05},
- {0x08, 0x16},
- {0x09, 0x0D},
- {0x0A, 0x11},
- {0x0B, 0x7D},
- {0x0C, 0x00},
- {0x0D, 0x50},
- {0x0E, 0x07},
- {0x0F, 0x08},
- {0x10, 0x01},
- {0x11, 0x02},
- {0x12, 0x00},
- {0x13, 0x7D},
- {0x14, 0x00},
- {0x15, 0x85},
- {0x16, 0x08},
- {0x17, 0x03},
- {0x18, 0x04},
- {0x19, 0x05},
- {0x1A, 0x06},
- {0x1B, 0x00},
- {0x1C, 0x7D},
- {0x1D, 0x00},
- {0x1E, 0x85},
- {0x1F, 0x08},
- {0x20, 0x00},
- {0x21, 0x00},
- {0x22, 0x00},
- {0x23, 0x00},
- {0x24, 0x00},
- {0x25, 0x00},
- {0x26, 0x00},
- {0x27, 0x00},
- {0x28, 0x00},
- {0x29, 0x00},
- {0x2A, 0x07},
- {0x2B, 0x08},
- {0x2D, 0x01},
- {0x2F, 0x02},
- {0x30, 0x00},
- {0x31, 0x40},
- {0x32, 0x05},
- {0x33, 0x08},
- {0x34, 0x54},
- {0x35, 0x7D},
- {0x36, 0x00},
- {0x37, 0x03},
- {0x38, 0x04},
- {0x39, 0x05},
- {0x3A, 0x06},
- {0x3B, 0x00},
- {0x3D, 0x40},
- {0x3F, 0x05},
- {0x40, 0x08},
- {0x41, 0x54},
- {0x42, 0x7D},
- {0x43, 0x00},
- {0x44, 0x00},
- {0x45, 0x00},
- {0x46, 0x00},
- {0x47, 0x00},
- {0x48, 0x00},
- {0x49, 0x00},
- {0x4A, 0x00},
- {0x4B, 0x00},
- {0x4C, 0x00},
- {0x4D, 0x00},
- {0x4E, 0x00},
- {0x4F, 0x00},
- {0x50, 0x00},
- {0x51, 0x00},
- {0x52, 0x00},
- {0x53, 0x00},
- {0x54, 0x00},
- {0x55, 0x00},
- {0x56, 0x00},
- {0x58, 0x00},
- {0x59, 0x00},
- {0x5A, 0x00},
- {0x5B, 0x00},
- {0x5C, 0x00},
- {0x5D, 0x00},
- {0x5E, 0x00},
- {0x5F, 0x00},
- {0x60, 0x00},
- {0x61, 0x00},
- {0x62, 0x00},
- {0x63, 0x00},
- {0x64, 0x00},
- {0x65, 0x00},
- {0x66, 0x00},
- {0x67, 0x00},
- {0x68, 0x00},
- {0x69, 0x00},
- {0x6A, 0x00},
- {0x6B, 0x00},
- {0x6C, 0x00},
- {0x6D, 0x00},
- {0x6E, 0x00},
- {0x6F, 0x00},
- {0x70, 0x00},
- {0x71, 0x00},
- {0x72, 0x20},
- {0x73, 0x00},
- {0x74, 0x08},
- {0x75, 0x08},
- {0x76, 0x08},
- {0x77, 0x08},
- {0x78, 0x08},
- {0x79, 0x08},
- {0x7A, 0x00},
- {0x7B, 0x00},
- {0x7C, 0x00},
- {0x7D, 0x00},
- {0x7E, 0xBF},
- {0x7F, 0x02},
- {0x80, 0x06},
- {0x81, 0x14},
- {0x82, 0x10},
- {0x83, 0x16},
- {0x84, 0x12},
- {0x85, 0x08},
- {0x86, 0x3F},
- {0x87, 0x3F},
- {0x88, 0x3F},
- {0x89, 0x3F},
- {0x8A, 0x3F},
- {0x8B, 0x0C},
- {0x8C, 0x0A},
- {0x8D, 0x0E},
- {0x8E, 0x3F},
- {0x8F, 0x3F},
- {0x90, 0x00},
- {0x91, 0x04},
- {0x92, 0x3F},
- {0x93, 0x3F},
- {0x94, 0x3F},
- {0x95, 0x3F},
- {0x96, 0x05},
- {0x97, 0x01},
- {0x98, 0x3F},
- {0x99, 0x3F},
- {0x9A, 0x0F},
- {0x9B, 0x0B},
- {0x9C, 0x0D},
- {0x9D, 0x3F},
- {0x9E, 0x3F},
- {0x9F, 0x3F},
- {0xA0, 0x3F},
- {0xA2, 0x3F},
- {0xA3, 0x09},
- {0xA4, 0x13},
- {0xA5, 0x17},
- {0xA6, 0x11},
- {0xA7, 0x15},
- {0xA9, 0x07},
- {0xAA, 0x03},
- {0xAB, 0x3F},
- {0xAC, 0x3F},
- {0xAD, 0x05},
- {0xAE, 0x01},
- {0xAF, 0x17},
- {0xB0, 0x13},
- {0xB1, 0x15},
- {0xB2, 0x11},
- {0xB3, 0x0F},
- {0xB4, 0x3F},
- {0xB5, 0x3F},
- {0xB6, 0x3F},
- {0xB7, 0x3F},
- {0xB8, 0x3F},
- {0xB9, 0x0B},
- {0xBA, 0x0D},
- {0xBB, 0x09},
- {0xBC, 0x3F},
- {0xBD, 0x3F},
- {0xBE, 0x07},
- {0xBF, 0x03},
- {0xC0, 0x3F},
- {0xC1, 0x3F},
- {0xC2, 0x3F},
- {0xC3, 0x3F},
- {0xC4, 0x02},
- {0xC5, 0x06},
- {0xC6, 0x3F},
- {0xC7, 0x3F},
- {0xC8, 0x08},
- {0xC9, 0x0C},
- {0xCA, 0x0A},
- {0xCB, 0x3F},
- {0xCC, 0x3F},
- {0xCD, 0x3F},
- {0xCE, 0x3F},
- {0xCF, 0x3F},
- {0xD0, 0x0E},
- {0xD1, 0x10},
- {0xD2, 0x14},
- {0xD3, 0x12},
- {0xD4, 0x16},
- {0xD5, 0x00},
- {0xD6, 0x04},
- {0xD7, 0x3F},
- {0xDC, 0x02},
- {0xDE, 0x12},
- {0xFE, 0x0E},
- {0x01, 0x75},
- /* Gamma Settings */
- {0xFE, 0x04},
- {0x60, 0x00},
- {0x61, 0x0C},
- {0x62, 0x12},
- {0x63, 0x0E},
- {0x64, 0x06},
- {0x65, 0x12},
- {0x66, 0x0E},
- {0x67, 0x0B},
- {0x68, 0x15},
- {0x69, 0x0B},
- {0x6A, 0x10},
- {0x6B, 0x07},
- {0x6C, 0x0F},
- {0x6D, 0x12},
- {0x6E, 0x0C},
- {0x6F, 0x00},
- {0x70, 0x00},
- {0x71, 0x0C},
- {0x72, 0x12},
- {0x73, 0x0E},
- {0x74, 0x06},
- {0x75, 0x12},
- {0x76, 0x0E},
- {0x77, 0x0B},
- {0x78, 0x15},
- {0x79, 0x0B},
- {0x7A, 0x10},
- {0x7B, 0x07},
- {0x7C, 0x0F},
- {0x7D, 0x12},
- {0x7E, 0x0C},
- {0x7F, 0x00},
- /* Page 0. */
- {0xFE, 0x00},
- {0x11, 0x00},
- };
- const display_operations_t rm68200_ops = {
- .init = RM68200_Init,
- .deinit = RM68200_Deinit,
- .start = RM68200_Start,
- .stop = RM68200_Stop,
- };
- /*******************************************************************************
- * Code
- ******************************************************************************/
- status_t RM68200_Init(display_handle_t *handle, const display_config_t *config)
- {
- uint32_t i;
- uint8_t param[2];
- status_t status = kStatus_Success;
- const rm68200_resource_t *resource = (const rm68200_resource_t *)(handle->resource);
- mipi_dsi_device_t *dsiDevice = resource->dsiDevice;
- /* Only support 720 * 1280 */
- if (config->resolution != FSL_VIDEO_RESOLUTION(720, 1280))
- {
- return kStatus_InvalidArgument;
- }
- /* Power on. */
- resource->pullPowerPin(true);
- RM68200_DelayMs(1);
- /* Perform reset. */
- resource->pullResetPin(false);
- RM68200_DelayMs(1);
- resource->pullResetPin(true);
- RM68200_DelayMs(5);
- /* Set the LCM page0 init settings. */
- for (i = 0; i < ARRAY_SIZE(lcmInitPage0Setting); i++)
- {
- status = MIPI_DSI_GenericWrite(dsiDevice, lcmInitPage0Setting[i], 2);
- if (kStatus_Success != status)
- {
- return status;
- }
- }
- /* Data lane number selection. */
- param[0] = 0x5FU;
- param[1] = 0x10U | (config->dsiLanes - 1U);
- status = MIPI_DSI_GenericWrite(dsiDevice, param, 2);
- if (kStatus_Success != status)
- {
- return status;
- }
- /* Set the LCM init settings. */
- for (i = 0; i < ARRAY_SIZE(lcmInitSetting); i++)
- {
- status = MIPI_DSI_GenericWrite(dsiDevice, lcmInitSetting[i], 2);
- if (kStatus_Success != status)
- {
- return status;
- }
- }
- RM68200_DelayMs(200);
- param[0] = 0x29;
- param[1] = 0x00;
- status = MIPI_DSI_GenericWrite(dsiDevice, param, 2);
- if (kStatus_Success != status)
- {
- return status;
- }
- RM68200_DelayMs(100);
- param[0] = 0x2c;
- status = MIPI_DSI_GenericWrite(dsiDevice, param, 1);
- if (kStatus_Success != status)
- {
- return status;
- }
- param[0] = 0x35;
- param[1] = 0x00;
- status = MIPI_DSI_GenericWrite(dsiDevice, param, 2);
- if (kStatus_Success != status)
- {
- return status;
- }
- RM68200_DelayMs(200);
- return kStatus_Success;
- }
- status_t RM68200_Deinit(display_handle_t *handle)
- {
- const rm68200_resource_t *resource = (const rm68200_resource_t *)(handle->resource);
- mipi_dsi_device_t *dsiDevice = resource->dsiDevice;
- (void)MIPI_DSI_DCS_EnterSleepMode(dsiDevice, true);
- resource->pullResetPin(false);
- resource->pullPowerPin(false);
- return kStatus_Success;
- }
- status_t RM68200_Start(display_handle_t *handle)
- {
- const rm68200_resource_t *resource = (const rm68200_resource_t *)(handle->resource);
- mipi_dsi_device_t *dsiDevice = resource->dsiDevice;
- return MIPI_DSI_DCS_SetDisplayOn(dsiDevice, true);
- }
- status_t RM68200_Stop(display_handle_t *handle)
- {
- const rm68200_resource_t *resource = (const rm68200_resource_t *)(handle->resource);
- mipi_dsi_device_t *dsiDevice = resource->dsiDevice;
- return MIPI_DSI_DCS_SetDisplayOn(dsiDevice, false);
- }
|