]> git.karo-electronics.de Git - mv-sheeva.git/blobdiff - arch/arm/plat-mxc/iomux-v3.c
Merge tag 'v2.6.38' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[mv-sheeva.git] / arch / arm / plat-mxc / iomux-v3.c
index b318c6a222d50a990a689f67764e56682d05bd68..99a9cdb9d6be57b5a0de933865cbaa319435ffdf 100644 (file)
 static void __iomem *base;
 
 /*
- * setups a single pad in the iomuxer
+ * configures a single pad in the iomuxer
  */
-int mxc_iomux_v3_setup_pad(struct pad_desc *pad)
+int mxc_iomux_v3_setup_pad(iomux_v3_cfg_t pad)
 {
-       if (pad->mux_ctrl_ofs)
-               __raw_writel(pad->mux_mode, base + pad->mux_ctrl_ofs);
+       u32 mux_ctrl_ofs = (pad & MUX_CTRL_OFS_MASK) >> MUX_CTRL_OFS_SHIFT;
+       u32 mux_mode = (pad & MUX_MODE_MASK) >> MUX_MODE_SHIFT;
+       u32 sel_input_ofs = (pad & MUX_SEL_INPUT_OFS_MASK) >> MUX_SEL_INPUT_OFS_SHIFT;
+       u32 sel_input = (pad & MUX_SEL_INPUT_MASK) >> MUX_SEL_INPUT_SHIFT;
+       u32 pad_ctrl_ofs = (pad & MUX_PAD_CTRL_OFS_MASK) >> MUX_PAD_CTRL_OFS_SHIFT;
+       u32 pad_ctrl = (pad & MUX_PAD_CTRL_MASK) >> MUX_PAD_CTRL_SHIFT;
 
-       if (pad->select_input_ofs)
-               __raw_writel(pad->select_input,
-                               base + pad->select_input_ofs);
+       if (mux_ctrl_ofs)
+               __raw_writel(mux_mode, base + mux_ctrl_ofs);
+
+       if (sel_input_ofs)
+               __raw_writel(sel_input, base + sel_input_ofs);
+
+       if (!(pad_ctrl & NO_PAD_CTRL) && pad_ctrl_ofs)
+               __raw_writel(pad_ctrl, base + pad_ctrl_ofs);
 
-       if (!(pad->pad_ctrl & NO_PAD_CTRL) && pad->pad_ctrl_ofs)
-               __raw_writel(pad->pad_ctrl, base + pad->pad_ctrl_ofs);
        return 0;
 }
 EXPORT_SYMBOL(mxc_iomux_v3_setup_pad);
 
-int mxc_iomux_v3_setup_multiple_pads(struct pad_desc *pad_list, unsigned count)
+int mxc_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count)
 {
-       struct pad_desc *p = pad_list;
+       iomux_v3_cfg_t *p = pad_list;
        int i;
        int ret;
 
        for (i = 0; i < count; i++) {
-               ret = mxc_iomux_v3_setup_pad(p);
+               ret = mxc_iomux_v3_setup_pad(*p);
                if (ret)
                        return ret;
                p++;