FASTSHIFT commented on code in PR #14701:
URL: https://github.com/apache/nuttx/pull/14701#discussion_r1834531099


##########
arch/xtensa/src/esp32s3/esp32s3_lcd.c:
##########
@@ -548,7 +564,31 @@ static int esp32s3_lcd_base_updatearea(struct fb_vtable_s 
*vtable,
   struct esp32s3_lcd_s *priv = &g_lcd_priv;
 
   cache_writeback_addr(CURRENT_LAYER(priv)->framebuffer,
-                       ESP32S3_LCD_FB_SIZE);
+                       ESP32S3_LCD_FB_ALLOC_SIZE);
+
+  return 0;
+}
+#endif
+
+#if ESP32S3_LCD_DBLBUFFERED
+static int esp32s3_lcd_base_pandisplay(FAR struct fb_vtable_s *vtable,
+                                       FAR struct fb_planeinfo_s *pinfo)
+{
+  struct esp32s3_lcd_s *priv = &g_lcd_priv;
+  struct esp32s3_layer_s *layer = &priv->layer[0];
+  uint8_t *fb_panned = &layer->framebuffer[pinfo->yoffset * 
ESP32S3_LCD_STRIDE];
+
+  up_disable_irq(ESP32S3_IRQ_LCD_CAM);
+
+  esp32s3_dma_wait_idle(priv->dma_channel, true);
+
+  esp32s3_dma_setup(layer->dmadesc,

Review Comment:
   Does `esp32s3_dma_setup` have a buffer length limit with a single transfer?



##########
arch/xtensa/src/esp32s3/esp32s3_lcd.c:
##########
@@ -548,7 +564,31 @@ static int esp32s3_lcd_base_updatearea(struct fb_vtable_s 
*vtable,
   struct esp32s3_lcd_s *priv = &g_lcd_priv;
 
   cache_writeback_addr(CURRENT_LAYER(priv)->framebuffer,
-                       ESP32S3_LCD_FB_SIZE);
+                       ESP32S3_LCD_FB_ALLOC_SIZE);
+
+  return 0;
+}
+#endif
+
+#if ESP32S3_LCD_DBLBUFFERED
+static int esp32s3_lcd_base_pandisplay(FAR struct fb_vtable_s *vtable,
+                                       FAR struct fb_planeinfo_s *pinfo)
+{
+  struct esp32s3_lcd_s *priv = &g_lcd_priv;
+  struct esp32s3_layer_s *layer = &priv->layer[0];
+  uint8_t *fb_panned = &layer->framebuffer[pinfo->yoffset * 
ESP32S3_LCD_STRIDE];

Review Comment:
   Use script `nuttx/tools/checkpatch.sh -f <FILE>` to check the format of the 
code.



##########
arch/xtensa/src/esp32s3/esp32s3_lcd.c:
##########
@@ -548,7 +564,31 @@ static int esp32s3_lcd_base_updatearea(struct fb_vtable_s 
*vtable,
   struct esp32s3_lcd_s *priv = &g_lcd_priv;
 
   cache_writeback_addr(CURRENT_LAYER(priv)->framebuffer,
-                       ESP32S3_LCD_FB_SIZE);
+                       ESP32S3_LCD_FB_ALLOC_SIZE);
+
+  return 0;
+}
+#endif
+
+#if ESP32S3_LCD_DBLBUFFERED
+static int esp32s3_lcd_base_pandisplay(FAR struct fb_vtable_s *vtable,
+                                       FAR struct fb_planeinfo_s *pinfo)
+{
+  struct esp32s3_lcd_s *priv = &g_lcd_priv;
+  struct esp32s3_layer_s *layer = &priv->layer[0];
+  uint8_t *fb_panned = &layer->framebuffer[pinfo->yoffset * 
ESP32S3_LCD_STRIDE];
+
+  up_disable_irq(ESP32S3_IRQ_LCD_CAM);
+
+  esp32s3_dma_wait_idle(priv->dma_channel, true);
+
+  esp32s3_dma_setup(layer->dmadesc,

Review Comment:
   Added a return value check that the transmission failed to return an error 
code.



##########
arch/xtensa/src/esp32s3/esp32s3_lcd.c:
##########
@@ -548,7 +564,31 @@ static int esp32s3_lcd_base_updatearea(struct fb_vtable_s 
*vtable,
   struct esp32s3_lcd_s *priv = &g_lcd_priv;
 
   cache_writeback_addr(CURRENT_LAYER(priv)->framebuffer,
-                       ESP32S3_LCD_FB_SIZE);
+                       ESP32S3_LCD_FB_ALLOC_SIZE);
+
+  return 0;
+}
+#endif
+
+#if ESP32S3_LCD_DBLBUFFERED
+static int esp32s3_lcd_base_pandisplay(FAR struct fb_vtable_s *vtable,
+                                       FAR struct fb_planeinfo_s *pinfo)
+{
+  struct esp32s3_lcd_s *priv = &g_lcd_priv;
+  struct esp32s3_layer_s *layer = &priv->layer[0];
+  uint8_t *fb_panned = &layer->framebuffer[pinfo->yoffset * 
ESP32S3_LCD_STRIDE];

Review Comment:
   It is recommended to add an access offset judgment to `pinfo->yoffset`, and 
print a reminder when the user passes an error parameter.



##########
arch/xtensa/src/esp32s3/esp32s3_lcd.c:
##########
@@ -623,6 +663,8 @@ static int IRAM_ATTR lcd_interrupt(int irq, void *context, 
void *arg)
       regval  = esp32s3_lcd_getreg(LCD_CAM_LCD_USER_REG);
       regval |= LCD_CAM_LCD_START_M;
       esp32s3_lcd_putreg(LCD_CAM_LCD_USER_REG, regval);
+
+      fb_remove_paninfo(&g_base_vtable, FB_NO_OVERLAY);

Review Comment:
   Add a return value check.



##########
arch/xtensa/src/esp32s3/esp32s3_lcd.c:
##########
@@ -548,7 +564,31 @@ static int esp32s3_lcd_base_updatearea(struct fb_vtable_s 
*vtable,
   struct esp32s3_lcd_s *priv = &g_lcd_priv;
 
   cache_writeback_addr(CURRENT_LAYER(priv)->framebuffer,
-                       ESP32S3_LCD_FB_SIZE);
+                       ESP32S3_LCD_FB_ALLOC_SIZE);
+
+  return 0;
+}
+#endif
+
+#if ESP32S3_LCD_DBLBUFFERED
+static int esp32s3_lcd_base_pandisplay(FAR struct fb_vtable_s *vtable,
+                                       FAR struct fb_planeinfo_s *pinfo)
+{
+  struct esp32s3_lcd_s *priv = &g_lcd_priv;

Review Comment:
   For pointer types, you need to add the `FAR` keyword:
   ```c
   FAR struct esp32s3_lcd_s *priv = &g_lcd_priv;
   ```



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@nuttx.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to