// 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.

#include <ddk/debug.h>
#include <ddk/metadata.h>
#include <ddk/metadata/gpio.h>
#include <ddk/platform-defs.h>
#include <soc/synaptics/gpio.h>
#include <soc/vs680/vs680-gpio.h>

#include "vs680-evk.h"

namespace board_vs680_evk {

zx_status_t Vs680Evk::GpioInit() {
  constexpr synaptics::PinmuxMetadata
      pinmux_metadata =
          {
              .muxes = 3,
              .pinmux_map =
                  {
                      // AVIO GPIOs
                      [0] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              21,
                          },  // I2S3_DI
                      [1] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              18,
                          },  // I2S3_DO
                      [2] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              20,
                          },  // I2S3_BCLKIO
                      [3] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              19,
                          },  // I2S3_LRCKIO
                      [4] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              7,
                          },  // SPDIFI
                      [5] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              17,
                          },  // TX_EDDC_SDA
                      [6] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              16,
                          },  // TX_EDDC_SCL
                      [7] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              15,
                          },  // I2S2_MCLK
                      [8] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              13,
                          },  // I2S2_DI3
                      [9] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              12,
                          },  // I2S2_DI2
                      [10] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              11,
                          },  // I2S2_DI1
                      [11] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              10,
                          },  // I2S2_DI0
                      [12] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              9,
                          },  // I2S2_BCLKIO
                      [13] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              8,
                          },  // I2S2_LRCKIO
                      [14] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              6,
                          },  // SPDIFO
                      [15] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              3,
                          },  // I2S1_DO3
                      [16] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              2,
                          },  // I2S1_DO2
                      [17] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              1,
                          },  // I2S1_DO1
                      [18] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              14,
                          },  // I2S1_MCLK
                      [19] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              0,
                          },  // I2S1_DO0
                      [20] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              5,
                          },  // I2S1_BCLKIO
                      [21] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              1,
                              4,
                          },  // I2S1_LRCKIO

                      // SoC GPIOs
                      [22] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              27,
                          },  // RGMII_TXCTL
                      [23] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              22,
                          },  // RGMII_TXC
                      [24] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              26,
                          },  // RGMII_TXD3
                      [25] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              25,
                          },  // RGMII_TXD2
                      [26] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              24,
                          },  // RGMII_TXD1
                      [27] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              23,
                          },  // RGMII_TXD0
                      [28] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              21,
                          },  // RGMII_MDIO
                      [29] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              20,
                          },  // RGMII_MDC
                      [30] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              33,
                          },  // RGMII_RXCTL
                      [31] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              28,
                          },  // RGMII_RXC
                      [32] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              32,
                          },  // RGMII_RXD3
                      [33] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              31,
                          },  // RGMII_RXD2
                      [34] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              30,
                          },  // RGMII_RXD1
                      [35] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              29,
                          },  // RGMII_RXD0
                      [36] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              18,
                          },  // STS1_VALD
                      [37] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              17,
                          },  // STS1_SD
                      [38] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              16,
                          },  // STS1_SOP
                      [39] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              15,
                          },  // STS1_CLK
                      [40] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              14,
                          },  // STS0_VALD
                      [41] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              13,
                          },  // STS0_SD
                      [42] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              12,
                          },  // STS0_SOP
                      [43] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              11,
                          },  // STS0_CLK
                      [44] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              1,
                          },  // SDIO_WP
                      [45] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              0,
                          },  // SDIO_CDn
                      [46] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              10,
                          },  // TW0_SDA
                      [47] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              9,
                          },  // TW0_SCL
                      [48] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              8,
                          },  // SPI1_SDI
                      [49] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              7,
                          },  // SPI1_SCLK
                      [50] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              6,
                          },  // SPI1_SDO
                      [51] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              5,
                          },  // SPI1_SS3n
                      [52] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              4,
                          },  // SPI1_SS2n
                      [53] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              3,
                          },  // SPI1_SS1n
                      [54] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              2,
                          },  // SPI1_SS0n
                      [55] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              0,
                              19,
                          },  // USB2_DRV_VBUS

                      // System manager GPIOs
                      [64] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              0,
                          },  // SM_TW2_SCL
                      [65] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              1,
                          },  // SM_TW2_SDA
                      [66] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              4,
                          },  // SM_HDMI_HPD
                      [67] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              5,
                          },  // SM_HDMI_CEC
                      [68] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              2,
                          },  // SM_URT1_TXD
                      [69] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              3,
                          },  // SM_URT1_RXD
                      [70] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              6,
                          },  // SM_TMS
                      [71] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              7,
                          },  // SM_TDI
                      [72] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              8,
                          },  // SM_TDO
                      [73] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              9,
                          },  // SM_TW3_SCL
                      [74] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              10,
                          },  // SM_TW3_SDA
                      [75] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              17,
                          },  // SM_SPI2_SCLK
                      [76] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              16,
                          },  // SM_SPI2_SDI
                      [77] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              15,
                          },  // SM_SPI2_SDO
                      [78] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              14,
                          },  // SM_SPI2_SS3n
                      [79] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              13,
                          },  // SM_SPI2_SS2n
                      [80] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              12,
                          },  // SM_SPI2_SS1n
                      [81] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              11,
                          },  // SM_SPI2_SS0n
                      [82] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              18,
                          },  // SM_URT0_TXD
                      [83] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              19,
                          },  // SM_URT0_RXD
                      [84] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              20,
                          },  // SM_HDMIRX_HPD
                      [85] =
                          {
                              synaptics::PinmuxEntry::kGpio,
                              2,
                              21,
                          },  // SM_HDMIRX_PWR5V
                  },
          };

  constexpr pbus_mmio_t gpio_mmios[] = {
      {.base = vs680::kSocPinmuxBase, .length = vs680::kPinmuxSize},
      {.base = vs680::kAvioPinmuxBase, .length = vs680::kPinmuxSize},
      {.base = vs680::kSmPinmuxBase, .length = vs680::kPinmuxSize},
      {.base = vs680::kGpio1Base, .length = vs680::kGpioSize},
      {.base = vs680::kGpio2Base, .length = vs680::kGpioSize},
      {.base = vs680::kSmGpioBase, .length = vs680::kGpioSize},
  };

  const pbus_irq_t gpio_irqs[] = {
      {
          .irq = vs680::kGpio1Irq,
          .mode = ZX_INTERRUPT_MODE_LEVEL_HIGH,
      },
      {
          .irq = vs680::kGpio2Irq,
          .mode = ZX_INTERRUPT_MODE_LEVEL_HIGH,
      },
  };

  const gpio_pin_t gpio_pins[] = {};

  const pbus_metadata_t gpio_metadata[] = {
      {
          .type = DEVICE_METADATA_GPIO_PINS,
          .data_buffer = &gpio_pins,
          .data_size = sizeof(gpio_pins),
      },
      {
          .type = DEVICE_METADATA_PRIVATE,
          .data_buffer = &pinmux_metadata,
          .data_size = sizeof(pinmux_metadata),
      },
  };

  pbus_dev_t gpio_dev = {};
  gpio_dev.name = "gpio";
  gpio_dev.vid = PDEV_VID_SYNAPTICS;
  gpio_dev.pid = PDEV_PID_SYNAPTICS_VS680;
  gpio_dev.did = PDEV_DID_SYNAPTICS_GPIO;
  gpio_dev.mmio_list = gpio_mmios;
  gpio_dev.mmio_count = countof(gpio_mmios);
  gpio_dev.irq_list = gpio_irqs;
  gpio_dev.irq_count = countof(gpio_irqs);
  gpio_dev.metadata_list = gpio_metadata;
  gpio_dev.metadata_count = countof(gpio_metadata);

  auto status = pbus_.ProtocolDeviceAdd(ZX_PROTOCOL_GPIO_IMPL, &gpio_dev);
  if (status != ZX_OK) {
    zxlogf(ERROR, "%s: ProtocolDeviceAdd failed: %d", __func__, status);
    return status;
  }
  gpio_impl_ = ddk::GpioImplProtocolClient(parent());
  if (!gpio_impl_.is_valid()) {
    zxlogf(ERROR, "%s: device_get_protocol failed", __func__);
    return ZX_ERR_INTERNAL;
  }
  return ZX_OK;
}

}  // namespace board_vs680_evk
