4 * Copyright (C) 2009, Broadcom Corporation
7 * THIS SOFTWARE IS OFFERED "AS IS", AND BROADCOM GRANTS NO WARRANTIES OF ANY
8 * KIND, EXPRESS OR IMPLIED, BY STATUTE, COMMUNICATION OR OTHERWISE. BROADCOM
9 * SPECIFICALLY DISCLAIMS ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
10 * FOR A SPECIFIC PURPOSE OR NONINFRINGEMENT CONCERNING THIS SOFTWARE.
12 * $Id: gen_gpio.c,v 1.1 2009/10/30 20:51:47 Exp $
16 #include <linux/module.h>
17 #include <linux/init.h>
25 #define BCM947XX_GENGPIO_DEBUG 0
26 #if BCM947XX_GENGPIO_DEBUG
27 //#define DBG(x...) printk(KERN_DEBUG x)
28 #define DBG(x...) printk(KERN_ERR x)
35 static si_t
*gpio_sih
;
42 if (!(gpio_sih
= si_kattach(SI_OSH
))) {
43 DBG("%s: si_kattach failed\n", __FUNCTION__
);
47 si_gpiosetcore(gpio_sih
);
58 /* GENERIC_GPIO calls */
59 int gpio_direction_input(unsigned gpio
)
63 ret
= si_gpioouten(gpio_sih
, (1<<gpio
), 0, GPIO_APP_PRIORITY
);
64 DBG("%s: gpio %d - input 0x%x\n", __FUNCTION__
, gpio
, ret
);
67 EXPORT_SYMBOL(gpio_direction_input
);
70 int gpio_direction_output(unsigned gpio
, int value
)
74 outen
= si_gpioouten(gpio_sih
, (1<<gpio
), (1<<gpio
), GPIO_APP_PRIORITY
);
75 out
= si_gpioout(gpio_sih
, (1<<gpio
), (value
? (1<<gpio
) : 0), GPIO_APP_PRIORITY
);
76 DBG("%s: gpio %d, value %d - out 0x%x outen 0x%x\n", __FUNCTION__
, gpio
, value
, out
, outen
);
79 EXPORT_SYMBOL(gpio_direction_output
);
81 int gpio_get_value(unsigned int gpio
)
84 get
= si_gpioin(gpio_sih
);
90 EXPORT_SYMBOL(gpio_get_value
);
92 void gpio_set_value(unsigned int gpio
, int value
)
94 si_gpioout(gpio_sih
, (1<<gpio
), (value
? (1<<gpio
) : 0), GPIO_APP_PRIORITY
);
97 EXPORT_SYMBOL(gpio_set_value
);
99 int gpio_request(unsigned int gpio
, const char *label
)
105 ret
= si_gpioreserve(gpio_sih
, (1<<gpio
), GPIO_APP_PRIORITY
);
106 DBG("%s: gpio %d label %s mask 0x%x reserve 0x%x\n", __FUNCTION__
, gpio
,
109 ret
= si_gpiocontrol(gpio_sih
, (1<<gpio
), 0, GPIO_APP_PRIORITY
);
110 DBG("%s: si_gpiocontrol 0x%x\n", __FUNCTION__
, ret
);
113 ret
= si_gpiopull(gpio_sih
, 1/*pulldown*/, (1<<gpio
), 0);
114 DBG("%s: si_gpiopull (down) 0x%x\n", __FUNCTION__
, ret
);
116 ret
= si_gpiopull(gpio_sih
, 0/*pullup*/, (1<<gpio
), (1<<gpio
));
117 DBG("%s: si_gpiopull (up) 0x%x\n", __FUNCTION__
, ret
);
121 EXPORT_SYMBOL(gpio_request
);
123 void gpio_free(unsigned int gpio
)
128 si_gpiopull(gpio_sih
, 0/*pullup*/, (1<<gpio
), GPIO_APP_PRIORITY
);
129 si_gpiorelease(gpio_sih
, (1<<gpio
), GPIO_APP_PRIORITY
);
131 DBG("%s: gpio %d mask 0x%x\n", __FUNCTION__
, gpio
, mask
);
134 EXPORT_SYMBOL(gpio_free
);
137 module_init(gen_gpio_init
);
138 module_exit(gen_gpio_exit
);