powerdomain2xxx_3xxx.c 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * OMAP2 and OMAP3 powerdomain control
  3. *
  4. * Copyright (C) 2009-2010 Texas Instruments, Inc.
  5. * Copyright (C) 2007-2009 Nokia Corporation
  6. *
  7. * Derived from mach-omap2/powerdomain.c written by Paul Walmsley
  8. * Rajendra Nayak <rnayak@ti.com>
  9. *
  10. * This program is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU General Public License version 2 as
  12. * published by the Free Software Foundation.
  13. */
  14. #include <linux/io.h>
  15. #include <linux/errno.h>
  16. #include <linux/delay.h>
  17. #include <plat/prcm.h>
  18. #include "prm.h"
  19. #include "prm-regbits-34xx.h"
  20. #include "powerdomains.h"
  21. /* Common functions across OMAP2 and OMAP3 */
  22. static int omap2_pwrdm_set_next_pwrst(struct powerdomain *pwrdm, u8 pwrst)
  23. {
  24. prm_rmw_mod_reg_bits(OMAP_POWERSTATE_MASK,
  25. (pwrst << OMAP_POWERSTATE_SHIFT),
  26. pwrdm->prcm_offs, OMAP2_PM_PWSTCTRL);
  27. return 0;
  28. }
  29. static int omap2_pwrdm_read_next_pwrst(struct powerdomain *pwrdm)
  30. {
  31. return prm_read_mod_bits_shift(pwrdm->prcm_offs,
  32. OMAP2_PM_PWSTCTRL, OMAP_POWERSTATE_MASK);
  33. }
  34. static int omap2_pwrdm_read_pwrst(struct powerdomain *pwrdm)
  35. {
  36. return prm_read_mod_bits_shift(pwrdm->prcm_offs,
  37. OMAP2_PM_PWSTST, OMAP_POWERSTATEST_MASK);
  38. }
  39. /* Applicable only for OMAP3. Not supported on OMAP2 */
  40. static int omap3_pwrdm_read_prev_pwrst(struct powerdomain *pwrdm)
  41. {
  42. return prm_read_mod_bits_shift(pwrdm->prcm_offs, OMAP3430_PM_PREPWSTST,
  43. OMAP3430_LASTPOWERSTATEENTERED_MASK);
  44. }
  45. struct pwrdm_ops omap2_pwrdm_operations = {
  46. .pwrdm_set_next_pwrst = omap2_pwrdm_set_next_pwrst,
  47. .pwrdm_read_next_pwrst = omap2_pwrdm_read_next_pwrst,
  48. .pwrdm_read_pwrst = omap2_pwrdm_read_pwrst,
  49. };
  50. struct pwrdm_ops omap3_pwrdm_operations = {
  51. .pwrdm_set_next_pwrst = omap2_pwrdm_set_next_pwrst,
  52. .pwrdm_read_next_pwrst = omap2_pwrdm_read_next_pwrst,
  53. .pwrdm_read_pwrst = omap2_pwrdm_read_pwrst,
  54. .pwrdm_read_prev_pwrst = omap3_pwrdm_read_prev_pwrst,
  55. };