/*! * This function is used to configure a pin through the IOMUX module. * FIXED ME: for backward compatible. Will be static function! * @param pin a pin number as defined in \b #iomux_pin_name_t * @param cfg an output function as defined in \b #iomux_pin_cfg_t * * @return 0 if successful; Non-zero otherwise */ static int iomux_config_mux(iomux_pin_name_t pin, iomux_pin_cfg_t cfg) { u32 mux_reg = _get_mux_reg(pin); if ((mux_reg > _get_mux_end()) || (mux_reg < IOMUXSW_MUX_CTL)) return -1; if (cfg == IOMUX_CONFIG_GPIO) writel(PIN_TO_ALT_GPIO(pin), mux_reg); else writel(cfg, mux_reg); return 0; }
/*! * This function is used to configure a pin through the IOMUX module. * @param pin a pin number as defined in \b #iomux_pin_name_t * @param config a configuration as defined in \b #iomux_pin_cfg_t * * @return 0 if successful; Non-zero otherwise */ static int iomux_config_mux(iomux_pin_name_t pin, iomux_pin_cfg_t config) { u32 ret = 0; u32 pin_index = PIN_TO_IOMUX_INDEX(pin); void __iomem *mux_reg = _get_mux_reg(pin); u32 mux_data = 0; u8 *rp; BUG_ON((mux_reg > _get_mux_end()) || (mux_reg < IOMUXSW_MUX_CTL)); spin_lock(&gpio_mux_lock); if (config == IOMUX_CONFIG_GPIO) mux_data = PIN_TO_ALT_GPIO(pin); else mux_data = config; __raw_writel(mux_data, mux_reg); /* * Log a warning if a pin changes ownership */ rp = iomux_pin_res_table + pin_index; if ((mux_data & *rp) && (*rp != mux_data)) { /* * Don't call printk if we're tweaking the console uart or * we'll deadlock. */ printk(KERN_ERR "iomux_config_mux: Warning: iomux pin" " config changed, reg=%p, " " prev=0x%x new=0x%x\n", mux_reg, *rp, mux_data); ret = -EINVAL; } *rp = mux_data; spin_unlock(&gpio_mux_lock); return ret; }