~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to arch/arm/mach-kirkwood/mpp.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
14
14
#include <linux/io.h>
15
15
#include <asm/gpio.h>
16
16
#include <mach/hardware.h>
 
17
#include <plat/mpp.h>
17
18
#include "common.h"
18
19
#include "mpp.h"
19
20
 
36
37
        return 0;
37
38
}
38
39
 
39
 
#define MPP_CTRL(i)     (DEV_BUS_VIRT_BASE + (i) * 4)
40
 
#define MPP_NR_REGS     (1 + MPP_MAX/8)
41
 
 
42
40
void __init kirkwood_mpp_conf(unsigned int *mpp_list)
43
41
{
44
 
        u32 mpp_ctrl[MPP_NR_REGS];
45
 
        unsigned int variant_mask;
46
 
        int i;
47
 
 
48
 
        variant_mask = kirkwood_variant();
49
 
        if (!variant_mask)
50
 
                return;
51
 
 
52
 
        printk(KERN_DEBUG "initial MPP regs:");
53
 
        for (i = 0; i < MPP_NR_REGS; i++) {
54
 
                mpp_ctrl[i] = readl(MPP_CTRL(i));
55
 
                printk(" %08x", mpp_ctrl[i]);
56
 
        }
57
 
        printk("\n");
58
 
 
59
 
        for ( ; *mpp_list; mpp_list++) {
60
 
                unsigned int num = MPP_NUM(*mpp_list);
61
 
                unsigned int sel = MPP_SEL(*mpp_list);
62
 
                int shift, gpio_mode;
63
 
 
64
 
                if (num > MPP_MAX) {
65
 
                        printk(KERN_ERR "kirkwood_mpp_conf: invalid MPP "
66
 
                                        "number (%u)\n", num);
67
 
                        continue;
68
 
                }
69
 
                if (!(*mpp_list & variant_mask)) {
70
 
                        printk(KERN_WARNING
71
 
                               "kirkwood_mpp_conf: requested MPP%u config "
72
 
                               "unavailable on this hardware\n", num);
73
 
                        continue;
74
 
                }
75
 
 
76
 
                shift = (num & 7) << 2;
77
 
                mpp_ctrl[num / 8] &= ~(0xf << shift);
78
 
                mpp_ctrl[num / 8] |= sel << shift;
79
 
 
80
 
                gpio_mode = 0;
81
 
                if (*mpp_list & MPP_INPUT_MASK)
82
 
                        gpio_mode |= GPIO_INPUT_OK;
83
 
                if (*mpp_list & MPP_OUTPUT_MASK)
84
 
                        gpio_mode |= GPIO_OUTPUT_OK;
85
 
                if (sel != 0)
86
 
                        gpio_mode = 0;
87
 
                orion_gpio_set_valid(num, gpio_mode);
88
 
        }
89
 
 
90
 
        printk(KERN_DEBUG "  final MPP regs:");
91
 
        for (i = 0; i < MPP_NR_REGS; i++) {
92
 
                writel(mpp_ctrl[i], MPP_CTRL(i));
93
 
                printk(" %08x", mpp_ctrl[i]);
94
 
        }
95
 
        printk("\n");
 
42
        orion_mpp_conf(mpp_list, kirkwood_variant(),
 
43
                       MPP_MAX, DEV_BUS_VIRT_BASE);
96
44
}