#include "common.h"
 #include "of.h"
 
+static int brcmf_of_get_country_codes(struct device *dev,
+                                     struct brcmf_mp_device *settings)
+{
+       struct device_node *np = dev->of_node;
+       struct brcmfmac_pd_cc_entry *cce;
+       struct brcmfmac_pd_cc *cc;
+       int count;
+       int i;
+
+       count = of_property_count_strings(np, "brcm,ccode-map");
+       if (count < 0) {
+               /* The property is optional, so return success if it doesn't
+                * exist. Otherwise propagate the error code.
+                */
+               return (count == -EINVAL) ? 0 : count;
+       }
+
+       cc = devm_kzalloc(dev, sizeof(*cc) + count * sizeof(*cce), GFP_KERNEL);
+       if (!cc)
+               return -ENOMEM;
+
+       cc->table_size = count;
+
+       for (i = 0; i < count; i++) {
+               const char *map;
+
+               cce = &cc->table[i];
+
+               if (of_property_read_string_index(np, "brcm,ccode-map",
+                                                 i, &map))
+                       continue;
+
+               /* String format e.g. US-Q2-86 */
+               if (sscanf(map, "%2c-%2c-%d", cce->iso3166, cce->cc,
+                          &cce->rev) != 3)
+                       brcmf_err("failed to read country map %s\n", map);
+               else
+                       brcmf_dbg(INFO, "%s-%s-%d\n", cce->iso3166, cce->cc,
+                                 cce->rev);
+       }
+
+       settings->country_codes = cc;
+
+       return 0;
+}
+
 void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type,
                    struct brcmf_mp_device *settings)
 {
        struct brcmfmac_sdio_pd *sdio = &settings->bus.sdio;
        struct device_node *root, *np = dev->of_node;
        int irq;
+       int err;
        u32 irqf;
        u32 val;
 
                of_node_put(root);
        }
 
-       if (!np || bus_type != BRCMF_BUSTYPE_SDIO ||
-           !of_device_is_compatible(np, "brcm,bcm4329-fmac"))
+       if (!np || !of_device_is_compatible(np, "brcm,bcm4329-fmac"))
+               return;
+
+       err = brcmf_of_get_country_codes(dev, settings);
+       if (err)
+               brcmf_err("failed to get OF country code map (err=%d)\n", err);
+
+       if (bus_type != BRCMF_BUSTYPE_SDIO)
                return;
 
        if (of_property_read_u32(np, "brcm,drive-strength", &val) == 0)