Files
luban-lite-t3e-pro/bsp/artinchip/drv/display/panel/panel_srgb_hx8238.c

206 lines
4.2 KiB
C
Raw Normal View History

2023-11-09 20:19:51 +08:00
/*
2024-09-03 11:16:08 +08:00
* Copyright (c) 2023-2024, ArtInChip Technology Co., Ltd
2023-11-09 20:19:51 +08:00
*
* SPDX-License-Identifier: Apache-2.0
*/
#include "panel_com.h"
#define SDA_GPIO "PD.5"
#define SCL_GPIO "PD.4"
#define CS_GPIO "PD.0"
#define RESET "PE.18"
static struct gpio_desc sda;
static struct gpio_desc scl;
static struct gpio_desc cs;
static struct gpio_desc reset;
2024-01-27 08:47:24 +08:00
static void hx8238_send_cmd(unsigned char cmd)
2023-11-09 20:19:51 +08:00
{
int i;
for (i = 0; i < 8; i++) {
panel_gpio_set_value(&scl, 0);
if (cmd & 0x80)
panel_gpio_set_value(&sda, 1);
else
panel_gpio_set_value(&sda, 0);
aic_delay_us(5);
panel_gpio_set_value(&scl, 1);
aic_delay_us(5);
cmd <<= 1;
}
}
2024-01-27 08:47:24 +08:00
static void hx8238_send_data(unsigned int data)
2023-11-09 20:19:51 +08:00
{
int i;
for (i = 0; i < 16; i++) {
panel_gpio_set_value(&scl, 0);
if (data & 0x8000)
panel_gpio_set_value(&sda, 1);
else
panel_gpio_set_value(&sda, 0);
aic_delay_us(5);
panel_gpio_set_value(&scl, 1);
aic_delay_us(5);
data <<= 1;
}
}
2024-01-27 08:47:24 +08:00
static void hx8238_write(unsigned char code,unsigned int data)
2023-11-09 20:19:51 +08:00
{
panel_gpio_set_value(&sda, 1);
panel_gpio_set_value(&scl, 1);
panel_gpio_set_value(&cs, 1);
aic_delay_us(50);
panel_gpio_set_value(&cs, 0);
aic_delay_us(50);
2024-01-27 08:47:24 +08:00
hx8238_send_cmd(code);
hx8238_send_data(data);
2023-11-09 20:19:51 +08:00
panel_gpio_set_value(&scl, 0);
aic_delay_us(5);
panel_gpio_set_value(&sda, 1);
panel_gpio_set_value(&scl, 1);
panel_gpio_set_value(&cs, 1);
}
2024-01-27 08:47:24 +08:00
void hx8238_init(void)
2023-11-09 20:19:51 +08:00
{
panel_get_gpio(&sda, SDA_GPIO);
panel_get_gpio(&scl, SCL_GPIO);
panel_get_gpio(&cs, CS_GPIO);
panel_get_gpio(&reset, RESET);
panel_gpio_set_value(&reset, 0);
aic_delay_us(20);
panel_gpio_set_value(&reset, 1);
panel_gpio_set_value(&sda, 1);
panel_gpio_set_value(&scl, 1);
panel_gpio_set_value(&cs, 1);
aic_delay_us(10);
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0001);
hx8238_write(0x72, 0x6300);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0002);
hx8238_write(0x72, 0x0200);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0003);
hx8238_write(0x72, 0x6364);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0004);
hx8238_write(0x72, 0x0489);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0005);
hx8238_write(0x72, 0xBCC4);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x000A);
hx8238_write(0x72, 0x4008);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x000B);
hx8238_write(0x72, 0xD400);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x000D);
hx8238_write(0x72, 0x3229);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x000E);
hx8238_write(0x72, 0x3200);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x000F);
hx8238_write(0x72, 0x0000);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0016);
hx8238_write(0x72, 0x9F80);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0017);
hx8238_write(0x72, 0x2212);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x001E);
hx8238_write(0x72, 0x00D2);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0030);
hx8238_write(0x72, 0x0000);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0031);
hx8238_write(0x72, 0x0407);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0032);
hx8238_write(0x72, 0x0202);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0033);
hx8238_write(0x72, 0x0000);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0034);
hx8238_write(0x72, 0x0505);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0035);
hx8238_write(0x72, 0x0003);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0036);
hx8238_write(0x72, 0x0707);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x0037);
hx8238_write(0x72, 0x0000);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x003A);
hx8238_write(0x72, 0x0904);
2023-11-09 20:19:51 +08:00
2024-01-27 08:47:24 +08:00
hx8238_write(0x70, 0x003B);
hx8238_write(0x72, 0x0904);
2023-11-09 20:19:51 +08:00
}
static int panel_prepare(void)
{
2024-01-27 08:47:24 +08:00
hx8238_init();
2023-11-09 20:19:51 +08:00
return panel_default_prepare();
}
static struct aic_panel_funcs panel_funcs = {
.disable = panel_default_disable,
.unprepare = panel_default_unprepare,
.prepare = panel_prepare,
.enable = panel_default_enable,
.register_callback = panel_register_callback,
};
static struct display_timing hx8238_timing = {
2024-01-27 08:47:24 +08:00
.pixelclock = 8000000,
2023-11-09 20:19:51 +08:00
.hactive = 320,
.hfront_porch = 20,
.hback_porch = 12,
.hsync_len = 11,
.vactive = 240,
.vfront_porch = 8,
.vback_porch = 6,
.vsync_len = 16,
};
static struct panel_rgb rgb = {
.mode = SRGB,
.format = SRGB_8BIT,
};
struct aic_panel srgb_hx8238 = {
.name = "panel-hx8238",
.timings = &hx8238_timing,
.funcs = &panel_funcs,
.rgb = &rgb,
.connector_type = AIC_RGB_COM,
};