4 * Copyright (C) 2012, Broadcom Corporation. All Rights Reserved.
6 * Permission to use, copy, modify, and/or distribute this software for any
7 * purpose with or without fee is hereby granted, provided that the above
8 * copyright notice and this permission notice appear in all copies.
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
13 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
15 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
16 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18 * $Id: gen_gpio.c,v 1.1 2009-10-30 20:51:47 $
22 #include <linux/module.h>
23 #include <linux/init.h>
31 #define BCM947XX_GENGPIO_DEBUG 0
32 #if BCM947XX_GENGPIO_DEBUG
33 //#define DBG(x...) printk(KERN_DEBUG x)
34 #define DBG(x...) printk(KERN_ERR x)
41 static si_t
*gpio_sih
;
48 if (!(gpio_sih
= si_kattach(SI_OSH
))) {
49 DBG("%s: si_kattach failed\n", __FUNCTION__
);
53 si_gpiosetcore(gpio_sih
);
64 /* GENERIC_GPIO calls */
65 int gpio_direction_input(unsigned gpio
)
69 ret
= si_gpioouten(gpio_sih
, (1<<gpio
), 0, GPIO_APP_PRIORITY
);
70 DBG("%s: gpio %d - input 0x%x\n", __FUNCTION__
, gpio
, ret
);
73 EXPORT_SYMBOL(gpio_direction_input
);
76 int gpio_direction_output(unsigned gpio
, int value
)
80 outen
= si_gpioouten(gpio_sih
, (1<<gpio
), (1<<gpio
), GPIO_APP_PRIORITY
);
81 out
= si_gpioout(gpio_sih
, (1<<gpio
), (value
? (1<<gpio
) : 0), GPIO_APP_PRIORITY
);
82 DBG("%s: gpio %d, value %d - out 0x%x outen 0x%x\n", __FUNCTION__
, gpio
, value
, out
, outen
);
85 EXPORT_SYMBOL(gpio_direction_output
);
87 int gpio_get_value(unsigned int gpio
)
90 get
= si_gpioin(gpio_sih
);
96 EXPORT_SYMBOL(gpio_get_value
);
98 void gpio_set_value(unsigned int gpio
, int value
)
100 si_gpioout(gpio_sih
, (1<<gpio
), (value
? (1<<gpio
) : 0), GPIO_APP_PRIORITY
);
103 EXPORT_SYMBOL(gpio_set_value
);
105 int gpio_request(unsigned int gpio
, const char *label
)
111 ret
= si_gpioreserve(gpio_sih
, (1<<gpio
), GPIO_APP_PRIORITY
);
112 DBG("%s: gpio %d label %s mask 0x%x reserve 0x%x\n", __FUNCTION__
, gpio
,
115 ret
= si_gpiocontrol(gpio_sih
, (1<<gpio
), 0, GPIO_APP_PRIORITY
);
116 DBG("%s: si_gpiocontrol 0x%x\n", __FUNCTION__
, ret
);
119 ret
= si_gpiopull(gpio_sih
, 1/*pulldown*/, (1<<gpio
), 0);
120 DBG("%s: si_gpiopull (down) 0x%x\n", __FUNCTION__
, ret
);
122 ret
= si_gpiopull(gpio_sih
, 0/*pullup*/, (1<<gpio
), (1<<gpio
));
123 DBG("%s: si_gpiopull (up) 0x%x\n", __FUNCTION__
, ret
);
127 EXPORT_SYMBOL(gpio_request
);
129 void gpio_free(unsigned int gpio
)
134 si_gpiopull(gpio_sih
, 0/*pullup*/, (1<<gpio
), GPIO_APP_PRIORITY
);
135 si_gpiorelease(gpio_sih
, (1<<gpio
), GPIO_APP_PRIORITY
);
137 DBG("%s: gpio %d mask 0x%x\n", __FUNCTION__
, gpio
, mask
);
140 EXPORT_SYMBOL(gpio_free
);
143 module_init(gen_gpio_init
);
144 module_exit(gen_gpio_exit
);