aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/mfd/dbx500-prcmu.h
diff options
context:
space:
mode:
authorMattias Nilsson <mattias.i.nilsson@stericsson.com>2012-01-13 10:21:00 -0500
committerSamuel Ortiz <sameo@linux.intel.com>2012-03-06 12:46:34 -0500
commitb4a6dbd5b7bad00ee4004443287468abddb96538 (patch)
tree25582b5e364976b6d7ab1c2f9faa031a4fae2a9d /include/linux/mfd/dbx500-prcmu.h
parent6f53d10dda1323c17fb09063c4df2c22754bf8aa (diff)
mfd: Add initial db8500 prcmu register access api
This patch adds an initial PRCMU register access API, which for now should only be used for a very limited set of registers. The idea about this API is that we split the PRCMU driver in one part that deals with interaction with the PRCMU firmware and one part that simply provide write accessors in the PRCMU register range. The latter are just a collection of registers exposed in the PRCMU register range for various purposes and not related to the PRCMU firmware. Currently we support some limited GPIO, SPI and UART settings through this API. Signed-off-by: Mattias Nilsson <mattias.i.nilsson@stericsson.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'include/linux/mfd/dbx500-prcmu.h')
-rw-r--r--include/linux/mfd/dbx500-prcmu.h122
1 files changed, 122 insertions, 0 deletions
diff --git a/include/linux/mfd/dbx500-prcmu.h b/include/linux/mfd/dbx500-prcmu.h
index 432a2d3fc198..b3b5adfa9e41 100644
--- a/include/linux/mfd/dbx500-prcmu.h
+++ b/include/linux/mfd/dbx500-prcmu.h
@@ -480,6 +480,30 @@ static inline int prcmu_stop_temp_sense(void)
480 return db8500_prcmu_stop_temp_sense(); 480 return db8500_prcmu_stop_temp_sense();
481} 481}
482 482
483static inline u32 prcmu_read(unsigned int reg)
484{
485 if (cpu_is_u5500())
486 return -EINVAL;
487 else
488 return db8500_prcmu_read(reg);
489}
490
491static inline void prcmu_write(unsigned int reg, u32 value)
492{
493 if (cpu_is_u5500())
494 return;
495 else
496 db8500_prcmu_write(reg, value);
497}
498
499static inline void prcmu_write_masked(unsigned int reg, u32 mask, u32 value)
500{
501 if (cpu_is_u5500())
502 return;
503 else
504 db8500_prcmu_write_masked(reg, mask, value);
505}
506
483static inline int prcmu_enable_a9wdog(u8 id) 507static inline int prcmu_enable_a9wdog(u8 id)
484{ 508{
485 if (cpu_is_u5500()) 509 if (cpu_is_u5500())
@@ -668,6 +692,104 @@ static inline int prcmu_stop_temp_sense(void)
668 return 0; 692 return 0;
669} 693}
670 694
695static inline u32 prcmu_read(unsigned int reg)
696{
697 return 0;
698}
699
700static inline void prcmu_write(unsigned int reg, u32 value) {}
701
702static inline void prcmu_write_masked(unsigned int reg, u32 mask, u32 value) {}
703
704#endif
705
706static inline void prcmu_set(unsigned int reg, u32 bits)
707{
708 prcmu_write_masked(reg, bits, bits);
709}
710
711static inline void prcmu_clear(unsigned int reg, u32 bits)
712{
713 prcmu_write_masked(reg, bits, 0);
714}
715
716#if defined(CONFIG_UX500_SOC_DB8500) || defined(CONFIG_UX500_SOC_DB5500)
717
718/**
719 * prcmu_enable_spi2 - Enables pin muxing for SPI2 on OtherAlternateC1.
720 */
721static inline void prcmu_enable_spi2(void)
722{
723 if (cpu_is_u8500())
724 prcmu_set(DB8500_PRCM_GPIOCR, DB8500_PRCM_GPIOCR_SPI2_SELECT);
725}
726
727/**
728 * prcmu_disable_spi2 - Disables pin muxing for SPI2 on OtherAlternateC1.
729 */
730static inline void prcmu_disable_spi2(void)
731{
732 if (cpu_is_u8500())
733 prcmu_clear(DB8500_PRCM_GPIOCR, DB8500_PRCM_GPIOCR_SPI2_SELECT);
734}
735
736/**
737 * prcmu_enable_stm_mod_uart - Enables pin muxing for STMMOD
738 * and UARTMOD on OtherAlternateC3.
739 */
740static inline void prcmu_enable_stm_mod_uart(void)
741{
742 if (cpu_is_u8500()) {
743 prcmu_set(DB8500_PRCM_GPIOCR,
744 (DB8500_PRCM_GPIOCR_DBG_STM_MOD_CMD1 |
745 DB8500_PRCM_GPIOCR_DBG_UARTMOD_CMD0));
746 }
747}
748
749/**
750 * prcmu_disable_stm_mod_uart - Disables pin muxing for STMMOD
751 * and UARTMOD on OtherAlternateC3.
752 */
753static inline void prcmu_disable_stm_mod_uart(void)
754{
755 if (cpu_is_u8500()) {
756 prcmu_clear(DB8500_PRCM_GPIOCR,
757 (DB8500_PRCM_GPIOCR_DBG_STM_MOD_CMD1 |
758 DB8500_PRCM_GPIOCR_DBG_UARTMOD_CMD0));
759 }
760}
761
762/**
763 * prcmu_enable_stm_ape - Enables pin muxing for STM APE on OtherAlternateC1.
764 */
765static inline void prcmu_enable_stm_ape(void)
766{
767 if (cpu_is_u8500()) {
768 prcmu_set(DB8500_PRCM_GPIOCR,
769 DB8500_PRCM_GPIOCR_DBG_STM_APE_CMD);
770 }
771}
772
773/**
774 * prcmu_disable_stm_ape - Disables pin muxing for STM APE on OtherAlternateC1.
775 */
776static inline void prcmu_disable_stm_ape(void)
777{
778 if (cpu_is_u8500()) {
779 prcmu_clear(DB8500_PRCM_GPIOCR,
780 DB8500_PRCM_GPIOCR_DBG_STM_APE_CMD);
781 }
782}
783
784#else
785
786static inline void prcmu_enable_spi2(void) {}
787static inline void prcmu_disable_spi2(void) {}
788static inline void prcmu_enable_stm_mod_uart(void) {}
789static inline void prcmu_disable_stm_mod_uart(void) {}
790static inline void prcmu_enable_stm_ape(void) {}
791static inline void prcmu_disable_stm_ape(void) {}
792
671#endif 793#endif
672 794
673/* PRCMU QoS APE OPP class */ 795/* PRCMU QoS APE OPP class */