diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2020-02-18 08:36:43 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-02-18 08:36:43 +0100 |
commit | 36bd74ee6139f9807db6745e0f74adff3aff91f5 (patch) | |
tree | 69e03ac4316c3a11133a1974125b4dcbacf64503 /arch/arm | |
parent | 73e382e3e59cc15ab3e72b8f98254469d1b3187c (diff) | |
parent | b043601a35120c394d67fd47ebd37854b0472e60 (diff) | |
download | barebox-36bd74ee6139f9807db6745e0f74adff3aff91f5.tar.gz barebox-36bd74ee6139f9807db6745e0f74adff3aff91f5.tar.xz |
Merge branch 'for-next/imx'
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/boards/phytec-som-imx8mq/board.c | 38 | ||||
-rw-r--r-- | arch/arm/dts/imx25.dtsi | 8 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx6.c | 12 | ||||
-rw-r--r-- | arch/arm/mach-imx/include/mach/imx6.h | 4 |
4 files changed, 50 insertions, 12 deletions
diff --git a/arch/arm/boards/phytec-som-imx8mq/board.c b/arch/arm/boards/phytec-som-imx8mq/board.c index 4fd098c5f6..7df53a7cfb 100644 --- a/arch/arm/boards/phytec-som-imx8mq/board.c +++ b/arch/arm/boards/phytec-som-imx8mq/board.c @@ -10,9 +10,45 @@ #include <init.h> #include <linux/sizes.h> #include <mach/bbu.h> +#include <mfd/pfuze.h> #include <envfs.h> +#define PFUZE100_DEVICEID 0x0 +#define PFUZE100_REVID 0x3 + +#define PFUZE100_SW1ABMODE 0x23 +#define PFUZE100_SW2MODE 0x38 +#define PFUZE100_SW1CMODE 0x31 +#define PFUZE100_SW3AVOL 0x3c + +#define APS_PFM 0xc + +static void imx8mq_setup_pmic_voltages(struct regmap *map) +{ + int offset = PFUZE100_SW1CMODE; + int switch_num = 6; + int val, i; + + regmap_read(map, PFUZE100_SW3AVOL, &val); + + /* ensure the correct VDD_DRAM_0V9 output voltage */ + regmap_write_bits(map, PFUZE100_SW3AVOL, 0x3f, 0x18); + + /* pfuze200 */ + regmap_read(map, PFUZE100_DEVICEID, &val); + if (val & 0xf) { + offset = PFUZE100_SW2MODE; + switch_num = 4; + } + + /* set all switches APS in normal and PFM mode in standby */ + regmap_write(map, PFUZE100_SW1ABMODE, APS_PFM); + + for (i = 0; i < switch_num - 1; i++) + regmap_write(map, offset + i * 7, APS_PFM); +} + static int physom_imx8mq_devices_init(void) { int flag_emmc = 0; @@ -23,6 +59,8 @@ static int physom_imx8mq_devices_init(void) barebox_set_hostname("phycore-imx8mq"); + pfuze_register_init_callback(imx8mq_setup_pmic_voltages); + switch (bootsource_get_instance()) { case 0: flag_emmc = BBU_HANDLER_FLAG_DEFAULT; diff --git a/arch/arm/dts/imx25.dtsi b/arch/arm/dts/imx25.dtsi index e72dbd5f36..05678af71a 100644 --- a/arch/arm/dts/imx25.dtsi +++ b/arch/arm/dts/imx25.dtsi @@ -24,11 +24,3 @@ &usbmisc { status = "okay"; }; - -&usbotg { - over-current-active-high; -}; - -&usbhost1 { - over-current-active-high; -}; diff --git a/arch/arm/mach-imx/imx6.c b/arch/arm/mach-imx/imx6.c index e1c8214568..8f949534b8 100644 --- a/arch/arm/mach-imx/imx6.c +++ b/arch/arm/mach-imx/imx6.c @@ -27,8 +27,7 @@ #include <mach/usb.h> #include <asm/mmu.h> #include <asm/cache-l2x0.h> - -#include <poweroff.h> +#include <mfd/pfuze.h> #define CLPCR 0x54 #define BP_CLPCR_LPM(mode) ((mode) & 0x3) @@ -204,6 +203,11 @@ u64 imx6_uid(void) return imx_ocotp_read_uid(IOMEM(MX6_OCOTP_BASE_ADDR)); } +static void imx6_register_poweroff_init(struct regmap *map) +{ + poweroff_handler_register_fn(imx6_pm_stby_poweroff); +} + int imx6_init(void) { const char *cputypestr; @@ -261,6 +265,8 @@ int imx6_init(void) imx6_setup_ipu_qos(); imx6ul_enet_clk_init(); + pfuze_register_init_callback(imx6_register_poweroff_init); + return 0; } @@ -375,7 +381,7 @@ static int imx6_fixup_cpus_register(void) } device_initcall(imx6_fixup_cpus_register); -void __noreturn imx6_pm_stby_poweroff(void) +void __noreturn imx6_pm_stby_poweroff(struct poweroff_handler *handler) { void *ccm_base = IOMEM(MX6_CCM_BASE_ADDR); void *gpc_base = IOMEM(MX6_GPC_BASE_ADDR); diff --git a/arch/arm/mach-imx/include/mach/imx6.h b/arch/arm/mach-imx/include/mach/imx6.h index f0d20833fd..5560774de9 100644 --- a/arch/arm/mach-imx/include/mach/imx6.h +++ b/arch/arm/mach-imx/include/mach/imx6.h @@ -6,7 +6,9 @@ #include <mach/imx6-regs.h> #include <mach/revision.h> -void __noreturn imx6_pm_stby_poweroff(void); +#include <poweroff.h> + +void __noreturn imx6_pm_stby_poweroff(struct poweroff_handler *handler); #define IMX6_ANATOP_SI_REV 0x260 #define IMX6SL_ANATOP_SI_REV 0x280 |