/* prevents concurrent reads of temperature and ADC */
        struct mutex                    mutex;
        struct thermal_zone_device      *tzd;
@@ -561,6 +569,9 @@ static int sun4i_gpadc_probe_dt(struct platform_device 
*pdev,
        struct resource *mem;
        void __iomem *base;
        int ret;
+       struct nvmem_cell *cell;
+       ssize_t cell_size;
+       u64 *cell_data;
        info->data = of_device_get_match_data(&pdev->dev);
        if (!info->data)
@@ -575,6 +586,39 @@ static int sun4i_gpadc_probe_dt(struct platform_device 
*pdev,
        if (IS_ERR(base))
                return PTR_ERR(base);
+       info->has_calibration_data[0] = false;
+       info->has_calibration_data[1] = false;
+
+       if (!info->data->supports_nvmem)
+               goto no_nvmem;
+
+       cell = nvmem_cell_get(&pdev->dev, "calibration");
+       if (IS_ERR(cell)) {
+               if (PTR_ERR(cell) == -EPROBE_DEFER)
+                       return PTR_ERR(cell);
+               goto no_nvmem;

goto considered evil ? :)

this was a suggestion from Jonatan in version one, to make the code better
readable.

Isn't

if (info->data->supports_nvmem && IS_ERR(cell = nvmem_cell_get()))

pretty much the same thing?

Maxime

I would say :

if (info->data->supports_nvmem && !IS_ERR(cell = nvmem_cell_get())) is

the same.
This would require an else if statement like this:

else if (info->data->supports_nvmem && PTR_ERR(cell) == -EPROBE_DEFER)
                return PTR_ERR(cell);

to avoid errors if the thermal sensor is probed before the sid driver.

Philipp

--
You received this message because you are subscribed to the Google Groups 
"linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to linux-sunxi+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to