Touch controller of Arduino Giga Display Shield not working

I tried the display example on Arduino Giga with Display Shield. It is failing with the error below . If I comment out the touch controller part, the display code works fine. I have tested the ‘C’ example using Arduino IDE, and the touch controller works there, so there are no hardware issues. Would love to get some pointers to make the touch controller work.

OpenMV v4.5.2; MicroPython v1.20-omv-r22; GIGA-STM32H747
Type "help()" for more information.

Traceback (most recent call last):
  File "<stdin>", line 35, in <module>
  File "", line 74, in __init__
  File "", line 100, in _write_reg
OSError: [Errno 19] ENODEV
OpenMV v4.5.2; MicroPython v1.20-omv-r22; GIGA-STM32H747
Type "help()" for more information.

Hi, everything works fine for me. I have firmware 4.5.2 installed and ran this script:

# This work is licensed under the MIT license.
# Copyright (c) 2013-2023 OpenMV LLC. All rights reserved.
# LCD, touch panel and camera example.

import sensor
import time
import image
import display
from gt911 import GT911
from machine import I2C

touch_detected = False
points_colors = ((255, 0, 0), (0, 255, 0), (0, 0, 255), (0, 255, 255), (255, 255, 0))

sensor.reset()  # Reset and initialize the sensor.
sensor.set_pixformat(sensor.RGB565)  # Set pixel format to RGB565 (or GRAYSCALE)
sensor.set_framesize(sensor.VGA)  # Set frame size to QVGA (320x240)

lcd = display.DSIDisplay(
    framesize=display.FWVGA, portrait=True, refresh=60, controller=display.ST7701()

# Note use pin numbers or names not Pin objects because the
# driver needs to change pin directions to reset the controller.
touch = GT911(
    I2C(4, freq=400_000),
    touch_callback=lambda pin: globals().update(touch_detected=True),

# Create a clock object to track the FPS.
clock = time.clock()

while True:
    clock.tick()  # Update the FPS clock.

    # Capture a new frame
    img = sensor.snapshot()

    # Draw touch points if touch was detected.
    if touch_detected:
        n, points = touch.read_points()
        for i in range(0, n):
                points[i][0] - IMG_OFFSET,
                points[i][2] * 3,
        touch_detected = False

    # Draw the image on the display.
    lcd.write(img, y=IMG_OFFSET, hint=image.TRANSPOSE | image.VFLIP)