]> git.sur5r.net Git - u-boot/blob - drivers/gpio/mvgpio.c
Merge branch 'master' of git://git.denx.de/u-boot-sunxi
[u-boot] / drivers / gpio / mvgpio.c
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 <asm/io.h>
13 #include <linux/errno.h>
14 #include "mvgpio.h"
15 #include <asm/gpio.h>
16
17 #ifndef MV_MAX_GPIO
18 #define MV_MAX_GPIO     128
19 #endif
20
21 int gpio_request(unsigned gpio, const char *label)
22 {
23         if (gpio >= MV_MAX_GPIO) {
24                 printf("%s: Invalid GPIO requested %d\n", __func__, gpio);
25                 return -1;
26         }
27         return 0;
28 }
29
30 int gpio_free(unsigned gpio)
31 {
32         return 0;
33 }
34
35 int gpio_direction_input(unsigned gpio)
36 {
37         struct gpio_reg *gpio_reg_bank;
38
39         if (gpio >= MV_MAX_GPIO) {
40                 printf("%s: Invalid GPIO %d\n", __func__, gpio);
41                 return -1;
42         }
43
44         gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
45         writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gcdr);
46         return 0;
47 }
48
49 int gpio_direction_output(unsigned gpio, int value)
50 {
51         struct gpio_reg *gpio_reg_bank;
52
53         if (gpio >= MV_MAX_GPIO) {
54                 printf("%s: Invalid GPIO %d\n", __func__, gpio);
55                 return -1;
56         }
57
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);
61         return 0;
62 }
63
64 int gpio_get_value(unsigned gpio)
65 {
66         struct gpio_reg *gpio_reg_bank;
67         u32 gpio_val;
68
69         if (gpio >= MV_MAX_GPIO) {
70                 printf("%s: Invalid GPIO %d\n", __func__, gpio);
71                 return -1;
72         }
73
74         gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
75         gpio_val = readl(&gpio_reg_bank->gplr);
76
77         return GPIO_VAL(gpio, gpio_val);
78 }
79
80 int gpio_set_value(unsigned gpio, int value)
81 {
82         struct gpio_reg *gpio_reg_bank;
83
84         if (gpio >= MV_MAX_GPIO) {
85                 printf("%s: Invalid GPIO %d\n", __func__, gpio);
86                 return -1;
87         }
88
89         gpio_reg_bank = get_gpio_base(GPIO_TO_REG(gpio));
90         if (value)
91                 writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gpsr);
92         else
93                 writel(GPIO_TO_BIT(gpio), &gpio_reg_bank->gpcr);
94
95         return 0;
96 }