uboot/drivers/gpio/mvgpio.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0+
   2/*
   3 * (C) Copyright 2011
   4 * eInfochips Ltd. <www.einfochips.com>
   5 * Written-by: Ajay Bhargav <contact@8051projects.net>
   6 *
   7 * (C) Copyright 2010
   8 * Marvell Semiconductor <www.marvell.com>
   9 */
  10
  11#include <common.h>
  12#include <malloc.h>
  13#include <asm/io.h>
  14#include <linux/errno.h>
  15#include "mvgpio.h"
  16#include <asm/gpio.h>
  17
  18#ifndef MV_MAX_GPIO
  19#define MV_MAX_GPIO     128
  20#endif
  21
  22int gpio_request(unsigned gpio, const char *label)
  23{
  24        if (gpio >= MV_MAX_GPIO) {
  25                printf("%s: Invalid GPIO requested %d\n", __func__, gpio);
  26                return -1;
  27        }
  28        return 0;
  29}
  30
  31int gpio_free(unsigned gpio)
  32{
  33        return 0;
  34}
  35
  36int gpio_direction_input(unsigned gpio)
  37{
  38        struct gpio_reg *gpio_reg_bank;
  39
  40        if (gpio >= MV_MAX_GPIO) {
  41                printf("%s: Invalid GPIO %d\n", __func__, gpio);
  42                return -1;
  43        }
  44
  45        gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
  46        writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gcdr);
  47        return 0;
  48}
  49
  50int gpio_direction_output(unsigned gpio, int value)
  51{
  52        struct gpio_reg *gpio_reg_bank;
  53
  54        if (gpio >= MV_MAX_GPIO) {
  55                printf("%s: Invalid GPIO %d\n", __func__, gpio);
  56                return -1;
  57        }
  58
  59        gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
  60        writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gsdr);
  61        gpio_set_value(gpio, value);
  62        return 0;
  63}
  64
  65int gpio_get_value(unsigned gpio)
  66{
  67        struct gpio_reg *gpio_reg_bank;
  68        u32 gpio_val;
  69
  70        if (gpio >= MV_MAX_GPIO) {
  71                printf("%s: Invalid GPIO %d\n", __func__, gpio);
  72                return -1;
  73        }
  74
  75        gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
  76        gpio_val = readl(&gpio_reg_bank->gplr);
  77
  78        return GPIO_VAL(gpio, gpio_val);
  79}
  80
  81int gpio_set_value(unsigned gpio, int value)
  82{
  83        struct gpio_reg *gpio_reg_bank;
  84
  85        if (gpio >= MV_MAX_GPIO) {
  86                printf("%s: Invalid GPIO %d\n", __func__, gpio);
  87                return -1;
  88        }
  89
  90        gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
  91        if (value)
  92                writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gpsr);
  93        else
  94                writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gpcr);
  95
  96        return 0;
  97}
  98