Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd/db5500-prcmu: delete DB5500 PRCMU support

This platform has been obsoleted and was only available inside of
ST-Ericsson, no users of this code are left in the world. This
deletes the core U5500 support entirely in the same manner as the
obsoleted U8500 silicon was previously deleted.

Cc: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
Cc: Rabin Vincent <rabin.vincent@stericsson.com>
Cc: Jonas Aberg <jonas.aberg@stericsson.com>
Cc: Per Forlin <per.forlin@stericsson.com>
Cc: Ulf Hansson <ulf.hansson@stericsson.com>
Acked-by: Samuel Ortiz <sameo@linux.intel.com>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

+43 -766
-10
drivers/mfd/Kconfig
··· 711 711 system controller running an XP70 microprocessor, which is accessed 712 712 through a register map. 713 713 714 - config MFD_DB5500_PRCMU 715 - bool "ST-Ericsson DB5500 Power Reset Control Management Unit" 716 - depends on UX500_SOC_DB5500 717 - select MFD_CORE 718 - help 719 - Select this option to enable support for the DB5500 Power Reset 720 - and Control Management Unit. This is basically an autonomous 721 - system controller running an XP70 microprocessor, which is accessed 722 - through a register map. 723 - 724 714 config MFD_CS5535 725 715 tristate "Support for CS5535 and CS5536 southbridge core functions" 726 716 select MFD_CORE
-1
drivers/mfd/Makefile
··· 95 95 obj-$(CONFIG_MFD_DB8500_PRCMU) += db8500-prcmu.o 96 96 # ab8500-i2c need to come after db8500-prcmu (which provides the channel) 97 97 obj-$(CONFIG_AB8500_I2C_CORE) += ab8500-i2c.o 98 - obj-$(CONFIG_MFD_DB5500_PRCMU) += db5500-prcmu.o 99 98 obj-$(CONFIG_MFD_TIMBERDALE) += timberdale.o 100 99 obj-$(CONFIG_PMIC_ADP5520) += adp5520.o 101 100 obj-$(CONFIG_LPC_SCH) += lpc_sch.o
-451
drivers/mfd/db5500-prcmu.c
··· 1 - /* 2 - * Copyright (C) ST-Ericsson SA 2010 3 - * 4 - * License Terms: GNU General Public License v2 5 - * Author: Mattias Nilsson <mattias.i.nilsson@stericsson.com> 6 - * 7 - * U5500 PRCM Unit interface driver 8 - */ 9 - #include <linux/module.h> 10 - #include <linux/kernel.h> 11 - #include <linux/delay.h> 12 - #include <linux/errno.h> 13 - #include <linux/err.h> 14 - #include <linux/spinlock.h> 15 - #include <linux/io.h> 16 - #include <linux/slab.h> 17 - #include <linux/mutex.h> 18 - #include <linux/completion.h> 19 - #include <linux/irq.h> 20 - #include <linux/jiffies.h> 21 - #include <linux/bitops.h> 22 - #include <linux/interrupt.h> 23 - #include <linux/mfd/dbx500-prcmu.h> 24 - #include <mach/hardware.h> 25 - #include <mach/irqs.h> 26 - #include <mach/db5500-regs.h> 27 - #include "dbx500-prcmu-regs.h" 28 - 29 - #define _PRCM_MB_HEADER (tcdm_base + 0xFE8) 30 - #define PRCM_REQ_MB0_HEADER (_PRCM_MB_HEADER + 0x0) 31 - #define PRCM_REQ_MB1_HEADER (_PRCM_MB_HEADER + 0x1) 32 - #define PRCM_REQ_MB2_HEADER (_PRCM_MB_HEADER + 0x2) 33 - #define PRCM_REQ_MB3_HEADER (_PRCM_MB_HEADER + 0x3) 34 - #define PRCM_REQ_MB4_HEADER (_PRCM_MB_HEADER + 0x4) 35 - #define PRCM_REQ_MB5_HEADER (_PRCM_MB_HEADER + 0x5) 36 - #define PRCM_REQ_MB6_HEADER (_PRCM_MB_HEADER + 0x6) 37 - #define PRCM_REQ_MB7_HEADER (_PRCM_MB_HEADER + 0x7) 38 - #define PRCM_ACK_MB0_HEADER (_PRCM_MB_HEADER + 0x8) 39 - #define PRCM_ACK_MB1_HEADER (_PRCM_MB_HEADER + 0x9) 40 - #define PRCM_ACK_MB2_HEADER (_PRCM_MB_HEADER + 0xa) 41 - #define PRCM_ACK_MB3_HEADER (_PRCM_MB_HEADER + 0xb) 42 - #define PRCM_ACK_MB4_HEADER (_PRCM_MB_HEADER + 0xc) 43 - #define PRCM_ACK_MB5_HEADER (_PRCM_MB_HEADER + 0xd) 44 - #define PRCM_ACK_MB6_HEADER (_PRCM_MB_HEADER + 0xe) 45 - #define PRCM_ACK_MB7_HEADER (_PRCM_MB_HEADER + 0xf) 46 - 47 - /* Req Mailboxes */ 48 - #define PRCM_REQ_MB0 (tcdm_base + 0xFD8) 49 - #define PRCM_REQ_MB1 (tcdm_base + 0xFCC) 50 - #define PRCM_REQ_MB2 (tcdm_base + 0xFC4) 51 - #define PRCM_REQ_MB3 (tcdm_base + 0xFC0) 52 - #define PRCM_REQ_MB4 (tcdm_base + 0xF98) 53 - #define PRCM_REQ_MB5 (tcdm_base + 0xF90) 54 - #define PRCM_REQ_MB6 (tcdm_base + 0xF8C) 55 - #define PRCM_REQ_MB7 (tcdm_base + 0xF84) 56 - 57 - /* Ack Mailboxes */ 58 - #define PRCM_ACK_MB0 (tcdm_base + 0xF38) 59 - #define PRCM_ACK_MB1 (tcdm_base + 0xF30) 60 - #define PRCM_ACK_MB2 (tcdm_base + 0xF24) 61 - #define PRCM_ACK_MB3 (tcdm_base + 0xF20) 62 - #define PRCM_ACK_MB4 (tcdm_base + 0xF1C) 63 - #define PRCM_ACK_MB5 (tcdm_base + 0xF14) 64 - #define PRCM_ACK_MB6 (tcdm_base + 0xF0C) 65 - #define PRCM_ACK_MB7 (tcdm_base + 0xF08) 66 - 67 - enum mb_return_code { 68 - RC_SUCCESS, 69 - RC_FAIL, 70 - }; 71 - 72 - /* Mailbox 0 headers. */ 73 - enum mb0_header { 74 - /* request */ 75 - RMB0H_PWR_STATE_TRANS = 1, 76 - RMB0H_WAKE_UP_CFG, 77 - RMB0H_RD_WAKE_UP_ACK, 78 - /* acknowledge */ 79 - AMB0H_WAKE_UP = 1, 80 - }; 81 - 82 - /* Mailbox 5 headers. */ 83 - enum mb5_header { 84 - MB5H_I2C_WRITE = 1, 85 - MB5H_I2C_READ, 86 - }; 87 - 88 - /* Request mailbox 5 fields. */ 89 - #define PRCM_REQ_MB5_I2C_SLAVE (PRCM_REQ_MB5 + 0) 90 - #define PRCM_REQ_MB5_I2C_REG (PRCM_REQ_MB5 + 1) 91 - #define PRCM_REQ_MB5_I2C_SIZE (PRCM_REQ_MB5 + 2) 92 - #define PRCM_REQ_MB5_I2C_DATA (PRCM_REQ_MB5 + 4) 93 - 94 - /* Acknowledge mailbox 5 fields. */ 95 - #define PRCM_ACK_MB5_RETURN_CODE (PRCM_ACK_MB5 + 0) 96 - #define PRCM_ACK_MB5_I2C_DATA (PRCM_ACK_MB5 + 4) 97 - 98 - #define NUM_MB 8 99 - #define MBOX_BIT BIT 100 - #define ALL_MBOX_BITS (MBOX_BIT(NUM_MB) - 1) 101 - 102 - /* 103 - * Used by MCDE to setup all necessary PRCMU registers 104 - */ 105 - #define PRCMU_RESET_DSIPLL 0x00004000 106 - #define PRCMU_UNCLAMP_DSIPLL 0x00400800 107 - 108 - /* HDMI CLK MGT PLLSW=001 (PLLSOC0), PLLDIV=0x8, = 50 Mhz*/ 109 - #define PRCMU_DSI_CLOCK_SETTING 0x00000128 110 - /* TVCLK_MGT PLLSW=001 (PLLSOC0) PLLDIV=0x13, = 19.05 MHZ */ 111 - #define PRCMU_DSI_LP_CLOCK_SETTING 0x00000135 112 - #define PRCMU_PLLDSI_FREQ_SETTING 0x00020121 113 - #define PRCMU_DSI_PLLOUT_SEL_SETTING 0x00000002 114 - #define PRCMU_ENABLE_ESCAPE_CLOCK_DIV 0x03000201 115 - #define PRCMU_DISABLE_ESCAPE_CLOCK_DIV 0x00000101 116 - 117 - #define PRCMU_ENABLE_PLLDSI 0x00000001 118 - #define PRCMU_DISABLE_PLLDSI 0x00000000 119 - 120 - #define PRCMU_DSI_RESET_SW 0x00000003 121 - #define PRCMU_RESOUTN0_PIN 0x00000001 122 - #define PRCMU_RESOUTN1_PIN 0x00000002 123 - #define PRCMU_RESOUTN2_PIN 0x00000004 124 - 125 - #define PRCMU_PLLDSI_LOCKP_LOCKED 0x3 126 - 127 - /* 128 - * mb0_transfer - state needed for mailbox 0 communication. 129 - * @lock: The transaction lock. 130 - */ 131 - static struct { 132 - spinlock_t lock; 133 - } mb0_transfer; 134 - 135 - /* 136 - * mb5_transfer - state needed for mailbox 5 communication. 137 - * @lock: The transaction lock. 138 - * @work: The transaction completion structure. 139 - * @ack: Reply ("acknowledge") data. 140 - */ 141 - static struct { 142 - struct mutex lock; 143 - struct completion work; 144 - struct { 145 - u8 header; 146 - u8 status; 147 - u8 value[4]; 148 - } ack; 149 - } mb5_transfer; 150 - 151 - /* PRCMU TCDM base IO address. */ 152 - static __iomem void *tcdm_base; 153 - 154 - /** 155 - * db5500_prcmu_abb_read() - Read register value(s) from the ABB. 156 - * @slave: The I2C slave address. 157 - * @reg: The (start) register address. 158 - * @value: The read out value(s). 159 - * @size: The number of registers to read. 160 - * 161 - * Reads register value(s) from the ABB. 162 - * @size has to be <= 4. 163 - */ 164 - int db5500_prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size) 165 - { 166 - int r; 167 - 168 - if ((size < 1) || (4 < size)) 169 - return -EINVAL; 170 - 171 - mutex_lock(&mb5_transfer.lock); 172 - 173 - while (readl(PRCM_MBOX_CPU_VAL) & MBOX_BIT(5)) 174 - cpu_relax(); 175 - writeb(slave, PRCM_REQ_MB5_I2C_SLAVE); 176 - writeb(reg, PRCM_REQ_MB5_I2C_REG); 177 - writeb(size, PRCM_REQ_MB5_I2C_SIZE); 178 - writeb(MB5H_I2C_READ, PRCM_REQ_MB5_HEADER); 179 - 180 - writel(MBOX_BIT(5), PRCM_MBOX_CPU_SET); 181 - wait_for_completion(&mb5_transfer.work); 182 - 183 - r = 0; 184 - if ((mb5_transfer.ack.header == MB5H_I2C_READ) && 185 - (mb5_transfer.ack.status == RC_SUCCESS)) 186 - memcpy(value, mb5_transfer.ack.value, (size_t)size); 187 - else 188 - r = -EIO; 189 - 190 - mutex_unlock(&mb5_transfer.lock); 191 - 192 - return r; 193 - } 194 - 195 - /** 196 - * db5500_prcmu_abb_write() - Write register value(s) to the ABB. 197 - * @slave: The I2C slave address. 198 - * @reg: The (start) register address. 199 - * @value: The value(s) to write. 200 - * @size: The number of registers to write. 201 - * 202 - * Writes register value(s) to the ABB. 203 - * @size has to be <= 4. 204 - */ 205 - int db5500_prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size) 206 - { 207 - int r; 208 - 209 - if ((size < 1) || (4 < size)) 210 - return -EINVAL; 211 - 212 - mutex_lock(&mb5_transfer.lock); 213 - 214 - while (readl(PRCM_MBOX_CPU_VAL) & MBOX_BIT(5)) 215 - cpu_relax(); 216 - writeb(slave, PRCM_REQ_MB5_I2C_SLAVE); 217 - writeb(reg, PRCM_REQ_MB5_I2C_REG); 218 - writeb(size, PRCM_REQ_MB5_I2C_SIZE); 219 - memcpy_toio(PRCM_REQ_MB5_I2C_DATA, value, size); 220 - writeb(MB5H_I2C_WRITE, PRCM_REQ_MB5_HEADER); 221 - 222 - writel(MBOX_BIT(5), PRCM_MBOX_CPU_SET); 223 - wait_for_completion(&mb5_transfer.work); 224 - 225 - if ((mb5_transfer.ack.header == MB5H_I2C_WRITE) && 226 - (mb5_transfer.ack.status == RC_SUCCESS)) 227 - r = 0; 228 - else 229 - r = -EIO; 230 - 231 - mutex_unlock(&mb5_transfer.lock); 232 - 233 - return r; 234 - } 235 - 236 - int db5500_prcmu_enable_dsipll(void) 237 - { 238 - int i; 239 - 240 - /* Enable DSIPLL_RESETN resets */ 241 - writel(PRCMU_RESET_DSIPLL, PRCM_APE_RESETN_CLR); 242 - /* Unclamp DSIPLL in/out */ 243 - writel(PRCMU_UNCLAMP_DSIPLL, PRCM_MMIP_LS_CLAMP_CLR); 244 - /* Set DSI PLL FREQ */ 245 - writel(PRCMU_PLLDSI_FREQ_SETTING, PRCM_PLLDSI_FREQ); 246 - writel(PRCMU_DSI_PLLOUT_SEL_SETTING, 247 - PRCM_DSI_PLLOUT_SEL); 248 - /* Enable Escape clocks */ 249 - writel(PRCMU_ENABLE_ESCAPE_CLOCK_DIV, PRCM_DSITVCLK_DIV); 250 - 251 - /* Start DSI PLL */ 252 - writel(PRCMU_ENABLE_PLLDSI, PRCM_PLLDSI_ENABLE); 253 - /* Reset DSI PLL */ 254 - writel(PRCMU_DSI_RESET_SW, PRCM_DSI_SW_RESET); 255 - for (i = 0; i < 10; i++) { 256 - if ((readl(PRCM_PLLDSI_LOCKP) & 257 - PRCMU_PLLDSI_LOCKP_LOCKED) == PRCMU_PLLDSI_LOCKP_LOCKED) 258 - break; 259 - udelay(100); 260 - } 261 - /* Release DSIPLL_RESETN */ 262 - writel(PRCMU_RESET_DSIPLL, PRCM_APE_RESETN_SET); 263 - return 0; 264 - } 265 - 266 - int db5500_prcmu_disable_dsipll(void) 267 - { 268 - /* Disable dsi pll */ 269 - writel(PRCMU_DISABLE_PLLDSI, PRCM_PLLDSI_ENABLE); 270 - /* Disable escapeclock */ 271 - writel(PRCMU_DISABLE_ESCAPE_CLOCK_DIV, PRCM_DSITVCLK_DIV); 272 - return 0; 273 - } 274 - 275 - int db5500_prcmu_set_display_clocks(void) 276 - { 277 - /* HDMI and TVCLK Should be handled somewhere else */ 278 - /* PLLDIV=8, PLLSW=2, CLKEN=1 */ 279 - writel(PRCMU_DSI_CLOCK_SETTING, PRCM_HDMICLK_MGT); 280 - /* PLLDIV=14, PLLSW=2, CLKEN=1 */ 281 - writel(PRCMU_DSI_LP_CLOCK_SETTING, PRCM_TVCLK_MGT); 282 - return 0; 283 - } 284 - 285 - static void ack_dbb_wakeup(void) 286 - { 287 - unsigned long flags; 288 - 289 - spin_lock_irqsave(&mb0_transfer.lock, flags); 290 - 291 - while (readl(PRCM_MBOX_CPU_VAL) & MBOX_BIT(0)) 292 - cpu_relax(); 293 - 294 - writeb(RMB0H_RD_WAKE_UP_ACK, PRCM_REQ_MB0_HEADER); 295 - writel(MBOX_BIT(0), PRCM_MBOX_CPU_SET); 296 - 297 - spin_unlock_irqrestore(&mb0_transfer.lock, flags); 298 - } 299 - 300 - static inline void print_unknown_header_warning(u8 n, u8 header) 301 - { 302 - pr_warning("prcmu: Unknown message header (%d) in mailbox %d.\n", 303 - header, n); 304 - } 305 - 306 - static bool read_mailbox_0(void) 307 - { 308 - bool r; 309 - u8 header; 310 - 311 - header = readb(PRCM_ACK_MB0_HEADER); 312 - switch (header) { 313 - case AMB0H_WAKE_UP: 314 - r = true; 315 - break; 316 - default: 317 - print_unknown_header_warning(0, header); 318 - r = false; 319 - break; 320 - } 321 - writel(MBOX_BIT(0), PRCM_ARM_IT1_CLR); 322 - return r; 323 - } 324 - 325 - static bool read_mailbox_1(void) 326 - { 327 - writel(MBOX_BIT(1), PRCM_ARM_IT1_CLR); 328 - return false; 329 - } 330 - 331 - static bool read_mailbox_2(void) 332 - { 333 - writel(MBOX_BIT(2), PRCM_ARM_IT1_CLR); 334 - return false; 335 - } 336 - 337 - static bool read_mailbox_3(void) 338 - { 339 - writel(MBOX_BIT(3), PRCM_ARM_IT1_CLR); 340 - return false; 341 - } 342 - 343 - static bool read_mailbox_4(void) 344 - { 345 - writel(MBOX_BIT(4), PRCM_ARM_IT1_CLR); 346 - return false; 347 - } 348 - 349 - static bool read_mailbox_5(void) 350 - { 351 - u8 header; 352 - 353 - header = readb(PRCM_ACK_MB5_HEADER); 354 - switch (header) { 355 - case MB5H_I2C_READ: 356 - memcpy_fromio(mb5_transfer.ack.value, PRCM_ACK_MB5_I2C_DATA, 4); 357 - case MB5H_I2C_WRITE: 358 - mb5_transfer.ack.header = header; 359 - mb5_transfer.ack.status = readb(PRCM_ACK_MB5_RETURN_CODE); 360 - complete(&mb5_transfer.work); 361 - break; 362 - default: 363 - print_unknown_header_warning(5, header); 364 - break; 365 - } 366 - writel(MBOX_BIT(5), PRCM_ARM_IT1_CLR); 367 - return false; 368 - } 369 - 370 - static bool read_mailbox_6(void) 371 - { 372 - writel(MBOX_BIT(6), PRCM_ARM_IT1_CLR); 373 - return false; 374 - } 375 - 376 - static bool read_mailbox_7(void) 377 - { 378 - writel(MBOX_BIT(7), PRCM_ARM_IT1_CLR); 379 - return false; 380 - } 381 - 382 - static bool (* const read_mailbox[NUM_MB])(void) = { 383 - read_mailbox_0, 384 - read_mailbox_1, 385 - read_mailbox_2, 386 - read_mailbox_3, 387 - read_mailbox_4, 388 - read_mailbox_5, 389 - read_mailbox_6, 390 - read_mailbox_7 391 - }; 392 - 393 - static irqreturn_t prcmu_irq_handler(int irq, void *data) 394 - { 395 - u32 bits; 396 - u8 n; 397 - irqreturn_t r; 398 - 399 - bits = (readl(PRCM_ARM_IT1_VAL) & ALL_MBOX_BITS); 400 - if (unlikely(!bits)) 401 - return IRQ_NONE; 402 - 403 - r = IRQ_HANDLED; 404 - for (n = 0; bits; n++) { 405 - if (bits & MBOX_BIT(n)) { 406 - bits -= MBOX_BIT(n); 407 - if (read_mailbox[n]()) 408 - r = IRQ_WAKE_THREAD; 409 - } 410 - } 411 - return r; 412 - } 413 - 414 - static irqreturn_t prcmu_irq_thread_fn(int irq, void *data) 415 - { 416 - ack_dbb_wakeup(); 417 - return IRQ_HANDLED; 418 - } 419 - 420 - void __init db5500_prcmu_early_init(void) 421 - { 422 - tcdm_base = __io_address(U5500_PRCMU_TCDM_BASE); 423 - spin_lock_init(&mb0_transfer.lock); 424 - mutex_init(&mb5_transfer.lock); 425 - init_completion(&mb5_transfer.work); 426 - } 427 - 428 - /** 429 - * prcmu_fw_init - arch init call for the Linux PRCMU fw init logic 430 - * 431 - */ 432 - int __init db5500_prcmu_init(void) 433 - { 434 - int r = 0; 435 - 436 - if (ux500_is_svp() || !cpu_is_u5500()) 437 - return -ENODEV; 438 - 439 - /* Clean up the mailbox interrupts after pre-kernel code. */ 440 - writel(ALL_MBOX_BITS, PRCM_ARM_IT1_CLR); 441 - 442 - r = request_threaded_irq(IRQ_DB5500_PRCMU1, prcmu_irq_handler, 443 - prcmu_irq_thread_fn, 0, "prcmu", NULL); 444 - if (r < 0) { 445 - pr_err("prcmu: Failed to allocate IRQ_DB5500_PRCMU1.\n"); 446 - return -EBUSY; 447 - } 448 - return 0; 449 - } 450 - 451 - arch_initcall(db5500_prcmu_init);
-105
include/linux/mfd/db5500-prcmu.h
··· 1 - /* 2 - * Copyright (C) ST-Ericsson SA 2010 3 - * 4 - * License Terms: GNU General Public License v2 5 - * 6 - * U5500 PRCMU API. 7 - */ 8 - #ifndef __MFD_DB5500_PRCMU_H 9 - #define __MFD_DB5500_PRCMU_H 10 - 11 - static inline int prcmu_resetout(u8 resoutn, u8 state) 12 - { 13 - return 0; 14 - } 15 - 16 - static inline int db5500_prcmu_set_epod(u16 epod_id, u8 epod_state) 17 - { 18 - return 0; 19 - } 20 - 21 - static inline int db5500_prcmu_request_clock(u8 clock, bool enable) 22 - { 23 - return 0; 24 - } 25 - 26 - static inline int db5500_prcmu_set_power_state(u8 state, bool keep_ulp_clk, 27 - bool keep_ap_pll) 28 - { 29 - return 0; 30 - } 31 - 32 - static inline int db5500_prcmu_config_esram0_deep_sleep(u8 state) 33 - { 34 - return 0; 35 - } 36 - 37 - static inline u16 db5500_prcmu_get_reset_code(void) 38 - { 39 - return 0; 40 - } 41 - 42 - static inline bool db5500_prcmu_is_ac_wake_requested(void) 43 - { 44 - return 0; 45 - } 46 - 47 - static inline int db5500_prcmu_set_arm_opp(u8 opp) 48 - { 49 - return 0; 50 - } 51 - 52 - static inline int db5500_prcmu_get_arm_opp(void) 53 - { 54 - return 0; 55 - } 56 - 57 - static inline void db5500_prcmu_config_abb_event_readout(u32 abb_events) {} 58 - 59 - static inline void db5500_prcmu_get_abb_event_buffer(void __iomem **buf) {} 60 - 61 - static inline void db5500_prcmu_system_reset(u16 reset_code) {} 62 - 63 - static inline void db5500_prcmu_enable_wakeups(u32 wakeups) {} 64 - 65 - #ifdef CONFIG_MFD_DB5500_PRCMU 66 - 67 - void db5500_prcmu_early_init(void); 68 - int db5500_prcmu_set_display_clocks(void); 69 - int db5500_prcmu_disable_dsipll(void); 70 - int db5500_prcmu_enable_dsipll(void); 71 - int db5500_prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size); 72 - int db5500_prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size); 73 - 74 - #else /* !CONFIG_UX500_SOC_DB5500 */ 75 - 76 - static inline void db5500_prcmu_early_init(void) {} 77 - 78 - static inline int db5500_prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size) 79 - { 80 - return -ENOSYS; 81 - } 82 - 83 - static inline int db5500_prcmu_abb_write(u8 slave, u8 reg, u8 *value, u8 size) 84 - { 85 - return -ENOSYS; 86 - } 87 - 88 - static inline int db5500_prcmu_set_display_clocks(void) 89 - { 90 - return 0; 91 - } 92 - 93 - static inline int db5500_prcmu_disable_dsipll(void) 94 - { 95 - return 0; 96 - } 97 - 98 - static inline int db5500_prcmu_enable_dsipll(void) 99 - { 100 - return 0; 101 - } 102 - 103 - #endif /* CONFIG_MFD_DB5500_PRCMU */ 104 - 105 - #endif /* __MFD_DB5500_PRCMU_H */
+43 -199
include/linux/mfd/dbx500-prcmu.h
··· 55 55 #define NUM_EPOD_ID 8 56 56 57 57 /* 58 - * DB5500 EPODs 59 - */ 60 - #define DB5500_EPOD_ID_BASE 0x0100 61 - #define DB5500_EPOD_ID_SGA (DB5500_EPOD_ID_BASE + 0) 62 - #define DB5500_EPOD_ID_HVA (DB5500_EPOD_ID_BASE + 1) 63 - #define DB5500_EPOD_ID_SIA (DB5500_EPOD_ID_BASE + 2) 64 - #define DB5500_EPOD_ID_DISP (DB5500_EPOD_ID_BASE + 3) 65 - #define DB5500_EPOD_ID_ESRAM12 (DB5500_EPOD_ID_BASE + 6) 66 - #define DB5500_NUM_EPOD_ID 7 67 - 68 - /* 69 58 * state definition for EPOD (power domain) 70 59 * - EPOD_STATE_NO_CHANGE: The EPOD should remain unchanged 71 60 * - EPOD_STATE_OFF: The EPOD is switched off ··· 68 79 #define EPOD_STATE_RAMRET 0x02 69 80 #define EPOD_STATE_ON_CLK_OFF 0x03 70 81 #define EPOD_STATE_ON 0x04 71 - 72 - /* DB5500 CLKOUT IDs */ 73 - enum { 74 - DB5500_CLKOUT0 = 0, 75 - DB5500_CLKOUT1, 76 - }; 77 - 78 - /* DB5500 CLKOUTx sources */ 79 - enum { 80 - DB5500_CLKOUT_REF_CLK_SEL0, 81 - DB5500_CLKOUT_RTC_CLK0_SEL0, 82 - DB5500_CLKOUT_ULP_CLK_SEL0, 83 - DB5500_CLKOUT_STATIC0, 84 - DB5500_CLKOUT_REFCLK, 85 - DB5500_CLKOUT_ULPCLK, 86 - DB5500_CLKOUT_ARMCLK, 87 - DB5500_CLKOUT_SYSACC0CLK, 88 - DB5500_CLKOUT_SOC0PLLCLK, 89 - DB5500_CLKOUT_SOC1PLLCLK, 90 - DB5500_CLKOUT_DDRPLLCLK, 91 - DB5500_CLKOUT_TVCLK, 92 - DB5500_CLKOUT_IRDACLK, 93 - }; 94 82 95 83 /* 96 84 * CLKOUT sources ··· 214 248 }; 215 249 216 250 #include <linux/mfd/db8500-prcmu.h> 217 - #include <linux/mfd/db5500-prcmu.h> 218 251 219 - #if defined(CONFIG_UX500_SOC_DB8500) || defined(CONFIG_UX500_SOC_DB5500) 252 + #if defined(CONFIG_UX500_SOC_DB8500) 220 253 221 254 #include <mach/id.h> 222 255 223 256 static inline void __init prcmu_early_init(void) 224 257 { 225 - if (cpu_is_u5500()) 226 - return db5500_prcmu_early_init(); 227 - else 228 - return db8500_prcmu_early_init(); 258 + return db8500_prcmu_early_init(); 229 259 } 230 260 231 261 static inline int prcmu_set_power_state(u8 state, bool keep_ulp_clk, 232 262 bool keep_ap_pll) 233 263 { 234 - if (cpu_is_u5500()) 235 - return db5500_prcmu_set_power_state(state, keep_ulp_clk, 236 - keep_ap_pll); 237 - else 238 - return db8500_prcmu_set_power_state(state, keep_ulp_clk, 239 - keep_ap_pll); 264 + return db8500_prcmu_set_power_state(state, keep_ulp_clk, 265 + keep_ap_pll); 240 266 } 241 267 242 268 static inline u8 prcmu_get_power_state_result(void) 243 269 { 244 - if (cpu_is_u5500()) 245 - return -EINVAL; 246 - else 247 - return db8500_prcmu_get_power_state_result(); 270 + return db8500_prcmu_get_power_state_result(); 248 271 } 249 272 250 273 static inline int prcmu_gic_decouple(void) 251 274 { 252 - if (cpu_is_u5500()) 253 - return -EINVAL; 254 - else 255 - return db8500_prcmu_gic_decouple(); 275 + return db8500_prcmu_gic_decouple(); 256 276 } 257 277 258 278 static inline int prcmu_gic_recouple(void) 259 279 { 260 - if (cpu_is_u5500()) 261 - return -EINVAL; 262 - else 263 - return db8500_prcmu_gic_recouple(); 280 + return db8500_prcmu_gic_recouple(); 264 281 } 265 282 266 283 static inline bool prcmu_gic_pending_irq(void) 267 284 { 268 - if (cpu_is_u5500()) 269 - return -EINVAL; 270 - else 271 - return db8500_prcmu_gic_pending_irq(); 285 + return db8500_prcmu_gic_pending_irq(); 272 286 } 273 287 274 288 static inline bool prcmu_is_cpu_in_wfi(int cpu) 275 289 { 276 - if (cpu_is_u5500()) 277 - return -EINVAL; 278 - else 279 - return db8500_prcmu_is_cpu_in_wfi(cpu); 290 + return db8500_prcmu_is_cpu_in_wfi(cpu); 280 291 } 281 292 282 293 static inline int prcmu_copy_gic_settings(void) 283 294 { 284 - if (cpu_is_u5500()) 285 - return -EINVAL; 286 - else 287 - return db8500_prcmu_copy_gic_settings(); 295 + return db8500_prcmu_copy_gic_settings(); 288 296 } 289 297 290 298 static inline bool prcmu_pending_irq(void) 291 299 { 292 - if (cpu_is_u5500()) 293 - return -EINVAL; 294 - else 295 - return db8500_prcmu_pending_irq(); 300 + return db8500_prcmu_pending_irq(); 296 301 } 297 302 298 303 static inline int prcmu_set_epod(u16 epod_id, u8 epod_state) 299 304 { 300 - if (cpu_is_u5500()) 301 - return -EINVAL; 302 - else 303 - return db8500_prcmu_set_epod(epod_id, epod_state); 305 + return db8500_prcmu_set_epod(epod_id, epod_state); 304 306 } 305 307 306 308 static inline void prcmu_enable_wakeups(u32 wakeups) 307 309 { 308 - if (cpu_is_u5500()) 309 - db5500_prcmu_enable_wakeups(wakeups); 310 - else 311 - db8500_prcmu_enable_wakeups(wakeups); 310 + db8500_prcmu_enable_wakeups(wakeups); 312 311 } 313 312 314 313 static inline void prcmu_disable_wakeups(void) ··· 283 352 284 353 static inline void prcmu_config_abb_event_readout(u32 abb_events) 285 354 { 286 - if (cpu_is_u5500()) 287 - db5500_prcmu_config_abb_event_readout(abb_events); 288 - else 289 - db8500_prcmu_config_abb_event_readout(abb_events); 355 + db8500_prcmu_config_abb_event_readout(abb_events); 290 356 } 291 357 292 358 static inline void prcmu_get_abb_event_buffer(void __iomem **buf) 293 359 { 294 - if (cpu_is_u5500()) 295 - db5500_prcmu_get_abb_event_buffer(buf); 296 - else 297 - db8500_prcmu_get_abb_event_buffer(buf); 360 + db8500_prcmu_get_abb_event_buffer(buf); 298 361 } 299 362 300 363 int prcmu_abb_read(u8 slave, u8 reg, u8 *value, u8 size); ··· 299 374 300 375 static inline int prcmu_request_clock(u8 clock, bool enable) 301 376 { 302 - if (cpu_is_u5500()) 303 - return db5500_prcmu_request_clock(clock, enable); 304 - else 305 - return db8500_prcmu_request_clock(clock, enable); 377 + return db8500_prcmu_request_clock(clock, enable); 306 378 } 307 379 308 380 unsigned long prcmu_clock_rate(u8 clock); ··· 308 386 309 387 static inline int prcmu_set_ddr_opp(u8 opp) 310 388 { 311 - if (cpu_is_u5500()) 312 - return -EINVAL; 313 - else 314 - return db8500_prcmu_set_ddr_opp(opp); 389 + return db8500_prcmu_set_ddr_opp(opp); 315 390 } 316 391 static inline int prcmu_get_ddr_opp(void) 317 392 { 318 - if (cpu_is_u5500()) 319 - return -EINVAL; 320 - else 321 - return db8500_prcmu_get_ddr_opp(); 393 + return db8500_prcmu_get_ddr_opp(); 322 394 } 323 395 324 396 static inline int prcmu_set_arm_opp(u8 opp) 325 397 { 326 - if (cpu_is_u5500()) 327 - return -EINVAL; 328 - else 329 - return db8500_prcmu_set_arm_opp(opp); 398 + return db8500_prcmu_set_arm_opp(opp); 330 399 } 331 400 332 401 static inline int prcmu_get_arm_opp(void) 333 402 { 334 - if (cpu_is_u5500()) 335 - return -EINVAL; 336 - else 337 - return db8500_prcmu_get_arm_opp(); 403 + return db8500_prcmu_get_arm_opp(); 338 404 } 339 405 340 406 static inline int prcmu_set_ape_opp(u8 opp) 341 407 { 342 - if (cpu_is_u5500()) 343 - return -EINVAL; 344 - else 345 - return db8500_prcmu_set_ape_opp(opp); 408 + return db8500_prcmu_set_ape_opp(opp); 346 409 } 347 410 348 411 static inline int prcmu_get_ape_opp(void) 349 412 { 350 - if (cpu_is_u5500()) 351 - return -EINVAL; 352 - else 353 - return db8500_prcmu_get_ape_opp(); 413 + return db8500_prcmu_get_ape_opp(); 354 414 } 355 415 356 416 static inline void prcmu_system_reset(u16 reset_code) 357 417 { 358 - if (cpu_is_u5500()) 359 - return db5500_prcmu_system_reset(reset_code); 360 - else 361 - return db8500_prcmu_system_reset(reset_code); 418 + return db8500_prcmu_system_reset(reset_code); 362 419 } 363 420 364 421 static inline u16 prcmu_get_reset_code(void) 365 422 { 366 - if (cpu_is_u5500()) 367 - return db5500_prcmu_get_reset_code(); 368 - else 369 - return db8500_prcmu_get_reset_code(); 423 + return db8500_prcmu_get_reset_code(); 370 424 } 371 425 372 426 void prcmu_ac_wake_req(void); 373 427 void prcmu_ac_sleep_req(void); 374 428 static inline void prcmu_modem_reset(void) 375 429 { 376 - if (cpu_is_u5500()) 377 - return; 378 - else 379 - return db8500_prcmu_modem_reset(); 430 + return db8500_prcmu_modem_reset(); 380 431 } 381 432 382 433 static inline bool prcmu_is_ac_wake_requested(void) 383 434 { 384 - if (cpu_is_u5500()) 385 - return db5500_prcmu_is_ac_wake_requested(); 386 - else 387 - return db8500_prcmu_is_ac_wake_requested(); 435 + return db8500_prcmu_is_ac_wake_requested(); 388 436 } 389 437 390 438 static inline int prcmu_set_display_clocks(void) 391 439 { 392 - if (cpu_is_u5500()) 393 - return db5500_prcmu_set_display_clocks(); 394 - else 395 - return db8500_prcmu_set_display_clocks(); 440 + return db8500_prcmu_set_display_clocks(); 396 441 } 397 442 398 443 static inline int prcmu_disable_dsipll(void) 399 444 { 400 - if (cpu_is_u5500()) 401 - return db5500_prcmu_disable_dsipll(); 402 - else 403 - return db8500_prcmu_disable_dsipll(); 445 + return db8500_prcmu_disable_dsipll(); 404 446 } 405 447 406 448 static inline int prcmu_enable_dsipll(void) 407 449 { 408 - if (cpu_is_u5500()) 409 - return db5500_prcmu_enable_dsipll(); 410 - else 411 - return db8500_prcmu_enable_dsipll(); 450 + return db8500_prcmu_enable_dsipll(); 412 451 } 413 452 414 453 static inline int prcmu_config_esram0_deep_sleep(u8 state) 415 454 { 416 - if (cpu_is_u5500()) 417 - return -EINVAL; 418 - else 419 - return db8500_prcmu_config_esram0_deep_sleep(state); 455 + return db8500_prcmu_config_esram0_deep_sleep(state); 420 456 } 421 457 422 458 static inline int prcmu_config_hotdog(u8 threshold) 423 459 { 424 - if (cpu_is_u5500()) 425 - return -EINVAL; 426 - else 427 - return db8500_prcmu_config_hotdog(threshold); 460 + return db8500_prcmu_config_hotdog(threshold); 428 461 } 429 462 430 463 static inline int prcmu_config_hotmon(u8 low, u8 high) 431 464 { 432 - if (cpu_is_u5500()) 433 - return -EINVAL; 434 - else 435 - return db8500_prcmu_config_hotmon(low, high); 465 + return db8500_prcmu_config_hotmon(low, high); 436 466 } 437 467 438 468 static inline int prcmu_start_temp_sense(u16 cycles32k) 439 469 { 440 - if (cpu_is_u5500()) 441 - return -EINVAL; 442 - else 443 - return db8500_prcmu_start_temp_sense(cycles32k); 470 + return db8500_prcmu_start_temp_sense(cycles32k); 444 471 } 445 472 446 473 static inline int prcmu_stop_temp_sense(void) 447 474 { 448 - if (cpu_is_u5500()) 449 - return -EINVAL; 450 - else 451 - return db8500_prcmu_stop_temp_sense(); 475 + return db8500_prcmu_stop_temp_sense(); 452 476 } 453 477 454 478 static inline u32 prcmu_read(unsigned int reg) 455 479 { 456 - if (cpu_is_u5500()) 457 - return -EINVAL; 458 - else 459 - return db8500_prcmu_read(reg); 480 + return db8500_prcmu_read(reg); 460 481 } 461 482 462 483 static inline void prcmu_write(unsigned int reg, u32 value) 463 484 { 464 - if (cpu_is_u5500()) 465 - return; 466 - else 467 - db8500_prcmu_write(reg, value); 485 + db8500_prcmu_write(reg, value); 468 486 } 469 487 470 488 static inline void prcmu_write_masked(unsigned int reg, u32 mask, u32 value) 471 489 { 472 - if (cpu_is_u5500()) 473 - return; 474 - else 475 - db8500_prcmu_write_masked(reg, mask, value); 490 + db8500_prcmu_write_masked(reg, mask, value); 476 491 } 477 492 478 493 static inline int prcmu_enable_a9wdog(u8 id) 479 494 { 480 - if (cpu_is_u5500()) 481 - return -EINVAL; 482 - else 483 - return db8500_prcmu_enable_a9wdog(id); 495 + return db8500_prcmu_enable_a9wdog(id); 484 496 } 485 497 486 498 static inline int prcmu_disable_a9wdog(u8 id) 487 499 { 488 - if (cpu_is_u5500()) 489 - return -EINVAL; 490 - else 491 - return db8500_prcmu_disable_a9wdog(id); 500 + return db8500_prcmu_disable_a9wdog(id); 492 501 } 493 502 494 503 static inline int prcmu_kick_a9wdog(u8 id) 495 504 { 496 - if (cpu_is_u5500()) 497 - return -EINVAL; 498 - else 499 - return db8500_prcmu_kick_a9wdog(id); 505 + return db8500_prcmu_kick_a9wdog(id); 500 506 } 501 507 502 508 static inline int prcmu_load_a9wdog(u8 id, u32 timeout) 503 509 { 504 - if (cpu_is_u5500()) 505 - return -EINVAL; 506 - else 507 - return db8500_prcmu_load_a9wdog(id, timeout); 510 + return db8500_prcmu_load_a9wdog(id, timeout); 508 511 } 509 512 510 513 static inline int prcmu_config_a9wdog(u8 num, bool sleep_auto_off) 511 514 { 512 - if (cpu_is_u5500()) 513 - return -EINVAL; 514 - else 515 - return db8500_prcmu_config_a9wdog(num, sleep_auto_off); 515 + return db8500_prcmu_config_a9wdog(num, sleep_auto_off); 516 516 } 517 517 #else 518 518 ··· 612 768 prcmu_write_masked(reg, bits, 0); 613 769 } 614 770 615 - #if defined(CONFIG_UX500_SOC_DB8500) || defined(CONFIG_UX500_SOC_DB5500) 771 + #if defined(CONFIG_UX500_SOC_DB8500) 616 772 617 773 /** 618 774 * prcmu_enable_spi2 - Enables pin muxing for SPI2 on OtherAlternateC1.