Message ID | 20200205140217.15414-2-biwen.li@nxp.com |
---|---|
State | Accepted |
Commit | bb1165f900088c796e254cc99c8f81d47e3d57c9 |
Headers | show |
Series | None | expand |
> > This supports i2c DM and enables CONFIG_DM_I2C for SoC LS1046A Hi Priyanka, Any comments? Best Regards, Biwen Li > > Reviewed-by: Priyanka Jain <priyanka.jain at nxp.com> > Signed-off-by: Biwen Li <biwen.li at nxp.com> > --- > Changes in RESEND v8: > - fix build warning > > Changes in v8: > - none > > Changes in v7: > - none > > Changes in v6: > - correct dependencies > > Changes in v5: > - update subject > > Changes in v4: > - update copyright > > Changes in v3: > - none > > Changes in v2: > - merge some patches to one patch > > arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 10 ++-- > arch/arm/dts/fsl-ls1046a-frwy.dts | 3 ++ > arch/arm/dts/fsl-ls1046a-qds.dtsi | 4 ++ > arch/arm/dts/fsl-ls1046a-rdb.dts | 8 ++++ > arch/arm/include/asm/gpio.h | 5 +- > board/freescale/ls1046afrwy/ls1046afrwy.c | 17 ++++++- > board/freescale/ls1046aqds/ls1046aqds.c | 25 ++++++++-- > configs/ls1046afrwy_tfa_defconfig | 2 + > configs/ls1046aqds_SECURE_BOOT_defconfig | 2 + > configs/ls1046aqds_defconfig | 2 + > configs/ls1046aqds_lpuart_defconfig | 2 + > configs/ls1046aqds_nand_defconfig | 2 + > configs/ls1046aqds_qspi_defconfig | 2 + > configs/ls1046aqds_sdcard_ifc_defconfig | 2 + > configs/ls1046aqds_sdcard_qspi_defconfig | 2 + > configs/ls1046aqds_tfa_SECURE_BOOT_defconfig | 2 + > configs/ls1046aqds_tfa_defconfig | 2 + > configs/ls1046ardb_emmc_defconfig | 2 + > configs/ls1046ardb_qspi_SECURE_BOOT_defconfig | 2 + > configs/ls1046ardb_qspi_defconfig | 2 + > configs/ls1046ardb_qspi_spl_defconfig | 2 + > .../ls1046ardb_sdcard_SECURE_BOOT_defconfig | 2 + > configs/ls1046ardb_sdcard_defconfig | 2 + > configs/ls1046ardb_tfa_SECURE_BOOT_defconfig | 2 + > configs/ls1046ardb_tfa_defconfig | 2 + > drivers/power/power_i2c.c | 46 > ++++++++++++++++++- > include/configs/ls1046a_common.h | 11 +++++ > 27 files changed, 150 insertions(+), 15 deletions(-) > > diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > index 760053e401..b25639183f 100644 > --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig > @@ -107,11 +107,11 @@ config ARCH_LS1046A > select SYS_FSL_SRDS_2 > select ARCH_EARLY_INIT_R > select BOARD_EARLY_INIT_F > - select SYS_I2C_MXC > - select SYS_I2C_MXC_I2C1 > - select SYS_I2C_MXC_I2C2 > - select SYS_I2C_MXC_I2C3 > - select SYS_I2C_MXC_I2C4 > + select SYS_I2C_MXC if !DM_I2C > + select SYS_I2C_MXC_I2C1 if !DM_I2C > + select SYS_I2C_MXC_I2C2 if !DM_I2C > + select SYS_I2C_MXC_I2C3 if !DM_I2C > + select SYS_I2C_MXC_I2C4 if !DM_I2C > imply SCSI > imply SCSI_AHCI > > diff --git a/arch/arm/dts/fsl-ls1046a-frwy.dts > b/arch/arm/dts/fsl-ls1046a-frwy.dts > index 3d41e3bd44..d39159322a 100644 > --- a/arch/arm/dts/fsl-ls1046a-frwy.dts > +++ b/arch/arm/dts/fsl-ls1046a-frwy.dts > @@ -32,3 +32,6 @@ > > }; > > +&i2c0 { > + status = "okay"; > +}; > diff --git a/arch/arm/dts/fsl-ls1046a-qds.dtsi > b/arch/arm/dts/fsl-ls1046a-qds.dtsi > index c95f44fc36..76dc397328 100644 > --- a/arch/arm/dts/fsl-ls1046a-qds.dtsi > +++ b/arch/arm/dts/fsl-ls1046a-qds.dtsi > @@ -80,3 +80,7 @@ > &sata { > status = "okay"; > }; > + > +&i2c0 { > + status = "okay"; > +}; > diff --git a/arch/arm/dts/fsl-ls1046a-rdb.dts > b/arch/arm/dts/fsl-ls1046a-rdb.dts > index a05c9e9b9e..83e34ab02a 100644 > --- a/arch/arm/dts/fsl-ls1046a-rdb.dts > +++ b/arch/arm/dts/fsl-ls1046a-rdb.dts > @@ -43,3 +43,11 @@ > &sata { > status = "okay"; > }; > + > +&i2c0 { > + status = "okay"; > +}; > + > +&i2c3 { > + status = "okay"; > +}; > diff --git a/arch/arm/include/asm/gpio.h b/arch/arm/include/asm/gpio.h > index c480e712fe..09573722ac 100644 > --- a/arch/arm/include/asm/gpio.h > +++ b/arch/arm/include/asm/gpio.h > @@ -3,8 +3,9 @@ > !defined(CONFIG_ARCH_BCM6858) > && !defined(CONFIG_ARCH_BCM63158) && \ > !defined(CONFIG_ARCH_ROCKCHIP) > && !defined(CONFIG_ARCH_LX2160A) && \ > !defined(CONFIG_ARCH_LS1012A) && !defined(CONFIG_ARCH_LS1028A) > && \ > - !defined(CONFIG_ARCH_LS1043A) && !defined(CONFIG_ARCH_LS2080A) > && \ > - !defined(CONFIG_ARCH_LS1088A) && !defined(CONFIG_ARCH_ASPEED) > && \ > + !defined(CONFIG_ARCH_LS1043A) && !defined(CONFIG_ARCH_LS1046A) > && \ > + !defined(CONFIG_ARCH_LS2080A) && !defined(CONFIG_ARCH_LS1088A) > && \ > + !defined(CONFIG_ARCH_ASPEED) && \ > !defined(CONFIG_ARCH_U8500) > #include <asm/arch/gpio.h> > #endif > diff --git a/board/freescale/ls1046afrwy/ls1046afrwy.c > b/board/freescale/ls1046afrwy/ls1046afrwy.c > index db8b3a5b92..8c0abb63a9 100644 > --- a/board/freescale/ls1046afrwy/ls1046afrwy.c > +++ b/board/freescale/ls1046afrwy/ls1046afrwy.c > @@ -36,11 +36,24 @@ > > DECLARE_GLOBAL_DATA_PTR; > > -int select_i2c_ch_pca9547(u8 ch) > +int select_i2c_ch_pca9547(u8 ch, int bus_num) > { > int ret; > > +#ifdef CONFIG_DM_I2C > + struct udevice *dev; > + > + ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI, > + 1, &dev); > + if (ret) { > + printf("%s: Cannot find udev for a bus %d\n", __func__, > + bus_num); > + return ret; > + } > + ret = dm_i2c_write(dev, 0, &ch, 1); > +#else > ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); > +#endif > if (ret) { > puts("PCA: failed to select proper channel\n"); > return ret; > @@ -149,7 +162,7 @@ val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) > & ~(SCR0_USFCFG_MASK); > sec_init(); > #endif > > - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); > + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); > return 0; > } > > diff --git a/board/freescale/ls1046aqds/ls1046aqds.c > b/board/freescale/ls1046aqds/ls1046aqds.c > index aac5d9aa84..cabd7ee648 100644 > --- a/board/freescale/ls1046aqds/ls1046aqds.c > +++ b/board/freescale/ls1046aqds/ls1046aqds.c > @@ -1,6 +1,7 @@ > // SPDX-License-Identifier: GPL-2.0+ > /* > * Copyright 2016 Freescale Semiconductor, Inc. > + * Copyright 2019 NXP > */ > > #include <common.h> > @@ -269,11 +270,23 @@ u32 get_lpuart_clk(void) } #endif > > -int select_i2c_ch_pca9547(u8 ch) > +int select_i2c_ch_pca9547(u8 ch, int bus_num) > { > int ret; > +#ifdef CONFIG_DM_I2C > + struct udevice *dev; > > + ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI, > + 1, &dev); > + if (ret) { > + printf("%s: Cannot find udev for a bus %d\n", __func__, > + bus_num); > + return ret; > + } > + ret = dm_i2c_write(dev, 0, &ch, 1); > +#else > ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); > +#endif > if (ret) { > puts("PCA: failed to select proper channel\n"); > return ret; > @@ -288,8 +301,10 @@ int dram_init(void) > * When resuming from deep sleep, the I2C channel may not be > * in the default channel. So, switch to the default channel > * before accessing DDR SPD. > + * > + * PCA9547 mount on I2C1 bus > */ > - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); > + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); > fsl_initdram(); > #if (!defined(CONFIG_SPL) && !defined(CONFIG_TFABOOT)) || \ > defined(CONFIG_SPL_BUILD) > @@ -302,7 +317,7 @@ int dram_init(void) > > int i2c_multiplexer_select_vid_channel(u8 channel) { > - return select_i2c_ch_pca9547(channel); > + return select_i2c_ch_pca9547(channel, 0); > } > > int board_early_init_f(void) > @@ -315,8 +330,10 @@ int board_early_init_f(void) > u8 uart; > #endif > > +#ifdef CONFIG_SYS_I2C > #ifdef CONFIG_SYS_I2C_EARLY_INIT > i2c_early_init_f(); > +#endif > #endif > fsl_lsch2_early_init_f(); > > @@ -394,7 +411,7 @@ int misc_init_r(void) > > int board_init(void) > { > - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); > + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); > > #ifdef CONFIG_SYS_FSL_SERDES > config_serdes_mux(); > diff --git a/configs/ls1046afrwy_tfa_defconfig > b/configs/ls1046afrwy_tfa_defconfig > index 96efee6736..30d8a6c1c9 100644 > --- a/configs/ls1046afrwy_tfa_defconfig > +++ b/configs/ls1046afrwy_tfa_defconfig > @@ -62,3 +62,5 @@ CONFIG_USB_HOST_ETHER=y > CONFIG_USB_ETHER_RTL8152=y CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_SECURE_BOOT_defconfig > b/configs/ls1046aqds_SECURE_BOOT_defconfig > index 6ea27c7ba4..ed25b7a680 100644 > --- a/configs/ls1046aqds_SECURE_BOOT_defconfig > +++ b/configs/ls1046aqds_SECURE_BOOT_defconfig > @@ -60,3 +60,5 @@ CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_RSA=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_defconfig b/configs/ls1046aqds_defconfig > index 04c1176d85..0a50bb14c0 100644 > --- a/configs/ls1046aqds_defconfig > +++ b/configs/ls1046aqds_defconfig > @@ -62,3 +62,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_lpuart_defconfig > b/configs/ls1046aqds_lpuart_defconfig > index b0a24f297e..17d1685081 100644 > --- a/configs/ls1046aqds_lpuart_defconfig > +++ b/configs/ls1046aqds_lpuart_defconfig > @@ -64,3 +64,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_nand_defconfig > b/configs/ls1046aqds_nand_defconfig > index 3ffe6a6ef9..0bafcbe168 100644 > --- a/configs/ls1046aqds_nand_defconfig > +++ b/configs/ls1046aqds_nand_defconfig > @@ -70,3 +70,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_qspi_defconfig > b/configs/ls1046aqds_qspi_defconfig > index d6253c790a..ff0fd45c9e 100644 > --- a/configs/ls1046aqds_qspi_defconfig > +++ b/configs/ls1046aqds_qspi_defconfig > @@ -58,3 +58,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_sdcard_ifc_defconfig > b/configs/ls1046aqds_sdcard_ifc_defconfig > index fad33163b6..78edb456b8 100644 > --- a/configs/ls1046aqds_sdcard_ifc_defconfig > +++ b/configs/ls1046aqds_sdcard_ifc_defconfig > @@ -80,3 +80,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_sdcard_qspi_defconfig > b/configs/ls1046aqds_sdcard_qspi_defconfig > index 3571a6f9e9..d085daf384 100644 > --- a/configs/ls1046aqds_sdcard_qspi_defconfig > +++ b/configs/ls1046aqds_sdcard_qspi_defconfig > @@ -74,3 +74,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig > b/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig > index c50e525fd3..837b016d00 100644 > --- a/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig > +++ b/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig > @@ -62,3 +62,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y CONFIG_CMD_SETEXPR=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046aqds_tfa_defconfig > b/configs/ls1046aqds_tfa_defconfig > index 824fc518ca..04e6b2392c 100644 > --- a/configs/ls1046aqds_tfa_defconfig > +++ b/configs/ls1046aqds_tfa_defconfig > @@ -71,3 +71,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_emmc_defconfig > b/configs/ls1046ardb_emmc_defconfig > index 768ce7a821..bbb352db31 100644 > --- a/configs/ls1046ardb_emmc_defconfig > +++ b/configs/ls1046ardb_emmc_defconfig > @@ -73,3 +73,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig > b/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig > index aff9bf81fc..b9c8a8822c 100644 > --- a/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig > +++ b/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig > @@ -55,3 +55,5 @@ CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_RSA=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_qspi_defconfig > b/configs/ls1046ardb_qspi_defconfig > index b482e73bef..51edada3f8 100644 > --- a/configs/ls1046ardb_qspi_defconfig > +++ b/configs/ls1046ardb_qspi_defconfig > @@ -57,3 +57,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_qspi_spl_defconfig > b/configs/ls1046ardb_qspi_spl_defconfig > index 1e2770a9c0..84e059671c 100644 > --- a/configs/ls1046ardb_qspi_spl_defconfig > +++ b/configs/ls1046ardb_qspi_spl_defconfig > @@ -77,3 +77,5 @@ CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_SPL_GZIP=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig > b/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig > index 1f5fa8ff03..9954e894da 100644 > --- a/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig > +++ b/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig > @@ -70,3 +70,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y > CONFIG_SPL_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_sdcard_defconfig > b/configs/ls1046ardb_sdcard_defconfig > index 197090474b..3502809756 100644 > --- a/configs/ls1046ardb_sdcard_defconfig > +++ b/configs/ls1046ardb_sdcard_defconfig > @@ -72,3 +72,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig > b/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig > index 43a123625c..c8c6ae9396 100644 > --- a/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig > +++ b/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig > @@ -55,3 +55,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y CONFIG_CMD_SETEXPR=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/configs/ls1046ardb_tfa_defconfig > b/configs/ls1046ardb_tfa_defconfig > index 280ca83d42..2f7686bafd 100644 > --- a/configs/ls1046ardb_tfa_defconfig > +++ b/configs/ls1046ardb_tfa_defconfig > @@ -58,3 +58,5 @@ CONFIG_DM_USB=y > CONFIG_USB_XHCI_HCD=y > CONFIG_USB_XHCI_DWC3=y > CONFIG_EFI_LOADER_BOUNCE_BUFFER=y > +CONFIG_DM_I2C=y > +CONFIG_DM_GPIO=y > diff --git a/drivers/power/power_i2c.c b/drivers/power/power_i2c.c index > bcddff2d7a..b30f223a5c 100644 > --- a/drivers/power/power_i2c.c > +++ b/drivers/power/power_i2c.c > @@ -7,6 +7,7 @@ > * Stefano Babic, DENX Software Engineering, sbabic at denx.de > * > * (C) Copyright 2008-2009 Freescale Semiconductor, Inc. > + * (C) Copyright 2019 NXP > */ > > #include <common.h> > @@ -21,8 +22,20 @@ int pmic_reg_write(struct pmic *p, u32 reg, u32 val) > > if (check_reg(p, reg)) > return -EINVAL; > +#if defined(CONFIG_DM_I2C) > + struct udevice *dev; > + int ret; > > + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, > + 1, &dev); > + if (ret) { > + printf("%s: Cannot find udev for a bus %d\n", __func__, > + p->bus); > + return -ENXIO; > + } > +#else /* Non DM I2C support - will be removed */ > I2C_SET_BUS(p->bus); > +#endif > > switch (pmic_i2c_tx_num) { > case 3: > @@ -53,7 +66,11 @@ int pmic_reg_write(struct pmic *p, u32 reg, u32 val) > return -EINVAL; > } > > +#if defined(CONFIG_DM_I2C) > + return dm_i2c_write(dev, reg, buf, pmic_i2c_tx_num); #else > return i2c_write(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num); > +#endif > } > > int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) @@ -65,9 +82,21 @@ > int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) > if (check_reg(p, reg)) > return -EINVAL; > > - I2C_SET_BUS(p->bus); > +#if defined(CONFIG_DM_I2C) > + struct udevice *dev; > > + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, > + 1, &dev); > + if (ret) { > + printf("%s: Cannot find udev for a bus %d\n", __func__, > + p->bus); > + return -ENXIO; > + } > + ret = dm_i2c_read(dev, reg, buf, pmic_i2c_tx_num); #else /* Non DM I2C > +support - will be removed */ > + I2C_SET_BUS(p->bus); > ret = i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num); > +#endif > if (ret) > return ret; > > @@ -100,12 +129,25 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 > *val) > > int pmic_probe(struct pmic *p) > { > - i2c_set_bus_num(p->bus); > debug("Bus: %d PMIC:%s probed!\n", p->bus, p->name); > +#if defined(CONFIG_DM_I2C) > + struct udevice *dev; > + int ret; > + > + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, > + 1, &dev); > + if (ret) { > + printf("%s: Cannot find udev for a bus %d\n", __func__, > + p->bus); > + return -ENXIO; > + } > +#else /* Non DM I2C support - will be removed */ > + i2c_set_bus_num(p->bus); > if (i2c_probe(pmic_i2c_addr)) { > printf("Can't find PMIC:%s\n", p->name); > return -ENODEV; > } > +#endif > > return 0; > } > diff --git a/include/configs/ls1046a_common.h > b/include/configs/ls1046a_common.h > index 6543cfd868..5d2d5e6bbf 100644 > --- a/include/configs/ls1046a_common.h > +++ b/include/configs/ls1046a_common.h > @@ -16,6 +16,7 @@ > #define SPL_NO_QSPI > #define SPL_NO_USB > #define SPL_NO_SATA > +#undef CONFIG_DM_I2C > #endif > #if defined(CONFIG_SPL_BUILD) && \ > (defined(CONFIG_NAND_BOOT) || defined(CONFIG_QSPI_BOOT)) @@ > -126,7 +127,17 @@ #endif > > /* I2C */ > +#ifndef CONFIG_DM_I2C > #define CONFIG_SYS_I2C > +#define CONFIG_SYS_I2C_MXC > +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ > +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ > +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ > +#define CONFIG_SYS_I2C_MXC_I2C4 /* enable I2C bus 4 */ > +#else > +#define CONFIG_I2C_SET_DEFAULT_BUS_NUM > +#define CONFIG_I2C_DEFAULT_BUS_NUMBER 0 #endif > > /* PCIe */ > #define CONFIG_PCIE1 /* PCIE controller 1 */ > -- > 2.17.1
>-----Original Message----- >From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Biwen Li >Sent: Wednesday, March 4, 2020 9:28 AM >To: Biwen Li <biwen.li at nxp.com>; Jagdish Gediya <jagdish.gediya at nxp.com>; >Priyanka Jain <priyanka.jain at nxp.com>; hs at denx.de; >jagan at amarulasolutions.com; aford173 at gmail.com; Alison Wang ><alison.wang at nxp.com>; jh80.chung at samsung.com; Pramod Kumar ><pramod.kumar_1 at nxp.com>; Rajesh Bhagat <rajesh.bhagat at nxp.com>; >Ruchika Gupta <ruchika.gupta at nxp.com>; olteanv at gmail.com >Cc: Xiaobo Xie <xiaobo.xie at nxp.com>; Jiafei Pan <jiafei.pan at nxp.com>; u- >boot at lists.denx.de >Subject: RE: [RESEND v8 7/8] dm: arm64: ls1046a: add i2c DM support > >> >> This supports i2c DM and enables CONFIG_DM_I2C for SoC LS1046A >Hi Priyanka, > >Any comments? > >Best Regards, >Biwen Li >> I need to build check. Rest looks fine. Priyanka >> Reviewed-by: Priyanka Jain <priyanka.jain at nxp.com> >> Signed-off-by: Biwen Li <biwen.li at nxp.com> >> --- >> Changes in RESEND v8: >> - fix build warning >> >> Changes in v8: >> - none >> >> Changes in v7: >> - none >> >> Changes in v6: >> - correct dependencies >> >> Changes in v5: >> - update subject >> >> Changes in v4: >> - update copyright >> >> Changes in v3: >> - none >> >> Changes in v2: >> - merge some patches to one patch >> >> arch/arm/cpu/armv8/fsl-layerscape/Kconfig | 10 ++-- >> arch/arm/dts/fsl-ls1046a-frwy.dts | 3 ++ >> arch/arm/dts/fsl-ls1046a-qds.dtsi | 4 ++ >> arch/arm/dts/fsl-ls1046a-rdb.dts | 8 ++++ >> arch/arm/include/asm/gpio.h | 5 +- >> board/freescale/ls1046afrwy/ls1046afrwy.c | 17 ++++++- >> board/freescale/ls1046aqds/ls1046aqds.c | 25 ++++++++-- >> configs/ls1046afrwy_tfa_defconfig | 2 + >> configs/ls1046aqds_SECURE_BOOT_defconfig | 2 + >> configs/ls1046aqds_defconfig | 2 + >> configs/ls1046aqds_lpuart_defconfig | 2 + >> configs/ls1046aqds_nand_defconfig | 2 + >> configs/ls1046aqds_qspi_defconfig | 2 + >> configs/ls1046aqds_sdcard_ifc_defconfig | 2 + >> configs/ls1046aqds_sdcard_qspi_defconfig | 2 + >> configs/ls1046aqds_tfa_SECURE_BOOT_defconfig | 2 + >> configs/ls1046aqds_tfa_defconfig | 2 + >> configs/ls1046ardb_emmc_defconfig | 2 + >> configs/ls1046ardb_qspi_SECURE_BOOT_defconfig | 2 + >> configs/ls1046ardb_qspi_defconfig | 2 + >> configs/ls1046ardb_qspi_spl_defconfig | 2 + >> .../ls1046ardb_sdcard_SECURE_BOOT_defconfig | 2 + >> configs/ls1046ardb_sdcard_defconfig | 2 + >> configs/ls1046ardb_tfa_SECURE_BOOT_defconfig | 2 + >> configs/ls1046ardb_tfa_defconfig | 2 + >> drivers/power/power_i2c.c | 46 >> ++++++++++++++++++- >> include/configs/ls1046a_common.h | 11 +++++ >> 27 files changed, 150 insertions(+), 15 deletions(-) >> >> diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig >> b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig >> index 760053e401..b25639183f 100644 >> --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig >> +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig >> @@ -107,11 +107,11 @@ config ARCH_LS1046A >> select SYS_FSL_SRDS_2 >> select ARCH_EARLY_INIT_R >> select BOARD_EARLY_INIT_F >> - select SYS_I2C_MXC >> - select SYS_I2C_MXC_I2C1 >> - select SYS_I2C_MXC_I2C2 >> - select SYS_I2C_MXC_I2C3 >> - select SYS_I2C_MXC_I2C4 >> + select SYS_I2C_MXC if !DM_I2C >> + select SYS_I2C_MXC_I2C1 if !DM_I2C >> + select SYS_I2C_MXC_I2C2 if !DM_I2C >> + select SYS_I2C_MXC_I2C3 if !DM_I2C >> + select SYS_I2C_MXC_I2C4 if !DM_I2C >> imply SCSI >> imply SCSI_AHCI >> >> diff --git a/arch/arm/dts/fsl-ls1046a-frwy.dts >> b/arch/arm/dts/fsl-ls1046a-frwy.dts >> index 3d41e3bd44..d39159322a 100644 >> --- a/arch/arm/dts/fsl-ls1046a-frwy.dts >> +++ b/arch/arm/dts/fsl-ls1046a-frwy.dts >> @@ -32,3 +32,6 @@ >> >> }; >> >> +&i2c0 { >> + status = "okay"; >> +}; >> diff --git a/arch/arm/dts/fsl-ls1046a-qds.dtsi >> b/arch/arm/dts/fsl-ls1046a-qds.dtsi >> index c95f44fc36..76dc397328 100644 >> --- a/arch/arm/dts/fsl-ls1046a-qds.dtsi >> +++ b/arch/arm/dts/fsl-ls1046a-qds.dtsi >> @@ -80,3 +80,7 @@ >> &sata { >> status = "okay"; >> }; >> + >> +&i2c0 { >> + status = "okay"; >> +}; >> diff --git a/arch/arm/dts/fsl-ls1046a-rdb.dts >> b/arch/arm/dts/fsl-ls1046a-rdb.dts >> index a05c9e9b9e..83e34ab02a 100644 >> --- a/arch/arm/dts/fsl-ls1046a-rdb.dts >> +++ b/arch/arm/dts/fsl-ls1046a-rdb.dts >> @@ -43,3 +43,11 @@ >> &sata { >> status = "okay"; >> }; >> + >> +&i2c0 { >> + status = "okay"; >> +}; >> + >> +&i2c3 { >> + status = "okay"; >> +}; >> diff --git a/arch/arm/include/asm/gpio.h b/arch/arm/include/asm/gpio.h >> index c480e712fe..09573722ac 100644 >> --- a/arch/arm/include/asm/gpio.h >> +++ b/arch/arm/include/asm/gpio.h >> @@ -3,8 +3,9 @@ >> !defined(CONFIG_ARCH_BCM6858) >> && !defined(CONFIG_ARCH_BCM63158) && \ >> !defined(CONFIG_ARCH_ROCKCHIP) >> && !defined(CONFIG_ARCH_LX2160A) && \ >> !defined(CONFIG_ARCH_LS1012A) && >!defined(CONFIG_ARCH_LS1028A) && \ >> - !defined(CONFIG_ARCH_LS1043A) && >!defined(CONFIG_ARCH_LS2080A) >> && \ >> - !defined(CONFIG_ARCH_LS1088A) && !defined(CONFIG_ARCH_ASPEED) >> && \ >> + !defined(CONFIG_ARCH_LS1043A) && >!defined(CONFIG_ARCH_LS1046A) >> && \ >> + !defined(CONFIG_ARCH_LS2080A) && >!defined(CONFIG_ARCH_LS1088A) >> && \ >> + !defined(CONFIG_ARCH_ASPEED) && \ >> !defined(CONFIG_ARCH_U8500) >> #include <asm/arch/gpio.h> >> #endif >> diff --git a/board/freescale/ls1046afrwy/ls1046afrwy.c >> b/board/freescale/ls1046afrwy/ls1046afrwy.c >> index db8b3a5b92..8c0abb63a9 100644 >> --- a/board/freescale/ls1046afrwy/ls1046afrwy.c >> +++ b/board/freescale/ls1046afrwy/ls1046afrwy.c >> @@ -36,11 +36,24 @@ >> >> DECLARE_GLOBAL_DATA_PTR; >> >> -int select_i2c_ch_pca9547(u8 ch) >> +int select_i2c_ch_pca9547(u8 ch, int bus_num) >> { >> int ret; >> >> +#ifdef CONFIG_DM_I2C >> + struct udevice *dev; >> + >> + ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI, >> + 1, &dev); >> + if (ret) { >> + printf("%s: Cannot find udev for a bus %d\n", __func__, >> + bus_num); >> + return ret; >> + } >> + ret = dm_i2c_write(dev, 0, &ch, 1); >> +#else >> ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); >> +#endif >> if (ret) { >> puts("PCA: failed to select proper channel\n"); >> return ret; >> @@ -149,7 +162,7 @@ val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) >& >> ~(SCR0_USFCFG_MASK); >> sec_init(); >> #endif >> >> - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); >> + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); >> return 0; >> } >> >> diff --git a/board/freescale/ls1046aqds/ls1046aqds.c >> b/board/freescale/ls1046aqds/ls1046aqds.c >> index aac5d9aa84..cabd7ee648 100644 >> --- a/board/freescale/ls1046aqds/ls1046aqds.c >> +++ b/board/freescale/ls1046aqds/ls1046aqds.c >> @@ -1,6 +1,7 @@ >> // SPDX-License-Identifier: GPL-2.0+ >> /* >> * Copyright 2016 Freescale Semiconductor, Inc. >> + * Copyright 2019 NXP >> */ >> >> #include <common.h> >> @@ -269,11 +270,23 @@ u32 get_lpuart_clk(void) } #endif >> >> -int select_i2c_ch_pca9547(u8 ch) >> +int select_i2c_ch_pca9547(u8 ch, int bus_num) >> { >> int ret; >> +#ifdef CONFIG_DM_I2C >> + struct udevice *dev; >> >> + ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI, >> + 1, &dev); >> + if (ret) { >> + printf("%s: Cannot find udev for a bus %d\n", __func__, >> + bus_num); >> + return ret; >> + } >> + ret = dm_i2c_write(dev, 0, &ch, 1); >> +#else >> ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); >> +#endif >> if (ret) { >> puts("PCA: failed to select proper channel\n"); >> return ret; >> @@ -288,8 +301,10 @@ int dram_init(void) >> * When resuming from deep sleep, the I2C channel may not be >> * in the default channel. So, switch to the default channel >> * before accessing DDR SPD. >> + * >> + * PCA9547 mount on I2C1 bus >> */ >> - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); >> + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); >> fsl_initdram(); >> #if (!defined(CONFIG_SPL) && !defined(CONFIG_TFABOOT)) || \ >> defined(CONFIG_SPL_BUILD) >> @@ -302,7 +317,7 @@ int dram_init(void) >> >> int i2c_multiplexer_select_vid_channel(u8 channel) { >> - return select_i2c_ch_pca9547(channel); >> + return select_i2c_ch_pca9547(channel, 0); >> } >> >> int board_early_init_f(void) >> @@ -315,8 +330,10 @@ int board_early_init_f(void) >> u8 uart; >> #endif >> >> +#ifdef CONFIG_SYS_I2C >> #ifdef CONFIG_SYS_I2C_EARLY_INIT >> i2c_early_init_f(); >> +#endif >> #endif >> fsl_lsch2_early_init_f(); >> >> @@ -394,7 +411,7 @@ int misc_init_r(void) >> >> int board_init(void) >> { >> - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); >> + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); >> >> #ifdef CONFIG_SYS_FSL_SERDES >> config_serdes_mux(); >> diff --git a/configs/ls1046afrwy_tfa_defconfig >> b/configs/ls1046afrwy_tfa_defconfig >> index 96efee6736..30d8a6c1c9 100644 >> --- a/configs/ls1046afrwy_tfa_defconfig >> +++ b/configs/ls1046afrwy_tfa_defconfig >> @@ -62,3 +62,5 @@ CONFIG_USB_HOST_ETHER=y >CONFIG_USB_ETHER_RTL8152=y >> CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_SECURE_BOOT_defconfig >> b/configs/ls1046aqds_SECURE_BOOT_defconfig >> index 6ea27c7ba4..ed25b7a680 100644 >> --- a/configs/ls1046aqds_SECURE_BOOT_defconfig >> +++ b/configs/ls1046aqds_SECURE_BOOT_defconfig >> @@ -60,3 +60,5 @@ CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y >> CONFIG_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_defconfig >> b/configs/ls1046aqds_defconfig index 04c1176d85..0a50bb14c0 100644 >> --- a/configs/ls1046aqds_defconfig >> +++ b/configs/ls1046aqds_defconfig >> @@ -62,3 +62,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_lpuart_defconfig >> b/configs/ls1046aqds_lpuart_defconfig >> index b0a24f297e..17d1685081 100644 >> --- a/configs/ls1046aqds_lpuart_defconfig >> +++ b/configs/ls1046aqds_lpuart_defconfig >> @@ -64,3 +64,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_nand_defconfig >> b/configs/ls1046aqds_nand_defconfig >> index 3ffe6a6ef9..0bafcbe168 100644 >> --- a/configs/ls1046aqds_nand_defconfig >> +++ b/configs/ls1046aqds_nand_defconfig >> @@ -70,3 +70,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_qspi_defconfig >> b/configs/ls1046aqds_qspi_defconfig >> index d6253c790a..ff0fd45c9e 100644 >> --- a/configs/ls1046aqds_qspi_defconfig >> +++ b/configs/ls1046aqds_qspi_defconfig >> @@ -58,3 +58,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_sdcard_ifc_defconfig >> b/configs/ls1046aqds_sdcard_ifc_defconfig >> index fad33163b6..78edb456b8 100644 >> --- a/configs/ls1046aqds_sdcard_ifc_defconfig >> +++ b/configs/ls1046aqds_sdcard_ifc_defconfig >> @@ -80,3 +80,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_sdcard_qspi_defconfig >> b/configs/ls1046aqds_sdcard_qspi_defconfig >> index 3571a6f9e9..d085daf384 100644 >> --- a/configs/ls1046aqds_sdcard_qspi_defconfig >> +++ b/configs/ls1046aqds_sdcard_qspi_defconfig >> @@ -74,3 +74,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig >> b/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig >> index c50e525fd3..837b016d00 100644 >> --- a/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig >> +++ b/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig >> @@ -62,3 +62,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y CONFIG_CMD_SETEXPR=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046aqds_tfa_defconfig >> b/configs/ls1046aqds_tfa_defconfig >> index 824fc518ca..04e6b2392c 100644 >> --- a/configs/ls1046aqds_tfa_defconfig >> +++ b/configs/ls1046aqds_tfa_defconfig >> @@ -71,3 +71,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_emmc_defconfig >> b/configs/ls1046ardb_emmc_defconfig >> index 768ce7a821..bbb352db31 100644 >> --- a/configs/ls1046ardb_emmc_defconfig >> +++ b/configs/ls1046ardb_emmc_defconfig >> @@ -73,3 +73,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig >> b/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig >> index aff9bf81fc..b9c8a8822c 100644 >> --- a/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig >> +++ b/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig >> @@ -55,3 +55,5 @@ CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y >> CONFIG_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_qspi_defconfig >> b/configs/ls1046ardb_qspi_defconfig >> index b482e73bef..51edada3f8 100644 >> --- a/configs/ls1046ardb_qspi_defconfig >> +++ b/configs/ls1046ardb_qspi_defconfig >> @@ -57,3 +57,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_qspi_spl_defconfig >> b/configs/ls1046ardb_qspi_spl_defconfig >> index 1e2770a9c0..84e059671c 100644 >> --- a/configs/ls1046ardb_qspi_spl_defconfig >> +++ b/configs/ls1046ardb_qspi_spl_defconfig >> @@ -77,3 +77,5 @@ CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y >> CONFIG_SPL_GZIP=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig >> b/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig >> index 1f5fa8ff03..9954e894da 100644 >> --- a/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig >> +++ b/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig >> @@ -70,3 +70,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y >> CONFIG_SPL_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_sdcard_defconfig >> b/configs/ls1046ardb_sdcard_defconfig >> index 197090474b..3502809756 100644 >> --- a/configs/ls1046ardb_sdcard_defconfig >> +++ b/configs/ls1046ardb_sdcard_defconfig >> @@ -72,3 +72,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig >> b/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig >> index 43a123625c..c8c6ae9396 100644 >> --- a/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig >> +++ b/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig >> @@ -55,3 +55,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y CONFIG_CMD_SETEXPR=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/configs/ls1046ardb_tfa_defconfig >> b/configs/ls1046ardb_tfa_defconfig >> index 280ca83d42..2f7686bafd 100644 >> --- a/configs/ls1046ardb_tfa_defconfig >> +++ b/configs/ls1046ardb_tfa_defconfig >> @@ -58,3 +58,5 @@ CONFIG_DM_USB=y >> CONFIG_USB_XHCI_HCD=y >> CONFIG_USB_XHCI_DWC3=y >> CONFIG_EFI_LOADER_BOUNCE_BUFFER=y >> +CONFIG_DM_I2C=y >> +CONFIG_DM_GPIO=y >> diff --git a/drivers/power/power_i2c.c b/drivers/power/power_i2c.c >> index bcddff2d7a..b30f223a5c 100644 >> --- a/drivers/power/power_i2c.c >> +++ b/drivers/power/power_i2c.c >> @@ -7,6 +7,7 @@ >> * Stefano Babic, DENX Software Engineering, sbabic at denx.de >> * >> * (C) Copyright 2008-2009 Freescale Semiconductor, Inc. >> + * (C) Copyright 2019 NXP >> */ >> >> #include <common.h> >> @@ -21,8 +22,20 @@ int pmic_reg_write(struct pmic *p, u32 reg, u32 >> val) >> >> if (check_reg(p, reg)) >> return -EINVAL; >> +#if defined(CONFIG_DM_I2C) >> + struct udevice *dev; >> + int ret; >> >> + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, >> + 1, &dev); >> + if (ret) { >> + printf("%s: Cannot find udev for a bus %d\n", __func__, >> + p->bus); >> + return -ENXIO; >> + } >> +#else /* Non DM I2C support - will be removed */ >> I2C_SET_BUS(p->bus); >> +#endif >> >> switch (pmic_i2c_tx_num) { >> case 3: >> @@ -53,7 +66,11 @@ int pmic_reg_write(struct pmic *p, u32 reg, u32 val) >> return -EINVAL; >> } >> >> +#if defined(CONFIG_DM_I2C) >> + return dm_i2c_write(dev, reg, buf, pmic_i2c_tx_num); #else >> return i2c_write(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num); >> +#endif >> } >> >> int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) @@ -65,9 +82,21 >> @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) >> if (check_reg(p, reg)) >> return -EINVAL; >> >> - I2C_SET_BUS(p->bus); >> +#if defined(CONFIG_DM_I2C) >> + struct udevice *dev; >> >> + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, >> + 1, &dev); >> + if (ret) { >> + printf("%s: Cannot find udev for a bus %d\n", __func__, >> + p->bus); >> + return -ENXIO; >> + } >> + ret = dm_i2c_read(dev, reg, buf, pmic_i2c_tx_num); #else /* Non DM >> +I2C support - will be removed */ >> + I2C_SET_BUS(p->bus); >> ret = i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num); >> +#endif >> if (ret) >> return ret; >> >> @@ -100,12 +129,25 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 >> *val) >> >> int pmic_probe(struct pmic *p) >> { >> - i2c_set_bus_num(p->bus); >> debug("Bus: %d PMIC:%s probed!\n", p->bus, p->name); >> +#if defined(CONFIG_DM_I2C) >> + struct udevice *dev; >> + int ret; >> + >> + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, >> + 1, &dev); >> + if (ret) { >> + printf("%s: Cannot find udev for a bus %d\n", __func__, >> + p->bus); >> + return -ENXIO; >> + } >> +#else /* Non DM I2C support - will be removed */ >> + i2c_set_bus_num(p->bus); >> if (i2c_probe(pmic_i2c_addr)) { >> printf("Can't find PMIC:%s\n", p->name); >> return -ENODEV; >> } >> +#endif >> >> return 0; >> } >> diff --git a/include/configs/ls1046a_common.h >> b/include/configs/ls1046a_common.h >> index 6543cfd868..5d2d5e6bbf 100644 >> --- a/include/configs/ls1046a_common.h >> +++ b/include/configs/ls1046a_common.h >> @@ -16,6 +16,7 @@ >> #define SPL_NO_QSPI >> #define SPL_NO_USB >> #define SPL_NO_SATA >> +#undef CONFIG_DM_I2C >> #endif >> #if defined(CONFIG_SPL_BUILD) && \ >> (defined(CONFIG_NAND_BOOT) || defined(CONFIG_QSPI_BOOT)) @@ >> -126,7 +127,17 @@ #endif >> >> /* I2C */ >> +#ifndef CONFIG_DM_I2C >> #define CONFIG_SYS_I2C >> +#define CONFIG_SYS_I2C_MXC >> +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ >> +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ >> +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ >> +#define CONFIG_SYS_I2C_MXC_I2C4 /* enable I2C bus 4 */ >> +#else >> +#define CONFIG_I2C_SET_DEFAULT_BUS_NUM #define >> +CONFIG_I2C_DEFAULT_BUS_NUMBER 0 #endif >> >> /* PCIe */ >> #define CONFIG_PCIE1 /* PCIE controller 1 */ >> -- >> 2.17.1
diff --git a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig index 760053e401..b25639183f 100644 --- a/arch/arm/cpu/armv8/fsl-layerscape/Kconfig +++ b/arch/arm/cpu/armv8/fsl-layerscape/Kconfig @@ -107,11 +107,11 @@ config ARCH_LS1046A select SYS_FSL_SRDS_2 select ARCH_EARLY_INIT_R select BOARD_EARLY_INIT_F - select SYS_I2C_MXC - select SYS_I2C_MXC_I2C1 - select SYS_I2C_MXC_I2C2 - select SYS_I2C_MXC_I2C3 - select SYS_I2C_MXC_I2C4 + select SYS_I2C_MXC if !DM_I2C + select SYS_I2C_MXC_I2C1 if !DM_I2C + select SYS_I2C_MXC_I2C2 if !DM_I2C + select SYS_I2C_MXC_I2C3 if !DM_I2C + select SYS_I2C_MXC_I2C4 if !DM_I2C imply SCSI imply SCSI_AHCI diff --git a/arch/arm/dts/fsl-ls1046a-frwy.dts b/arch/arm/dts/fsl-ls1046a-frwy.dts index 3d41e3bd44..d39159322a 100644 --- a/arch/arm/dts/fsl-ls1046a-frwy.dts +++ b/arch/arm/dts/fsl-ls1046a-frwy.dts @@ -32,3 +32,6 @@ }; +&i2c0 { + status = "okay"; +}; diff --git a/arch/arm/dts/fsl-ls1046a-qds.dtsi b/arch/arm/dts/fsl-ls1046a-qds.dtsi index c95f44fc36..76dc397328 100644 --- a/arch/arm/dts/fsl-ls1046a-qds.dtsi +++ b/arch/arm/dts/fsl-ls1046a-qds.dtsi @@ -80,3 +80,7 @@ &sata { status = "okay"; }; + +&i2c0 { + status = "okay"; +}; diff --git a/arch/arm/dts/fsl-ls1046a-rdb.dts b/arch/arm/dts/fsl-ls1046a-rdb.dts index a05c9e9b9e..83e34ab02a 100644 --- a/arch/arm/dts/fsl-ls1046a-rdb.dts +++ b/arch/arm/dts/fsl-ls1046a-rdb.dts @@ -43,3 +43,11 @@ &sata { status = "okay"; }; + +&i2c0 { + status = "okay"; +}; + +&i2c3 { + status = "okay"; +}; diff --git a/arch/arm/include/asm/gpio.h b/arch/arm/include/asm/gpio.h index c480e712fe..09573722ac 100644 --- a/arch/arm/include/asm/gpio.h +++ b/arch/arm/include/asm/gpio.h @@ -3,8 +3,9 @@ !defined(CONFIG_ARCH_BCM6858) && !defined(CONFIG_ARCH_BCM63158) && \ !defined(CONFIG_ARCH_ROCKCHIP) && !defined(CONFIG_ARCH_LX2160A) && \ !defined(CONFIG_ARCH_LS1012A) && !defined(CONFIG_ARCH_LS1028A) && \ - !defined(CONFIG_ARCH_LS1043A) && !defined(CONFIG_ARCH_LS2080A) && \ - !defined(CONFIG_ARCH_LS1088A) && !defined(CONFIG_ARCH_ASPEED) && \ + !defined(CONFIG_ARCH_LS1043A) && !defined(CONFIG_ARCH_LS1046A) && \ + !defined(CONFIG_ARCH_LS2080A) && !defined(CONFIG_ARCH_LS1088A) && \ + !defined(CONFIG_ARCH_ASPEED) && \ !defined(CONFIG_ARCH_U8500) #include <asm/arch/gpio.h> #endif diff --git a/board/freescale/ls1046afrwy/ls1046afrwy.c b/board/freescale/ls1046afrwy/ls1046afrwy.c index db8b3a5b92..8c0abb63a9 100644 --- a/board/freescale/ls1046afrwy/ls1046afrwy.c +++ b/board/freescale/ls1046afrwy/ls1046afrwy.c @@ -36,11 +36,24 @@ DECLARE_GLOBAL_DATA_PTR; -int select_i2c_ch_pca9547(u8 ch) +int select_i2c_ch_pca9547(u8 ch, int bus_num) { int ret; +#ifdef CONFIG_DM_I2C + struct udevice *dev; + + ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI, + 1, &dev); + if (ret) { + printf("%s: Cannot find udev for a bus %d\n", __func__, + bus_num); + return ret; + } + ret = dm_i2c_write(dev, 0, &ch, 1); +#else ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); +#endif if (ret) { puts("PCA: failed to select proper channel\n"); return ret; @@ -149,7 +162,7 @@ val = (in_le32(SMMU_SCR0) | SCR0_CLIENTPD_MASK) & ~(SCR0_USFCFG_MASK); sec_init(); #endif - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); return 0; } diff --git a/board/freescale/ls1046aqds/ls1046aqds.c b/board/freescale/ls1046aqds/ls1046aqds.c index aac5d9aa84..cabd7ee648 100644 --- a/board/freescale/ls1046aqds/ls1046aqds.c +++ b/board/freescale/ls1046aqds/ls1046aqds.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0+ /* * Copyright 2016 Freescale Semiconductor, Inc. + * Copyright 2019 NXP */ #include <common.h> @@ -269,11 +270,23 @@ u32 get_lpuart_clk(void) } #endif -int select_i2c_ch_pca9547(u8 ch) +int select_i2c_ch_pca9547(u8 ch, int bus_num) { int ret; +#ifdef CONFIG_DM_I2C + struct udevice *dev; + ret = i2c_get_chip_for_busnum(bus_num, I2C_MUX_PCA_ADDR_PRI, + 1, &dev); + if (ret) { + printf("%s: Cannot find udev for a bus %d\n", __func__, + bus_num); + return ret; + } + ret = dm_i2c_write(dev, 0, &ch, 1); +#else ret = i2c_write(I2C_MUX_PCA_ADDR_PRI, 0, 1, &ch, 1); +#endif if (ret) { puts("PCA: failed to select proper channel\n"); return ret; @@ -288,8 +301,10 @@ int dram_init(void) * When resuming from deep sleep, the I2C channel may not be * in the default channel. So, switch to the default channel * before accessing DDR SPD. + * + * PCA9547 mount on I2C1 bus */ - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); fsl_initdram(); #if (!defined(CONFIG_SPL) && !defined(CONFIG_TFABOOT)) || \ defined(CONFIG_SPL_BUILD) @@ -302,7 +317,7 @@ int dram_init(void) int i2c_multiplexer_select_vid_channel(u8 channel) { - return select_i2c_ch_pca9547(channel); + return select_i2c_ch_pca9547(channel, 0); } int board_early_init_f(void) @@ -315,8 +330,10 @@ int board_early_init_f(void) u8 uart; #endif +#ifdef CONFIG_SYS_I2C #ifdef CONFIG_SYS_I2C_EARLY_INIT i2c_early_init_f(); +#endif #endif fsl_lsch2_early_init_f(); @@ -394,7 +411,7 @@ int misc_init_r(void) int board_init(void) { - select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT); + select_i2c_ch_pca9547(I2C_MUX_CH_DEFAULT, 0); #ifdef CONFIG_SYS_FSL_SERDES config_serdes_mux(); diff --git a/configs/ls1046afrwy_tfa_defconfig b/configs/ls1046afrwy_tfa_defconfig index 96efee6736..30d8a6c1c9 100644 --- a/configs/ls1046afrwy_tfa_defconfig +++ b/configs/ls1046afrwy_tfa_defconfig @@ -62,3 +62,5 @@ CONFIG_USB_HOST_ETHER=y CONFIG_USB_ETHER_RTL8152=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_SECURE_BOOT_defconfig b/configs/ls1046aqds_SECURE_BOOT_defconfig index 6ea27c7ba4..ed25b7a680 100644 --- a/configs/ls1046aqds_SECURE_BOOT_defconfig +++ b/configs/ls1046aqds_SECURE_BOOT_defconfig @@ -60,3 +60,5 @@ CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_defconfig b/configs/ls1046aqds_defconfig index 04c1176d85..0a50bb14c0 100644 --- a/configs/ls1046aqds_defconfig +++ b/configs/ls1046aqds_defconfig @@ -62,3 +62,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_lpuart_defconfig b/configs/ls1046aqds_lpuart_defconfig index b0a24f297e..17d1685081 100644 --- a/configs/ls1046aqds_lpuart_defconfig +++ b/configs/ls1046aqds_lpuart_defconfig @@ -64,3 +64,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_nand_defconfig b/configs/ls1046aqds_nand_defconfig index 3ffe6a6ef9..0bafcbe168 100644 --- a/configs/ls1046aqds_nand_defconfig +++ b/configs/ls1046aqds_nand_defconfig @@ -70,3 +70,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_qspi_defconfig b/configs/ls1046aqds_qspi_defconfig index d6253c790a..ff0fd45c9e 100644 --- a/configs/ls1046aqds_qspi_defconfig +++ b/configs/ls1046aqds_qspi_defconfig @@ -58,3 +58,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_sdcard_ifc_defconfig b/configs/ls1046aqds_sdcard_ifc_defconfig index fad33163b6..78edb456b8 100644 --- a/configs/ls1046aqds_sdcard_ifc_defconfig +++ b/configs/ls1046aqds_sdcard_ifc_defconfig @@ -80,3 +80,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_sdcard_qspi_defconfig b/configs/ls1046aqds_sdcard_qspi_defconfig index 3571a6f9e9..d085daf384 100644 --- a/configs/ls1046aqds_sdcard_qspi_defconfig +++ b/configs/ls1046aqds_sdcard_qspi_defconfig @@ -74,3 +74,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig b/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig index c50e525fd3..837b016d00 100644 --- a/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig +++ b/configs/ls1046aqds_tfa_SECURE_BOOT_defconfig @@ -62,3 +62,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y CONFIG_CMD_SETEXPR=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046aqds_tfa_defconfig b/configs/ls1046aqds_tfa_defconfig index 824fc518ca..04e6b2392c 100644 --- a/configs/ls1046aqds_tfa_defconfig +++ b/configs/ls1046aqds_tfa_defconfig @@ -71,3 +71,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_emmc_defconfig b/configs/ls1046ardb_emmc_defconfig index 768ce7a821..bbb352db31 100644 --- a/configs/ls1046ardb_emmc_defconfig +++ b/configs/ls1046ardb_emmc_defconfig @@ -73,3 +73,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig b/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig index aff9bf81fc..b9c8a8822c 100644 --- a/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig +++ b/configs/ls1046ardb_qspi_SECURE_BOOT_defconfig @@ -55,3 +55,5 @@ CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_qspi_defconfig b/configs/ls1046ardb_qspi_defconfig index b482e73bef..51edada3f8 100644 --- a/configs/ls1046ardb_qspi_defconfig +++ b/configs/ls1046ardb_qspi_defconfig @@ -57,3 +57,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_qspi_spl_defconfig b/configs/ls1046ardb_qspi_spl_defconfig index 1e2770a9c0..84e059671c 100644 --- a/configs/ls1046ardb_qspi_spl_defconfig +++ b/configs/ls1046ardb_qspi_spl_defconfig @@ -77,3 +77,5 @@ CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_SPL_GZIP=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig b/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig index 1f5fa8ff03..9954e894da 100644 --- a/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig +++ b/configs/ls1046ardb_sdcard_SECURE_BOOT_defconfig @@ -70,3 +70,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y CONFIG_SPL_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_sdcard_defconfig b/configs/ls1046ardb_sdcard_defconfig index 197090474b..3502809756 100644 --- a/configs/ls1046ardb_sdcard_defconfig +++ b/configs/ls1046ardb_sdcard_defconfig @@ -72,3 +72,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig b/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig index 43a123625c..c8c6ae9396 100644 --- a/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig +++ b/configs/ls1046ardb_tfa_SECURE_BOOT_defconfig @@ -55,3 +55,5 @@ CONFIG_USB_XHCI_DWC3=y CONFIG_RSA=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y CONFIG_CMD_SETEXPR=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/configs/ls1046ardb_tfa_defconfig b/configs/ls1046ardb_tfa_defconfig index 280ca83d42..2f7686bafd 100644 --- a/configs/ls1046ardb_tfa_defconfig +++ b/configs/ls1046ardb_tfa_defconfig @@ -58,3 +58,5 @@ CONFIG_DM_USB=y CONFIG_USB_XHCI_HCD=y CONFIG_USB_XHCI_DWC3=y CONFIG_EFI_LOADER_BOUNCE_BUFFER=y +CONFIG_DM_I2C=y +CONFIG_DM_GPIO=y diff --git a/drivers/power/power_i2c.c b/drivers/power/power_i2c.c index bcddff2d7a..b30f223a5c 100644 --- a/drivers/power/power_i2c.c +++ b/drivers/power/power_i2c.c @@ -7,6 +7,7 @@ * Stefano Babic, DENX Software Engineering, sbabic at denx.de * * (C) Copyright 2008-2009 Freescale Semiconductor, Inc. + * (C) Copyright 2019 NXP */ #include <common.h> @@ -21,8 +22,20 @@ int pmic_reg_write(struct pmic *p, u32 reg, u32 val) if (check_reg(p, reg)) return -EINVAL; +#if defined(CONFIG_DM_I2C) + struct udevice *dev; + int ret; + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, + 1, &dev); + if (ret) { + printf("%s: Cannot find udev for a bus %d\n", __func__, + p->bus); + return -ENXIO; + } +#else /* Non DM I2C support - will be removed */ I2C_SET_BUS(p->bus); +#endif switch (pmic_i2c_tx_num) { case 3: @@ -53,7 +66,11 @@ int pmic_reg_write(struct pmic *p, u32 reg, u32 val) return -EINVAL; } +#if defined(CONFIG_DM_I2C) + return dm_i2c_write(dev, reg, buf, pmic_i2c_tx_num); +#else return i2c_write(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num); +#endif } int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) @@ -65,9 +82,21 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) if (check_reg(p, reg)) return -EINVAL; - I2C_SET_BUS(p->bus); +#if defined(CONFIG_DM_I2C) + struct udevice *dev; + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, + 1, &dev); + if (ret) { + printf("%s: Cannot find udev for a bus %d\n", __func__, + p->bus); + return -ENXIO; + } + ret = dm_i2c_read(dev, reg, buf, pmic_i2c_tx_num); +#else /* Non DM I2C support - will be removed */ + I2C_SET_BUS(p->bus); ret = i2c_read(pmic_i2c_addr, reg, 1, buf, pmic_i2c_tx_num); +#endif if (ret) return ret; @@ -100,12 +129,25 @@ int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) int pmic_probe(struct pmic *p) { - i2c_set_bus_num(p->bus); debug("Bus: %d PMIC:%s probed!\n", p->bus, p->name); +#if defined(CONFIG_DM_I2C) + struct udevice *dev; + int ret; + + ret = i2c_get_chip_for_busnum(p->bus, pmic_i2c_addr, + 1, &dev); + if (ret) { + printf("%s: Cannot find udev for a bus %d\n", __func__, + p->bus); + return -ENXIO; + } +#else /* Non DM I2C support - will be removed */ + i2c_set_bus_num(p->bus); if (i2c_probe(pmic_i2c_addr)) { printf("Can't find PMIC:%s\n", p->name); return -ENODEV; } +#endif return 0; } diff --git a/include/configs/ls1046a_common.h b/include/configs/ls1046a_common.h index 6543cfd868..5d2d5e6bbf 100644 --- a/include/configs/ls1046a_common.h +++ b/include/configs/ls1046a_common.h @@ -16,6 +16,7 @@ #define SPL_NO_QSPI #define SPL_NO_USB #define SPL_NO_SATA +#undef CONFIG_DM_I2C #endif #if defined(CONFIG_SPL_BUILD) && \ (defined(CONFIG_NAND_BOOT) || defined(CONFIG_QSPI_BOOT)) @@ -126,7 +127,17 @@ #endif /* I2C */ +#ifndef CONFIG_DM_I2C #define CONFIG_SYS_I2C +#define CONFIG_SYS_I2C_MXC +#define CONFIG_SYS_I2C_MXC_I2C1 /* enable I2C bus 1 */ +#define CONFIG_SYS_I2C_MXC_I2C2 /* enable I2C bus 2 */ +#define CONFIG_SYS_I2C_MXC_I2C3 /* enable I2C bus 3 */ +#define CONFIG_SYS_I2C_MXC_I2C4 /* enable I2C bus 4 */ +#else +#define CONFIG_I2C_SET_DEFAULT_BUS_NUM +#define CONFIG_I2C_DEFAULT_BUS_NUMBER 0 +#endif /* PCIe */ #define CONFIG_PCIE1 /* PCIE controller 1 */