From: kfx Date: Tue, 9 Oct 2012 03:30:00 +0000 (+0800) Subject: rk2928: port config: add port operation interface X-Git-Tag: firefly_0821_release~8474 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d02bbcd5f481b147d8850137ed8701f8790353ce;p=firefly-linux-kernel-4.4.55.git rk2928: port config: add port operation interface --- diff --git a/arch/arm/mach-rk2928/include/mach/gpio.h b/arch/arm/mach-rk2928/include/mach/gpio.h index 24f2b08b9f1f..d6e8c368a2bf 100755 --- a/arch/arm/mach-rk2928/include/mach/gpio.h +++ b/arch/arm/mach-rk2928/include/mach/gpio.h @@ -373,6 +373,63 @@ static inline int irq_to_gpio(unsigned irq) { return irq - NR_GIC_IRQS + PIN_BASE; } +static inline int port_output_init(unsigned int value, int on, char *name) +{ + int ret = 0; + struct port_config port; + + port = get_port_config(value); + ret = gpio_request(port.gpio, name); + if(ret < 0) + return ret; + gpio_pull_updown(port.gpio, port.io.pull_mode); + gpio_direction_output(port.gpio, (on)? !port.io.active_low: !!port.io.active_low); + + return 0; +} +static inline void port_output_on(unsigned int value) +{ + struct port_config port; + + port = get_port_config(value); + gpio_set_value(port.gpio, !port.io.active_low); +} +static inline void port_output_off(unsigned int value) +{ + struct port_config port; + + port = get_port_config(value); + gpio_set_value(port.gpio, !!port.io.active_low); +} +static inline void port_deinit(unsigned int value) +{ + struct port_config port; + + port = get_port_config(value); + gpio_free(port.gpio); +} +static inline int port_input_init(unsigned int value, char *name) +{ + int ret = 0; + struct port_config port; + + port = get_port_config(value); + ret = gpio_request(port.gpio, name); + if(ret < 0) + return ret; + gpio_pull_updown(port.gpio, port.io.pull_mode); + gpio_direction_input(port.gpio); + + return 0; +} +static inline int port_get_value(unsigned int value) +{ + struct port_config port; + + port = get_port_config(value); + return gpio_get_value(port.gpio); +} + #endif /* __ASSEMBLY__ */ #endif diff --git a/arch/arm/mach-rk2928/iomux.c b/arch/arm/mach-rk2928/iomux.c index 81da2cb6ffdb..bcc6c625a78e 100755 --- a/arch/arm/mach-rk2928/iomux.c +++ b/arch/arm/mach-rk2928/iomux.c @@ -306,7 +306,7 @@ void gpio_set_iomux(int gpio) struct mux_config *cfg; cfg = &rk30_muxs[(gpio - PIN_BASE)]; - + cfg->mode = 0; rk30_mux_set(cfg); } EXPORT_SYMBOL(gpio_set_iomux);