diff options
Diffstat (limited to 'drivers/aiodev/imx_thermal.c')
-rw-r--r-- | drivers/aiodev/imx_thermal.c | 44 |
1 files changed, 10 insertions, 34 deletions
diff --git a/drivers/aiodev/imx_thermal.c b/drivers/aiodev/imx_thermal.c index 6dd2baa36c..2693ad05e0 100644 --- a/drivers/aiodev/imx_thermal.c +++ b/drivers/aiodev/imx_thermal.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0-only /* * imx_thermal * @@ -8,15 +9,6 @@ * (C) Copyright 2014-2015 Freescale Semiconductor, Inc. * Author: Nitin Garg <nitin.garg@freescale.com> * Ye Li <Ye.Li@freescale.com> - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 - * as published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. */ #include <common.h> @@ -30,14 +22,14 @@ #include <linux/math64.h> #include <linux/log2.h> #include <linux/clk.h> -#include <mach/imx6-anadig.h> +#include <linux/nvmem-consumer.h> +#include <mach/imx/imx6-anadig.h> #include <io.h> #include <aiodev.h> #include <mfd/syscon.h> #define FACTOR0 10000000 #define MEASURE_FREQ 327 -#define OCOTP_ANA1_OFFSET (0xE * sizeof(uint32_t)) struct imx_thermal_data { int c1, c2; @@ -114,36 +106,19 @@ static int imx_thermal_read(struct aiochannel *chan, int *val) return 0; } -static int imx_thermal_probe(struct device_d *dev) +static int imx_thermal_probe(struct device *dev) { uint32_t ocotp_ana1; - struct device_node *node; struct imx_thermal_data *imx_thermal; - struct cdev *ocotp; int t1, n1, t2, n2; int ret; - node = of_parse_phandle(dev->device_node, "fsl,tempmon-data", 0); - if (!node) { - dev_err(dev, "No calibration data source\n"); - return -ENODEV; - } - - ocotp = cdev_by_device_node(node); - if (!ocotp) { - dev_err(dev, "No OCOTP character device\n"); - return -ENODEV; - } - - ret = cdev_read(ocotp, &ocotp_ana1, sizeof(ocotp_ana1), - OCOTP_ANA1_OFFSET, 0); - if (ret != sizeof(ocotp_ana1)) { - dev_err(dev, "Failed to read calibration data\n"); - return ret < 0 ? ret : -EIO; - } + ret = nvmem_cell_read_variable_le_u32(dev, "calib", &ocotp_ana1); + if (ret) + return ret; imx_thermal = xzalloc(sizeof(*imx_thermal)); - imx_thermal->base = syscon_base_lookup_by_phandle(dev->device_node, + imx_thermal->base = syscon_base_lookup_by_phandle(dev->of_node, "fsl,tempmon"); if (IS_ERR(imx_thermal->base)) { dev_err(dev, "Could not get ANATOP address\n"); @@ -200,9 +175,10 @@ static const struct of_device_id of_imx_thermal_match[] = { { .compatible = "fsl,imx6sx-tempmon", }, { /* end */ } }; +MODULE_DEVICE_TABLE(of, of_imx_thermal_match); -static struct driver_d imx_thermal_driver = { +static struct driver imx_thermal_driver = { .name = "imx_thermal", .probe = imx_thermal_probe, .of_compatible = DRV_OF_COMPAT(of_imx_thermal_match), |