imx8m: config: convert to bootm_size
[platform/kernel/u-boot.git] / drivers / i2c / muxes / pca954x.c
index 2b70ff8..7360e16 100644 (file)
@@ -1,28 +1,32 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2015 - 2016 Xilinx, Inc.
  * Copyright (C) 2017 National Instruments Corp
  * Written by Michal Simek
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
 #include <dm.h>
 #include <errno.h>
 #include <i2c.h>
+#include <log.h>
+#include <malloc.h>
 
 #include <asm-generic/gpio.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
 enum pca_type {
+       PCA9543,
        PCA9544,
+       PCA9546,
        PCA9547,
-       PCA9548
+       PCA9548,
+       PCA9646
 };
 
 struct chip_desc {
-       u8 enable;
+       u8 enable; /* Enable mask in ctl register (used for muxes only) */
        enum muxtype {
                pca954x_ismux = 0,
                pca954x_isswi,
@@ -37,21 +41,32 @@ struct pca954x_priv {
 };
 
 static const struct chip_desc chips[] = {
+       [PCA9543] = {
+               .muxtype = pca954x_isswi,
+               .width = 2,
+       },
        [PCA9544] = {
                .enable = 0x4,
                .muxtype = pca954x_ismux,
                .width = 4,
        },
+       [PCA9546] = {
+               .muxtype = pca954x_isswi,
+               .width = 4,
+       },
        [PCA9547] = {
                .enable = 0x8,
                .muxtype = pca954x_ismux,
                .width = 8,
        },
        [PCA9548] = {
-               .enable = 0x8,
                .muxtype = pca954x_isswi,
                .width = 8,
        },
+       [PCA9646] = {
+               .muxtype = pca954x_isswi,
+               .width = 4,
+       },
 };
 
 static int pca954x_deselect(struct udevice *mux, struct udevice *bus,
@@ -84,9 +99,12 @@ static const struct i2c_mux_ops pca954x_ops = {
 };
 
 static const struct udevice_id pca954x_ids[] = {
+       { .compatible = "nxp,pca9543", .data = PCA9543 },
        { .compatible = "nxp,pca9544", .data = PCA9544 },
+       { .compatible = "nxp,pca9546", .data = PCA9546 },
        { .compatible = "nxp,pca9547", .data = PCA9547 },
        { .compatible = "nxp,pca9548", .data = PCA9548 },
+       { .compatible = "nxp,pca9646", .data = PCA9646 },
        { }
 };
 
@@ -95,7 +113,7 @@ static int pca954x_ofdata_to_platdata(struct udevice *dev)
        struct pca954x_priv *priv = dev_get_priv(dev);
        const struct chip_desc *chip = &chips[dev_get_driver_data(dev)];
 
-       priv->addr = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "reg", 0);
+       priv->addr = dev_read_u32_default(dev, "reg", 0);
        if (!priv->addr) {
                debug("MUX not found\n");
                return -ENODEV;
@@ -115,7 +133,7 @@ static int pca954x_ofdata_to_platdata(struct udevice *dev)
 
 static int pca954x_probe(struct udevice *dev)
 {
-       if (IS_ENABLED(CONFIG_DM_GPIO)) {
+       if (CONFIG_IS_ENABLED(DM_GPIO)) {
                struct pca954x_priv *priv = dev_get_priv(dev);
                int err;
 
@@ -136,7 +154,7 @@ static int pca954x_probe(struct udevice *dev)
 
 static int pca954x_remove(struct udevice *dev)
 {
-       if (IS_ENABLED(CONFIG_DM_GPIO)) {
+       if (CONFIG_IS_ENABLED(DM_GPIO)) {
                struct pca954x_priv *priv = dev_get_priv(dev);
 
                if (dm_gpio_is_valid(&priv->gpio_mux_reset))