1 // SPDX-License-Identifier: GPL-2.0+
4 * eInfochips Ltd. <www.einfochips.com>
5 * Written-by: Ajay Bhargav <contact@8051projects.net>
8 * Marvell Semiconductor <www.marvell.com>
13 #include <linux/errno.h>
18 #define MV_MAX_GPIO 128
21 int gpio_request(unsigned gpio, const char *label)
23 if (gpio >= MV_MAX_GPIO) {
24 printf("%s: Invalid GPIO requested %d\n", __func__, gpio);
30 int gpio_free(unsigned gpio)
35 int gpio_direction_input(unsigned gpio)
37 struct gpio_reg *gpio_reg_bank;
39 if (gpio >= MV_MAX_GPIO) {
40 printf("%s: Invalid GPIO %d\n", __func__, gpio);
44 gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
45 writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gcdr);
49 int gpio_direction_output(unsigned gpio, int value)
51 struct gpio_reg *gpio_reg_bank;
53 if (gpio >= MV_MAX_GPIO) {
54 printf("%s: Invalid GPIO %d\n", __func__, gpio);
58 gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
59 writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gsdr);
60 gpio_set_value(gpio, value);
64 int gpio_get_value(unsigned gpio)
66 struct gpio_reg *gpio_reg_bank;
69 if (gpio >= MV_MAX_GPIO) {
70 printf("%s: Invalid GPIO %d\n", __func__, gpio);
74 gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
75 gpio_val = readl(&gpio_reg_bank->gplr);
77 return GPIO_VAL(gpio, gpio_val);
80 int gpio_set_value(unsigned gpio, int value)
82 struct gpio_reg *gpio_reg_bank;
84 if (gpio >= MV_MAX_GPIO) {
85 printf("%s: Invalid GPIO %d\n", __func__, gpio);
89 gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
91 writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gpsr);
93 writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gpcr);