gpio.c 658 B

12345678910111213141516171819202122232425262728293031323334
  1. // SPDX-License-Identifier: (GPL-2.0+ OR MIT)
  2. /*
  3. * Copyright (c) 2018 Microsemi Corporation
  4. */
  5. #include <common.h>
  6. #include <asm/io.h>
  7. #include <linux/bitops.h>
  8. void mscc_gpio_set_alternate(int gpio, int mode)
  9. {
  10. u32 mask = BIT(gpio);
  11. u32 val0, val1;
  12. val0 = readl(BASE_DEVCPU_GCB + GPIO_ALT(0));
  13. val1 = readl(BASE_DEVCPU_GCB + GPIO_ALT(1));
  14. if (mode == 1) {
  15. val0 |= mask;
  16. val1 &= ~mask;
  17. } else if (mode == 2) {
  18. val0 &= ~mask;
  19. val1 |= mask;
  20. } else if (mode == 3) {
  21. val0 |= mask;
  22. val1 |= mask;
  23. } else {
  24. val0 &= ~mask;
  25. val1 &= ~mask;
  26. }
  27. writel(val0, BASE_DEVCPU_GCB + GPIO_ALT(0));
  28. writel(val1, BASE_DEVCPU_GCB + GPIO_ALT(1));
  29. }