dm: core: Add dev_get_uclass_priv() to access uclass private data
authorSimon Glass <sjg@chromium.org>
Thu, 5 Mar 2015 19:25:20 +0000 (12:25 -0700)
committerSimon Glass <sjg@chromium.org>
Fri, 17 Apr 2015 01:27:42 +0000 (19:27 -0600)
Add a convenience function to access the private data that a uclass stores
for each of its devices. Convert over most existing uses for consistency
and to provide an example for others.

Signed-off-by: Simon Glass <sjg@chromium.org>
27 files changed:
common/cmd_sf.c
common/cros_ec.c
drivers/core/device.c
drivers/gpio/at91_gpio.c
drivers/gpio/bcm2835_gpio.c
drivers/gpio/gpio-uclass.c
drivers/gpio/intel_ich6_gpio.c
drivers/gpio/mxc_gpio.c
drivers/gpio/omap_gpio.c
drivers/gpio/s5p_gpio.c
drivers/gpio/sandbox.c
drivers/gpio/sunxi_gpio.c
drivers/gpio/tegra_gpio.c
drivers/i2c/i2c-uclass.c
drivers/i2c/sandbox_i2c.c
drivers/misc/cros_ec.c
drivers/misc/cros_ec_i2c.c
drivers/misc/cros_ec_sandbox.c
drivers/misc/cros_ec_spi.c
drivers/mtd/spi/sf-uclass.c
drivers/mtd/spi/sf_probe.c
drivers/serial/serial-uclass.c
drivers/spi/spi-uclass.c
include/dm/device.h
include/i2c.h
test/dm/core.c
test/dm/test-uclass.c

index 5c788e96bdb821de3b7cd6f4f6cb8a40a0238cc4..20f14d3fc457b2d405dd79f57cd1a37ae12a44d3 100644 (file)
@@ -130,7 +130,7 @@ static int do_spi_flash_probe(int argc, char * const argv[])
                return 1;
        }
 
-       flash = new->uclass_priv;
+       flash = dev_get_uclass_priv(new);
 #else
        new = spi_flash_probe(bus, cs, speed, mode);
        if (!new) {
index bb299bccfff7073791ad9b1cedf5c1d3c171d190..64b46796eff5d40f5a371ae0a5ea221611e87e58 100644 (file)
@@ -35,7 +35,7 @@ struct cros_ec_dev *board_get_cros_ec_dev(void)
                debug("%s: Error %d\n", __func__, ret);
                return NULL;
        }
-       return dev->uclass_priv;
+       return dev_get_uclass_priv(dev);
 #else
        return local.cros_ec_dev;
 #endif
index 73c3e07c28b32c19fd01b76435172ab7419c8fa0..92e8a57bf69b1bedc608cb9f5ace3585fe99777b 100644 (file)
@@ -305,6 +305,16 @@ void *dev_get_priv(struct udevice *dev)
        return dev->priv;
 }
 
+void *dev_get_uclass_priv(struct udevice *dev)
+{
+       if (!dev) {
+               dm_warn("%s: null device\n", __func__);
+               return NULL;
+       }
+
+       return dev->uclass_priv;
+}
+
 void *dev_get_parentdata(struct udevice *dev)
 {
        if (!dev) {
index 22fbd630987f96d9cd214e8833522c762f9eb16c..75a32ee8156f105f0454e24aec5ffe987e292935 100644 (file)
@@ -511,7 +511,7 @@ static int at91_gpio_probe(struct udevice *dev)
 {
        struct at91_port_priv *port = dev_get_priv(dev);
        struct at91_port_platdata *plat = dev_get_platdata(dev);
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
        uc_priv->bank_name = plat->bank_name;
        uc_priv->gpio_count = GPIO_PER_BANK;
index 0244c01882863903596f76f153a11cbbaf98dc3e..fbc641d662e4e481c99ab667107d623a71f78317 100644 (file)
@@ -105,7 +105,7 @@ static int bcm2835_gpio_probe(struct udevice *dev)
 {
        struct bcm2835_gpios *gpios = dev_get_priv(dev);
        struct bcm2835_gpio_platdata *plat = dev_get_platdata(dev);
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
        uc_priv->bank_name = "GPIO";
        uc_priv->gpio_count = BCM2835_GPIO_COUNT;
index a69bbd2002e9f62c06f75cb1f1b4b755140eecc2..b6e10587a326d780b09fd413e2b9536d241f20aa 100644 (file)
@@ -34,7 +34,7 @@ static int gpio_to_device(unsigned int gpio, struct gpio_desc *desc)
        for (ret = uclass_first_device(UCLASS_GPIO, &dev);
             dev;
             ret = uclass_next_device(&dev)) {
-               uc_priv = dev->uclass_priv;
+               uc_priv = dev_get_uclass_priv(dev);
                if (gpio >= uc_priv->gpio_base &&
                    gpio < uc_priv->gpio_base + uc_priv->gpio_count) {
                        desc->dev = dev;
@@ -65,7 +65,7 @@ int gpio_lookup_name(const char *name, struct udevice **devp,
             ret = uclass_next_device(&dev)) {
                int len;
 
-               uc_priv = dev->uclass_priv;
+               uc_priv = dev_get_uclass_priv(dev);
                if (numeric != -1) {
                        offset = numeric - uc_priv->gpio_base;
                        /* Allow GPIOs to be numbered from 0 */
@@ -116,7 +116,7 @@ static int dm_gpio_request(struct gpio_desc *desc, const char *label)
        char *str;
        int ret;
 
-       uc_priv = dev->uclass_priv;
+       uc_priv = dev_get_uclass_priv(dev);
        if (uc_priv->name[desc->offset])
                return -EBUSY;
        str = strdup(label);
@@ -195,7 +195,7 @@ int _dm_gpio_free(struct udevice *dev, uint offset)
        struct gpio_dev_priv *uc_priv;
        int ret;
 
-       uc_priv = dev->uclass_priv;
+       uc_priv = dev_get_uclass_priv(dev);
        if (!uc_priv->name[offset])
                return -ENXIO;
        if (gpio_get_ops(dev)->free) {
@@ -232,7 +232,7 @@ int gpio_free(unsigned gpio)
 
 static int check_reserved(struct gpio_desc *desc, const char *func)
 {
-       struct gpio_dev_priv *uc_priv = desc->dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(desc->dev);
 
        if (!uc_priv->name[desc->offset]) {
                printf("%s: %s: error: gpio %s%d not reserved\n",
@@ -402,7 +402,7 @@ const char *gpio_get_bank_info(struct udevice *dev, int *bit_count)
        struct gpio_dev_priv *priv;
 
        /* Must be called on an active device */
-       priv = dev->uclass_priv;
+       priv = dev_get_uclass_priv(dev);
        assert(priv);
 
        *bit_count = priv->gpio_count;
@@ -420,7 +420,7 @@ static const char * const gpio_function[GPIOF_COUNT] = {
 int get_function(struct udevice *dev, int offset, bool skip_unused,
                 const char **namep)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        struct dm_gpio_ops *ops = gpio_get_ops(dev);
 
        BUILD_BUG_ON(GPIOF_COUNT != ARRAY_SIZE(gpio_function));
@@ -468,7 +468,7 @@ int gpio_get_status(struct udevice *dev, int offset, char *buf, int buffsize)
        BUILD_BUG_ON(GPIOF_COUNT != ARRAY_SIZE(gpio_function));
 
        *buf = 0;
-       priv = dev->uclass_priv;
+       priv = dev_get_uclass_priv(dev);
        ret = gpio_get_raw_function(dev, offset, NULL);
        if (ret < 0)
                return ret;
@@ -680,7 +680,7 @@ static int gpio_renumber(struct udevice *removed_dev)
        base = 0;
        uclass_foreach_dev(dev, uc) {
                if (device_active(dev) && dev != removed_dev) {
-                       uc_priv = dev->uclass_priv;
+                       uc_priv = dev_get_uclass_priv(dev);
                        uc_priv->gpio_base = base;
                        base += uc_priv->gpio_count;
                }
@@ -691,7 +691,7 @@ static int gpio_renumber(struct udevice *removed_dev)
 
 static int gpio_post_probe(struct udevice *dev)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
        uc_priv->name = calloc(uc_priv->gpio_count, sizeof(char *));
        if (!uc_priv->name)
@@ -702,7 +702,7 @@ static int gpio_post_probe(struct udevice *dev)
 
 static int gpio_pre_remove(struct udevice *dev)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        int i;
 
        for (i = 0; i < uc_priv->gpio_count; i++) {
index 06530d792e45ffd2f9a5cc396df05cac0dc1adec..7e679a086e3c7abdde640d85d2348d58d2e8a728 100644 (file)
@@ -151,7 +151,7 @@ static int gpio_ich6_ofdata_to_platdata(struct udevice *dev)
 static int ich6_gpio_probe(struct udevice *dev)
 {
        struct ich6_bank_platdata *plat = dev_get_platdata(dev);
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        struct ich6_bank_priv *bank = dev_get_priv(dev);
 
        if (gd->arch.gpio_map) {
index 815407bb03eecac7c4e8c300a1355d874b7051d3..2012f994c8cda7dda9ffc7d4d64cd6c3d536df97 100644 (file)
@@ -266,7 +266,7 @@ static int mxc_gpio_probe(struct udevice *dev)
 {
        struct mxc_bank_info *bank = dev_get_priv(dev);
        struct mxc_gpio_plat *plat = dev_get_platdata(dev);
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        int banknum;
        char name[18], *str;
 
index 19fc451079989781e5192cdea28706e4dc4dafaa..0a1e12419b0ed8071891f681b5c72b92f023e9d2 100644 (file)
@@ -309,7 +309,7 @@ static int omap_gpio_probe(struct udevice *dev)
 {
        struct gpio_bank *bank = dev_get_priv(dev);
        struct omap_gpio_platdata *plat = dev_get_platdata(dev);
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        char name[18], *str;
 
        sprintf(name, "GPIO%d_", plat->bank_index);
index 0a245ba18ad0eb42bdc6b67697dbdfa7fedd20a0..49b1054660ac81d467c6f0d7684d8269ff8a1092 100644 (file)
@@ -296,7 +296,7 @@ static const struct dm_gpio_ops gpio_exynos_ops = {
 
 static int gpio_exynos_probe(struct udevice *dev)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        struct exynos_bank_info *priv = dev->priv;
        struct exynos_gpio_platdata *plat = dev->platdata;
 
index d564c252c7d7336d9f5bcc93d9ac306bd42eb539..a9b1efcd061222220be45b881ec3a119164ab7f8 100644 (file)
@@ -24,7 +24,7 @@ struct gpio_state {
 /* Access routines for GPIO state */
 static u8 *get_gpio_flags(struct udevice *dev, unsigned offset)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        struct gpio_state *state = dev_get_priv(dev);
 
        if (offset >= uc_priv->gpio_count) {
@@ -160,7 +160,7 @@ static const struct dm_gpio_ops gpio_sandbox_ops = {
 
 static int sandbox_gpio_ofdata_to_platdata(struct udevice *dev)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
        uc_priv->gpio_count = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
                                             "num-gpios", 0);
@@ -172,7 +172,7 @@ static int sandbox_gpio_ofdata_to_platdata(struct udevice *dev)
 
 static int gpio_sandbox_probe(struct udevice *dev)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
        if (dev->of_offset == -1) {
                /* Tell the uclass how many GPIOs we have */
index 510123fdf8835f7c4455480a7b45d38a85ece0ef..cf5c62463ea12518751a38ffbc11712f3b421b18 100644 (file)
@@ -261,7 +261,7 @@ static char *gpio_bank_name(int bank)
 static int gpio_sunxi_probe(struct udevice *dev)
 {
        struct sunxi_gpio_platdata *plat = dev_get_platdata(dev);
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
 
        /* Tell the uclass how many GPIOs we have */
        if (plat) {
index f870cdbddf6464a675767ad35ce2910278d32b23..8017e359f543dffb77ce17c97411414ed09afdd7 100644 (file)
@@ -295,7 +295,7 @@ static const struct udevice_id tegra_gpio_ids[] = {
 
 static int gpio_tegra_probe(struct udevice *dev)
 {
-       struct gpio_dev_priv *uc_priv = dev->uclass_priv;
+       struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev);
        struct tegra_port_info *priv = dev->priv;
        struct tegra_gpio_platdata *plat = dev->platdata;
 
index b890806a44ab35ef8b8c4319445967f7c9cbcff4..f2e95c0881a76d82436df7f3114e67a2d5632457 100644 (file)
@@ -330,7 +330,7 @@ int dm_i2c_probe(struct udevice *bus, uint chip_addr, uint chip_flags,
 int dm_i2c_set_bus_speed(struct udevice *bus, unsigned int speed)
 {
        struct dm_i2c_ops *ops = i2c_get_ops(bus);
-       struct dm_i2c_bus *i2c = bus->uclass_priv;
+       struct dm_i2c_bus *i2c = dev_get_uclass_priv(bus);
        int ret;
 
        /*
@@ -351,7 +351,7 @@ int dm_i2c_set_bus_speed(struct udevice *bus, unsigned int speed)
 int dm_i2c_get_bus_speed(struct udevice *bus)
 {
        struct dm_i2c_ops *ops = i2c_get_ops(bus);
-       struct dm_i2c_bus *i2c = bus->uclass_priv;
+       struct dm_i2c_bus *i2c = dev_get_uclass_priv(bus);
 
        if (!ops->get_bus_speed)
                return i2c->speed_hz;
@@ -432,7 +432,7 @@ int i2c_chip_ofdata_to_platdata(const void *blob, int node,
 
 static int i2c_post_probe(struct udevice *dev)
 {
-       struct dm_i2c_bus *i2c = dev->uclass_priv;
+       struct dm_i2c_bus *i2c = dev_get_uclass_priv(dev);
 
        i2c->speed_hz = fdtdec_get_int(gd->fdt_blob, dev->of_offset,
                                     "clock-frequency", 100000);
index a943aa6382142b4ebf411bc7c11ad7a9dbd9d80a..d6adc0f721b85cb6b352d1993641da444aa62919 100644 (file)
@@ -50,7 +50,7 @@ static int get_emul(struct udevice *dev, struct udevice **devp,
 static int sandbox_i2c_xfer(struct udevice *bus, struct i2c_msg *msg,
                            int nmsgs)
 {
-       struct dm_i2c_bus *i2c = bus->uclass_priv;
+       struct dm_i2c_bus *i2c = dev_get_uclass_priv(bus);
        struct dm_i2c_ops *ops;
        struct udevice *emul, *dev;
        bool is_read;
index 5846e76c49525549f784ef6645834fa6b6611e5d..1c29ba83dee2df54db46f2f1f3b657ac1d4ca9cd 100644 (file)
@@ -1087,7 +1087,7 @@ static int cros_ec_decode_fdt(const void *blob, int node,
 #ifdef CONFIG_DM_CROS_EC
 int cros_ec_register(struct udevice *dev)
 {
-       struct cros_ec_dev *cdev = dev->uclass_priv;
+       struct cros_ec_dev *cdev = dev_get_uclass_priv(dev);
        const void *blob = gd->fdt_blob;
        int node = dev->of_offset;
        char id[MSG_BYTES];
@@ -1128,7 +1128,7 @@ int cros_ec_init(const void *blob, struct cros_ec_dev **cros_ecp)
        ret = uclass_get_device(UCLASS_CROS_EC, 0, &udev);
        if (ret)
                return ret;
-       dev = udev->uclass_priv;
+       dev = dev_get_uclass_priv(udev);
        return 0;
 #else
        int node = 0;
@@ -1610,7 +1610,7 @@ static int do_cros_ec(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
                printf("Cannot get cros-ec device (err=%d)\n", ret);
                return 1;
        }
-       dev = udev->uclass_priv;
+       dev = dev_get_uclass_priv(udev);
 #else
        /* Just use the last allocated device; there should be only one */
        if (!last_dev) {
index f9bc9750d4cb2e617eab6fb4f4dd126d64c9e2b5..cee9a0f51182704b644454b7d92b9b839ea3a831 100644 (file)
@@ -28,7 +28,7 @@ static int cros_ec_i2c_command(struct udevice *udev, uint8_t cmd,
                               int cmd_version, const uint8_t *dout,
                               int dout_len, uint8_t **dinp, int din_len)
 {
-       struct cros_ec_dev *dev = udev->uclass_priv;
+       struct cros_ec_dev *dev = dev_get_uclass_priv(udev);
        /* version8, cmd8, arglen8, out8[dout_len], csum8 */
        int out_bytes = dout_len + 4;
        /* response8, arglen8, in8[din_len], checksum8 */
index 99cc5297cfb866acddd6495c088b681171d2c8f1..282d8d843f645bd77fc401f7d8c9da4fab59b717 100644 (file)
@@ -470,7 +470,7 @@ static int process_cmd(struct ec_state *ec,
 #ifdef CONFIG_DM_CROS_EC
 int cros_ec_sandbox_packet(struct udevice *udev, int out_bytes, int in_bytes)
 {
-       struct cros_ec_dev *dev = udev->uclass_priv;
+       struct cros_ec_dev *dev = dev_get_uclass_priv(udev);
        struct ec_state *ec = dev_get_priv(dev->dev);
 #else
 int cros_ec_sandbox_packet(struct cros_ec_dev *dev, int out_bytes,
index 9359c56e876d03ed2f798e137df43975afcd2f5d..98e8f604c64a7140c480e33c98fc20a18315297c 100644 (file)
@@ -23,7 +23,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 int cros_ec_spi_packet(struct udevice *udev, int out_bytes, int in_bytes)
 {
-       struct cros_ec_dev *dev = udev->uclass_priv;
+       struct cros_ec_dev *dev = dev_get_uclass_priv(udev);
        struct spi_slave *slave = dev_get_parentdata(dev->dev);
        int rv;
 
@@ -66,7 +66,7 @@ int cros_ec_spi_command(struct udevice *udev, uint8_t cmd, int cmd_version,
                     const uint8_t *dout, int dout_len,
                     uint8_t **dinp, int din_len)
 {
-       struct cros_ec_dev *dev = udev->uclass_priv;
+       struct cros_ec_dev *dev = dev_get_uclass_priv(udev);
        struct spi_slave *slave = dev_get_parentdata(dev->dev);
        int in_bytes = din_len + 4;     /* status, length, checksum, trailer */
        uint8_t *out;
index 376d815026897c00763a04ea44afb7d4e0613368..fcf67e01d6b053f7bb5c912064cae0668a6669c1 100644 (file)
@@ -23,7 +23,7 @@ struct spi_flash *spi_flash_probe(unsigned int bus, unsigned int cs,
        if (spi_flash_probe_bus_cs(bus, cs, max_hz, spi_mode, &dev))
                return NULL;
 
-       return dev->uclass_priv;
+       return dev_get_uclass_priv(dev);
 }
 
 void spi_flash_free(struct spi_flash *flash)
index 41037238590b650cfe12cfe59c2edd960170db27..c2dac66f03036bb32f4d4565cb1a68d6ec782aeb 100644 (file)
@@ -458,7 +458,7 @@ void spi_flash_free(struct spi_flash *flash)
 static int spi_flash_std_read(struct udevice *dev, u32 offset, size_t len,
                              void *buf)
 {
-       struct spi_flash *flash = dev->uclass_priv;
+       struct spi_flash *flash = dev_get_uclass_priv(dev);
 
        return spi_flash_cmd_read_ops(flash, offset, len, buf);
 }
@@ -466,14 +466,14 @@ static int spi_flash_std_read(struct udevice *dev, u32 offset, size_t len,
 int spi_flash_std_write(struct udevice *dev, u32 offset, size_t len,
                        const void *buf)
 {
-       struct spi_flash *flash = dev->uclass_priv;
+       struct spi_flash *flash = dev_get_uclass_priv(dev);
 
        return spi_flash_cmd_write_ops(flash, offset, len, buf);
 }
 
 int spi_flash_std_erase(struct udevice *dev, u32 offset, size_t len)
 {
-       struct spi_flash *flash = dev->uclass_priv;
+       struct spi_flash *flash = dev_get_uclass_priv(dev);
 
        return spi_flash_cmd_erase_ops(flash, offset, len);
 }
@@ -484,7 +484,7 @@ int spi_flash_std_probe(struct udevice *dev)
        struct dm_spi_slave_platdata *plat = dev_get_parent_platdata(dev);
        struct spi_flash *flash;
 
-       flash = dev->uclass_priv;
+       flash = dev_get_uclass_priv(dev);
        flash->dev = dev;
        debug("%s: slave=%p, cs=%d\n", __func__, slave, plat->cs);
        return spi_flash_probe_slave(slave, flash);
index 2de373773975031fc62c295ea3e4c3c09208e9fb..b239691efe945ba77d02429243a81186ded32454 100644 (file)
@@ -251,7 +251,7 @@ static int serial_post_probe(struct udevice *dev)
 {
        struct dm_serial_ops *ops = serial_get_ops(dev);
 #ifdef CONFIG_DM_STDIO
-       struct serial_dev_priv *upriv = dev->uclass_priv;
+       struct serial_dev_priv *upriv = dev_get_uclass_priv(dev);
        struct stdio_dev sdev;
 #endif
        int ret;
@@ -299,7 +299,7 @@ static int serial_post_probe(struct udevice *dev)
 static int serial_pre_remove(struct udevice *dev)
 {
 #ifdef CONFIG_SYS_STDIO_DEREGISTER
-       struct serial_dev_priv *upriv = dev->uclass_priv;
+       struct serial_dev_priv *upriv = dev_get_uclass_priv(dev);
 
        if (stdio_deregister_dev(upriv->sdev, 0))
                return -EPERM;
index 63a6217cc62d0085b6c4ba259415fae514651ba9..866c48f243929406ed6f12512be481603644cb86 100644 (file)
@@ -50,7 +50,7 @@ int spi_claim_bus(struct spi_slave *slave)
        struct udevice *dev = slave->dev;
        struct udevice *bus = dev->parent;
        struct dm_spi_ops *ops = spi_get_ops(bus);
-       struct dm_spi_bus *spi = bus->uclass_priv;
+       struct dm_spi_bus *spi = dev_get_uclass_priv(bus);
        int speed;
        int ret;
 
@@ -110,7 +110,7 @@ int spi_child_post_bind(struct udevice *dev)
 
 int spi_post_probe(struct udevice *bus)
 {
-       struct dm_spi_bus *spi = bus->uclass_priv;
+       struct dm_spi_bus *spi = dev_get_uclass_priv(bus);
 
        spi->max_hz = fdtdec_get_int(gd->fdt_blob, bus->of_offset,
                                     "spi-max-frequency", 0);
index 7a48eb88b8ccf1ce1b52d8ffb898d8b2610c4e56..698095493ed4d26d98ab6a3a1953b453e5e95b20 100644 (file)
@@ -237,6 +237,16 @@ void *dev_get_priv(struct udevice *dev);
  */
 struct udevice *dev_get_parent(struct udevice *child);
 
+/**
+ * dev_get_uclass_priv() - Get the private uclass data for a device
+ *
+ * This checks that dev is not NULL, but no other checks for now
+ *
+ * @dev                Device to check
+ * @return private uclass data for this device, or NULL if none
+ */
+void *dev_get_uclass_priv(struct udevice *dev);
+
 /**
  * dev_get_of_data() - get the device tree data used to bind a device
  *
index 31b038991e57fb56525354e976ba922706bd8630..6fd73fae4ccc01c3c1aa5a45023b04dd22e24b37 100644 (file)
@@ -64,8 +64,8 @@ struct dm_i2c_chip {
  * bus can operate at different speeds (measured in Hz, typically 100KHz
  * or 400KHz).
  *
- * To obtain this structure, use bus->uclass_priv where bus is the I2C
- * bus udevice.
+ * To obtain this structure, use dev_get_uclass_priv(bus) where bus is the
+ * I2C bus udevice.
  *
  * @speed_hz: Bus speed in hertz (typically 100000)
  */
@@ -340,7 +340,7 @@ struct dm_i2c_ops {
         * The bus speed value will be updated by the uclass if this function
         * does not return an error. This method is optional - if it is not
         * provided then the driver can read the speed from
-        * bus->uclass_priv->speed_hz
+        * dev_get_uclass_priv(bus)->speed_hz
         *
         * @bus:        Bus to adjust
         * @speed:      Requested speed in Hz
@@ -354,7 +354,7 @@ struct dm_i2c_ops {
         * Normally this can be provided by the uclass, but if you want your
         * driver to check the bus speed by looking at the hardware, you can
         * implement that here. This method is optional. This method would
-        * normally be expected to return bus->uclass_priv->speed_hz.
+        * normally be expected to return dev_get_uclass_priv(bus)->speed_hz.
         *
         * @bus:        Bus to check
         * @return speed of selected I2C bus in Hz, -ve on error
index eccda0974da6d6effbdd931c75dff71f36bdaaf6..7be28e4701124256863fd51f01e80d544c6ba8ad 100644 (file)
@@ -179,7 +179,7 @@ static int dm_test_autoprobe(struct dm_test_state *dms)
                ut_assertok(uclass_find_device(UCLASS_TEST, i, &dev));
                ut_assert(dev);
 
-               priv = dev->uclass_priv;
+               priv = dev_get_uclass_priv(dev);
                ut_assert(priv);
                ut_asserteq(expected_base_add, priv->base_add);
 
index 017e097928c7c29c2aadfd0c80f187833d258574..1b9a3fdfa61dcb223465d61cab788d3760ad5efd 100644 (file)
@@ -47,7 +47,7 @@ static int test_post_probe(struct udevice *dev)
        struct udevice *prev = list_entry(dev->uclass_node.prev,
                                            struct udevice, uclass_node);
 
-       struct dm_test_uclass_perdev_priv *priv = dev->uclass_priv;
+       struct dm_test_uclass_perdev_priv *priv = dev_get_uclass_priv(dev);
        struct uclass *uc = dev->uclass;
 
        dm_testdrv_op_count[DM_TEST_OP_POST_PROBE]++;
@@ -58,7 +58,7 @@ static int test_post_probe(struct udevice *dev)
                return 0;
        if (&prev->uclass_node != &uc->dev_head) {
                struct dm_test_uclass_perdev_priv *prev_uc_priv
-                               = prev->uclass_priv;
+                               = dev_get_uclass_priv(prev);
                struct dm_test_pdata *pdata = prev->platdata;
 
                ut_assert(pdata);