From: kfx Date: Mon, 5 Aug 2013 08:04:24 +0000 (+0800) Subject: iomux: add interface: iomux_is_set(unsigned int mode) X-Git-Tag: firefly_0821_release~6755 X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=e97088419a1a9b162d02932c5e1d9b8c0eeb8c7b;p=firefly-linux-kernel-4.4.55.git iomux: add interface: iomux_is_set(unsigned int mode) return value: -1: mode is invalide 0 : mode is not set 1 : mode is set --- diff --git a/arch/arm/plat-rk/include/plat/iomux.h b/arch/arm/plat-rk/include/plat/iomux.h index c2c5fc5f3e4d..fe4a14132a71 100644 --- a/arch/arm/plat-rk/include/plat/iomux.h +++ b/arch/arm/plat-rk/include/plat/iomux.h @@ -11,4 +11,11 @@ void iomux_set_gpio_mode(int gpio); void iomux_set(unsigned int mode); void __init iomux_init(void); +/* return value: + * -1: mode is invalide + * 0: mode is not set + * 1: mode is set + */ +int iomux_is_set(unsigned int); + #endif diff --git a/arch/arm/plat-rk/iomux.c b/arch/arm/plat-rk/iomux.c index 89b354754c56..93e40ea0f862 100644 --- a/arch/arm/plat-rk/iomux.c +++ b/arch/arm/plat-rk/iomux.c @@ -96,12 +96,38 @@ void iomux_set(unsigned int mode) writel_relaxed(v, (void *)addr); } +int iomux_is_set(unsigned int mode) +{ + unsigned int v, addr, mask; + struct union_mode m; + + m.mode = mode; + if(!mode_is_valid(mode)){ + INFO("<%s> mode(0x%x) is invalid\n", __func__, mode); + return -1; + } + mask = 3; + v = (m.mux.mode << (m.mux.off * 2)) + (mask << (m.mux.off * 2 + 16)); + addr = (unsigned int)GRF_IOMUX_BASE + 16 * m.mux.bank + 4 * (m.mux.goff - 0x0A); + + if((readl_relaxed((void *)addr) & v) != 0) + return 1; + else if((mode & 0x03) == 0) //gpio mode + return 1; + else + return 0; +} #else void iomux_set(unsigned int mode) { INFO("%s is not support\n", __func__); return; } +int iomux_is_set(unsigned int mode) +{ + INFO("%s is not support\n", __func__); + return; +} #endif EXPORT_SYMBOL(iomux_set);