# Copyright (c) 2022 Thomas Stranger
# SPDX-License-Identifier: Apache-2.0

# Common Properties for the DS2477 and DS2485 I2C 1-Wire masters:

include: [w1-master.yaml, i2c-device.yaml]

properties:
  switching-threshold:
    type: string
    required: true
    enum:
      - "low"
      - "medium"
      - "high"
      - "off"
    description: |
      Default Low-to-High Switching Threshold.

      Only the following values are allowed:
        low:     0.25 x VCC, no hysteresis
        medium:  0.40 x VCC, no hysteresis (recommended for most configurations)
        high:    0.75 x VCC, with hysteresis
        off:     off (chip reset value)

  active-pull-threshold:
    type: string
    required: true
    enum:
      - "low"
      - "medium"
      - "high"
      - "off"
    description: |
      Default Active Pullup on Threshold configuration.
      For configurations with a single slave a "low" active pull
      threshold is recommended.

      Only the following values are allowed:
        low:     0.25 x VCC (recommended for most configurations)
        medium:  0.40 x VCC
        high:    0.75 x VCC
        off:     off (chip reset value)

  weak-pullup:
    type: string
    required: true
    enum:
     - "extern"
     - "500"
     - "1000"
     - "333"
    description: |
      Default 1-Wire Weak Pullup Resistance in ohms.
      For most configurations with a single slave "1000" ohms are recommended,
      but some devices and multidrop configurations might need a stronger pullup.

      To enter floating condition, it is suggested to switch the weak-pull up
      to extern and disable the switching as well as the active-pull threshold.

      Only the following values are allowed:
        "extern" (chip reset value)
        "500"
        "1000" (recommended for most configurations)
        "333"

  standard-slew:
    type: int
    required: false
    default: 150
    enum:
      - 50
      - 150
      - 1300
    description: |
      Default slew for standard speed mode in ns. Only the following values are
      allowed:
        50
        150   (default; chip reset value)
        1300

  overdrive-slew:
    type: int
    required: false
    default: 50
    enum:
      - 50
      - 150
    description: |
      Default slew for overdrive speed mode in ns. Only the following values are
      allowed:
        50    (default; chip reset value)
        150
