summaryrefslogtreecommitdiff
path: root/bsp/renesas/libraries
diff options
context:
space:
mode:
authorRbb666 <[email protected]>2024-04-19 10:36:42 +0800
committerMeco Man <[email protected]>2024-04-18 22:51:03 -0400
commit61fac62521b81365e0d9eff0012510ff3d0fd876 (patch)
tree6fdf47cca364538c7d5528f4db015d695e2e8469 /bsp/renesas/libraries
parent24373e1ec310511adb5ea3dedaae29005cf6fc32 (diff)
[bsp][renesas]fix ra6m3 can't use lcd problem.
Diffstat (limited to 'bsp/renesas/libraries')
-rw-r--r--bsp/renesas/libraries/HAL_Drivers/config/ra6m3/lcd_config.h31
-rw-r--r--bsp/renesas/libraries/HAL_Drivers/drv_lcd.c25
2 files changed, 46 insertions, 10 deletions
diff --git a/bsp/renesas/libraries/HAL_Drivers/config/ra6m3/lcd_config.h b/bsp/renesas/libraries/HAL_Drivers/config/ra6m3/lcd_config.h
new file mode 100644
index 0000000000..92eda2da19
--- /dev/null
+++ b/bsp/renesas/libraries/HAL_Drivers/config/ra6m3/lcd_config.h
@@ -0,0 +1,31 @@
+/*
+ * Copyright (c) 2006-2024, RT-Thread Development Team
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ *
+ * Change Logs:
+ * Date Author Notes
+ * 2024-03-01 Rbb666 the first version
+ */
+#ifndef __LCD_CONFIG_H_
+#define __LCD_CONFIG_H_
+
+typedef enum
+{
+ ROTATION_ZERO = 0,
+ ROTATION_090 = 90,
+ ROTATION_180 = 180,
+ ROTATION_270 = 270,
+} bsp_rotation;
+
+#define LCD_WIDTH DISPLAY_HSIZE_INPUT0
+#define LCD_HEIGHT DISPLAY_VSIZE_INPUT0
+#define LCD_BITS_PER_PIXEL DISPLAY_BITS_PER_PIXEL_INPUT1
+#define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565
+#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8)
+
+#define ENABLE_DOUBLE_BUFFER (0)
+
+#define LCD_BL_PIN BSP_IO_PORT_01_PIN_00
+
+#endif
diff --git a/bsp/renesas/libraries/HAL_Drivers/drv_lcd.c b/bsp/renesas/libraries/HAL_Drivers/drv_lcd.c
index d133257aaf..1c1d770b7c 100644
--- a/bsp/renesas/libraries/HAL_Drivers/drv_lcd.c
+++ b/bsp/renesas/libraries/HAL_Drivers/drv_lcd.c
@@ -14,6 +14,8 @@
#ifdef BSP_USING_LCD
#ifdef SOC_SERIES_R7FA8M85
#include <ra8/lcd_config.h>
+#else
+#include <ra6m3/lcd_config.h>
#endif
#include <drv_lcd.h>
@@ -38,8 +40,6 @@ static uint16_t *lcd_current_working_buffer = (uint16_t *) &fb_background[0];
#ifdef SOC_SERIES_R7FA8M85
static uint8_t lcd_framebuffer[LCD_BUF_SIZE] BSP_ALIGN_VARIABLE(64) BSP_PLACE_IN_SECTION(".sdram");
-#else
-static uint8_t lcd_framebuffer[LCD_BUF_SIZE] BSP_ALIGN_VARIABLE(64);
#endif
// G2D
@@ -47,7 +47,9 @@ extern d2_device *d2_handle0;
static d2_device **_d2_handle_user = &d2_handle0;
static d2_renderbuffer *renderbuffer;
+#ifdef SOC_SERIES_R7FA8M85
extern void ra8_mipi_lcd_init(void);
+#endif
rt_weak void DisplayVsyncCallback(display_callback_args_t *p_args)
{
@@ -260,6 +262,7 @@ static rt_err_t ra_lcd_control(rt_device_t device, int cmd, void *args)
{
case RTGRAPHIC_CTRL_RECT_UPDATE:
{
+#ifdef SOC_SERIES_R7FA8M85
struct rt_device_rect_info *info = (struct rt_device_rect_info *)args;
#if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U)
SCB_CleanInvalidateDCache_by_Addr((uint32_t *)lcd->lcd_info.framebuffer, sizeof(fb_background[0]));
@@ -276,6 +279,7 @@ static rt_err_t ra_lcd_control(rt_device_t device, int cmd, void *args)
fsp_err_t err = R_GLCDC_BufferChange(&g_display0_ctrl, (uint8_t *) lcd_current_working_buffer, DISPLAY_FRAME_LAYER_1);
RT_ASSERT(err == 0);
#endif
+#endif /* SOC_SERIES_R7FA8M85 */
/* wait for vsync interrupt */
vsync_wait();
}
@@ -316,11 +320,13 @@ static rt_err_t drv_lcd_init(struct rt_device *device)
static void reset_lcd_panel(void)
{
+#ifdef LCD_RST_PIN
rt_pin_mode(LCD_RST_PIN, PIN_MODE_OUTPUT);
rt_pin_write(LCD_RST_PIN, PIN_LOW);
rt_thread_mdelay(100);
rt_pin_write(LCD_RST_PIN, PIN_HIGH);
rt_thread_mdelay(100);
+#endif
}
static rt_err_t ra_bsp_lcd_init(void)
@@ -334,13 +340,14 @@ static rt_err_t ra_bsp_lcd_init(void)
error = R_GLCDC_Open(&g_display0_ctrl, &g_display0_cfg);
if (FSP_SUCCESS == error)
{
+#ifdef SOC_SERIES_R7FA8M85
/* config mipi */
ra8_mipi_lcd_init();
-
+#endif
/* Initialize g2d */
error = g2d_drv_hwInit();
- /** Display driver start */
+ /* Display driver start */
error = R_GLCDC_Start(&g_display0_ctrl);
}
@@ -359,13 +366,11 @@ int rt_hw_lcd_init(void)
_lcd.lcd_info.width = LCD_WIDTH;
_lcd.lcd_info.bits_per_pixel = LCD_BITS_PER_PIXEL;
_lcd.lcd_info.pixel_format = LCD_PIXEL_FORMAT;
-
+#ifdef SOC_SERIES_R7FA8M85
_lcd.lcd_info.framebuffer = (uint8_t *)lcd_framebuffer;
- if (_lcd.lcd_info.framebuffer == NULL)
- {
- LOG_E("alloc lcd framebuffer fail");
- return -RT_ERROR;
- }
+#else
+ _lcd.lcd_info.framebuffer = (uint8_t *)&fb_background[0];
+#endif
LOG_D("\nlcd framebuffer address:%#x", _lcd.lcd_info.framebuffer);
memset(_lcd.lcd_info.framebuffer, 0x0, LCD_BUF_SIZE);