# 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
    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
    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
