]> Git Repo - J-u-boot.git/blobdiff - drivers/i2c/muxes/pca954x.c
dm: treewide: Rename ofdata_to_platdata() to of_to_plat()
[J-u-boot.git] / drivers / i2c / muxes / pca954x.c
index 01ca1ff48db903875b116825edac2fa7c1e460e7..d21a84c4fa88047435eda06071ba70bc5b0e3f4e 100644 (file)
@@ -1,32 +1,37 @@
+// 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,
        } muxtype;
+       u32 width;
 };
 
 struct pca954x_priv {
@@ -36,17 +41,31 @@ 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,
        },
 };
 
@@ -80,22 +99,26 @@ 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 },
        { }
 };
 
-static int pca954x_ofdata_to_platdata(struct udevice *dev)
+static int pca954x_of_to_plat(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;
        }
-       priv->width = dev_get_driver_data(dev);
+       priv->width = chip->width;
 
        if (!priv->width) {
                debug("No I2C MUX width specified\n");
@@ -110,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;
 
@@ -131,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))
@@ -148,6 +171,6 @@ U_BOOT_DRIVER(pca954x) = {
        .probe = pca954x_probe,
        .remove = pca954x_remove,
        .ops = &pca954x_ops,
-       .ofdata_to_platdata = pca954x_ofdata_to_platdata,
-       .priv_auto_alloc_size = sizeof(struct pca954x_priv),
+       .of_to_plat = pca954x_of_to_plat,
+       .priv_auto      = sizeof(struct pca954x_priv),
 };
This page took 0.031574 seconds and 4 git commands to generate.