# Copyright (c) 2022 Andreas Sandberg
# Copyright (c) 2020, Phytec Messtechnik GmbH
# SPDX-License-Identifier: Apache-2.0

description: UltraChip UC81xx EPD display controller common properties

include: [spi-device.yaml, display-controller.yaml]

properties:
    reset-gpios:
      type: phandle-array
      required: true
      description: RESET pin.

        The RESET pin of UC81xx is active low.
        If connected directly the MCU pin should be configured
        as active low.

    dc-gpios:
      type: phandle-array
      required: true
      description: DC pin.

        The DC pin of UC81xx is active low (transmission command byte).
        If connected directly the MCU pin should be configured
        as active low.

    busy-gpios:
      type: phandle-array
      required: true
      description: BUSY pin.

        The BUSY pin of UC81xx is active low.
        If connected directly the MCU pin should be configured
        as active low.

    softstart:
      type: uint8-array
      required: false
      description: Booster Soft Start (BTST) values

child-binding:
  description: |
    Child nodes describe refresh profiles. Each refresh profile
    specifies a set of voltages used to drive the refresh
    cycle. Refresh nodes are optional and are used to override
    defaults loaded from the controllers OTP memory.

    The partial refresh profile is used when performing a partial
    refresh (writes while blanking is off). Since the controller
    always supports partial updates, the driver uses the full refresh
    profile and scans the partial window corresponding to the write if
    no partial profile has been provided. An empty profile can be used
    to use the reset values from OTP instead of the values specified
    in the full profile.

    The driver typically looks for the following child nodes:

      - 'full' - Normal / full refresh.
      - 'partial' - Partial refresh, defaults to the values in the
        full profile if not present.

  properties:
    pwr:
      type: uint8-array
      required: false
      description: Power Setting (PWR) values

    cdi:
      type: int
      required: false
      description: |
        VCOM and data interval value. This value is optional but must
        be provided to enable border refresh control.

    tcon:
      type: int
      required: false
      description: TCON setting value

    pll:
      type: int
      required: false
      description: PLL / frame rate control

    vdcs:
      type: int
      required: false
      description: VCOM DC settings

    lutc:
      type: uint8-array
      required: false
      description: VCOM LUT

    lutww:
      type: uint8-array
      required: false
      description: White-to-white LUT

    lutkw:
      type: uint8-array
      required: false
      description: Black-to-white LUT

    lutwk:
      type: uint8-array
      required: false
      description: White-to-black LUT

    lutkk:
      type: uint8-array
      required: false
      description: White-to-black LUT

    lutbd:
      type: uint8-array
      required: false
      description: Border LUT
