.. | .. |
---|
26 | 26 | #include "scrm44xx.h" |
---|
27 | 27 | #include "control.h" |
---|
28 | 28 | |
---|
| 29 | +#define OMAP4430_VDD_IVA_I2C_DISABLE BIT(14) |
---|
| 30 | +#define OMAP4430_VDD_MPU_I2C_DISABLE BIT(13) |
---|
| 31 | +#define OMAP4430_VDD_CORE_I2C_DISABLE BIT(12) |
---|
| 32 | +#define OMAP4430_VDD_IVA_PRESENCE BIT(9) |
---|
| 33 | +#define OMAP4430_VDD_MPU_PRESENCE BIT(8) |
---|
| 34 | +#define OMAP4430_AUTO_CTRL_VDD_IVA(x) ((x) << 4) |
---|
| 35 | +#define OMAP4430_AUTO_CTRL_VDD_MPU(x) ((x) << 2) |
---|
| 36 | +#define OMAP4430_AUTO_CTRL_VDD_CORE(x) ((x) << 0) |
---|
| 37 | +#define OMAP4430_AUTO_CTRL_VDD_RET 2 |
---|
| 38 | + |
---|
| 39 | +#define OMAP4430_VDD_I2C_DISABLE_MASK \ |
---|
| 40 | + (OMAP4430_VDD_IVA_I2C_DISABLE | \ |
---|
| 41 | + OMAP4430_VDD_MPU_I2C_DISABLE | \ |
---|
| 42 | + OMAP4430_VDD_CORE_I2C_DISABLE) |
---|
| 43 | + |
---|
| 44 | +#define OMAP4_VDD_DEFAULT_VAL \ |
---|
| 45 | + (OMAP4430_VDD_I2C_DISABLE_MASK | \ |
---|
| 46 | + OMAP4430_VDD_IVA_PRESENCE | OMAP4430_VDD_MPU_PRESENCE | \ |
---|
| 47 | + OMAP4430_AUTO_CTRL_VDD_IVA(OMAP4430_AUTO_CTRL_VDD_RET) | \ |
---|
| 48 | + OMAP4430_AUTO_CTRL_VDD_MPU(OMAP4430_AUTO_CTRL_VDD_RET) | \ |
---|
| 49 | + OMAP4430_AUTO_CTRL_VDD_CORE(OMAP4430_AUTO_CTRL_VDD_RET)) |
---|
| 50 | + |
---|
| 51 | +#define OMAP4_VDD_RET_VAL \ |
---|
| 52 | + (OMAP4_VDD_DEFAULT_VAL & ~OMAP4430_VDD_I2C_DISABLE_MASK) |
---|
| 53 | + |
---|
29 | 54 | /** |
---|
30 | 55 | * struct omap_vc_channel_cfg - describe the cfg_channel bitfield |
---|
31 | 56 | * @sa: bit for slave address |
---|
.. | .. |
---|
278 | 303 | OMAP3_PRM_VOLTSETUP2_OFFSET); |
---|
279 | 304 | vc.voltsetup2 = voltsetup2; |
---|
280 | 305 | } |
---|
| 306 | +} |
---|
| 307 | + |
---|
| 308 | +void omap4_vc_set_pmic_signaling(int core_next_state) |
---|
| 309 | +{ |
---|
| 310 | + struct voltagedomain *vd = vc.vd; |
---|
| 311 | + u32 val; |
---|
| 312 | + |
---|
| 313 | + if (!vd) |
---|
| 314 | + return; |
---|
| 315 | + |
---|
| 316 | + switch (core_next_state) { |
---|
| 317 | + case PWRDM_POWER_RET: |
---|
| 318 | + val = OMAP4_VDD_RET_VAL; |
---|
| 319 | + break; |
---|
| 320 | + default: |
---|
| 321 | + val = OMAP4_VDD_DEFAULT_VAL; |
---|
| 322 | + break; |
---|
| 323 | + } |
---|
| 324 | + |
---|
| 325 | + vd->write(val, OMAP4_PRM_VOLTCTRL_OFFSET); |
---|
281 | 326 | } |
---|
282 | 327 | |
---|
283 | 328 | /* |
---|
.. | .. |
---|
542 | 587 | writel_relaxed(val, OMAP4_SCRM_CLKSETUPTIME); |
---|
543 | 588 | } |
---|
544 | 589 | |
---|
| 590 | +static void __init omap4_vc_init_pmic_signaling(struct voltagedomain *voltdm) |
---|
| 591 | +{ |
---|
| 592 | + if (vc.vd) |
---|
| 593 | + return; |
---|
| 594 | + |
---|
| 595 | + vc.vd = voltdm; |
---|
| 596 | + voltdm->write(OMAP4_VDD_DEFAULT_VAL, OMAP4_PRM_VOLTCTRL_OFFSET); |
---|
| 597 | +} |
---|
| 598 | + |
---|
545 | 599 | /* OMAP4 specific voltage init functions */ |
---|
546 | 600 | static void __init omap4_vc_init_channel(struct voltagedomain *voltdm) |
---|
547 | 601 | { |
---|
| 602 | + omap4_vc_init_pmic_signaling(voltdm); |
---|
548 | 603 | omap4_set_timings(voltdm, true); |
---|
549 | 604 | omap4_set_timings(voltdm, false); |
---|
550 | 605 | } |
---|
.. | .. |
---|
615 | 670 | const struct i2c_init_data *i2c_data; |
---|
616 | 671 | |
---|
617 | 672 | if (!voltdm->pmic->i2c_high_speed) { |
---|
618 | | - pr_warn("%s: only high speed supported!\n", __func__); |
---|
| 673 | + pr_info("%s: using bootloader low-speed timings\n", __func__); |
---|
619 | 674 | return; |
---|
620 | 675 | } |
---|
621 | 676 | |
---|