misc: Add IHS FPGA driver
[oweals/u-boot.git] / drivers / adc / adc-uclass.c
index 9233fcdb6c1edb67befd534b681c0db80c26024b..738c1eabdc347f5fa03c81983e1544be1e303e1c 100644 (file)
@@ -1,8 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * Copyright (C) 2015 Samsung Electronics
  * Przemyslaw Marczak <p.marczak@samsung.com>
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
@@ -14,8 +13,6 @@
 #include <adc.h>
 #include <power/regulator.h>
 
-DECLARE_GLOBAL_DATA_PTR;
-
 #define ADC_UCLASS_PLATDATA_SIZE       sizeof(struct adc_uclass_platdata)
 #define CHECK_NUMBER                   true
 #define CHECK_MASK                     (!CHECK_NUMBER)
@@ -64,7 +61,7 @@ static int adc_supply_enable(struct udevice *dev)
        }
 
        if (ret)
-               error("%s: can't enable %s-supply!", dev->name, supply_type);
+               pr_err("%s: can't enable %s-supply!", dev->name, supply_type);
 
        return ret;
 }
@@ -267,10 +264,8 @@ static int adc_vdd_platdata_update(struct udevice *dev)
         * will bind before its supply regulator device, then the below 'get'
         * will return an error.
         */
-       ret = device_get_supply_regulator(dev, "vdd-supply",
-                                         &uc_pdata->vdd_supply);
-       if (ret)
-               return ret;
+       if (!uc_pdata->vdd_supply)
+               return 0;
 
        ret = regulator_get_value(uc_pdata->vdd_supply);
        if (ret < 0)
@@ -286,10 +281,8 @@ static int adc_vss_platdata_update(struct udevice *dev)
        struct adc_uclass_platdata *uc_pdata = dev_get_uclass_platdata(dev);
        int ret;
 
-       ret = device_get_supply_regulator(dev, "vss-supply",
-                                         &uc_pdata->vss_supply);
-       if (ret)
-               return ret;
+       if (!uc_pdata->vss_supply)
+               return 0;
 
        ret = regulator_get_value(uc_pdata->vss_supply);
        if (ret < 0)
@@ -305,14 +298,11 @@ int adc_vdd_value(struct udevice *dev, int *uV)
        struct adc_uclass_platdata *uc_pdata = dev_get_uclass_platdata(dev);
        int ret, value_sign = uc_pdata->vdd_polarity_negative ? -1 : 1;
 
-       if (!uc_pdata->vdd_supply)
-               goto nodev;
-
        /* Update the regulator Value. */
        ret = adc_vdd_platdata_update(dev);
        if (ret)
                return ret;
-nodev:
+
        if (uc_pdata->vdd_microvolts == -ENODATA)
                return -ENODATA;
 
@@ -326,14 +316,11 @@ int adc_vss_value(struct udevice *dev, int *uV)
        struct adc_uclass_platdata *uc_pdata = dev_get_uclass_platdata(dev);
        int ret, value_sign = uc_pdata->vss_polarity_negative ? -1 : 1;
 
-       if (!uc_pdata->vss_supply)
-               goto nodev;
-
        /* Update the regulator Value. */
        ret = adc_vss_platdata_update(dev);
        if (ret)
                return ret;
-nodev:
+
        if (uc_pdata->vss_microvolts == -ENODATA)
                return -ENODATA;
 
@@ -345,20 +332,24 @@ nodev:
 static int adc_vdd_platdata_set(struct udevice *dev)
 {
        struct adc_uclass_platdata *uc_pdata = dev_get_uclass_platdata(dev);
-       int ret, offset = dev->of_offset;
-       const void *fdt = gd->fdt_blob;
+       int ret;
        char *prop;
 
        prop = "vdd-polarity-negative";
-       uc_pdata->vdd_polarity_negative = fdtdec_get_bool(fdt, offset, prop);
+       uc_pdata->vdd_polarity_negative = dev_read_bool(dev, prop);
+
+       /* Optionally get regulators */
+       ret = device_get_supply_regulator(dev, "vdd-supply",
+                                         &uc_pdata->vdd_supply);
+       if (!ret)
+               return adc_vdd_platdata_update(dev);
 
-       ret = adc_vdd_platdata_update(dev);
        if (ret != -ENOENT)
                return ret;
 
        /* No vdd-supply phandle. */
        prop  = "vdd-microvolts";
-       uc_pdata->vdd_microvolts = fdtdec_get_int(fdt, offset, prop, -ENODATA);
+       uc_pdata->vdd_microvolts = dev_read_u32_default(dev, prop, -ENODATA);
 
        return 0;
 }
@@ -366,20 +357,23 @@ static int adc_vdd_platdata_set(struct udevice *dev)
 static int adc_vss_platdata_set(struct udevice *dev)
 {
        struct adc_uclass_platdata *uc_pdata = dev_get_uclass_platdata(dev);
-       int ret, offset = dev->of_offset;
-       const void *fdt = gd->fdt_blob;
+       int ret;
        char *prop;
 
        prop = "vss-polarity-negative";
-       uc_pdata->vss_polarity_negative = fdtdec_get_bool(fdt, offset, prop);
+       uc_pdata->vss_polarity_negative = dev_read_bool(dev, prop);
+
+       ret = device_get_supply_regulator(dev, "vss-supply",
+                                         &uc_pdata->vss_supply);
+       if (!ret)
+               return adc_vss_platdata_update(dev);
 
-       ret = adc_vss_platdata_update(dev);
        if (ret != -ENOENT)
                return ret;
 
        /* No vss-supply phandle. */
        prop = "vss-microvolts";
-       uc_pdata->vss_microvolts = fdtdec_get_int(fdt, offset, prop, -ENODATA);
+       uc_pdata->vss_microvolts = dev_read_u32_default(dev, prop, -ENODATA);
 
        return 0;
 }
@@ -391,12 +385,12 @@ static int adc_pre_probe(struct udevice *dev)
        /* Set ADC VDD platdata: polarity, uV, regulator (phandle). */
        ret = adc_vdd_platdata_set(dev);
        if (ret)
-               error("%s: Can't update Vdd. Error: %d", dev->name, ret);
+               pr_err("%s: Can't update Vdd. Error: %d", dev->name, ret);
 
        /* Set ADC VSS platdata: polarity, uV, regulator (phandle). */
        ret = adc_vss_platdata_set(dev);
        if (ret)
-               error("%s: Can't update Vss. Error: %d", dev->name, ret);
+               pr_err("%s: Can't update Vss. Error: %d", dev->name, ret);
 
        return 0;
 }