// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SRC_DEVICES_LIB_AMLOGIC_INCLUDE_SOC_AML_S905D3_S905D3_PWM_H_
#define SRC_DEVICES_LIB_AMLOGIC_INCLUDE_SOC_AML_S905D3_S905D3_PWM_H_

#include <soc/aml-common/aml-pwm-regs.h>
#include <soc/aml-s905d3/s905d3-hw.h>

#define S905D3_PWM_A 0
#define S905D3_PWM_B 1
#define S905D3_PWM_C 2
#define S905D3_PWM_D 3
#define S905D3_PWM_E 4
#define S905D3_PWM_F 5
#define S905D3_PWM_AO_A 6
#define S905D3_PWM_AO_B 7
#define S905D3_PWM_AO_C 8
#define S905D3_PWM_AO_D 9
#define S905D3_PWM_COUNT 10

namespace aml_pwm {

// Offsets
static_assert(((S905D3_PWM_PWM_A - 0x6c00) * 4 == kAOffset) &&
                  ((S905D3_PWM_PWM_C - 0x6800) * 4 == kAOffset) &&
                  ((S905D3_PWM_PWM_E - 0x6400) * 4 == kAOffset) &&
                  (S905D3_AO_PWM_PWM_A == kAOffset) && (S905D3_AO_PWM_PWM_C == kAOffset),
              "PWM_PWM_A offset incorrect!\n");
static_assert(((S905D3_PWM_PWM_B - 0x6c00) * 4 == kBOffset) &&
                  ((S905D3_PWM_PWM_D - 0x6800) * 4 == kBOffset) &&
                  ((S905D3_PWM_PWM_F - 0x6400) * 4 == kBOffset) &&
                  (S905D3_AO_PWM_PWM_B == kBOffset) && (S905D3_AO_PWM_PWM_D == kBOffset),
              "PWM_PWM_B offset incorrect!\n");
static_assert(((S905D3_PWM_MISC_REG_AB - 0x6c00) * 4 == kMiscOffset) &&
                  ((S905D3_PWM_MISC_REG_CD - 0x6800) * 4 == kMiscOffset) &&
                  ((S905D3_PWM_MISC_REG_EF - 0x6400) * 4 == kMiscOffset) &&
                  (S905D3_AO_PWM_MISC_REG_AB == kMiscOffset) &&
                  (S905D3_AO_PWM_MISC_REG_CD == kMiscOffset),
              "MISC offset incorrect!\n");
static_assert(((S905D3_DS_A_B - 0x6c00) * 4 == kDSOffset) &&
                  ((S905D3_DS_C_D - 0x6800) * 4 == kDSOffset) &&
                  ((S905D3_DS_E_F - 0x6400) * 4 == kDSOffset) && (S905D3_AO_DS_A_B == kDSOffset) &&
                  (S905D3_AO_DS_C_D == kDSOffset),
              "DS offset incorrect!\n");
static_assert(((S905D3_PWM_TIME_AB - 0x6c00) * 4 == kTimeOffset) &&
                  ((S905D3_PWM_TIME_CD - 0x6800) * 4 == kTimeOffset) &&
                  ((S905D3_PWM_TIME_EF - 0x6400) * 4 == kTimeOffset) &&
                  (S905D3_AO_PWM_TIME_AB == kTimeOffset) && (S905D3_AO_PWM_TIME_CD == kTimeOffset),
              "Time offset incorrect!\n");
static_assert(((S905D3_PWM_A2 - 0x6c00) * 4 == kA2Offset) &&
                  ((S905D3_PWM_C2 - 0x6800) * 4 == kA2Offset) &&
                  ((S905D3_PWM_E2 - 0x6400) * 4 == kA2Offset) && (S905D3_AO_PWM_A2 == kA2Offset) &&
                  (S905D3_AO_PWM_C2 == kA2Offset),
              "A2 offset incorrect!\n");
static_assert(((S905D3_PWM_B2 - 0x6c00) * 4 == kB2Offset) &&
                  ((S905D3_PWM_D2 - 0x6800) * 4 == kB2Offset) &&
                  ((S905D3_PWM_F2 - 0x6400) * 4 == kB2Offset) && (S905D3_AO_PWM_B2 == kB2Offset) &&
                  (S905D3_AO_PWM_D2 == kB2Offset),
              "B2 offset incorrect!\n");
static_assert(((S905D3_PWM_BLINK_AB - 0x6c00) * 4 == kBlinkOffset) &&
                  ((S905D3_PWM_BLINK_CD - 0x6800) * 4 == kBlinkOffset) &&
                  ((S905D3_PWM_BLINK_EF - 0x6400) * 4 == kBlinkOffset) &&
                  (S905D3_AO_PWM_BLINK_AB == kBlinkOffset) &&
                  (S905D3_AO_PWM_BLINK_CD == kBlinkOffset),
              "Blink offset incorrect!\n");

}  // namespace aml_pwm

#endif  // SRC_DEVICES_LIB_AMLOGIC_INCLUDE_SOC_AML_S905D3_S905D3_PWM_H_
