diff options
Diffstat (limited to 'drivers/mfd/sm501.c')
-rw-r--r-- | drivers/mfd/sm501.c | 45 |
1 files changed, 13 insertions, 32 deletions
diff --git a/drivers/mfd/sm501.c b/drivers/mfd/sm501.c index afd82966f9a0..4de8d467762a 100644 --- a/drivers/mfd/sm501.c +++ b/drivers/mfd/sm501.c | |||
@@ -53,26 +53,7 @@ struct sm501_devdata { | |||
53 | #define MHZ (1000 * 1000) | 53 | #define MHZ (1000 * 1000) |
54 | 54 | ||
55 | #ifdef DEBUG | 55 | #ifdef DEBUG |
56 | static const unsigned int misc_div[] = { | 56 | static const unsigned int div_tab[] = { |
57 | [0] = 1, | ||
58 | [1] = 2, | ||
59 | [2] = 4, | ||
60 | [3] = 8, | ||
61 | [4] = 16, | ||
62 | [5] = 32, | ||
63 | [6] = 64, | ||
64 | [7] = 128, | ||
65 | [8] = 3, | ||
66 | [9] = 6, | ||
67 | [10] = 12, | ||
68 | [11] = 24, | ||
69 | [12] = 48, | ||
70 | [13] = 96, | ||
71 | [14] = 192, | ||
72 | [15] = 384, | ||
73 | }; | ||
74 | |||
75 | static const unsigned int px_div[] = { | ||
76 | [0] = 1, | 57 | [0] = 1, |
77 | [1] = 2, | 58 | [1] = 2, |
78 | [2] = 4, | 59 | [2] = 4, |
@@ -101,12 +82,12 @@ static const unsigned int px_div[] = { | |||
101 | 82 | ||
102 | static unsigned long decode_div(unsigned long pll2, unsigned long val, | 83 | static unsigned long decode_div(unsigned long pll2, unsigned long val, |
103 | unsigned int lshft, unsigned int selbit, | 84 | unsigned int lshft, unsigned int selbit, |
104 | unsigned long mask, const unsigned int *dtab) | 85 | unsigned long mask) |
105 | { | 86 | { |
106 | if (val & selbit) | 87 | if (val & selbit) |
107 | pll2 = 288 * MHZ; | 88 | pll2 = 288 * MHZ; |
108 | 89 | ||
109 | return pll2 / dtab[(val >> lshft) & mask]; | 90 | return pll2 / div_tab[(val >> lshft) & mask]; |
110 | } | 91 | } |
111 | 92 | ||
112 | #define fmt_freq(x) ((x) / MHZ), ((x) % MHZ), (x) | 93 | #define fmt_freq(x) ((x) / MHZ), ((x) % MHZ), (x) |
@@ -141,10 +122,10 @@ static void sm501_dump_clk(struct sm501_devdata *sm) | |||
141 | } | 122 | } |
142 | 123 | ||
143 | sdclk0 = (misct & (1<<12)) ? pll2 : 288 * MHZ; | 124 | sdclk0 = (misct & (1<<12)) ? pll2 : 288 * MHZ; |
144 | sdclk0 /= misc_div[((misct >> 8) & 0xf)]; | 125 | sdclk0 /= div_tab[((misct >> 8) & 0xf)]; |
145 | 126 | ||
146 | sdclk1 = (misct & (1<<20)) ? pll2 : 288 * MHZ; | 127 | sdclk1 = (misct & (1<<20)) ? pll2 : 288 * MHZ; |
147 | sdclk1 /= misc_div[((misct >> 16) & 0xf)]; | 128 | sdclk1 /= div_tab[((misct >> 16) & 0xf)]; |
148 | 129 | ||
149 | dev_dbg(sm->dev, "MISCT=%08lx, PM0=%08lx, PM1=%08lx\n", | 130 | dev_dbg(sm->dev, "MISCT=%08lx, PM0=%08lx, PM1=%08lx\n", |
150 | misct, pm0, pm1); | 131 | misct, pm0, pm1); |
@@ -158,19 +139,19 @@ static void sm501_dump_clk(struct sm501_devdata *sm) | |||
158 | "P2 %ld.%ld MHz (%ld), V2 %ld.%ld (%ld), " | 139 | "P2 %ld.%ld MHz (%ld), V2 %ld.%ld (%ld), " |
159 | "M %ld.%ld (%ld), MX1 %ld.%ld (%ld)\n", | 140 | "M %ld.%ld (%ld), MX1 %ld.%ld (%ld)\n", |
160 | (pmc & 3 ) == 0 ? '*' : '-', | 141 | (pmc & 3 ) == 0 ? '*' : '-', |
161 | fmt_freq(decode_div(pll2, pm0, 24, 1<<29, 31, px_div)), | 142 | fmt_freq(decode_div(pll2, pm0, 24, 1<<29, 31)), |
162 | fmt_freq(decode_div(pll2, pm0, 16, 1<<20, 15, misc_div)), | 143 | fmt_freq(decode_div(pll2, pm0, 16, 1<<20, 15)), |
163 | fmt_freq(decode_div(pll2, pm0, 8, 1<<12, 15, misc_div)), | 144 | fmt_freq(decode_div(pll2, pm0, 8, 1<<12, 15)), |
164 | fmt_freq(decode_div(pll2, pm0, 0, 1<<4, 15, misc_div))); | 145 | fmt_freq(decode_div(pll2, pm0, 0, 1<<4, 15))); |
165 | 146 | ||
166 | dev_dbg(sm->dev, "PM1[%c]: " | 147 | dev_dbg(sm->dev, "PM1[%c]: " |
167 | "P2 %ld.%ld MHz (%ld), V2 %ld.%ld (%ld), " | 148 | "P2 %ld.%ld MHz (%ld), V2 %ld.%ld (%ld), " |
168 | "M %ld.%ld (%ld), MX1 %ld.%ld (%ld)\n", | 149 | "M %ld.%ld (%ld), MX1 %ld.%ld (%ld)\n", |
169 | (pmc & 3 ) == 1 ? '*' : '-', | 150 | (pmc & 3 ) == 1 ? '*' : '-', |
170 | fmt_freq(decode_div(pll2, pm1, 24, 1<<29, 31, px_div)), | 151 | fmt_freq(decode_div(pll2, pm1, 24, 1<<29, 31)), |
171 | fmt_freq(decode_div(pll2, pm1, 16, 1<<20, 15, misc_div)), | 152 | fmt_freq(decode_div(pll2, pm1, 16, 1<<20, 15)), |
172 | fmt_freq(decode_div(pll2, pm1, 8, 1<<12, 15, misc_div)), | 153 | fmt_freq(decode_div(pll2, pm1, 8, 1<<12, 15)), |
173 | fmt_freq(decode_div(pll2, pm1, 0, 1<<4, 15, misc_div))); | 154 | fmt_freq(decode_div(pll2, pm1, 0, 1<<4, 15))); |
174 | } | 155 | } |
175 | 156 | ||
176 | static void sm501_dump_regs(struct sm501_devdata *sm) | 157 | static void sm501_dump_regs(struct sm501_devdata *sm) |